تعرض هذه الصفحة تفاصيل اختلافات الإصدار في طبقات HAL للكاميرا، وواجهات برمجة التطبيقات، واختبارات مجموعة اختبار التوافق (CTS) المرتبطة بها. ويغطي أيضًا العديد من التغييرات الهيكلية التي تم إجراؤها لتقوية وتأمين إطار عمل الكاميرا في Android 7.0، والتحول إلى Treble في Android 8.0، والتحديثات التي يجب على البائعين إجراؤها لدعم هذه التغييرات في تطبيقات الكاميرا الخاصة بهم.
المصطلح
يتم استخدام المصطلحات التالية في هذه الصفحة:
- واجهة برمجة تطبيقات الكاميرا1
- إطار عمل الكاميرا على مستوى التطبيق على الأجهزة التي تعمل بنظام التشغيل Android 4.4 والإصدارات الأقدم، والذي يتم عرضه من خلال فئة
android.hardware.Camera
. - واجهة برمجة تطبيقات الكاميرا 2
- إطار عمل الكاميرا على مستوى التطبيق على الأجهزة التي تعمل بنظام التشغيل Android 5.0 والإصدارات الأحدث، والذي تم عرضه من خلال الحزمة
android.hardware.camera2
. - كاميرا هال
- طبقة وحدة الكاميرا التي ينفذها بائعو SoC. تم إنشاء الأطر العامة على مستوى التطبيق أعلى الكاميرا HAL.
- كاميرا هال3.1
- تم إصدار إصدار جهاز الكاميرا HAL بنظام Android 4.4.
- كاميرا هال3.2
- تم إصدار إصدار جهاز الكاميرا HAL بنظام Android 5.0.
- كاميرا API1 CTS
- مجموعة من اختبارات CTS للكاميرا التي يتم تشغيلها أعلى Camera API1.
- كاميرا API2 CTS
- مجموعة إضافية من اختبارات CTS للكاميرا التي يتم تشغيلها أعلى Camera API2.
- ثلاثة أضعاف
- يفصل تنفيذ البائع (البرامج ذات المستوى الأدنى الخاصة بالجهاز والتي كتبتها الشركات المصنعة للسيليكون) عن إطار عمل نظام التشغيل Android من خلال واجهة بائع جديدة.
- هيدل
- لغة تعريف واجهة HAL المقدمة مع Treble وتستخدم لتحديد الواجهة بين HAL ومستخدميه.
- VTS
- تم تقديم مجموعة اختبار البائع جنبًا إلى جنب مع Treble.
واجهات برمجة تطبيقات الكاميرا
يتضمن Android واجهات برمجة تطبيقات الكاميرا التالية.
واجهة برمجة تطبيقات الكاميرا1
قام Android 5.0 بإهمال Camera API1، والذي يستمر في التخلص التدريجي حيث يركز تطوير النظام الأساسي الجديد على Camera API2. ومع ذلك، ستكون فترة الإلغاء التدريجي طويلة، وستستمر إصدارات Android في دعم تطبيقات Camera API1 لبعض الوقت. وعلى وجه التحديد، يستمر الدعم لما يلي:
- واجهات الكاميرا API1 للتطبيقات. يجب أن تعمل تطبيقات الكاميرا المبنية على Camera API1 بنفس الطريقة التي تعمل بها على الأجهزة التي تعمل بإصدارات أقل من Android.
- إصدارات الكاميرا HAL. يتضمن دعمًا للكاميرا HAL1.0.
واجهة برمجة تطبيقات الكاميرا 2
يعرض إطار عمل Camera API2 التحكم في الكاميرا ذي المستوى الأدنى للتطبيق، بما في ذلك التدفقات المتتابعة/التدفقية ذات النسخة الصفرية الفعالة وعناصر التحكم لكل إطار في التعرض، والكسب، ومكاسب توازن اللون الأبيض، وتحويل الألوان، وتقليل الضوضاء، والحدة، والمزيد. للحصول على التفاصيل، شاهد نظرة عامة على فيديو Google I/O .
يتضمن Android 5.0 والإصدارات الأحدث Camera API2؛ ومع ذلك، فإن الأجهزة التي تعمل بنظام التشغيل Android 5.0 والإصدارات الأحدث قد لا تدعم جميع ميزات 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.full
-
android.hardware.camera.capability.raw
-
android.hardware.camera.capability.manual_sensor
-
android.hardware.camera.capability.manual_post_processing
متطلبات سي تي إس
يجب على الأجهزة التي تعمل بنظام التشغيل Android 5.0 والإصدارات الأحدث اجتياز اختبارات الكاميرا Camera API1 CTS وCamera API2 CTS وCTS Verifier.
الأجهزة التي لا تحتوي على تطبيق Camera HAL3.2 وغير قادرة على دعم واجهات Camera API2 الكاملة، يجب أن تجتاز اختبارات Camera API2 CTS. ومع ذلك، يعمل الجهاز في وضع Camera API2 LEGACY
(حيث يتم تعيين استدعاءات Camera API2 بشكل مفاهيمي لاستدعاءات Camera API1) لذلك يتم تخطي أي اختبارات Camera API2 CTS المتعلقة بالميزات أو الإمكانيات التي تتجاوز Camera API1 تلقائيًا.
على الأجهزة القديمة، تستخدم اختبارات Camera API2 CTS التي يتم تشغيلها واجهات وقدرات Camera API1 العامة الحالية دون أي متطلبات جديدة. الأخطاء التي تم كشفها (والتي تتسبب في فشل Camera API2 CTS) هي أخطاء موجودة بالفعل في Camera HAL الموجودة بالجهاز، وبالتالي يمكن العثور عليها من خلال تطبيقات Camera API1 الحالية. لا نتوقع وجود العديد من الأخطاء من هذا النوع (ومع ذلك، يجب إصلاح أي أخطاء من هذا القبيل لاجتياز اختبارات Camera API2 CTS).
متطلبات VTS
يجب على الأجهزة التي تعمل بنظام التشغيل Android 8.0 والإصدارات الأحدث مع تطبيقات HAL الموثقة اجتياز اختبارات Camera VTS .
تصلب إطار الكاميرا
لتعزيز أمان الوسائط وإطار عمل الكاميرا، يقوم Android 7.0 بنقل خدمة الكاميرا خارج خادم الوسائط. بدءًا من Android 8.0، يتم تشغيل كل كاميرا HAL في عملية منفصلة عن خدمة الكاميرا. قد يحتاج البائعون إلى إجراء تغييرات في HAL للكاميرا اعتمادًا على إصدارات API وHAL المستخدمة. توضح الأقسام التالية تفاصيل التغييرات المعمارية في AP1 وAP2 لـ HAL1 وHAL3، بالإضافة إلى المتطلبات العامة.
التغييرات المعمارية لAPI1
قد يفترض تسجيل فيديو API1 أن الكاميرا وبرنامج تشفير الفيديو يعملان في نفس العملية. عند استخدام API1 على:
- HAL3، حيث تستخدم خدمة الكاميرا BufferQueue لتمرير المخازن المؤقتة بين العمليات، ولا يلزم تحديث البائع .
- HAL1، الذي يدعم تمرير بيانات التعريف في مخازن الفيديو المؤقتة، يجب على البائعين تحديث HAL لاستخدام
kMetadataBufferTypeNativeHandleSource
. (لم يعدkMetadataBufferTypeCameraSource
مدعومًا في Android 7.0.)
التغييرات المعمارية لAPI2
بالنسبة لواجهة برمجة التطبيقات (API2) على HAL1 أو HAL3، يقوم BufferQueue بتمرير المخازن المؤقتة بحيث تستمر هذه المسارات في العمل. بنية Android 7.0 لـ API2 على:
- لا يتأثر HAL1 بنقل خدمة الكاميرا، ولا يلزم تحديث البائع .
- يتأثر HAL3، ولكن لا يلزم تحديث البائع :
متطلبات إضافية
تتضمن التغييرات الهيكلية التي تم إجراؤها لتعزيز أمان الوسائط وإطار الكاميرا متطلبات الجهاز الإضافية التالية.
- عام. تتطلب الأجهزة نطاقًا تردديًا إضافيًا بسبب تقنية IPC، مما قد يؤثر على حالات استخدام الكاميرا الحساسة للوقت مثل تسجيل الفيديو عالي السرعة. يمكن للبائعين قياس التأثير الفعلي عن طريق تشغيل
android.hardware.camera2.cts.PerformanceTest
وتطبيق Google Camera لتسجيل فيديو عالي السرعة بمعدل 120/240 إطارًا في الثانية. تتطلب الأجهزة أيضًا كمية صغيرة من ذاكرة الوصول العشوائي الإضافية لإنشاء العملية الجديدة. - تمرير بيانات التعريف في مخازن الفيديو المؤقتة ( HAL1 فقط ). إذا قام HAL1 بتخزين بيانات التعريف بدلاً من بيانات إطار YUV الحقيقية في مخازن الفيديو المؤقتة، فيجب أن يستخدم HAL
kMetadataBufferTypeNativeHandleSource
كنوع المخزن المؤقت لبيانات التعريف وتمريرVideoNativeHandleMetadata
في مخازن الفيديو المؤقتة. (لم يعدkMetadataBufferTypeCameraSource
مدعومًا على Android 7.0.) باستخدامVideoNativeHandleMetadata
، تستطيع أطر عمل الكاميرا والوسائط تمرير مخازن الفيديو المؤقتة بين العمليات عن طريق إجراء تسلسل وإلغاء تسلسل المقابض الأصلية بشكل صحيح. - لا يقوم عنوان مقبض المخزن المؤقت دائمًا بتخزين نفس المخزن المؤقت ( HAL3 فقط ). لكل طلب التقاط، يحصل HAL3 على عناوين مقابض المخزن المؤقت. لا يمكن لـ HAL استخدام العناوين لتعريف المخازن المؤقتة لأن العناوين قد تخزن مؤشر مخزن مؤقت آخر بعد إرجاع HAL للمخزن المؤقت. يجب عليك تحديث HAL لاستخدام مقابض المخزن المؤقت لتعريف المخازن المؤقتة. على سبيل المثال، يتلقى HAL عنوان مقبض المخزن المؤقت A، الذي يخزن مقبض المخزن المؤقت A. بعد أن تقوم HAL بإرجاع مقبض المخزن المؤقت A، قد يقوم عنوان مقبض المخزن المؤقت A بتخزين مقبض المخزن المؤقت B في المرة التالية التي يتلقاها HAL.
- قم بتحديث سياسات SELinux لخادم الكاميرا. إذا كانت سياسات SELinux الخاصة بالجهاز تمنح أذونات خادم الوسائط لتشغيل الكاميرا، فيجب عليك تحديث سياسات SELinux لمنح خادم الكاميرا الأذونات المناسبة. نحن لا نشجع على تكرار سياسات SELinux الخاصة بخادم الوسائط لخادم الكاميرا (حيث يتطلب خادم الوسائط وخادم الكاميرا عمومًا موارد مختلفة في النظام). يجب أن يكون لدى Cameraserver الأذونات اللازمة فقط لأداء وظائف الكاميرا ويجب إزالة أي أذونات غير ضرورية متعلقة بالكاميرا في mediaserver.
- الفصل بين Camera HAL وcameraserver. يعمل نظام التشغيل Android 8.0 والإصدارات الأحدث أيضًا على فصل Camera HAL الموثق في عملية مختلفة عن خادم الكاميرا. يمر IPC عبر واجهات محددة بواسطة HIDL .
تصديق
بالنسبة لجميع الأجهزة التي تتضمن كاميرا وتعمل بنظام Android 7.0، تحقق من التنفيذ عن طريق تشغيل Android 7.0 CTS. على الرغم من أن Android 7.0 لا يتضمن اختبارات CTS جديدة تتحقق من تغييرات خدمة الكاميرا، إلا أن اختبارات CTS الحالية تفشل إذا لم تقم بإجراء التحديثات المشار إليها أعلاه.
بالنسبة لجميع الأجهزة التي تتضمن كاميرا وتعمل بنظام التشغيل Android 8.0 والإصدارات الأحدث، تحقق من تنفيذ البائع عن طريق تشغيل VTS.
سجل إصدار الكاميرا HAL
للحصول على قائمة بالاختبارات المتاحة لتقييم Android Camera HAL، راجع قائمة التحقق من اختبار Camera HAL .
أندرويد 10
يقدم Android 10 التحديثات التالية.
واجهة برمجة تطبيقات الكاميرا
- تحسينات متعددة الكاميرات تسمح باستخدام الكاميرات الفعلية بشكل فردي أو من خلال الكاميرات المنطقية المقابلة عن طريق إخفاء معرفات الكاميرا الفعلية. راجع دعم الكاميرات المتعددة .
- القدرة على التحقق مما إذا كان تكوين جلسة معينة مدعومًا دون تحمل الأداء الزائد لإنشاء جلسة جديدة. انظر
CameraDevice
. - القدرة على استرداد تكوينات الدفق الموصى بها لحالة استخدام معينة لجعل العميل أكثر كفاءة في استخدام الطاقة وأداءً. راجع
getRecommendedStreamConfigurationMap
. - دعم عمق تنسيق صورة JPEG . لمزيد من التفاصيل، راجع مواصفات العمق الديناميكي .
- دعم تنسيق صورة HEIC . انظر تصوير HEIF .
- تحسينات الخصوصية. يلزم وجود مفاتيح معينة حتى يحصل العميل على أذونات
CAMERA
قبل أن يتم استردادها منCameraCharacteristics
. راجعgetKeysNeedingPermission
.
كاميرا هال
يتم تحديث إصدارات Camera HAL التالية في Android 10.
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics
: معلومات الكاميرا الثابتة لمعرف الكاميرا الفعلي الذي يدعم جهاز الكاميرا المنطقي. راجع دعم الكاميرات المتعددة . -
isStreamCombinationSupported
: تدعم هذه الطريقة واجهة برمجة التطبيقات العامة التي تساعد العملاء في الاستعلام عما إذا كان تكوين الجلسة مدعومًا. راجع واجهة برمجة التطبيقات (API) للاستعلام عن مجموعات الدفق .
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
- يضيف طريقة
notifyDeviceStateChange
للأجهزة لإعلام HAL للكاميرا عندما تؤثر التغييرات المادية، مثل الطي، على الكاميرا والتوجيه.
2.4
- يجب أن تبلغ الأجهزة التي يتم تشغيلها بمستوى API 29 أو أعلى عن
true
isTorchModeSupported
.
أندرويد 9
يقدم إصدار Android 9 التحديثات التالية لواجهة API2 وHAL للكاميرا.
واجهة برمجة تطبيقات الكاميرا
- يقدم واجهة برمجة التطبيقات للكاميرات المتعددة لتقديم دعم أفضل للأجهزة ذات الكاميرات المتعددة التي تواجه نفس الاتجاه، مما يتيح ميزات مثل البوكيه والتكبير السلس. يتيح ذلك للتطبيقات عرض كاميرات متعددة على الجهاز كوحدة منطقية واحدة (الكاميرا المنطقية). يمكن أيضًا إرسال طلبات الالتقاط إلى أجهزة الكاميرا الفردية التي تشملها كاميرا منطقية واحدة. راجع دعم الكاميرات المتعددة .
- يقدم معلمات الجلسة. معلمات الجلسة هي مجموعة فرعية من معلمات الالتقاط المتوفرة والتي يمكن أن تسبب تأخيرات شديدة في المعالجة عند تعديلها. يمكن تخفيف هذه التكاليف إذا قام العملاء بتمرير قيمهم الأولية أثناء تهيئة جلسة الالتقاط. راجع معلمات الجلسة .
- يضيف مفاتيح بيانات التثبيت البصري (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
.
كاميرا هال
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
-
أندرويد 8.0
يقدم إصدار Android 8.0 نظام Treble. باستخدام Treble، يجب ربط تطبيقات Camera HAL الخاصة بالمورد. يحتوي Android 8.0 أيضًا على هذه التحسينات الأساسية لخدمة الكاميرا:
- الأسطح المشتركة: تمكين أسطح متعددة تتشارك في نفس
OutputConfiguration
- واجهة برمجة تطبيقات النظام لأوضاع الكاميرا المخصصة
-
onCaptureQueueEmpty
راجع الأقسام أدناه للحصول على مزيد من المعلومات حول هذه الميزات.
الأسطح المشتركة
تعمل هذه الميزة على تمكين مجموعة واحدة فقط من المخازن المؤقتة لتشغيل مخرجين، مثل المعاينة وترميز الفيديو، مما يقلل من استهلاك الطاقة والذاكرة. لدعم هذه الميزة، تحتاج الشركات المصنعة للأجهزة إلى التأكد من أن تطبيقات HAL وGralloc HAL الخاصة بالكاميرا يمكنها إنشاء مخازن مؤقتة لـ gralloc يستخدمها العديد من المستهلكين المختلفين (مثل مؤلف الأجهزة/وحدة معالجة الرسومات ومشفر الفيديو)، بدلاً من مستهلك واحد فقط. تقوم خدمة الكاميرا بتمرير إشارات استخدام المستهلك إلى الكاميرا HAL وGralloc HAL؛ يحتاجون إما إلى تخصيص الأنواع الصحيحة من المخازن المؤقتة، أو تحتاج الكاميرا HAL إلى إرجاع خطأ مفاده أن هذه المجموعة من المستهلكين غير مدعومة.
راجع وثائق مطور enableSurfaceSharing
للحصول على تفاصيل إضافية.
واجهة برمجة تطبيقات النظام لأوضاع الكاميرا المخصصة
تحدد واجهة برمجة تطبيقات الكاميرا العامة وضعي تشغيل: التسجيل عالي السرعة العادي والمقيد. لديهم دلالات مختلفة إلى حد ما. على سبيل المثال، يقتصر الوضع عالي السرعة على مخرجين محددين على الأكثر في وقت واحد. أعرب العديد من مصنعي المعدات الأصلية عن اهتمامهم بتحديد أوضاع مخصصة أخرى للإمكانيات الخاصة بالأجهزة. تحت الغطاء، الوضع هو مجرد عدد صحيح تم تمريره إلى configure_streams
. راجع: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
.
تتضمن هذه الميزة استدعاء واجهة برمجة تطبيقات النظام التي يمكن لتطبيقات كاميرا OEM استخدامها لتمكين الوضع المخصص. يجب أن تبدأ هذه الأوضاع بقيمة عددية 0x8000 لتجنب التعارض مع الأوضاع المستقبلية المضافة إلى واجهة برمجة التطبيقات العامة.
لدعم هذه الميزة، يحتاج مصنعو المعدات الأصلية فقط إلى إضافة الوضع الجديد إلى طبقة HAL الخاصة بهم، والذي يتم تشغيله بواسطة هذا العدد الصحيح الذي تم تمريره إلى طبقة HAL فيconfig_streams، ثم جعل تطبيق الكاميرا المخصص الخاص بهم يستخدم واجهة برمجة تطبيقات النظام.
اسم الطريقة هو 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.0
المراجعة الأولى للقدرة الموسعة HAL:
- تغيير الإصدار الرئيسي نظرًا لأن ABI مختلف تمامًا. لا يوجد تغيير في قدرات الأجهزة المطلوبة أو النموذج التشغيلي من 2.0.
- إعادة صياغة واجهات طلب الإدخال وقائمة انتظار الدفق: استدعاءات الإطار إلى HAL مع إلغاء الطلب التالي والمخازن المؤقتة للدفق بالفعل. تم تضمين دعم إطار عمل المزامنة، وهو أمر ضروري لعمليات التنفيذ الفعالة.
- تم نقل المشغلات إلى الطلبات، ومعظم الإشعارات إلى النتائج.
- تم دمج جميع عمليات الاسترجاعات في إطار عمل في بنية واحدة، وجميع طرق الإعداد في استدعاء واحد
initialize()
. - تم إجراء تكوين الدفق في مكالمة واحدة لتبسيط إدارة الدفق. تحل التدفقات ثنائية الاتجاه محل بنية
STREAM_FROM_STREAM
. - دلالات الوضع المحدود للأجهزة القديمة/المحدودة.
2.0
الإصدار الأولي من HAL ذو القدرة الموسعة (Android 4.2) [camera2.h]:
- كافية لتنفيذ
android.hardware.Camera
API الموجودة. - يسمح بقائمة انتظار ZSL في طبقة خدمة الكاميرا.
- لم يتم اختباره لأي ميزات جديدة مثل التحكم اليدوي في الالتقاط، والتقاط Bayer RAW، وإعادة معالجة بيانات RAW، وما إلى ذلك.
1.0
كاميرا Android الأولية HAL (Android 4.0) [camera.h]:
- تم التحويل من طبقة تجريد C++ CameraHardwareInterface.
- يدعم
android.hardware.Camera
API.
سجل إصدار وحدة الكاميرا
يحتوي هذا القسم على معلومات إصدار الوحدة النمطية لوحدة أجهزة الكاميرا، استنادًا إلى camera_module_t.common.module_api_version
. يمثل الرقمان السداسيان الأكثر أهمية الإصدار الرئيسي، بينما يمثل الرقمان الأقل أهمية الإصدار الثانوي.
2.4
يضيف إصدار وحدة الكاميرا تغييرات واجهة برمجة التطبيقات التالية:
- دعم وضع الشعلة. يمكن للإطار تشغيل وضع الشعلة لأي جهاز كاميرا يحتوي على وحدة فلاش، دون فتح جهاز الكاميرا. يتمتع جهاز الكاميرا بأولوية أعلى للوصول إلى وحدة الفلاش مقارنة بوحدة الكاميرا؛ يؤدي فتح جهاز الكاميرا إلى إيقاف تشغيل الشعلة إذا تم تمكينها من خلال واجهة الوحدة. عند وجود أي تعارض في الموارد، مثل استدعاء
open()
لفتح جهاز كاميرا، يجب على وحدة HAL للكاميرا إخطار إطار العمل من خلال رد اتصال حالة وضع الشعلة بأنه تم إيقاف تشغيل وضع الشعلة. - دعم الكاميرا الخارجية (على سبيل المثال، كاميرا USB قابلة للتوصيل السريع). تحدد تحديثات واجهة برمجة التطبيقات (API) أن المعلومات الثابتة للكاميرا متاحة فقط عندما تكون الكاميرا متصلة وجاهزة للاستخدام مع الكاميرات الخارجية القابلة للتوصيل السريع. تعتبر المكالمات للحصول على معلومات ثابتة مكالمات غير صالحة عندما لا تكون حالة الكاميرا
CAMERA_DEVICE_STATUS_PRESENT
. يعتمد الإطار فقط على عمليات الاسترجاعات لتغيير حالة الجهاز لإدارة قائمة الكاميرات الخارجية المتاحة. - تلميحات تحكيم الكاميرا. إضافة دعم للإشارة بوضوح إلى عدد أجهزة الكاميرا التي يمكن فتحها واستخدامها في نفس الوقت. لتحديد مجموعات صالحة من الأجهزة، يجب دائمًا تعيين حقلي
resource_cost
والأجهزةconflicting_devices
في بنيةcamera_info
التي يتم إرجاعها بواسطة استدعاءget_camera_info
. - طريقة تهيئة الوحدة النمطية. يتم استدعاؤه بواسطة خدمة الكاميرا بعد تحميل وحدة HAL للسماح بتهيئة HAL لمرة واحدة. يتم استدعاؤه قبل استدعاء أية أساليب وحدة أخرى.
2.3
يضيف إصدار وحدة الكاميرا هذا دعمًا لجهاز HAL الخاص بالكاميرا القديمة. يمكن لإطار العمل استخدامه لفتح جهاز الكاميرا كجهاز HAL إصدار HAL أقل للجهاز إذا كان الجهاز نفسه يمكنه دعم إصدارات API متعددة للأجهزة. يستمر الاتصال المفتوح لوحدة الأجهزة القياسية ( 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
API بواسطة هذه الوحدة وأجهزتها.