توضّح هذه الصفحة بالتفصيل الاختلافات في الإصدارات في واجهات برمجة التطبيقات وواجهات HAL لكاميرا الهاتف واختبارات مجموعة أدوات اختبار التوافق (CTS) المرتبطة بها. ويتناول أيضًا العديد من التغييرات المعمارية التي تم إجراؤها لتعزيز إطار عمل الكاميرا وتأمينه في Android 7.0، والتبديل إلى Treble في Android 8.0، والتحديثات التي يجب أن يجريها المورّدون لسماح بهذه التغييرات في عمليات تنفيذ الكاميرا.
المصطلحات
يتم استخدام المصطلحات التالية في هذه الصفحة:
- Camera API1
- إطار عمل الكاميرا على مستوى التطبيق على أجهزة Android 4.4 والإصدارات الأقدم، والذي يتم عرضه
من خلال فئة
android.hardware.Camera
- Camera API2
- إطار عمل الكاميرا على مستوى التطبيق على أجهزة Android 5.0 والإصدارات الأحدث، المعروض
من خلال حزمة
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: يتضمّن هذا الإصدار إمكانية استخدام Camera HAL1.0.
Camera API2
يقدّم إطار عمل Camera API2 عناصر تحكّم من المستوى الأدنى في الكاميرا للتطبيق، بما في ذلك عمليات البث أو اللقطات السريعة الفعّالة بدون نسخ وعناصر التحكّم في كل إطار من حيث مستوى الإضاءة ودرجة التوسيع ودرجة توازن اللون الأبيض وتحويل الألوان وإزالة الضوضاء والتحسين وغيرها. لمعرفة التفاصيل، شاهِد الفيديو الذي يقدّم نظرة عامة على مؤتمر Google I/O.
يتضمّن الإصدار 5.0 من نظام التشغيل Android وإصداراته الأحدث واجهة برمجة التطبيقات Camera API2، ولكن قد لا تتوافق بعض ميزات Camera API2 مع الأجهزة التي تعمل بالإصدار
5.0 من نظام التشغيل Android والإصدارات الأحدث. تعرض سمة
android.info.supportedHardwareLevel
التي يمكن للتطبيقات الاستعلام عنها
من خلال واجهات Camera API2 أحد مستويات التوافق التالية:
LEGACY
: توفّر هذه الأجهزة للتطبيقات إمكانات مماثلة تقريبًا لتلك التي توفّرها لتطبيقات واجهة برمجة التطبيقات Camera API1 من خلال واجهة برمجة التطبيقات Camera API2. يُحوّل رمز إطارات العمل القديمة طلبات البيانات من 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.full
android.hardware.camera.capability.raw
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.manual_post_processing
متطلبات مجموعة أدوات اختبار التوافق (CTS)
يجب أن تجتاز الأجهزة التي تعمل بالإصدار 5.0 من نظام التشغيل Android والإصدارات الأحدث اختبارات CTS لـ Camera API1 وCamera API2 و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).
متطلبات أنظمة مراقبة الفيديو
على الأجهزة التي تعمل بالإصدار 8.0 من نظام التشغيل Android والإصدارات الأحدث التي تستخدم عمليات تنفيذ HAL المرتبطة بالربط اجتياز اختبارات فحص الأجهزة والبرامج (VTS) الخاصة بالكاميرا.
تحسين أمان إطار عمل الكاميرا
لتعزيز أمان إطار عمل الوسائط والكاميرا، ينقل نظام التشغيل Android 7.0 خدمة الكاميرا من mediaserver. بدءًا من الإصدار 8.0 من Android، يتم تشغيل كل Camera HAL مرتبط في عملية منفصلة عن خدمة الكاميرا. قد يحتاج المورّدون إلى إجراء تغييرات في طبقة HAL للكاميرا استنادًا إلى إصدارَي واجهة برمجة التطبيقات وHAL المستخدَمين. تتناول المقاطع التالية بالتفصيل التغييرات المعمارية في AP1 وAP2 لـ HAL1 وHAL3، بالإضافة إلى المتطلبات العامة.
التغييرات المعمارية لواجهة برمجة التطبيقات 1
قد يفترض تسجيل الفيديو باستخدام واجهة برمجة التطبيقات 1 أنّ كاميرا وبرنامج ترميز الفيديو متوفّران في العملية نفسها. عند استخدام واجهة برمجة التطبيقات 1 في:
- HAL3، حيث يستخدم تطبيق الكاميرا BufferQueue لتمرير المخازن المؤقتة بين العمليات، لا يلزم تحديث المورّد.
الشكل 1: مجموعة أدوات معالجة الكاميرا والوسائط في Android 7.0 في واجهة برمجة التطبيقات 1 على HAL3
- HAL1، الذي يتيح تمرير البيانات الوصفية في ذاكرة التخزين المؤقت للفيديو: على المورّدين
تعديل HAL لاستخدام
kMetadataBufferTypeNativeHandleSource
. (لم يعُد تطبيقkMetadataBufferTypeCameraSource
متوافقًا مع الإصدار 7.0 من نظام التشغيل Android.)الشكل 2: مجموعة أدوات معالجة الكاميرا والوسائط في الإصدار 7.0 من Android في API1 على HAL1
التغييرات المعمارية لواجهة برمجة التطبيقات 2
بالنسبة إلى واجهة برمجة التطبيقات 2 على HAL1 أو HAL3، تمرّ BufferQueue بالمخازن المؤقتة حتى تستمرّ هذه المسارات في العمل. بنية Android 7.0 لواجهة برمجة التطبيقات 2 على:
- لا يتأثّر HAL1 بنقل cameraservice، وليس هناك حاجة إلى تعديل المورّد.
- تتأثر HAL3، ولكن لا يلزم
إجراء تعديل من المورّد:
الشكل 3: مجموعة أدوات معالجة الكاميرا والوسائط في الإصدار 7.0 من Android في واجهة برمجة التطبيقات 2 على 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 في الإصدار 8.0 من نظام التشغيل Android والإصدارات الأحدث، يتم أيضًا فصل حزمة Camera HAL المُجمَّعة في عملية مختلفة عن cameraserver. يتم نقل البيانات بين العمليات من خلال واجهات محددة باستخدام HIDL.
التحقُّق
بالنسبة إلى جميع الأجهزة التي تتضمّن كاميرا وتعمل بنظام التشغيل Android 7.0، عليك التحقّق من التنفيذ من خلال تشغيل اختبار CTS لنظام التشغيل Android 7.0. على الرغم من أنّ الإصدار 7.0 من نظام Android لا يتضمّن اختبارات CTS جديدة للتحقّق من التغييرات في خدمة الكاميرا، لا تجتاز اختبارات CTS الحالية إذا لم تكن قد أجريت التعديلات المذكورة أعلاه.
بالنسبة إلى جميع الأجهزة التي تتضمّن كاميرا وتعمل بالإصدار 8.0 من نظام التشغيل Android والإصدارات الأحدث، يجب التحقّق من تنفيذ المورّد من خلال تشغيل اختبار الأمان للأجهزة الجوّالة.
سجلّ إصدارات Camera HAL
للحصول على قائمة بالاختبارات المتاحة لتقييم واجهة برمجة التطبيقات لكاميرا Android، يُرجى الاطّلاع على ملف قائمة التحقّق من اختبار واجهة برمجة التطبيقات لكاميرا Android.
Android 10
يقدّم نظام Android 10 التعديلات التالية.
Camera API
- تحسينات على ميزة "الكاميرات المتعدّدة" تتيح استخدام الكاميرات المادّية بشكلٍ فردي أو من خلال الكاميرات المنطقية المقابلة لها عن طريق إخفاء معرّفات الكاميرات المادّية يُرجى الاطّلاع على التوافق مع الكاميرات المتعددة.
- إمكانية التحقّق مما إذا كان إعداد جلسة معيّن
متوافقًا بدون التأثير في الأداء الناتج عن إنشاء جلسة جديدة
يُرجى الاطّلاع على
CameraDevice
. - إمكانية استرداد إعدادات البث المقترَحة لاستخدام معيّن
لتحسين كفاءة الطاقة وأداء العميل يُرجى الاطّلاع على
getRecommendedStreamConfigurationMap
. - إتاحة استخدام تنسيق صور JPEG ذات التفاصيل العالية لمزيد من التفاصيل، يُرجى الاطّلاع على مواصفات "التفاصيل الديناميكية".
- إتاحة استخدام تنسيق الصور HEIC راجِع مقالة التقاط صور 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.
Camera API
- تقديم واجهة برمجة تطبيقات الكاميرات المتعدّدة لدعم الأجهزة التي تتضمّن عدة كاميرات موجّهة في الاتجاه نفسه بشكل أفضل، ما يتيح استخدام ميزات مثل تأثير "موهبة التمويه" و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 لكاميرا المورّد مرتبطة. يتضمّن الإصدار 8.0 من Android أيضًا التحسينات الرئيسية التالية على خدمة "الكاميرا":
- مساحات العرض المشتركة: يمكنك تفعيل مساحات عرض متعدّدة تشترك في
OutputConfiguration
- System API لأوضاع الكاميرا المخصّصة
onCaptureQueueEmpty
يمكنك الاطّلاع على الأقسام أدناه للحصول على مزيد من المعلومات عن هذه الميزات.
مساحات العرض المشتركة
تتيح هذه الميزة مجموعة واحدة فقط من وحدات التخزين المؤقت لتشغيل مخرجتَين، مثل المعاينة وتشفير الفيديو، ما يقلل من استهلاك الطاقة والذاكرة. لتمكين هذه الميزة، على المصنّعين التأكّد من أنّ واجهة HAL للكاميرا وواجهة HAL لـ gralloc يمكنهما إنشاء مخازن gralloc التي يستخدمها مستهلكون مختلفون (مثل أداة إنشاء المحتوى/وحدة معالجة الرسومات للأجهزة وبرنامج ترميز الفيديو)، بدلاً من مستخدِم واحد فقط. تُرسِل خدمة الكاميرا علامات استخدام المستهلكين إلى واجهة HAL الخاصة بالكاميرا وواجهة HAL الخاصة بـ gralloc، ويجب أن تخصص كلتا الواجهات الأنواع المناسبة من وحدات التخزين المؤقت، أو يجب أن تعرِض واجهة HAL الخاصة بالكاميرا خطأً يشير إلى أنّ هذه المجموعة من المستهلكين غير متوافقة.
اطّلِع على
enableSurfaceSharing
مستندات المطوّرين للحصول على تفاصيل إضافية.
System API لأوضاع الكاميرا المخصّصة
تحدِّد واجهة برمجة التطبيقات 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، بل هي إضافة من جانب إطار العمل فقط. ويجب أن تضيف التطبيقات التي تريد الاستفادة من هذه الميزة مستمعًا إلى دالة ردّ الاتصال هذه وتردّ عليها بشكلٍ مناسب. ويتم ذلك بشكل عام من خلال إرسال طلب التقاط آخر إلى كاميرا
الجهاز.
واجهة Camera 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
- السماح بإنشاء قائمة انتظار للصور ذات الإضاءة المنخفضة في طبقة خدمة الكاميرا
- لم يتم اختبار أي ميزات جديدة، مثل التحكّم اليدوي في الالتقاط وتصوير ملف 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 التي يمكن توصيلها بالجهاز أثناء تشغيله) تُحدِّد تعديلات واجهة برمجة التطبيقات
أنّ المعلومات الثابتة للكاميرا لا تتوفّر إلا عندما تكون الكامير
متصلة وجاهزة للاستخدام مع الكاميرات الخارجية التي يمكن توصيلها بالجهاز مباشرةً. تكون المكالمات للحصول على معلومات static
غير صالحة عندما لا تكون حالة الكاميرا
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
فقط.