دعم إصدار الكاميرا

توضّح هذه الصفحة بالتفصيل الاختلافات في الإصدارات في واجهات برمجة التطبيقات وواجهات 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 لتمرير المخازن المؤقتة بين العمليات، لا يلزم تحديث المورّد.

    حزمة كاميرا ووسائط
Android 7.0 في API1 على HAL3

    الشكل 1: مجموعة أدوات معالجة الكاميرا والوسائط في Android 7.0 في API1 على HAL3

  • ‫HAL1، الذي يتيح تمرير البيانات الوصفية في ذاكرة التخزين المؤقت للفيديو: على المورّدين تحديث HAL لاستخدام kMetadataBufferTypeNativeHandleSource. (لم يعُد تطبيق kMetadataBufferTypeCameraSource متوافقًا مع الإصدار 7.0 من نظام التشغيل Android).

    حزمة كاميرا ووسائط
Android 7.0 في API1 على HAL1

    الشكل 2. مجموعة أدوات معالجة الكاميرا والوسائط في الإصدار 7.0 من Android في API1 على HAL1

التغييرات المعمارية لواجهة برمجة التطبيقات 2

بالنسبة إلى واجهة برمجة التطبيقات 2 على HAL1 أو HAL3، تُرسِل BufferQueue المخزن المؤقت كي تستمر هذه المسارات في العمل. بنية Android 7.0 لواجهة برمجة التطبيقات 2 على:

  • لا يتأثر HAL1 بنقل خدمة الكاميرا، ولا يلزم أي تحديث من جانب المورّد.
  • يتأثّر HAL3، ولكن لا يلزم إجراء تعديل لدى المورّد:

    حِزم كاميرا Android 7.0
ومجموعة الوسائط في واجهة برمجة التطبيقات 2 على 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 يعمل الإصدار 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

Camera HAL

تم تعديل إصدارات Camera HAL التالية في الإصدار 10 من نظام Android.

3.5

ICameraDevice

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

يضيف إصدار وحدة الكاميرا هذا التغييرات التالية على واجهة برمجة التطبيقات:

  1. التوافق مع "وضع الكشاف" يمكن للإطار العملي تفعيل وضع "مصباح يدوي" لأي جهاز كاميرا مزوّد بوحدة فلاش، بدون فتح جهاز الكاميرا. يحظى جهاز الكاميرا بأولوية أعلى في الوصول إلى وحدة الفلاش مقارنةً بوحدة الكاميرا، ويؤدي فتح جهاز كاميرا إلى إيقاف ضوء المشعل إذا كان مفعَّلاً من خلال واجهة الوحدة. عند حدوث أي تعارض في الموارد، مثل دعوة open() لفتح جهاز كاميرا، يجب أن تُعلم وحدة HAL للكاميرا الإطار من خلال طلب إعادة الاتصال بحالة وضع مصباح يدوي بأنّه تم إيقاف وضع مصباح يدوي.
  2. إتاحة استخدام الكاميرا الخارجية (مثل كاميرا USB التي يتم توصيلها بالماء الساخن) وتحدّد تعديلات واجهة برمجة التطبيقات أنّ المعلومات الثابتة للكاميرا لا تتوفّر إلا عندما تكون الكاميرا متصلة وجاهزة للاستخدام في كاميرات التوصيل السريع الخارجية. تُعدّ المكالمات التي يتم إجراؤها للحصول على معلومات ثابتة مكالمات غير صالحة عندما لا تكون حالة الكاميرا CAMERA_DEVICE_STATUS_PRESENT. يعتمد إطار العمل فقط على callbacks لتغيير حالة الجهاز بهدف إدارة قائمة الكاميرات الخارجية المتاحة.
  3. ملاحظات حول التحكيم في الكاميرا تتيح هذه الميزة الإشارة بشكل واضح إلى عدد أجهزة الكاميرات التي يمكن فتحها واستخدامها في الوقت نفسه. لتحديد مجموعات صالحة من الأجهزة، يجب دائمًا ضبط الحقلَين resource_cost و conflicting_devices في بنية camera_info التي يعرضها طلب get_camera_info.
  4. طريقة إعداد الوحدة: يتم استدعاء هذه الوظيفة من خلال خدمة الكاميرا بعد تحميل وحدة 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 في هذه الوحدة وأجهزتها.