2

出于性能原因,我试图直接访问 android 中的 video 4 linux 设备并在其上执行传统的 v4l2 控制命令,根据我的 htc 需求,该设备被称为 /dev/msm_camera/config0 并且我设法打开它,但是当我在它上面尝试任何 ioctl 时,我总是得到“无效参数”,但它是在任何 linux 系统上都可以正常工作的相同代码,那么 android 有什么区别?以下是查询设备功能的代码示例:

static struct v4l2_capability x_vcap;

if (ioctl(x_conffd, VIDIOC_QUERYCAP, &x_vcap) < 0)
{
   __android_log_write(ANDROID_LOG_ERROR, "libcamera", strerror(errno));
   __android_log_write(ANDROID_LOG_ERROR, "libcamera", "Could not get camera capabitilites.");
}
else
{
    __android_log_write(ANDROID_LOG_INFO, "libcamera", "Got capabilities.");
    sprintf(message, "driver info: %s %d.%d.%d / %s @ %s", x_vcap.driver, (x_vcap.version >> 16) & 0xff, (x_vcap.version >>  8) & 0xff, x_vcap.version & 0xff, x_vcap.card, x_vcap.bus_info);
    __android_log_write(ANDROID_LOG_INFO, "libcamera", message );
}

我真的需要访问 v4l2 以获得比 Camera java 类提供的更好的帧速率,所以请不要直接告诉我 Camera android 类。

感谢您的任何提示,sevy

4

1 回答 1

2

在通用 Linux 操作系统中,还有另一个驱动程序控制用户空间和相机硬件(easycap 和 videodev)之间的通信。您使用的 IOCTL 命令特定于该驱动程序。
对于 Qualcomm 平台(意味着您的 HTC Desire 与 Qualcomm 处理器),他们为他们的摄像头模块构建了一个自定义摄像头驱动程序,该驱动程序与硬件有不同的接口(不同的 IOCTL 命令集)。该界面可以在这里找到,或者至少是它的一个版本。

因此,您的 IOCTL 调用返回“无效参数”,因为它找不到“VIDIOC_QUERYCAP”命令。

如果答案来得太晚,我希望它会有所帮助。

于 2013-07-05T13:25:04.430 回答