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

تعرض هذه الصفحة تفاصيل الاختلافات في الإصدار في Camera HALs و APIs واختبارات Compatibility Test Suite (CTS) ذات الصلة. يغطي أيضًا العديد من التغييرات المعمارية التي تم إجراؤها لتقوية وتأمين إطار عمل الكاميرا في Android 7.0 ، والتبديل إلى Treble في Android 8.0 ، والتحديثات التي يجب على البائعين إجراؤها لدعم هذه التغييرات في تطبيقات الكاميرا الخاصة بهم.

المصطلح

تستخدم المصطلحات التالية في هذه الصفحة:

API الكاميرا 1
إطار عمل الكاميرا على مستوى التطبيق على الأجهزة التي تعمل بنظام التشغيل Android 4.4 والإصدارات الأقل ، يتم عرضه من خلال فئة android.hardware.Camera .
API الكاميرا 2
إطار عمل الكاميرا على مستوى التطبيق على الأجهزة التي تعمل بنظام التشغيل Android 5.0 والإصدارات الأحدث ، يتم عرضه من خلال حزمة android.hardware.camera2 .
كاميرا HAL
طبقة وحدة الكاميرا التي ينفذها بائعو SoC. تم إنشاء أطر العمل العامة على مستوى التطبيق أعلى الكاميرا HAL.
الكاميرا HAL3.1
إصدار كاميرا جهاز HAL الذي تم إصداره بنظام Android 4.4.
الكاميرا HAL3.2
إصدار جهاز الكاميرا HAL الذي تم إصداره بنظام Android 5.0.
كاميرا API1 CTS
مجموعة من اختبارات CTS للكاميرا التي تعمل فوق Camera API1.
كاميرا API2 CTS
مجموعة إضافية من اختبارات CTS للكاميرا التي تعمل فوق Camera API2.
ثلاثة أضعاف
يفصل تنفيذ البائع (برنامج خاص بالجهاز ، منخفض المستوى مكتوب من قبل الشركات المصنعة للسيليكون) عن إطار عمل نظام التشغيل Android من خلال واجهة بائع جديدة.
HIDL
تم تقديم لغة تعريف واجهة HAL مع Treble واستخدامها لتحديد الواجهة بين HAL ومستخدميها.
VTS
تم تقديم مجموعة اختبار البائع جنبًا إلى جنب مع Treble.

واجهات برمجة تطبيقات الكاميرا

يشتمل Android على واجهات برمجة تطبيقات الكاميرا التالية.

API الكاميرا 1

Android 5.0 تم إيقاف Camera API1 ، والذي يستمر في الإلغاء التدريجي لأن تطوير النظام الأساسي الجديد يركز على Camera API2. ومع ذلك ، ستكون فترة الإلغاء التدريجي طويلة ، وستستمر إصدارات Android في دعم تطبيقات Camera API1 لبعض الوقت. على وجه التحديد ، يستمر الدعم لـ:

  • واجهات الكاميرا API1 للتطبيقات. يجب أن تعمل تطبيقات الكاميرا التي تم إنشاؤها في الجزء العلوي من Camera API1 كما تفعل على الأجهزة التي تعمل بإصدارات إصدار Android أقل.
  • إصدارات الكاميرا HAL. يتضمن دعم الكاميرا HAL1.0.

API الكاميرا 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 المحددة التي يدعمها ، كعلامات الميزات التالية للسماح بتصفية تطبيقات الكاميرا Camera API2 على Google Play.

  • 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 والإصدارات الأحدث اختبارات الكاميرا Camera API1 CTS و Camera API2 CTS و CTS Verifier.

يجب على الأجهزة التي لا تتميز بتطبيق Camera HAL3.2 وغير القادرة على دعم واجهات Camera API2 الكاملة أن تجتاز اختبارات Camera API2 CTS. ومع ذلك ، يتم تشغيل الجهاز في وضع Camera API2 LEGACY (حيث يتم تعيين مكالمات Camera API2 من الناحية المفاهيمية إلى مكالمات Camera API1) بحيث يتم تخطي أي اختبارات CTS API2 الخاصة بالكاميرا المتعلقة بالميزات أو الإمكانات التي تتجاوز 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 لتمرير المخازن المؤقتة بين العمليات ، فلا يلزم تحديث البائع .

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

    الشكل 1. كاميرا Android 7.0 ومكدس الوسائط في API1 على HAL3

  • HAL1 ، الذي يدعم تمرير البيانات الوصفية في المخازن المؤقتة للفيديو ، يجب على البائعين تحديث HAL لاستخدام kMetadataBufferTypeNativeHandleSource . (لم يعد kMetadataBufferTypeCameraSource مدعومًا في Android 7.0.)

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

    الشكل 2. كاميرا Android 7.0 ومكدس الوسائط في API1 على HAL1

التغييرات المعمارية ل API2

بالنسبة لـ API2 على HAL1 أو HAL3 ، يقوم BufferQueue بتمرير المخازن المؤقتة بحيث تستمر هذه المسارات في العمل. بنية Android 7.0 لـ API2 على:

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

    كاميرا Android 7.0 ومكدس الوسائط في API2 على HAL3

    الشكل 3. كاميرا Android 7.0 ومكدس الوسائط في API2 على 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 ، قد يقوم HAL بتخزين مقبض المخزن المؤقت B في المرة التالية التي يستقبلها HAL.
  • تحديث سياسات SELinux لخادم الكاميرات. إذا أعطت سياسات SELinux الخاصة بالجهاز أذونات لخادم الوسائط لتشغيل الكاميرا ، فيجب عليك تحديث سياسات SELinux لمنح أذونات خادم الكاميرات المناسبة. نحن لا نشجع تكرار سياسات SELinux لخادم الوسائط (لأن الخادم الوسيط وخادم الكاميرات يتطلبان عمومًا موارد مختلفة في النظام). يجب أن يكون لدى Cameraserver الأذونات اللازمة فقط لأداء وظائف الكاميرا ويجب إزالة أي أذونات غير ضرورية متعلقة بالكاميرا في خادم الوسائط.
  • الفصل بين Camera HAL و cameraerver. يعمل Android 8.0 والإصدارات الأحدث أيضًا على فصل Camera HAL المرتبط في عملية مختلفة عن خادم الكاميرا. يمر IPC عبر واجهات HIDL المعرفة .

تصديق

بالنسبة لجميع الأجهزة التي تتضمن كاميرا وتعمل بنظام Android 7.0 ، تحقق من التنفيذ عن طريق تشغيل Android 7.0 CTS. على الرغم من أن Android 7.0 لا يتضمن اختبارات CTS الجديدة التي تتحقق من تغييرات خدمة الكاميرا ، إلا أن اختبارات CTS الحالية تفشل إذا لم تقم بإجراء التحديثات المشار إليها أعلاه.

بالنسبة لجميع الأجهزة التي تتضمن كاميرا وتعمل بنظام Android 8.0 والإصدارات الأحدث ، تحقق من تنفيذ البائع عن طريق تشغيل VTS.

محفوظات إصدار Camera HAL

للحصول على قائمة الاختبارات المتاحة لتقييم Android Camera HAL ، راجع قائمة التحقق من اختبار Camera HAL .

أندرويد 10

يقدم Android 10 التحديثات التالية.

واجهة برمجة تطبيقات الكاميرا

كاميرا HAL

يتم تحديث إصدارات 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 .

كاميرا 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

أندرويد 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 لتجنب التعارض مع الأوضاع المستقبلية المضافة إلى API العام.

لدعم هذه الميزة ، تحتاج الشركات المصنّعة للمعدات الأصلية فقط إلى إضافة الوضع الجديد إلى 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 لإعادة معالجة تحديثات API.
  • الدعم الأساسي لعمق المخازن المؤقتة للإخراج.
  • إضافة حقل 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 التي يوفرها Framework لـ 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

يضيف إصدار وحدة الكاميرا تغييرات API التالية:

  1. دعم وضع الشعلة. يمكن أن يقوم إطار العمل بتشغيل وضع المصباح لأي جهاز كاميرا يحتوي على وحدة فلاش ، دون فتح جهاز الكاميرا. يتمتع جهاز الكاميرا بأولوية أعلى في الوصول إلى وحدة الفلاش مقارنة بوحدة الكاميرا ؛ يؤدي فتح جهاز الكاميرا إلى إيقاف تشغيل المصباح إذا تم تمكينه من خلال واجهة الوحدة النمطية. عند وجود أي تعارضات في الموارد ، مثل استدعاء open() لفتح جهاز كاميرا ، يجب أن تقوم وحدة HAL الخاصة بالكاميرا بإخطار إطار العمل من خلال إعادة الاتصال بحالة وضع الشعلة بأن وضع الشعلة قد تم إيقاف تشغيله.
  2. دعم الكاميرا الخارجية (على سبيل المثال ، كاميرا USB للتوصيل السريع). تحدد تحديثات API أن معلومات الكاميرا الثابتة متاحة فقط عندما تكون الكاميرا متصلة وجاهزة للاستخدام مع الكاميرات الخارجية التي يتم توصيلها دون إيقاف التشغيل. المكالمات للحصول على معلومات ثابتة هي مكالمات غير صالحة عندما لا تكون حالة الكاميرا CAMERA_DEVICE_STATUS_PRESENT . يحسب إطار العمل فقط على حالات تغيير حالة الجهاز لإدارة قائمة الكاميرا الخارجية المتاحة.
  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.0

تقوم وحدات الكاميرا التي تُبلغ عن أرقام الإصدارات هذه بتنفيذ واجهة HAL لوحدة الكاميرا الأولية. تدعم جميع أجهزة الكاميرا القابلة للفتح من خلال هذه الوحدة الإصدار 1 فقط من جهاز الكاميرا HAL. إن حقلي device_version و static_camera_characteristics في camera_info غير صالحين. يمكن فقط دعم android.hardware.Camera API بواسطة هذه الوحدة وأجهزتها.