m_nCameraFd = open(m_szDevName, O_RDWR | O_NONBLOCK);
if (m_nCameraFd < 0) {
LOGE("open %s failed", m_szDevName);
close(m_nCameraFd);
return -1;
}
struct v4l2_capability cap;
if (ioctl(m_nCameraFd, VIDIOC_QUERYCAP, &cap) == -1) {
LOGE("%s VIDIOC_QUERYCAP failed!", m_szDevName);
close(m_nCameraFd);
return -1;
}
struct v4l2_fmtdesc fmtdesc;
memset(&fmtdesc, 0x00, sizeof(v4l2_fmtdesc));
fmtdesc.index = 0;
fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
while (ioctl(m_nCameraFd, VIDIOC_ENUM_FMT, &fmtdesc) == 0) {
fmtdesc.index++;
}
struct v4l2_format fmt;
memset(&fmt, 0x00, sizeof(v4l2_format));
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
fmt.fmt.pix.width = 640;
fmt.fmt.pix.height = 480;
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
if (ioctl(m_nCameraFd, VIDIOC_S_FMT, &fmt) == -1) {
LOGE("%s VIDIOC_S_FMT failed! %d", m_szDevName, errno);
close(m_nCameraFd);
return -1;
}
打开/dev/video3没有报错
设置fmt的时候报错, errno是19,我察看了一下,19对应的是ENODEV
第二个USB摄像头(/dev/video4)正常
[ 此帖被lzx_0728在2012-08-08 15:47重新编辑 ]