有一些特定于平台的解决方案。但是没有简单的通用解决方案。
Android 有一个硬件抽象层(HAL),不同的厂商会以不同的方式实现 HAL。例如,不同的相机设备可能有不同的驱动程序,所以他们有不同的方式来获取他们的数据,包括你的 cameraInfo。当 Android 将 API 添加到 HAL 中时,它要求其供应商基于其硬件实现该 API。然后 Android 框架和 Android 应用程序可以以统一的方式使用该功能。
但是,正如您所说,getCameraInfo 不在 Froyo 之前的 HAL 中。因此,一种直接的方法是自己从驱动程序或特定于平台的库中获取这些信息。
对于 MSM 相机,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。许多 if-else 来决定您需要使用哪个设备或哪个 ioctl 命令。祝你好运。