يتضمّن نظام التشغيل Android ميزات تتيح لعملاء الكاميرا اختيار عمليات بث الكاميرا المثلى لحالات استخدام معيّنة ولضمان توافق مجموعات معيّنة من عمليات البث مع جهاز الكاميرا. يشير إعداد مجموعة البث إلى مجموعة بث واحدة من الكاميرا تم ضبطها في جهاز الكاميرا، ويشير مزيج مجموعة البث إلى مجموعة واحدة أو أكثر من مجموعات البث التي تم ضبطها في جهاز الكاميرا. لمزيد من المعلومات حول هذه الميزات، اطّلِع على إعدادات البث المقترَحة وواجهة برمجة التطبيقات لطلبات البحث عن مجموعات الميزات.
التنفيذ المرجعي
هناك مرجع تنفيذ من جهة المورّد للإعدادات المقترَحة المصادر وواجهة برمجة التطبيقات لطلب ميزات دمج مصادر البيانات. يمكنك العثور على عملية التنفيذ هذه في QCamera3HWI.cpp.
إعدادات البث المقترَحة
يمكن لمورّدي الكاميرات الإعلان عن إعدادات البث المقترَحة لحالات استخدام معيّنة لعملاء الكاميرات. يمكن أن تساعد إعدادات البث المقترَحة هذه، والتي تشكّل مجموعات فرعية منStreamConfigurationMap، عملاء الكاميرا في اختيار الإعدادات المثلى.
على الرغم من أنّ StreamConfigurationMap يقدّم معلومات شاملة عن إعدادات البث إلى عملاء الكاميرا، إلا أنّه لا يقدّم أي معلومات عن تأثيرات اختيار بث على حساب بث آخر من حيث الكفاءة أو الطاقة أو الأداء. يمكن لعملاء الكاميرا الاختيار بحرية من بين جميع إعدادات البث الممكنة، ولكن في كثير من الحالات، يؤدي ذلك إلى استخدام العميل لإعدادات الكاميرا والتطبيقات غير المثلى مما يؤدي إلى عمليات بحث شاملة تستغرق وقتًا طويلاً.
على سبيل المثال، على الرغم من أنّ بعض تنسيقات YUV التي تمت معالجتها مطلوبة ويجب أن تكون متوافقة، قد لا يتوفّر في جهاز الكاميرا توافق أصلي مع التنسيقات. ويؤدي ذلك إلى إجراء جولة معالجة إضافية لتحويل التنسيق، ما يقلل من الكفاءة. يمكن أن يكون للحجم ونسبة العرض إلى الارتفاع المقابلة له تأثير مماثل، ما يجعل بعض السمات مفضّلة من حيث القوة والأداء.
لا يُشترط أن تكون خرائط إعدادات البث المقترَحة شاملة مقارنةً بملف StreamConfigurationMap. يجب أن تلتزم خرائط الإعدادات المقترَحة بالمتطلبات الواردة في قسم التنفيذ ويمكن أن تتضمّن أيًا من التنسيقات أو الأحجام أو القيم الأخرى المتاحة في StreamConfigurationMap. لا يمكن تضمين التنسيقات أو الأحجام أو القيم الأخرى المخفية التي لا يمكن العثور عليها في StreamConfigurationMap في خرائط إعدادات البث المقترَحة.
تظل جميع الاختبارات بدون تغيير ولا يتم تخفيف معاييرها استنادًا إلى إعدادات البث المقترَحة.
إنّ إعدادات البث المقترَحة التي يوفّرها تطبيق الكاميرا هي اختيارية ويمكن لبرنامج الكاميرا تجاهلها.
التنفيذ
اتّبِع الخطوات التالية لتفعيل هذه الميزة.
إدخالات البيانات الوصفية
لتفعيل هذه الميزة، يجب أن تملأ Camera HAL إدخالات البيانات الوصفية الثابتة التالية:
android.scaler.availableRecommendedStreamConfigurations
: مجموعة فرعية рекомендованных параметров настройки потока для конкретных случаев использования. يستخدم البيان ملفات بترميز ثنائي يشير إلى حالات الاستخدام المقترَحة في شكل[1 << PREVIEW | 1 << RECORD..]
. تُوسّع حالات الاستخدام مجموعة العناصر العادية (التنسيق والعرض والارتفاع والإدخال) بإدخال إضافي واحد. يُحظر استخدام حالات الاستخدام العامة غير المتوفّرة أو أيّ وحدات أخرى تم ضبطها ضمن النطاق[PUBLIC_END, VENDOR_START]
.يتم تخزين هذه المعلومات في علامة metadata (البيانات الوصفية)
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
(متاحة فقط إذا كان الجهاز متوافقًا معها): خيارات ضبط بث dataspace للبيانات المتعلّقة بالعمق المقترَحة لجهاز الكاميرا هذا. على غرار إدخال البيانات الوصفية أعلاه، تشير خريطة البِت الإضافية لحالة الاستخدام إلى حالات الاستخدام المقترَحة.يتم تخزين هذه المعلومات في علامة metadata (البيانات الوصفية)
availableRecommendedInputOutputFormatsMap
.android.scaler.availableRecommendedInputOutputFormatsMap
(متاح فقط إذا كان الجهاز متوافقًا): ربط تنسيقات الصور المقترَحة التي يتم اقتراح استخدامها لجهاز الكاميرا هذا مع تنسيقات الإخراج المقابلة لها في خلاصات الإدخاليتم تخزين هذه المعلومات في علامة metadata (البيانات الوصفية)
availableRecommendedDepthStreamConfigurations
.
تتوفّر هذه المعلومات لعملاء الكاميرا من خلال واجهة برمجة التطبيقات RecommendedStreamConfigurationMap.
حالات الاستخدام المطلوبة
يجب تقديم إعدادات البث المقترَحة لحالات الاستخدام التالية والاستجابة للمتطلبات المقابلة:
حالة الاستخدام | المتطلبات |
---|---|
PREVIEW |
يجب أن تتضمّن المعاينة فقط إعدادات البث التي تمت معالجتها بدون توقف
بتنسيقات إخراج مثل YUV_420_888 و
IMPLEMENTATION_DEFINED . |
RECORD |
يجب أن يتضمّن سجلّ الفيديو إعدادات البث التي تتطابق مع ملفّات تعريف
الوسائط المتوافقة المُعلَن عنها بتنسيق IMPLEMENTATION_DEFINED . |
VIDEO_SNAPSHOT |
يجب أن تتضمّن لقطة الفيديو إعدادات مصادر بيانات تساوي على الأقل الحد الأقصى لدرجات دقة التسجيل، ويجب أن تكون هذه الإعدادات من النوع BLOB + DATASPACE_JFIF (JPEG) فقط. يجب ألا تؤدي الإعدادات إلى حدوث مشاكل في المعاينة، ويجب أن يكون بإمكانها التشغيل بمعدّل 30 لقطة في الثانية. |
SNAPSHOT |
يجب أن تتضمّن إعدادات خلاصة اللقطات ملفًا واحدًا على الأقل بحجم قريب
من android.sensor.info.activeArraySize مع تركيبة تنسيق/مساحة بيانات BLOB +
DATASPACE_JFIF (JPEG). مع الأخذ في الاعتبار
القيود المفروضة على نسبة العرض إلى الارتفاع والمحاذاة والقيود الأخرى الخاصة بالمورّد،
يجب ألا تقلّ مساحة الحد الأقصى للحجم المقترَح عن% 97 من مساحة تنسيق ملف قاعدة قياس دقة
الاستشعار. |
ZSL (إذا كان متاحًا) |
يجب الإعلان عن إعدادات بث الإدخال المُقترَحة فقط مع أشكال الإخراج الأخرى التي تمت معالجتها أو التي تتوقّف مؤقتًا، في حال توفّرها على جهاز الكاميرا. |
RAW (إذا كان متاحًا) |
إذا كان جهاز الكاميرا يتيح ذلك، يجب أن تتضمّن إعدادات البث المباشر المُقترَحة فقط تنسيقات الإخراج المستندة إلى RAW. |
حالات الاستخدام الأخرى
يمكنك تقديم مصادر إعدادات مقترَحة إضافية لحالات الاستخدام المرتبطة بتنفيذك.
التحقُّق
لاختبار عملية تنفيذ أحداث الضبط المقترَحة، يمكنك إجراء اختبارَي CTS وVTS التاليَين:
واجهة برمجة التطبيقات لطلب البحث عن مجموعات الميزات
بدءًا من الإصدار 15 من Android، يقدّم نظام Android الأساسي واجهة برمجة تطبيقات لطلب مجموعات الميزات. تتيح واجهة برمجة التطبيقات هذه لعملاء الكاميرا الاستعلام عمّا إذا كان الجهاز يتيح استخدام مجموعة معيّنة من الميزات. إنّ واجهة برمجة التطبيقات هذه ضرورية لأنّ واجهة برمجة التطبيقات Camera2 API تنشئ نماذج لميزات مختلفة، مثل 4K و60 لقطة في الثانية وتسجيل الفيديو بنطاق عالي الديناميكية (HDR) وUltraHDR والتكبير الفائق وميزة التثبيت كعناصر تحكّم متعامدة.
المتطلبات
لكي تتوافق واجهة برمجة التطبيقات مع طلبات البحث عن مجموعات الميزات، يجب أن تُنفِّذ طبقة HAL للكاميرا
الإصدار 3 من واجهة ICameraDevice
. لمعرفة التفاصيل، يُرجى الاطّلاع على القسم
التنفيذ.
عندما تكون واجهة برمجة التطبيقات متوافقة، يجب أن يكون ثبات المعاينة متعامدًا مع
الميزات الأخرى. وهذا يعني أنّه بالنسبة إلى جهاز الكاميرا الذي يتيح تثبيت
المعاينة، يجب أن تكون القيمة المعروضة isStreamCombinationWithSettingsSupported
لتركيبة معيّنة هي القيمة نفسها عند تفعيل ميزة تثبيت
المعاينة أو إيقافها. ويؤدي ذلك إلى تقليل مساحة البحث عن طلبات بحث تركيبة الميزات.
بالإضافة إلى ذلك، بالنسبة إلى فئة أداء الوسائط 15، يجب أن تتيح الكاميرا الخلفية الأساسية تثبيت المعاينة باستخدام معاينة HLG10 بدقة 10 بت لمعاينة 1080p و720p وملفات JPEG بأكبر حجم ممكن. لمزيد من التفاصيل حول هذه المتطلبات، يُرجى الاطّلاع على الفقرة 2.2.7.2. الكاميرا لجهاز التحكّم الرقمي في الإضاءة
التنفيذ
لتفعيل واجهة برمجة التطبيقات من أجل طلب مجموعات الميزات، عليك تنفيذ واجهتَي برمجة التطبيقات التاليتَين لطلب مجموعات الميزات في الإصدار 3 من
ICameraDevice
:
constructDefaultRequestSettings
: تُنشئ الإعدادات التلقائية لنوعCaptureRequest
محدّد. يمكن أن يستخدم HAL آلية تنفيذICameraDeviceSession::constructDefaultRequestSettings
.
isStreamCombinationWithSettingsSupported
: تحقّق من توفّر ميزة بث كاميرا محدّدة على الجهاز مع مَعلمات الجلسة ومفاتيحCaptureRequest
إضافية. يجب أن يعرض الإجراءtrue
للتركيبات المتوافقة وfalse
لتركيبات الميزات غير المتوافقة. يمكن أن يستخدم HAL تنفيذisStreamCombinationSupported
ويضيف دعمًا للتحقّق من إعداداتCaptureRequest
التي يتم تمريرها فيsessionParams
.
getSessionCharacteristics
: تأخذ تركيبة مجرى متوافقة مع مَعلمات الجلسة وتُرجع السمات المتعلّقة بالجلسة.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: يسرد هذا العمود جميع إعدادات الجلسات الشائعة الاستخدام. ويتم التحقّق من هذه الإعدادات من خلال اختبار الامتثال.
بالنسبة إلى الإصدارات الأقدم من الإصدار 3 من واجهة ICameraDevice
، يجب أن ينفذ HAL
طريقة
isStreamCombinationSupported
.
لمزيد من المعلومات عن مجموعات الميزات التي تبحث عنها واجهة برمجة التطبيقات، يُرجى الاطّلاع على مستندات sessionConfigurationQueryVersion
في
system/media/camera/docs/metadata_definitions.xml
.
للحصول على مرجع لتنفيذ هذه الميزة، اطّلِع على
hardware/google/camera/devices/EmulatedCamera/hwl/
.
واجهات برمجة التطبيقات العامة
يمكن للتطبيقات استخدام واجهات برمجة التطبيقات العامة التالية للبحث عن مجموعات الميزات المتوافقة للجهاز:
CameraDevice.CameraDeviceSetup
: تمثيل محدود لـCameraDevice
يمكن استخدامه لطلب البحث عن مجموعات العناصر بدون الحاجة إلى مثيلCameraDevice
.
getCameraDeviceSetup
: يحصل على عنصرCameraDeviceSetup
لرقم تعريف كاميرا معيّن إذا كانisCameraDeviceSetupSupported
يعرضtrue
.
INFO_SESSION_CONFIGURATION_QUERY_VERSION
: تتيح طلبات البحث التي تجمع بين العناصر إذا كانت هذه القيمة هيVANILLA_ICE_CREAM
أو أعلى.
OutputConfiguration
: فئة تصف إخراج الكاميرا، ويمكن أن تحتوي على سطح عرض مؤجل بغرض طلبات البحث عن تركيبة الميزات ذات الاستجابة المنخفضة.
SessionConfiguration
: فئة أدوات تصف إعدادات الجلسة، بما في ذلك مجموعات البث ومَعلمات الجلسة، والتي يمكن استخدامها لإجراء طلبات بحث عن مجموعات السمات.
التحقُّق
للتحقّق من صحة تنفيذ هذه الميزة، استخدِم اختبارات VTS وCTS و Camera ITS (CTS Verifier) التالية:
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
كاميرا ITS
- cts/apps/CameraITS/tests/feature_combination/test_feature_combination.py
- cts/apps/CameraITS/tests/scene6/test_session_characteristics_zoom.py