कैमरा एचएएल की टेस्टिंग की चेकलिस्ट

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

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

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

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

इन फ़ाइलों में मौजूदा HAL स्पेसिफ़िकेशन के बारे में बताया गया है. यह जानकारी Android 5.0 और इसके बाद के वर्शन वाले सामान्य Android प्लैटफ़ॉर्म डेवलपमेंट किट (पीडीके) में दी गई है:

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

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

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

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

वेंडर टेस्ट सुइट (वीटीएस) की जांच

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

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 API के लिए सीटीएस टेस्ट

कैमरे की जांच करने के लिए, 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/*

इमेज टेस्ट सुइट (आईटीएस) के टेस्ट

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

कैमरे के आईटीएस इंफ़्रास्ट्रक्चर और टेस्ट, 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 टेस्ट

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

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

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

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

Manual TestingCam2 के टेस्ट

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

JPEG कैप्चर

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