プラットフォーム固有のソリューションがいくつかあります。しかし、簡単な一般的な解決策はありません。
Android には Hardware Abstract Layer (HAL) があり、ベンダーによって HAL の実装方法が異なります。たとえば、カメラ デバイスごとにドライバーが異なる場合があるため、cameraInfo などのデータを取得する方法も異なります。Android が HAL に API を追加すると、ベンダーはハードウェアに基づいてその API を実装する必要があります。その後、Android フレームワークと Android アプリケーションは、その機能を統一された方法で使用できます。
ただし、おっしゃる通り、getCameraInfo は Froyo の前の HAL にはありません。したがって、直接的なアプローチは、ドライバーまたはプラットフォーム固有のライブラリからこれらの情報を自分で取得することです。
MSM Cameraの場合、 にmm_camera_get_camera_info
機能がありliboemcamera.so
ます。これを使用して、camera_info_t 構造体のリストを取得できます。
typedef struct {
int modes_supported;
int8_t camera_id;
cam_position_t position;
uint32_t sensor_mount_angle;
}camera_info_t;
この関数は、ターゲット カメラ デバイスへの実際のシステム コールをカプセル化します。ioctl(controlfd, MSM_CAM_IOCTL_GET_CAMERA_INFO, &cameraInfo)
. 必要に応じて直接呼び出すこともできます。
残念ながら、作業しているデバイスに基づいてその情報を取得する必要があります。しかし、一般的なアプローチを期待しているかもしれません。これを実現する唯一の方法は、HAL を自分で実装することだと思います。どのデバイスまたはどの ioctl コマンドを使用する必要があるかを決定するための多くの if-else。頑張ってください。