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

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

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

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

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

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

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

आपके अनुशंसित स्ट्रीम कॉन्फ़िगरेशन मानचित्रों को 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 (केवल डिवाइस द्वारा समर्थित होने पर उपलब्ध): इस कैमरा डिवाइस के लिए अनुशंसित गहराई डेटास्पेस स्ट्रीम कॉन्फ़िगरेशन का सुझाव दिया गया है। उपरोक्त मेटाडेटा प्रविष्टि के समान, एक अतिरिक्त उपयोग केस बिटमैप सुझाए गए उपयोग मामलों को इंगित करता है।

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

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

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

यह जानकारी 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 आधारित आउटपुट प्रारूप शामिल होने चाहिए।

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

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

मान्यकरण

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

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

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

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

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

कार्यान्वयन

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

कॉल करने पर, एपीआई को निम्नलिखित स्थिति कोड में से एक वापस करना होगा:

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

यदि स्ट्रीम संयोजन समर्थित है तो एपीआई सत्य लौटाता है। अन्यथा, यह गलत रिटर्न देता है।

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

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

मान्यकरण

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

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

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

VtsHalCameraProviderV2_4TargetTest.cpp