مرجع الهيكل الخاص بكاميرا3_device_ops
#include < camera3.h >
حقول البيانات | |
كثافة العمليات (* | تهيئة )(const struct Camera3_device *، const Camera3_callback_ops_t *callback_ops) |
كثافة العمليات (* | configuration_streams )(const struct Camera3_device *, Camera3_stream_configuration_t *stream_list) |
كثافة العمليات (* | Register_stream_buffers )(const struct Camera3_device *, const Camera3_stream_buffer_set_t *buffer_set) |
كاميرا ثابتة_metadata_t *(* | build_default_request_settings ((const struct Camera3_device *, int type) |
كثافة العمليات (* | Process_capture_request )(تركيبة الكاميرا3_device *، الكاميرا3_capture_request_t *الطلب) |
فارغ(* | get_metadata_vendor_tag_ops ) (const struct Camera3_device *، sales_tag_query_ops_t *ops) |
فارغ(* | تفريغ )(const struct Camera3_device *, int fd) |
كثافة العمليات (* | فلوش )(بنية الكاميرا 3_device *) |
فارغ * | محفوظة [8] |
وصف تفصيلي
التوثيق الميداني
int(*configuration_streams)(const struct Camera3_device *, Camera3_stream_configuration_t *stream_list) |
تكوين_التدفقات:
CAMERA_DEVICE_API_VERSION_3_0 فقط:
قم بإعادة تعيين خط أنابيب معالجة جهاز كاميرا HAL وقم بإعداد تدفقات الإدخال والإخراج الجديدة. يستبدل هذا الاستدعاء أي تكوين دفق موجود بالتدفقات المحددة في قائمة الدفق. سيتم استدعاء هذه الطريقة مرة واحدة على الأقل بعد التهيئة() قبل إرسال الطلب باستخدام process_capture_request() .
يجب أن تحتوي قائمة الدفق على دفق واحد قادر على الإخراج على الأقل، ولا يجوز أن تحتوي على أكثر من دفق واحد قادر على الإدخال.
قد تحتوي قائمةstream_list على تدفقات موجودة أيضًا في مجموعة التدفقات النشطة حاليًا (من الاستدعاء السابق إلىconfig_stream()). ستحتوي هذه التدفقات بالفعل على قيم صالحة للاستخدام وmax_buffers والمؤشر الخاص.
إذا كان هذا التدفق قد تم بالفعل تسجيل مخازنه المؤقتة، فلن يتم استدعاء Register_stream_buffers() مرة أخرى للتدفق، ويمكن تضمين المخازن المؤقتة من الدفق على الفور في طلبات الإدخال.
إذا احتاجت HAL إلى تغيير تكوين الدفق لتدفق موجود بسبب التكوين الجديد، فقد تعيد كتابة قيم الاستخدام و/أو max_buffers أثناء استدعاء التكوين.
سيكتشف إطار العمل مثل هذا التغيير، وسيقوم بعد ذلك بإعادة تخصيص المخازن المؤقتة للتدفق، واستدعاء Register_stream_buffers() مرة أخرى قبل استخدام المخازن المؤقتة من هذا الدفق في الطلب.
إذا لم يتم تضمين التدفق النشط حاليًا في Stream_list، فقد تقوم طبقة HAL بإزالة أي مراجع لهذا التدفق بأمان. لن يتم إعادة استخدامه في استدعاء تكوين () لاحق بواسطة إطار العمل، وسيتم تحرير كافة المخازن المؤقتة لـ gralloc بعد عودة استدعاء config_streams() .
بنية Stream_list مملوكة لإطار العمل، ولا يمكن الوصول إليها بمجرد اكتمال هذا الاستدعاء. سيظل عنوان بنية Camera3_stream_t الفردية صالحًا للوصول عن طريق HAL حتى نهاية أول استدعاء config_stream() الذي لم يعد يتضمن Camera3_stream_t في وسيطةstream_list. لا يجوز لـ HAL تغيير القيم في بنية الدفق خارج المؤشر الخاص، باستثناء الاستخدام وأعضاء max_buffers أثناء استدعاء config_streams() نفسه.
إذا كان الدفق جديدًا، فسيتم تعيين حقول الاستخدام وmax_buffer والمؤشر الخاص لبنية الدفق على 0. يجب أن يقوم جهاز HAL بتعيين هذه الحقول قبل إرجاع استدعاء config_streams() . يتم بعد ذلك استخدام هذه الحقول بواسطة إطار العمل ووحدة النظام الأساسي gralloc لتخصيص مخازن gralloc المؤقتة لكل تيار.
قبل أن يتمكن هذا الدفق الجديد من تضمين مخازنه المؤقتة في طلب التقاط، سيستدعي إطار العمل ()register_stream_buffers مع هذا الدفق. ومع ذلك، ليس مطلوبًا من إطار العمل تسجيل المخازن المؤقتة لجميع التدفقات قبل إرسال الطلب. يسمح هذا ببدء التشغيل السريع (على سبيل المثال) لبث المعاينة، مع تخصيص عمليات البث الأخرى لاحقًا أو بشكل متزامن.
CAMERA_DEVICE_API_VERSION_3_1 فقط:
قم بإعادة تعيين خط أنابيب معالجة جهاز كاميرا HAL وقم بإعداد تدفقات الإدخال والإخراج الجديدة. يستبدل هذا الاستدعاء أي تكوين دفق موجود بالتدفقات المحددة في قائمة الدفق. سيتم استدعاء هذه الطريقة مرة واحدة على الأقل بعد التهيئة() قبل إرسال الطلب باستخدام process_capture_request() .
يجب أن تحتوي قائمة الدفق على دفق واحد قادر على الإخراج على الأقل، ولا يجوز أن تحتوي على أكثر من دفق واحد قادر على الإدخال.
قد تحتوي قائمةstream_list على تدفقات موجودة أيضًا في مجموعة التدفقات النشطة حاليًا (من الاستدعاء السابق إلىconfig_stream()). ستحتوي هذه التدفقات بالفعل على قيم صالحة للاستخدام وmax_buffers والمؤشر الخاص.
إذا كان هذا التدفق قد تم بالفعل تسجيل مخازنه المؤقتة، فلن يتم استدعاء Register_stream_buffers() مرة أخرى للتدفق، ويمكن تضمين المخازن المؤقتة من الدفق على الفور في طلبات الإدخال.
إذا احتاجت HAL إلى تغيير تكوين الدفق لتدفق موجود بسبب التكوين الجديد، فقد تعيد كتابة قيم الاستخدام و/أو max_buffers أثناء استدعاء التكوين.
سيكتشف إطار العمل مثل هذا التغيير، وسيقوم بعد ذلك بإعادة تخصيص المخازن المؤقتة للتدفق، واستدعاء Register_stream_buffers() مرة أخرى قبل استخدام المخازن المؤقتة من هذا الدفق في الطلب.
إذا لم يتم تضمين التدفق النشط حاليًا في Stream_list، فقد تقوم طبقة HAL بإزالة أي مراجع لهذا التدفق بأمان. لن يتم إعادة استخدامه في استدعاء تكوين () لاحق بواسطة إطار العمل، وسيتم تحرير كافة المخازن المؤقتة لـ gralloc بعد عودة استدعاء config_streams() .
بنية Stream_list مملوكة لإطار العمل، ولا يمكن الوصول إليها بمجرد اكتمال هذا الاستدعاء. سيظل عنوان بنية Camera3_stream_t الفردية صالحًا للوصول عن طريق HAL حتى نهاية أول استدعاء config_stream() الذي لم يعد يتضمن Camera3_stream_t في وسيطةstream_list. لا يجوز لـ HAL تغيير القيم في بنية الدفق خارج المؤشر الخاص، باستثناء الاستخدام وأعضاء max_buffers أثناء استدعاء config_streams() نفسه.
إذا كان الدفق جديدًا، فسيتم تعيين حقول max_buffer وحقول المؤشر الخاص لبنية الدفق على 0. وسيتم تعيين الاستخدام على إشارات استخدام المستهلك. يجب أن يقوم جهاز HAL بتعيين هذه الحقول قبل إرجاع استدعاء config_streams() . يتم بعد ذلك استخدام هذه الحقول بواسطة إطار العمل ووحدة النظام الأساسي gralloc لتخصيص مخازن gralloc المؤقتة لكل تيار.
قبل أن يتمكن هذا الدفق الجديد من تضمين مخازنه المؤقتة في طلب التقاط، سيستدعي إطار العمل ()register_stream_buffers مع هذا الدفق. ومع ذلك، ليس مطلوبًا من إطار العمل تسجيل المخازن المؤقتة لجميع التدفقات قبل إرسال الطلب. يسمح هذا ببدء التشغيل السريع (على سبيل المثال) لبث المعاينة، مع تخصيص عمليات البث الأخرى لاحقًا أو بشكل متزامن.
>= CAMERA_DEVICE_API_VERSION_3_2:
قم بإعادة تعيين خط أنابيب معالجة جهاز كاميرا HAL وقم بإعداد تدفقات الإدخال والإخراج الجديدة. يستبدل هذا الاستدعاء أي تكوين دفق موجود بالتدفقات المحددة في قائمة الدفق. سيتم استدعاء هذه الطريقة مرة واحدة على الأقل بعد التهيئة() قبل إرسال الطلب باستخدام process_capture_request() .
يجب أن تحتوي قائمة الدفق على دفق واحد قادر على الإخراج على الأقل، ولا يجوز أن تحتوي على أكثر من دفق واحد قادر على الإدخال.
قد تحتوي قائمةstream_list على تدفقات موجودة أيضًا في مجموعة التدفقات النشطة حاليًا (من الاستدعاء السابق إلىconfig_stream()). ستحتوي هذه التدفقات بالفعل على قيم صالحة للاستخدام وmax_buffers والمؤشر الخاص.
إذا احتاجت HAL إلى تغيير تكوين الدفق لتدفق موجود بسبب التكوين الجديد، فقد تعيد كتابة قيم الاستخدام و/أو max_buffers أثناء استدعاء التكوين.
سيكتشف إطار العمل مثل هذا التغيير، وقد يقوم بعد ذلك بإعادة تخصيص المخازن المؤقتة للتيار قبل استخدام المخازن المؤقتة من هذا الدفق في الطلب.
إذا لم يتم تضمين التدفق النشط حاليًا في Stream_list، فقد تقوم طبقة HAL بإزالة أي مراجع لهذا التدفق بأمان. لن يتم إعادة استخدامه في استدعاء تكوين () لاحق بواسطة إطار العمل، وسيتم تحرير كافة المخازن المؤقتة لـ gralloc بعد عودة استدعاء config_streams() .
بنية Stream_list مملوكة لإطار العمل، ولا يمكن الوصول إليها بمجرد اكتمال هذا الاستدعاء. سيظل عنوان بنية Camera3_stream_t الفردية صالحًا للوصول عن طريق HAL حتى نهاية أول استدعاء config_stream() الذي لم يعد يتضمن Camera3_stream_t في وسيطةstream_list. لا يجوز لـ HAL تغيير القيم في بنية الدفق خارج المؤشر الخاص، باستثناء الاستخدام وأعضاء max_buffers أثناء استدعاء config_streams() نفسه.
إذا كان الدفق جديدًا، فسيتم تعيين حقول max_buffer وحقول المؤشر الخاص لبنية الدفق على 0. وسيتم تعيين الاستخدام على إشارات استخدام المستهلك. يجب أن يقوم جهاز HAL بتعيين هذه الحقول قبل إرجاع استدعاء config_streams() . يتم بعد ذلك استخدام هذه الحقول بواسطة إطار العمل ووحدة النظام الأساسي gralloc لتخصيص مخازن gralloc المؤقتة لكل تيار.
قد يتم تضمين المخازن المؤقتة المخصصة حديثًا في طلب الالتقاط في أي وقت بواسطة إطار العمل. بمجرد إرجاع المخزن المؤقت gralloc إلى إطار العمل باستخدام معالجة_capture_result (وتم الإشارة إلى Release_fence الخاص به) يمكن لإطار العمل تحريره أو إعادة استخدامه في أي وقت.
الشروط المسبقة:
لن يقوم إطار العمل باستدعاء هذه الطريقة إلا في حالة عدم معالجة أي التقاطات. وهذا يعني أنه تم إرجاع كافة النتائج إلى إطار العمل، وتم إرجاع كافة المخازن المؤقتة للإدخال والإخراج أثناء الطيران وتم الإشارة إلى أسوار مزامنة الإصدار الخاصة بها بواسطة HAL. لن يرسل إطار العمل طلبات جديدة للالتقاط أثناء إجراء استدعاء config_streams() .
الشروط اللاحقة:
يجب أن يقوم جهاز HAL بتكوين نفسه لتوفير أقصى معدل ممكن لإطارات الإخراج بالنظر إلى أحجام وتنسيقات تدفقات الإخراج، كما هو موثق في بيانات التعريف الثابتة لجهاز الكاميرا.
متطلبات الأداء:
من المتوقع أن تكون هذه المكالمة ثقيلة الوزن وربما تستغرق عدة مئات من المللي ثانية حتى تكتمل، لأنها قد تتطلب إعادة ضبط وإعادة تكوين مستشعر الصورة ومسار معالجة الكاميرا. ومع ذلك، يجب أن يحاول جهاز HAL تقليل تأخير إعادة التكوين لتقليل فترات التوقف المؤقت المرئية للمستخدم أثناء تغييرات وضع تشغيل التطبيق (مثل التبديل من الالتقاط الثابت إلى تسجيل الفيديو).
يجب أن يعود HAL من هذه المكالمة خلال 500 مللي ثانية، ويجب أن يعود من هذه المكالمة خلال 1000 مللي ثانية.
قيم الإرجاع:
0: في تكوين الدفق الناجح
-EINVAL: إذا كان تكوين الدفق المطلوب غير صالح. تتضمن بعض الأمثلة على تكوينات الدفق غير الصالحة ما يلي:
- بما في ذلك أكثر من تيار واحد قادر على الإدخال (INPUT أو BIDIRECTIONAL)
- لا يشمل أي تدفقات قادرة على الإخراج (OUTPUT أو BIDIRECTIONAL)
- بما في ذلك التدفقات ذات التنسيقات غير المدعومة، أو الحجم غير المدعوم لهذا التنسيق.
- بما في ذلك عدد كبير جدًا من تدفقات الإخراج بتنسيق معين.
- تكوين تدوير غير مدعوم (ينطبق فقط على الأجهزة ذات الإصدار >= CAMERA_DEVICE_API_VERSION_3_3)
- لا تلبي أحجام/تنسيقات البث متطلبات الكاميرا3_stream_configuration_t->operation_mode للوضع غير العادي، أو أن Operation_mode المطلوب غير مدعوم بواسطة HAL. (ينطبق فقط على الأجهزة ذات الإصدار >= CAMERA_DEVICE_API_VERSION_3_3)
لاحظ أن إطار العمل الذي يرسل تكوين دفق غير صالح ليس عملية عادية، حيث يتم فحص تكوينات الدفق قبل التكوين. يعني التكوين غير الصالح وجود خطأ في رمز إطار العمل، أو أن هناك عدم تطابق بين بيانات التعريف الثابتة لـ HAL والمتطلبات الخاصة بالتدفقات.
-ENODEV: إذا حدث خطأ فادح ولم يعد الجهاز يعمل. يمكن فقط استدعاء Close() بنجاح بواسطة إطار العمل بعد إرجاع هذا الخطأ.
const Camera_metadata_t *(* build_default_request_settings) (const struct Camera3_device *، النوع int) |
build_default_request_settings:
إنشاء إعدادات الالتقاط لحالات استخدام الكاميرا القياسية.
يجب أن يقوم الجهاز بإرجاع مخزن مؤقت للإعدادات تم تكوينه لتلبية حالة الاستخدام المطلوبة، والتي يجب أن تكون أحد تعدادات CAMERA3_TEMPLATE_*. يجب تضمين جميع حقول التحكم في الطلب.
يحتفظ HAL بملكية هذه البنية، ولكن يجب أن يكون المؤشر إلى البنية صالحًا حتى يتم إغلاق الجهاز. لا يجوز لإطار العمل وHAL تعديل المخزن المؤقت بمجرد إرجاعه بواسطة هذا الاستدعاء. قد يتم إرجاع نفس المخزن المؤقت للمكالمات اللاحقة لنفس القالب أو لقوالب أخرى.
متطلبات الأداء:
يجب أن تكون هذه مكالمة غير محظورة. يجب أن يعود HAL من هذه المكالمة خلال 1 مللي ثانية، ويجب أن يعود من هذه المكالمة خلال 5 مللي ثانية.
قيم الإرجاع:
بيانات التعريف الصالحة: عند الإنشاء الناجح للمخزن المؤقت للإعدادات الافتراضية.
NULL: في حالة وجود خطأ فادح. بعد إرجاع هذا، يمكن فقط استدعاء طريقة الإغلاق () بنجاح بواسطة إطار العمل.
باطلة (* تفريغ) (const struct Camera3_device *، int fd) |
أحمق:
اطبع حالة التصحيح لجهاز الكاميرا. سيتم استدعاء هذا بواسطة إطار العمل عندما يُطلب من خدمة الكاميرا تفريغ تصحيح الأخطاء، وهو ما يحدث عند استخدام أداة dumpsys، أو عند التقاط تقرير الأخطاء.
يمكن استخدام واصف الملف الذي تم تمريره لكتابة نص تصحيح الأخطاء باستخدام dprintf() أو write(). يجب أن يكون النص بترميز ASCII فقط.
متطلبات الأداء:
يجب أن تكون هذه مكالمة غير محظورة. يجب أن يعود HAL من هذه المكالمة خلال 1 مللي ثانية، ويجب أن يعود من هذه المكالمة خلال 10 مللي ثانية. يجب أن تتجنب هذه المكالمة حالة الجمود، حيث قد يتم استدعاؤها في أي وقت أثناء تشغيل الكاميرا. يجب الحصول على أي أساسيات مزامنة مستخدمة (مثل أقفال كائن المزامنة أو الإشارات) بعد انتهاء المهلة.
int(* فلوش)(const struct Camera3_device *) |
دافق:
قم بمسح جميع عمليات الالتقاط قيد التشغيل حاليًا وجميع المخازن المؤقتة الموجودة في المسار على الجهاز المحدد. سيستخدم إطار العمل هذا لتفريغ كل الحالات في أسرع وقت ممكن من أجل التحضير لاستدعاء config_streams() .
لا يلزم إرجاع أي مخازن مؤقتة بنجاح، لذلك يمكن إرجاع كل مخزن مؤقت تم الاحتفاظ به في وقت التدفق () (سواء تم ملؤه بنجاح أم لا) باستخدام CAMERA3_BUFFER_STATUS_ERROR. لاحظ أنه لا يزال مسموحًا لـ HAL بإرجاع المخازن المؤقتة الصالحة (CAMERA3_BUFFER_STATUS_OK) أثناء هذا الاستدعاء، بشرط أن تتم تعبئتها بنجاح.
من المتوقع أن يتم إرجاع كافة الطلبات الموجودة حاليًا في HAL في أقرب وقت ممكن. يجب أن تعرض الطلبات غير قيد المعالجة الأخطاء على الفور. يجب إيقاف أي كتل أجهزة غير قابلة للمقاطعة، ويجب انتظار أي كتل غير قابلة للمقاطعة.
قد يتم استدعاء الدالة Flush() بشكل متزامن مع العمليةprocess_capture_request() ، مع توقع أن العملية Process_capture_request ستعود سريعًا ويتم التعامل مع الطلب المقدم في استدعاء العملية Process_capture_request مثل جميع الطلبات الأخرى أثناء الرحلة. بسبب مشكلات التزامن، من الممكن، من وجهة نظر HAL، بدء استدعاء process_capture_request() بعد استدعاء التدفق ولكنه لم يتم إرجاعه بعد. إذا حدث مثل هذا الاستدعاء قبل عودة Flush() ، فيجب أن تتعامل HAL مع طلب الالتقاط الجديد مثل الطلبات المعلقة الأخرى أثناء الرحلة (راجع رقم 4 أدناه).
وبشكل أكثر تحديدًا، يجب أن يتبع HAL المتطلبات التالية لمختلف الحالات:
- بالنسبة لعمليات الالتقاط التي تكون متأخرة للغاية بحيث يتعذر على HAL إلغاء/إيقافها، والتي سيتم إكمالها بشكل طبيعي بواسطة HAL؛ على سبيل المثال، يمكن لـ HAL إرسال المصراع/الإخطار وprocess_capture_result والمخازن المؤقتة كالمعتاد.
- بالنسبة للطلبات المعلقة التي لم تقم بأي معالجة، يجب أن تقوم طبقة تصال سطح المكتب (HAL) باستدعاء CAMERA3_MSG_ERROR_REQUEST وإرجاع كافة مخازن الإخراج المؤقتة مع معالجة_capture_result في حالة الخطأ (CAMERA3_BUFFER_STATUS_ERROR). يجب ألا يضع HAL سياج التحرير في حالة خطأ، وبدلاً من ذلك، يجب تعيين أسوار التحرير على أسوار الاكتساب التي تم تمريرها بواسطة إطار العمل، أو -1 إذا كان قد تم انتظارها بواسطة HAL بالفعل. هذا هو أيضًا المسار الذي يجب اتباعه لأية عمليات التقاط والتي دعا لها HAL بالفعل notify() باستخدام CAMERA3_MSG_SHUTTER ولكنها لن تنتج أي بيانات تعريف/مخازن مؤقتة صالحة لها. بعد CAMERA3_MSG_ERROR_REQUEST، بالنسبة لإطار معين، يُسمح فقط بنتائج عملية التقاط الصور ذات المخازن المؤقتة في CAMERA3_BUFFER_STATUS_ERROR. لا يُسمح بأي إخطارات أخرى أو معالجة_capture_result ببيانات وصفية غير فارغة.
بالنسبة للطلبات المعلقة المكتملة جزئيًا والتي لن تحتوي على كافة المخازن المؤقتة للمخرجات أو ربما تفتقد بيانات التعريف، يجب أن يتبع HAL أدناه:
3.1. قم بإخطار الاتصال باستخدام CAMERA3_MSG_ERROR_RESULT إذا كانت بعض البيانات الوصفية للنتيجة المتوقعة (أي بيانات تعريف جزئية واحدة أو أكثر) لن تكون متاحة للالتقاط.
3.2. قم بإخطار الاتصال باستخدام CAMERA3_MSG_ERROR_BUFFER لكل مخزن مؤقت لن يتم إنتاجه للالتقاط.
3.3 قم بإخطار الاتصال باستخدام CAMERA3_MSG_SHUTTER مع الطابع الزمني للالتقاط قبل إرجاع أي مخازن مؤقتة/بيانات وصفية باستخدام Process_capture_result.
3.4 بالنسبة لعمليات الالتقاط التي ستؤدي إلى بعض النتائج، يجب ألا يستدعي HAL CAMERA3_MSG_ERROR_REQUEST، حيث يشير ذلك إلى فشل كامل.
3.5. يجب تمرير المخازن المؤقتة/بيانات التعريف الصالحة إلى إطار العمل كالمعتاد.
3.6. يجب إرجاع المخازن المؤقتة الفاشلة إلى إطار العمل كما هو موضح في الحالة 2. ولكن ليس من الضروري أن تتبع المخازن المؤقتة الفاشلة الترتيب الصارم الذي تفعله المخازن المؤقتة الصالحة، وقد تكون خارج الترتيب فيما يتعلق بالمخازن المؤقتة الصالحة. على سبيل المثال، إذا تم إرسال المخازن المؤقتة A وB وC وD وE وفشلت D وE، فإن A وE وB وD وC هو أمر إرجاع مقبول.
3.7. بالنسبة للبيانات التعريفية المفقودة تمامًا، يعد استدعاء CAMERA3_MSG_ERROR_RESULT كافيًا، ولا حاجة لاستدعاء Process_capture_result مع بيانات التعريف NULL أو ما يعادلها.
- إذا تم استدعاء Flush() بينما يكون استدعاء process_capture_request() نشطًا، فيجب أن يعود استدعاء العملية هذا في أقرب وقت ممكن. بالإضافة إلى ذلك، إذا تم إجراء استدعاء Process_capture_request() بعد استدعاء Flush() ولكن قبل عودة Flush() ، فيجب التعامل مع طلب الالتقاط المقدم بواسطة استدعاء Process_capture_request المتأخر كطلب معلق في الحالة رقم 2 أعلاه.
يجب أن يعود الدفق Flush() فقط عندما لا يكون هناك أي مخازن مؤقتة أو طلبات معلقة في HAL. قد يستدعي إطار العملconfig_streams (حيث أن حالة HAL أصبحت الآن في حالة سكون) أو قد يصدر طلبات جديدة.
لاحظ أنه يكفي فقط دعم حالات النتائج الناجحة تمامًا والفاشلة تمامًا. ومع ذلك، فمن المرغوب فيه للغاية دعم حالات الفشل الجزئي أيضًا، حيث يمكن أن يساعد ذلك في تحسين الأداء العام لاستدعاء التدفق.
متطلبات الأداء:
يجب أن يعود HAL من هذه المكالمة خلال 100 مللي ثانية، ويجب أن يعود من هذه المكالمة خلال 1000 مللي ثانية. ويجب ألا يتم حظر هذه المكالمة لفترة أطول من زمن انتقال خط الأنابيب (انظر S7 للحصول على التعريف).
معلومات الإصدار:
متاح فقط إذا كان إصدار الجهاز >= CAMERA_DEVICE_API_VERSION_3_1.
قيم الإرجاع:
0: عند التدفق الناجح للكاميرا HAL.
-EINVAL: إذا كان الإدخال غير صحيح (الجهاز غير صالح).
-ENODEV: إذا واجه جهاز الكاميرا خطأً جسيمًا. بعد إرجاع هذا الخطأ، يمكن فقط استدعاء طريقة الإغلاق () بنجاح بواسطة إطار العمل.
باطلة (* get_metadata_vendor_tag_ops) (const struct Camera3_device *، sales_tag_query_ops_t *ops) |
get_metadata_vendor_tag_ops:
احصل على طرق للاستعلام عن معلومات علامة بيانات تعريف ملحق البائع. يجب أن يقوم HAL بملء جميع أساليب تشغيل علامة البائع، أو ترك العمليات دون تغيير إذا لم يتم تحديد علامات البائع.
يمكن العثور على تعريف sales_tag_query_ops_t في system/media/camera/include/system/camera_metadata.h.
>= CAMERA_DEVICE_API_VERSION_3_2: تم إهماله. لقد تم إهمال هذه الوظيفة ويجب ضبطها على NULL بواسطة HAL. الرجاء تنفيذ get_vendor_tag_ops في Camera_common.h بدلاً من ذلك.
int(* تهيئة)(const struct Camera3_device *, const Camera3_callback_ops_t *callback_ops) |
التهيئة:
التهيئة لمرة واحدة لتمرير مؤشرات وظيفة رد الاتصال لإطار العمل إلى HAL. سيتم استدعاؤها مرة واحدة بعد استدعاء open() ناجح، قبل استدعاء أي وظائف أخرى في بنية Camera3_device_ops .
متطلبات الأداء:
يجب أن تكون هذه مكالمة غير محظورة. يجب أن يعود HAL من هذه المكالمة خلال 5 مللي ثانية، ويجب أن يعود من هذه المكالمة خلال 10 مللي ثانية.
قيم الإرجاع:
0: عند التهيئة الناجحة
-ENODEV: في حالة فشل التهيئة. يمكن فقط استدعاء Close() بنجاح بواسطة إطار العمل بعد ذلك.
int(*process_capture_request)(const struct Camera3_device *, Camera3_capture_request_t *request) |
عملية_التقاط_طلب:
إرسال طلب التقاط جديد إلى HAL. يجب ألا يعود HAL من هذه المكالمة حتى يصبح جاهزًا لقبول الطلب التالي للمعالجة. سيتم إجراء استدعاء واحد فقط لـ process_capture_request() في المرة الواحدة بواسطة إطار العمل، وستكون جميع الاستدعاءات من نفس الموضوع. سيتم إجراء الاستدعاء التالي لـ process_capture_request() بمجرد توفر طلب جديد والمخازن المؤقتة المرتبطة به. في سيناريو المعاينة العادي، هذا يعني أنه سيتم استدعاء الوظيفة مرة أخرى بواسطة إطار العمل على الفور تقريبًا.
معالجة الطلب الفعلية غير متزامنة، حيث يتم إرجاع نتائج الالتقاط بواسطة HAL من خلال استدعاءprocess_capture_result(). يتطلب هذا الاستدعاء أن تكون بيانات تعريف النتيجة متاحة، ولكن قد توفر المخازن المؤقتة للإخراج أسوار مزامنة للانتظار. من المتوقع أن يتم تنفيذ طلبات متعددة في وقت واحد، للحفاظ على معدل إطارات الإخراج الكامل.
يحتفظ الإطار بملكية بنية الطلب. ويضمن أن تكون صالحة فقط خلال هذه المكالمة. يجب أن يقوم جهاز HAL بعمل نسخ من المعلومات التي يحتاج إلى الاحتفاظ بها لمعالجة الالتقاط. HAL مسؤول عن انتظار وإغلاق أسوار المخازن المؤقتة وإعادة مقابض المخازن المؤقتة إلى إطار العمل.
يجب أن يقوم HAL بكتابة واصف الملف لسياج مزامنة إصدار المخزن المؤقت للإدخال في input_buffer->release_fence، إذا لم يكن input_buffer فارغًا. إذا قام HAL بإرجاع -1 لسياج مزامنة تحرير المخزن المؤقت للإدخال، يكون إطار العمل حرًا في إعادة استخدام المخزن المؤقت للإدخال على الفور. وبخلاف ذلك، سينتظر إطار العمل على حاجز المزامنة قبل إعادة تعبئة المخزن المؤقت للإدخال وإعادة استخدامه.
>= CAMERA_DEVICE_API_VERSION_3_2:
قد تكون المخازن المؤقتة للإدخال/الإخراج التي يوفرها إطار العمل في كل طلب جديدة تمامًا (لم يسبق لـ HAL رؤيتها من قبل).
اعتبارات الأداء:
يجب أن تكون معالجة المخزن المؤقت الجديد خفيفة الوزن للغاية ويجب ألا يكون هناك أي تدهور في معدل الإطارات أو عدم استقرار الإطار.
يجب أن يعود هذا الاستدعاء بسرعة كافية لضمان الحفاظ على معدل الإطارات المطلوب، خاصة بالنسبة لحالات البث (تم ضبط إعدادات جودة ما بعد المعالجة على FAST). يجب أن يعيد HAL هذا الاستدعاء خلال فاصل زمني لإطار واحد، ويجب أن يعود من هذا الاستدعاء خلال 4 فترات زمنية للإطار.
قيم الإرجاع:
0: بداية ناجحة لمعالجة طلب الالتقاط
-EINVAL: إذا كان الإدخال مشوهًا (تكون الإعدادات فارغة عندما تكون غير مسموح بها، ولا يوجد 0 مخازن مؤقتة للإخراج، وما إلى ذلك) ولا يمكن بدء معالجة الالتقاط. يجب معالجة الفشل أثناء معالجة الطلب عن طريق استدعاء Camera3_callback_ops_t.notify() . في حالة حدوث هذا الخطأ، سيحتفظ إطار العمل بالمسؤولية عن أسوار مخازن التدفق المؤقتة ومقابض المخزن المؤقت؛ يجب ألا يقوم HAL بإغلاق الأسوار أو إرجاع هذه المخازن المؤقتة باستخدام Process_capture_result.
-ENODEV: إذا واجه جهاز الكاميرا خطأً جسيمًا. بعد إرجاع هذا الخطأ، يمكن فقط استدعاء طريقة الإغلاق () بنجاح بواسطة إطار العمل.
int(* Register_stream_buffers)(const struct Camera3_device *, const Camera3_stream_buffer_set_t *buffer_set) |
Register_stream_buffers:
>= CAMERA_DEVICE_API_VERSION_3_2:
إهمال. لن يتم استدعاء هذا ويجب ضبطه على NULL.
<= CAMERA_DEVICE_API_VERSION_3_1:
قم بتسجيل المخازن المؤقتة لدفق معين باستخدام جهاز HAL. يتم استدعاء هذه الطريقة بواسطة إطار العمل بعد تعريف دفق جديد بواسطةconfig_streams، وقبل تضمين المخازن المؤقتة من هذا الدفق في طلب الالتقاط. إذا تم إدراج نفس الدفق في استدعاء config_streams() التالي، فلن يتم استدعاء Register_stream_buffers مرة أخرى لهذا الدفق.
لا يحتاج إطار العمل إلى تسجيل المخازن المؤقتة لجميع التدفقات التي تم تكوينها قبل إرسال طلب الالتقاط الأول. يتيح ذلك بدء التشغيل السريع للمعاينة (أو حالات الاستخدام المشابهة) بينما لا يزال يتم تخصيص التدفقات الأخرى.
تهدف هذه الطريقة إلى السماح لجهاز HAL بتعيين المخازن المؤقتة أو إعدادها لاستخدامها لاحقًا. سيتم بالفعل تأمين المخازن المؤقتة التي تم تمريرها للاستخدام. في نهاية المكالمة، يجب أن تكون كافة المخازن المؤقتة جاهزة للإرجاع إلى الدفق. الوسيطة buffer_set صالحة فقط لمدة هذه المكالمة.
إذا تم تعيين تنسيق الدفق إلى HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED، فيجب أن يقوم HAL الخاص بالكاميرا بفحص المخازن المؤقتة التي تم تمريرها هنا لتحديد أي معلومات تنسيق بكسل خاصة بالنظام الأساسي.
متطلبات الأداء:
يجب أن تكون هذه مكالمة غير محظورة. يجب أن يعود HAL من هذه المكالمة خلال 1 مللي ثانية، ويجب أن يعود من هذه المكالمة خلال 5 مللي ثانية.
قيم الإرجاع:
0: عند التسجيل الناجح للمخازن المؤقتة للتيار الجديد
-EINVAL: إذا كان Stream_buffer_set لا يشير إلى دفق نشط صالح، أو إذا كانت مصفوفة المخازن المؤقتة غير صالحة.
-ENOMEM: إذا كان هناك فشل في تسجيل المخازن المؤقتة. يجب أن يعتبر إطار العمل جميع المخازن المؤقتة للتدفق غير مسجلة، ويمكنه محاولة التسجيل مرة أخرى لاحقًا.
-ENODEV: إذا كان هناك خطأ فادح، ولم يعد الجهاز يعمل. يمكن فقط استدعاء Close() بنجاح بواسطة إطار العمل بعد إرجاع هذا الخطأ.
تم إنشاء وثائق هذه البنية من الملف التالي:
- الأجهزة/libhardware/تشمل/الأجهزة/ الكاميرا3.h