2012-02-25 80 views
4

这是我在这里的第一篇文章,我希望我能找到一些帮助V4L2视频采集例如

我工作的嵌入式linux三星OK6410板和OV9650 CMOS摄像头

我要捕获视频并将其保存在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(主循环)和(读取帧)做了什么?我知道他们应该做什么,但无法理解书面代码,环..等

  4. 我该如何调整这个代码中的fps?或者我应该在相机寄存器中写入值?

  5. 捕获视频后,我将有一个填充了原始数据的缓冲区,我想压缩它或使用编解码器将其保存为MPEG,我可以改变要压缩的像素格式(例如MPEG) YUYV的?或者我应该怎么做来压缩视频?编解码器还是什么?

  6. 我可以在缓冲区中将这些原始数据写入文件.yuv吗?我发现了一些可以播放这种格式的视频的软件。

  7. 是否可以使用循环缓冲区而不是线性缓冲区来保存捕获的视频?

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

在此先感谢

+0

从自由电子的另一链路:http://free-electrons.com/kerneldoc/latest/DocBook/media_api/index.html – 2013-02-24 01:01:44

+0

所有链路断开 – irobo 2018-03-08 18:09:50

回答

6

,你要链接返回404,但如果你正在寻找的文件,你应该检查这个http://v4l2spec.bytesex.org/spec/,特别是检查这个example,这是一个很好的起点做的页面你想要什么。

因为我认为我猜你指的是代码,我试着回答您的问题

  1. 4个缓冲器被用来做双缓冲,即你出列的框架并在其上运行,而其他获得由视频输入
  2. 充满如果是在我联系的例子,没有它只是抓住从输入70帧,然后退出。
  3. read_frame离队从缓冲区中的帧,这样就可以对操作并重新添加到队列中时,即可大功告成。
  4. 调整FPS,你需要出队,并重新排队帧驱动程序没有做任何事情。修改fps是通过跳帧完成的。
  5. 一概而论,它取决于你的驱动器和编码器。您需要查找驱动程序和编码器都支持的视频格式(例如V4L2_PIX_FMT_YUYV)。如果它不存在,那么你需要编写你自己的颜色空间转换例程。
  6. 当然!我经常这样做。
  7. 我不明白的问题。
+0

的例子链路断开:( – irobo 2018-03-08 17:47:40