सेशन पैरामीटर की सुविधा से, कैमरा क्लाइंट, महंगे अनुरोध पैरामीटर के सबसेट को ऐक्टिव तौर पर कॉन्फ़िगर कर पाते हैं. इससे देरी कम होती है. महंगे अनुरोध पैरामीटर, सेशन पैरामीटर होते हैं. इन्हें कैप्चर सेशन शुरू करने के फ़ेज़ के दौरान कॉन्फ़िगर किया जाता है. इस सुविधा की मदद से, आपके HAL लागू करने वाले टूल को स्ट्रीम कॉन्फ़िगरेशन के फ़ेज़ के दौरान, क्लाइंट पैरामीटर मिलते हैं. ये पैरामीटर, कैप्चर के पहले अनुरोध के बजाय मिलते हैं. साथ ही, अपनी वैल्यू के हिसाब से, ये टूल इंटरनल पाइपलाइन को ज़्यादा बेहतर तरीके से तैयार और बिल्ड कर सकते हैं.
Android 10 में, सेशन पैरामीटर के इंटरनल रीकॉन्फ़िगरेशन लॉजिक पर ज़्यादा कंट्रोल पाने के लिए, सेशन रीकॉन्फ़िगरेशन क्वेरी की वैकल्पिक सुविधा का इस्तेमाल करके, परफ़ॉर्मेंस को बेहतर बनाया जा सकता है. ज़्यादा जानकारी के लिए, सेशन रीकॉन्फ़िगरेशन क्वेरी देखें.
उदाहरण और सोर्स
रेफ़रंस सेशन पैरामीटर लागू करने की सुविधा, CameraHal का हिस्सा है. यह HAL, लेगसी Hal API का इस्तेमाल करता है. कैमरा HIDL API को लागू करने वाले, बाइंडर वाले CameraHal को स्ट्रीम कॉन्फ़िगरेशन के दौरान, नए आने वाले किसी भी सेशन पैरामीटर को ऐक्सेस करने के लिए, संबंधित HIDL sessionParams एंट्री का इस्तेमाल करना होगा.
कैमरा क्लाइंट,
getAvailableSessionKeys()
को कॉल करके, सभी काम करने वाले सेशन पैरामीटर की कुंजियों के बारे में क्वेरी कर सकते हैं. इसके बाद,
setSessionParameters() के ज़रिए, उनकी शुरुआती वैल्यू सेट कर सकते हैं.
लागू करना
आपके CameraHal को लागू करने वाले टूल को, संबंधित स्टैटिक कैमरा मेटाडेटा में
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
को पॉप्युलेट करना होगा. साथ ही,
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS,
का सबसेट उपलब्ध कराना होगा. इसमें उन कुंजियों की सूची होती है जिन्हें हर फ़्रेम पर लागू करना मुश्किल होता है. साथ ही, कैप्चर सेशन के दौरान इनमें बदलाव करने पर,
अनचाही देरी हो सकती है.
इसके आम उदाहरणों में, ऐसे पैरामीटर शामिल हैं जिनके लिए, हार्डवेयर को रीकॉन्फ़िगर करने में ज़्यादा समय लगता है या कैमरे की इंटरनल पाइपलाइन में बदलाव करना पड़ता है. कैप्चर के अनुरोधों में, सेशन पैरामीटर पर अब भी कंट्रोल किया जा सकता है. हालांकि, क्लाइंट को अपने ऐप्लिकेशन में होने वाली देरी के बारे में पता होना चाहिए और इसके लिए तैयार रहना चाहिए.
फ़्रेमवर्क, आने वाले सभी अनुरोधों पर नज़र रखता है. अगर उसे सेशन पैरामीटर की वैल्यू में कोई बदलाव दिखता है, तो वह इंटरनल तौर पर कैमरे को रीकॉन्फ़िगर करता है. इसके बाद, CameraHal को पास किए गए नए स्ट्रीम कॉन्फ़िगरेशन में, अपडेट की गई सेशन पैरामीटर की वैल्यू शामिल होती हैं. इनका इस्तेमाल, कैमरे की पाइपलाइन को ज़्यादा बेहतर तरीके से कॉन्फ़िगर करने के लिए किया जाता है.
पसंद के मुताबिक बनाएं
उपलब्ध सेशन पैरामीटर की सूची में टैग तय किए जा सकते हैं. यह सूची, CameraHal की ओर से पॉप्युलेट की जाती है. अगर CameraHal, उपलब्ध सेशन पैरामीटर की सूची को खाली छोड़ देता है, तो यह सुविधा काम नहीं करती.
सत्यापन
CTS में, सेशन पैरामीटर की जांच के लिए ये नए मामले शामिल हैं:
CameraDeviceTest#testSessionConfigurationCameraDeviceTest#testCreateSessionWithParametersCameraDeviceTest#testSessionParametersStateLeakNativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
आम तौर पर, किसी पैरामीटर को सेशन की कुंजी की सूची में शामिल करने के बाद, उसकी मौजूदा वैल्यू को HAL लेयर पर, स्ट्रीम कॉन्फ़िगरेशन के दौरान पास किए गए सेशन पैरामीटर के तौर पर शामिल किया जाता है.
सेशन पैरामीटर को ध्यान से चुनना ज़रूरी है. स्ट्रीम कॉन्फ़िगरेशन के बीच, वैल्यू में बार-बार बदलाव नहीं होना चाहिए. कैप्चर इंटेंट जैसे पैरामीटर में बार-बार बदलाव होता है. इसलिए, ये पैरामीटर सही नहीं हैं. इन्हें सेशन पैरामीटर की सूची में जोड़ने से, इंटरनल रीकॉन्फ़िगरेशन ज़्यादा होने की वजह से, CTS में गड़बड़ियां आ सकती हैं.
सेशन रीकॉन्फ़िगरेशन क्वेरी
Android 10 में, सेशन रीकॉन्फ़िगरेशन क्वेरी की वैकल्पिक सुविधा जोड़ी गई है. इससे परफ़ॉर्मेंस को बेहतर बनाया जा सकता है, क्योंकि सेशन पैरामीटर वैल्यू में बदलाव करने से, स्ट्रीम के इंटरनल रीकॉन्फ़िगरेशन की वजह से परफ़ॉर्मेंस कम हो सकती है. इस समस्या को हल करने के लिए,
HIDL
ICameraDeviceSession
का वर्शन 3.5 और इसके बाद के वर्शन में,
isReconfigurationRequired
तरीका काम करता है. इससे, सेशन पैरामीटर के इंटरनल
रीकॉन्फ़िगरेशन लॉजिक पर ज़्यादा कंट्रोल मिलता है. इस तरीके का इस्तेमाल करके, स्ट्रीम को सिर्फ़ ज़रूरत पड़ने पर रीकॉन्फ़िगर किया जा सकता है.
isReconfigurationRequired के लिए दिए गए आर्ग्युमेंट, सेशन पैरामीटर में होने वाले हर बदलाव के बारे में ज़रूरी जानकारी देते हैं. इससे, डिवाइस के हिसाब से अलग-अलग तरह के बदलाव किए जा सकते हैं.
यह सुविधा, सिर्फ़ कैमरा सेवा और कैमरा HAL में लागू की जाती है. इसके लिए, कोई सार्वजनिक तौर पर उपलब्ध एपीआई नहीं है. अगर यह सुविधा लागू की जाती है, तो सेशन पैरामीटर के साथ काम करते समय, कैमरा क्लाइंट को परफ़ॉर्मेंस में सुधार दिखना चाहिए.
लागू करना
सेशन रीकॉन्फ़िगरेशन क्वेरी के लिए, आपको
isReconfigurationRequired
तरीका लागू करना होगा. इससे यह पता चलेगा कि सेशन पैरामीटर की नई
वैल्यू के लिए, स्ट्रीम को पूरी तरह से रीकॉन्फ़िगर करना ज़रूरी है या नहीं.
अगर क्लाइंट, विज्ञापन में दिखाए गए किसी सेशन पैरामीटर की वैल्यू बदलता है, तो कैमरा फ़्रेमवर्क, isReconfigurationRequired तरीके को कॉल करता है. खास वैल्यू के आधार पर, HAL यह तय करता है कि स्ट्रीम को पूरी तरह से रीकॉन्फ़िगर करना ज़रूरी है या नहीं. अगर HAL, false दिखाता है, तो कैमरा फ़्रेमवर्क, इंटरनल रीकॉन्फ़िगरेशन को छोड़ देता है. अगर HAL, true दिखाता है, तो फ़्रेमवर्क, स्ट्रीम को रीकॉन्फ़िगर करता है और सेशन पैरामीटर की नई वैल्यू पास करता है.
फ़्रेमवर्क, HAL को नए पैरामीटर के साथ कोई अनुरोध सबमिट करने से कुछ समय पहले, isReconfigurationRequired तरीके को कॉल कर सकता है. साथ ही, अनुरोध सबमिट करने से पहले उसे रद्द किया जा सकता है. इसलिए, HAL को इस तरीके के कॉल का इस्तेमाल, अपने व्यवहार में किसी भी तरह का बदलाव करने के लिए नहीं करना चाहिए.
HAL को लागू करने के लिए, ये ज़रूरी शर्तें पूरी करनी होंगी:
- फ़्रेमवर्क, चालू सेशन कॉन्फ़िगरेशन के बाद किसी भी समय,
isReconfigurationRequiredतरीके को कॉल कर सकता है. - कैमरे के लंबित अनुरोधों की परफ़ॉर्मेंस पर कोई असर नहीं पड़ना चाहिए. खास तौर पर, कैमरे की सामान्य स्ट्रीमिंग के दौरान कोई गड़बड़ी या देरी नहीं होनी चाहिए.
डिवाइस और HAL को लागू करने के लिए, परफ़ॉर्मेंस से जुड़ी ये ज़रूरी शर्तें पूरी करनी होंगी:
- कैमरे की हार्डवेयर और सॉफ़्टवेयर सेटिंग में बदलाव नहीं किया जाना चाहिए.
- कैमरे की परफ़ॉर्मेंस पर, उपयोगकर्ता को दिखने वाला कोई असर नहीं पड़ना चाहिए.
isReconfigurationRequired तरीके में ये आर्ग्युमेंट शामिल होते हैं:
oldSessionParams: पिछले सेशन के सेशन पैरामीटर. आम तौर पर, मौजूदा सेशन पैरामीटर.newSessionParams: क्लाइंट की ओर से सेट किए गए नए सेशन पैरामीटर.
रिटर्न के लिए, ये स्टेटस कोड मिलने की उम्मीद है:
OK: रीकॉन्फ़िगरेशन की ज़रूरी क्वेरी पूरी हो गई.METHOD_NOT_SUPPORTED: कैमरा डिवाइस, रीकॉन्फ़िगरेशन क्वेरी के साथ काम नहीं करता.INTERNAL_ERROR: इंटरनल गड़बड़ी की वजह से, रीकॉन्फ़िगरेशन क्वेरी पूरी नहीं हो सकती.
रिटर्न की वैल्यू ये हैं:
true: स्ट्रीम को रीकॉन्फ़िगर करना ज़रूरी है.false: स्ट्रीम को रीकॉन्फ़िगर करना ज़रूरी नहीं है.
सेशन रीकॉन्फ़िगरेशन क्वेरी को अनदेखा करने के लिए, HAL, METHOD_NOT_SUPPORTED या false दिखाता है. इससे, कैमरा सेवा का डिफ़ॉल्ट व्यवहार होता है. इसमें, सेशन पैरामीटर में हर बदलाव पर, स्ट्रीम रीकॉन्फ़िगरेशन ट्रिगर होता है.
सत्यापन
सेशन रीकॉन्फ़िगरेशन क्वेरी की सुविधा की पुष्टि, VTS टेस्ट
केस का इस्तेमाल करके की जा सकती है जो
CameraHidlTest#configureStreamsWithSessionParameters में मौजूद है.