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

एंड्रॉइड 10 कैमरा क्लाइंट को विशिष्ट उपयोग के मामलों के लिए इष्टतम कैमरा स्ट्रीम चुनने की अनुमति देता है और यह सुनिश्चित करता है कि कुछ स्ट्रीम संयोजन कैमरा डिवाइस द्वारा समर्थित हैं। स्ट्रीम कॉन्फ़िगरेशन कैमरा डिवाइस में कॉन्फ़िगर की गई एकल कैमरा स्ट्रीम को संदर्भित करता है और स्ट्रीम संयोजन कैमरा डिवाइस में कॉन्फ़िगर किए गए स्ट्रीम के एक या अधिक सेट को संदर्भित करता है। इन सुविधाओं के बारे में अधिक जानने के लिए, स्ट्रीम संयोजनों को क्वेरी करने के लिए अनुशंसित स्ट्रीम कॉन्फ़िगरेशन और API देखें।

संदर्भ कार्यान्वयन

अनुशंसित कॉन्फ़िगरेशन स्ट्रीम और क्वेरी स्ट्रीम संयोजन सुविधाओं के लिए API का विक्रेता-पक्ष संदर्भ कार्यान्वयन है। आप इस कार्यान्वयन को QCamera3HWI.cpp पर पा सकते हैं

कैमरा विक्रेता विशिष्ट उपयोग के मामलों के लिए कैमरा क्लाइंट के लिए अनुशंसित स्ट्रीम कॉन्फ़िगरेशन का विज्ञापन कर सकते हैं। ये अनुशंसित स्ट्रीम कॉन्फ़िगरेशन, जो StreamConfigurationMap के सबसेट हैं, कैमरा क्लाइंट को इष्टतम कॉन्फ़िगरेशन चुनने में मदद कर सकते हैं।

हालांकि StreamConfigurationMap कैमरा क्लाइंट को संपूर्ण स्ट्रीम कॉन्फ़िगरेशन जानकारी प्रदान करता है, लेकिन यह एक स्ट्रीम को दूसरे पर चुनने की दक्षता, शक्ति या प्रदर्शन प्रभावों के बारे में कोई जानकारी प्रदान नहीं करता है। कैमरा क्लाइंट स्वतंत्र रूप से सभी संभावित स्ट्रीम कॉन्फ़िगरेशन में से चुन सकते हैं, लेकिन कई मामलों में, यह ग्राहकों को उप-इष्टतम कैमरा कॉन्फ़िगरेशन का उपयोग करने और समय लेने वाली संपूर्ण खोज करने वाले अनुप्रयोगों की ओर ले जाता है।

उदाहरण के लिए, हालांकि कुछ संसाधित YUV प्रारूपों की आवश्यकता होती है और उन्हें समर्थित होना चाहिए, हो सकता है कि कैमरा डिवाइस में प्रारूपों के लिए मूल समर्थन न हो। इसके परिणामस्वरूप प्रारूप रूपांतरण के लिए एक अतिरिक्त प्रसंस्करण पास होता है और दक्षता कम हो जाती है। आकार और संगत पक्षानुपात का भी समान प्रभाव हो सकता है, जो विशेष आयामों को शक्ति और प्रदर्शन के मामले में बेहतर बनाता है।

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

सभी परीक्षण अपरिवर्तित रहते हैं और अनुशंसित स्ट्रीम कॉन्फ़िगरेशन के आधार पर आराम नहीं करते हैं।

कैमरा कार्यान्वयन द्वारा प्रदान किए गए अनुशंसित स्ट्रीम कॉन्फ़िगरेशन वैकल्पिक हैं और कैमरा क्लाइंट उन्हें अनदेखा कर सकता है।

कार्यान्वयन

इस सुविधा को लागू करने के लिए इन चरणों का पालन करें।

मेटाडेटा प्रविष्टियाँ

इस सुविधा को सक्षम करने के लिए कैमरा एचएएल को निम्नलिखित स्थिर मेटाडेटा प्रविष्टियों को पॉप्युलेट करना होगा:

  • android.scaler.availableRecommendedStreamConfigurations .उपलब्ध अनुशंसितस्ट्रीम कॉन्फ़िगरेशन : विशिष्ट उपयोग के मामलों के लिए स्ट्रीम कॉन्फ़िगरेशन का अनुशंसित सबसेट। घोषणा में [1 << PREVIEW | 1 << RECORD..] . के रूप में सुझाए गए उपयोग के मामलों को इंगित करने वाले सरल बिटमैप्स का उपयोग किया गया है [1 << PREVIEW | 1 << RECORD..] । उपयोग के मामले एक अतिरिक्त प्रविष्टि के साथ नियमित (प्रारूप, चौड़ाई, ऊंचाई, इनपुट) टपल का विस्तार करते हैं। गैर-मौजूदा सार्वजनिक उपयोग के मामले या [PUBLIC_END, VENDOR_START] की सीमा के भीतर सेट किए गए अन्य बिट्स निषिद्ध हैं।

    यह जानकारी availableRecommendedStreamConfigurations अनुशंसितस्ट्रीम कॉन्फ़िगरेशन मेटाडेटा टैग में संग्रहीत है।

    निम्न उदाहरण एक कैमरा डिवाइस के लिए अनुशंसित स्ट्रीम कॉन्फ़िगरेशन के लिए एक सरणी दिखाता है जो केवल 4K और 1080p का समर्थन करता है, जहां वीडियो रिकॉर्डिंग के लिए दोनों रिज़ॉल्यूशन को प्राथमिकता दी जाती है लेकिन पूर्वावलोकन के लिए केवल 1080p का सुझाव दिया जाता है।

    [3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT),
    1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
    
  • android.depth.availableRecommendedDepthStreamConfigurations .उपलब्ध अनुशंसितDepthStream कॉन्फ़िगरेशन (डिवाइस द्वारा समर्थित होने पर ही उपलब्ध): इस कैमरा डिवाइस के लिए अनुशंसित गहराई डेटास्पेस स्ट्रीम कॉन्फ़िगरेशन। उपरोक्त मेटाडेटा प्रविष्टि के समान, एक अतिरिक्त उपयोग केस बिटमैप सुझाए गए उपयोग के मामलों को इंगित करता है।

    यह जानकारी availableRecommendedInputOutputFormatsMap RecommendedInputOutputFormatsMap मेटाडेटा टैग में संग्रहीत है।

  • android.scaler.availableRecommendedInputOutputFormatsMap (डिवाइस द्वारा समर्थित होने पर ही उपलब्ध): इनपुट स्ट्रीम के लिए इस कैमरा डिवाइस के लिए सुझाए गए अनुशंसित छवि प्रारूपों की मैपिंग, उनके संबंधित आउटपुट स्वरूपों के लिए।

    यह जानकारी availableRecommendedDepthStreamConfigurations RecommendedDepthStreamConfigurations मेटाडेटा टैग में संग्रहित की जाती है।

यह जानकारी कैमरा क्लाइंट के लिए RecommendedStreamConfigurationMap API के ज़रिए उपलब्ध है।

आवश्यक उपयोग के मामले

निम्नलिखित उपयोग के मामलों के लिए अनुशंसित स्ट्रीम कॉन्फ़िगरेशन प्रदान किए जाने चाहिए और संबंधित आवश्यकताओं को पूरा करना चाहिए:

उदाहरण मांग
PREVIEW पूर्वावलोकन में केवल YUV_420_888 और IMPLEMENTATION_DEFINED जैसे आउटपुट स्वरूपों के साथ नॉन-स्टालिंग संसाधित स्ट्रीम कॉन्फ़िगरेशन शामिल होना चाहिए।
RECORD एक वीडियो रिकॉर्ड में स्ट्रीम कॉन्फ़िगरेशन शामिल होने चाहिए जो IMPLEMENTATION_DEFINED प्रारूप के साथ विज्ञापित समर्थित मीडिया प्रोफ़ाइल से मेल खाते हों।
VIDEO_SNAPSHOT एक वीडियो स्नैपशॉट में स्ट्रीम कॉन्फ़िगरेशन शामिल होना चाहिए जो कम से कम अधिकतम रिकॉर्ड रिज़ॉल्यूशन जितना बड़ा हो और केवल BLOB + DATASPACE_JFIF प्रारूप/डेटास्पेस संयोजन (JPEG) के साथ हो। कॉन्फ़िगरेशन पूर्वावलोकन गड़बड़ियों का कारण नहीं होना चाहिए और 30 एफपीएस पर चलने में सक्षम होना चाहिए।
SNAPSHOT स्नैपशॉट स्ट्रीम कॉन्फ़िगरेशन में BLOB + DATASPACE_JFIF प्रारूप/डेटास्पेस संयोजन (JPEG) के साथ android.sensor.info.activeArraySize के करीब आकार वाला कम से कम एक शामिल होना चाहिए। पहलू अनुपात, संरेखण, और अन्य विक्रेता-विशिष्ट प्रतिबंधों पर प्रतिबंध को ध्यान में रखते हुए, अधिकतम सुझाए गए आकार का क्षेत्र सेंसर सरणी आकार क्षेत्र के 97% से कम नहीं होना चाहिए।
ZSL (यदि समर्थित हो) यदि कैमरा डिवाइस द्वारा समर्थित है, तो अनुशंसित इनपुट स्ट्रीम कॉन्फ़िगरेशन को अन्य संसाधित या रुके हुए आउटपुट स्वरूपों के साथ ही विज्ञापित किया जाना चाहिए।
RAW (यदि समर्थित हो) यदि कैमरा डिवाइस द्वारा समर्थित है, तो अनुशंसित अपरिष्कृत स्ट्रीम कॉन्फ़िगरेशन में केवल RAW आधारित आउटपुट स्वरूप शामिल होने चाहिए।

अन्य उपयोग के मामले

आप अपने कार्यान्वयन के लिए विशिष्ट उपयोग के मामलों के लिए अतिरिक्त अनुशंसित कॉन्फ़िगरेशन स्ट्रीम प्रदान कर सकते हैं।

मान्यकरण

अनुशंसित कॉन्फ़िगरेशन स्ट्रीम के अपने कार्यान्वयन का परीक्षण करने के लिए, निम्नलिखित CTS और VTS परीक्षण चलाएँ:

स्ट्रीम संयोजनों को क्वेरी करने के लिए एपीआई

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

यह सुविधा कैमरा क्लाइंट को कैमराडिवाइस और समर्थित एचडब्ल्यू स्तर के दिशानिर्देशों के अनुसार संकलित स्ट्रीम संयोजनों की एक सूची प्राप्त करने की अनुमति देती है। सबसे सामान्य स्ट्रीम संयोजनों के एक छोटे उपसमुच्चय को कवर करते हुए यथासंभव क्वेरी परिणामों की शुद्धता को लागू करने के लिए CTS परीक्षण उपलब्ध हैं।

आप कैमरा एचएएल में एक अतिरिक्त एचआईडीएल एपीआई कॉल लागू करके इस सुविधा का समर्थन करना चुन सकते हैं।

कार्यान्वयन

स्ट्रीम संयोजनों को क्वेरी करने के लिए एपीआई का समर्थन करने के लिए, कैमरा एचएएल को isStreamCombinationSupported HIDL API इंटरफ़ेस के लिए एक कार्यान्वयन प्रदान करना चाहिए। यह इंटरफ़ेस जांचता है कि कैमरा डिवाइस एक निर्दिष्ट कैमरा स्ट्रीम संयोजन का समर्थन करता है या नहीं।

कॉल किए जाने पर, API को निम्न स्थिति कोड में से एक वापस करना होगा:

  • OK : स्ट्रीम संयोजन क्वेरी सफल रही।
  • METHOD_NOT_SUPPORTED : कैमरा डिवाइस स्ट्रीम संयोजन क्वेरी का समर्थन नहीं करता है।
  • INTERNAL_ERROR : किसी आंतरिक त्रुटि के कारण स्ट्रीम संयोजन क्वेरी पूर्ण नहीं हो सकती है।

यदि स्ट्रीम संयोजन समर्थित है तो API सत्य लौटाता है। अन्यथा, यह झूठी वापसी करता है।

फ्रेमवर्क सार्वजनिक API isSessionConfigurationSupported का उपयोग यह जांचने के लिए करता है कि क्या विशेष सत्र कॉन्फ़िगरेशन कैमरा डिवाइस द्वारा समर्थित है।

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

मान्यकरण

इस सुविधा को सत्यापित करने के लिए, निम्नलिखित कैमरा CTS और VTS परीक्षण केस चलाएँ:

कैमरा सीटीएस मॉड्यूल:

कैमरा वीटीएस:

VtsHalCameraProviderV2_4TargetTest.cpp