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