پشتیبانی از نسخه دوربین

این صفحه جزئیات تفاوت‌های نسخه در Camera HAL،‏ API، و آزمایش‌های مجموعه آزمایش سازگاری (CTS) مرتبط را شرح می‌دهد. این سند همچنین چندین تغییر معماری را که برای تقویت و ایمن‌سازی چارچوب دوربین در Android 7.0، تغییر به Treble در Android 8.0، و به‌روزرسانی‌هایی که فروشندگان باید برای پشتیبانی از این تغییرات در پیاده‌سازی‌های دوربین خود انجام دهند، پوشش می‌دهد.

اصطلاحات

اصطلاحات زیر در این صفحه استفاده شده است:

Camera API1
چارچوب دوربین سطح برنامه در دستگاه‌های Android 4.4 و پایین‌تر، ازطریق کلاس android.hardware.Camera آشکار می‌شود.
Camera API2
چارچوب دوربین سطح برنامه در دستگاه‌های Android 5.0 و بالاتر، ازطریق بسته android.hardware.camera2 آشکار می‌شود.
لایه انتزاع سخت‌افزار دوربین
لایه واحد دوربین که توسط فروشندگان SoC پیاده‌سازی شده است. چارچوب‌های عمومی سطح برنامه بر روی HAL دوربین ساخته شده‌اند.
Camera HAL3.1
نسخه Camera HAL که با Android 4.4 منتشر شده است.
Camera HAL3.2
نسخه HAL دستگاه دوربین که با Android 5.0 منتشر شده است.
Camera API1 CTS
مجموعه آزمایش‌های سازگاری CTS دوربین که روی Camera API1 اجرا می‌شود.
Camera API2 CTS
مجموعه اضافی از آزمایش‌های سازگاری دوربین که روی Camera API2 اجرا می‌شود.
زیر
پیاده‌سازی فروشنده (نرم‌افزار سطح پایین‌تر مختص دستگاه که توسط سازندگان سیلیکون نوشته شده است) را ازطریق میانای فروشنده جدیدی از چارچوب سیستم‌عامل Android جدا می‌کند.
HIDL
زبان تعریف میانای HAL با Treble معرفی شد و برای مشخص کردن میانای بین HAL و کاربران آن استفاده می‌شود.
VTS
مجموعه آزمایشی فروشنده همراه با Treble معرفی شد.

Camera APIs

‫Android شامل APIهای دوربین زیر است.

Camera API1

‫Android 5.0 «میانای برنامه‌سازی کاربردی دوربین ۱» را منسوخ کرد و این میانای برنامه‌سازی کاربردی همچنان درحال حذف تدریجی است زیرا توسعه پلاتفرم جدید بر «میانای برنامه‌سازی کاربردی دوربین ۲» تمرکز دارد. بااین‌حال، دوره حذف تدریجی طولانی خواهد بود و نسخه‌های پخش Android تا مدتی به پشتیبانی از برنامه‌های Camera API1 ادامه خواهند داد. به‌طور دقیق، پشتیبانی برای موارد زیر ادامه می‌یابد:

  • میاناهای Camera API1 برای برنامه‌ها. برنامه‌های دوربین که براساس Camera API1 ساخته شده‌اند باید همان‌طور که در دستگاه‌های دارای نسخه‌های پایین‌تر Android کار می‌کنند، در این دستگاه‌ها نیز کار کنند.
  • نسخه‌های Camera HAL. شامل پشتیبانی از Camera HAL1.0 است.

Camera API2

چارچوب 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 نگاشت می‌شود)، بنابراین هرگونه آزمون Camera API2 CTS مربوط به ویژگی‌ها یا قابلیت‌های فراتر از Camera API1 به‌طور خودکار رد می‌شود.

در دستگاه‌های قدیمی، آزمون‌های Camera API2 CTS که اجرا می‌شوند از قابلیت‌ها و رابط‌های Camera API1 عمومی موجود بدون الزامات جدید استفاده می‌کنند. اشکال‌هایی که آشکار می‌شوند (و باعث خرابی Camera API2 CTS می‌شوند) اشکال‌هایی هستند که ازقبل در Camera HAL موجود دستگاه وجود دارند و بنابراین توسط برنامه‌های Camera API1 موجود پیدا می‌شوند. انتظار نداریم اشکالات زیادی از این نوع وجود داشته باشد (بااین‌حال، برای گذراندن آزمون‌های «مجموعه آزمون سازگاری» Camera API2، باید همه این اشکالات برطرف شوند).

الزامات VTS

دستگاه‌های دارای Android 8.0 و بالاتر با پیاده‌سازی‌های HAL پیوندشده باید آزمایش‌های VTS دوربین را بگذرانند.

مقاوم‌سازی چارچوب دوربین

برای تقویت امنیت چارچوب دوربین و رسانه، Android 7.0 سرویس دوربین را از mediaserver خارج می‌کند. از Android 8.0، هر Camera HAL پیونددار در فرایندی جدا از سرویس دوربین اجرا می‌شود. فروشندگان ممکن است نیاز داشته باشند تغییراتی در HAL دوربین ایجاد کنند که بستگی به نسخه‌های API و HAL مورد استفاده دارد. بخش‌های زیر جزئیات تغییرات معماری در AP1 و AP2 برای HAL1 و HAL3، و همچنین الزامات عمومی را شرح می‌دهند.

تغییرات معماری برای API1

ضبط ویدیو API1 ممکن است فرض کند دوربین و کدبند ویدیو در یک فرایند زنده هستند. هنگام استفاده از API1 در:

  • HAL3، که در آن سرویس دوربین از BufferQueue برای انتقال بافرها بین فرایندها استفاده می‌کند، به‌روزرسانی فروشنده لازم نیست.

    پشته رسانه و دوربین Android 7.0
در API1 در HAL3

    شکل ۱. پشته رسانه و دوربین Android 7.0 در API1 در HAL3

  • HAL1 که از ارسال فراداده در میان‌گیرهای ویدیو پشتیبانی می‌کند، فروشندگان باید HAL را برای استفاده از kMetadataBufferTypeNativeHandleSource به‌روز کنند. (‫kMetadataBufferTypeCameraSource دیگر در Android نسخه ۷.۰ پشتیبانی نمی‌شود.)

    پشته رسانه و دوربین Android 7.0 در API1 در HAL1

    شکل ۲. پشته رسانه و دوربین Android 7.0 در API1 در HAL1

تغییرات معماری برای API2

برای API2 در HAL1 یا HAL3،‏ BufferQueue بافرها را منتقل می‌کند تا آن مسیرها همچنان کار کنند. معماری Android 7.0 برای API2 در:

  • HAL1 تحت تأثیر انتقال cameraservice قرار نمی‌گیرد و به‌روزرسانی فروشنده لازم نیست.
  • ‫HAL3 تحت تأثیر قرار می‌گیرد، اما به‌روزرسانی فروشنده لازم نیست:

    پشته رسانه و دوربین Android 7.0
در API2 در HAL3

    شکل ۳.‏ پشته رسانه و دوربین Android 7.0 در API2 در HAL3

الزامات اضافی

تغییرات معماری انجام‌شده برای تقویت امنیت چارچوب رسانه و دوربین شامل الزامات دستگاه اضافی زیر می‌شود.

  • عمومی. دستگاه‌ها به‌دلیل IPC به پهنای باند اضافی نیاز دارند که ممکن است بر موارد استفاده حساس به زمان دوربین مانند ضبط ویدیو با سرعت بالا تأثیر بگذارد. فروشندگان می‌توانند با اجرای android.hardware.camera2.cts.PerformanceTest و برنامه «دوربین Google» برای ضبط ویدیو پرسرعت با سرعت ۱۲۰/۲۴۰ فریم در ثانیه، تأثیر واقعی را اندازه‌گیری کنند. دستگاه‌ها همچنین برای ایجاد فرایند جدید به مقدار کمی RAM اضافی نیاز دارند.
  • فراداده را در میان‌گیرهای ویدیو ارسال کنید (فقط HAL1). اگر HAL1 به‌جای داده‌های قاب YUV واقعی، فراداده را در بافرهای ویدیو ذخیره می‌کند، HAL باید از kMetadataBufferTypeNativeHandleSource به‌عنوان نوع بافر فراداده استفاده کند و VideoNativeHandleMetadata را در بافرهای ویدیو بگذراند. (‫kMetadataBufferTypeCameraSource دیگر در Android 7.0 پشتیبانی نمی‌شود.) با VideoNativeHandleMetadata، چارچوب‌های دوربین و رسانه می‌توانند با سریال‌سازی و سریال‌سازی معکوس کردن دستگیره‌های بومی، بافرهای ویدیو را بین فرایندها منتقل کنند.
  • نشانی دستگیره بافر همیشه بافر یکسانی را ذخیره نمی‌کند (فقط HAL3). برای هر درخواست ضبط، HAL3 نشانی‌های دسته‌های بافر را دریافت می‌کند. ‫HAL نمی‌تواند از نشانی‌ها برای شناسایی بافرها استفاده کند زیرا نشانی‌ها ممکن است پس‌از اینکه HAL بافر را برمی‌گرداند، دستگیره بافر دیگری را ذخیره کنند. برای استفاده از دسته‌های بافر برای شناسایی بافرها، باید «لایه انتزاعی سخت‌افزار» را به‌روزرسانی کنید. برای مثال، HAL نشانی دسته میان‌گیر A را دریافت می‌کند که دسته میان‌گیر A را ذخیره می‌کند. پس‌از اینکه HAL دسته میان‌گیر A را برمی‌گرداند، نشانی دسته میان‌گیر A ممکن است دفعه بعد که HAL دسته میان‌گیر B را دریافت می‌کند، آن را ذخیره کند.
  • خط‌مشی‌های SELinux را برای cameraserver به‌روزرسانی کنید. اگر خط‌مشی‌های SELinux مختص دستگاه به mediaserver اجازه اجرای دوربین را می‌دهد، باید خط‌مشی‌های SELinux را به‌روز کنید تا به cameraserver اجازه‌های مناسب را بدهید. ما تکرار خط‌مشی‌های SELinux مربوط به mediaserver برای cameraserver را توصیه نمی‌کنیم (زیرا mediaserver و cameraserver معمولاً به منابع مختلفی در سیستم نیاز دارند). ‫Cameraserver باید فقط اجازه‌های لازم برای انجام عملکردهای دوربین را داشته باشد و هرگونه اجازه غیرضروری مربوط به دوربین در mediaserver باید برداشته شود.
  • جداسازی بین Camera HAL و cameraserver. ‫Android نسخه ۸.۰ و بالاتر علاوه‌براین، Camera HAL متصل‌شده را در فرایندی متفاوت از cameraserver جدا می‌کند. IPC ازطریق میاناهای تعریف‌شده در HIDL انجام می‌شود.

اعتبارسنجی

برای همه دستگاه‌هایی که دوربین دارند و Android 7.0 را اجرا می‌کنند، پیاده‌سازی را با اجرای Android 7.0 CTS درستی‌سنجی کنید. اگرچه Android 7.0 شامل آزمایش‌های جدید CTS که تغییرات سرویس دوربین را تأیید کند نمی‌شود، آزمایش‌های CTS موجود درصورتی‌که به‌روزرسانی‌های ذکرشده در بالا را انجام نداده باشید ناموفق خواهد بود.

برای همه دستگاه‌هایی که دوربین دارند و Android 8.0 و بالاتر را اجرا می‌کنند، پیاده‌سازی فروشنده را با اجرای VTS درستی‌سنجی کنید.

سابقه نسخه Camera HAL

برای فهرست آزمایش‌های دردسترس برای ارزیابی «لایه انتزاع سخت‌افزاری دوربین Android»، به فهرست وارسی آزمایش «لایه انتزاع سخت‌افزاری دوربین» مراجعه کنید.

Android 10

‫Android 10 به‌روزرسانی‌های زیر را معرفی می‌کند.

Camera API

  • بهبودهای چنددوربینی که به دوربین‌های فیزیکی اجازه می‌دهد به‌صورت جداگانه یا ازطریق دوربین‌های منطقی مربوطه با پنهان کردن شناسه‌های دوربین فیزیکی استفاده شوند. پشتیبانی از چند دوربین را ببینید.
  • امکان بررسی اینکه آیا پیکربندی جلسه خاصی بدون سربار عملکرد ایجاد جلسه جدید پشتیبانی می‌شود یا نه. به CameraDevice مراجعه کنید.
  • امکان بازیابی پیکربندی‌های توصیه‌شده جاری‌سازی برای یک مورد استفاده خاص برای افزایش بهره‌وری انرژی و عملکرد کارخواه. به getRecommendedStreamConfigurationMap مراجعه کنید.
  • پشتیبانی از قالب تصویر JPEG عمق. برای جزئیات بیشتر، به مشخصات «عمق پویا» مراجعه کنید.
  • پشتیبانی از قالب تصویر HEIC. به تصویربرداری HEIF مراجعه کنید.
  • بهبود حریم خصوصی. برخی‌از کلیدها برای مشتری لازم است تا CAMERA اجازه‌ها را داشته باشد پیش‌از اینکه بتواند از CameraCharacteristics بازیابی شود. به getKeysNeedingPermission مراجعه کنید.

لایه انتزاع سخت‌افزار دوربین

نسخه‌های زیر Camera HAL در Android 10 به‌روزرسانی شده است.

۳.۵

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 مراجعه کنید.

۳.۴

کلیدهای زیر به فراداده دوربین در 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 به‌روزرسانی شده است.

۲.۵

  • روش notifyDeviceStateChange را برای دستگاه‌ها اضافه می‌کند تا وقتی تغییرات فیزیکی، مثل تا کردن، بر دوربین و مسیریابی تأثیر می‌گذارد، به HAL دوربین اطلاع دهند.

۲.۴

  • دستگاه‌هایی که با سطح میانای برنامه‌سازی کاربردی ۲۹ یا بالاتر راه‌اندازی می‌شوند باید true را برای isTorchModeSupported گزارش کنند.

Android 9

نسخه Android 9 به‌روزرسانی‌های زیر را در میانای برنامه‌سازی کاربردی دوربین ۲ و میانای HAL معرفی می‌کند.

Camera API

  • میانای برنامه‌سازی کاربردی چنددوربینه را برای پشتیبانی بهتر از دستگاه‌های دارای چند دوربین که در یک جهت قرار دارند معرفی می‌کند و ویژگی‌هایی مثل بوکه و بزرگ‌نمایی یکپارچه را فعال می‌کند. این کار به برنامه‌ها اجازه می‌دهد چندین دوربین را در یک دستگاه به‌عنوان یک واحد منطقی (دوربین منطقی) مشاهده کنند. درخواست‌های ضبط را می‌توان به دستگاه‌های دوربین تکی که در یک دوربین منطقی قرار دارند نیز ارسال کرد. به پشتیبانی از چند دوربین مراجعه کنید.
  • پارامترهای جلسه را معرفی می‌کند. پارامترهای جلسه زیرمجموعه‌ای از پارامترهای ضبط دردسترس هستند که درصورت تغییر دادن می‌توانند باعث تأخیرهای شدید در پردازش شوند. اگر کلاینت‌ها مقادیر اولیه خود را درطول مقداردهی اولیه جلسه ضبط ارسال کنند، این هزینه‌ها می‌تواند کاهش یابد. به پارامترهای جلسه مراجعه کنید.
  • کلیدهای داده لرزش‌گیر نوری (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 مراجعه کنید.

لایه انتزاع سخت‌افزار دوربین

۳.۴

به‌روزرسانی‌های ICameraDeviceSession

  • configureStreams_3_4: از sessionParameters و دوربین‌های منطقی پشتیبانی می‌کند.
  • processCaptureRequest_3_4: پشتیبانی از افزودن شناسه‌های دوربین فیزیکی به ساختار جاری‌سازی را اضافه می‌کند.

به‌روزرسانی‌های ICameraDeviceCallback

۳.۳

کلیدهای زیر به فراداده دوربین در 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 نسخه ۸.۰

نسخه Android 8.0،‏ Treble را معرفی می‌کند. با Treble، پیاده‌سازی‌های HAL دوربین فروشنده باید بایندرشده باشند. ‫Android 8.0 همچنین این بهبودهای کلیدی را در «خدمات دوربین» دارد:

  • سطوح مشترک: فعال کردن چندین سطح که یک OutputConfiguration مشترک دارند
  • میانای برنامه‌سازی کاربردی سیستم برای حالت‌های سفارشی دوربین
  • onCaptureQueueEmpty

برای اطلاعات بیشتر درباره این ویژگی‌ها، به بخش‌های زیر مراجعه کنید.

سطوح مشترک

این ویژگی فقط یک مجموعه از بافرها را فعال می‌کند تا دو برونداد را هدایت کند، مثل پیش‌نمایش و کدبندی ویدیو، که باعث کاهش مصرف برق و حافظه می‌شود. برای پشتیبانی از این ویژگی، سازندگان دستگاه باید مطمئن شوند که پیاده‌سازی‌های HAL دوربین و HAL تخصیص‌دهنده حافظه آن‌ها می‌توانند بافرهای تخصیص‌دهنده حافظه‌ای ایجاد کنند که توسط چندین مصرف‌کننده مختلف (مانند ترکیب‌کننده سخت‌افزاری/GPU و کدبند ویدیو) به‌جای فقط یک مصرف‌کننده استفاده شود. خدمات دوربین پرچم‌های استفاده مصرف‌کننده را به HAL دوربین و HAL gralloc منتقل می‌کند؛ این پرچم‌ها باید انواع صحیح بافرها را تخصیص دهند، یا HAL دوربین باید خطایی مبنی بر پشتیبانی نشدن از این ترکیب مصرف‌کنندگان برگرداند.

برای جزئیات بیشتر، به enableSurfaceSharing اسناد توسعه‌دهنده مراجعه کنید.

میانای برنامه‌سازی کاربردی سیستم برای حالت‌های سفارشی دوربین

میانای برنامه‌سازی کاربردی دوربین عمومی دو حالت عملکرد را تعریف می‌کند: ضبط عادی و ضبط پرسرعت محدودشده. این دو حالت معنایی نسبتاً متفاوتی دارند؛ برای مثال، حالت سرعت بالا حداکثر به دو برونداد خاص در یک زمان محدود می‌شود. تولیدکنندگان اصلی سخت‌افزار مختلفی برای تعریف کردن حالت‌های سفارشی دیگر برای قابلیت‌های خاص سخت‌افزار ابراز علاقه کرده‌اند. در پشت صحنه، حالت فقط یک عدد صحیح است که به configure_streams ارسال می‌شود. ببینید: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams.

این ویژگی شامل فراخوانی میانای برنامه‌سازی کاربردی سیستم است که برنامه‌های دوربین سازنده اصلی محصول می‌توانند از آن برای فعال کردن حالت سفارشی استفاده کنند. این حالت‌ها باید از مقدار عدد صحیح 0x8000 شروع شوند تا از تداخل با حالت‌های آینده که به میانای برنامه‌سازی کاربردی عمومی اضافه می‌شوند جلوگیری شود.

برای پشتیبانی از این ویژگی، سازندگان تجهیزات اصلی فقط باید حالت جدید را به HAL خود اضافه کنند، که با این عدد صحیح ارسال‌شده به HAL در configure_streams راه‌اندازی می‌شود، و سپس برنامه دوربین سفارشی‌شان از میانای برنامه‌سازی کاربردی سیستم استفاده کند.

نام روش android.hardware.camera2.CameraDevice#createCustomCaptureSession است. ببینید: frameworks/base/core/java/android/hardware/camera2/CameraDevice.

onCaptureQueueEmpty

هدف این API کاهش تأخیر در تغییرات کنترل مانند بزرگ‌نمایی با حفظ صف درخواست تا حد امکان خالی است. onCaptureQueueEmpty به کار در لایه انتزاع سخت‌افزار نیاز ندارد؛ این ویژگی صرفاً به چارچوب اضافه شده است. برنامه‌هایی که می‌خواهند از آن بهره ببرند باید شنونده‌ای به آن پاسخ‌گویی اضافه کنند و به‌طور مناسب پاسخ دهند. معمولاً این کار با ارسال درخواست ضبط دیگری به دستگاه دوربین انجام می‌شود.

میانای Camera HIDL

میانای Camera HIDL یک بازسازی کامل از میانای Camera HAL است که از «میاناهای برنامه‌سازی کاربردی» پایدار تعریف‌شده با HIDL استفاده می‌کند. همه ویژگی‌ها و قابلیت‌های دوربین معرفی‌شده در جدیدترین نسخه‌های قدیمی ۳.۴ و ۲.۴ (برای واحد دوربین) نیز بخشی از تعریف‌های HIDL هستند.

۳.۴

افزودن موارد جزئی به فراداده پشتیبانی‌شده و تغییرات در پشتیبانی از data_space:

  • اگر قالب RAW_OPAQUE پشتیبانی می‌شود، ANDROID_SENSOR_OPAQUE_RAW_SIZE فراداده ثابت را به‌عنوان اجباری اضافه کنید.
  • اگر از هر قالب RAW پشتیبانی می‌شود، ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGEفراداده ایستا را به‌عنوان اجباری اضافه کنید.
  • فیلد camera3_stream_t data_space را به تعریف انعطاف‌پذیرتری تغییر دهید، بااستفاده از تعریف نسخه ۰ کدگذاری فضای داده.
  • افزوده‌های فراداده عمومی که برای استفاده در 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

‫۳.۳

بازبینی جزئی HAL با قابلیت گسترش‌یافته:

  • به‌روزرسانی‌های میانای برنامه‌سازی کاربردی پردازش مجدد OPAQUE و YUV.
  • پشتیبانی پایه برای میان‌گیرهای خروجی عمق.
  • افزودن فیلد data_space به camera3_stream_t.
  • افزودن فیلد چرخش به camera3_stream_t.
  • افزودن حالت عملکرد عملیات پیکربندی جاری‌سازی camera3 به camera3_stream_configuration_t.

‫۲-۳

اصلاح جزئی «لایه انتزاع سخت‌افزار» با قابلیت‌های گسترده:

  • ‫get_metadata_vendor_tag_ops را منسوخ می‌کند. درعوض از get_vendor_tag_ops در camera_common.h استفاده کنید.
  • ‫register_stream_buffers را منسوخ می‌کند. همه بافرهای gralloc که چارچوب در process_capture_request به HAL ارائه می‌دهد ممکن است در هر زمانی جدید باشند.
  • پشتیبانی از نتایج جزئی را اضافه کنید. ممکن است process_capture_result چندین بار با زیرمجموعه‌ای از نتایج دردسترس فراخوانده شود تا نتیجه کامل دردسترس قرار گیرد.
  • افزودن الگوی دستی به camera3_request_template. برنامه‌ها می‌توانند از این الگو برای کنترل مستقیم تنظیمات ضبط استفاده کنند.
  • مشخصات جاری‌سازی ورودی و دوطرفه را بازسازی کنید.
  • مسیر برگشت میان‌گیر ورودی را تغییر دهید. به‌جای process_capture_request، process_capture_result برگردانده می‌شود.

‫۱-۳

اصلاح جزئی HAL با قابلیت‌های گسترده:

  • ‫configure_streams پرچم‌های استفاده مصرف‌کننده را به HAL منتقل می‌کند.
  • تماس تخلیه برای حذف کردن همه درخواست‌ها/میان‌گیرهای درحال پرواز در سریع‌ترین زمان ممکن.

۳٫۰

اولین نسخه بازبینی HAL با قابلیت‌های گسترده:

  • تغییر نسخه اصلی زیرا ABI کاملاً متفاوت است. هیچ تغییری در قابلیت‌های سخت‌افزاری موردنیاز یا مدل عملیاتی از نسخه ۲.۰ ایجاد نشده است.
  • رابط‌های صف جاری‌سازی و درخواست ورودی بازسازی‌شده: چارچوب با درخواست بعدی و میان‌گیرهای جاری‌سازی که قبلاً از صف خارج شده‌اند، HAL را فراخوانی می‌کند. پشتیبانی از چارچوب همگام‌سازی گنجانده شده است که برای پیاده‌سازی‌های کارآمد ضروری است.
  • محرک‌ها به درخواست‌ها، و بیشتر اعلان‌ها به نتایج منتقل شدند.
  • همه فراخوانی‌های برگشتی را در چارچوب در یک ساختار، و همه روش‌های راه‌اندازی را در یک فراخوانی initialize() ادغام کردیم.
  • پیکربندی جاری‌سازی را به یک تماس واحد تبدیل کردیم تا مدیریت جاری‌سازی را ساده‌تر کنیم. جاری‌سازی‌های دوطرفه جایگزین ساختار STREAM_FROM_STREAM می‌شوند.
  • معناشناسی حالت محدود برای دستگاه‌های سخت‌افزاری قدیمی‌تر/محدود.

۲٫۰

اولین نسخه پخش HAL با قابلیت‌های گسترده (Android 4.2) [camera2.h]:

  • برای پیاده‌سازی android.hardware.Camera API موجود کافی است.
  • امکان صف ZSL در لایه سرویس دوربین را فراهم می‌کند.
  • برای ویژگی‌های جدیدی مثل کنترل ضبط دستی، ضبط Bayer RAW، پردازش مجدد داده‌های RAW، و غیره آزمایش نشده است.

1.0

‫HAL اولیه دوربین Android (‏Android 4.0) [camera.h]:

  • از لایه انتزاعی C++ CameraHardwareInterface تبدیل شده است.
  • از میانای برنامه‌سازی کاربردی android.hardware.Camera پشتیبانی می‌کند.

سابقه نسخه واحد دوربین

این بخش حاوی اطلاعات نسخه‌بندی واحد سخت‌افزار «دوربین» براساس camera_module_t.common.module_api_version است. دو رقم هگزادسیمال مهم‌ترین نسخه اصلی را نشان می‌دهد و دو رقم کم‌اهمیت‌ترین نسخه فرعی را نشان می‌دهد.

2.4

این نسخه واحد دوربین تغییرات زیر را به «میانای برنامه‌سازی کاربردی» اضافه می‌کند:

  1. پشتیبانی از حالت چراغ‌قوه. این چارچوب می‌تواند حالت چراغ قوه را برای هر دستگاه دوربینی که واحد فلاش دارد، بدون باز کردن دستگاه دوربین، روشن کند. دستگاه دوربین نسبت به واحد فلاش نسبت به واحد دوربین اولویت بالاتری دارد؛ باز کردن دستگاه دوربین مشعل را خاموش می‌کند اگر ازطریق رابط واحد فعال شده باشد. وقتی تعارض منابعی وجود دارد، مثلاً open() برای باز کردن دستگاه دوربین فراخوانده می‌شود، واحد HAL دوربین باید ازطریق وضعیت برگشتی حالت چراغ قوه به چارچوب اطلاع دهد که حالت چراغ قوه خاموش شده است.
  2. پشتیبانی از دوربین خارجی (برای مثال، دوربین USB با قابلیت اتصال سریع). به‌روزرسانی‌های API مشخص می‌کند که اطلاعات ثابت دوربین فقط زمانی دردسترس است که دوربین متصل باشد و برای استفاده از دوربین‌های خارجی با قابلیت اتصال سریع آماده باشد. تماس‌های دریافت اطلاعات ثابت وقتی وضعیت دوربین CAMERA_DEVICE_STATUS_PRESENT نباشد، تماس‌های نامعتبر است. چارچوب فقط به برگشت‌های تغییر وضعیت دستگاه برای مدیریت فهرست دوربین خارجی دردسترس تکیه می‌کند.
  3. راهنمایی‌های داوری دوربین. پشتیبانی از نشان دادن صریح تعداد دستگاه‌های دوربین که می‌توانند به‌طور هم‌زمان باز و استفاده شوند را اضافه می‌کند. برای مشخص کردن ترکیب‌های معتبر دستگاه‌ها، فیلدهای resource_cost و conflicting_devices باید همیشه در ساختار camera_info که ازطریق تماس get_camera_info برگردانده می‌شود تنظیم شوند.
  4. روش مقداردهی اولیه واحد. پس‌از بارگیری واحد HAL، سرویس دوربین آن را فرا می‌خواند تا امکان مقداردهی اولیه یک‌باره HAL فراهم شود. این روش قبل‌از فراخوانی هر روش واحد دیگری فراخوانی می‌شود.

‫۳-۲

این نسخه واحد دوربین از دستگاه HAL دوربین قدیمی باز پشتیبانی می‌کند. اگر دستگاه یکسانی بتواند از چندین نسخه API دستگاه پشتیبانی کند، چارچوب می‌تواند از آن برای باز کردن دستگاه دوربین به‌عنوان دستگاه HAL با نسخه HAL پایین‌تر استفاده کند. فراخوان باز واحد سخت‌افزاری استاندارد (common.methods->open) همچنان دستگاه دوربین را با جدیدترین نسخه پشتیبانی‌شده باز می‌کند، که همان نسخه فهرست‌شده در camera_info_t.device_version است.

نسخه ۲.۲

این نسخه واحد دوربین پشتیبانی از برچسب فروشنده را از واحد اضافه می‌کند و vendor_tag_query_ops قدیمی را که قبلاً فقط با باز بودن دستگاه قابل‌دسترس بود منسوخ می‌کند.

نسخه ‎۲.۱

این نسخه از ماژول دوربین پشتیبانی از فراخوانی‌های ناهمگام به چارچوب را از ماژول HAL دوربین اضافه می‌کند، که برای اطلاع‌رسانی به چارچوب درباره تغییرات وضعیت ماژول دوربین استفاده می‌شود. واحد‌هایی که روش معتبر set_callbacks() را ارائه می‌دهند باید حداقل این شماره نسخه را گزارش کنند.

۲٫۰

پیمانه‌های دوربینی که این شماره نسخه را گزارش می‌کنند نسخه دوم رابط HAL پیمانه دوربین را پیاده‌سازی می‌کنند. دستگاه‌های دوربینی که ازطریق این واحد باز می‌شوند ممکن است از نسخه ۱.۰ یا نسخه ۲.۰ رابط سخت‌افزاری لایه انتزاعی دستگاه دوربین پشتیبانی کنند. فیلد device_version در camera_info همیشه معتبر است؛ فیلد static_camera_characteristics در camera_info درصورتی معتبر است که فیلد device_version‏ ۲٫۰ یا بالاتر باشد.

1.0

پیمانه‌های دوربین که این شماره‌های نسخه را گزارش می‌کنند، میانای HAL پیمانه دوربین اولیه را پیاده‌سازی می‌کنند. همه دستگاه‌های دوربین که ازطریق این واحد بازشدنی هستند فقط از نسخه ۱ «لایه انتزاع سخت‌افزاری» دستگاه دوربین پشتیبانی می‌کنند. فیلدهای device_version و static_camera_characteristics camera_info معتبر نیست. فقط میانای برنامه‌سازی کاربردی android.hardware.Camera می‌تواند توسط این واحد و دستگاه‌های آن پشتیبانی شود.