मल्टी-कैमरा सपोर्ट

एंड्रॉइड 9 ने एक ही दिशा में इंगित करने वाले दो या दो से अधिक भौतिक कैमरा उपकरणों से बना एक नए लॉजिकल कैमरा डिवाइस के माध्यम से मल्टी-कैमरा उपकरणों के लिए एपीआई समर्थन पेश किया। लॉजिकल कैमरा डिवाइस को एचएएल-एकीकृत मल्टी-कैमरा सुविधाओं के साथ बातचीत के लिए अनुमति देने वाले ऐप के लिए एकल कैमराडिवाइस/कैप्चर सत्र के रूप में उजागर किया जाता है। ऐप्स वैकल्पिक रूप से अंतर्निहित भौतिक कैमरा स्ट्रीम, मेटाडेटा और नियंत्रणों को एक्सेस और नियंत्रित कर सकते हैं।

मल्टी कैमरा सपोर्ट

चित्र 1 . मल्टी कैमरा सपोर्ट

इस आरेख में, विभिन्न कैमरा आईडी रंग कोडित हैं। ऐप एक ही समय में प्रत्येक भौतिक कैमरे से कच्चे बफ़र्स को स्ट्रीम कर सकता है। अलग-अलग नियंत्रण सेट करना और विभिन्न भौतिक कैमरों से अलग मेटाडेटा प्राप्त करना भी संभव है।

उदाहरण और स्रोत

बहु-कैमरा उपकरणों को तार्किक बहु-कैमरा क्षमता के साथ विज्ञापित किया जाना चाहिए।

कैमरा क्लाइंट getPhysicalCameraIds() को कॉल करके भौतिक उपकरणों के कैमरा आईडी को क्वेरी कर सकते हैं, जो एक विशेष तार्किक कैमरा से बना है। परिणाम के हिस्से के रूप में लौटाई गई आईडी का उपयोग भौतिक उपकरणों को व्यक्तिगत रूप से setPhysicalCameraId() के माध्यम से नियंत्रित करने के लिए किया जाता है। ऐसे व्यक्तिगत अनुरोधों के परिणामों को getPhysicalCameraResults() को लागू करके पूरे परिणाम से पूछताछ की जा सकती है।

व्यक्तिगत भौतिक कैमरा अनुरोध केवल पैरामीटर के सीमित सबसेट का समर्थन कर सकते हैं। समर्थित मापदंडों की सूची प्राप्त करने के लिए, डेवलपर्स getAvailablePhysicalCameraRequestKeys() कॉल कर सकते हैं।

भौतिक कैमरा स्ट्रीम केवल गैर-पुन: प्रसंस्करण अनुरोधों के लिए और केवल मोनोक्रोम और बेयर सेंसर के लिए समर्थित हैं।

कार्यान्वयन

समर्थन चेकलिस्ट

HAL की ओर तार्किक बहु-कैमरा उपकरण जोड़ने के लिए:

  • किसी भी तार्किक कैमरा डिवाइस के लिए एक ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA क्षमता जोड़ें, जो दो या अधिक भौतिक कैमरों द्वारा समर्थित है जो किसी ऐप के संपर्क में भी आते हैं।
  • भौतिक कैमरा आईडी की सूची के साथ स्थिर ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS मेटाडेटा फ़ील्ड को पॉप्युलेट करें।
  • भौतिक कैमरा स्ट्रीम के पिक्सेल के बीच सहसंबंध के लिए आवश्यक गहराई से संबंधित स्थिर मेटाडेटा को पॉप्युलेट करें: ANDROID_LENS_POSE_ROTATION , ANDROID_LENS_POSE_TRANSLATION , ANDROID_LENS_INTRINSIC_CALIBRATION , ANDROID_LENS_DISTORTION , ANDROID_LENS_POSE_REFERENCE
  • स्थिर ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE मेटाडेटा फ़ील्ड को इस पर सेट करें:

  • अलग-अलग भौतिक कैमरों के लिए समर्थित मापदंडों की सूची के साथ ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS को पॉप्युलेट करें। यदि तार्किक उपकरण व्यक्तिगत अनुरोधों का समर्थन नहीं करता है तो सूची खाली हो सकती है।

  • यदि व्यक्तिगत अनुरोधों का समर्थन किया जाता है, तो व्यक्तिगत physicalCameraSettings कैमरा सेटिंग्स को संसाधित और लागू करें जो कैप्चर अनुरोधों के हिस्से के रूप में आ सकती हैं और व्यक्तिगत physicalCameraMetadata कैमरा मेटाडेटा को तदनुसार जोड़ सकती हैं।

  • कैमरा एचएएल डिवाइस संस्करण 3.5 (एंड्रॉइड 10 में पेश किया गया) या उच्चतर के लिए, तार्किक कैमरे का समर्थन करने वाले वर्तमान सक्रिय भौतिक कैमरे की आईडी का उपयोग करके ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID परिणाम कुंजी को पॉप्युलेट करें।

Android 9 चलाने वाले उपकरणों के लिए, कैमरा उपकरणों को एक तार्किक YUV/RAW स्ट्रीम को समान आकार की भौतिक स्ट्रीम (रॉ स्ट्रीम पर लागू नहीं होता) और दो भौतिक कैमरों से समान प्रारूप के साथ बदलने का समर्थन करना चाहिए। यह Android 10 चलाने वाले उपकरणों पर लागू नहीं होता है।

एंड्रॉइड 10 चलाने वाले उपकरणों के लिए जहां कैमरा एचएएल डिवाइस संस्करण 3.5 या उच्चतर है, कैमरा डिवाइस को समर्थित होना चाहिए isStreamCombinationSupported ऐप्स के लिए यह पूछने के लिए कि क्या भौतिक स्ट्रीम वाले एक विशेष स्ट्रीम संयोजन समर्थित है।

स्ट्रीम कॉन्फ़िगरेशन मैप

एक तार्किक कैमरे के लिए, एक निश्चित हार्डवेयर स्तर के कैमरा डिवाइस के लिए अनिवार्य स्ट्रीम संयोजन वही है जो CameraDevice.createCaptureSession में आवश्यक है। स्ट्रीम कॉन्फ़िगरेशन मैप की सभी स्ट्रीम लॉजिकल स्ट्रीम होनी चाहिए.

विभिन्न आकारों के भौतिक उप-कैमरों के साथ रॉ क्षमता का समर्थन करने वाले तार्किक कैमरा डिवाइस के लिए, यदि कोई ऐप तार्किक रॉ स्ट्रीम को कॉन्फ़िगर करता है, तो लॉजिकल कैमरा डिवाइस को विभिन्न सेंसर आकारों वाले भौतिक उप-कैमरों पर स्विच नहीं करना चाहिए। यह सुनिश्चित करता है कि मौजूदा रॉ कैप्चर ऐप्स टूटें नहीं।

रॉ कैप्चर के दौरान भौतिक उप-कैमरों के बीच स्विच करके एचएएल-कार्यान्वित ऑप्टिकल ज़ूम का लाभ उठाने के लिए, ऐप्स को तार्किक रॉ स्ट्रीम के बजाय भौतिक उप-कैमरा स्ट्रीम को कॉन्फ़िगर करना होगा।

गारंटीड स्ट्रीम संयोजन

लॉजिकल कैमरा और इसके अंतर्निहित भौतिक कैमरों दोनों को अपने डिवाइस स्तरों के लिए आवश्यक अनिवार्य स्ट्रीम संयोजनों की गारंटी देनी चाहिए।

एक लॉजिकल कैमरा डिवाइस को उसी तरह से काम करना चाहिए जैसे एक भौतिक कैमरा डिवाइस को उसके हार्डवेयर स्तर और क्षमताओं के आधार पर संचालित करना चाहिए। यह अनुशंसा की जाती है कि इसका फीचर सेट व्यक्तिगत भौतिक कैमरों का सुपरसेट हो।

Android 9 चलाने वाले उपकरणों पर, प्रत्येक गारंटीकृत स्ट्रीम संयोजन के लिए, तार्किक कैमरे को समर्थित होना चाहिए:

  • एक तार्किक YUV_420_888 या कच्ची धारा को एक ही आकार और प्रारूप के दो भौतिक धाराओं के साथ बदलना, प्रत्येक एक अलग भौतिक कैमरे से, यह देखते हुए कि आकार और प्रारूप भौतिक कैमरों द्वारा समर्थित हैं।

  • यदि तार्किक कैमरा RAW क्षमता का विज्ञापन नहीं करता है, लेकिन अंतर्निहित भौतिक कैमरे करते हैं, तो प्रत्येक भौतिक कैमरे से एक, दो कच्ची धाराएँ जोड़ना। यह आमतौर पर तब होता है जब भौतिक कैमरों में विभिन्न सेंसर आकार होते हैं।

  • समान आकार और प्रारूप की तार्किक धारा के स्थान पर भौतिक धाराओं का उपयोग करना। भौतिक और तार्किक धाराओं की न्यूनतम फ्रेम अवधि समान होने पर यह कैप्चर की फ़्रेम दर को धीमा नहीं करना चाहिए।

प्रदर्शन और शक्ति विचार

  • प्रदर्शन:

    • भौतिक धाराओं को कॉन्फ़िगर करना और स्ट्रीम करना संसाधनों की कमी के कारण तार्किक कैमरे की कैप्चर दर को धीमा कर सकता है।
    • यदि अंतर्निहित कैमरों को अलग-अलग फ्रेम दर में रखा जाता है, तो भौतिक कैमरा सेटिंग्स को लागू करने से कैप्चर दर धीमी हो सकती है।
  • शक्ति:

    • एचएएल का पावर ऑप्टिमाइजेशन डिफॉल्ट केस में काम करना जारी रखता है।
    • भौतिक धाराओं को कॉन्फ़िगर करना या अनुरोध करना एचएएल के आंतरिक शक्ति अनुकूलन को ओवरराइड कर सकता है और अधिक बिजली का उपयोग कर सकता है।

अनुकूलन

आप अपने डिवाइस कार्यान्वयन को निम्न तरीकों से अनुकूलित कर सकते हैं।

  • लॉजिकल कैमरा डिवाइस का फ़्यूज्ड आउटपुट पूरी तरह से एचएएल कार्यान्वयन पर निर्भर करता है। भौतिक कैमरों से फ़्यूज्ड लॉजिकल स्ट्रीम कैसे प्राप्त होते हैं, इस पर निर्णय ऐप और एंड्रॉइड कैमरा फ्रेमवर्क के लिए पारदर्शी है।
  • व्यक्तिगत भौतिक अनुरोधों और परिणामों को वैकल्पिक रूप से समर्थित किया जा सकता है। ऐसे अनुरोधों में उपलब्ध मापदंडों का सेट भी पूरी तरह से विशिष्ट एचएएल कार्यान्वयन पर निर्भर है।
  • Android 10 से, HAL, getCameraIdList में कुछ या सभी PHYSICAL_IDs का विज्ञापन न करने का चुनाव करके, किसी ऐप द्वारा सीधे खोले जा सकने वाले कैमरों की संख्या को कम कर सकता है। getPhysicalCameraCharacteristics को कॉल करने के बाद भौतिक कैमरे की विशेषताओं को वापस करना होगा।

मान्यकरण

तार्किक बहु-कैमरा उपकरणों को किसी भी अन्य नियमित कैमरे की तरह कैमरा सीटीएस पास करना होगा। इस प्रकार के उपकरण को लक्षित करने वाले परीक्षण मामले LogicalCameraDeviceTest मॉड्यूल में पाए जा सकते हैं।

छवियों के उचित फ़्यूज़िंग की सुविधा के लिए ये तीन आईटीएस परीक्षण मल्टी-कैमरा सिस्टम को लक्षित करते हैं:

दृश्य 1 और दृश्य 4 परीक्षण ITS-in-a-box परीक्षण रिग के साथ चलते हैं। test_multi_camera_match टेस्ट में दावा किया गया है कि दोनों कैमरों के सक्षम होने पर छवियों के केंद्र की चमक मेल खाती है। test_multi_camera_alignment परीक्षण का दावा है कि कैमरा स्पेसिंग, ओरिएंटेशन और विरूपण पैरामीटर ठीक से लोड किए गए हैं। यदि मल्टी-कैमरा सिस्टम में वाइड FoV कैमरा (>90o) शामिल है, तो ITS बॉक्स के Rev2 संस्करण की आवश्यकता है।

Sensor_fusion एक दूसरा परीक्षण उपकरण है जो बार-बार, निर्धारित फ़ोन गति को सक्षम बनाता है और यह दावा करता है कि जाइरोस्कोप और छवि सेंसर टाइमस्टैम्प मेल खाते हैं और यह कि मल्टी-कैमरा फ़्रेम सिंक में हैं।

सभी बॉक्स AcuSpec, Inc. ( www.acusspecinc.com , fred@acuspecinc.com) और MYWAY Manufacturing ( www.myway.tw , sales@myway.tw) के माध्यम से उपलब्ध हैं। इसके अतिरिक्त, Rev1 ITS बॉक्स को West-Mark ( www.west-mark.com , dgoodman@west-mark.com) के माध्यम से खरीदा जा सकता है।

सर्वोत्तम प्रथाएं

ऐप संगतता बनाए रखते हुए मल्टी-कैमरा द्वारा सक्षम सुविधाओं का पूरी तरह से लाभ उठाने के लिए, तार्किक मल्टी-कैमरा डिवाइस को लागू करते समय इन सर्वोत्तम प्रथाओं का पालन करें:

  • (एंड्रॉइड 10 या उच्चतर) getCameraIdList से भौतिक उप-कैमरा छुपाएं। यह उन कैमरों की संख्या को कम करता है जिन्हें ऐप्स द्वारा सीधे खोला जा सकता है, जिससे ऐप्स के लिए जटिल कैमरा चयन तर्क की आवश्यकता समाप्त हो जाती है।
  • (Android 11 या उच्चतर) ऑप्टिकल ज़ूम का समर्थन करने वाले तार्किक मल्टी-कैमरा डिवाइस के लिए, ANDROID_CONTROL_ZOOM_RATIO API लागू करें, और केवल पक्षानुपात क्रॉपिंग के लिए ANDROID_SCALER_CROP_REGION का उपयोग करें। ANDROID_CONTROL_ZOOM_RATIO डिवाइस को ज़ूम आउट करने और बेहतर सटीकता बनाए रखने में सक्षम बनाता है। इस मामले में, HAL को ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_CONTROL_AWB_REGIONS , ANDROID_CONTROL_AF_REGIONS , ANDROID_STATISTICS_FACE_RECTANGLES , ANDROID_STATISTICS_FACE_FACE_ के बाद के क्षेत्र और ANDROID_STATISTICS_FACE_LANDMARKS के सक्रिय क्षेत्र, ANDROID_STATISTANGROCS_FACE_FACE के पोस्ट-LANI ANDROID_CONTROL_ZOOM_RATIO ANDROID_SCALER_CROP_REGION के साथ कैसे काम करता है, इस बारे में अधिक जानकारी के लिए, camera3_crop_reprocess#cropping देखें।
  • भौतिक कैमरों वाले बहु-कैमरा उपकरणों के लिए, जिनकी अलग-अलग क्षमताएं हैं, सुनिश्चित करें कि डिवाइस एक निश्चित मान या श्रेणी के लिए समर्थन का विज्ञापन केवल तभी करता है जब पूरी ज़ूम श्रेणी मान या श्रेणी का समर्थन करती हो। उदाहरण के लिए, यदि लॉजिकल कैमरा अल्ट्रावाइड, वाइड और टेलीफोटो कैमरा से बना है, तो निम्न कार्य करें:
    • यदि भौतिक कैमरों के सक्रिय सरणी आकार भिन्न हैं, तो कैमरा HAL को भौतिक कैमरों के सक्रिय सरणियों से ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_CONTROL_AWB_REGIONS , और इसलिए ANDROID_STATISTICS_FACE_LANDMARKS , ANDROID_LANDICSLES, ANDROID_LANDICSLES, ANDROID_CONTROL_AF_REGIONS , ANDROID_STATISTICS_FACE_RECTANGLES परिप्रेक्ष्य, समन्वय प्रणाली तार्किक कैमरे का सक्रिय सरणी आकार है।
    • यदि वाइड और टेलीफोटो कैमरे ऑटोफोकस का समर्थन करते हैं, लेकिन अल्ट्रावाइड कैमरा फिक्स्ड फोकस है, तो सुनिश्चित करें कि लॉजिकल कैमरा ऑटोफोकस समर्थन का विज्ञापन करता है। एचएएल को अल्ट्रावाइड कैमरे के लिए एक ऑटोफोकस स्टेट मशीन का अनुकरण करना चाहिए ताकि जब ऐप अल्ट्रावाइड लेंस को ज़ूम आउट करे, तो यह तथ्य कि अंतर्निहित भौतिक कैमरा निश्चित फोकस है, ऐप के लिए पारदर्शी है, और समर्थित एएफ मोड के लिए ऑटोफोकस स्टेट मशीन अपेक्षा के अनुरूप काम करें।
    • यदि वाइड और टेलीफोटो कैमरे 4K @ 60 एफपीएस का समर्थन करते हैं, और अल्ट्रावाइड कैमरा केवल 4K @ 30 एफपीएस, या 1080p @ 60 एफपीएस का समर्थन करता है, लेकिन 4K @ 60 एफपीएस का समर्थन नहीं करता है, तो सुनिश्चित करें कि तार्किक कैमरा 4k @ 60 एफपीएस का विज्ञापन नहीं करता है। इसकी समर्थित स्ट्रीम कॉन्फ़िगरेशन। यह तार्किक कैमरा क्षमताओं की अखंडता की गारंटी देता है, यह सुनिश्चित करता है कि ऐप 1 से कम के ANDROID_CONTROL_ZOOM_RATIO मान पर 4k @ 60 fps प्राप्त नहीं करने के मुद्दे में नहीं चलेगा।
  • एंड्रॉइड 10 से शुरू होने पर, भौतिक स्ट्रीम सहित स्ट्रीम संयोजनों का समर्थन करने के लिए एक तार्किक मल्टी-कैमरा की आवश्यकता नहीं होती है। यदि एचएएल भौतिक धाराओं के साथ संयोजन का समर्थन करता है:
    • (एंड्रॉइड 11 या उच्चतर) स्टीरियो और गति ट्रैकिंग से गहराई जैसे उपयोग के मामलों को बेहतर ढंग से संभालने के लिए, भौतिक स्ट्रीम आउटपुट के दृश्य के क्षेत्र को हार्डवेयर द्वारा प्राप्त किया जा सकता है। हालाँकि, यदि एक भौतिक धारा और एक तार्किक धारा एक ही भौतिक कैमरे से उत्पन्न होती है, तो हार्डवेयर सीमाएँ भौतिक धारा के देखने के क्षेत्र को तार्किक धारा के समान होने के लिए बाध्य कर सकती हैं।
    • कई भौतिक धाराओं के कारण होने वाले स्मृति दबाव को संबोधित करने के लिए, सुनिश्चित करें कि यदि एक भौतिक धारा एक अवधि के लिए निष्क्रिय होने की उम्मीद है, तो नि: शुल्क बफ़र्स (बफ़र्स जो उपभोक्ता द्वारा जारी किए गए हैं, लेकिन निर्माता द्वारा अभी तक हटाए नहीं गए हैं) को हटाने के लिए एप्लिकेशन discardFreeBuffers का उपयोग करते हैं। समय की।
    • यदि विभिन्न भौतिक कैमरों से भौतिक स्ट्रीम आमतौर पर एक ही अनुरोध से जुड़ी नहीं होती हैं, तो सुनिश्चित करें कि ऐप्स surface group का उपयोग करते हैं ताकि एक बफर कतार का उपयोग दो ऐप-फेसिंग सतहों को वापस करने के लिए किया जा सके, जिससे मेमोरी खपत कम हो।