camera3_capture_result स्ट्रक्चर का रेफ़रंस
#include <
camera3.h
>
डेटा फ़ील्ड |
|
uint32_t | frame_number |
const camera_metadata_t * | नतीजा |
uint32_t | num_output_buffers |
const camera3_stream_buffer_t * | output_buffers |
const camera3_stream_buffer_t * | input_buffer |
uint32_t | partial_result |
पूरी जानकारी
camera3_capture_result_t:
कैमरा एचएएल डिवाइस से एक बार कैप्चर करने/फिर से प्रोसेस करने का नतीजा. इसे फ़्रेमवर्क में, process_capture_result() के साथ असींक्रोनस तरीके से भेजा जाता है. यह process_capture_request() के साथ HAL को भेजे गए एक कैप्चर अनुरोध के जवाब में होता है. हर अनुरोध के लिए, HAL कई process_capture_result() कॉल कर सकता है.
एक ही फ़्रेम नंबर वाले हर कॉल में, आउटपुट बफ़र और/या नतीजे के मेटाडेटा का कोई सबसेट हो सकता है. किसी फ़्रेम नंबर के लिए, मेटाडेटा सिर्फ़ एक बार दिया जा सकता है. अन्य सभी कॉल के लिए, नतीजे का मेटाडेटा NULL पर सेट होना चाहिए.
नतीजे के स्ट्रक्चर में, इस कैप्चर का आउटपुट मेटाडेटा और आउटपुट बफ़र का सेट शामिल होता है. इस कैप्चर के लिए, ये बफ़र भरे गए हैं या भरे जाएंगे. हर आउटपुट बफ़र में रिलीज़ सिंक फ़ेंस हो सकता है. अगर बफ़र को एचएएल ने अभी तक नहीं भरा है, तो फ़्रेमवर्क उसे पढ़ने से पहले इंतज़ार करेगा.
>= CAMERA_DEVICE_API_VERSION_3_2:
एक ही फ़्रेम नंबर के लिए, मेटाडेटा कई बार दिया जा सकता है. फ़्रेमवर्क, हर छोटे नतीजे को कुल नतीजे के सेट में जोड़कर, फ़ाइनल नतीजे का सेट इकट्ठा करेगा.
अगर किसी अनुरोध में इनपुट बफ़र दिया जाता है, तो एचएएल को उसे process_capture_result कॉल में से किसी एक में लौटाना होगा. यह कॉल, सिर्फ़ इनपुट बफ़र को लौटाने के लिए हो सकता है, जिसमें मेटाडेटा और आउटपुट बफ़र शामिल नहीं हैं. सिंक फ़ेंस को उसी तरह मैनेज किया जाना चाहिए जिस तरह आउटपुट बफ़र के लिए किया जाता है.
परफ़ॉर्मेंस से जुड़ी बातें:
ऐप्लिकेशन को भी ये कुछ नतीजे तुरंत मिल जाएंगे. इसलिए, परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए, कुछ नतीजे भेजने का सुझाव दिया जाता है. इससे, पाइपलाइन में पहले से मौजूद नतीजों को भेजने से पहले, पाइपलाइन में होने वाली कुल देरी से बचा जा सकता है.
इसका एक सामान्य इस्तेमाल, पाइपलाइन के आधे हिस्से में एएफ़ स्टेटस का हिसाब लगाना हो सकता है. स्टेटस को फ़्रेमवर्क में तुरंत भेजने से, हमें परफ़ॉर्मेंस में 50% की बढ़ोतरी मिलती है. साथ ही, ऑटो-फ़ोकस की रिस्पॉन्सिविटी भी बेहतर होती है.
फ़ील्ड का दस्तावेज़
uint32_t frame_number |
फ़्रेम नंबर, सबमिट किए गए अनुरोध में फ़्रेमवर्क से सेट किया गया एक ऐसा पूर्णांक है जो इस कैप्चर की खास पहचान करता है. इसका इस्तेमाल, camera3_callback_ops_t.notify() पर भेजी गई एसिंक्रोनस सूचनाओं में रिक्वेस्ट की पहचान करने के लिए भी किया जाता है .
const camera3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
इस कैप्चर के लिए इनपुट स्ट्रीम बफ़र का हैंडल. हो सकता है कि एचएएल, process_capture_result() को कॉल करने के समय, बफ़र का इस्तेमाल न कर पाए. फ़्रेमवर्क, बफ़र का फिर से इस्तेमाल करने से पहले, एचएएल से मिली रिलीज़ सिंक फ़ेंस का इंतज़ार करेगा.
एचएएल को सिंक फ़ेंस को उसी तरह मैनेज करना चाहिए जिस तरह output_buffers के लिए किया जाता है.
हर अनुरोध के लिए, सिर्फ़ एक इनपुट बफ़र भेजा जा सकता है. आउटपुट बफ़र की तरह ही, HAL को रिटर्न किए गए इनपुट बफ़र का क्रम बनाए रखना चाहिए.
परफ़ॉर्मेंस से जुड़ी बातें:
इनपुट बफ़र को जल्द से जल्द वापस लौटाना चाहिए. अगर एचएएल, सिंक फ़ेंस के साथ काम करता है, तो वह process_capture_result को कॉल करके, सिंक फ़ेंस को सही तरीके से सेट करके उसे वापस भेज सकता है. अगर सिंक फ़ेंस काम नहीं करते हैं, तो बफ़र का इस्तेमाल होने के बाद ही उसे वापस लाया जा सकता है. इसमें काफ़ी समय लग सकता है. बफ़र को जल्दी वापस लाने के लिए, एचएएल इस इनपुट बफ़र को कॉपी कर सकता है.
uint32_t num_output_buffers |
इस नतीजे के स्ट्रक्चर में दिखाए गए आउटपुट बफ़र की संख्या. यह संख्या, मैच करने वाले कैप्चर अनुरोध की संख्या से कम या उसके बराबर होनी चाहिए. अगर यह संख्या, कैप्चर अनुरोध में बफ़र की संख्या से कम है, तो फ़्रेमवर्क में बचे हुए आउटपुट बफ़र को वापस करने के लिए, उसी frame_number के साथ process_capture_result को कम से कम एक और कॉल करना होगा. यह सिर्फ़ तब शून्य हो सकता है, जब स्ट्रक्चर में मान्य नतीजा मेटाडेटा शामिल हो या इस नतीजे में कोई इनपुट बफ़र दिखाया गया हो.
const camera3_stream_buffer_t * output_buffers |
इस कैप्चर के लिए, आउटपुट स्ट्रीम बफ़र के हैंडल. हो सकता है कि एचएएल, process_capture_result() को कॉल करने के समय, ये फ़ेंस भर न हों. फ़्रेमवर्क, बफ़र पढ़ने से पहले, एचएएल से मिलने वाले रिलीज़ सिंक फ़ेंस का इंतज़ार करेगा.
एचएएल को स्ट्रीम बफ़र के रिलीज़ सिंक फ़ेंस को किसी मान्य सिंक फ़ीड पर सेट करना होगा. अगर बफ़र पहले से भरा हुआ है, तो उसे -1 पर सेट किया जाना चाहिए.
अगर बफ़र को प्रोसेस करने के दौरान HAL को कोई गड़बड़ी मिलती है और बफ़र भर नहीं पाता है, तो बफ़र के स्टेटस फ़ील्ड को CAMERA3_BUFFER_STATUS_ERROR पर सेट किया जाना चाहिए. अगर गड़बड़ी का पता चलने से पहले, एचएएल ने हासिल करने वाले फ़ेंस पर इंतज़ार नहीं किया, तो हासिल करने वाले फ़ेंस को रिलीज़ फ़ेंस में कॉपी किया जाना चाहिए. इससे फ़्रेमवर्क, बफ़र का फिर से इस्तेमाल करने से पहले फ़ेंस पर इंतज़ार कर पाएगा.
सभी आउटपुट बफ़र के लिए, हासिल करने की सीमा -1 पर सेट होनी चाहिए. अगर num_output_buffers शून्य है, तो यह NULL हो सकता है. ऐसे में, आउटपुट बफ़र देने के लिए, एचएएल को कम से कम एक और process_capture_result कॉल करना होगा.
जब किसी फ़्रेम के लिए नए बफ़र के साथ process_capture_result को कॉल किया जाता है, तो उस स्ट्रीम के लिए सभी पिछले फ़्रेम के बफ़र पहले ही डिलीवर हो चुके होने चाहिए. हालांकि, यह ज़रूरी नहीं है कि फ़ेंस के लिए सिग्नल दिया गया हो.
>= CAMERA_DEVICE_API_VERSION_3_2:
किसी फ़्रेम के लिए Gralloc बफ़र, SHUTTER-notify से पहले फ़्रेमवर्क को भेजे जा सकते हैं.
परफ़ॉर्मेंस से जुड़ी बातें:
फ़्रेमवर्क में डिलीवर किए गए बफ़र, ऐप्लिकेशन लेयर पर तब तक डिस्पैच नहीं किए जाएंगे, जब तक SHUTTER notify() कॉल के ज़रिए, एक्सपोज़र शुरू होने का टाइमस्टैंप नहीं मिल जाता. हमारा सुझाव है कि आप उस कॉल को जल्द से जल्द डिस्पैच करें.
uint32_t partial_result |
>= CAMERA_DEVICE_API_VERSION_3_2:
कुछ हिस्से के नतीजों का फ़ायदा पाने के लिए, एचएएल को स्टैटिक मेटाडेटा android.request.partialResultCount को उस संख्या पर सेट करना होगा जो हर फ़्रेम के लिए भेजे जाने वाले कुछ हिस्से के नतीजों की होगी.
आंशिक नतीजे वाले हर नए कैप्चर के लिए, इस फ़ील्ड (partial_result) को 1 और android.request.partialResultCount के बीच की एक अलग वैल्यू पर सेट करना ज़रूरी है.
जिन एचएएल को इस सुविधा का फ़ायदा नहीं लेना है उन्हें android.request.partialResultCount या partial_result को 1 के अलावा किसी दूसरी वैल्यू पर सेट नहीं करना चाहिए.
अगर कैप्चर के नतीजे में सिर्फ़ बफ़र शामिल हैं और कोई मेटाडेटा नहीं है, तो इस वैल्यू को 0 पर सेट करना होगा.
const camera_metadata_t * result |
इस कैप्चर के लिए नतीजे का मेटाडेटा. इसमें फ़ाइनल कैप्चर पैरामीटर, कैप्चर और पोस्ट-प्रोसेसिंग हार्डवेयर की स्थिति, 3A एल्गोरिदम की स्थिति (अगर चालू है), और चालू की गई किसी भी आंकड़ों की इकाई के आउटपुट की जानकारी शामिल होती है.
किसी फ़्रेम नंबर के साथ process_capture_result() को सिर्फ़ एक बार कॉल करने पर, नतीजे का मेटाडेटा शामिल हो सकता है. एक ही frame_number के लिए, सभी अन्य कॉल को इसे NULL पर सेट करना होगा.
अगर नतीजे का मेटाडेटा जनरेट करने में कोई गड़बड़ी हुई है, तो नतीजा एक खाली मेटाडेटा बफ़र होना चाहिए. साथ ही, notify() को ERROR_RESULT के साथ कॉल किया जाना चाहिए.
>= CAMERA_DEVICE_API_VERSION_3_2:
किसी फ़्रेम नंबर के साथ process_capture_result() को कई बार कॉल करने पर, नतीजे का मेटाडेटा शामिल हो सकता है.
सबमिट किए गए मेटाडेटा में, किसी फ़्रेम के लिए पहले के किसी मेटाडेटा की जानकारी शामिल नहीं होनी चाहिए. उस फ़्रेम के लिए, हर नए आंशिक नतीजे में भी अलग-अलग partial_result वैल्यू सेट होनी चाहिए.
अगर notify को ERROR_RESULT के साथ कॉल किया गया है, तो फ़्रेम के लिए आगे के सभी आंशिक नतीजों को फ़्रेमवर्क अनदेखा कर देता है.
इस स्ट्रक्चर का दस्तावेज़, इस फ़ाइल से जनरेट किया गया था:
- hardware/libhardware/include/hardware/ camera3.h