camera2_request_queue_src_ops स्ट्रक्चर का रेफ़रंस
#include <
camera2.h
>
डेटा फ़ील्ड |
|
int(* | request_count )(const struct camera2_request_queue_src_ops *q) |
int(* | dequeue_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
int(* | free_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer) |
पूरी जानकारी
अनुरोध इनपुट कतार प्रोटोकॉल:
फ़्रेमवर्क में सूची और उसका कॉन्टेंट सेव होता है. शुरू में, सूची खाली होती है.
- जब पहला मेटाडेटा बफ़र सूची में डाला जाता है, तो फ़्रेमवर्क, notify_request_queue_not_empty() को कॉल करके डिवाइस को सिग्नल भेजता है.
- notify_request_queue_not_empty मिलने के बाद, डिवाइस को अगला बफ़र मैनेज करने के लिए, dequeue() को कॉल करना होगा.
- जब डिवाइस किसी बफ़र को प्रोसेस कर लेता है और अगले बफ़र के लिए तैयार हो जाता है, तो उसे सूचना का इंतज़ार करने के बजाय, dequeue() को फिर से कॉल करना चाहिए. अगर कोई बफ़र उपलब्ध नहीं है, तो dequeue() फ़ंक्शन NULL दिखाएगा. इसके बाद, जब कोई बफ़र उपलब्ध हो जाता है, तो फ़्रेमवर्क को notify_request_queue_not_empty() को फिर से कॉल करना होगा. अगर डिवाइस को dequeue से NULL रिटर्न मिलता है, तो उसे तब तक कतार के लिए फिर से क्वेरी करने की ज़रूरत नहीं है, जब तक सोर्स से notify_request_queue_not_empty() कॉल नहीं मिलता.
- अगर डिवाइस buffer_count() को कॉल करता है और उसे 0 वैल्यू मिलती है, तो इसका मतलब यह नहीं है कि फ़्रेमवर्क, notify_request_queue_not_empty() कॉल देगा. फ़्रेमवर्क सिर्फ़ तब ऐसी सूचना देगा, जब डिवाइस को डिसक्यू से NULL मिला हो या शुरुआती स्टार्टअप के बाद.
- notify_request_queue_not_empty() के जवाब में dequeue() कॉल, notify_request_queue_not_empty() कॉल की ही थ्रेड पर हो सकता है. साथ ही, notify कॉल से भी इसे किया जा सकता है.
- सूची से हटाए गए सभी अनुरोध बफ़र को free_request को कॉल करके फ़्रेमवर्क में वापस लाया जाना चाहिए. इसमें गड़बड़ियां होने, डिवाइस को फ़्लश करने का अनुरोध करने या डिवाइस के बंद होने पर भी ऐसा करना ज़रूरी है.
फ़ील्ड का दस्तावेज़
int(* dequeue_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
फ़्रेमवर्क से मेटाडेटा बफ़र पाएं. अगर कोई गड़बड़ी नहीं है, तो OK दिखाता है. अगर कतार खाली है, तो बफ़र में NULL दिखाता है. ऐसे में, डिवाइस को फिर से सूची से हटाने की कोशिश करने से पहले, notify_request_queue_not_empty() मैसेज का इंतज़ार करना होगा. इस तरह से मिले बफ़र को free_request() के साथ फ़्रेमवर्क में वापस लौटाया जाना चाहिए .
int(* free_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer) |
int(* request_count)(const struct camera2_request_queue_src_ops *q) |
सूची में मौजूद, अनुरोध बफ़र की संख्या देखें. अगर फ़िलहाल बार-बार होने वाले अनुरोध (स्ट्रीम के लिए अनुरोध) को कॉन्फ़िगर किया गया है, तो CAMERA2_REQUEST_QUEUE_IS_BOTTOMLESS को दिखाया जा सकता है. इस तरीके को कॉल करने से, इस बात पर कोई असर नहीं पड़ता कि फ़्रेमवर्क, notify_request_queue_not_empty() तरीके को कॉल करेगा या नहीं.
इस स्ट्रक्चर का दस्तावेज़, इस फ़ाइल से जनरेट किया गया था:
- hardware/libhardware/include/hardware/ camera2.h