توضّح هذه الصفحة بالتفصيل الاختلافات في الإصدارات في واجهات برمجة التطبيقات وواجهات HAL لكاميرا الهاتف واختبارات مجموعة أدوات اختبار التوافق (CTS) المرتبطة بها. ويتناول أيضًا العديد من التغييرات المعمارية التي تم إجراؤها لتعزيز إطار عمل الكاميرا وتأمينه في Android 7.0، والتبديل إلى Treble في Android 8.0، والتحديثات التي يجب أن يجريها المورّدون لسماح بهذه التغييرات في عمليات تنفيذ الكاميرا.
المصطلحات
يتم استخدام المصطلحات التالية في هذه الصفحة:
- Camera API1
- إطار عمل الكاميرا على مستوى التطبيق على أجهزة Android 4.4 والإصدارات الأقدم، المعروض
من خلال فئة
android.hardware.Camera
- Camera API2
- إطار عمل الكاميرا على مستوى التطبيق في الأجهزة التي تعمل بالإصدار 5.0 من نظام التشغيل Android والإصدارات الأحدث، ويظهر من خلال حزمة
android.hardware.camera2
. - Camera HAL
- طبقة وحدة الكاميرا التي نفّذها مورّدو شرائح المعالجة المركزية تم إنشاء الأطر العامة على مستوى التطبيق فوق طبقة تجريد الأجهزة (HAL) للكاميرا.
- Camera HAL3.1
- إصدار طبقة HAL لجهاز الكاميرا الذي تم طرحه مع Android 4.4
- Camera HAL3.2
- إصدار HAL لجهاز الكاميرا الذي تم إصداره مع Android 5.0
- Camera API1 CTS
- مجموعة من اختبارات CTS للكاميرا التي يتم إجراؤها على Camera API1
- Camera API2 CTS
- مجموعة إضافية من اختبارات CTS للكاميرا التي يتم إجراؤها على واجهة برمجة التطبيقات Camera API2
- صوت عالي الطبقة
- تفصل هذه الواجهة بين تنفيذ المورّد (البرامج المنخفضة المستوى الخاصة بالجهاز والتي يكتبها مورّدو السيليكون) وإطار عمل نظام التشغيل Android من خلال واجهة مورّد جديدة.
- HIDL
- لغة تعريف واجهة HAL تم تقديمها مع Treble وتُستخدَم لتحديد الواجهة بين HAL و مستخدميه.
- VTS
- مجموعة اختبارات المورّدين التي تم طرحها مع Treble
واجهات برمجة تطبيقات الكاميرا
يتضمّن Android واجهات برمجة التطبيقات التالية للكاميرا.
Camera API1
أوقف نظام التشغيل Android 5.0 نهائيًا الإصدار 1 من واجهة برمجة التطبيقات Camera API، وسنواصل إيقافه نهائيًا مع تركيز تطوير منصّات جديدة على الإصدار 2 من واجهة برمجة التطبيقات Camera API. ومع ذلك، ستكون فترة الإيقاف النهائي طويلة، وستظل إصدارات Android متوافقة مع تطبيقات Camera API1 لعدة أشهر. وتحديدًا، سيستمر توفير الدعم لما يلي:
- واجهات Camera API1 للتطبيقات: من المفترض أن تعمل تطبيقات الكاميرا المبنية على Camera API1 بالطريقة نفسها على الأجهزة التي تعمل بإصدارات أقدم من Android.
- إصدارات Camera HAL: يشمل التوافق مع كاميرا HAL1.0.
Camera API2
يتيح إطار عمل Camera API2 توفير مستوى منخفض من التحكّم في الكاميرا للتطبيق، بما في ذلك تدفقات البث/التدفق الفعّالة بدون نسخ، وعناصر التحكم لكل إطار في مستوى التعريض للضوء وكسب الضوء وزيادة توازن اللون الأبيض وتحويل الألوان وإزالة التشويش وزيادة الحدة وغير ذلك. لمعرفة التفاصيل، شاهِد الفيديو الذي يقدّم نظرة عامة على مؤتمر Google I/O.
يتضمّن الإصدار 5.0 من نظام التشغيل Android وإصداراته الأحدث واجهة برمجة التطبيقات Camera API2، ولكن قد لا تتوافق بعض ميزات Camera API2 مع الأجهزة التي تعمل بالإصدار
5.0 من نظام التشغيل Android والإصدارات الأحدث. إنّ السمة android.info.supportedHardwareLevel
التي يمكن للتطبيقات طلبها من خلال واجهات الكاميرا API2 تبلّغ عن أحد مستويات الدعم التالية:
LEGACY
: توفّر هذه الأجهزة للتطبيقات إمكانات مماثلة تقريبًا لتلك التي توفّرها لواجهات Camera API1 من خلال واجهات Camera API2. يُحوّل رمز إطارات العمل القديمة بشكلٍ مفاهيمي طلبات البيانات من Camera API2 إلى طلبات البيانات من Camera API1، لأنّ الأجهزة القديمة لا تتوافق مع ميزات Camera API2، مثل عناصر التحكّم في كل إطار.LIMITED
: تتيح هذه الأجهزة بعض إمكانات Camera API2 (ولكن ليس كلها) ويجب استخدام Camera HAL 3.2 أو إصدار أحدث.FULL
: تتوافق هذه الأجهزة مع كل الإمكانات الرئيسية التي توفّرها واجهة برمجة التطبيقات "الكاميرا" 2، ويجب أن تستخدم الإصدار 3.2 من بروتوكول HAL أو الإصدارات الأحدث للكاميرا 3.2 أو الإصدارات الأحدث بالإضافة إلى الإصدار 5.0 من نظام التشغيل Android أو الإصدارات الأحدث.LEVEL_3
: تتيح هذه الأجهزة إعادة معالجة YUV وتصوير صور ملفّات RAW، بالإضافة إلى إعدادات إضافية لبث الإخراج.EXTERNAL
: تشبه هذه الأجهزة أجهزةLIMITED
مع بعض الاستثناءات، على سبيل المثال، قد لا يتم تسجيل بعض معلومات أداة الاستشعار أو العدسة أو قد تكون معدّلات عرض اللقطات أقل ثباتًا. يُستخدَم هذا المستوى للكاميرات الخارجية، مثل كاميرات الويب USB.
يتم عرض الإمكانات الفردية من خلال سمة
android.request.availableCapabilities
في واجهات Camera API2. تتطلّب أجهزة FULL
إمكانات MANUAL_SENSOR
و
MANUAL_POST_PROCESSING
، من بين غيرها. إنّ ميزة
RAW
اختيارية حتى على أجهزة FULL
.
يمكن لأجهزة LIMITED
الإعلان عن أي مجموعة فرعية من هذه الإمكانات،
بما في ذلك عدم الإعلان عن أي منها. ومع ذلك، يجب تحديد ميزة BACKWARD_COMPATIBLE
دائمًا.
يتوفّر مستوى الأجهزة المتوافق مع الجهاز، بالإضافة إلى إمكانات Camera API2 المحدّدة التي يتوافق معها، كعلامات ميزات التالية للسماح لـ Google Play بتصفية تطبيقات كاميرا Camera API2.
android.hardware.camera.hardware_level.full
android.hardware.camera.capability.raw
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.manual_post_processing
متطلبات مجموعة أدوات اختبار التوافق (CTS)
يجب أن تجتاز الأجهزة التي تعمل بنظام التشغيل Android 5.0 والإصدارات الأحدث اختبارات الكاميرا API1 CTS والكاميرا API2 CTS وCTS Verifier.
بالنسبة إلى الأجهزة التي لا تتضمّن تنفيذ Camera HAL3.2 ولا يمكنها
إتاحة واجهات Camera API2 الكاملة، يجب أن تجتاز اختبارات Camera
API2 CTS. ومع ذلك، يعمل الجهاز في وضع Camera API2
LEGACY
(حيث يتم ربط طلبات البيانات من Camera API2 بشكل مفاهيمي
بطلبات البيانات من Camera API1) وبالتالي يتم تلقائيًا تخطّي أي اختبارات CTS لـ Camera API2 ذات الصلة بالميزات أو
الإمكانات التي تتجاوز Camera API1.
على الأجهزة القديمة، تستخدِم اختبارات Camera API2 CTS التي يتم إجراؤها واجهات وإمكانات Camera API1 المتاحة للجميع بدون أي متطلبات جديدة. إنّ الأخطاء التي يتم رصدها (والتي تؤدي إلى تعذّر اجتياز اختبارات التوافق لـ Camera API2) هي أخطاء موجودة حاليًا في Camera HAL الحالي على الجهاز، وبالتالي، سيتم رصدها من خلال تطبيقات Camera API1 الحالية. لا نتوقّع حدوث العديد من الأخطاء من هذا النوع (ومع ذلك، يجب إصلاح أي أخطاء من هذا النوع لاجتياز اختبارات CTS الخاصة بـ Camera API2).
متطلبات ميزة VTS
بالنسبة إلى الأجهزة التي تعمل بالإصدار 8.0 من نظام التشغيل Android والإصدارات الأحدث والتي يتم فيها تنفيذ عمليات HAL بشكلٍ مجمّع، يجب أن تجتاز اختبارات VTS في الكاميرا.
تحسين أمان إطار عمل الكاميرا
لتعزيز أمان إطار عمل الوسائط والكاميرا، ينقل نظام التشغيل Android 7.0 خدمة الكاميرا من mediaserver. بدءًا من الإصدار 8.0 من Android، يتم تشغيل كل Camera HAL مرتبط في عملية منفصلة عن خدمة الكاميرا. قد يحتاج المورّدون إلى إجراء تغييرات في طبقة HAL للكاميرا استنادًا إلى إصدارَي واجهة برمجة التطبيقات وHAL المستخدَمين. تتناول المقاطع التالية بالتفصيل التغييرات المعمارية في AP1 وAP2 لـ HAL1 وHAL3، بالإضافة إلى المتطلبات العامة.
تغييرات بنية API1
قد يفترض تسجيل الفيديو باستخدام واجهة برمجة التطبيقات 1 أنّ كاميرا وبرنامج ترميز الفيديو متوفّران في العملية نفسها. عند استخدام واجهة برمجة التطبيقات 1 في:
- HAL3، حيث يستخدم تطبيق الكاميرا BufferQueue لتمرير المخازن المؤقتة بين العمليات، لا يلزم تحديث المورّد.
- HAL1، الذي يتيح تمرير البيانات الوصفية في ذاكرة التخزين المؤقت للفيديو: على المورّدين
تحديث HAL لاستخدام
kMetadataBufferTypeNativeHandleSource
. (لم يعُد تطبيقkMetadataBufferTypeCameraSource
متوافقًا مع الإصدار 7.0 من نظام التشغيل Android).
التغييرات المعمارية لواجهة برمجة التطبيقات 2
بالنسبة إلى واجهة برمجة التطبيقات 2 على HAL1 أو HAL3، تُرسِل BufferQueue المخزن المؤقت كي تستمر هذه المسارات في العمل. بنية Android 7.0 لواجهة برمجة التطبيقات 2 على:
- لا يتأثر HAL1 بنقل خدمة الكاميرا، ولا يلزم أي تحديث من جانب المورّد.
- يتأثّر HAL3، ولكن لا يلزم إجراء تعديل لدى المورّد:
متطلبات إضافية
إنّ التغييرات المعمارية التي تم إجراؤها لتعزيز أمان إطار عمل الوسائط والكاميرا تشمل متطلبات الجهاز الإضافية التالية.
- الإعدادات العامة: تتطلّب الأجهزة معدل نقل بيانات إضافيًا بسبب تقنية IPC،
ما قد يؤثّر في حالات استخدام الكاميرا الحسّاسة للوقت، مثل تسجيل
الفيديو العالي السرعة. يمكن للمورّدين قياس التأثير الفعلي من خلال تشغيل
android.hardware.camera2.cts.PerformanceTest
وتطبيق Google Camera لتسجيل الفيديوهات بسرعة عالية بمعدّل 120/240 لقطة في الثانية. وتتطلّب الأجهزة أيضًا مساحة صغيرة من ذاكرة الوصول العشوائي (RAM) الإضافية لإنشاء العملية الجديدة. - تمرير البيانات الوصفية في التخزين المؤقت للفيديو (HAL1 فقط) إذا كان HAL1
يخزِّن البيانات الوصفية بدلاً من بيانات إطارات YUV الحقيقية في ذاكرات التخزين المؤقت للفيديو، يجب أن يستخدم HAL
kMetadataBufferTypeNativeHandleSource
كنوع ذاكرة التخزين المؤقت للبيانات الوصفية ويمرِّرVideoNativeHandleMetadata
في ذاكرات التخزين المؤقت للفيديو. (لم يعُد تطبيقkMetadataBufferTypeCameraSource
متاحًا على الإصدار 7.0 من نظام Android.) من خلالVideoNativeHandleMetadata
، يمكن لإطارات عمل الكاميرا والوسائط تمرير ذاكرة التخزين المؤقت للفيديو بين العمليات من خلال إنشاء تسلسل للمفاتيح الأصلية وإلغاء تسلسلها بشكل صحيح. - لا يخزِّن عنوان معرّف المخزن المؤقت دائمًا المخزن المؤقت نفسه (HAL3 فقط). لكل طلب التقاط، يحصل HAL3 على عناوين الأسماء المعرِّفة للمخزن الاحتياطي. لا يمكن لواجهة HAL استخدام العناوين لتحديد المخزن المؤقت لأنّ العناوين قد تخزِّن معرّف مخزن مؤقت آخر بعد أن تُرجع HAL المخزن المؤقت. يجب تعديل HAL لاستخدام عناصر تحكّم المخزن المؤقت لتحديد المخزن المؤقت. على سبيل المثال، يتلقّى HAL عنوان معرّف المخزن المؤقت "أ" الذي يخزّن معرّف المخزن المؤقت "أ". بعد أن يُرجع HAL معرّف التحكم في المخزن المؤقت (A)، قد يخزِّن عنوان معرّف التحكم في المخزن المؤقت (A) معرّف التحكم في المخزن المؤقت (B) في المرة التالية التي يتلقّى فيها HAL هذا المعرّف.
- تعديل سياسات SELinux لخدمة cameraserver إذا كانت سياسات SELinux الخاصة بالجهاز تمنح أذونات لخادم الوسائط لتشغيل الكاميرا، يجب تحديث سياسات SELinux لمنح الأذونات المناسبة لخادم الكاميرا. لا ننصح بتكرار تكرار سياسات SELinux لخادم الوسائط لخادم الكاميرا (لأنّ خادم الوسائط وخادم الكاميرا يتطلبان بشكل عام موارد مختلفة في النظام). يجب أن يكون لدى Cameraserver الأذونات اللازمة فقط لتنفيذ وظائف الكاميرا، ويجب إزالة أي أذونات غير ضرورية مرتبطة بالكاميرا في mediaserver.
- فصل بين Camera HAL وcameraserver يعمل الإصدار Android 8.0 والإصدارات الأحدث على فصل طبقة تجريد الأجهزة (HAL) للكاميرا في عملية مختلفة عن خادم الكاميرا. يتم نقل البيانات بين العمليات من خلال واجهات محددة باستخدام HIDL.
التحقُّق
بالنسبة إلى جميع الأجهزة التي تتضمّن كاميرا وتعمل بنظام التشغيل Android 7.0، عليك التحقّق من التنفيذ من خلال تشغيل اختبار CTS لنظام التشغيل Android 7.0. على الرغم من أنّ الإصدار 7.0 من نظام Android لا يتضمّن اختبارات CTS جديدة للتحقّق من التغييرات في خدمة الكاميرا، تُفشل اختبارات CTS الحالية إذا لم تكن قد أجريت التعديلات المذكورة أعلاه.
بالنسبة إلى جميع الأجهزة التي تتضمّن كاميرا وتعمل بالإصدار 8.0 من نظام التشغيل Android والإصدارات الأحدث، يجب التحقّق من تنفيذ المورّد من خلال تشغيل اختبار VTS.
سجلّ إصدارات Camera HAL
للحصول على قائمة بالاختبارات المتاحة لتقييم واجهة برمجة التطبيقات لكاميرا Android، يُرجى الاطّلاع على ملف قائمة التحقّق من اختبار واجهة برمجة التطبيقات لكاميرا Android.
Android 10
يقدّم نظام Android 10 التعديلات التالية.
Camera API
- تحسينات على استخدام كاميرات متعددة تتيح استخدام الكاميرات المادّية بشكل فردي أو من خلال الكاميرات المنطقية المقابلة لها عن طريق إخفاء معرّفات الكاميرات المادّية يُرجى الاطّلاع على التوافق مع الكاميرات المتعددة.
- إمكانية التحقّق مما إذا كان إعداد جلسة معيّن متوافقًا بدون النفقات العامة للأداء لإنشاء جلسة جديدة
يمكنك الاطّلاع على
CameraDevice
. - إمكانية استرداد إعدادات البث المقترَحة لاستخدام معيّن
لتحسين كفاءة الطاقة وأداء العميل يُرجى الاطّلاع على
getRecommendedStreamConfigurationMap
. - إتاحة استخدام تنسيق صور JPEG ذات التفاصيل العالية لمزيد من التفاصيل، يُرجى الاطّلاع على مواصفات "التفاصيل الديناميكية".
- دعم تنسيق HEIC Image. راجِع مقالة التقاط صور HEIF.
- تحسينات على الخصوصية يجب توفُّر مفاتيح معيّنة لكي يحصل العميل
على أذونات
CAMERA
قبل أن يتم استرجاعها منCameraCharacteristics
. يُرجى الاطّلاع علىgetKeysNeedingPermission
.
Camera HAL
تم تعديل إصدارات Camera HAL التالية في الإصدار 10 من نظام Android.
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics
: معلومات الكاميرا الثابتة لمعرّف كاميرا مادي يدعم جهاز كاميرا منطقي يُرجى الاطّلاع على إتاحة استخدام كاميرات متعددة. isStreamCombinationSupported
: تتيح هذه الطريقة استخدام واجهة برمجة تطبيقات عامة تساعد العملاء في الاستعلام عمّا إذا كان إعداد الجلسة متوافقًا. راجِع واجهة برمجة التطبيقات لطلب مجموعات مصادر البيانات.
ICameraDeviceSession
-
isReconfigurationNeeded
: طريقة تُعلم إطار عمل الكاميرا بما إذا كان يجب إعادة ضبط البث بالكامل لقيم مَعلمات الجلسة الجديدة المحتملة. ويساعد ذلك في تجنُّب التأخيرات غير الضرورية في إعادة ضبط الكاميرا. راجِع طلب إعادة ضبط الجلسة. - HAL
واجهات برمجة التطبيقات لإدارة المخزن المؤقت: تسمح واجهات برمجة التطبيقات هذه لحزمة HAL للكاميرا بطلب
المخزن المؤقت من إطار عمل الكاميرا فقط عند الحاجة بدلاً من ربط كل طلب
لالتقاط الصور بالمخازن المؤقتة المرتبطة به على طول مسار الكاميرا، مما يؤدي إلى توفير ذاكرة بشكل كبير.
-
signalStreamFlush
: إشارات إلى HAL بأنّ خدمة الكاميرا على وشك تنفيذconfigureStreams_3_5
وأنّه على HAL عرض جميع وحدات التخزين المؤقت للبثات المحدّدة -
configureStreams_3_5
: يشبهICameraDevice3.4.configureStreams
، ولكن بالإضافة إلى ذلك، يتم توفير مقياسstreamConfigCounter
للتحقّق من حالة تداخل بينconfigureStreams_3_5
وsignalStreamFlush
.
-
تعديلات على ICameraDeviceCallback
:
-
requestStreamBuffers
: طلب استدعاء متزامن يُجريه HAL للكاميرا لطلب ملف ذاكرة مؤقت من خادم الكاميرا يُرجى الاطّلاع علىrequestStreamBuffers
. -
returnStreamBuffers
: طلب استدعاء متزامن لواجهة HAL للكاميرا لإعادة وحدات تخزين مؤقت للإخراج إلى خادم الكاميرا يُرجى الاطّلاع علىreturnStreamBuffers
.
3.4
تتم إضافة المفاتيح التالية إلى البيانات الوصفية للكاميرا في Android 10.
- تنسيقات الصور
ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
ANDROID_SCALER_AVAILABLE_FORMATS_Y8
- علامات البيانات الوصفية للكاميرا
ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
ANDROID_HEIC_INFO_SUPPORTED
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
- الإمكانات
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
- قيم المفتاح
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
- إعدادات بث العمق الديناميكي المتاحة
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
- إعدادات بث HEIC المتاحة
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT
-
وحدة الكاميرا
تم تعديل إصدارات وحدات الكاميرا التالية في الإصدار Android 10.
2.5
- تُضيف هذه الطريقة للأجهزة إشعارًا
إلى HAL للكاميرا عندما تؤثر التغييرات المادية، مثل الطي، في الكاميرا
ومسار الإرسال.
notifyDeviceStateChange
2.4
- يجب أن تُبلغ الأجهزة التي تعمل بالمستوى 29 أو أعلى من واجهة برمجة التطبيقات عن
true
لـisTorchModeSupported
.
Android 9
يقدّم إصدار Android 9 التحديثات التالية على واجهة برمجة التطبيقات Camera2 API وواجهة HAL.
واجهة برمجة التطبيقات للكاميرا
- تقديم واجهة برمجة تطبيقات متعددة الكاميرات لدعم الأجهزة التي تتضمّن عدة كاميرات موجّهة في الاتجاه نفسه بشكل أفضل، ما يتيح ميزات مثل تأثير "موهبة التمويه" وzoom السلس يتيح ذلك للتطبيقات عرض كاميرات متعددة على جهاز واحد كوحدة منطقية واحدة (كاميرا منطقية). يمكن أيضًا إرسال طلبات الالتقاط إلى أجهزة كاميرا فردية ضمن كاميرا منطقية واحدة. يُرجى الاطّلاع على التوافق مع الكاميرات المتعددة.
- يعرّف هذا القسم على مَعلمات الجلسة. مَعلمات الجلسات هي مجموعة فرعية من مَعلمات الالتقاط المتاحة التي يمكن أن تتسبّب في تأخير كبير في المعالجة عند تعديلها. يمكن تقليل هذه التكاليف إذا أرسل العملاء قيمهم الأولية أثناء إعداد جلسة الالتقاط. اطّلِع على مَعلمات الجلسة.
- تُضيف مفاتيح بيانات التثبيت البصري (OIS) لتأثيرات التثبيت
على مستوى التطبيق. يمكنك الاطّلاع على
STATISTICS_OIS_SAMPLES
. - لإضافة دعم الفلاش الخارجي. يُرجى الاطّلاع على
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
. - تضيف هدف تتبُّع الحركة في
CAPTURE_INTENT
. يُرجى الاطّلاع علىCONTROL_CAPTURE_INTENT_MOTION_TRACKING
. - إيقاف
LENS_RADIAL_DISTORTION
نهائيًا وإضافةLENS_DISTORTION
بدلاً منه - إضافة أوضاع تصحيح التشوّه في
CaptureRequest
يُرجى الاطّلاع علىDISTORTION_CORRECTION_MODE
. - إتاحة استخدام كاميرات USB/UVC الخارجية على الأجهزة المتوافقة يُرجى الاطّلاع على
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
.
Camera HAL
3.4
تعديلات على ICameraDeviceSession
-
configureStreams_3_4
: لإضافة التوافق معsessionParameters
والكاميرات المنطقية -
processCaptureRequest_3_4
: تتيح هذه الميزة تضمين أرقام تعريف الكاميرات في بنية البث.
تعديلات على ICameraDeviceCallback
-
processCaptureResult_3_4
: تُضيف هذه القيمة البيانات الوصفية للكاميرا في نتائج الالتقاط.
3.3
تتم إضافة المفاتيح التالية إلى البيانات الوصفية للكاميرا في Android 9.
- الإمكانات
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
- علامات البيانات الوصفية للكاميرا
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
ANDROID_LENS_POSE_REFERENCE
-
ANDROID_LENS_DISTORTION
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
ANDROID_STATISTICS_OIS_DATA_MODE
ANDROID_STATISTICS_OIS_TIMESTAMPS
ANDROID_STATISTICS_OIS_X_SHIFTS
ANDROID_STATISTICS_OIS_Y_SHIFTS
Android 8.0
يقدّم الإصدار 8.0 من Android واجهة Treble. مع Treble، يجب أن تكون عمليات ربط واجهة HAL لكاميرا المورّد مرتبطة. يحتوي الإصدار Android 8.0 أيضًا على التحسينات الرئيسية التالية لخدمة الكاميرا:
- مساحات العرض المشترَكة: يمكنك تفعيل مساحات عرض متعدّدة تشترك في
OutputConfiguration
- واجهة برمجة تطبيقات النظام لأوضاع الكاميرا المخصَّصة
onCaptureQueueEmpty
يمكنك الاطّلاع على الأقسام أدناه للحصول على مزيد من المعلومات عن هذه الميزات.
مساحات العرض المشتركة
تتيح هذه الميزة مجموعة واحدة فقط من وحدات التخزين المؤقت لتشغيل مخرجتَين، مثل المعاينة وتشفير الفيديو، ما يقلل من استهلاك الطاقة والذاكرة. لتمكين هذه الميزة، على المصنّعين التأكّد من أنّ واجهة HAL للكاميرا وواجهة HAL لـ gralloc يمكنهما إنشاء مخازن مؤقتة لـ gralloc يستخدمها مستهلكون مختلفون (مثل أداة إنشاء المحتوى/وحدة معالجة الرسومات للأجهزة وبرنامج ترميز الفيديو)، بدلاً من مستخدِم واحد فقط. تمرر خدمة الكاميرا علامات استخدام المستهلك إلى طبقة تجريد الأجهزة (HAL) للكاميرا وHAL gralloc ؛ وتحتاج إلى تخصيص الأنواع الصحيحة من الموارد الاحتياطية أو أن طبقة تجريد الأجهزة (HAL) للكاميرا تعرض رسالة خطأ تفيد بأن هذه المجموعة من المستهلكين غير متوافقة.
اطّلِع على
enableSurfaceSharing
مستندات المطوّرين للحصول على تفاصيل إضافية.
واجهة برمجة تطبيقات النظام لأوضاع الكاميرا المخصَّصة
تحدِّد واجهة برمجة التطبيقات Camera API المتاحة للجميع وضعَي تشغيل: التسجيل العادي وتسجيل
بسرعة عالية مع قيود. ولديها دلالات مختلفة إلى حد ما؛ على سبيل المثال،
يقتصر الوضع عالي السرعة على مخرجين محددين على الأكثر في وقت واحد. أبدت عدة
شركات مصنّعة للأجهزة الأصلية اهتمامًا بتحديد أوضاع مخصّصة أخرى لتحديد
الإمكانات المتعلّقة بالأجهزة. من الناحية الفنية، الوضع هو مجرد عدد صحيح
يتم تمريره إلى configure_streams
. يمكنك الاطّلاع على:
hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
.
تتضمّن هذه الميزة طلبًا لواجهة برمجة تطبيقات النظام يمكن لتطبيقات كاميرا المصنّعين الأصليّين للأجهزة استخدامه لتفعيل أحد الأوضاع المخصّصة. يجب أن تبدأ هذه الأوضاع بقيمة عدد صحيح 0x8000 لتجنُّب التضارب مع إضافة الأوضاع المستقبلية إلى واجهة برمجة التطبيقات العامة.
لتفعيل هذه الميزة، ما على المصنّعين الأصليين للأجهزة سوى إضافة الوضع الجديد إلى HAL، والذي يتم تفعيله من خلال هذا العدد الصحيح الذي يتم تمريره إلى HAL في configure_streams، ثم السماح لتطبيق الكاميرا المخصّص باستخدام System API.
اسم الطريقة هو
android.hardware.camera2.CameraDevice#createCustomCaptureSession
.
يمكنك الاطّلاع على:
frameworks/base/core/java/android/hardware/camera2/CameraDevice
.
onCaptureQueueEmpty
يهدف هذا الإجراء إلى تقليل وقت الاستجابة لتغييرات عناصر التحكّم، مثل التكبير/التصغير، وذلك من خلال
إبقاء قائمة الطلبات فارغة قدر الإمكان. لا تتطلّب ميزة "onCaptureQueueEmpty
" أي عمل HAL، بل كانت مجرّد إضافة من جانب إطار العمل. ويجب أن تضيف التطبيقات التي تريد الاستفادة من هذه الميزة مستمعًا إلى دالة ردّ الاتصال هذه وتردّ عليه بشكلٍ مناسب. يكون هذا بشكل عام من خلال إرسال طلب التقاط آخر
إلى جهاز الكاميرا.
واجهة HIDL للكاميرا
واجهة Camera HIDL هي عملية إصلاح شاملة لواجهة Camera HAL التي تستخدم واجهات برمجة تطبيقات ثابتة محدّدة من خلال HIDL. إنّ جميع الميزات وإمكانات الكاميرا المُقدَّمة في أحدث الإصدارات القديمة 3.4 و2.4 (لوحدة الكاميرا) هي أيضًا جزء من تعريفات HIDL.
3.4
إضافات بسيطة إلى البيانات الوصفية المتوافقة وتغييرات على توافق data_space:
- أضِف البيانات الوصفية الثابتة
ANDROID_SENSOR_OPAQUE_RAW_SIZE
كبيانات إلزامية إذا كان تنسيقRAW_OPAQUE
متوافقًا. - أضِف
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
البيانات الوصفية الثابتة كبيانات مطلوبة إذا كان أي تنسيق RAW متوافقًا. - بدِّل حقل
camera3_stream_t data_space
إلى تعريف أكثر مرونة باستخدام تعريف الإصدار 0 لتشفير مساحة البيانات. - إضافات البيانات الوصفية العامة المتاحة للاستخدام مع HALv3.2 أو الإصدارات الأحدث:
-
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
ANDROID_SENSOR_OPAQUE_RAW_SIZE
ANDROID_SENSOR_OPTICAL_BLACK_REGIONS
-
3.3
مراجعة طفيفة لـ HAL ذو القدرة الموسّعة:
- تحديثات واجهة برمجة التطبيقات لإعادة معالجة OPAQUE وYUV
- دعم أساسي للمخازن الاحتياطية للمخرجات العميقة.
- إضافة حقل
data_space
إلىcamera3_stream_t
- إضافة حقل الالتفاف إلى
camera3_stream_t
- إضافة وضع تشغيل إعدادات بث الكاميرا 3 إلى
camera3_stream_configuration_t
.
3.2
مراجعة بسيطة لواجهة HAL ذات الإمكانات الموسّعة:
- إيقاف
get_metadata_vendor_tag_ops
استخدِمget_vendor_tag_ops
فيcamera_common.h
بدلاً من ذلك. - إيقاف
register_stream_buffers
قد تكون جميع وحدات تخزين gralloc التي يوفّرها إطار العمل إلى HAL فيprocess_capture_request
جديدة في أي وقت. - إضافة إمكانية عرض نتائج جزئية قد يتم
استدعاء
process_capture_result
عدة مرات باستخدام مجموعة فرعية من النتائج المتاحة قبل أن تصبح النتيجة الكاملة متاحة. - أضِف نموذجًا يدويًا إلى
camera3_request_template
. قد تستخدم التطبيقات هذا النموذج للتحكّم في إعدادات الالتقاط مباشرةً. - إعادة صياغة مواصفات بث الإدخال والبث الثنائي الاتجاه
- تغيير مسار الإرجاع لوحدة تخزين الإدخال يتم عرض المخزن المؤقت في
process_capture_result
بدلاً منprocess_capture_request
.
3.1
مراجعة بسيطة لواجهة HAL ذات الإمكانات الموسّعة:
configure_streams
تُرسِل علامات استخدام المستهلكين إلى HAL.- يمكنك إلغاء المكالمة لإلغاء جميع الطلبات/المخازن المؤقتة الجارية في أسرع وقت ممكن.
3
النسخة الأولى من HAL ذات الإمكانات الموسّعة:
- تغيير في الإصدار الرئيسي لأنّ ABI مختلف تمامًا لم يطرأ أي تغيير على إمكانات الأجهزة المطلوبة أو نموذج التشغيل مقارنةً بالإصدار 2.0.
- واجهات طلب الإدخال وقائمة انتظار البث التي تمت إعادة صياغتها: طلبات إطار العمل إلى HAL مع إزالة طلب ووسائط التخزين المؤقت التالية للبث من قائمة الانتظار يتوفّر دعم إطار عمل المزامنة ، وهو ضروري لتنفيذ عمليات فعالة.
- تم نقل العوامل المشغِّلة إلى الطلبات، ومعظم الإشعارات في النتائج.
- تم دمج جميع عمليات تسجيل الإحالات الناجحة في إطار العمل في بنية واحدة، وجميع
initialize()
methods في مكالمة واحدة. - تم دمج إعدادات البث في طلب واحد لتبسيط إدارة البث.
تستبدل مصادر البيانات الثنائية الاتجاه
STREAM_FROM_STREAM
البنية. - دلالات الوضع المحدود للأجهزة القديمة أو ذات الإمكانيات المحدودة
2.0
الإصدار الأولي من HAL المزوّد بإمكانيات موسّعة (Android 4.2) [camera2.h]:
- كافية لتنفيذ واجهة برمجة تطبيقات
android.hardware.Camera
الحالية. - تسمح بإعداد قائمة انتظار ZSL في طبقة خدمة الكاميرا.
- لم يتم اختبار أي ميزات جديدة، مثل التحكّم اليدوي في الالتقاط وتصوير ملف Bayer RAW وإعادة معالجة بيانات RAW وما إلى ذلك.
1
واجهة برمجة التطبيقات لكاميرا Android الأولية (Android 4.0) [camera.h]:
- تم تحويله من طبقة تجريد CameraHardwareInterface في C++.
- تتوافق مع واجهة برمجة التطبيقات
android.hardware.Camera
.
سجلّ تعديلات وحدة الكاميرا
يحتوي هذا القسم على معلومات حول إصدارات وحدة كاميرا الأجهزة
، استنادًا إلى camera_module_t.common.module_api_version
. يمثّل الرقمان الثنائيان المكوّنان من سته أحرف والذين يمثّلان أهم رقمين الرقمان الرئيسيان للإصدار، ويمثّل الرقمان الأقل أهمية الرقمان الثانويان للإصدار.
2.4
يضيف إصدار وحدة الكاميرا هذا التغييرات التالية على واجهة برمجة التطبيقات:
- التوافق مع "وضع الكشاف" يمكن للإطار العملي تفعيل وضع "مصباح يدوي" لأي
جهاز كاميرا مزوّد بوحدة فلاش، بدون فتح جهاز الكاميرا. يحظى جهاز
الكاميرا بأولوية أعلى في الوصول إلى وحدة الفلاش مقارنةً بوحدة
الكاميرا، ويؤدي فتح جهاز كاميرا إلى إيقاف ضوء المشعل إذا كان مفعَّلاً
من خلال واجهة الوحدة. عند حدوث أي تعارض في الموارد، مثل دعوة
open()
لفتح جهاز كاميرا، يجب أن تُعلم وحدة HAL للكاميرا الإطار من خلال طلب إعادة الاتصال بحالة وضع مصباح يدوي بأنّه تم إيقاف وضع مصباح يدوي. - إتاحة استخدام الكاميرا الخارجية (مثل كاميرا USB التي يتم توصيلها بالماء الساخن) وتحدّد تعديلات واجهة برمجة التطبيقات أنّ المعلومات الثابتة للكاميرا لا تتوفّر إلا عندما تكون الكاميرا
متصلة وجاهزة للاستخدام في كاميرات التوصيل السريع الخارجية. تُعدّ المكالمات التي يتم إجراؤها للحصول على معلومات
ثابتة مكالمات غير صالحة عندما لا تكون حالة الكاميرا
CAMERA_DEVICE_STATUS_PRESENT
. يعتمد إطار العمل فقط على callbacks لتغيير حالة الجهاز بهدف إدارة قائمة الكاميرات الخارجية المتاحة. - ملاحظات حول التحكيم في الكاميرا تتيح هذه الميزة الإشارة بشكل واضح إلى عدد أجهزة الكاميرات التي يمكن فتحها واستخدامها في الوقت نفسه. لتحديد مجموعات صالحة من الأجهزة، يجب دائمًا ضبط الحقلَين
resource_cost
وconflicting_devices
في بنيةcamera_info
التي يعرضها طلبget_camera_info
. - طريقة إعداد الوحدة: يتم استدعاء هذه الوظيفة من خلال خدمة الكاميرا بعد تحميل وحدة HAL للسماح ببدء تشغيل HAL لمرة واحدة. ويتم استدعاؤها قبل استدعاء أي طرق أخرى في الوحدة.
2.3
يضيف إصدار وحدة الكاميرا هذا إمكانية استخدام الأجهزة القديمة المفتوحة لطبقة HAL للكاميرا.
يمكن لإطار العمل استخدامه لفتح جهاز الكاميرا كجهاز HAL بإصدار منخفض من HAL،
إذا كان الجهاز نفسه يتيح عمل إصدارات متعددة من واجهة برمجة التطبيقات للأجهزة.
يستمر الاتصال المفتوح لوحدة الجهاز العادية
(common.methods->open
)
في فتح جهاز الكاميرا باستخدام أحدث إصدار متوافق، وهو
الإصدار المدرَج في camera_info_t.device_version
.
2.2
يضيف إصدار وحدة الكاميرا هذا التوافق مع علامة المورّد من خلال الوحدة،
ويوقِف نهائيًا vendor_tag_query_ops
القديم الذي لم يكن بالإمكان الوصول إليه
في السابق إلا من خلال جهاز مفتوح.
2.1
يضيف إصدار وحدة الكاميرا هذا إمكانية استخدام وظائف الاستدعاء غير المتزامنة في الإطار العملي من وحدة HAL للكاميرا، والتي تُستخدَم لإشعار الإطار العملي بالتغييرات في حالة وحدة الكاميرا. يجب أن تُبلغ الوحدات التي توفّر طريقة
set_callbacks()
صالحة عن رقم الإصدار هذا على الأقل.
2.0
تنفِّذ وحدات الكاميرا التي تبلغ عن رقم الإصدار هذا
الإصدار الثاني من واجهة HAL لوحدة الكاميرا. قد تتوافق أجهزة الكاميرات القابلة للفتح من خلال هذه الوحدة مع الإصدار 1.0 أو الإصدار 2.0 من واجهة HAL لجهاز الكاميرا. يكون الحقل device_version
في camera_info دائمًا
صالحًا، ويكون الحقل static_camera_characteristics
في
camera_info
صالحًا إذا كان الحقل device_version
2.0 أو إصدارًا أحدث.
1
تستخدم وحدات الكاميرا التي تسجّل أرقام الإصدارات هذه واجهة HAL
لوحدة الكاميرا الأولية. لا تتوافق جميع كاميرات الأجهزة التي يمكن فتحها من خلال هذه
الوحدة إلا مع الإصدار 1 من طبقة HAL لأجهزة الكاميرا. الحقلَان
device_version
وstatic_camera_characteristics
في camera_info
غير صالحَين. لا يمكن استخدام سوى واجهة برمجة التطبيقات android.hardware.Camera
في هذه الوحدة وأجهزتها.