Zynq UltraScale + MPSoC  – 视频编解码器单元(VCU) – 为什么QP值并不总是遵循我的QPs.hex文件?-Xilinx-AMD社区-FPGA CPLD-ChipDebug

Zynq UltraScale + MPSoC – 视频编解码器单元(VCU) – 为什么QP值并不总是遵循我的QPs.hex文件?

问题描述

为什么QP值并不总是遵循我的QPs.hex文件?

LOAD_QP仅适用于I帧,但不适用于我的示例中的P帧和B帧。

例:

根据提供的QPs.hex,I和P帧的预期表格为10 11 12 13 14 15 16 10 11 12 13 14 15 16。

但是,只有I帧遵循LOAD_QP指向的QPs.hex,而P帧不遵循预期的QPs.hex。

使用以下命令时可以看到:

 ffprobe -debug qp 

LOAD_QP | RELATIVE_QP不适用于I帧,P帧或B帧。

我和P都没有像预期的那样遵循QPs.hex。

使用以下命令时可以看到:

 ffprobe -debug qp 

解决/修复方法

这是预期的行为。

1)LOAD_QP

这里关注的是ffprobe所示的P和B帧的QP值。 QP值不遵循预期负载模式的原因是该剪辑具有许多静态帧,其中宏块中几乎没有运动。

结果,宏块被标记为类型’skip’或者它们的变换大小为零,这意味着这些宏块的QP值是什么并不重要。

这可能有点令人困惑的原因是’ffprobe -debug qp’没有显示所有这些信息。它仅显示QP值,但您还需要知道宏块类型以及变换大小。

例如,如果宏块被标记为“跳过”,那么QP值是什么并不重要,因为它不会影响结果。

话虽如此,如果用户要查看未标记为跳过的宏块或者没有变换大小为零,您将看到QP值与预期一致。

这在有很多运动的流中更容易看到,因为具有大小或零的宏块较少或者被标记为类型跳过的宏块较少。

使用以下命令时可以看到:

 ffprobe -debug qp -debug mb_type 

2)LOAD_QP | RELATIVE_QP

在这种情况下,即使对于I帧,序列也永远不会完全遵循QP输入值。这是因为根据定义,最终的QP值仅相对于加载的QP值。

P帧和B帧与上面相同,如果几乎没有运动,那么宏块将被标记为跳过并且QP值无关紧要,然后相对QP值用于没有运动的宏块。变换大小为零或未标记为类型skip。

注意:还有一些其他分析工具,如Elecard StreamEye,允许用户同时查看两者。

请登录后发表评论

    没有回复内容