This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VH-Q1:询问 V4L2 编码器动态控制更改(GOP 和比特率)在 VIDIOC_STREAMON 之后不生效

Guru**** 2925550 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1628271/tda4vh-q1-inquiry-regarding-v4l2-encoder-dynamic-control-changes-gop-and-bitrate-not-taking-effect-after-vidioc_streamon

器件型号: TDA4VH-Q1

尊敬的 TI 技术支持团队:

我们想问一问、启动数据流后通过 V4L2 接口动态调整编码器参数时遇到的问题。

在视频编码过程中 VIDIOC_STREAMON,在调用后,我们尝试使用动态调整参数 VIDIOC_S_CTRL,如 GOP 和比特率,特别是:

  • V4L2_CID_MPEG_VIDEO_BITRATE

  • V4L2_CID_MPEG_VIDEO_GOP_SIZE

设置这些参数后、我们使用 VIDIOC_G_CTRL 读回它们、返回的值与我们设置的值匹配。 但在实际编码的输出流中:

  • GOP 结构不变

  • 比特率不会生效

因此、我们想问、这些设置是否需要任何额外操作才能生效。

步骤:

  1. 配置编码器:

    • VIDIOC_S_FMT

    • VIDIOC_REQBUFS

    • VIDIOC_QUERYBUF

    • VIDIOC_QBUF

  2. 开始流式传输:

    • VIDIOC_STREAMON

  3. 编码期间:

    • 在循环中、从文件中读取 YUV 帧并将其馈送到编码器

    • 在第 30 帧:

      • VIDIOC_S_CTRL 要设置的呼叫:

        • V4L2_CID_MPEG_VIDEO_GOP_SIZE = 2

      • 立即调用 VIDIOC_G_CTRL 以验证该值(正确)

尽管如此、实际输出位流显示 GOP 结构没有变化。 使用设置比特率时也会出现同样的问题 V4L2_CID_MPEG_VIDEO_BITRATE

测试信息:

  • 源文件: test_enc_step5_2.c

  • 测试可执行文件: test

  • 输入文件: output_1080p_nv12.yuv

  • 输出文件: out.h264

  • 日志文件: test.log

  • 执行命令:

     
    ./test output_1080p_nv12.YUV out.h264
    对于输入文件 output_1080p_nv12.yuv、无法在此处大尺寸上传。 请注意、它可以通过以下 ffmpeg 命令生成。
    FFmpeg -f lavfi -I testsrc=size=1920x1080:rate=30 -vframes 300 -pix_fmt nv12 output_1080p_nv12.yuv  

请您提供指导、确保这些动态参数更改生效是否需要其他步骤。

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

     更改编码器参数后、您能否调用“set_ctrl (FD、V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME、1);“来尝试?  

     谢谢。

    Linjun

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Linjun:
      设置参数后、我们调用了 set_ctrl(fd, V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME, 1);、它成功地触发了一个 i 帧。 但是、GOP 和比特率设置仍然不会在编码流中生效。
      您能否告知是否需要执行其他步骤?
    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 J G

    该线程已分配给我们目前正在出差的编码器专家。 请等待 3-4 天的回复。

    此致、
    Jared

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    GOP 结构无法动态更改预设的 bc、也无法更改。 但是、我相信您谈论的是更改 GOP 大小的动态插入、而不是单个帧的动态输入。

    我将检查驱动程序是否支持此功能。 现在不支持它。  

    此致、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    亲爱的 Sarabesh。

    感谢您的更新。  

    我可以询问何时可以获得更新吗?

    我将检查驱动程序中是否支持此功能。 [/报价]

    非常感谢!

    Yong

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Yong:  

    强制关键帧控制支持动态 I 帧和 IDR 帧插入。 因此、从应用层、您应该能够在 设定的时间段插入 IDR 帧。 成本是每次需要插入 IDR 帧时进行 ioctl 调用和注册写入的开销。 如果 IDR 周期变化非常频繁、最好在应用程序级别实施该功能。

    您能否分享客户用例以及 IDR 周期发生变化的频率?

    此致、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sarabesh:
      我们目前可以在应用层使用强制密钥帧来控制 IDR 帧的定期生成。


      还有一个问题:我们还需要支持动态比特率调整、但在我们的测试中、我们无法动态调整比特率。 也请帮助分析这一点。

    非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的。  

    我将查看比特率问题。 您是否尝试过使用 gstreamer 测试动态比特率?

    此外、您使用的是哪个 SDK 版本?

    此致、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们没有使用 GStreamer 进行测试。 顶部列出了附加的文件 test_enc_step5_2.c、其中包含测试中使用的源代码。 请看一下。 我们使用的是 SDK 11.1 版。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:  

    本周带宽受限。 我的回复可能会出现延迟。  

    谢谢、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sarabesh、


    对此问题是否有任何更新?


    谢谢、
    J. G.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    下面是一个补丁、您可以帮助您试用?

    diff -git a/drivers/media/platform/chies-media/wave5/wave5-VPU-dec.c b/drivers/media/platform/chies-media/wave5-VPU-dec.c
    index e75770912e21..8917542b993c
    
    
    @@@@
    
    
    
    
    
    
    
    
    
    
    filp);
    diff --git a/drivers/media/platform/chips-media/wave5/wave5-VPu-enc.c b/drivers/media/platform/chips -media/wave5-VPU-enc.c
    index e69bef5d1b52..24fc0d3f4a-platform/chips-media/wave5-media/
    
    
    @@@@
    
    
    
    
    
    
    
    
    
    
    Filp);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、J.G、  

    感谢您的耐心。 检查测试应用程序后、您似乎没有设置 V4L2 控件来启用速率控制: V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE

    如果未启用 RC、编码器将使用恒定 QP、并将忽略 V4L2_CID_MPEG_VIDEO_bitrate 中的比特率设置

    您能尝试一下并告诉我您的结果吗?

    谢谢、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 J. G

    我可以问这个问题是否回答了您的问题? 如果是、我们将在本周关闭此 TT。  

    [引述 userid=“567667“ url=“~/support/processors-group/processors/f/processors-forum/1628271/tda4vh-q1-inquiry-regarding-v4l2-encoder-dynamic-control-changes-gop-and-bitrate-not-taking-effect-after-vidioc_streamon/6351524

    感谢您的耐心。 检查测试应用程序后、您似乎没有设置 V4L2 控件来启用速率控制: V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE

    如果未启用 RC、编码器将使用恒定 QP、并将忽略 V4L2_CID_MPEG_VIDEO_bitrate 中的比特率设置

    [/报价]

    非常感谢!

    Yong

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Yong:

    感谢您和 Sarabesh 的支持。 问题已解决、TT 可以关闭。

    此致、
    J. G.