主题 : QQ2440提供的镜像及摄像头驱动是否支持V4L2? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 3831
精华: 0
发帖: 9
金钱: 90 两
威望: 90 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2009-02-11
最后登录: 2011-10-15
楼主  发表于: 2009-03-27 16:50

 QQ2440提供的镜像及摄像头驱动是否支持V4L2?

如题,提供的中星微的摄像头驱动,但不知道驱动和内核是否支持v4l2或v4l?
有知道的解答一下~~~谢谢
级别: 新手上路
UID: 3831
精华: 0
发帖: 9
金钱: 90 两
威望: 90 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2009-02-11
最后登录: 2011-10-15
1楼  发表于: 2009-03-27 17:03
自己顶一下,期待兄弟们的指点~
级别: 新手上路
UID: 3831
精华: 0
发帖: 9
金钱: 90 两
威望: 90 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2009-02-11
最后登录: 2011-10-15
2楼  发表于: 2009-03-27 17:15
你用的是自带的内核镜像么?还是要重新配一下?
我的是zc301b,应该也没问题吧~你知道驱动支持v4l2么
长风兄?
级别: 新手上路
UID: 3831
精华: 0
发帖: 9
金钱: 90 两
威望: 90 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2009-02-11
最后登录: 2011-10-15
3楼  发表于: 2009-04-06 14:55
问题找到了,因为好久没上来了,看到这个贴子觉得应该把经验跟兄弟们分享一下~
要不老提问题不解答也不好~

看了下SPCA5XX的驱动,确实不支持v4l2,只支持v4l,重写了下程序,v4l的结构跟v4l2的结构大不一样,感觉没v4l2好,好像不太清晰,扩展功能也没v4l2强,也有可能是我对v4l理解不是很透彻的原因,时间仓促说的不对请见谅~

感谢长风~  
[ 此帖被sharp99827在2011-10-15 22:00重新编辑 ]
级别: 新手上路
UID: 3831
精华: 0
发帖: 9
金钱: 90 两
威望: 90 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2009-02-11
最后登录: 2011-10-15
4楼  发表于: 2009-04-06 14:59
贴一下SPCA5XX的ioctl的源码,大家看看
spca5xx_do_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
         void *arg)
{
    struct video_device *vdev = file->private_data;
    struct usb_spca50x *spca50x = video_get_drvdata(vdev);
    PDEBUG(2, "do_IOCtl: 0x%X", cmd);
    if (!spca50x->dev)
        return -EIO;
    switch (cmd) {
    case VIDIOCGCAP:
        {
            struct video_capability *b = arg;
            PDEBUG(2, "VIDIOCGCAP %p :", b);
            memset(b, 0, sizeof (struct video_capability));
            snprintf(b->name, 32, "%s",
                 clist[spca50x->desc].description);
            b->type = VID_TYPE_CAPTURE;
            b->channels =
                ((spca50x->bridge == BRIDGE_SPCA506) ? 8 : 1);
            b->audios = 0;
            b->maxwidth = spca50x->maxwidth;
            b->maxheight = spca50x->maxheight;
            b->minwidth = spca50x->minwidth;
            b->minheight = spca50x->minheight;
            return 0;
        }
    case VIDIOCGCHAN:
        {
            struct video_channel *v = arg;
            switch (spca50x->bridge) {
            case BRIDGE_SPCA505:
                {
                    strncpy(v->name,
                        ((v->channel ==
                          0) ? "SPCA505" : "Video In"),
                        32);
                    break;
                }
            case BRIDGE_SPCA506:
                {
                    spca506_GetNormeInput(spca50x,
                                  (__u16 *) & (v->
                                       norm),
                                  (__u16 *) & (v->
                                       channel));
                    if (v->channel < 4) {
                        snprintf(v->name, 32,
                             "SPCA506-CBVS-%d",
                             v->channel);
                    } else {
                        snprintf(v->name, 32,
                             "SPCA506-S-Video-%d",
                             v->channel);
                    }
                    break;
                }
            default:
                snprintf(v->name, 32, "%s",
                     Blist[spca50x->bridge].name);
                break;
            }
            v->flags = 0;
            v->tuners = 0;
            v->type = VIDEO_TYPE_CAMERA;
            return 0;
        }