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

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

रेफ़रंस के तौर पर लागू करना

सुझाई गई कॉन्फ़िगरेशन स्ट्रीम और स्ट्रीम के कॉम्बिनेशन की सुविधाओं के बारे में क्वेरी करने के लिए एपीआई, वेंडर-साइड रेफ़रंस के तौर पर लागू किया गया है. इसे लागू करने का तरीका, QCamera3HWI.cpp में देखा जा सकता है

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

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

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

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

सभी टेस्ट में कोई बदलाव नहीं होता और सुझाई गई डेटा स्ट्रीम के कॉन्फ़िगरेशन के आधार पर, इनमें कोई रियायत नहीं दी जाती.

कैमरे के लागू होने पर सुझाई गई स्ट्रीम कॉन्फ़िगरेशन ज़रूरी नहीं हैं. कैमरा क्लाइंट इन्हें अनदेखा कर सकता है.

लागू करना

इस सुविधा को लागू करने के लिए, यह तरीका अपनाएं.

मेटाडेटा एंट्री

इस सुविधा को चालू करने के लिए, Camera HAL को इन स्टैटिक मेटाडेटा एंट्री को पॉप्युलेट करना होगा:

  • android.scaler.availableRecommendedStreamConfigurations: खास इस्तेमाल के उदाहरणों के लिए, स्ट्रीम कॉन्फ़िगरेशन का सुझाया गया सबसेट. एलान में बिटमैप का इस्तेमाल किया जाता है, जो [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 एपीआई के ज़रिए कैमरा क्लाइंट के लिए उपलब्ध है.

इस्तेमाल के ज़रूरी उदाहरण

यहां दिए गए इस्तेमाल के उदाहरणों के लिए, स्ट्रीम के सुझाए गए कॉन्फ़िगरेशन दिए जाने चाहिए और वे इन ज़रूरी शर्तों को पूरा करते हों:

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

इस्तेमाल के अन्य उदाहरण

लागू करने के तरीके के हिसाब से, इस्तेमाल के उदाहरणों के लिए सुझाई गई अन्य कॉन्फ़िगरेशन स्ट्रीम दी जा सकती हैं.

पुष्टि करें

सुझाई गई कॉन्फ़िगरेशन स्ट्रीम को लागू करने की जांच करने के लिए, ये सीटीएस और वीटीएस टेस्ट चलाएं:

सुविधाओं के कॉम्बिनेशन के बारे में क्वेरी करने के लिए एपीआई

Android 15 से, Android प्लैटफ़ॉर्म पर सुविधाओं के कॉम्बिनेशन के बारे में क्वेरी करने के लिए एपीआई उपलब्ध है. इस एपीआई की मदद से, कैमरा क्लाइंट यह क्वेरी कर सकते हैं कि डिवाइस पर, सुविधाओं के किसी खास कॉम्बिनेशन का इस्तेमाल किया जा सकता है या नहीं. यह एपीआई ज़रूरी है, क्योंकि Camera2 API, ऑर्थोगोनल कंट्रोल के तौर पर 4K, 60fps, एचडीआर वीडियो, अल्ट्रा एचडीआर, अल्ट्रा वाइड ज़ूम, और स्टेबलाइज़ेशन जैसी अलग-अलग सुविधाओं को मॉडल करता है.

ज़रूरी शर्तें

सुविधाओं के कॉम्बिनेशन के बारे में क्वेरी करने के लिए एपीआई की मदद लेने के लिए, कैमरा एचएएल को ICameraDevice इंटरफ़ेस का वर्शन 3 लागू करना होगा. ज़्यादा जानकारी के लिए, लागू करना सेक्शन देखें.

अगर एपीआई काम करता है, तो झलक को स्थिर करने की सुविधा, अन्य सुविधाओं के साथ काम करनी चाहिए. इसका मतलब है कि अगर किसी कैमरा डिवाइस पर, झिलमिलाहट को कम करने की सुविधा काम करती है, तो किसी खास कॉम्बिनेशन के लिए isStreamCombinationWithSettingsSupported की रिटर्न वैल्यू, झिलमिलाहट को कम करने की सुविधा के चालू या बंद होने पर एक ही होनी चाहिए. इससे, सुविधा के कॉम्बिनेशन की क्वेरी के लिए खोज स्पेस कम हो जाता है.

इसके अलावा, मीडिया परफ़ॉर्मेंस क्लास 15 के लिए, मुख्य रियर कैमरे में 10-बिट HLG10 की मदद से, झलक को स्थिर करने की सुविधा होनी चाहिए. यह सुविधा, 1080p और 720p की झलक और ज़्यादा से ज़्यादा साइज़ के JPEG के लिए होनी चाहिए. इन ज़रूरी शर्तों के बारे में ज़्यादा जानने के लिए, 2.2.7.2 सेक्शन देखें. Camera के लिए उपलब्ध है.

लागू करना

एपीआई को सुविधाओं के कॉम्बिनेशन के बारे में क्वेरी करने में मदद करने के लिए, ICameraDevice के वर्शन 3 में, सुविधाओं के कॉम्बिनेशन के बारे में क्वेरी करने वाले ये एपीआई लागू करें:

  • constructDefaultRequestSettings: किसी खास CaptureRequest टाइप के लिए डिफ़ॉल्ट सेटिंग बनाता है. HAL, ICameraDeviceSession::constructDefaultRequestSettings के लागू होने का इस्तेमाल कर सकता है.

  • isStreamCombinationWithSettingsSupported: सेशन पैरामीटर और अन्य CaptureRequest बटन की मदद से, किसी खास कैमरा स्ट्रीम कॉम्बिनेशन के लिए डिवाइस पर काम करने की जांच करता है. काम करने वाले कॉम्बिनेशन के लिए true और काम न करने वाले कॉम्बिनेशन के लिए false दिखाना ज़रूरी है. HAL, isStreamCombinationSupported को लागू करने के तरीके का इस्तेमाल कर सकता है. साथ ही, sessionParams में पास की जा रही CaptureRequest सेटिंग की जांच करने के लिए सहायता जोड़ सकता है.

  • getSessionCharacteristics: सेशन पैरामीटर के साथ काम करने वाली स्ट्रीम का कॉम्बिनेशन लेता है और सेशन से जुड़ी विशेषताओं को दिखाता है.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: आम तौर पर इस्तेमाल किए जाने वाले सभी सेशन कॉन्फ़िगरेशन की सूची बनाता है. इन कॉन्फ़िगरेशन की पुष्टि, नीतियों का पालन करने से जुड़ी जांच की मदद से की जाती है.

ICameraDevice इंटरफ़ेस के वर्शन 3 से पहले के वर्शन के लिए, एचएएल को isStreamCombinationSupported तरीका लागू करना चाहिए.

एपीआई से पूछे गए सुविधा के कॉम्बिनेशन के बारे में ज़्यादा जानकारी के लिए, system/media/camera/docs/metadata_definitions.xml में sessionConfigurationQueryVersion के दस्तावेज़ देखें.

इस सुविधा को लागू करने का रेफ़रंस पाने के लिए, hardware/google/camera/devices/EmulatedCamera/hwl/ देखें.

सार्वजनिक एपीआई

ऐप्लिकेशन, डिवाइस पर काम करने वाले सुविधाओं के कॉम्बिनेशन के बारे में क्वेरी करने के लिए, यहां दिए गए सार्वजनिक एपीआई का इस्तेमाल कर सकते हैं:

  • CameraDevice.CameraDeviceSetup: CameraDevice का सीमित वर्शन, जिसका इस्तेमाल CameraDevice इंस्टेंस की ज़रूरत के बिना, सुविधा के कॉम्बिनेशन के बारे में क्वेरी करने के लिए किया जा सकता है.

  • getCameraDeviceSetup: isCameraDeviceSetupSupported से true मिलने पर, किसी दिए गए कैमरा आईडी के लिए CameraDeviceSetup ऑब्जेक्ट हासिल करता है.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: अगर यह वैल्यू VANILLA_ICE_CREAM या इससे ज़्यादा है, तो सुविधा के कॉम्बिनेशन क्वेरी काम करती हैं.

  • OutputConfiguration: कैमरे के आउटपुट की जानकारी देने वाली क्लास. इसमें, कम इंतज़ार वाली सुविधा के कॉम्बिनेशन क्वेरी के लिए, डिफ़र्ड सरफ़ेस शामिल हो सकता है.

  • SessionConfiguration: यह एक यूटिलिटी क्लास है, जिसमें सेशन कॉन्फ़िगरेशन के बारे में बताया गया है. इसमें स्ट्रीम के कॉम्बिनेशन और सेशन पैरामीटर शामिल हैं. इसका इस्तेमाल, सुविधा के कॉम्बिनेशन से जुड़ी क्वेरी के लिए किया जा सकता है.

पुष्टि करें

इस सुविधा को लागू करने की पुष्टि करने के लिए, यहां दिए गए वीटीएस, सीटीएस, और कैमरा आईटीएस (सीटीएस की पुष्टि करने वाले टूल) टेस्ट का इस्तेमाल करें:

VTS

सीटीएस

कैमरा आईटीएस