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.

[参考译文] TDA4VP-Q1:使用 WAVE5 编码器以非一致分辨率对 H.265 流进行编码

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1623112/tda4vp-q1-encoding-h-265-streams-with-non-conformant-resolutions-using-the-wave5-encoder

器件型号: TDA4VP-Q1

您好、

 

我正在尝试使用 V4L2 API 以 960x540 的分辨率对一些 H.265 视频流进行编码。 不过、从 TDA4 TI SDK 9.2.00.05 版和 6.1.80 版 ti-linux.kernel 开始、我会遇到一些问题。 下面是 对我的问题的更详细说明、包括相关驱动程序代码片段的链接:

 

仅使用分辨率为 960x540 的 VIDIOC_S_FMT 不起作用、并且我最终得到无效的位流、因为高度维度不可除以 8。 请注意、以 960x544 的分辨率调用 VIDIOC_S_FMT 并使用 VIDIOC_S_SELECTION 手动设置 960x540 的一致性窗口不会产生任何影响 、因为 WAVE5 驱动程序将 VIDIOC_S_SELECTION 实现为存根。

我研究了一点、发现如果通过 VIDIOC_S_FMT 传递了不一致的分辨率、驱动程序本身应该设置一个一致性窗口。 但是、对于 H.265、仅 当流旋转和/或镜像 (不包括水平+垂直翻转和 180°旋转的身份变换)时才执行此操作。 我通过启用 V4L2_CID_HFLIP 确认了这一点、结果产生了分辨率为 960x544 且符合性窗口设置为 960x540 的工作 H.265 流。

 

虽然我没有尝试更新的内核版本、但  我认为最近的 ti-linux-kernel 分支 (ti-linux-6.18.y) 中似乎仍然存在所谓的错误。

请注意、 VIDIOC_S_SELECTION 的实现 已更新。 然而、如果我正确地遵循了代码、它实际上并不是设置一致性窗口、而是更新先前通过 VIDIOC_S_FMT 传递的分辨率(编码器初始化代码 conf_win.width/conf_win.height与命名相反,实际上用于设置流维度)

 

是否有针对这个问题的已知权变措施让我能够以不合规的 960x540 分辨率对 H.265 流进行编码?

 

谢谢、

Martin

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

    您好:  

    我将介绍这种情况。 您能否尝试使用 GStreamer 以及最新的 SDK 测试您的用例、以进行确认?

    此致、
    Sarabesh S.

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

    您好、

    我尝试通过 GStreamer 对 960x540 视频进行编码、但未按预期成功。 它卡住了这一点:

    # gst-launch-1.0 filesrc location=./960x540.yuv ! rawvideoparse width=960 height=540 format=i420 framerate=10/1 colorimetry=bt709 ! v4l2h265enc ! filesink location=./960x540.h265 sync=true
    Setting pipeline to PAUSED ...
    Pipeline is PREROLLING ...
    Redistribute latency...

    它非常适合例如 640x480 视频,虽然:

    # gst-launch-1.0 filesrc location=./640x480.yuv ! rawvideoparse width=640 height=480 format=i420 framerate=10/1 colorimetry=bt709 ! v4l2h265enc ! filesink location=./640x480.h265 sync=true
    Setting pipeline to PAUSED ...
    Pipeline is PREROLLING ...
    Redistribute latency...
    Pipeline is PREROLLED ...
    Setting pipeline to PLAYING ...
    Redistribute latency...
    New clock: GstSystemClock
    Got EOS from element "pipeline0".
    Execution ended after 0:00:30.100345410
    Setting pipeline to NULL ...
    Freeing pipeline ...

    为了测试目的,我还编码了 960x540 视频在 H.264 这是成功的(相同的命令,但与 v4l2h264enc 而不是 v4l2h265enc )。 即、这只是 H.265 编码器的问题。

    如果我设法进行设置、我或许 还能够在最新的 SDK 版本上对此进行测试。

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

    您还能分享一下您的输入流吗? 如果您在最新版本中看到此内容、请告诉我。  

    谢谢、
    Sarabesh S.

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

    您好、

    我无法共享原始视频、但我创建了两个视频、可用于重现问题 e2e.ti.com/.../videos.zip。 请注意、现在对于 960x540 视频、gstreamer 不会冻结、但问题仍然存在、因为 H.265 视频无效(可以通过  ffprobe -show_stream 960x50.H265 进行确认,其中显示了许多解码错误,甚至无法确定图像分辨率)。
    关于新的 SDK 版本:可悲的是,我们目前无法升级,因为这需要相当大的努力。 我很确定,虽然我们会遇到同样的问题,因为(如我的初始帖子所述)有问题的代码仍然存在在最新的驱动程序版本。

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

    尊敬的 Martin:  

    我将检查这些输入流。 目前我是本周的 OOO、所以下周我将进行测试。  

    谢谢、
    Sarabesh S.

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

    尊敬的 Sarabesh:

    您是否能够在测试中重现此问题?

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

    你好马丁,是的,我能够重现。 与我们的团队一起研究解决方案。 我将在下周初回复您、提供更多更新信息。 感谢您提请我们注意这个问题。

    此致、
    Sarabesh S.

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

    尊敬的 Sarabesh:

    我能够派生一个 bugfix(在驱动程序)在我自己。 如果您能让我与相关人员联系、我们可以着手处理这一问题。

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

    尊敬的 Martin:  

    您可以按照以下步骤将更改提交到上游:  

    https://docs.kernel.org/process/submitting-patches.html

    如果需要、也可以在此处共享您的补丁、以便我查看和跟踪。

    谢谢、
    Sarabesh S.  

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

    你好,可悲的是,目前我没有时间去通过整个上游过程在我自己(希望在未来). 如果在此期间有其他人偶然发现此问题、下面是如何解决该问题:
    1.在  wave5_set_enc_crop_info () 中、为 H.265 设置 32 对齐的裁剪窗口以进行转换(即旋转和/或镜像(不包括 180°度旋转的身份转换和垂直+水平翻转)、为未转换的流设置 8 对齐的裁剪窗口、并删除未转换 H.265/HEVC 的提前退出。 (H.264 的 16 对齐裁剪窗口可以保留原样。)
    2.将图片尺寸写入时W5_CMD_ENC_SEQ_SRC_SIZE,对于未变换的 H.265 流,您必须手动将图像尺寸对齐到 8 的倍数。 对于 H.264 流和转换的 H.265 流、固件似乎会分别自动将尺寸对齐到 16 和 32 的倍数。

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

    谢谢 Martin、我将继续关注此主题、并提供任何更新。

    BR、

    Sarabesh S.