مرجع بنية camera3_capture_result
#include <
camera3.h
>
حقول البيانات |
|
uint32_t | frame_number |
const camera_metadata_t * | result |
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:
نتيجة عملية التقاط/إعادة معالجة واحدة من خلال جهاز HAL للكاميرا ويتم إرسال هذا الإجراء إلى إطار العمل بشكل غير متزامن باستخدام دالة process_capture_result()، استجابةً لطلب التقاط واحد يتم إرساله إلى HAL باستخدام دالة process_capture_request(). وقد تُجري HAL عدة عمليات استدعاء لدالة process_capture_result() لكل طلب.
قد تحتوي كلّ مكالمة، التي تحمل رقم اللقطة نفسه، على مجموعة فرعية من ذاكرات التخزين المؤقت للإخراج و/أو البيانات الوصفية للنتيجة. يمكن تقديم البيانات الوصفية مرة واحدة فقط لعدد لقطات معيّن، ويجب ضبط البيانات الوصفية للنتيجة على NULL في جميع طلبات البيانات الأخرى.
تحتوي بنية النتيجة على البيانات الوصفية للإخراج من عملية الالتقاط هذه، ومجموعة وحدات التخزين المؤقت للإخراج التي تم/سيتم ملؤها لعملية الالتقاط هذه. قد يتضمّن كل مخزن مؤقت للإخراج حاجزًا لمزامنة الإصدار سينتظره إطار العمل قبل القراءة، في حال لم يملؤه HAL بعد.
>= CAMERA_DEVICE_API_VERSION_3_2:
يمكن تقديم البيانات الوصفية عدة مرات لرقم لقطة واحد. سيجمع إطار العمل مجموعة النتائج النهائية معًا من خلال دمج كل نتيجة جزئية معًا في مجموعة النتائج الإجمالية.
إذا تم تقديم مخزن مؤقت للإدخال في طلب، يجب أن يعرضه HAL في إحدى طلبات 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:
معرّف وحدة تخزين بث الإدخال لهذا الالتقاط قد لا يتم استهلاكه بعد في وقت استدعاء HAL لـ process_capture_result(); وسينتظر إطار العمل حدود تحرير المزامنة التي يوفرها HAL قبل إعادة استخدام المخزن المؤقت.
يجب أن يعالج HAL حدود المزامنة بالطريقة نفسها التي يتم بها التعامل مع output_buffers.
يُسمح بإرسال وحدة تخزين مؤقت واحد فقط لكل طلب. على غرار وحدات تخزين الإخراج، يجب أن يحافظ HAL على ترتيب وحدات تخزين الإدخال المُسترَدة.
اعتبارات الأداء:
يجب إرجاع مخزن الإدخال في أقرب وقت ممكن. إذا كان HAL يتيح حدود المزامنة، يمكنه استدعاء process_capture_result لإعادته مع ضبط حدود المزامنة بشكل مناسب. إذا لم تكن حدود المزامنة متوافقة، لا يمكن إرجاع المخزن المؤقت إلا عند استخدامه، ما قد يستغرق وقتًا طويلاً. وقد يختار HAL نسخ مخزن الإدخال هذا لإعادة عرض المخزن المؤقت في وقت أقرب.
uint32_t num_output_buffers |
عدد وحدات تخزين الإخراج التي يتم عرضها في بنية النتيجة هذه. يجب أن يكون أقل من أو يساوي عدد طلبات الالتقاط المطابقة. إذا كان هذا العدد أقل من عدد المخازن المؤقتة في طلب الالتقاط، يجب إجراء طلب واحد على الأقل آخر إلى process_capture_result باستخدام رقم_الإطار نفسه، لإعادة المخازن المؤقتة المتبقية للإخراج إلى إطار العمل. قد تكون هذه القيمة صفرًا فقط إذا كانت البنية تتضمّن بيانات وصفية صالحة للنتيجة أو إذا تم عرض وحدة تخزين مؤقت للإدخال في هذه النتيجة.
const camera3_stream_buffer_t * output_buffers |
يتم تخزين مقابض بث الإخراج مؤقتًا في ذاكرة التخزين المؤقت لعملية الالتقاط هذه. قد لا تكون هذه الحقول ممتلئة بعد في وقت استدعاء HAL لـ process_capture_result(); وسينتظر إطار العمل على حدود مزامنة الإصدار التي يوفرها HAL قبل قراءة المخزن المؤقت.
يجب أن يضبط HAL حاجز تحرير مزامنة مخزن البث على رقم تعريف ملف وصف صالح للمزامنة، أو على -1 إذا سبق أن تم ملء المخزن.
إذا واجه HAL خطأ أثناء معالجة المخزن المؤقت ولم يتم ملؤه، يجب ضبط حقل حالة المخزن المؤقت على CAMERA3_BUFFER_STATUS_ERROR. إذا لم ينتظر HAL على السياج المخصص للاستحواذ قبل مواجهة الخطأ، يجب نسخ السياج المخصص للاستحواذ إلى السياج المخصص للإفراج، للسماح للإطار بالانتظار على السياج قبل إعادة استخدام المخزن المؤقت.
يجب ضبط ميزة "حاجز الاستحواذ" على -1 لجميع وحدات تخزين المؤقت للإخراج. إذا كانت قيمة num_output_buffers تساوي صفرًا، قد تكون هذه القيمة فارغة. في هذه الحالة، يجب أن يُجري HAL طلبًا واحدًا على الأقل من عملية process_capture_result لتوفير وحدات تخزين مؤقت للإخراج.
عند استدعاء process_capture_result باستخدام مخزن مؤقت جديد للإطار، يجب أن يكون قد تم إرسال جميع مخازن الإطارات السابقة لهذا البث المقابل (ولا يلزم أن يكون قد تم إرسال حدود الإطارات بعد).
>= CAMERA_DEVICE_API_VERSION_3_2:
قد يتم إرسال مخازن Gralloc لإطار إلى إطار العمل قبل إشعار SHUTTER المقابل.
اعتبارات الأداء:
لن يتم إرسال المخزن المؤقت الذي يتم إرساله إلى إطار العمل إلى طبقة التطبيق إلى أن يتم استلام الطابع الزمني لبدء التعرّض من خلال طلب notify() (SHUTTER). ننصح بشدة بإرسال هذه المكالمة في أقرب وقت ممكن.
uint32_t partial_result |
>= CAMERA_DEVICE_API_VERSION_3_2:
للاستفادة من النتائج الجزئية، يجب أن يضبط HAL البيانات الوصفية الثابتة android.request.partialResultCount على عدد النتائج الجزئية التي سيتم إرسالها لكل إطار.
يجب أن تضبط كل نتيجة جديدة لالتقاط البيانات التي تتضمّن نتيجة جزئية هذا الحقل (partial_result) على قيمة شاملة ومميّزة تتراوح بين 1 وandroid.request.partialResultCount.
يجب ألا تضبط واجهات HAL التي لا تريد الاستفادة من هذه الميزة قيمة غير 1 على android.request.partialResultCount أو partial_result.
يجب ضبط هذه القيمة على 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