首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

v4l Invalid argument,该怎么解决

2013-01-04 
v4l Invalid argument先贴上代码:openvideo中:int open_video( char *fileptr,fb_v41 *vd ,int dep,int pa

v4l Invalid argument
先贴上代码:
openvideo中:

int open_video( char *fileptr,fb_v41 *vd ,int dep,int pal,int width,int height)
{
// 打开视频设备
   if ((vd->fd = open(fileptr, O_RDWR)) < 0) 
 {
      perror("v4l_open:");
      return ERR_VIDEO_OPEN;
   }
   // 获取设备
   if (ioctl(vd->fd, VIDIOCGCAP, &(vd->capability)) < 0) 
   {
      perror("v4l_get_capability:");
      return ERR_VIDEO_GCAP;
   }
   

   
// 获取图象  
   if (ioctl(vd->fd, VIDIOCGPICT, &(vd->picture)) < 0) 
   {
      perror("v4l_get_picture");
      return ERR_VIDEO_GPIC;
   }
   // 设置图象
   vd->picture.palette = pal;// 调色板
   vd->picture.depth = dep;// 像素深度

   vd->mmap.format =pal;
   if (ioctl(vd->fd, VIDIOCSPICT, &(vd->picture)) < 0) 
   {
      perror("v4l_set_palette");
      return ERR_VIDEO_SPIC;
   }
   // 
   vd->mmap.width = width; // width;
   vd->mmap.height = height; // height;
   vd->mmap.format = vd->picture.palette; 

   vd->frame_current = 0;
   vd->frame_using[0] = 0;
   vd->frame_using[1] = 0;
   
   // 获取缓冲影射信息
   if (ioctl(vd->fd, VIDIOCGMBUF, &(vd->mbuf)) < 0) 
   {
      perror("v4l_get_mbuf");
      return -1;
   }
   
   // 建立设备内存影射
   vd->map = mmap(0, vd->mbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED, vd->fd, 0);
   if ( vd->map < 0) 
   {
      perror("v4l_mmap_init:mmap");
      return -1;
   }
       printf("The video device was opened successfully.\n");
  // return get_first_frame(vd);
  return 0;
}
主函数中这样调用:

ret = open_video( V4L_FILE, &vd ,
                  16,// 像素深度
VIDEO_PALETTE_RGB24,// 设置调包板
240,160 );

运行结果如下:
The framebuffer device was opened successfully.                                 
480x272, 16bpp, xoffset=0 ,yoffset=0                                            


The framebuffer device was mapped to memory successfully.                       
FrameBuffer OK!                                                                 
RGB_FB OK!                                                                      
The video device was opened successfully.                                       
v4l_get_picture:: Invalid argument                                              
板子上出现了v4l_get_picture:: Invalid argument,无法运行下去。
Google了很长时间,也没解决问题
[解决办法]
视频设备是什么?有比较详细的信息么?首先得确保用别的V4L程序能够试用视频设备,确认设备没问题。

还有,用dmesg看看有没有驱动的警告信息。
[解决办法]
VIDEO_PALETTE_RGB24格式对应的vd->picture.depth应该是24 (8bit*3)而不是16.

热点排行