camera3_stream स्ट्रक्चर का रेफ़रंस
#include <
camera3.h
>
डेटा फ़ील्ड |
|
int | stream_type |
uint32_t | width |
uint32_t | height |
int | फ़ॉर्मैट |
uint32_t | इस्तेमाल की जानकारी |
uint32_t | max_buffers |
void * | priv |
android_dataspace_t | data_space |
int | रोटेशन |
void * | reserved [7] |
पूरी जानकारी
camera3_stream_t:
किसी एक कैमरे के इनपुट या आउटपुट स्ट्रीम का हैंडल. फ़्रेमवर्क, स्ट्रीम को उसके बफ़र रिज़ॉल्यूशन और फ़ॉर्मैट के हिसाब से तय करता है. साथ ही, HAL, gralloc के इस्तेमाल के फ़्लैग और ज़्यादा से ज़्यादा इन-फ़्लाइट बफ़र की संख्या के हिसाब से भी स्ट्रीम तय करता है.
स्ट्रीम स्ट्रक्चर का मालिकाना हक फ़्रेमवर्क के पास होता है. हालांकि, configure_streams() के ज़रिए एचएएल में पास किए गए camera3_stream के पॉइंटर, अगले configure_streams() कॉल के खत्म होने तक मान्य होते हैं. यह कॉल, ऐसा कॉल होता है जिसमें आर्ग्युमेंट के तौर पर camera3_stream शामिल नहीं होता है. इसके अलावा, ये पॉइंटर तब तक मान्य होते हैं, जब तक close() कॉल खत्म नहीं हो जाता.
camera3_stream को configure_streams() में पास करने के बाद, camera3_stream के फ़्रेमवर्क से कंट्रोल किए जाने वाले सभी सदस्यों की वैल्यू में बदलाव नहीं किया जा सकता. निजी पॉइंटर के कॉन्टेंट को छोड़कर, HAL सिर्फ़ configure_streams() कॉल के दौरान HAL से कंट्रोल किए जाने वाले पैरामीटर में बदलाव कर सकता है.
अगर configure_streams() कॉल से कोई गड़बड़ी का कोड मिलता है, तो सभी चालू स्ट्रीम मान्य रहती हैं. ऐसा तब होता है, जब configure_streams() को कॉल न किया गया हो.
कैमरा एचएएल डिवाइस को स्ट्रीम का एंडपॉइंट नहीं दिख रहा है. DEVICE_API_VERSION_3_1 में, इस फ़्लैग को बदलकर, उन स्ट्रीम पर उपभोक्ता के इस्तेमाल के फ़्लैग शेयर करने के लिए किया गया था जहां कैमरा एक प्रोड्यूसर (OUTPUT और BIDIRECTIONAL स्ट्रीम टाइप) है. इस्तेमाल का फ़ील्ड नीचे देखें.
फ़ील्ड का दस्तावेज़
android_dataspace_t data_space |
यह फ़ील्ड, बफ़र के कॉन्टेंट के बारे में बताता है. फ़ॉर्मैट और बफ़र डाइमेंशन, स्ट्रीम बफ़र के मेमोरी लेआउट और स्ट्रक्चर के बारे में बताते हैं. वहीं, dataSpace, बफ़र में मौजूद डेटा का मतलब बताता है.
ज़्यादातर फ़ॉर्मैट के लिए, dataSpace, इमेज डेटा के कलर स्पेस को तय करता है. इसके अलावा, कुछ फ़ॉर्मैट के लिए dataSpace यह बताता है कि इमेज या डेप्थ पर आधारित डेटा का अनुरोध किया गया है या नहीं. फ़ॉर्मैट की जानकारी और हर फ़ॉर्मैट के लिए मान्य dataSpace वैल्यू के लिए, system/core/include/system/graphics.h देखें.
वर्शन की जानकारी:
< CAMERA_DEVICE_API_VERSION_3_3:
इसे तय नहीं किया गया है और इसे ऐक्सेस नहीं किया जाना चाहिए. dataSpace को HAL_DATASPACE_UNKNOWN माना जाना चाहिए. साथ ही, इस्तेमाल के फ़्लैग और फ़ॉर्मैट से सही कलर स्पेस वगैरह तय किया जाना चाहिए.
= CAMERA_DEVICE_API_VERSION_3_3:
इसे कैमरा सेवा हमेशा सेट करती है. HAL को इस dataSpace का इस्तेमाल करके, स्ट्रीम को सही कलरस्पेस में कॉन्फ़िगर करना चाहिए. इसके अलावा, अगर उपलब्ध हो, तो कलर और डेप्थ आउटपुट में से किसी एक को चुनना चाहिए. डेटास्पेस की वैल्यू, graphics.h में मौजूद लेगसी डेफ़िनिशन हैं
>= CAMERA_DEVICE_API_VERSION_3_4:
इसे कैमरा सेवा हमेशा सेट करती है. HAL को इस dataSpace का इस्तेमाल करके, स्ट्रीम को सही कलरस्पेस में कॉन्फ़िगर करना चाहिए. इसके अलावा, अगर उपलब्ध हो, तो कलर और डेप्थ आउटपुट में से किसी एक को चुनना चाहिए. डेटास्पेस की वैल्यू, graphics.h में V0 डेटास्पेस की परिभाषाओं का इस्तेमाल करके सेट की जाती हैं
int फ़ॉर्मैट |
इस स्ट्रीम में बफ़र का पिक्सल फ़ॉर्मैट. फ़ॉर्मैट, system/core/include/system/graphics.h में मौजूद HAL_PIXEL_FORMAT_* सूची या डिवाइस के हिसाब से हेडर से मिली वैल्यू होती है.
अगर HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED का इस्तेमाल किया जाता है, तो प्लैटफ़ॉर्म gralloc मॉड्यूल, कैमरा डिवाइस और स्ट्रीम के दूसरे एंडपॉइंट से मिले इस्तेमाल के फ़्लैग के आधार पर फ़ॉर्मैट चुनेगा.
<= CAMERA_DEVICE_API_VERSION_3_1:
अगर ज़रूरी हो, तो कैमरा एचएएल डिवाइस को, लागू करने के हिसाब से फ़ॉर्मैट की जानकारी पाने के लिए, register_stream_buffers() कॉल के बाद उसे दिए गए बफ़र की जांच करनी होगी.
>= CAMERA_DEVICE_API_VERSION_3_2:
फ़्रेमवर्क, register_stream_buffers() को कॉल नहीं करेगा. इसलिए, एचएएल को कॉन्फ़िगर की गई स्ट्रीम के साइज़, इस्तेमाल के फ़्लैग, और फ़ॉर्मैट के आधार पर, आईएसपी और सेंसर पाइपलाइन को कॉन्फ़िगर करना चाहिए.
uint32_t height |
uint32_t max_buffers |
void* priv |
int rotation |
स्ट्रीम के लिए ज़रूरी आउटपुट रोटेशन, camera3_stream_rotation_t की वैल्यू में से कोई एक. एचएएल को स्ट्रीम की चौड़ाई और ऊंचाई के साथ-साथ, इसकी जांच करनी होगी. उदाहरण के लिए, अगर घुमाव 90 डिग्री है और स्ट्रीम की चौड़ाई और ऊंचाई क्रमशः 720 और 1280 है, तो कैमरा सेवा 720x1280 साइज़ के बफ़र देगी. साथ ही, एचएएल को 1280x720 इमेज कैप्चर करनी होगी और इमेज को 90 डिग्री, घड़ी की सुई के उलट घुमाना होगा. स्ट्रीम टाइप इनपुट होने पर, रोटेशन फ़ील्ड काम नहीं करता. कैमरा एचएएल को इनपुट स्ट्रीम के लिए, रोटेशन फ़ील्ड को अनदेखा करना चाहिए.
<= CAMERA_DEVICE_API_VERSION_3_2:
तय नहीं किया गया है और इसे ऐक्सेस नहीं किया जाना चाहिए. HAL को आउटपुट इमेज पर कोई रोटेशन नहीं लागू करना चाहिए.
>= CAMERA_DEVICE_API_VERSION_3_3:
यह हमेशा कैमरा सेवा के हिसाब से सेट होता है. स्ट्रीम कॉन्फ़िगरेशन के दौरान, एचएएल को इस फ़ील्ड की जांच करनी चाहिए. अगर एचएएल ऐसा रोटेशन नहीं कर सकता, तो -EINVAL दिखाता है. एचएएल को हमेशा CAMERA3_STREAM_ROTATION_0 के साथ काम करना चाहिए. इसलिए, अगर सभी स्ट्रीम का रोटेशन फ़ील्ड CAMERA3_STREAM_ROTATION_0 है, तो configure_streams() कॉल को रोटेशन के काम न करने की वजह से नहीं रोका जाना चाहिए.
int stream_type |
uint32_t का इस्तेमाल |
इस स्ट्रीम के लिए gralloc के इस्तेमाल से जुड़े फ़्लैग, जो HAL के हिसाब से ज़रूरी हैं. इस्तेमाल के फ़्लैग, gralloc.h (GRALLOC_USAGE_*) या डिवाइस के हिसाब से हेडर में तय किए जाते हैं.
आउटपुट स्ट्रीम के लिए, ये एचएएल के प्रोड्यूसर के इस्तेमाल के फ़्लैग हैं. इनपुट स्ट्रीम के लिए, ये HAL के उपभोक्ता इस्तेमाल के फ़्लैग हैं. प्रोड्यूसर और कंज्यूमर के इस्तेमाल के फ़्लैग को एक साथ जोड़ दिया जाएगा. इसके बाद, हर स्ट्रीम के लिए gralloc बफ़र को असाइन करने के लिए, प्लैटफ़ॉर्म gralloc HAL मॉड्यूल को पास कर दिया जाएगा.
वर्शन की जानकारी:
== CAMERA_DEVICE_API_VERSION_3_0:
configure_streams() के ज़रिए पास किए जाने पर, कोई शुरुआती वैल्यू नहीं दी जाती. हो सकता है कि HAL इस फ़ील्ड का इस्तेमाल इनपुट के तौर पर न करे. साथ ही, उसे इस फ़ील्ड में इस्तेमाल के फ़्लैग लिखने होंगे.
>= CAMERA_DEVICE_API_VERSION_3_1:
stream_type OUTPUT और BIDIRECTIONAL के लिए, configure_streams() के ज़रिए पास किए जाने पर, इसकी शुरुआती वैल्यू, उपभोक्ता के इस्तेमाल के फ़्लैग होती है. स्ट्रीम कॉन्फ़िगरेशन तय करने के लिए, एचएएल इन उपभोक्ता फ़्लैग का इस्तेमाल कर सकता है. stream_type INPUT के लिए, configure_streams() के ज़रिए पास करने पर, इसकी शुरुआती वैल्यू 0 होती है. configure_streams() के ज़रिए भेजी गई सभी स्ट्रीम के लिए, एचएएल को इस फ़ील्ड में अपने इस्तेमाल के फ़्लैग लिखने होंगे.
uint32_t width |
इस स्ट्रक्चर का दस्तावेज़, इस फ़ाइल से जनरेट किया गया था:
- hardware/libhardware/include/hardware/ camera3.h