免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9534 | 回复: 5
打印 上一主题 下一主题

[应用] s3c6410+tvp5150视频采集 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-04 21:08 |只看该作者 |倒序浏览
我用我采用如标题的方案进行视频采集,程序在设置参数即ioctl(cam,VIDIOC_S_FBUF,&fb);时总是出错,fb.fmt.pixelformat 设置为V4L2_PIX_FMT_YUV420就会出错,若设置为V4L2_PIX_FMT_RGB565似乎可以通过!
我想问的是,必须要在v4l架构中设置参数么?那为什么无法设置!
如果可以设置那该如何设置?
我看tvp5150的驱动中似乎已经设置了参量!

请有使用过tvp5150和cameraterface采集用视频的大虾,指教!

论坛徽章:
0
2 [报告]
发表于 2011-08-05 10:23 |只看该作者
又没人回= =!哎~

论坛徽章:
2
水瓶座
日期:2013-09-04 15:09:57白羊座
日期:2014-04-17 16:48:13
3 [报告]
发表于 2011-08-05 16:16 |只看该作者
出的什么错误起码告诉大家啊……

可以看下设备驱动对应的ioctl中是不是支持YUV420的格式,不过一般应该都是支持的。

论坛徽章:
0
4 [报告]
发表于 2011-08-05 18:00 |只看该作者
回复 3# l2y3n2


个人认为该函数对应的驱动该是s3c_fimc_v4l2.c中的如下函数
  1. static int s3c_fimc_v4l2_s_fbuf(struct file *filp, void *fh,
  2.                                         struct v4l2_framebuffer *fb)
  3. {
  4.         struct s3c_fimc_control *ctrl = (struct s3c_fimc_control *) fh;
  5.         struct v4l2_framebuffer *frmbuf = &(ctrl->v4l2.frmbuf);
  6.         int i, bpp;

  7.         for (i = 0; i < S3C_FIMC_MAX_OVERLAY_FORMATS; i++) {
  8.                 if (s3c_fimc_overlay_formats[i].pixelformat == fb->fmt.pixelformat)
  9.                         break;
  10.         }

  11.         if (i == S3C_FIMC_MAX_OVERLAY_FORMATS)
  12.                 return -EINVAL;

  13.         bpp = s3c_fimc_set_output_frame(ctrl, &fb->fmt);

  14.         frmbuf->base  = fb->base;
  15.         frmbuf->flags = fb->flags;
  16.         frmbuf->capability = fb->capability;
  17.         frmbuf->fmt.width = fb->fmt.width;
  18.         frmbuf->fmt.height = fb->fmt.height;
  19.         frmbuf->fmt.field = fb->fmt.field;
  20.         frmbuf->fmt.pixelformat = fb->fmt.pixelformat;
  21.         frmbuf->fmt.bytesperline = fb->fmt.width * bpp / 8;
  22.         frmbuf->fmt.sizeimage = fb->fmt.width * frmbuf->fmt.bytesperline;

  23.         return 0;
  24. }
复制代码
继续跟踪
  1. const static struct v4l2_fmtdesc s3c_fimc_overlay_formats[] = {
  2.         {
  3.                 .index                = 0,
  4.                 .type                = V4L2_BUF_TYPE_VIDEO_OVERLAY,
  5.                 .flags                = FORMAT_FLAGS_PACKED,
  6.                 .description        = "16 bpp RGB, le",
  7.                 .pixelformat        = V4L2_PIX_FMT_RGB565,               
  8.         },
  9.         {
  10.                 .index                = 1,
  11.                 .type                = V4L2_BUF_TYPE_VIDEO_OVERLAY,
  12.                 .flags                = FORMAT_FLAGS_PACKED,
  13.                 .description        = "24 bpp RGB, le",
  14.                 .pixelformat        = V4L2_PIX_FMT_RGB24,               
  15.         },
  16. };
复制代码
很明显该结构中没有我所需要的YUV420格式,意外的发现其存在于以下结构中
  1. const static struct v4l2_fmtdesc s3c_fimc_capture_formats[] = {
  2.         {
  3.                 .index                = 0,
  4.                 .type                = V4L2_BUF_TYPE_VIDEO_CAPTURE,
  5.                 .flags                = FORMAT_FLAGS_PLANAR,
  6.                 .description        = "4:2:0, planar, Y-Cb-Cr",
  7.                 .pixelformat        = V4L2_PIX_FMT_YUV420,
  8.         },
  9.         {
  10.                 .index                = 1,
  11.                 .type                = V4L2_BUF_TYPE_VIDEO_CAPTURE,
  12.                 .flags                = FORMAT_FLAGS_PLANAR,
  13.                 .description        = "4:2:2, planar, Y-Cb-Cr",
  14.                 .pixelformat        = V4L2_PIX_FMT_YUV422P,

  15.         },       
  16.         {
  17.                 .index                = 2,
  18.                 .type                = V4L2_BUF_TYPE_VIDEO_CAPTURE,
  19.                 .flags                = FORMAT_FLAGS_PACKED,
  20.                 .description        = "4:2:2, packed, YCBYCR",
  21.                 .pixelformat        = V4L2_PIX_FMT_YUYV,
  22.         },
  23.         {
  24.                 .index                = 3,
  25.                 .type                = V4L2_BUF_TYPE_VIDEO_CAPTURE,
  26.                 .flags                = FORMAT_FLAGS_PACKED,
  27.                 .description        = "4:2:2, packed, CBYCRY",
  28.                 .pixelformat        = V4L2_PIX_FMT_UYVY,
  29.         }
  30. };
复制代码
看来一开始就写错了,需要的不是overlay而是capture,看来网上看的参考代码不能全信啊= =!我继续写看看,高手们谁有做过相关东西的可以指导下!我的程序继续到底该怎么写呢?
有什么例子可以让我参考下吗?还有V4L2是如何跟TVP5150的驱动发生关系的?

论坛徽章:
0
5 [报告]
发表于 2011-11-07 17:01 |只看该作者
你那设备室挂在总线上的,当打开设备的时候总线会扫描有什么设备挂上了,然后进行匹配,执行该设备的驱动

个人见解,最近也在做摄像头的驱动,刚刚把硬件调试好,开始调试驱动

论坛徽章:
0
6 [报告]
发表于 2012-01-11 17:19 |只看该作者
上面这位大哥5150调试好了吧,能把经验说说不啊,我也用6410+tvp5150初始化完成后,采集不到数据啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP