تكوينات الدفق

يقدم Android 10 ميزات تسمح لعملاء الكاميرا باختيار تدفقات الكاميرا المثالية لحالات استخدام محددة وللتأكد من دعم جهاز الكاميرا لمجموعات تدفق معينة. يشير تكوين الدفق إلى دفق كاميرا واحد تم تكوينه في جهاز الكاميرا وتشير مجموعة الدفق إلى مجموعة واحدة أو أكثر من التدفقات التي تم تكوينها في جهاز الكاميرا. لمعرفة المزيد حول هذه الميزات، راجع تكوينات الدفق الموصى بها وواجهة برمجة التطبيقات (API) للاستعلام عن مجموعات الدفق .

التنفيذ المرجعي

يوجد تطبيق مرجعي من جانب البائع لتدفقات التكوين الموصى بها وواجهة برمجة التطبيقات (API) للاستعلام عن ميزات مجموعة التدفق. يمكنك العثور على هذا التنفيذ على QCamera3HWI.cpp

يمكن لموردي الكاميرات الإعلان عن تكوينات البث الموصى بها لعملاء الكاميرا لحالات استخدام محددة. يمكن أن تساعد تكوينات الدفق الموصى بها، والتي تعد مجموعات فرعية من StreamConfigurationMap ، عملاء الكاميرا في اختيار التكوينات المثالية.

على الرغم من أن StreamConfigurationMap يوفر معلومات شاملة عن تكوين البث لعملاء الكاميرا، إلا أنه لا يوفر أي معلومات حول تأثيرات الكفاءة أو الطاقة أو الأداء لاختيار تدفق واحد على الآخر. يمكن لعملاء الكاميرا الاختيار بحرية من جميع تكوينات البث الممكنة، ولكن في كثير من الحالات، يؤدي ذلك إلى استخدام العملاء لتكوينات وتطبيقات الكاميرا دون المستوى الأمثل، مما يؤدي إلى إجراء عمليات بحث شاملة تستغرق وقتًا طويلاً.

على سبيل المثال، على الرغم من أن بعض تنسيقات YUV التي تمت معالجتها مطلوبة ويجب دعمها، فقد لا يتمتع جهاز الكاميرا بدعم أصلي للتنسيقات. وينتج عن هذا تمريرة معالجة إضافية لتحويل التنسيق ويقلل الكفاءة. يمكن أن يكون للحجم ونسبة العرض إلى الارتفاع المقابلة أيضًا تأثير مماثل مما يجعل أبعادًا معينة مفضلة من حيث القوة والأداء.

ليس من الضروري أن تكون خرائط تكوين الدفق الموصى بها شاملة مقارنةً بـ StreamConfigurationMap . يجب أن تتبع خرائط التكوين المقترحة المتطلبات الواردة في قسم التنفيذ ويمكن أن تتضمن أيًا من التنسيقات أو الأحجام أو القيم الأخرى المتوفرة في StreamConfigurationMap . لا يمكن تضمين التنسيقات أو الأحجام أو القيم الأخرى المخفية التي لم يتم العثور عليها في StreamConfigurationMap في خرائط تكوين الدفق الموصى بها.

تظل جميع الاختبارات دون تغيير ولا يتم تخفيفها وفقًا لتكوينات الدفق الموصى بها.

تعد تكوينات البث الموصى بها التي يوفرها تطبيق الكاميرا اختيارية ويمكن لعميل الكاميرا تجاهلها.

تطبيق

اتبع هذه الخطوات لتنفيذ هذه الميزة.

إدخالات البيانات الوصفية

لتمكين هذه الميزة، يجب أن يقوم جهاز HAL للكاميرا بملء إدخالات بيانات التعريف الثابتة التالية:

  • android.scaler.availableRecommendedStreamConfigurations : المجموعة الفرعية الموصى بها من تكوينات الدفق لحالات استخدام محددة. يستخدم الإعلان صورًا نقطية بسيطة تشير إلى حالات الاستخدام المقترحة في شكل [1 << PREVIEW | 1 << RECORD..] . تعمل حالات الاستخدام على توسيع الصف العادي (التنسيق والعرض والارتفاع والإدخال) بإدخال إضافي واحد. حالات الاستخدام العام غير الموجودة أو أي بتات أخرى تم تعيينها ضمن النطاق [PUBLIC_END, VENDOR_START] محظورة.

    يتم تخزين هذه المعلومات في علامة البيانات التعريفية availableRecommendedStreamConfigurations .

    يوضح المثال التالي مصفوفة لتكوين البث الموصى به لجهاز كاميرا يدعم فقط 4K و1080p، حيث يُفضل كلا الدقة لتسجيل الفيديو ولكن يُقترح 1080p فقط للمعاينة.

    [3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT),
    1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
    
  • android.depth.availableRecommendedDepthStreamConfigurations (متوفر فقط إذا كان مدعومًا من قبل الجهاز): تكوينات دفق بيانات العمق الموصى بها لجهاز الكاميرا هذا. على غرار إدخال البيانات التعريفية أعلاه، تشير الصورة النقطية لحالة الاستخدام الإضافية إلى حالات الاستخدام المقترحة.

    يتم تخزين هذه المعلومات في علامة البيانات الوصفية availableRecommendedInputOutputFormatsMap .

  • android.scaler.availableRecommendedInputOutputFormatsMap (متوفر فقط إذا كان مدعومًا من قبل الجهاز): تعيين تنسيقات الصور الموصى بها والمقترحة لجهاز الكاميرا هذا لتدفقات الإدخال، إلى تنسيقات الإخراج المقابلة لها.

    يتم تخزين هذه المعلومات في علامة البيانات التعريفية availableRecommendedDepthStreamConfigurations .

تتوفر هذه المعلومات لعملاء الكاميرا من خلال RecommatedStreamConfigurationMap API.

حالات الاستخدام المطلوبة

يجب توفير تكوينات الدفق الموصى بها لحالات الاستخدام التالية وتلبية المتطلبات المقابلة:

حالة الاستخدام متطلبات
PREVIEW يجب أن تتضمن المعاينة فقط تكوينات الدفق المعالجة غير المتوقفة بتنسيقات الإخراج مثل YUV_420_888 و IMPLEMENTATION_DEFINED .
RECORD يجب أن يتضمن سجل الفيديو تكوينات الدفق التي تتطابق مع ملفات تعريف الوسائط المدعومة المعلن عنها بتنسيق IMPLEMENTATION_DEFINED .
VIDEO_SNAPSHOT يجب أن تتضمن لقطة الفيديو تكوينات الدفق التي لا يقل حجمها عن الحد الأقصى لدرجات دقة RECORD وفقط مع تركيبة تنسيق/مساحة البيانات BLOB + DATASPACE_JFIF (JPEG). يجب ألا تتسبب التكوينات في حدوث خلل في المعاينة ويجب أن تكون قادرة على العمل بمعدل 30 إطارًا في الثانية.
SNAPSHOT يجب أن تتضمن تكوينات دفق اللقطات واحدًا على الأقل بحجم قريب من android.sensor.info.activeArraySize مع تركيبة تنسيق/مساحة البيانات BLOB + DATASPACE_JFIF (JPEG). مع الأخذ في الاعتبار القيود المفروضة على نسبة العرض إلى الارتفاع والمحاذاة والقيود الأخرى الخاصة بالبائع، يجب ألا تقل مساحة الحد الأقصى للحجم المقترح عن 97% من مساحة حجم صفيف المستشعر.
ZSL (إذا كان مدعومًا) إذا كان جهاز الكاميرا مدعومًا، فيجب الإعلان عن تكوينات دفق الإدخال الموصى بها فقط مع تنسيقات الإخراج المعالجة أو المتوقفة الأخرى.
RAW (إذا كان مدعومًا) إذا كان جهاز الكاميرا مدعومًا، فيجب أن تتضمن تكوينات التدفق الأولي الموصى بها تنسيقات الإخراج المستندة إلى RAW فقط.

حالات الاستخدام الأخرى

يمكنك توفير تدفقات تكوين إضافية موصى بها لحالات الاستخدام الخاصة بالتنفيذ الخاص بك.

تصديق

لاختبار تنفيذك لتدفقات التكوين الموصى بها، قم بتشغيل اختبارات CTS وVTS التالية:

API للاستعلام عن مجموعات الدفق

يدعم نظام Android الأساسي واجهة برمجة التطبيقات (API) للاستعلام عن مجموعات الدفق. يتيح تنفيذ واجهة برمجة التطبيقات (API) هذه لعملاء الكاميرا الاستعلام بأمان عن مجموعات البث في أي وقت بعد تلقي مثيل CameraDevice صالح، وإزالة الحمل الزائد لتهيئة جلسة التقاط الكاميرا وإمكانية وجود استثناءات لاحقة للكاميرا بما في ذلك تعطل الكاميرا، والسماح باستعلامات أسرع.

تسمح هذه الميزة أيضًا لعملاء الكاميرا بتلقي قائمة بمجموعات الدفق التي تم تجميعها وفقًا لإرشادات CameraDevice ومستوى HW المدعوم. تتوفر اختبارات CTS لفرض صحة نتائج الاستعلام قدر الإمكان وتغطي مجموعة فرعية صغيرة من مجموعات الدفق الأكثر شيوعًا.

يمكنك اختيار دعم هذه الميزة من خلال تنفيذ استدعاء HIDL API إضافي واحد في Camera HAL.

تطبيق

لدعم واجهة برمجة التطبيقات (API) للاستعلام عن مجموعات الدفق، يجب أن توفر واجهة HAL الخاصة بالكاميرا تطبيقًا لواجهة isStreamCombinationSupported HIDL API. تتحقق هذه الواجهة مما إذا كان جهاز الكاميرا يدعم مجموعة دفق الكاميرا المحددة.

عند الاتصال، يجب أن تقوم واجهة برمجة التطبيقات (API) بإرجاع أحد رموز الحالة التالية:

  • OK : تم الاستعلام عن مجموعة الدفق بنجاح.
  • METHOD_NOT_SUPPORTED : جهاز الكاميرا لا يدعم استعلام مجموعة الدفق.
  • INTERNAL_ERROR : لا يمكن إكمال استعلام مجموعة الدفق بسبب خطأ داخلي.

تُرجع واجهة برمجة التطبيقات (API) صحيحًا إذا كانت مجموعة الدفق مدعومة. وإلا فإنها ترجع كاذبة.

يستخدم إطار العمل واجهة برمجة التطبيقات العامة isSessionConfigurationSupported للتحقق مما إذا كان تكوين الجلسة المعينة مدعومًا بواسطة جهاز الكاميرا.

يجب ألا يكون للاتصالات بواجهة برمجة التطبيقات (API) أي آثار جانبية على التشغيل العادي للكاميرا. يجب ألا تؤدي مكالمات واجهة برمجة التطبيقات (API) إلى تغيير أي حالات داخلية أو إبطاء أداء الكاميرا. تأكد من أنه بعد التحقق من صحة مجموعة الدفق بنجاح، يمكن لعملاء الكاميرا تكوين مجموعة الدفق بنجاح. لتجنب المشكلات، تأكد من أن التطبيق لا يخزن أي معلومات أثناء استعلامات مجموعة الدفق، أو يغير حالته الداخلية، أو يشارك في عمليات تستغرق وقتًا طويلاً.

تصديق

للتحقق من صحة هذه الميزة، قم بتشغيل حالات اختبار CTS وVTS التالية للكاميرا:

وحدات كاميرا CTS:

كاميرا فتس:

VtsHalCameraProviderV2_4TargetTest.cpp