मुख्य कंटेंट तक स्किप करें

अध्याय 27: कैमरा टेस्टिंग (Camera Testing)

सारांश (Summary)

आपने एक कैमरा ऐप बनाया। यह आपके फोन पर काम करता है, लेकिन क्या यह उस सस्ते डिवाइस पर भी काम करेगा जिसका HAL LEGACY लेवल का है?

कैमरा सॉफ्टवेयर टेस्टिंग के दो भाग हैं: HAL स्तर पर OEM वैलिडेशन (जो Google अनिवार्य करता है) और ऐप स्तर पर CI टेस्टिंग (जो आप अपने कोड के लिए करते हैं)। इस अध्याय में हम दोनों को कवर करेंगे।


भाग 1: OEM कैमरों को कैसे वैलिडेट करते हैं — Camera ITS और CTS

किसी भी डिवाइस को Google Play के साथ शिप करने से पहले उसे Compatibility Test Suite (CTS) पास करना होता है।

टेस्ट श्रेणियां

  1. API टेस्ट: क्या सभी CameraCharacteristics कुंजियाँ सही ढंग से रिपोर्ट की गई हैं?
  2. फ्लो टेस्ट: बार-बार कैमरा खोलने और बंद करने पर क्या वह क्रैश होता है?
  3. Camera ITS (Image Test Suite): इसके लिए एक फिजिकल लैब की ज़रूरत होती है जहाँ रोबोटिक हाथ और चार्ट का उपयोग करके सेंसर की सटीकता मापी जाती है।
    • Luminance Linearity: क्या ISO दोगुना करने पर फोटो वास्तव में दोगुनी ब्राइट होती है?
    • Sensor Fusion: क्या जाइरोस्कोप और कैमरा टाइमस्टैम्प ±1ms के भीतर मैच करते हैं? (AR के लिए ज़रूरी)

भाग 2: अपने ऐप का टेस्ट करना — इंस्ट्रूमेंटेशन और मॉकिंग

OEM टेस्ट HAL की जांच करते हैं, लेकिन आपको अपने कोड की जांच करनी है। इसके लिए Mockito का उपयोग करके CameraManager, CameraDevice और CaptureSession को 'मॉक' (mock) किया जा सकता है।

इसका मतलब है कि आप बिना असली कैमरे के भी अपने पाइपलाइन को टेस्ट कर सकते हैं।

उदाहरण 1: Mockito के साथ एक्सपोज़र टाइम वेरीफाई करना

आप एक ऐसा टेस्ट लिख सकते हैं जो सिमुलेट करे कि HAL ने एक फ्रेम डिलीवर किया है, और फिर चेक करे कि आपके ऐप ने उस डेटा को सही ढंग से हैंडल किया या नहीं।

उदाहरण 2: पैरामीटराइज्ड टेस्ट (LEGACY डिवाइसेज के लिए)

हर कैमरा ऐप को LEGACY डिवाइसेज पर काम करना चाहिए। एक आम बग यह है कि CONTROL_MODE_OFF कॉल करने पर LEGACY HAL उसे इग्नोर कर देता है, जिससे ऐप अनंत लूप (infinite loop) में फंस सकता है। पैरामीटराइज्ड टेस्ट के जरिए आप हर हार्डवेयर लेवल (LEGACY, LIMITED, FULL, LEVEL_3) के लिए अपने कोड को परख सकते हैं।


सारांश (Summary)

कैमरा टेस्टिंग दो हिस्सों में बंटी है: OEM वैलिडेशन (CTS/ITS) और ऐप वैलिडेशन। ITS यह सुनिश्चित करता है कि सेंसर का आउटपुट गणितीय रूप से सटीक है। आप Mockito का उपयोग करके बिना असली हार्डवेयर के भी CI सर्वर पर अपने कैमरा कोड का टेस्ट कर सकते हैं। हमेशा हर INFO_SUPPORTED_HARDWARE_LEVEL के लिए अपने ऐप की स्थिरता की जांच करें।

आगे क्या है

आपने Kotlin से लेकर नेटिव NDK तक Camera2 API में महारत हासिल कर ली है। लेकिन openCamera कॉल करने पर हुड के नीचे वास्तव में क्या होता है? Binder IPC सीमा कहाँ है? अध्याय 28 भव्य समापन है: ऐप कोड से लेकर लेंस के मोटर (VCM) तक का पूरा स्टैक।