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