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

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 API के ज़रिए मिलती है.

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

इन इस्तेमाल के उदाहरणों के लिए, स्ट्रीम के सुझाए गए कॉन्फ़िगरेशन उपलब्ध कराने होंगे. साथ ही, इनसे जुड़ी ज़रूरी शर्तें पूरी करनी होंगी:

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

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

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

Validation

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

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

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

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

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

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

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

लागू करना

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

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

Validation

इस सुविधा को लागू करने की पुष्टि करने के लिए, वीटीएस, सीटीएस, और Camera ITS (CTS Verifier) के इन टेस्ट का इस्तेमाल करें:

VTS

CTS

Camera ITS