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

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

रेफ़रंस फ़ाइल को लागू करना

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

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

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

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

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

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

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

लागू करना

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

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

इस सुविधा को चालू करने के लिए कैमरा एचएएल को नीचे दिए गए स्टैटिक को भरना होगा मेटाडेटा एंट्री:

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

    यह जानकारी इसमें सेव की जाती है availableRecommendedStreamConfigurations मेटाडेटा टैग.

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

    [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 मेटाडेटा टैग में सेव की जाती है.

यह जानकारी कैमरा क्लाइंट को सुझाया गया स्ट्रीम कॉन्फ़िगरेशन मैप एपीआई.

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

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

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

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

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

पुष्टि करें

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

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

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

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

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

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

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

लागू करना

एपीआई की सुविधा के अलग-अलग कॉम्बिनेशन की क्वेरी करने में मदद करने के लिए, इन्हें लागू करें इसके वर्शन 3 में फ़ीचर कॉम्बिनेशन क्वेरी API 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: दिए गए कैमरा आईडी के लिए CameraDeviceSetup ऑब्जेक्ट हासिल करता है, अगर isCameraDeviceSetupSupported, true दिखाता है.

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

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

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

पुष्टि करें

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

वीटीएस

सीटीएस

कैमरा आईटीएस