主题 : QT4.7USB摄像头图像采集问题! 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 51790
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2011-07-07
最后登录: 2012-03-01
楼主  发表于: 2011-07-07 15:29

 QT4.7USB摄像头图像采集问题!

        我用QT4.7开发ZC301USB摄像头图像采集应用程序,在PC机上运行程序动态显示与图像采集均正常,但是移植到ARM开发板上摄像头初始化无法通过。
        开发环境与代码如下,请高手指点迷津!
PC机环境:redhat,linux内核版本2.6.29,QT4.7.0
ARM开发板环境:友善Linux2.6.32,QT4.7.0
        程序代码如下,红色字体为移植到开发板后无法通过的部分, ioctl(fd, VIDIOC_CROPCAP, &cropcap))这条语句在开发板上运行始终返回为-1
int VideoDevice::init_device()
{
   v4l2_capability cap;
   v4l2_cropcap cropcap;
   v4l2_crop crop;
   if(-1 == ioctl(fd, VIDIOC_QUERYCAP, &cap))
   {
       if(EINVAL == errno)
       {
            emit display_error(tr("%1 is no V4l2 device").arg(dev_name));
       }
       else
       {
            emit display_error(tr("VIDIOC_QUERYCAP: %1").arg(QString(strerror(errno))));
        }
             return -1; 
    } 
    printf( "driver=%s,card=%s,businfo=%s\nversion=%x,cap=%x\n" 
               "res:%x,%x,%x,%x\nVIDIOC_QUERYCAP=%x\n",
               cap.driver,cap.card,cap.bus_info,cap.version,cap.capabilities,
               cap.reserved[0],cap.reserved[1],cap.reserved[2],cap.reserved[3],VIDIOC_QUERYCAP);

    if(!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE))
    {
         emit display_error(tr("%1 is no video capture device").arg(dev_name));
         return -1;
    }

    if(!(cap.capabilities & V4L2_CAP_STREAMING))
    {
          emit display_error(tr("%1 does not support streaming i/o").arg(dev_name));
          return -1;
     }

      CLEAR(cropcap);

     cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

      printf( "VIDIOC_CROPCAP=%x\n",VIDIOC_CROPCAP);
      if(0 == ioctl(fd, VIDIOC_CROPCAP, &cropcap))
      {
            CLEAR(crop);
            crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
            crop.c = cropcap.defrect;

            if(-1 == ioctl(fd, VIDIOC_S_CROP, &crop))
            {
                 if(EINVAL == errno)
                {
                      // emit display_error(tr("VIDIOC_S_CROP not supported"));
                }
                else
               {
                        emit display_error(tr("VIDIOC_S_CROP: %1").arg(QString(strerror(errno))));
                        return -1;
                } 
            }
       }
       else
       {
              emit display_error(tr("12VIDIOC_CROPCAP: %1").arg(QString(strerror(errno))));
              //return -1;
        }

       …………
}


ioctl(fd, VIDIOC_QUERYCAP, &cap)这条语句可以读回摄像头信息,在PC机和ARM板上打印的信息如下:
pc上运行摄像头驱动信息:
    driver=zc301,
    card=ZX301[P] PC Camera,
    businfo=usb-0000:00:1d.0-2
    version=10005,
    cap=5000001
    res:0,0,0,0
arm上运行摄像头驱动信息:
    driver=zc3xx,
    card=PC Camera,
    businfo=usb-s3c24xx-1.2                            
    version=20700,
    cap=5000001                                                      
    res:0,0,0,0 

查了很多资料也没能找到解决办法,无奈之余发帖寻求帮助,请大家指点!
另外,用友善提供的qtopia-20100108中USB摄像头测试程序,我的摄像头可以采集到图像,说明内核驱动也没有问题!
[ 此帖被沈阳宝石在2011-07-07 15:37重新编辑 ]
级别: 新手上路
UID: 45643
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
综合积分: 6 分
注册时间: 2011-05-06
最后登录: 2012-06-02
1楼  发表于: 2012-05-05 15:52
请问你在PC上ZC301是怎么驱动的?
级别: 新手上路
UID: 88326
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
综合积分: 22 分
注册时间: 2013-03-07
最后登录: 2013-03-23
2楼  发表于: 2013-03-11 09:47
小弟是个学生 也是正在研究这个qt下的 视频采集程序 能否 把源码 给小弟看看 。  拜托了  万分感激