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

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

المصطلح

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

API الكاميرا 1
في إطار كاميرا على مستوى التطبيق على الروبوت 4.4 وأقل من الأجهزة، ويتعرضون من خلال android.hardware.Camera الصف.
API الكاميرا 2
في إطار كاميرا على مستوى التطبيق على الروبوت 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 لغة تعريف واجهة عرض مع التريبل وتستخدم لتحديد واجهة بين HAL ومستخدميها.
VTS
اختبار جناح بائع أدخلت إلى جانب ثلاثة أضعاف.

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

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

API الكاميرا 1

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

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

API الكاميرا 2

يعرض إطار عمل Camera API2 مستوى أقل من التحكم في الكاميرا للتطبيق ، بما في ذلك تدفقات الاندفاع / التدفق الفعالة للنسخة الصفرية وعناصر التحكم لكل إطار في التعريض ، والكسب ، ومكاسب توازن اللون الأبيض ، وتحويل اللون ، وتقليل الضوضاء ، والشحذ ، والمزيد. للحصول على تفاصيل، مشاهدة جوجل I / O نظرة عامة الفيديو .

Android 5.0 والإصدارات الأحدث تتضمن Camera API2 ؛ ومع ذلك ، قد لا تدعم الأجهزة التي تعمل بنظام Android 5.0 والإصدارات الأحدث جميع ميزات Camera API2. و android.info.supportedHardwareLevel الممتلكات التي التطبيقات يمكن الاستعلام من خلال واجهات كاميرا API2 تقارير واحد من مستويات الدعم التالية:

  • LEGACY : هذه الأجهزة تعرض قدرات لالتطبيقات من خلال واجهات API2 الكاميرا التي هي تقريبا نفس قدرات تلك التي تتعرض لالتطبيقات من خلال واجهات كاميرا API1. يترجم رمز إطارات العمل القديم من الناحية المفاهيمية مكالمات Camera API2 إلى مكالمات Camera API1 ؛ لا تدعم الأجهزة القديمة ميزات Camera API2 مثل عناصر التحكم لكل إطار.
  • LIMITED : هذه الأجهزة تدعم بعض القدرات كاميرا API2 (وليس كل) ويجب أن تستخدم كاميرا HAL 3.2 أو أعلى.
  • FULL : هذه الأجهزة تدعم كل من قدرات الرئيسية للAPI2 الكاميرا ويجب أن تستخدم كاميرا HAL 3.2 أو أعلى والروبوت 5.0 أو أعلى.
  • LEVEL_3 : هذه الأجهزة تدعم YUV إعادة المعالجة وRAW التقاط الصور، جنبا إلى جنب مع تكوينات إضافية دفق إخراج.
  • EXTERNAL : هذه الأجهزة هي مماثلة ل LIMITED الأجهزة مع بعض الاستثناءات. على سبيل المثال ، قد لا يتم الإبلاغ عن بعض معلومات المستشعر أو العدسة أو قد يكون لها معدلات إطارات أقل استقرارًا. يستخدم هذا المستوى للكاميرات الخارجية مثل كاميرات الويب USB.

ويتعرض القدرات الفردية من خلال android.request.availableCapabilities الملكية في واجهات كاميرا 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. ومع ذلك، يعمل الجهاز في كاميرا API2 LEGACY الوضع (الذي يدعو كاميرا API2 يتم تعيينها من الناحية النظرية لدعوات كاميرا API1) لذلك أي كاميرا API2 CTS الاختبارات المتعلقة الميزات أو قدرات ما وراء API1 الكاميرا هي تخطي تلقائيا.

على الأجهزة القديمة ، تستخدم اختبارات Camera API2 CTS التي يتم تشغيلها واجهات وإمكانيات Camera API1 العامة الحالية مع عدم وجود متطلبات جديدة. الأخطاء التي يتم كشفها (والتي تتسبب في فشل Camera API2 CTS) هي أخطاء موجودة بالفعل في Camera HAL الموجود بالجهاز ، وبالتالي يمكن العثور عليها بواسطة تطبيقات Camera API1 الحالية. لا نتوقع العديد من الأخطاء من هذا النوع (ومع ذلك ، يجب إصلاح أي أخطاء من هذا القبيل لاجتياز اختبارات Camera API2 CTS).

متطلبات VTS

يجب أن أجهزة تشغيل أندرويد 8.0 وأعلى مع تطبيقات HAL binderized تمرير كاميرا 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. الروبوت كاميرا 7.0 وسائل الإعلام كومة في API1 على HAL3

  • HAL1، الذي يدعم يمر التعريف في مخازن الفيديو، يجب على موردي تحديث HAL إلى استخدام kMetadataBufferTypeNativeHandleSource . ( kMetadataBufferTypeCameraSource لم يعد معتمدا في الروبوت 7.0.)

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

    الشكل 2. الروبوت كاميرا 7.0 وسائل الإعلام كومة في API1 على HAL1

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

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

  • HAL1 لا يتأثر هذه الخطوة cameraservice، وليس التحديث بائع ضروري.
  • HAL3 يتأثر، ولكن أي تحديث بائع ضروري:

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

    الشكل 3. الروبوت كاميرا 7.0 وسائل الإعلام كومة في API2 على HAL3

متطلبات إضافية

تتضمن التغييرات المعمارية التي تم إجراؤها لتقوية الوسائط وأمن إطار عمل الكاميرا متطلبات الجهاز الإضافية التالية.

  • عام. تتطلب الأجهزة نطاقًا تردديًا إضافيًا بسبب IPC ، مما قد يؤثر على حالات استخدام الكاميرا الحساسة للوقت مثل تسجيل الفيديو عالي السرعة. يمكن للبائعين قياس الأثر الفعلي عن طريق تشغيل android.hardware.camera2.cts.PerformanceTest وتطبيق كاميرا Google لل120/240 FPS عالية السرعة لتسجيل الفيديو. تتطلب الأجهزة أيضًا مقدارًا صغيرًا من ذاكرة الوصول العشوائي الإضافية لإنشاء العملية الجديدة.
  • تمرير الفوقية في مخازن الفيديو (HAL1 فقط). إذا مخازن HAL1 الفوقية بدلا من بيانات الإطار YUV الحقيقي في مخازن الفيديو، وHAL يجب استخدام kMetadataBufferTypeNativeHandleSource كما الفوقية نوع العازلة وتمر VideoNativeHandleMetadata في مخازن الفيديو. ( kMetadataBufferTypeCameraSource لم يعد معتمدا على الروبوت 7.0.) مع VideoNativeHandleMetadata ، وكاميرا وسائل الإعلام أطر قادرة على تمرير مخازن الفيديو بين العمليات التي تسلسل وdeserializing مقابض الأم بشكل صحيح.
  • عازلة عنوان مقبض لا تخزن دائما المخزن نفسه (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

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

أندرويد 10

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

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

كاميرا HAL

يتم تحديث إصدارات Camera HAL التالية في Android 10.

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics : المعلومات كاميرا ثابتة لID الكاميرا البدني دعم جهاز كاميرا منطقي. نرى دعم متعدد الكاميرا .
  • isStreamCombinationSupported : هذه الطريقة تدعم API العامة التي تساعد العملاء على الاستفسار اذا كان يدعم تكوين الدورة. انظر 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

تحديثات 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. مع ثلاثة أضعاف، ويجب أن يكون بائع تطبيقات كاميرا HAL binderized . يحتوي Android 8.0 أيضًا على هذه التحسينات الرئيسية لخدمة الكاميرا:

  • السطوح المشتركة: تمكين أسطح متعددة تقاسم نفس OutputConfiguration
  • واجهة برمجة تطبيقات النظام لأوضاع الكاميرا المخصصة
  • onCaptureQueueEmpty

راجع الأقسام أدناه للحصول على مزيد من المعلومات حول هذه الميزات.

الأسطح المشتركة

تتيح هذه الميزة مجموعة واحدة فقط من المخازن المؤقتة لتشغيل ناتجين ، مثل المعاينة وتشفير الفيديو ، مما يقلل من استهلاك الطاقة والذاكرة. لدعم هذه الميزة ، تحتاج الشركات المصنعة للأجهزة إلى التأكد من أن تطبيقات HAL و gralloc HAL للكاميرا يمكنها إنشاء مخازن مؤقتة gralloc يستخدمها العديد من المستهلكين المختلفين (مثل مؤلف الأجهزة / وحدة معالجة الرسومات ومشفّر الفيديو) ، بدلاً من مستهلك واحد فقط. تمرر خدمة الكاميرا إشارات استخدام المستهلك إلى HAL للكاميرا و gralloc HAL ؛ يحتاجون إما إلى تخصيص الأنواع الصحيحة من المخازن المؤقتة ، أو تحتاج الكاميرا HAL إلى إرجاع خطأ مفاده أن هذه المجموعة من المستهلكين غير مدعومة.

رؤية enableSurfaceSharing ثائق المطور للحصول على تفاصيل إضافية.

واجهة برمجة تطبيقات النظام لأوضاع الكاميرا المخصصة

تحدد واجهة برمجة التطبيقات للكاميرا العامة وضعين للتشغيل: تسجيل عالي السرعة عادي ومقيد. لديهم دلالات مختلفة إلى حد ما. على سبيل المثال ، وضع السرعة العالية يقتصر على مخرجات محددة على الأكثر في وقت واحد. أعرب العديد من مصنعي المعدات الأصلية عن اهتمامهم بتحديد أوضاع مخصصة أخرى للإمكانيات الخاصة بالأجهزة. تحت غطاء محرك السيارة، ووضع هو مجرد عدد صحيح تمريرها إلى configure_streams . انظر: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams .

تتضمن هذه الميزة استدعاء API للنظام الذي يمكن لتطبيقات كاميرا 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 ترميز dataspace.
  • إضافات البيانات الوصفية العامة المتاحة للاستخدام لـ 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 التي يقدمها الإطار إلى 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 يمكن أن تكون معتمدة من قبل هذه الوحدة وأجهزتها.