Android カメラ - アーキテクチャ

導入:

主に Android カメラシステムの CameraAPI v2 + HAL3 のアーキテクチャを整理することです。

カメラのアーキテクチャ

 アプリとフレームワーク

カメラ API v2 は次の場所にあります。

パッケージ/アプリ/Camer2

フレームワーク/ex/camera2 

アプリケーション フレームワーク レベルでは、Camera2 API を使用してカメラのハードウェアと対話します。Binder インターフェイスを呼び出してネイティブ レイヤー コードにアクセスし、カメラを設定します。

AIDL

CameraService に関連付けられたバインダー インターフェイスは次の場所にあります。

フレームワーク/av/カメラ/aidl/android/ハードウェア

AIDL によって生成された Java コードは、natvie 層にアクセスし、物理デバイスのカメラのアクセス許可を取得し、アプリケーション フレームワーク層に戻って CameraDevice を作成し、最後に CameraCaptureSession を作成します。

ネイティブフレームワーク

CameraDevice クラスと CameraCaptureSession クラスのネイティブ クラスは、次の場所にあります。

フレームワーク/AV/カメラ

カメラデバイス:

カメラキャプチャセッション:

バインダー IPC インターフェース

クロスプロセス通信を実装します。カメラ サービスを呼び出すバインダー クラスは、次のパスにあります。

フレームワーク/av/カメラ/aidl/android/ハードウェア

ICameraService: カメラ サービスのインターフェイス

ICameraDeviceUser: 開いている特定のカメラ デバイス

ICameraServiceListener: アプリケーション フレームワーク層の CameraService のコールバック

ICameraDeviceCallbacks:フレームワーク層を適用するために使用されるCameraDevice のコールバック

カメラサービス

CameraService の実装クラスは次の場所にあります。

フレームワーク/av/サービス/カメラ/libcameraservice/CameraService.cpp

実際に HAL と対話するコード

ハル

CameraService によって呼び出されるカメラ ハードウェア操作の標準インターフェイスの実装を提供します

フィルター

カメラ HAL の HIDL インターフェイス定義は次の場所にあります。

ハードウェア/インターフェース/カメラ

実装が必要なカメラサービスのHAL(ハードウェアアブストラクトレイヤー)層標準インターフェース

HALの実装

HAL レイヤーは、カメラ ドライバーと Android フレームワークの間に位置します。

HAL は、アプリケーションがカメラ ハードウェアを適切に操作できるように実装する必要があるインターフェイスを定義します。

一般的な HAL バインダーは、次の HIDL インターフェイスを実装する必要があります。 

ICameraProvider: 個々のカメラ デバイスを列挙し、その状態を管理するために使用されます。

ICameraDevice: カメラデバイスのインターフェース

ICameraDeviceSession: アクティブなカメラ デバイス セッション インターフェイス

入力検証

HAL はカメラ サービスとは異なるリソースにアクセスできるため、この 2 つの境界はセキュリティ境界とみなされます。

したがって、カメラ HAL は、カメラ サービスから HAL レイヤーに渡されるパラメーターを検証する必要があります。これには、バッファ長の値が許容範囲内であることのチェック、パラメータが使用されてハードウェアまたはカーネル ドライバに渡される前にパラメータをサニタイズすることが含まれます。

おすすめ

転載: blog.csdn.net/haigand/article/details/132439967