xilinx vcu 介绍

注:以下内容是总结自赛灵思的vcu文档<H.264/H.265 Video CodecUnit v1.2 Solutions> ,pg252

 一、编码相关知识

1.1 I帧、P帧、B帧

 ● I帧即Intra-coded picture(帧内编码图像帧),不参考其他图像帧,只利用本帧的信息进行编码
 ● P帧即Predictive-codedPicture(预测编码图像帧),利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码
 ● B帧即Bidirectionallypredicted picture(双向预测编码图像帧),提供最高的压缩比,它既需要之前的图
像帧(I帧或P帧),也需要后来的图像帧(P帧),采用运动预测的方式进行帧间双向预测编码

1.2 GOP

这是图像组(Group of Pictures)的意思,表示编码的视频序列分成了一组一组的有序的帧的集合进行编码。每个GOP一定是以一个I帧开始的,但是却不一定指代的是两个I帧之间的距离。因为一个GOP内可能包含几个I帧,只有第一个I帧(也就是第一帧)才是关键帧。在程序cfg中,GOP的长度和两个I帧的距离也是两个不同参数指定的(如IntraPeriod和GOP Size或者类似的参数)。所以,两个I帧的间距不可能大于GOP的长度,一般情况是更小的。

1.3 IDR

IDR词儿的全称是Instantaneous Decoding Refresh,是在H.264中定义的结构。在H.264中,IDR帧一定是I帧,而且一定是GOP的开始,也是H.264 GOP的关键帧。但是反过来却不成立,I帧不一定是IDR帧。

1.4 GDR

GDR(Gradual Decoding Refresh),这是一种特别的P帧,每个GDR包含一个I-Slice,几个连续的GDR帧可以起到一个I帧相同的作用,但由于GDR帧的大小与P帧接近,因此可以起到平滑码率的作用,减少超大I帧对网络的冲击,减少传输延迟,同时也能起到阻隔错误的作用。

1.5 码率(比特率)

  码率也叫比特率是一个很重要的编码参数,关系到视频的质量和编码后码流的大小。码率是每秒钟产生多少码流,单位是kbps。例如bitrate=2048kbps,那么一秒钟会产生2Mb的数据,如果帧率是30fps的话,那么平均每帧有2048/30=68kb的大小。码率越大,视频越清晰,产生的码流也越大,如果网传的话占用带宽越大,如果是存储则占用更多的磁盘空间。特别是有网传需求需要在视频清晰度和带宽之间权衡。编码器一般会有平均码率(目标码率)和最大码率这两个参数,平均码率如果设置为2Mb表示编码后的平均数据量是2Mb/s,最大码流是限制码率的最大值,在CBR编码模式中使用,最大码率>=平均码率,设置最大码率是为了提供一个码流大小上限,在网络传输过程中避免应突然一个很大的峰值而卡顿。在实际设置中720p图像h265平均码率可以选择2Mb,h264的话平均码率可以选择4Mb。

1.6 码率控制模式

  码率控制模式可分为恒定比特率编码(CBR)、可变比特率编码(VBR)和约束可变比特率编码(CVBR),具体参考https://zhuanlan.zhihu.com/p/403104760

 

二、VCU 编码器基本结构结构

2.1 Encoder Buffer

Encoder Buffer可以存储编码用的参考帧,这些参考帧可以提前从DDR中预读取到Encoder Buffer中,这样可以降低总线带宽压力,但会降低视频质量。使能Encoder Buffer 的命令如下所示:

gst-launch-1.0 videotestsrc ! omxh265enc prefetch-buffer=true ! fakesink

2.2 编码器的输入输出数据格式

Video Codec Unit(VCU) 输入和输出都是是NV12/NV16格式的视频,Y分量存放在一块连续内存区,UV分量交替存放在Y分量后面的连续内存。具体信息,可以参考的“Source Frame Format”小节。

三、sync ip

 linux sync ip驱动文件:kernel-source/drivers/staging/xlnxsync/xlnxsync.c,驱动加载成功后,会在/dev下生成xlnxsync0节点

 

 

 

 

四、vcu 编码四种延时模式

vcu的延时模式:

(1)普通延时模式:有I、P、B帧、

(2)没有重新排序的延时模式:这种模式没有B帧,因为B帧需要双向预测,会增加一帧延时。可以支持仅I帧,I帧和P帧、低延时P帧。(IPPP...IPPP...)

(3)低延时模式:这种模式下编码器的输出和解码器的输入是切片模式的,也就是说不需要等到一帧编完在送解码,编码和解码可以同步。如果是将编码的码流取走发送的话这种模式下编码和发送码流可以同步进行。但是编码器的输入和解码器的输出还是工作在帧模式,也就是说需要等到完整一帧才能编码,解码完一帧才输出。

(4)赛灵思低延时模式:这种模式下编解码器的输入输出是切片的,获取码流,编码,发送码流这三个步骤可以同步进行。这个需要sync ip支持。(IPPP...)

详细介绍参考PG252的VCU Latency Modes章节

 

五、vcu参数

5.1 使用Xilinx's ultra low-latency模式

下面这段是编码器的参数配置

omxh265enc num-slices=8 control-rate=low-latency gop-mode=low-delay-p target-bitrate=25000 cpb-size=500 gdr-mode=horizontal initial-delay=250 periodicity-idr=240 filler-data=0 prefetch-buffer=true

 编码参数解释见文档的“GStreamer Encoding Parameters”章节

num-slices=8:切8片编码
control-rate=low-latency:编码码率使用低延时码率
gop-mode=low-delay-p:第一帧为I帧,后面都是P帧(IPPPPP.....)
target-bitrate=25000:vcu目标编码速率25000kb/s
cpb-size=500:编码图片缓存区大小
gdr-mode=horizontal:GDR帧为水平模式
initial-delay=250:
periodicity-idr=240:两个IDR帧之间有240帧
filler-data=0:
prefetch-buffer=true:使用Encoder Buffer

 

posted @ 2021-07-29 18:01  YYFaGe  阅读(1050)  评论(0编辑  收藏  举报