天嵌 ARM开发社区

 找回密码
 注册
查看: 5748|回复: 23

使用爱友摄像头时,遇到的问题

[复制链接]
jushui 发表于 2012-12-14 20:18:21 | 显示全部楼层 |阅读模式
是用爱友的摄像头时,终端给出的信息如下:
usb 1-1: New USB device found, idVendor=0ac8, idProduct=c40e
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1: Product: Vimicro USB2.0 UVC PC Camera
usb 1-1: Manufacturer: Vimicro Co.,ltd
usb 1-1: configuration #1 chosen from 1 choice
uvcvideo: Found UVC 1.00 device Vimicro USB2.0 UVC PC Camera  (0ac8:c40e)
input: Vimicro USB2.0 UVC PC Camera  as /devices/platform/s3c2410-ohci/usb1/1-1/1-1:1.0/input/input1
然后用天嵌自带的测试程序usb_camera,出错信息:
USB Camera Test
set format failed


而使用中星微的摄像头,终端给出的信息如下:
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: New USB device found, idVendor=0ac8, idProduct=301b
usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1: Product: PC Camera
usb 1-1: Manufacturer: Z-Star Corp.
usb 1-1: configuration #1 chosen from 1 choice
gspca: probing 0ac8:301b
zc3xx: probe 2wr ov vga 0x0000
zc3xx: probe sensor -> 0011
zc3xx: Find Sensor HV7131R(c)
gspca: probe ok

使用usb_camera,能正常工作:
USB Camera Test
zc3xx: probe 2wr ov vga 0x0000
Picture:Width = 320   Height = 240
frame buffer: 480x272,  16bpp, 0x3fc00byte= 261120

请问接下来我怎么做才能解决这个问题?

木♀木 发表于 2012-12-15 11:32:27 | 显示全部楼层
set format failed   改下图片格式试试
亚瑟王 发表于 2012-12-15 17:19:00 | 显示全部楼层
亲,在apps源码包中有个v4l2的代码可以查看你的摄像头的数据格式,然后根据这个格式来确认是否要将图片转码之类的。
木♀木 发表于 2012-12-16 10:22:55 | 显示全部楼层
struct v4l2_fmtdesc fmtdesc;
memset(&fmtdesc, 0, sizeof(fmtdesc));
fmtdesc.index=0;
  fmtdesc.type=V4L2_BUF_TYPE_VIDEO_CAPTURE;
  while (-1 != xioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc))
{
  printf("VIDIOC_ENUM_FMT(%s, VIDEO_CAPTURE)\n",fmtdesc.description);
  fmtdesc.index++;
}
这段可以查看你的摄像头的数据格式
 楼主| jushui 发表于 2012-12-17 14:38:22 | 显示全部楼层
木♀木 发表于 2012-12-16 10:22
struct v4l2_fmtdesc fmtdesc;
memset(&fmtdesc, 0, sizeof(fmtdesc));
fmtdesc.index=0;

这段代码是你自己写的?还是天嵌自带的?请告诉下我在哪个目录下?
 楼主| jushui 发表于 2012-12-17 14:56:32 | 显示全部楼层
亚瑟王 发表于 2012-12-15 17:19
亲,在apps源码包中有个v4l2的代码可以查看你的摄像头的数据格式,然后根据这个格式来确认是否要将图片转码 ...

PREFIX = ${HOME}
CONSOLEFONTS = /usr/share/kbd/consolefonts
XFONTS = /usr/share/fonts
CC=arm-linux-gcc
EXES = v4ltest v4ltune
CFLAGS+=-Wall
all: $(EXES)
v4ltest: v4l-test.o struct-dump.o struct-v4l.o struct-v4l2.o
$(CC) $(CFLAGS) v4l-test.o struct-dump.o struct-v4l.o struct-v4l2.o -o v4ltest
v4ltune: v4l-tune.o struct-dump.o struct-v4l.o struct-v4l2.o
$(CC) $(CFLAGS) v4l-tune.o struct-dump.o struct-v4l.o struct-v4l2.o -o v4ltune
install: all
install -d $(PREFIX)/bin
cp -v v4ltest v4ltune tune tuneall $(PREFIX)/bin
tar: clean
( cd .. ; tar jcvf ${HOME}/v4ltest-0.1.2.tar.bz2 v4ltest )
clean:
-rm -f *.o $(EXES)
mrproper: clean

是用v4ltest来测试格式吗?

亚瑟王 发表于 2012-12-17 15:02:47 | 显示全部楼层
jushui 发表于 2012-12-17 14:56
PREFIX = ${HOME}
CONSOLEFONTS = /usr/share/kbd/consolefonts
XFONTS = /usr/share/fonts

是的,V4Ltest那个,在5楼的朋友贴的代码是正确的,不过只有部分代码,你可以在usb摄像头测试程序中添加这部分代码来获取摄像头信息。
 楼主| jushui 发表于 2012-12-17 15:14:16 | 显示全部楼层
亚瑟王 发表于 2012-12-15 17:19
亲,在apps源码包中有个v4l2的代码可以查看你的摄像头的数据格式,然后根据这个格式来确认是否要将图片转码 ...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
亚瑟王 发表于 2012-12-17 15:34:47 | 显示全部楼层
jushui 发表于 2012-12-17 15:14

v4ltest运行之后可以获取很多v4摄像头的信息的。你的信息应该没有截全。
你可以尝试修改usb_camera_test的代码来实现。在116行添加类似下面的代码,实现功能获取摄像头的数据类型,然后重新设置。
        struct v4l2_fmtdesc fmtdesc;                                        //获取摄像头
        if (-1 == ioctl(fd,VIDIOC_ENUM_FMT,&fmtdesc))
                return false;
//        printf("VIDIOC_ENUM_FMT(%s, VIDEO_CAPTURE)\n",fmtdesc.description);
        if(strcmp((const char*)fmtdesc.description, "MJPEG") == 0)        //视频源的格式为JPEG或YUN4:2:2或RGB
        {
                fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;                //视频源的格式为MJPEG
        }
        else if(strcmp((const char*)fmtdesc.description, "JPEG") == 0)
        {
                fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;                //视频源的格式为MJPEG
        }
        else if(strcmp((const char*)fmtdesc.description, "YUV 4:2:2 (YUYV)") == 0)
        {
                fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;                //视频源的格式为YUYV
        }
        else
        {
                fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;                //视频源的格式为JPEG或YUN4:2:2或RGB
        }

        if (ioctl(fd, VIDIOC_S_FMT, &fmt) < 0)                                //使配置生效
        {
                printf("set format failed\n");
                return -1;
        }


 楼主| jushui 发表于 2012-12-17 17:22:23 | 显示全部楼层
亚瑟王 发表于 2012-12-17 15:34
v4ltest运行之后可以获取很多v4摄像头的信息的。你的信息应该没有截全。
你可以尝试修改usb_camera_test ...

使用爱友的摄像头,然后用v4ltest得出的信息就是下面这些。下一个图是用的是中星微的摄像头,得出的信息,你帮我看看。

中星微的摄像头的出的信息


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| jushui 发表于 2012-12-17 17:29:56 | 显示全部楼层
用v4ltune 得到的信息如下图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
亚瑟王 发表于 2012-12-17 22:02:35 | 显示全部楼层
jushui 发表于 2012-12-17 17:22
使用爱友的摄像头,然后用v4ltest得出的信息就是下面这些。下一个图是用的是中星微的摄像头,得出的信息, ...

放弃这个摄像头吧,V4Ltest这个程序所使用的协议是标准的v4l协议,如果标准的协议都没法操作摄像头的话,我建议放弃。
不过有个前提:你的内核单已经配置了摄像头的相关参数。
 楼主| jushui 发表于 2012-12-18 11:12:45 | 显示全部楼层
亚瑟王 发表于 2012-12-17 22:02
放弃这个摄像头吧,V4Ltest这个程序所使用的协议是标准的v4l协议,如果标准的协议都没法操作摄像头的话, ...

如果换个支持V4l协议的摄像头,麻烦你给我推荐两三款尺寸规格小点的摄像头,谢谢。
亚瑟王 发表于 2012-12-18 11:19:23 | 显示全部楼层
jushui 发表于 2012-12-18 11:12
如果换个支持V4l协议的摄像头,麻烦你给我推荐两三款尺寸规格小点的摄像头,谢谢。

理论上市面上买的摄像头多数都可以。我们前段时间也在市面上买了几个摄像头,都是可以用的。
 楼主| jushui 发表于 2012-12-18 11:27:41 | 显示全部楼层
亚瑟王 发表于 2012-12-18 11:19
理论上市面上买的摄像头多数都可以。我们前段时间也在市面上买了几个摄像头,都是可以用的。

我买的爱友这款就不能用啊,你说说你买的是那几款摄像头,参考哪些参数?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-11-1 07:36 , Processed in 1.062500 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表