Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

カメラ バージョンのサポート

このページでは、Camera HAL、API、および関連する互換性テストスイート(CTS)テストのバージョンの違いについて説明します。また、カメラ フレームワークを強化し、安全性を高めるための Android 7.0 でのアーキテクチャの変更、Android 8.0 での Treble への移行、そしてカメラ実装の際にこれらの変更をサポートするためにベンダーが行うべき更新についても説明します。

用語

このページで使用される用語は次のとおりです。

Camera API1
android.hardware.Camera クラスで公開される、Android 4.4 以前のデバイスのアプリレベルのカメラ フレームワーク。
Camera API2
android.hardware.camera2パッケージで公開される、Android 5.0 以降のデバイスのアプリレベルのカメラ フレームワーク。
Camera HAL
SoC ベンダーが実装するカメラ モジュール レイヤ。アプリレベルの公開フレームワークは Camera HAL 上に構築されます。
Camera HAL3.1
Android 4.4 でリリースされたカメラデバイス HAL のバージョン。
Camera HAL3.2
Android 5.0 でリリースされたカメラデバイス HAL のバージョン。
Camera API1 CTS
Camera API1 上で実行されるカメラ CTS テストのセット。
Camera API2 CTS
Camera API2 上で実行されるカメラ CTS テストの追加セットです。
Treble
新しいベンダー インターフェースを使用して、ベンダー実装(シリコン メーカーが作成したデバイス固有の下位レベルのソフトウェア)を Android OS フレームワークから分離します。
HIDL
HAL インターフェース定義言語(HAL interface definition language)の略称。Treble で導入され、HAL とユーザー間のインターフェースを指定する目的で使用されます。
VTS
ベンダーテスト スイート(Vendor test suite)の略称。Treble とともに導入されました。

Camera API

Android には次の Camera API が含まれます。

Camera API1

Camera API1 は Android 5.0 でサポート終了になりました。新しいプラットフォームの開発は Camera API2 が中心であり、Camera API1 は段階的に廃止されています。ただし、段階的廃止には時間がかかるため、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 の機能がサポートされているわけではありません。アプリが Camera API2 インターフェースを通じてクエリできる android.info.supportedHardwareLevel プロパティは、次のいずれかのサポートレベルをレポートします。

  • LEGACY: このデバイスは、Camera API1 インターフェースを通じてアプリに公開される機能とほぼ同じ機能を、Camera API2 インターフェースを通じてアプリに公開します。レガシー フレームワーク コードは、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 ウェブカメラなどの外部カメラに使用されます。

個々の機能は、Camera API2 インターフェースの android.request.availableCapabilities プロパティを介して公開されます。FULL デバイスでは特に、MANUAL_SENSOR および MANUAL_POST_PROCESSING 機能が必要になります。FULL デバイスでも RAW 機能はオプションです。LIMITED デバイスでは、Camera API2 の機能をサブセットでアドバタイズできます(機能をまったくアドバタイズしないことも可能)。ただし、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 以降を実行しているデバイスは、Camera API1 CTS、Camera API2 CTS、および CTS Verifier カメラテストにパスする必要があります。

Camera HAL3.2 を実装しておらず、Camera API2 インターフェースをすべてサポートできないデバイスでも、Camera API2 CTS テストに合格する必要があります。ただし、デバイスが Camera API2 LEGACY モード(Camera API2 呼び出しが Camera API1 呼び出しに概念的にマッピングされる)で実行されている場合、Camera API1 以上の機能に関する Camera API2 CTS テストは自動的にスキップされます。

レガシー デバイスで Camera API2 CTS テストを実行する場合、既存の公開 Camera API1 インターフェースと機能が使用され、新しい要件は設定されません。公開されているバグ(および Camera API2 CTS テストの不合格の原因となるバグ)は、デバイスの既存の Camera HAL にすでに存在しているバグであるため、既存の Camera API1 アプリで検出されます。このようなバグは、大量には発生しません(ただし Camera API2 CTS テストに合格するには、そのようなバグを修正する必要があります)。

VTS 要件

バインドされた HAL を実装し、Android 8.0 以降を実行するデバイスは、Camera VTS テストに合格する必要があります。

カメラ フレームワークの強化

メディア フレームワークとカメラ フレームワークのセキュリティを強化するため、Android 7.0 ではカメラサービスがメディア サーバーから分離されています。Android 8.0 以降、バインダ化された各 Camera HAL はカメラサービスとは別のプロセスで実行されています。ベンダーは、使用する API および HAL バージョンに応じて、Camera HAL を変更する必要があります。次のセクションでは、HAL1 と HAL3 における API1 と API2 のアーキテクチャ変更、および一般的な要件について詳しく説明します。

API1 のアーキテクチャ変更

API1 の動画録画は、カメラと動画エンコーダが同じプロセスに存在するとみなすことができます。HAL3 と HAL1 上で API1 アプリを実行する場合の違いを以下に示します。

  • HAL3 の場合、カメラサービスは BufferQueue を使用してプロセス間でバッファを渡すため、ベンダーによる更新は不要です。

    HAL3 上で API1 アプリを実行する場合の Android 7.0 カメラとメディア スタック

    図 1. HAL3 上で API1 アプリを実行する場合の Android 7.0 カメラとメディア スタック

  • HAL1 の場合、動画バッファ内でメタデータの受け渡しをサポートするため、ベンダーは HAL を更新してから kMetadataBufferTypeNativeHandleSource を使用する必要があります。Android 7.0 以降、kMetadataBufferTypeCameraSource はサポートされません。

    HAL1 上で API1 アプリを実行する場合の Android 7.0 カメラとメディア スタック

    図 2. HAL1 上で API1 アプリを実行する場合の Android 7.0 カメラとメディア スタック

API2 のアーキテクチャ変更

HAL1 または HAL3 上で API2 アプリを実行する場合、どちらも BufferQueue でバッファが渡されるため、このパスは引き続き動作します。HAL1 と HAL3 で API2 アプリを実行する場合の Android 7.0 アーキテクチャの違いを以下に示します。

  • HAL1 の場合、アーキテクチャはカメラサービスの移動の影響を受けず、ベンダーによる更新は不要です。
  • HAL3 の場合、アーキテクチャは影響を受けますがベンダーによる更新は不要です。

    HAL3 上で API2 アプリを実行する場合の Android 7.0 カメラとメディア スタック

    図 3. HAL3 上で API2 アプリを実行する場合の Android 7.0 カメラとメディア スタック

追加の要件

メディア フレームワークとカメラ フレームワークのセキュリティを強化するためのアーキテクチャの変更により、次のデバイス要件が追加されています。

  • 一般: デバイスでは IPC のために追加の帯域幅が必要となります。これは、高速性が求められる高速動画録画など、特定のカメラのユースケースに影響を与える可能性があります。ベンダーは、android.hardware.camera2.cts.PerformanceTest と、Google カメラアプリで 120/240 FPS の高速動画録画を実行することにより、実際の影響を測定できます。また、新しいプロセスを作成するためにデバイスに追加の RAM が少し必要になります。
  • 動画バッファのメタデータに渡す(HAL1 のみ): HAL1 が実際の YUV フレームデータの代わりにメタデータを動画バッファに格納する場合、HAL は kMetadataBufferTypeNativeHandleSource をメタデータ バッファタイプとして使用し、動画バッファに VideoNativeHandleMetadata を渡す必要があります(kMetadataBufferTypeCameraSource は Android 7.0 ではサポートされなくなりました)。VideoNativeHandleMetadata により、カメラ フレームワークとメディア フレームワークは、ネイティブ ハンドルを適切にシリアル化およびシリアル化解除することで、プロセス間で動画バッファを渡すことができます。
  • バッファ ハンドル アドレスは、常に同じバッファを格納するとは限らない(HAL3 のみ): HAL3 は各キャプチャ リクエストでバッファ ハンドルのアドレスを受け取ります。HAL はアドレスを使用してバッファを識別することはできません。これは、HAL がバッファを返した後にそのアドレスが別のバッファ ハンドルを格納する可能性があるためです。バッファ ハンドルを使用してバッファを識別できるよう、HAL を更新する必要があります。たとえば、HAL がバッファ ハンドル A を格納するバッファ ハンドル アドレス A を受け取ります。HAL がバッファ ハンドル A を返すと、次に HAL がバッファ ハンドル A を受け取るときにはバッファ ハンドル アドレス A にはバッファ ハンドル B が格納されている可能性があります。
  • カメラサーバーの SELinux ポリシーを更新する: デバイス固有の SELinux ポリシーがメディア サーバーにカメラを実行するための権限を付与する場合、カメラサーバーに適切な権限を付与するように SELinux ポリシーを更新する必要があります。カメラサーバー用にメディアサーバーの SELinux ポリシーを複製することはおすすめしません(メディアサーバーとカメラサーバーでは一般的に、システムで必要とするリソースが通常は異なります)。カメラサーバーはカメラ機能を実行するために必要な権限のみ保持すべきであり、メディア サーバーのカメラに関連する不要な権限は削除する必要があります。
  • Camera HAL とカメラサーバー間の分離: 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 テスト チェックリストをご覧ください。

Android 10

Android 10 で以下のアップデートが導入されます。

Camera API

  • マルチカメラの改善。これにより、個別に物理カメラを使用することも、物理カメラ ID を隠して対応する複数の論理カメラを通じて物理カメラを使用することもできるようになりました。マルチカメラ サポートをご覧ください。
  • セッションを新しく作成してパフォーマンス オーバーヘッドを発生させることなく、特定のセッション設定がサポートされているかを確認するための機能。CameraDevice をご覧ください。
  • 特定のユースケースに対して推奨されるストリーム構成を取得し、クライアントの電力効率とパフォーマンスを向上させる機能。getRecommendedStreamConfigurationMap をご覧ください。
  • 深度 JPEG 画像形式のサポート。詳細については、Dynamic Depth の指定をご覧ください。
  • HEIC 画像形式のサポート。HEIF イメージングをご覧ください。
  • プライバシーの改善。クライアントが CameraCharacteristics から CAMERA 権限を取得するには、特定のキーが必要になります。getKeysNeedingPermission をご覧ください。

Camera HAL

Android 10 では次の Camera HAL バージョンが更新されています。

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics: 論理カメラデバイスに関連付けられている物理カメラ ID の静的カメラ情報。マルチカメラ サポートをご覧ください。
  • isStreamCombinationSupported: このメソッドは、セッション構成がサポートされているかどうかをクライアントがクエリするための公開 API をサポートします。ストリームの組み合わせをクエリするための API をご覧ください。

ICameraDeviceSession

  • isReconfigurationNeeded: 新しいセッション パラメータ値に対して、ストリームを完全に再構成する必要があるかどうかをカメラ フレームワークに伝えるためのメソッドです。これにより、不要なカメラの再構成に伴う遅延を回避できます。セッション再構成クエリをご覧ください。
  • HAL buffer management API : この API により、Camera HAL はカメラ パイプライン全体で各キャプチャ リクエストとそれに関連するバッファをカップリングするのではなく、必要な場合にのみカメラ フレームワークからバッファをリクエストできるようになるため、メモリを大幅に節約できます。
    • signalStreamFlush: カメラサービスが configureStreams_3_5 を実行しようとしていること、および HAL が指定ストリームのすべてのバッファを返す必要があることを HAL に通知します。
    • configureStreams_3_5: ICameraDevice3.4.configureStreams に似ていますが、それに加えて configureStreams_3_5signalStreamFlush の呼び出し間の競合状態をチェックできる streamConfigCounter カウンタを備えています。

ICameraDeviceCallback の更新は以下のとおりです。

  • requestStreamBuffers: Camera HAL がカメラサーバーにバッファを要求するために呼び出す同期コールバック。requestStreamBuffers をご覧ください。
  • returnStreamBuffers: 出力バッファをカメラサーバーに返す Camera 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
  • 使用可能な Dynamic Depth ストリーム構成
    • 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

  • 折りたたみなど、物理的な変更がカメラとルーティングに影響する場合に、デバイスがそのことを Camera HAL に通知するための notifyDeviceStateChange メソッドが追加されました。

2.4

  • API レベル 29 以上で起動するデバイスは isTorchModeSupported に対して true をレポートする必要があります。

Android 9

Android 9 リリースでは、Camera API2 と HAL インターフェースに対して以下の更新が導入されました。

Camera API

  • multi-camera API が導入され、同方向のカメラを複数搭載したデバイスのサポートが向上しました。これにより、ボケやシームレスなズームなどの機能が追加されました。また、デバイスの複数のカメラを 1 つの論理ユニットとして表示することも可能になりました。1 台の論理カメラとしてまとめられた個々のカメラデバイスにキャプチャ リクエストを送信できるようになりました。マルチカメラ サポートをご覧ください。
  • セッション パラメータが導入されました。セッション パラメータは利用可能なキャプチャ パラメータのサブセットです。キャプチャ パラメータが変更されると、深刻な処理遅延が発生することがあります。この遅延は、キャプチャ セッションの初期化中にクライアントが初期値を渡すことで、軽減できます。セッション パラメータをご覧ください。
  • アプリケーション レベルの安定化と効果を実現するために、光学式手ぶれ補正(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: ストリーム構造に物理カメラ ID を含めるためのサポートが追加されました。

ICameraDeviceCallback の更新は以下のとおりです。

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

Android 8.0 リリースでは Treble が導入されました。Treble では、ベンダーの Camera HAL 実装はバインダ化されている必要があります。Android 8.0 には、カメラサービスの以下の主要な拡張機能が含まれています。

  • 共有サーフェス: 複数のサーフェスで同じ OutputConfiguration を共有できるようになりました。
  • カスタム カメラモード用のシステム API
  • onCaptureQueueEmpty

これらの機能の詳細については、以下のセクションをご覧ください。

共有サーフェス

この機能により、単一のバッファセットで、プレビューと動画エンコーディングなどの 2 つの出力に対応できるようになり、電力とメモリの消費が削減されます。デバイス メーカーがこの機能をサポートするには、単一のコンシューマではなく、複数の異なるコンシューマ(ハードウェア コンポーザ /GPU や動画エンコーダなど)によって使用される gralloc バッファを camera HAL および gralloc HAL 実装で作成できるようにする必要があります。カメラサービスは、コンシューマの使用フラグを camera HAL および gralloc HAL に渡します。両方の HAL が適切な種類のバッファを割り当てるか、このコンシューマの組み合わせがサポートされていないことを示すエラーを camera HAL が返す必要があります。

詳細については、 enableSurfaceSharing のデベロッパー ドキュメントをご覧ください。

カスタムカメラ モード用のシステム API

公開カメラ API は、通常録画または制限付き高速録画の 2 つの動作モードを定義します。この 2 つのモードのセマンティクスはかなり異なります。たとえば、高速モードでは、出力が一度に最大で 2 つに制限されます。さまざまな OEM で、ハードウェア固有の機能に合わせて、これらのモード以外のカスタムモードが定義されています。これらのモードは、内部では単なる整数として configure_streams に渡されます。hardware/camera/device/3.2/ICameraDeviceSession#configurestreams をご覧ください。

この機能には、OEM カメラアプリがカスタムモードを有効化するために使用できるシステム API の呼び出しが含まれます。これらのモードは、公開 API に追加される将来のモードとの競合を避けるため、整数値 0x8000 で開始する必要があります。

OEM がこの機能をサポートするには、まず新しいモードを HAL に追加します。次に、configure_streams でこの整数を HAL に渡して新しいモードをトリガし、カスタム カメラアプリでシステム API を使用するようにするだけで、この機能をサポートできます。

メソッド名は android.hardware.camera2.CameraDevice#createCustomCaptureSession です。frameworks/base/core/java/android/hardware/camera2/CameraDevice をご覧ください。

onCaptureQueueEmpty

この API の目的は、リクエスト キューを可能な限り空にして、ズームなどの制御変更で発生する遅延を短縮することです。onCaptureQueueEmpty は HAL 側での作業を必要としません。フレームワーク側で作業が追加されるだけです。アプリケーションでこの API のメリットを活用する場合、そのコールバックをリッスンするリスナーを追加し、適切に応答する必要があります。通常、コールバックに適切に応答するには、追加のキャプチャ リクエストをカメラデバイスに送信します。

Camera HIDL インターフェース

Camera HIDL インターフェースは、Camera HAL インターフェースを全面的に見直したものであり、安定性に優れた HIDL 定義の API を使用します。最新のレガシー バージョン 3.4 および 2.4(カメラ モジュール用)で導入されたすべての機能とカメラ能力もまた、HIDL 定義の一部です。

3.4

サポート対象のメタデータへのマイナーな追加と、data_space サポートの変更が行われました。

  • RAW_OPAQUE 形式がサポートされている場合、ANDROID_SENSOR_OPAQUE_RAW_SIZE 静的メタデータを必須として追加します。
  • RAW 形式がサポートされている場合、ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE 静的メタデータを必須として追加します。
  • データスペース エンコーディングのバージョン 0 定義を使用して、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

3.3

拡張機能 HAL のマイナー リビジョンです。

  • OPAQUE および YUV 再処理 API が更新されました。
  • 深度出力バッファの基本なサポートが追加されました。
  • camera3_stream_tdata_space フィールドが追加されました。
  • camera3_stream_t に回転フィールドが追加されました。
  • camera3_stream_configuration_t に camera3 ストリーム構成オペレーション モードが追加されました。

3.2

拡張機能 HAL のマイナー リビジョンです。

  • get_metadata_vendor_tag_ops のサポートが終了しました。代わりに camera_common.hget_vendor_tag_ops が使用されます。
  • register_stream_buffers のサポートが終了しました。フレームワークによって process_capture_request の HAL に提供されるすべての gralloc バッファは、常に新しいバッファである可能性があります。
  • 部分的な結果のサポートが追加されました。完全な結果が使用可能になるまで、使用可能な結果のサブセットを使用して process_capture_result が複数回呼び出されることがあります。
  • camera3_request_template にマニュアル テンプレートが追加されました。アプリケーションはこのテンプレートを使用して、キャプチャ設定を直接制御できます。
  • 双方向ストリームと入力ストリームの仕様が再構築されました。
  • 入力バッファの戻りパスが変更されました。バッファは、process_capture_request の代わりに process_capture_result に返されます。

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 Camera HAL(Android 4.0)[camera.h] です。

  • C ++ CameraHardwareInterface アブストラクション レイヤから変換されました。
  • android.hardware.Camera API をサポートします。

カメラ モジュールのバージョン履歴

このセクションには、camera_module_t.common.module_api_version に基づく、カメラ ハードウェア モジュールのモジュール バージョニング情報が掲載されています。16 進数の最上位 2 桁はメジャー バージョンを、最下位 2 桁はマイナー バージョンを表します。

2.4

このカメラ モジュールのバージョンでは、次の API の変更が適用されています。

  1. 懐中電灯モードのサポート。このフレームワークでは、フラッシュ ユニットを備えたカメラデバイスで、カメラデバイスを開かずに懐中電灯モードをオンにできます。カメラデバイスは、フラッシュ ユニットへのアクセスについてカメラ モジュールに優先します。フラッシュがモジュール インターフェースにより有効化されていた場合、カメラデバイスを開くとフラッシュがオフになります。open() が呼び出されてカメラデバイスが開かれている場合など、リソースの競合が発生する場合、camera HAL モジュールは、懐中電灯モードがオフになったことを懐中電灯モード ステータスのコールバックによりフレームワークに通知する必要があります。
  2. 外部カメラ(USB ホットプラグ カメラなど)のサポート。この API の更新では、カメラが接続され、外部ホットプラグ カメラに対して使用する準備ができている場合にのみ、カメラの静的情報の使用を許可します。静的情報を取得する呼び出しは、カメラ ステータスが CAMERA_DEVICE_STATUS_PRESENT であるとき以外は無効です。フレームワークはデバイス ステータスの変更に関するコールバックのみをカウントして、使用可能な外部カメラリストを管理します。
  3. カメラ間の調整のヒント。同時に開いて使用できるカメラデバイスの数を明示的に示すためのサポートが追加されました。デバイスの有効な組み合わせを指定するには、get_camera_info 呼び出しによって返される camera_info ストラクチャ内で resource_cost および conflicting_devices フィールドを常に設定する必要があります。
  4. モジュールの初期化メソッド。HAL モジュールが読み込まれて HAL の 1 回限りの初期化が許可された後、カメラサービスによって呼び出されます。初期化メソッドは他のモジュール メソッドよりも前に呼び出されます。

2.3

このカメラ モジュール バージョンでは、オープンなレガシー camera HAL デバイスのサポートが追加されました。同じデバイスが複数デバイスの API バージョンをサポートできる場合、フレームワークはこのサポートにより、下位デバイス HAL バージョンの HAL デバイスとしてカメラデバイスを開くことができます。標準ハードウェア モジュールのオープン呼び出し(common.methods->open)は、サポート対象の最新バージョン(camera_info_t.device_version にリストされているバージョン)のカメラデバイスを引き続き開きます。

2.2

このカメラ モジュール バージョンでは、モジュールからのベンダータグのサポートが追加され、以前はデバイスを開いた状態でのみアクセスできた古い vendor_tag_query_ops のサポートが終了しました。

2.1

このカメラ モジュール バージョンでは、camera HAL モジュールからフレームワークへの非同期コールバックのサポートが追加されました。この非同期コールバックを使用することで、カメラ モジュールの状態の変更をフレームワークに通知できます。有効な set_callbacks() メソッドを提供するモジュールでは、少なくともこのバージョン番号をレポートする必要があります。

2.0

このバージョン番号をレポートするカメラ モジュールでは、2.0 バージョンのカメラ モジュール HAL インターフェースが実装されます。このモジュールで開くことができるカメラデバイスは、バージョン 1.0 またはバージョン 2.0 のいずれかのカメラデバイス HAL インターフェースをサポートします。camera_info の device_version フィールドは常に有効です。つまり、device_version フィールドが 2.0 以上の場合、camera_infostatic_camera_characteristics フィールドは有効です。

1.0

このバージョン番号をレポートするカメラ モジュールでは、初期カメラ モジュール HAL インターフェースが実装されます。このモジュールで開くことができるすべてのカメラデバイスは、バージョン 1 のカメラデバイス HAL のみをサポートします。camera_infodevice_version および static_camera_characteristics フィールドは有効ではありません。このモジュールとそのデバイスでサポートできるのは android.hardware.Camera API のみです。