gpt4 book ai didi

embedded-linux - v4l2 视频捕获示例

转载 作者:行者123 更新时间:2023-12-04 06:40:37 25 4
gpt4 key购买 nike

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

我正在三星 ok6410 板和 ov9650 cmos 相机上开发嵌入式 linux

我必须捕获视频并将其保存在 SD 卡上

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

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

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

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

但有些地方我无法理解或不知道我是否理解正确

  • 在这个例子中,有 4 个帧缓冲区,每个缓冲区可以容纳一帧。这是正确的吗?
  • 有一个变量 (frame_count) 被初始化为 70,这是否意味着通过完成这个程序我将得到一个包含 70 帧的视频?
  • fns(主循环)和(读帧)有什么作用?我知道他们应该做什么,但无法理解编写的代码、循环......等
  • 如何在此代码中调整 fps?或者我应该在相机寄存器中写入值?
  • 捕获视频后,我将有一个充满原始数据的缓冲区,我想压缩它或使用编解码器将其保存为 MPEG ,我可以更改要压缩的像素格式(例如 MPEG)而不是 YUYV 吗?或者我应该怎么做才能压缩视频?编解码器还是什么?
  • 我可以将缓冲区中的这些原始数据写入文件 .yuv 吗?我找到了一些可以播放这种格式视频的软件。
  • 是否可以使用循环缓冲区而不是线性缓冲区来保存捕获的视频?

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

    提前致谢

    最佳答案

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

    由于我认为我猜到了您所指的代码,因此我尝试回答您的问题

  • 4 个帧缓冲区用于进行双缓冲,即您将帧出列并对其进行操作,而其他帧缓冲区则由视频输入
  • 填充
  • 如果就像我链接的示例那样,不,它只是从输入中抓取 70 帧然后退出。
  • read_frame 从缓冲区中取出一个帧,以便您可以对其进行操作,并在完成后将其重新添加到队列中。
  • 要调整 fps,您需要将帧出列和重新入列到驱动程序,而无需执行任何操作。修改 fps 是通过跳帧完成的。
  • 一般来说,这取决于您的驱动程序和编码器。您需要找到驱动程序和编码器都支持的视频格式(例如 V4L2_PIX_FMT_YUYV)。如果它不存在,那么您需要编写自己的色彩空间转换例程。
  • 当然!我经常这样做。
  • 我不明白这个问题。
  • 关于embedded-linux - v4l2 视频捕获示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9448291/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com