توضّح هذه الصفحة تفاصيل الاختلافات بين الإصدارات في طبقات تجريد الأجهزة (HAL) وواجهات برمجة التطبيقات (API) والكاميرا واختبارات مجموعة أدوات اختبار التوافق (CTS) المرتبطة بها. ويشمل أيضًا العديد من التغييرات في البنية التي تم إجراؤها لتعزيز أمان إطار عمل الكاميرا في Android 7.0، والانتقال إلى Treble في Android 8.0، والتحديثات التي على المورّدين إجراؤها لتوفير هذه التغييرات في عمليات تنفيذ الكاميرا.
المصطلحات
تُستخدَم المصطلحات التالية في هذه الصفحة:
- Camera API1
- إطار عمل الكاميرا على مستوى التطبيق على الأجهزة التي تعمل بالإصدار 4.4 من نظام التشغيل Android والإصدارات الأقدم، والذي يتم عرضه
من خلال الفئة
android.hardware.Camera. - Camera API2
- إطار عمل الكاميرا على مستوى التطبيق على أجهزة Android 5.0 والإصدارات الأحدث، والذي يتم عرضه
من خلال حزمة
android.hardware.camera2. - Camera HAL
- طبقة وحدة الكاميرا التي يوفّرها مورّدو منظومة على رقاقة (SoC). تم إنشاء الأُطر العامة على مستوى التطبيق استنادًا إلى طبقة تجريد الأجهزة (HAL) للكاميرا.
- Camera HAL3.1
- إصدار طبقة تجريد الأجهزة (HAL) لجهاز الكاميرا الذي تم إصداره مع Android 4.4
- الإصدار 3.2 من طبقة تجريد الأجهزة للكاميرا
- إصدار طبقة تجريد الأجهزة (HAL) لجهاز الكاميرا الذي تم إصداره مع Android 5.0.
- مجموعة اختبار التوافق لواجهة برمجة التطبيقات Camera API1
- مجموعة من اختبارات CTS للكاميرا يتم تشغيلها فوق Camera API1.
- مجموعة اختبار التوافق لواجهة برمجة التطبيقات Camera API2
- مجموعة إضافية من اختبارات CTS للكاميرا يتم تنفيذها بالإضافة إلى Camera API2.
- الصوت عالي الطبقة
- يفصل هذا القسم بين تنفيذ المورّد (البرامج الخاصة بالجهاز والتي تعمل على مستوى أدنى والتي يكتبها مصنّعو شرائح السيليكون) وإطار عمل نظام التشغيل Android من خلال واجهة مورّد جديدة.
- HIDL
- لغة تعريف واجهة HAL تم تقديمها مع Treble وتُستخدَم لتحديد الواجهة بين طبقة تجريد الأجهزة (HAL) ومستخدميها.
- VTS تم طرح
- مجموعة اختبارات المورّدين مع مشروع Treble.
واجهات برمجة تطبيقات الكاميرا
يتضمّن نظام التشغيل Android واجهات برمجة التطبيقات التالية للكاميرا.
Camera API1
أوقف الإصدار 5.0 من نظام التشغيل Android نهائيًا واجهة برمجة التطبيقات Camera API1، وسيتم إيقافها تدريجيًا مع تركيز التطوير الجديد للمنصة على واجهة برمجة التطبيقات Camera API2. ومع ذلك، ستكون فترة الإيقاف التدريجي طويلة، وستظل إصدارات Android تتيح استخدام تطبيقات Camera API1 لبعض الوقت. على وجه التحديد، سيستمر توفير الدعم لما يلي:
- واجهات Camera API1 للتطبيقات يجب أن تعمل تطبيقات الكاميرا المستندة إلى Camera API1 بالطريقة نفسها التي تعمل بها على الأجهزة التي تعمل بإصدارات Android الأقدم.
- إصدارات طبقة تجريد الأجهزة (HAL) للكاميرا يتضمّن دعمًا لطبقة تجريد الأجهزة (HAL) للكاميرا 1.0.
Camera API2
يتيح إطار عمل Camera API2 للتطبيق إمكانية التحكّم في الكاميرا على مستوى أدنى، بما في ذلك عمليات نقل البيانات الفعّالة بدون نسخ للصور المتتالية أو البث، وعناصر التحكّم في كل إطار، مثل التعرّض للضوء، ومستوى الصوت، ومستويات توازن اللون الأبيض، وتحويل الألوان، وإزالة التشويش، والحدة، وغير ذلك. لمزيد من التفاصيل، شاهِد نظرة عامة على الفيديو في مؤتمر Google I/O.
يتضمّن الإصدار 5.0 من نظام التشغيل Android والإصدارات الأحدث واجهة برمجة التطبيقات Camera API2، ولكن قد لا تتوافق الأجهزة التي تعمل بالإصدار 5.0 من نظام التشغيل Android والإصدارات الأحدث مع جميع ميزات واجهة برمجة التطبيقات Camera API2. تعرض السمة android.info.supportedHardwareLevel التي يمكن للتطبيقات طلبها من خلال واجهات Camera API2 أحد مستويات التوافق التالية:
LEGACY: تعرض هذه الأجهزة إمكانات للتطبيقات من خلال واجهات Camera API2 التي تتضمّن الإمكانات نفسها تقريبًا التي يتم عرضها للتطبيقات من خلال واجهات Camera API1. تترجم رموز الأُطر القديمة بشكل مفاهيمي طلبات البيانات من واجهة برمجة التطبيقات Camera API2 إلى طلبات البيانات من واجهة برمجة التطبيقات Camera API1، ولا تتوافق الأجهزة القديمة مع ميزات واجهة برمجة التطبيقات Camera API2، مثل عناصر التحكّم في كل إطار.-
LIMITED: تتوافق هذه الأجهزة مع بعض إمكانات Camera API2 (وليس كلها)، ويجب أن تستخدم Camera HAL 3.2 أو إصدارًا أحدث. FULL: تتوافق هذه الأجهزة مع جميع الإمكانات الرئيسية في Camera API2، ويجب أن تستخدم Camera HAL 3.2 أو إصدارًا أحدث وAndroid 5.0 أو إصدارًا أحدث.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.fullandroid.hardware.camera.capability.rawandroid.hardware.camera.capability.manual_sensorandroid.hardware.camera.capability.manual_post_processing
متطلبات مجموعة أدوات اختبار التوافق (CTS)
يجب أن تجتاز الأجهزة التي تعمل بالإصدار 5.0 من نظام التشغيل Android والإصدارات الأحدث اختبارات الكاميرا في "مجموعة أدوات اختبار التوافق" (CTS) لواجهة برمجة التطبيقات 1 للكاميرا و"مجموعة أدوات اختبار التوافق" (CTS) لواجهة برمجة التطبيقات 2 للكاميرا و"أداة التحقّق من مجموعة أدوات اختبار التوافق" (CTS).
يجب أن تجتاز الأجهزة التي لا تتضمّن تنفيذًا لطبقة تجريد الأجهزة (HAL) 3.2 للكاميرا ولا يمكنها توفير واجهات Camera API2 الكاملة اختبارات CTS الخاصة بواجهة Camera API2. ومع ذلك، يعمل الجهاز في وضع Camera API2
LEGACY (الذي يتم فيه ربط طلبات البيانات من Camera API2 بشكل مفهومي
بطلبات البيانات من Camera API1)، لذا يتم تلقائيًا تخطّي أي اختبارات CTS متعلقة بواجهة Camera API2 وتتضمّن ميزات أو
إمكانات تتجاوز تلك المتوفّرة في Camera API1.
على الأجهزة القديمة، تستخدم اختبارات مجموعة أدوات اختبار التوافق (CTS) لواجهة برمجة التطبيقات Camera API2 واجهات وإمكانات واجهة برمجة التطبيقات Camera API1 العامة الحالية بدون أي متطلبات جديدة. إنّ الأخطاء التي يتم رصدها (والتي تؤدي إلى تعذُّر اجتياز مجموعة أدوات اختبار التوافق (CTS) لواجهة Camera API2) هي أخطاء موجودة في طبقة تجريد الأجهزة (HAL) الحالية للكاميرا على الجهاز، وبالتالي يمكن أن ترصدها تطبيقات Camera API1 الحالية. ولا نتوقّع حدوث العديد من الأخطاء من هذا النوع (ومع ذلك، يجب إصلاح أي أخطاء من هذا النوع لاجتياز اختبارات CTS لواجهة برمجة التطبيقات Camera API2).
متطلبات VTS
يجب أن تجتاز الأجهزة التي تعمل بالإصدار 8.0 من نظام التشغيل Android والإصدارات الأحدث مع عمليات تنفيذ HAL المستندة إلى Binder اختبارات VTS الخاصة بالكاميرا.
تعزيز أمان إطار عمل الكاميرا
لتعزيز أمان إطار عمل الوسائط والكاميرا، ينقل نظام التشغيل Android 7.0 خدمة الكاميرا خارج mediaserver. بدءًا من الإصدار 8.0 من نظام التشغيل Android، يتم تشغيل كل طبقة تجريد أجهزة (HAL) مرتبطة ببرنامج ربط في عملية منفصلة عن خدمة الكاميرا. قد يحتاج المورّدون إلى إجراء تغييرات في طبقة تجريد الأجهزة (HAL) للكاميرا استنادًا إلى إصدارات واجهة برمجة التطبيقات وطبقة HAL المستخدَمة. توضّح الأقسام التالية بالتفصيل التغييرات المعمارية في AP1 وAP2 لكل من HAL1 وHAL3، بالإضافة إلى المتطلبات العامة.
التغييرات المعمارية في API1
قد يفترض تسجيل الفيديو باستخدام واجهة برمجة التطبيقات API1 أنّ الكاميرا وبرنامج ترميز الفيديو يعملان في العملية نفسها. عند استخدام API1 على:
- في HAL3، حيث تستخدم خدمة الكاميرا BufferQueue لتمرير المخازن المؤقتة بين العمليات، لا يلزم إجراء أي تحديث من المورّد.

الشكل 1. حزمة الكاميرا والوسائط في Android 7.0 في واجهة برمجة التطبيقات API1 على HAL3
- يجب أن يتيح HAL1 تمرير البيانات الوصفية في مخازن الفيديو المؤقتة، وعلى المورّدين
تعديل HAL لاستخدام
kMetadataBufferTypeNativeHandleSource. (لم يعُد الرمزkMetadataBufferTypeCameraSourceمتاحًا في الإصدار 7.0 من نظام التشغيل Android.)
الشكل 2. حزمة الكاميرا والوسائط في الإصدار 7.0 من نظام التشغيل Android في واجهة برمجة التطبيقات 1 على طبقة تجريد الأجهزة 1
التغييرات المعمارية في API2
بالنسبة إلى واجهة برمجة التطبيقات API2 على HAL1 أو HAL3، يمرِّر BufferQueue المخازن المؤقتة حتى تظل هذه المسارات تعمل. بنية Android 7.0 لواجهة برمجة التطبيقات API2 على:
- لا يتأثر HAL1 بنقل خدمة الكاميرا، ولا يلزم إجراء أي تعديل من المورّد.
- تتأثر واجهة HAL3 بهذا التغيير، ولكن لا يلزم إجراء أي تعديل على المورّد:

الشكل 3. حزمة الكاميرا والوسائط في الإصدار 7.0 من نظام التشغيل Android في واجهة برمجة التطبيقات 2 على HAL3
متطلبات إضافية
تشمل التغييرات المعمارية التي تم إجراؤها لتعزيز أمان إطار عمل الوسائط والكاميرا متطلبات الأجهزة الإضافية التالية.
- أحكام عامة: تتطلّب الأجهزة معدل نقل بيانات إضافيًا بسبب عملية الاتصال بين العمليات (IPC)، ما قد يؤثّر في حالات استخدام الكاميرا التي تتطلّب سرعة عالية، مثل تسجيل الفيديو عالي السرعة. يمكن للمورّدين قياس التأثير الفعلي من خلال تشغيل
android.hardware.camera2.cts.PerformanceTestوتطبيق "كاميرا Google" لتسجيل فيديو عالي السرعة بمعدّل 120 أو 240 لقطة في الثانية. تتطلّب الأجهزة أيضًا مقدارًا صغيرًا من ذاكرة الوصول العشوائي الإضافية لإنشاء العملية الجديدة. - تمرير البيانات الوصفية في مخازن الفيديو المؤقتة (HAL1 فقط) إذا كان الإصدار 1 من طبقة تجريد الأجهزة (HAL) يخزّن البيانات الوصفية بدلاً من بيانات إطار YUV الحقيقية في مخازن الفيديو المؤقتة، يجب أن تستخدم طبقة HAL النوع
kMetadataBufferTypeNativeHandleSourceكمخزن مؤقت للبيانات الوصفية وأن تمرّرVideoNativeHandleMetadataفي مخازن الفيديو المؤقتة. (لم يعُدkMetadataBufferTypeCameraSourceمتاحًا على الإصدار 7.0 من نظام التشغيل Android.) باستخدامVideoNativeHandleMetadata، يمكن لأُطر عمل الكاميرا والوسائط تمرير مخازن الفيديو المؤقتة بين العمليات من خلال تسلسل المقابض الأصلية وإلغاء تسلسلها بشكل صحيح. - لا يخزّن عنوان معرّف المخزن المؤقت المخزن المؤقت نفسه دائمًا (الإصدار 3 من طبقة تجريد الأجهزة فقط). بالنسبة إلى كل طلب التقاط، يحصل HAL3 على عناوين مقابض المخزن المؤقت. لا يمكن لواجهة HAL استخدام العناوين لتحديد المخازن المؤقتة لأنّ العناوين قد تخزّن معرّف مخزن مؤقت آخر بعد أن تعرض واجهة HAL المخزن المؤقت. يجب تعديل طبقة HAL لاستخدام معرّفات المخزن المؤقت من أجل تحديد المخازن المؤقتة. على سبيل المثال، يتلقّى HAL عنوان معرّف المخزن المؤقت A، الذي يخزِّن المعرّف A. بعد أن تعرض طبقة HAL معرّف المخزن المؤقت A، قد يخزّن عنوان معرّف المخزن المؤقت A معرّف المخزن المؤقت B في المرة التالية التي تتلقّى فيها طبقة HAL معرّف المخزن المؤقت A.
- تعديل سياسات SELinux الخاصة بخادم الكاميرا إذا كانت سياسات SELinux الخاصة بالجهاز تمنح mediaserver أذونات لتشغيل الكاميرا، عليك تعديل سياسات SELinux لمنح cameraserver الأذونات المناسبة. ننصح بعدم تكرار سياسات SELinux الخاصة بـ mediaserver في cameraserver (لأنّ mediaserver وcameraserver تتطلّبان عادةً موارد مختلفة في النظام). يجب أن يمتلك CameraServer الأذونات اللازمة فقط لتنفيذ وظائف الكاميرا، ويجب إزالة أي أذونات غير ضرورية متعلقة بالكاميرا في mediaserver.
- الفصل بين Camera HAL وcameraserver بالإضافة إلى ذلك، يفصل نظام التشغيل Android 8.0 والإصدارات الأحدث Camera HAL المرتبط بـ Binder في عملية مختلفة عن عملية cameraserver. تتم معالجة عمليات الاتصال بين العمليات من خلال واجهات محدّدة في لغة تعريف واجهة HAL (HIDL).
التحقق من صحة البيانات
بالنسبة إلى جميع الأجهزة التي تتضمّن كاميرا وتعمل بالإصدار 7.0 من نظام التشغيل Android، تحقَّق من عملية التنفيذ من خلال تشغيل حزمة اختبار التوافق (CTS) لنظام التشغيل Android 7.0. على الرغم من أنّ الإصدار 7.0 من نظام Android لا يتضمّن اختبارات جديدة في مجموعة أدوات اختبار التوافق (CTS) للتحقّق من تغييرات خدمة الكاميرا، ستتعذّر اختبارات CTS الحالية إذا لم تُجرِ التحديثات الموضّحة أعلاه.
بالنسبة إلى جميع الأجهزة التي تتضمّن كاميرا وتعمل بالإصدار 8.0 من نظام التشغيل Android والإصدارات الأحدث، تحقَّق من تنفيذ المورّد من خلال تشغيل VTS.
سجلّ التعديلات لطبقة تجريد الأجهزة (HAL) للكاميرا
للحصول على قائمة بالاختبارات المتاحة لتقييم طبقة تجريد الأجهزة (HAL) الخاصة بالكاميرا في Android، يُرجى الاطّلاع على قائمة التحقّق من اختبار طبقة تجريد الأجهزة (HAL) الخاصة بالكاميرا.
Android 10
يتضمّن الإصدار 10 من نظام التشغيل Android التحديثات التالية.
Camera API
- تحسينات على ميزة الكاميرات المتعددة تتيح استخدام الكاميرات الفعلية بشكل فردي أو من خلال الكاميرات المنطقية المقابلة عن طريق إخفاء معرّفات الكاميرات الفعلية يُرجى الاطّلاع على دعم الكاميرات المتعددة.
- إمكانية التحقّق مما إذا كان إعداد جلسة معيّنًا متوافقًا بدون تكبُّد تكلفة الأداء المرتبطة بإنشاء جلسة جديدة
يمكنك الاطّلاع على
CameraDevice. - إمكانية استرداد إعدادات البث المقترَحة لحالة استخدام معيّنة لجعل التطبيق أكثر كفاءة في استهلاك الطاقة وأفضل أداءً يمكنك الاطّلاع على
getRecommendedStreamConfigurationMap. - إتاحة تنسيق صور JPEG للعمق لمزيد من التفاصيل، يُرجى الاطّلاع على مواصفات "العمق الديناميكي".
- إتاحة تنسيق صور HEIC راجِع مقالة التقاط صور HEIF.
- تحسينات على الخصوصية يجب توفُّر مفاتيح معيّنة لدى العميل حتى يحصل على أذونات
CAMERAقبل أن يتمكّن من استردادها منCameraCharacteristics. يمكنك الاطّلاع علىgetKeysNeedingPermission.
Camera HAL
تم تعديل إصدارات Camera HAL التالية في نظام التشغيل Android 10.
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics: تمثّل هذه السمة معلومات الكاميرا الثابتة لمعرّف كاميرا مادية يتيح استخدام جهاز كاميرا منطقية. يُرجى الاطّلاع على دعم الكاميرات المتعددة. isStreamCombinationSupported: تتيح هذه الطريقة استخدام واجهة برمجة تطبيقات عامة تساعد العملاء في الاستعلام عمّا إذا كان إعداد الجلسة متاحًا. اطّلِع على واجهة برمجة التطبيقات للاستعلام عن مجموعات البث.
ICameraDeviceSession
-
isReconfigurationNeeded: طريقة تحدّد لإطار عمل الكاميرا ما إذا كانت إعادة ضبط البث بالكامل مطلوبة من أجل قيم مَعلمات الجلسة الجديدة المحتملة. يساعد ذلك في تجنُّب التأخيرات غير الضرورية في إعادة ضبط إعدادات الكاميرا. راجِع طلب إعادة ضبط الجلسة. - واجهات برمجة التطبيقات الخاصة بإدارة المخزن المؤقت في طبقة تجريد الأجهزة (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_RAW10ANDROID_SCALER_AVAILABLE_FORMATS_RAW12ANDROID_SCALER_AVAILABLE_FORMATS_Y8
- علامات البيانات الوصفية للكاميرا
ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSIONANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONSANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAPANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSIONANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONSANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONSANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONSANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_IDANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONSANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONSANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONSANDROID_HEIC_INFO_SUPPORTEDANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
- الإمكانات
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
- قيم المفتاح
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENTANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONOANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
- إعدادات بث العمق الديناميكي المتوفّرة
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUTANDROID_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
- تضيف هذه السمة الطريقة
notifyDeviceStateChangeالتي تتيح للأجهزة إرسال إشعار إلى طبقة تجريد الأجهزة (HAL) الخاصة بالكاميرا عند حدوث تغييرات مادية، مثل الطي، تؤثر في الكاميرا والتوجيه.
2.4
- يجب أن تعرض الأجهزة التي تعمل بمستوى واجهة برمجة التطبيقات 29 أو أعلى القيمة
trueلـisTorchModeSupported.
Android 9
يتضمّن إصدار Android 9 التحديثات التالية على واجهة برمجة التطبيقات 2 للكاميرا وواجهة HAL.
Camera API
- تتيح واجهة برمجة التطبيقات للكاميرات المتعددة إمكانية استخدام الأجهزة التي تتضمّن كاميرات متعددة موجّهة في الاتجاه نفسه، ما يتيح استخدام ميزات مثل تأثير البوكيه والتكبير/التصغير السلس. يتيح ذلك للتطبيقات عرض عدة كاميرات على جهاز واحد كوحدة منطقية واحدة (كاميرا منطقية). يمكن أيضًا إرسال طلبات الالتقاط إلى أجهزة كاميرا فردية مضمّنة في كاميرا منطقية واحدة. يُرجى الاطّلاع على دعم الكاميرات المتعددة.
- تعرّف على مَعلمات الجلسات. معلَمات الجلسة هي مجموعة فرعية من معلَمات الالتقاط المتاحة التي يمكن أن تتسبّب في تأخيرات شديدة في المعالجة عند تعديلها. يمكن تخفيف هذه التكاليف إذا مرّر العملاء قيمهم الأولية أثناء عملية إعداد جلسة الالتقاط. راجِع مَعلمات الجلسة.
- تضيف هذه السمة مفاتيح بيانات التثبيت البصري للصور (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_CAMERAANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKINGANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
- علامات البيانات الوصفية للكاميرا
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDSANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPEANDROID_DISTORTION_CORRECTION_AVAILABLE_MODESANDROID_LENS_POSE_REFERENCE-
ANDROID_LENS_DISTORTION ANDROID_REQUEST_AVAILABLE_SESSION_KEYSANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYSANDROID_STATISTICS_OIS_DATA_MODEANDROID_STATISTICS_OIS_TIMESTAMPSANDROID_STATISTICS_OIS_X_SHIFTSANDROID_STATISTICS_OIS_Y_SHIFTS
Android 8.0
يتضمّن إصدار Android 8.0 بنية Treble. باستخدام Treble، يجب أن تكون عمليات تنفيذ Camera HAL الخاصة بالمورّد مرتبطة. يتضمّن نظام التشغيل Android 8.0 أيضًا التحسينات الرئيسية التالية على خدمة "الكاميرا":
- الأسطح المشترَكة: تفعيل أسطح متعدّدة تشترك في
OutputConfigurationنفسه - واجهة برمجة تطبيقات النظام لأوضاع الكاميرا المخصّصة
onCaptureQueueEmpty
يُرجى الاطّلاع على الأقسام أدناه لمعرفة المزيد من المعلومات عن هذه الميزات.
مساحات العرض المشترَكة
تتيح هذه الميزة استخدام مجموعة واحدة فقط من المخازن المؤقتة لتشغيل نتيجتَين، مثل المعاينة وتشفير الفيديو، ما يؤدي إلى خفض استهلاك الطاقة والذاكرة. لإتاحة هذه الميزة، على الشركات المصنّعة للأجهزة التأكّد من أنّ عمليات تنفيذ طبقة HAL للكاميرا وطبقة HAL لـ gralloc يمكنها إنشاء مخازن مؤقتة لـ gralloc تستخدمها جهات متعددة مختلفة (مثل أداة إنشاء الصور/وحدة معالجة الرسومات للأجهزة وبرنامج ترميز الفيديو)، بدلاً من جهة واحدة فقط. تمرّر خدمة الكاميرا علامات استخدام المستهلك إلى طبقة تجريد الأجهزة (HAL) الخاصة بالكاميرا وطبقة تجريد الأجهزة (HAL) الخاصة بـ gralloc، ويجب أن تعمل إما على تخصيص أنواع المخازن المؤقتة المناسبة، أو أن تعرض طبقة تجريد الأجهزة (HAL) الخاصة بالكاميرا خطأً يفيد بأنّ هذه المجموعة من المستهلكين غير متوافقة.
اطّلِع على
enableSurfaceSharing
مستندات المطوّرين للحصول على تفاصيل إضافية.
واجهة برمجة تطبيقات النظام لأوضاع الكاميرا المخصّصة
يحدّد واجهة برمجة التطبيقات العامة للكاميرا وضعَي تشغيل: التسجيل العادي والتسجيل السريع المحدود. تختلف دلالاتها إلى حد كبير، فعلى سبيل المثال، يقتصر وضع السرعة العالية على نتيجتَين محدّدتين في الوقت نفسه. أبدت العديد من الشركات المصنّعة للمعدات الأصلية اهتمامًا بتحديد أوضاع مخصّصة أخرى تتوافق مع إمكانات الأجهزة المحدّدة. في الخلفية، يكون الوضع مجرد عدد صحيح
يتم تمريره إلى configure_streams. يمكنك الاطّلاع على:
hardware/camera/device/3.2/ICameraDeviceSession#configurestreams.
تتضمّن هذه الميزة طلب بيانات من واجهة برمجة تطبيقات النظام يمكن لتطبيقات الكاميرا التابعة لمصنّعي المعدات الأصلية استخدامه لتفعيل وضع مخصّص. يجب أن تبدأ هذه الأوضاع بالقيمة الصحيحة 0x8000 لتجنُّب التعارض مع الأوضاع المستقبلية التي ستتم إضافتها إلى واجهة برمجة التطبيقات العامة.
ولتوفير هذه الميزة، ما على الشركات المصنّعة للأجهزة الأصلية سوى إضافة الوضع الجديد إلى طبقة تجريد الأجهزة (HAL)، ويتم تفعيل هذا الوضع من خلال العدد الصحيح الذي يتم تمريره إلى طبقة تجريد الأجهزة عند استدعاء configure_streams، ثم تطلب من تطبيق الكاميرا المخصّص استخدام واجهة برمجة التطبيقات الخاصة بالنظام.
اسم الطريقة هو
android.hardware.camera2.CameraDevice#createCustomCaptureSession.
يمكنك الاطّلاع على:
frameworks/base/core/java/android/hardware/camera2/CameraDevice.
onCaptureQueueEmpty
الغرض من واجهة برمجة التطبيقات هذه هو تقليل وقت الاستجابة للتغييرات في عناصر التحكّم، مثل التكبير/التصغير، من خلال إبقاء قائمة انتظار الطلبات فارغة قدر الإمكان. onCaptureQueueEmpty
لا يتطلّب أي عمل في طبقة تجريد الأجهزة (HAL)، بل كان مجرد إضافة من جهة إطار العمل. على التطبيقات التي تريد الاستفادة من هذه الميزة إضافة أداة معالجة إلى دالة رد الاتصال هذه والردّ بشكل مناسب. ويتم ذلك عادةً عن طريق إرسال طلب التقاط آخر إلى جهاز الكاميرا.
واجهة HIDL للكاميرا
واجهة Camera HIDL هي عملية إصلاح شامل لواجهة Camera HAL التي تستخدم واجهات برمجة تطبيقات ثابتة محدّدة في HIDL. تتضمّن تعريفات HIDL أيضًا جميع الميزات وإمكانات الكاميرا التي تم تقديمها في أحدث الإصدارات القديمة 3.4 و2.4 (لوحدة الكاميرا).
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_BOOSTANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGEANDROID_SENSOR_DYNAMIC_BLACK_LEVELANDROID_SENSOR_DYNAMIC_WHITE_LEVELANDROID_SENSOR_OPAQUE_RAW_SIZEANDROID_SENSOR_OPTICAL_BLACK_REGIONS
-
3.3
مراجعة ثانوية لطبقة تجريد الأجهزة (HAL) ذات الإمكانات الموسّعة:
- تعديلات على واجهة برمجة التطبيقات الخاصة بإعادة معالجة تنسيقات OPAQUE وYUV
- توفير دعم أساسي لمخازن الإخراج الخاصة بالعمق
- إضافة الحقل
data_spaceإلىcamera3_stream_t - إضافة حقل التدوير إلى
camera3_stream_t - إضافة وضع تشغيل عملية إعداد بث camera3 إلى
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. - يتم استدعاء الدالة flush لإيقاف جميع الطلبات/المخازن المؤقتة الجارية بأسرع ما يمكن.
3
المراجعة الأولى لطبقة تجريد الأجهزة (HAL) ذات الإمكانات الموسّعة:
- تغيير رقم الإصدار الرئيسي لأنّ واجهة التطبيق الثنائية (ABI) مختلفة تمامًا لم يطرأ أي تغيير على إمكانات الأجهزة المطلوبة أو نموذج التشغيل مقارنةً بالإصدار 2.0.
- تمت إعادة تصميم واجهات طلب الإدخال وقائمة انتظار البث: يتم استدعاء إطار العمل إلى طبقة تجريد الأجهزة (HAL) مع إلغاء وضع طلبات البث ومخازن البث في قائمة الانتظار. يتم تضمين إمكانية استخدام إطار عمل المزامنة، وهو أمر ضروري لتنفيذ عمليات الدمج بكفاءة.
- نقلنا المشغّلات إلى الطلبات، ومعظم الإشعارات إلى النتائج.
- تم دمج جميع عمليات معاودة الاتصال في إطار عمل في بنية واحدة، وجميع طرق الإعداد في عملية استدعاء
initialize()واحدة. - تم دمج إعدادات البث في طلب واحد لتبسيط إدارة البث.
تحلّ عمليات البث الثنائية الاتجاه محلّ البنية
STREAM_FROM_STREAM. - دلالات الوضع المحدود للأجهزة القديمة أو ذات الموارد المحدودة
2.0
الإصدار الأولي من طبقة HAL ذات الإمكانات الموسّعة (Android 4.2) [camera2.h]:
- كافٍ لتنفيذ واجهة برمجة التطبيقات الحالية
android.hardware.Camera - يسمح بوضع قائمة انتظار ZSL في طبقة خدمة الكاميرا.
- لم يتم اختبار أي ميزات جديدة، مثل التحكّم اليدوي في التقاط الصور، والتقاط صور بتنسيق Bayer RAW، وإعادة معالجة بيانات RAW، وما إلى ذلك.
1.0
إصدار HAL الأوّلي للكاميرا في Android (الإصدار 4.0) [camera.h]:
- تم تحويلها من طبقة تجريد CameraHardwareInterface في C++.
- يتوافق مع واجهة برمجة التطبيقات
android.hardware.Camera.
سجلّ تعديلات وحدة الكاميرا
يحتوي هذا القسم على معلومات حول إصدارات وحدة Camera hardware، استنادًا إلى camera_module_t.common.module_api_version. يمثّل رقما السداسي العشري الأكثر أهمية رقم الإصدار الرئيسي، ويمثّل رقما السداسي العشري الأقل أهمية رقم الإصدار الثانوي.
2.4
يضيف إصدار وحدة الكاميرا هذا تغييرات واجهة برمجة التطبيقات التالية:
- التوافق مع وضع المصباح اليدوي: يمكن للإطار تفعيل وضع المصباح لأي جهاز كاميرا مزوّد بفلاش، بدون فتح جهاز الكاميرا. يتمتع جهاز الكاميرا بأولوية أعلى في الوصول إلى وحدة الفلاش مقارنةً بوحدة الكاميرا، لذا يؤدي فتح جهاز الكاميرا إلى إيقاف المصباح اليدوي إذا كان مفعّلاً من خلال واجهة الوحدة. عند حدوث أي تعارضات في الموارد، مثل استدعاء
open()لفتح جهاز كاميرا، يجب أن تُعلم وحدة HAL الخاصة بالكاميرا إطار العمل من خلال معاودة الاتصال بحالة وضع المصباح اليدوي بأنّه تم إيقاف وضع المصباح اليدوي. - إتاحة استخدام كاميرا خارجية (مثل كاميرا USB قابلة للتوصيل والتشغيل) تحدّد تعديلات واجهة برمجة التطبيقات أنّ المعلومات الثابتة للكاميرا لا تتوفّر إلا عندما تكون الكاميرا متصلة وجاهزة للاستخدام مع الكاميرات الخارجية التي يمكن توصيلها وفصلها أثناء التشغيل. تكون طلبات الحصول على معلومات ثابتة غير صالحة عندما لا تكون حالة الكاميرا
CAMERA_DEVICE_STATUS_PRESENT. يعتمد إطار العمل بشكل أساسي على عمليات معاودة الاتصال عند تغيير حالة الجهاز لإدارة قائمة الكاميرات الخارجية المتاحة. - تلميحات حول تحديد الكاميرا تضيف هذه السمة إمكانية تحديد عدد أجهزة الكاميرا التي يمكن فتحها واستخدامها في الوقت نفسه. لتحديد مجموعات صالحة من الأجهزة، يجب دائمًا ضبط الحقلَين
resource_costوconflicting_devicesفي بنيةcamera_infoالتي تعرضها استدعاءاتget_camera_info. - طريقة تهيئة الوحدة يتم استدعاؤها من خلال خدمة الكاميرا بعد تحميل وحدة طبقة تجريد الأجهزة (HAL) للسماح بتهيئة طبقة تجريد الأجهزة لمرة واحدة. يتم استدعاؤها قبل استدعاء أي طرق أخرى للوحدة.
2.3
يضيف إصدار وحدة الكاميرا هذا إمكانية استخدام جهاز 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.0
تنفِّذ وحدات الكاميرا التي تعرض أرقام الإصدارات هذه واجهة HAL الأولية لوحدة الكاميرا. تتيح جميع أجهزة الكاميرا التي يمكن فتحها من خلال هذه الوحدة النمطية استخدام الإصدار 1 فقط من طبقة تجريد الأجهزة (HAL) الخاصة بجهاز الكاميرا. الحقلان
device_version وstatic_camera_characteristics
في camera_info غير صالحَين. يمكن لهذا النموذج وأجهزته استخدام واجهة برمجة التطبيقات android.hardware.Camera فقط.