AMD Xilinx MPSoC VCU 使用要点
VCU编码帧率
最近有客户反馈VCU编码4K NV12 视频时, 帧率只能达到42FPS。
Vivado设计检查
通过检查Vivado设计,发现以下设计可能影响帧率,做了改进。
- VCU与DDR连接的AXI Interconnect的位宽是32-bit。 建议改为64-bit或者128-bit。
- VCU的AXI Master连接到了DDR的同一个Slave port。 建议同时运行的模块的AXI Master,连接到DDR的不同的Slave port,防止拥塞,充分利用带宽。
- VCU Coding type 被设置成Intra Frame Only, 导致VCU Encode buffer为0。 建议设置为Intra & Inter Frame ,并设置Motion Vector Range为 medium,得到更大的VCU Encode buffer。
- 使能VCU Encode buffer。
软件设计检查
- 软件设置CacheLevel2为True,使用VCU Encode buffer。
- 使用HDMI-Rx等Live Vidoe,不使用filesrc,避免数据拷贝。
结论
经过以上改进后, 帧率可以达到64FPS。
VCU延时
客户使用在gst命令前添加GST_DEBUG="GST_TRACER:7" GST_TRACERS="latency" GST_DEBUG_FILE="/run/latency.txt"来测量VCU延时,发现解码延时达到5秒钟。 这是错误的结果。 单板没有足够的内存保存5秒钟的原始视频,甚至没有足够的内存保存2秒钟的原始视频。
建议使用 GST_DEBUG=omx:6 GST_DEBUG_FILE="/run/latency.txt"来测试VCU延时。在记录文件里搜索“retrieved latency”,可以看到各个模块的延时。
普通情况下的延时数据, 编码延时18ms,解码延时200ms。
代码语言:javascript复制0:00:00.408347321 4876 0xaaab00dce770 DEBUG omxvideoenc gstomxvideoenc.c:2659:gst_omx_video_enc_set_latency:<omxh265enc-omxh265enc0> retrieved latency of 18 ms
0:00:00.506572825 4876 0xaaab00e5c770 DEBUG omxvideodec gstomxvideodec.c:2481:gst_omx_video_dec_set_latency:<omxh265dec-omxh265dec0> retrieved latency of 200 ms
Low-Latency情况下的延时数据, 编码延时4ms,解码延时17ms。
代码语言:javascript复制0:00:00.422535568 8048 0xaaaae02f2770 DEBUG omxvideoenc gstomxvideoenc.c:2659:gst_omx_video_enc_set_latency:<omxh265enc-omxh265enc0> retrieved latency of 4 ms
0:00:00.521424529 8048 0xaaaae0382770 DEBUG omxvideodec gstomxvideodec.c:2481:gst_omx_video_dec_set_latency:<omxh265dec-omxh265dec0> retrieved latency of 17 ms
Low-Latency情况下的延时数据, 编码延时4ms,解码延时17ms。
PG252中的Glass-to-Glass延时数据
Table 69: Glass-to-Glass Latency
Use Case | Capture | Encode(HEVC/AVC) | Decode | Display |
---|---|---|---|---|
Normal Latency | 16.6 | 18 ms / 35 ms | 200 ms | 16.6 ms |
Reduced Latency | 16.6 | 18 ms / 35 ms | 50 ms | 16.6 ms |
Low Latency | 16.6 ms | 4 ms / 10 ms | 17 ms | 16.6 ms |
Xlx Low-Latency | 1 ms | 4 ms / 10 ms | 9 ms | 16.6 ms |