Camera HAL की जांच से जुड़ी चेकलिस्ट

इस पेज पर, Android कैमरे के हार्डवेयर एब्स्ट्रैक्शन लेयर (एचएएल) का आकलन करने के लिए उपलब्ध सभी टेस्ट की सूची दी गई है. यह ओरिजनल इक्विपमेंट मैन्युफ़ैक्चरर (OEM) और ऐप्लिकेशन प्रोसेसर (एपी) वेंडर के लिए है, ताकि वे कम से कम गड़बड़ियों के साथ कैमरा एचएएल को सही तरीके से लागू कर सकें. हालांकि, Android के साथ काम करने से जुड़े टेस्ट सुइट (CTS) में इसे शामिल करना ज़रूरी नहीं है, लेकिन इससे कैमरे के टेस्ट कवरेज में काफ़ी बढ़ोतरी होती है. साथ ही, इससे संभावित गड़बड़ियों की पहचान की जा सकती है.

इन टेस्ट को पास करके, OEM यह पुष्टि करते हैं कि उन्होंने Android कैमरे के हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल) 3 इंटरफ़ेस को सही तरीके से इंटिग्रेट किया है या नहीं. अगर डिवाइस में चेकलिस्ट के सभी आइटम मौजूद हैं, तो Android Camera HAL इंटरफ़ेस के हिसाब से, डिवाइस को पूरी तरह से लागू माना जा सकता है. इससे, डिवाइस पर android.hardware.camera2 पैकेज ठीक से काम कर पाएगा. इस पैकेज के आधार पर, कैमरे वाले ऐप्लिकेशन काम करते हैं.

Camera HAL3 की खास जानकारी

Android Camera HAL3 स्पेसिफ़िकेशन, डिवाइसों के लिए ज़रूरी शर्तों के बारे में जानकारी का आधिकारिक सोर्स है. इस पेज पर, सभी टेस्ट की खास जानकारी दी गई है. इनका इस्तेमाल चेकलिस्ट के तौर पर किया जा सकता है. कैमरा एचएएल लागू करने वाले लोगों या कंपनियों (जैसे, एपी के वेंडर) को Camera HAL3 की खास बातों को ध्यान से पढ़ना चाहिए और यह पक्का करना चाहिए कि उनके डिवाइस इन खास बातों के मुताबिक हों.

एचएएल के मौजूदा स्पेसिफ़िकेशन के बारे में, Android 5.0 और उसके बाद के वर्शन के लिए जनरल Android Platform Development Kit (PDK) में मौजूद इन फ़ाइलों में बताया गया है:

कैमरे के टेस्ट टाइप

यहां Android के नए कैमरे के लिए उपलब्ध मुख्य टेस्ट के साथ-साथ, उनसे जुड़े निर्देशों के रेफ़रंस दिए गए हैं:

इन सभी तरह के टेस्ट के बारे में यहां पूरी जानकारी दी गई है. इन टेस्ट को समय के हिसाब से इस क्रम में दिखाया गया है कि OEM को इन्हें किस क्रम में पूरा करना है.

उदाहरण के लिए, अगर कोई डिवाइस नेटिव टेस्ट पास नहीं करता है, तो वह ज़रूर ही बाद में होने वाले कंपैटिबिलिटी टेस्ट सुइट (CTS) टेस्ट पास नहीं करेगा. अगर कोई डिवाइस CTS की जांच में पास नहीं होता है, तो इमेज टेस्ट सुइट (ITS) की जांच करने का कोई फ़ायदा नहीं है. हमारा सुझाव है कि अगले टेस्ट सेट पर जाने से पहले, हर तरह के टेस्ट में हुई गड़बड़ियों को ठीक कर लें.

Vendor Test Suite (VTS) के टेस्ट

Android Vendor Test Suite (VTS) एक टेस्टिंग सुइट है, जो HIDL इंटरफ़ेस लेवल पर काम करता है. VTS का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, Vendor Test Suite देखें.

Compatibility Test Suite (CTS) के टेस्ट

Camera Android Compatibility Test Suite (CTS) के टेस्ट, डिवाइस के साथ काम करने की सुविधा पर फ़ोकस करते हैं. टेस्टिंग एनवायरमेंट सेट अप करने के बारे में जानने के लिए, CTS सेट अप करना लेख पढ़ें.

कैमरे के सीटीएस टेस्ट का शुरुआती पाथ: platform/cts है.

बाहरी कैमरों (जैसे, यूएसबी वेबकैम) के साथ काम करने वाले डिवाइसों के लिए कैमरा सीटीएस चलाते समय, आपके पास प्लग इन किया गया डिवाइस होना चाहिए. ऐसा न करने पर, जांच अपने-आप बंद हो जाएगी. बाहरी कैमरों के उदाहरणों में ये शामिल हैं: Logitech HD Pro Webcam C920 और Microsoft LifeCam HD-3000.

सीटीएस चलाने के सामान्य निर्देशों के लिए, सीटीएस के बारे में जानकारी और इसके सबपेज देखें.

android.hardware.Camera एपीआई के लिए सीटीएस टेस्ट

कैमरे की जांच करने के लिए, cts/tests/tests/ में जाएं:

  • hardware/src/android/hardware/cts/CameraTest.java
  • hardware/src/android/hardware/cts/CameraGLTest.java
  • hardware/src/android/hardware/cts/Camera_SizeTest.java
  • permission/src/android/permission/cts/CameraPermissionTest.java

android.hardware.camera2 एपीआई के लिए सीटीएस टेस्ट

कैमरे की जांच करने के लिए, cts/tests/tests/ में जाएं:

  • hardware/src/android/hardware/camera2/cts/*
  • permission/src/android/permission/cts/Camera2PermissionTest.java

सीटीएस की पुष्टि करने वाले टूल से कैमरे की जांच करना

कैमरे की जांच करने के लिए, यहां जाएं: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

इमेज टेस्ट सुइट (ITS) के टेस्ट

कैमरे की इमेज टेस्ट सुइट (आईटीएस) की जांच में, इमेज की सटीक होने की जांच की जाती है. टेस्ट करने के लिए, यूएसबी के ज़रिए कनेक्ट किए गए Android डिवाइस के साथ, वर्कस्टेशन पर Python स्क्रिप्ट चलाएं.

कैमरा ITS इंफ़्रास्ट्रक्चर और टेस्ट, cts/apps/CameraITS डायरेक्ट्री में मौजूद हैं. हर टेस्ट, tests/scene# सबडायरेक्ट्री में मौजूद होता है.

टेस्ट सेट अप करने और चलाने के तरीके के बारे में ज़्यादा जानने के लिए, कैमरा ITS देखें.

सीन और टेस्ट के बारे में जानकारी के लिए, कैमरे के आईटीएस टेस्ट देखें.

आईटीएस टेस्ट में, ऐप्लिकेशन को पास या फ़ेल किया जाता है. हर सीन फ़ोल्डर में, ज़रूरी सभी टेस्ट पास होने चाहिए. ज़रूरी नहीं किए गए टेस्ट में पास नहीं होने पर भी, CtsVerifier में पास के तौर पर गिना जा सकता है.

ITS, उन स्थितियों की जांच करता है जिनकी जांच CTS में नहीं की जाती. साथ ही, यह HAL 3.2 टेस्ट प्लान का एक अहम कॉम्पोनेंट है.

मीडिया फ़्रेमवर्क टेस्ट

MediaFrameworkTest में, कैमरे से जुड़े सभी मीडिया टेस्ट पास करें. कृपया ध्यान दें कि इन टेस्ट के लिए, Android डिवाइस पर mediaframeworktest.apk इंस्टॉल होना ज़रूरी है. आपको make mediaframeworktest करना होगा. इसके बाद, .apk फ़ाइल को इंस्टॉल करने के लिए adb का इस्तेमाल करना होगा. निर्देशों के उदाहरण यहां दिए गए हैं.

कैमरे से जुड़े मीडिया फ़्रेमवर्क के टेस्ट के लिए शुरुआती पाथ यह है: platform/frameworks/base

जांचों का सोर्स कोड यहां देखें: frameworks/base/media/tests/MediaFrameworkTest

इन टेस्ट को सेट अप करने के लिए:

make mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk

यहां name वैरिएबल, वेंडर के प्रॉडक्ट वाली डायरेक्ट्री को दिखाता है.

सभी टेस्ट, यहां दी गई डायरेक्ट्री या उसकी सब-डायरेक्ट्री में मौजूद होते हैं:

frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest

हर सबडायरेक्ट्री, टेस्ट की एक क्लास दिखाती है:

  • functional/
  • integration/
  • performance/
  • power/
  • stress/
  • unit/

मीडिया फ़्रेमवर्क की जांच करना

सभी उपलब्ध टेस्ट देखने के लिए:

adb shell pm list instrumentation

इससे आपको इस तरह के नतीजे मिलेंगे:

instrumentation:com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaRecorderStressTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
(target=com.android.mediaframeworktest)

हर टेस्ट लाइन में instrumentation: और (target=com.android.mediaframeworktest) के बीच मौजूद कॉम्पोनेंट की पहचान करें और उसे निकालें. कॉम्पोनेंट में टारगेट पैकेज का नाम (com.android.mediaframeworktest) और टेस्ट रनर का नाम (MediaFrameworkTestRunner) शामिल होता है.

उदाहरण के लिए:

com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
com.android.mediaframeworktest/.MediaRecorderStressTestRunner
com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner

इसके बाद, हर कॉम्पोनेंट को adb shell am instrument में इस तरह पास किया जा सकता है:

adb shell am instrument -w component.name

जहां component.name, ऊपर निकाली गई वैल्यू के बराबर हो. उदाहरण के लिए:

adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

कृपया ध्यान दें कि क्लास पाथ, Java पैकेज और क्लास का नाम होता है. हालांकि, यह ज़रूरी नहीं है कि इंस्ट्रूमेंटेशन पैकेज, Java पैकेज जैसा ही हो. पक्का करें कि कॉम्पोनेंट के नाम को जोड़ते समय, आपने AndroidManifest.xml पैकेज का इस्तेमाल किया हो, न कि उस Java पैकेज का जिसमें टेस्ट रनर क्लास मौजूद है.

टेस्ट की एक क्लास चलाने के लिए, -e क्लास आर्ग्युमेंट पास करें, जैसे कि:

adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

किसी टेस्ट क्लास में सिर्फ़ एक तरीका चलाने के लिए, क्लास के नाम के बाद पाउंड (#) का निशान और तरीका का नाम (इस मामले में, testConnectPro) जोड़ें. जैसे:

adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

मीडिया सेटिंग के फ़ंक्शन की जांच

यहां फ़ंक्शनल टेस्ट के चलने का उदाहरण दिया गया है. इस टेस्ट से, कैमरे की सेटिंग के अलग-अलग कॉम्बिनेशन की बुनियादी सुविधाओं की पुष्टि की जाती है. (जैसे, फ़्लैश, एक्सपोज़र, WB, सीन, पिक्चर साइज़, और जियोटैग)

टेस्ट कमांड चलाएं:

adb shell am instrument -w -r  -e delay_msec 15 -e log true -e class com.android.mediaframeworktest.functional.camera.CameraPairwiseTest com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner

मीडिया इंटिग्रेशन टेस्ट

यहां इंटिग्रेशन टेस्ट के रन का उदाहरण दिया गया है. इस मामले में, mediaframeworktest/integration/CameraBinderTest.java और mediaframeworktest/CameraStressTestRunner.java:

adb  shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'

अगर यह कामयाब होता है, तो आपको ऐसा आउटपुट दिखेगा:

-----

com.android.mediaframeworktest.integration.CameraBinderTest:...........
Test results for CameraStressTestRunner=...........
Time: 3.328

OK (11 tests)

-----

मीडिया की परफ़ॉर्मेंस की जांच

कैमरे की झलक की मेमोरी टेस्ट करने के लिए, कैमरे की झलक 200 बार खोली और बंद की जाएगी. हर 20 बार दोहराए जाने पर, ps mediaserver का स्नैपशॉट रिकॉर्ड किया जाएगा और 200 बार दोहराए जाने के बाद, यह मेमोरी के इस्तेमाल की तुलना करेगा. अगर अंतर 150 हज़ार से ज़्यादा है, तो टेस्ट पास नहीं होगा.

टेस्ट कमांड चलाएं:

adb shell am instrument -w -r  -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner

ज़्यादा जानकारी वाले आउटपुट के लिए, यहां जाएं: /sdcard/mediaMemOutput.txt

मीडिया यूनिट की जांच

यूनिट टेस्ट चलाने के लिए सभी निर्देश एक जैसे होते हैं. उदाहरण के लिए, CameraMetadataTest.java के लिए, निर्देश यह होगा:

adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'

मीडिया स्ट्रेस टेस्ट

इस टेस्ट में, कैमरे से इमेज कैप्चर करने और वीडियो रिकॉर्ड करने की सुविधा की जांच की जाती है.

टेस्ट कमांड चलाएं:

adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner

सभी टेस्ट पास होने चाहिए.

मैन्युअल TestingCam टेस्ट

TestingCam ऐप्लिकेशन को मैन्युअल तरीके से चलाया जाना चाहिए. साथ ही, इन जांचों को पूरा करना चाहिए. TestingCam का सोर्स यहां दिया गया है: pdk/apps/TestingCamera/

कैमरे को झुकाकर इनफ़िनिटी फ़ोकस करना

TestingCam शुरू करें, झलक देखने की सुविधा चालू करें, और पक्का करें कि ऑटोफ़ोकस मोड, अनफ़ाइनाइट पर सेट हो. फ़ोटो लें बटन का इस्तेमाल करके, दूर के ऑब्जेक्ट (कम से कम 10 मीटर दूर) के शॉट लें. इसके लिए, कैमरे को हॉरिज़ॉन्टल, ऊपर की ओर (वर्टिकल के करीब), और नीचे की ओर (वर्टिकल के करीब) घुमाएं. ऊपर की ओर के शॉट का उदाहरण, पेड़ के नीचे से उसके ऊंचे पत्ते/शाखाएं हो सकती हैं. वहीं, नीचे की ओर के शॉट का उदाहरण, किसी इमारत की छत से देखी गई सड़क हो सकती है. सभी मामलों में, दूर की चीज़ें साफ़ और फ़ोकस में होनी चाहिए. शॉट को सेव करें और गैलरी व्यू में देखें, ताकि ज़ूम इन करके, आसानी से यह जांचा जा सके कि इमेज कितनी शार्प है.

ध्यान दें कि वीसीएम ऐक्चुएटर वाले कैमरे को इस टेस्ट में पास करने के लिए, उसे क्लोज़्ड-लूप एएफ़ कंट्रोल सिस्टम की ज़रूरत होगी. इसके अलावा, कैमरे के ओरिएंटेशन का पता लगाने के लिए, उसे ऐक्सीलेरोमीटर डेटा का इस्तेमाल करके, सॉफ़्टवेयर में किसी तरह का सुधार करने की ज़रूरत होगी. लेंस की इन्फ़िनिटी पोज़िशन को फ़ैक्ट्री में कैलिब्रेट करना भी ज़रूरी है.

Manual TestingCam2 के टेस्ट

TestingCam2 ऐप्लिकेशन को मैन्युअल तरीके से चलाया जाना चाहिए. साथ ही, इन जांचों को भी किया जाना चाहिए. TestingCam2 का सोर्स यहां दिया गया है: pdk/apps/TestingCamera2/

JPEG कैप्चर

TestingCam2 शुरू करें और JPEG बटन दबाएं. व्यूफ़ाइंडर इमेज की दाईं ओर दिखने वाली इमेज, व्यूफ़ाइंडर जैसी ही दिखनी चाहिए. साथ ही, दोनों इमेज का ओरिएंटेशन भी एक जैसा होना चाहिए.