首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >v4l2视频采集实例

v4l2视频采集实例
EN

Stack Overflow用户
提问于 2012-02-25 21:36:37
回答 1查看 13.3K关注 0票数 5

这是我在这里的第一篇文章,我希望我能找到一些帮助。

我正在三星ok6410板和ov9650 cmos摄像头上开发嵌入式linux。

我必须拍摄一段视频并保存在SD卡上。

我想使用一个循环缓冲区来捕获视频,当它满的时候,允许新的数据覆盖旧的数据。

有一个旗帜,当它升起时,捕获继续10秒,然后停止。视频保存到sd卡应该包含升旗前的10秒和升旗后的10秒。

我在这里阅读了v4l2 API规范的官方站点上的捕获示例。

http://free-electrons.com/kerneldoc/latest/video4linux/API.html

但是有些地方我不能理解,或者不知道我是否正确理解

  1. 在这个例子中,有4个帧缓冲区,每个缓冲区可以容纳一个帧。是这样的吗?
  2. 有一个变量(Frame_count)被初始化为70,这是否意味着通过完成这个程序,我将有一个包含70帧的视频?
  3. fns (主回路)和(读帧)做什么?我知道他们应该做什么,但不能理解写好的代码,loops..etc
  4. 如何调整代码中的fp?还是我应该把这个值写在摄像机寄存器里?
  5. 在捕获视频后,我将有一个填充原始数据的缓冲区,我想压缩它或使用编解码器将它保存为MPEG,我是否可以改变像素格式以被压缩(例如MPEG)而不是YUYV?或者我应该做什么来压缩视频?密码还是什么?
  6. 我可以在缓冲区中将这些原始数据写入文件.yuv吗?我发现一些软件可以播放这种格式的视频。
  7. 是否可以使用圆形缓冲器而不是线性缓冲器来保存捕获的视频?

我知道我的帖子太长了,但我是个新手,找不到任何可以帮助我编写代码的教程。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2012-03-07 16:55:16

链接的页面返回404,但是如果要查看文档,应该检查这个https://linuxtv.org/downloads/v4l-dvb-apis/,特别是检查这个示例,这是一个很好的起点,可以做您想做的事情。

因为我想我猜到了你指的代码,所以我试着回答你的问题

  1. 4帧缓冲区用于进行双缓冲,即将帧排成队列并对其进行操作,而其他帧则由视频输入来填充。
  2. 如果它和我所链接的例子一样,它只从输入中抓取70帧,然后退出。
  3. read_frame将帧从缓冲区中排出队列,以便您可以对其进行操作,并在完成操作后将其重新添加到队列中。
  4. 要调整fps,您需要在不执行任何操作的情况下对驱动程序进行排队列和请求帧。修改fps是通过跳帧来完成的。
  5. 一般来说,这取决于你的司机和你的编码器。您需要找到驱动程序和编码器都支持的视频格式(例如V4L2_PIX_FMT_YUYV)。如果它不存在,那么您需要编写自己的色空间转换例程。
  6. 好的!我经常这样做。
  7. 我不明白这个问题。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9448291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档