描述:
使用v4l对摄像头访问的时候出现错误。
可以通过xawtv启动摄像头(并看到视频输出)。
但是按照如下步骤访问摄像头的时候,出现错误。
相关代码段:
vid->fd = open(vid->dev, O_RDWR);// vid是自定义结构,vid->fd放摄像头的文件描述符,这里没有错误
//异常处理。省略。
if(ioctl(vid->fd,VIDIOCGCAP,&vd) < 0){ //查询设备信息,这里也没问题
printf("ioctl failed\n");
free( vid );
return 0;
}
//输出调试输出信息。自动选择通道。省略
for(i = 0;i < vd.channels && i < MAXCHANNEL; i++){
vc[i].channel = i;
if(ioctl(vid->fd,VIDIOCGCHAN,&vc[i]) < 0){ //查询channel信息,这里出了问题。
printf("error: acquireing channel(%d) info\n",i);
free( vid );
return 0;
}
gdb 输出::
vd = {name = "USB 2.0 PC Cam", '\0' <repeats 17 times>, type = 1,
channels = 1, audios = 0, maxwidth = 640, maxheight = 480, minwidth =
48, minheight = 32}
vc[i] = {channel = 0, name =
"\000\000\000\000\001\000\000\000H\005\000\000\000\000\000\000h��m̷\000b̷�̷",
tuners = 1, flags = 3085987828, type = 32612, norm = 58322}
问题:
为什么查询通道错误?是v4l模块的问题,还是uvc模块的问题,还是其他别的问题?
哪位遇到过类似问题?
Part of output of "lsusb -v":
Bus 005 Device 004: ID 090c:b370 Feiya Technology Corp.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 239 Miscellaneous Device
bDeviceSubClass 2 ?
bDeviceProtocol 1 Interface Association
bMaxPacketSize0 64
idVendor 0x090c Feiya Technology Corp.
idProduct 0xb370
bcdDevice 1.00
iManufacturer 1
iProduct 2
iSerial 0
bNumConfigurations 1
Output of "lsmod | grep video":
uvcvideo 45576 0
compat_ioctl32 1312 1 uvcvideo
videodev 27520 1 uvcvideo
v4l1_compat 12260 2 uvcvideo,videodev
video 16400 0
output 2912 1 video
usbcore 118160 6 uvcvideo,usbhid,usb_storage,ehci_hcd,uhci_hcd
thermal_sys 10856 4 video,thermal,processor,fan
Attachment:
完整代码段
Description: Binary data