مرجع بنية camera2_device_ops
#include <
camera2.h
>
حقول البيانات |
|
int(* | set_request_queue_src_ops )(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops) |
int(* | notify_request_queue_not_empty )(const struct camera2_device *) |
int(* | set_frame_queue_dst_ops )(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops) |
int(* | get_in_progress_count )(const struct camera2_device *) |
int(* | flush_captures_in_progress )(const struct camera2_device *) |
int(* | construct_default_request )(const struct camera2_device *, int request_template, camera_metadata_t **request) |
int(* | allocate_stream )(const struct camera2_device *, uint32_t width, uint32_t height, int format, const camera2_stream_ops_t *stream_ops, uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers) |
int(* | register_stream_buffers )(const struct camera2_device *, uint32_t stream_id, int num_buffers, buffer_handle_t *buffers) |
int(* | release_stream )(const struct camera2_device *, uint32_t stream_id) |
int(* | allocate_reprocess_stream )(const struct camera2_device *, uint32_t width, uint32_t height, uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
int(* | allocate_reprocess_stream_from_stream )(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id) |
int(* | release_reprocess_stream )(const struct camera2_device *, uint32_t stream_id) |
int(* | trigger_action )(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2) |
int(* | set_notify_callback )(const struct camera2_device *, camera2_notify_callback notify_cb, void *user) |
int(* | get_metadata_vendor_tag_ops )(const struct camera2_device *, vendor_tag_query_ops_t **ops) |
int(* | dump )(const struct camera2_device *, int fd) |
int(* | get_instance_metadata )(const struct camera2_device *, camera_metadata **instance_metadata) |
وصف مفصّل
مستندات الحقل
int(* allocate_reprocess_stream)(const struct camera2_device *, uint32_t width, uint32_t height, uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
allocate_reprocess_stream:
تخصيص مصدر إدخال جديد للاستخدام، يتم تحديده من خلال عرض وارتفاع وحدة تخزين مؤقت للإخراج وتنسيق البكسل في حال نجاح العملية، يتم عرض معرّف البث الجديد وعلامات استخدام gralloc وعدد المخزن المؤقت المطلوب اكتسابه في الوقت نفسه. حالات الخطأ:
- طلب مجموعة من العرض/الارتفاع/التنسيق غير المُدرَجة على أنّها متوافقة مع الخصائص الثابتة لجهاز الاستشعار
- طلب ضبط عدد كبير جدًا من مصادر إعادة المعالجة في آنٍ واحد
مَعلمات الإدخال:
- width وheight وformat: مواصفات للمخازن المؤقتة التي سيتم إرسالها من خلال هذا البث يجب أن تكون قيمة التنسيق من قائمة HAL_PIXEL_FORMAT_*.
- reprocess_stream_ops: بنية مؤشرات الدوالّ للحصول على وحدات التخزين المؤقت وإطلاقها لهذا البث سيتم ضبط البث الأساسي استنادًا إلى مخرجات الاستخدام وmax_buffers.
مَعلمات الإخراج:
- stream_id: عدد صحيح غير موقَّت يحدّد هذا البث تُستخدَم هذه القيمة في الطلبات الواردة لتحديد البث، وفي إصدار البث. ويتم ترقيم هذه المعرّفات بشكل منفصل عن معرّفات مصادر الإدخال.
- consumer_usage: قناع استخدام gralloc الذي يحتاجه جهاز HAL لاستخدام النوع المطلوب من البيانات يتم استخدام هذا في تخصيص مخازن gralloc جديدة لقائمة انتظار مخزن البث.
- max_buffers: الحد الأقصى لعدد وحدات التخزين المؤقت التي قد يحتاج جهاز HAL إلى الحصول عليها في الوقت نفسه. قد لا يكون لدى الجهاز عدد أكبر من وحدات التخزين المؤقت التي تم الحصول عليها في الوقت نفسه مقارنةً بهذه القيمة.
int(* allocate_reprocess_stream_from_stream)(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id) |
allocate_reprocess_stream_from_stream:
تخصيص مصدر إدخال جديد لاستخدامه، والذي سيستخدم وحدات التخزين المؤقت المخصّصة لمصدر إخراج حالي وهذا يعني أنّه بعد أن يضيف HAL عنصر تخزين مؤقت إلى بث الإخراج، قد يتلقّى هذا العنصر نفسه من بث إعادة معالجة الإدخال هذا. بعد أن يُطلق HAL ذاكرة التخزين المؤقت مرة أخرى إلى بث إعادة المعالجة، ستتم إعادتها إلى قائمة الانتظار للإخراج لإعادة استخدامها.
حالات الخطأ:
- استخدام بث إخراج بحجم أو تنسيق غير مناسبَين كأساس لبث إعادة المعالجة
- محاولة تخصيص عدد كبير جدًا من أحداث إعادة المعالجة في الوقت نفسه
مَعلمات الإدخال:
- output_stream_id: معرّف لمسار إخراج حالي بحجم وتنسيق مناسبَين لإعادة المعالجة
- reprocess_stream_ops: بنية مؤشرات الدوالّ للحصول على وحدات التخزين المؤقت وإطلاقها لهذا البث سيستخدم البث الأساسي معالِم تخزين الرسومات نفسه الذي يستخدمه بث الإخراج.
مَعلمات الإخراج:
- stream_id: عدد صحيح غير موقَّت يحدّد هذا البث تُستخدَم هذه القيمة في الطلبات الواردة لتحديد البث، وفي إصدار البث. ويتم ترقيم هذه المعرّفات بشكل منفصل عن معرّفات مصادر الإدخال.
يجب أن يُطلق برنامج HAL العميل دائمًا بث إعادة المعالجة قبل أن يُطلق بث الإخراج الذي يستند إليه.
int(* allocate_stream)(const struct camera2_device *,uint32_t width, uint32_t height, int format, const camera2_stream_ops_t *stream_ops,uint32_t *stream_id, uint32_t *format_actual,uint32_t *usage, uint32_t *max_buffers) |
allocate_stream:
تخصيص بث إخراج جديد لاستخدامه، يتم تحديده من خلال عرض وارتفاع وهدف وحدة تخزين مؤقت للإخراج وربما تنسيق البكسل في حال نجاح الإجراء، يتم عرض رقم تعريف البث الجديد، وعلامات استخدام gralloc، والحد الأدنى لعدد وحدات التخزين المؤقت للصف، وربما تنسيق البكسل. حالات الخطأ:
- طلب تركيبة العرض/الارتفاع/التنسيق غير المُدرَجة على أنّها متوافقة مع الخصائص الثابتة لجهاز الاستشعار
- طلب عدد كبير جدًا من أحداث البث بنوع تنسيق معيّن (مثل حدثَي بث لصور Bayer الخام)
مَعلمات الإدخال:
- width وheight وformat: مواصفات للمخازن المؤقتة التي سيتم إرسالها من خلال هذا البث التنسيق هو قيمة من قائمة HAL_PIXEL_FORMAT_*. في حال استخدام HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED، ستختار وحدة gralloc في النظام الأساسي تنسيقًا استنادًا إلى علامات الاستخدام التي يوفّرها HAL للكاميرا ومستهلك البث. يجب أن يتحقّق HAL للكاميرا من المخازن المؤقتة التي تم تسليمها إليه في طلب register_stream_buffers للحصول على التنسيق الخاص بالتنفيذ إذا لزم الأمر.
- stream_ops: بنية مؤشرات وظائف للحصول على وحدات التخزين المؤقت ووضعها في قائمة الانتظار لهذا البث سيتم ضبط البث الأساسي استنادًا إلى مخرجات الاستخدام وmax_buffers. قد لا يتمّ استدعاء الطُرق في هذه البنية إلا بعد أن تُرجع allocate_stream.
مَعلمات الإخراج:
- stream_id: عدد صحيح غير موقَّت يحدّد هذا البث تُستخدَم هذه القيمة في الطلبات الواردة لتحديد البث، وفي إصدار البث.
- الاستخدام: قناع استخدام gralloc الذي يحتاجه جهاز HAL لإنشاء النوع المطلوب من البيانات. ويُستخدَم هذا الإجراء في تخصيص وحدات تخزين gralloc جديدة لقائمة انتظار وحدة تخزين البث.
- max_buffers: الحد الأقصى لعدد وحدات التخزين المؤقت التي قد يحتاج جهاز HAL إلى إزالة صفها في الوقت نفسه لا يمكن للجهاز إزالة المزيد من وحدات التخزين المؤقت من "قائمة الانتظار" أكثر من هذه القيمة في الوقت نفسه.
int(* construct_default_request)(const struct camera2_device *, int request_template, camera_metadata_t **request) |
أنشئ طلبًا تلقائيًا مملوءًا لحالات استخدام الكاميرا العادية.
يجب أن يعرض الجهاز طلبًا كاملاً تم إعداده لاستيفاء حالة الاستخدام المطلوبة، والتي يجب أن تكون إحدى القيم المحدَّدة في CAMERA2_TEMPLATE_*. يجب تضمين جميع حقول التحكّم في الطلب، باستثناء android.request.outputStreams.
يجب تخصيص وحدة تخزين مؤقتة للبيانات الوصفية التي يتم إرجاعها باستخدام allocate_camera_metadata. يحصل إطار العمل على ملكية المخزن المؤقت.
int(* dump)(const struct camera2_device *, int fd) |
int(* flush_captures_in_progress)(const struct camera2_device *) |
إزالة كل عمليات الالتقاط الجارية ويشمل ذلك جميع الطلبات التي تمّت إزالتها من "قائمة الانتظار" (الطلبات العادية أو طلبات إعادة المعالجة) التي لم تُدرِج أيّ نتائج في بثّ أو في "قائمة انتظار اللقطات". يجب إكمال عمليات الالتقاط المكتملة جزئيًا بشكلٍ طبيعي. لا يمكن إزالة أي طلبات جديدة من قائمة الطلبات إلى أن تكتمل عملية تفريغ ذاكرة التخزين المؤقت.
int(* get_in_progress_count)(const struct camera2_device *) |
int(* get_instance_metadata)(const struct camera2_device *, camera_metadata **instance_metadata) |
الحصول على البيانات الوصفية الخاصة بمثيل الجهاز يجب أن تكون هذه البيانات الوصفية ثابتة لمثيل واحد من جهاز الكاميرا، ولكن قد تختلف بين طلبات open(). يجب أن يكون مؤشر camera_metadata المعروض صالحًا إلى أن يتم استدعاء طريقة close() للجهاز.
معلومات الإصدار:
CAMERA_DEVICE_API_VERSION_2_0:
هذه الميزة غير متوفّرة. قد لا يتمكّن إطار العمل من الوصول إلى مؤشر الدالة هذا.
CAMERA_DEVICE_API_VERSION_2_1:
صالح. يمكن أن يستدعيها إطار العمل.
int(* get_metadata_vendor_tag_ops)(const struct camera2_device *, vendor_tag_query_ops_t **ops) |
int(* notify_request_queue_not_empty)(const struct camera2_device *) |
int(* register_stream_buffers)(const struct camera2_device *, uint32_t stream_id, int num_buffers, buffer_handle_t *buffers) |
تسجيل وحدات التخزين المؤقت لمصدر بيانات معيّن يتمّ استدعاء هذه الوظيفة بعد إجراء طلب allocate_stream ناجح، وقبل إضافة الطلب الأوّل الذي يشير إلى البث إلى "قائمة الانتظار". تهدف هذه الطريقة إلى السماح لجهاز HAL بربط أو إعداد المخزن المؤقت لاستخدامه لاحقًا. من المؤكد أنّ عدد المخزن المؤقت (num_buffers) لا يقل عن max_buffers (من allocate_stream)، ولكن قد يكون أكبر. سيكون قد سبق أن تم قفل وحدات التخزين المؤقت للاستخدام. في نهاية المكالمة، يجب أن تكون جميع وحدات التخزين المؤقت جاهزة لإعادتها إلى قائمة الانتظار. إذا تم ضبط تنسيق البث على HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED، من المفترض أن يتحقّق HAL للكاميرا من وحدات التخزين المؤقت التي تم تمريرها هنا لتحديد أي معلومات خاصة بالنظام الأساسي حول تنسيق البكسل.
int(* release_reprocess_stream)(const struct camera2_device *, uint32_t stream_id) |
int(* release_stream)(const struct camera2_device *, uint32_t stream_id) |
int(* set_frame_queue_dst_ops)(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops) |
int(* set_notify_callback)(const struct camera2_device *, camera2_notify_callback notify_cb, void *user) |
int(* set_request_queue_src_ops)(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops) |
int(* trigger_action)(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2) |
تم إنشاء مستندات هذه البنية من الملف التالي:
- hardware/libhardware/include/hardware/ camera2.h