camera3_capture_result مرجع ساختار
#include < camera3.h >
فیلدهای داده | |
uint32_t | قاب_شماره |
const camera_metadata_t * | نتیجه |
uint32_t | num_output_buffers |
const camera3_stream_buffer_t * | خروجی_بافرها |
const camera3_stream_buffer_t * | input_buffer |
uint32_t | نتیجه_جزئی |
توصیف همراه با جزئیات
camera3_capture_result_t:
نتیجه یک ضبط/فرآوری مجدد توسط دستگاه HAL دوربین. این به صورت ناهمزمان با process_capture_result()، در پاسخ به یک درخواست ضبط منفرد ارسال شده به HAL با process_capture_request () به چارچوب ارسال میشود. فراخوانی های متعدد process_capture_result() ممکن است توسط HAL برای هر درخواست انجام شود.
هر تماس، همگی با شماره فریم یکسان، ممکن است حاوی زیرمجموعهای از بافرهای خروجی و/یا فراداده نتیجه باشد. ابرداده ممکن است فقط یک بار برای یک شماره فریم مشخص ارائه شود. همه فراخوانی های دیگر باید متادیتای نتیجه را روی NULL تنظیم کنند.
ساختار نتیجه شامل فراداده خروجی از این ضبط، و مجموعه ای از بافرهای خروجی است که برای این ضبط پر شده است/خواهد شد. هر بافر خروجی ممکن است همراه با حصار همگام سازی انتشار باشد که در صورتی که بافر هنوز توسط HAL پر نشده باشد، چارچوب قبل از خواندن منتظر می ماند.
>= CAMERA_DEVICE_API_VERSION_3_2:
ابرداده ممکن است چندین بار برای یک عدد فریم ارائه شود. چارچوب با ترکیب هر یک از نتایج جزئی با هم در مجموعه نتایج کل، مجموعه نتیجه نهایی را با هم جمع می کند.
اگر یک بافر ورودی در یک درخواست داده شود، HAL باید آن را در یکی از فراخوانی های process_capture_result برگرداند، و ممکن است تماس فقط برای بازگرداندن بافر ورودی، بدون ابرداده و بافرهای خروجی باشد. حصارهای همگامسازی باید به همان روشی که برای بافرهای خروجی انجام میشود، اداره شود.
ملاحظات عملکرد:
برنامهها همچنین این نتایج جزئی را فوراً دریافت خواهند کرد، بنابراین ارسال نتایج جزئی یک بهینهسازی عملکرد بسیار توصیهشده برای جلوگیری از تأخیر کلی خط لوله قبل از ارسال نتایج برای آنچه در مراحل اولیه مشخص شده است، است.
یک مورد معمول ممکن است محاسبه حالت AF در نیمه راه خط لوله باشد. با بازگرداندن حالت به فریمورک فوراً، 50 درصد افزایش عملکرد و پاسخدهی درک شده از فوکوس خودکار دریافت میکنیم.
مستندات میدانی
uint32_t قاب_شماره |
شماره قاب یک عدد صحیح افزایشی است که توسط چارچوب در درخواست ارسال شده برای شناسایی منحصر به فرد این تصویر تنظیم شده است. همچنین برای شناسایی درخواست در اعلان های ناهمزمان ارسال شده به camera3_callback_ops_t.notify() استفاده می شود.
const camera3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
دسته برای بافر جریان ورودی برای این ضبط. ممکن است در زمانی که HAL فرآیند_capture_result(); چارچوب قبل از استفاده مجدد از بافر، روی حصارهای همگام سازی انتشار ارائه شده توسط HAL منتظر می ماند.
HAL باید حصارهای همگامسازی را به همان روشی که برای output_buffers انجام میدهند اداره کند.
برای هر درخواست فقط یک بافر ورودی مجاز است. مشابه بافرهای خروجی، ترتیب بافرهای ورودی برگشتی باید توسط HAL حفظ شود.
ملاحظات عملکرد:
بافر ورودی باید در اسرع وقت بازگردانده شود. اگر HAL از حصارهای همگامسازی پشتیبانی میکند، میتواند فرآیند_capture_result را فراخوانی کند تا با تنظیم مناسب حصارهای همگامسازی، آن را برگرداند. اگر حصارهای همگامسازی پشتیبانی نمیشوند، بافر تنها زمانی که مصرف میشود میتواند بازگردانده شود، که ممکن است زمان زیادی طول بکشد. HAL ممکن است انتخاب کند که این بافر ورودی را کپی کند تا بافر زودتر بازگردد.
uint32_t num_output_buffers |
تعداد بافرهای خروجی برگردانده شده در این ساختار نتیجه. باید کمتر یا مساوی با تعداد درخواست ضبط منطبق باشد. اگر این مقدار کمتر از تعداد بافر در درخواست ضبط باشد، حداقل یک فراخوان دیگر برای process_capture_result با همان frame_number باید انجام شود تا بافرهای خروجی باقیمانده به فریمورک بازگردانده شوند. این ممکن است تنها در صورتی صفر باشد که ساختار شامل متادیتای نتیجه معتبر باشد یا یک بافر ورودی در این نتیجه برگردانده شود.
const camera3_stream_buffer_t * output_buffers |
دستگیرههای جریان خروجی برای این ضبط بافر میشوند. ممکن است در زمانی که HAL فرآیند_capture_result(); چارچوب قبل از خواندن بافرها روی حصارهای همگام سازی انتشار ارائه شده توسط HAL منتظر می ماند.
HAL باید حصار همگام سازی انتشار بافر جریان را روی یک همگام سازی معتبر fd، یا اگر بافر قبلا پر شده است، روی -1 تنظیم کند.
اگر HAL هنگام پردازش بافر با خطا مواجه شد و بافر پر نشد، فیلد وضعیت بافر باید روی CAMERA3_BUFFER_STATUS_ERROR تنظیم شود. اگر HAL قبل از مواجهه با خطا روی حصار کسب منتظر نمی ماند، حصار کسب باید در حصار آزادسازی کپی شود تا به چارچوب اجازه دهد قبل از استفاده مجدد از بافر روی حصار منتظر بماند.
حصار کسب باید برای همه بافرهای خروجی روی -1 تنظیم شود. اگر num_output_buffers صفر باشد، ممکن است NULL باشد. در آن صورت، حداقل یک فراخوانی دیگر process_capture_result باید توسط HAL برای ارائه بافرهای خروجی انجام شود.
هنگامی که process_capture_result با یک بافر جدید برای یک فریم فراخوانی میشود، تمام بافرهای فریمهای قبلی برای آن جریان مربوطه باید قبلاً تحویل داده شده باشند (حصارها هنوز نیازی به علامتگذاری ندارند).
>= CAMERA_DEVICE_API_VERSION_3_2:
بافرهای Gralloc برای یک فریم ممکن است قبل از SHUTTER-notify مربوطه به چارچوب ارسال شوند.
ملاحظات عملکرد:
بافرهای تحویل داده شده به چارچوب به لایه برنامه ارسال نمی شوند تا زمانی که مهر زمانی شروع نوردهی از طریق یک فراخوان SHUTTER notify() دریافت شود. به شدت توصیه می شود که آن تماس را در اسرع وقت ارسال کنید.
uint32_t جزئی_نتیجه |
>= CAMERA_DEVICE_API_VERSION_3_2:
برای استفاده از نتایج جزئی، HAL باید متادیتای استاتیک android.request.partialResultCount را روی تعداد نتایج جزئی که برای هر فریم ارسال می کند تنظیم کند.
هر نتیجه عکسبرداری جدید با نتیجه جزئی باید این فیلد (جزئی_نتیجه) را روی یک مقدار مجزا بین 1 و android.request.partialResultCount تنظیم کند.
HAL هایی که مایل به استفاده از این ویژگی نیستند، نباید android.request.partialResultCount یا partial_result را روی مقداری غیر از 1 تنظیم کنند.
این مقدار باید روی 0 تنظیم شود زمانی که یک نتیجه ضبط فقط حاوی بافر و بدون ابرداده باشد.
const camera_metadata_t * نتیجه |
فراداده نتیجه برای این ضبط. این شامل اطلاعاتی در مورد پارامترهای ضبط نهایی، وضعیت سخت افزار ضبط و پس از پردازش، وضعیت الگوریتم های 3A، در صورت فعال بودن، و خروجی هر واحد آمار فعال است.
فقط یک فراخوانی به process_capture_result() با یک frame_number معین ممکن است شامل متادیتای نتیجه باشد. همه فراخوان های دیگر برای همان frame_number باید این را روی NULL تنظیم کنند.
اگر در تولید فراداده نتیجه خطایی رخ داده است، نتیجه باید یک بافر ابرداده خالی باشد و notify() باید با ERROR_RESULT فراخوانی شود.
>= CAMERA_DEVICE_API_VERSION_3_2:
فراخوانی های متعدد به process_capture_result() با یک frame_number معین ممکن است شامل متادیتای نتیجه باشد.
فراداده جزئی ارسالی نباید شامل هیچ کلید فراداده ای باشد که در نتیجه جزئی قبلی برای یک فریم معین بازگردانده شده است. هر نتیجه جزئی جدید برای آن فریم نیز باید مقدار partial_result مشخصی را تعیین کند.
اگر notify با ERROR_RESULT فراخوانی شده باشد، تمام نتایج جزئی دیگر برای آن فریم توسط چارچوب نادیده گرفته میشود.
مستندات این ساختار از فایل زیر تولید شده است:
- hardware/libhardware/include/hardware/ camera3.h