camera3_callback_ops स्ट्रक्चर का रेफ़रंस
#include <
camera3.h
>
डेटा फ़ील्ड |
|
void(* | process_capture_result )(const struct camera3_callback_ops *, const camera3_capture_result_t *result) |
void(* | notify )(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg) |
पूरी जानकारी
फ़ील्ड के बारे में दस्तावेज़
void(* notify)(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg) |
सूचना भेजें:
HAL से मिलने वाला असिंक्रोनस नोटिफ़िकेशन कॉलबैक, जिसे कई वजहों से ट्रिगर किया जाता है. सिर्फ़ ऐसी जानकारी के लिए जो फ़्रेम कैप्चर से अलग हो या जिसके लिए खास समय की ज़रूरत हो. मैसेज स्ट्रक्चर का मालिकाना हक HAL के पास रहता है. साथ ही, यह मैसेज सिर्फ़ कॉल की अवधि के लिए मान्य होना चाहिए.
एक साथ कई थ्रेड, notify() को कॉल कर सकते हैं.
<= CAMERA_DEVICE_API_VERSION_3_1:
किसी अनुरोध के लिए एक्सपोज़र शुरू होने की सूचना, HAL को process_capture_result() को पहली बार कॉल करने से पहले भेजनी होगी.
>= CAMERA_DEVICE_API_VERSION_3_2:
फ़्रेमवर्क को डिलीवर किए गए बफ़र, ऐप्लिकेशन लेयर को तब तक नहीं भेजे जाएंगे, जब तक SHUTTER notify() कॉल के ज़रिए, एक्सपोज़र शुरू होने का टाइमस्टैंप (या फिर से प्रोसेस करने के अनुरोध के लिए, इनपुट इमेज के एक्सपोज़र शुरू होने का टाइमस्टैंप) नहीं मिल जाता. हमारा सुझाव है कि इस कॉल को जल्द से जल्द डिस्पैच करें.
परफ़ॉर्मेंस से जुड़ी ज़रूरी शर्तें:
यह एक नॉन-ब्लॉकिंग कॉल है. फ़्रेमवर्क, इस कॉल को 5 मि॰से॰ में वापस कर देगा.
void(* process_capture_result)(const struct camera3_callback_ops *, const camera3_capture_result_t *result) |
process_capture_result:
कैप्चर किए गए डेटा से मिले नतीजों को फ़्रेमवर्क में भेजता है. process_capture_result() को HAL, कैप्चर करने के एक अनुरोध के जवाब में कई बार कॉल कर सकता है. इससे, उदाहरण के लिए, मेटाडेटा और कम रिज़ॉल्यूशन वाले बफ़र को एक कॉल में वापस लाया जा सकता है. साथ ही, पोस्ट-प्रोसेस किए गए JPEG बफ़र को बाद के कॉल में वापस लाया जा सकता है. हर कॉल में, उस अनुरोध का फ़्रेम नंबर शामिल होना चाहिए जिसके लिए मेटाडेटा या बफ़र वापस भेजे जा रहे हैं.
पूरे नतीजे के किसी कॉम्पोनेंट (बफ़र या मेटाडेटा) को सिर्फ़ एक process_capture_result कॉल में शामिल किया जा सकता है. हर स्ट्रीम के लिए बफ़र और नतीजे का मेटाडेटा, HAL को हर अनुरोध के लिए process_capture_result कॉल में से किसी एक में वापस भेजना होगा. ऐसा तब भी करना होगा, जब कुछ आउटपुट जनरेट करने में गड़बड़ियां हुई हों. आउटपुट बफ़र या नतीजे के मेटाडेटा के बिना, process_capture_result() को कॉल करने की अनुमति नहीं है.
किसी एक नतीजे के लिए मेटाडेटा और बफ़र को किस क्रम में दिखाया जाए, इससे कोई फ़र्क़ नहीं पड़ता. हालांकि, किसी स्ट्रीम के लिए बफ़र को फ़र्स्ट इन फ़र्स्ट आउट (FIFO) क्रम में दिखाया जाना चाहिए. इसलिए, स्ट्रीम A के लिए अनुरोध 5 का बफ़र हमेशा स्ट्रीम A के लिए अनुरोध 6 के बफ़र से पहले दिखाया जाना चाहिए. यह नतीजों के मेटाडेटा पर भी लागू होता है. अनुरोध 5 का मेटाडेटा, अनुरोध 6 के मेटाडेटा से पहले वापस किया जाना चाहिए.
हालांकि, अलग-अलग स्ट्रीम एक-दूसरे से जुड़ी नहीं होती हैं. इसलिए, यह स्वीकार किया जा सकता है कि स्ट्रीम A के पांचवें अनुरोध का बफ़र, स्ट्रीम B के छठे अनुरोध के बफ़र के बाद वापस आ सकता है. साथ ही, यह भी स्वीकार किया जा सकता है कि स्ट्रीम B के छठे अनुरोध के नतीजे का मेटाडेटा, स्ट्रीम A के पांचवें अनुरोध के बफ़र से पहले वापस आ सकता है.
नतीजे के स्ट्रक्चर का मालिकाना हक HAL के पास रहता है. इस कॉल के दौरान, इसे सिर्फ़ ऐक्सेस करने के लिए मान्य होना चाहिए. फ़्रेमवर्क, इस कॉल के वापस आने से पहले ज़रूरी जानकारी कॉपी कर लेगा.
आउटपुट बफ़र को अभी भरने की ज़रूरत नहीं है. फ़्रेमवर्क, बफ़र डेटा को पढ़ने से पहले, स्ट्रीम बफ़र रिलीज़ सिंक फ़ेंस का इंतज़ार करेगा. इसलिए, HAL को इस तरीके को जल्द से जल्द कॉल करना चाहिए. भले ही, कुछ या सभी आउटपुट बफ़र अब भी भरे जा रहे हों. HAL को हर output_buffers स्ट्रीम बफ़र एंट्री में, रिलीज़ सिंक के मान्य फ़ेंस शामिल करने होंगे. अगर स्ट्रीम बफ़र पहले से भरा हुआ है, तो -1 शामिल करना होगा.
अगर किसी अनुरोध के लिए नतीजे का बफ़र नहीं बनाया जा सकता है, तो HAL को खाली मेटाडेटा बफ़र दिखाना चाहिए. हालांकि, उसे आउटपुट बफ़र और उनके सिंक फ़ेंस अब भी उपलब्ध कराने चाहिए. इसके अलावा, notify() को ERROR_RESULT मैसेज के साथ कॉल किया जाना चाहिए.
अगर आउटपुट बफ़र नहीं भरा जा सकता, तो उसके स्टेटस फ़ील्ड को STATUS_ERROR पर सेट किया जाना चाहिए. इसके अलावा, notify() को ERROR_BUFFER मैसेज के साथ कॉल किया जाना चाहिए.
अगर पूरा कैप्चर फ़ेल हो जाता है, तो भी इस तरीके को कॉल करना ज़रूरी है, ताकि आउटपुट बफ़र को फ़्रेमवर्क पर वापस भेजा जा सके. सभी बफ़र की स्थिति STATUS_ERROR होनी चाहिए. साथ ही, नतीजे का मेटाडेटा एक खाली बफ़र होना चाहिए. इसके अलावा, notify() को ERROR_REQUEST मैसेज के साथ कॉल किया जाना चाहिए. इस मामले में, ERROR_RESULT/ERROR_BUFFER के अलग-अलग मैसेज नहीं भेजे जाने चाहिए.
परफ़ॉर्मेंस से जुड़ी ज़रूरी शर्तें:
यह एक नॉन-ब्लॉकिंग कॉल है. फ़्रेमवर्क, इस कॉल को 5 मि॰से॰ में वापस कर देगा.
पाइपलाइन की लेटेन्सी (परिभाषा के लिए S7 देखें) चार फ़्रेम इंटरवल से कम या इसके बराबर होनी चाहिए. साथ ही, यह आठ फ़्रेम इंटरवल से कम या इसके बराबर होनी चाहिए.
इस स्ट्रक्चर के लिए दस्तावेज़, इस फ़ाइल से जनरेट किया गया था:
- hardware/libhardware/include/hardware/ camera3.h