在android中访问v4l2?

在android中访问v4l2?,android,v4l2,Android,V4l2,出于性能原因,我试图直接访问android中的video 4 linux设备,并在其上执行传统的v4l2控制命令,根据我的htc愿望,该设备名为/dev/msm_camera/config0,我设法打开它,但当我在其上尝试任何ioctl时,我总是得到“无效参数”,但它的代码在任何linux系统上都可以正常工作,那么android的区别是什么呢?以下是查询设备功能的代码示例: static struct v4l2_capability x_vcap; if (ioctl(x_conffd, VI

出于性能原因,我试图直接访问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\u功能x\u vcap;
if(ioctl(x_conffd、VIDIOC_QUERYCAP和x_vcap)<0)
{
__android_log_write(android_log_错误,“libcamera”,strerror(errno));
__android_log_write(android_log_错误,“libcamera”,“无法获取摄像头Capabilites”);
}
其他的
{
__android_log_write(android_log_INFO,“libcamera”,“Got capabilities”);
sprintf(消息,“驱动程序信息:%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\u信息);
__安卓日志写入(安卓日志信息,“libcamera”,消息);
}
我真的需要访问v4l2以获得比Camera java类提供的更好的帧速率,所以请不要直接告诉我Camera android类

谢谢你的提示,
sevy

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

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


我希望答案不会来得太晚会有帮助

我知道有一个摄像头服务也一直在运行和更新,是什么促使我直接访问该设备?