مرجع هيكل الكاميرا2_request_queue_src_ops
#include < camera2.h >
حقول البيانات | |
كثافة العمليات (* | request_count )(const struct Camera2_request_queue_src_ops *q) |
كثافة العمليات (* | dequeue_request )(const struct Camera2_request_queue_src_ops *q, Camera_metadata_t **buffer) |
كثافة العمليات (* | free_request )(const struct Camera2_request_queue_src_ops *q, Camera_metadata_t *old_buffer) |
وصف تفصيلي
طلب بروتوكول قائمة انتظار الإدخال:
يحمل الإطار قائمة الانتظار ومحتوياتها. في البداية، قائمة الانتظار فارغة.
- عندما يتم وضع المخزن المؤقت للبيانات الوصفية الأول في قائمة الانتظار، يرسل إطار العمل إشارة إلى الجهاز عن طريق استدعاء notify_request_queue_not_empty().
- بعد تلقي notify_request_queue_not_empty، يجب على الجهاز استدعاء dequeue() بمجرد أن يصبح جاهزًا للتعامل مع المخزن المؤقت التالي.
- بمجرد أن يقوم الجهاز بمعالجة المخزن المؤقت، ويصبح جاهزًا للمخزن المؤقت التالي، يجب عليه استدعاء dequeue() مرة أخرى بدلاً من انتظار الإشعار. إذا لم يكن هناك المزيد من المخازن المؤقتة المتاحة، فسيُرجع التابع dequeue() القيمة NULL. بعد هذه النقطة، عندما يصبح المخزن المؤقت متاحًا، يجب على إطار العمل استدعاء notify_request_queue_not_empty() مرة أخرى. إذا تلقى الجهاز إرجاعًا NULL من قائمة الانتظار، فلن يحتاج إلى الاستعلام عن قائمة الانتظار مرة أخرى حتى يتم تلقي استدعاء notify_request_queue_not_empty() من المصدر.
- إذا قام الجهاز باستدعاء buffer_count() واستقبل 0، فهذا لا يعني أن إطار العمل سيوفر استدعاء notify_request_queue_not_empty(). لن يقدم إطار العمل مثل هذا الإشعار إلا بعد أن يتلقى الجهاز قيمة NULL من قائمة الانتظار، أو عند بدء التشغيل الأولي.
- قد يكون استدعاء dequeue() ردًا على notify_request_queue_not_empty() على نفس مؤشر الترابط مثل استدعاء notify_request_queue_not_empty()، ويمكن تنفيذه من داخل استدعاء الإخطار.
- يجب إرجاع كافة المخازن المؤقتة للطلبات التي تم وضعها في قائمة الانتظار إلى إطار العمل عن طريق استدعاء free_request، بما في ذلك عند حدوث أخطاء، أو طلب تدفق الجهاز، أو عند إيقاف تشغيل الجهاز.
التوثيق الميداني
int(* dequeue_request)(const struct Camera2_request_queue_src_ops *q, Camera_metadata_t **buffer) |
احصل على مخزن مؤقت للبيانات الوصفية من الإطار. يعود موافق إذا لم يكن هناك خطأ. إذا كانت قائمة الانتظار فارغة، فسيتم إرجاع NULL في المخزن المؤقت. في هذه الحالة، يجب أن ينتظر الجهاز ظهور رسالة notify_request_queue_not_empty() قبل محاولة إلغاء الصف مرة أخرى. يجب إرجاع المخازن المؤقتة التي تم الحصول عليها بهذه الطريقة إلى إطار العمل باستخدام free_request() .
int(* free_request)(const struct Camera2_request_queue_src_ops *q, Camera_metadata_t *old_buffer) |
int(* request_count)(const struct Camera2_request_queue_src_ops *q) |
احصل على عدد المخازن المؤقتة للطلبات المعلقة في قائمة الانتظار. قد يُرجع CAMERA2_REQUEST_QUEUE_IS_BOTTOMLESS إذا تم تكوين طلب متكرر (طلب الدفق) حاليًا. استدعاء هذه الطريقة ليس له أي تأثير على ما إذا كان سيتم استدعاء طريقة notify_request_queue_not_empty() بواسطة إطار العمل.
تم إنشاء وثائق هذه البنية من الملف التالي:
- الأجهزة/libhardware/تشمل/الأجهزة/ الكاميرا2.h