1、Video Codec Unit(VCU) 输入和输出都是是NV12/NV16格式的视频,Y分量存放在一块连续内存区,UV分量交替存放在Y分量后面的连续内存。具体信息,可以参考PG252中的“Source Frame Format”和“Memory Format”。
一、编码相关知识
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帧对网络的冲击,减少传输延迟,同时也能起到阻隔错误的作用。
二、vcu四种延时模式
在视频编码序列中,主要有三种编码帧:I帧、P帧、B帧,如下图所示。
● I帧即Intra-coded picture(帧内编码图像帧),不参考其他图像帧,只利用本帧的信息进行编码
● P帧即Predictive-codedPicture(预测编码图像帧),利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码
● B帧即Bidirectionallypredicted picture(双向预测编码图像帧),提供最高的压缩比,它既需要之前的图
像帧(I帧或P帧),也需要后来的图像帧(P帧),采用运动预测的方式进行帧间双向预测编码
在视频编码序列中,GOP即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离(如下图3.1)。一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧(如下图3.1所示)。
码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。
vcu的延时模式:
(1)普通延时模式:有I、P、B帧、
(2)没有重新排序的延时模式:这种模式没有B帧,因为B帧需要双向预测,会增加一帧延时。可以支持仅I帧,I帧和P帧、低延时P帧
(3)低延时模式:这种模式下编码器的输出和解码器的输入是切片模式的,也就是说不需要等到一帧编完在送解码,编码和解码可以同步。如果是将编码的码流取走发送的话这种模式下编码和发送码流可以同步进行。但是编码器的输入和解码器的输出还是工作在帧模式,也就是说需要等到完整一帧才能编码,解码完一帧才输出。
(4)赛灵思低延时模式:这种模式下编解码器的输入输出是切片的,获取码流,编码,发送码流这三个步骤可以同步进行。这个需要sync ip支持
详细介绍参考PG252的VCU Latency Modes章节
三、vcu参数
vcu编码通常会指定一些参数,如下所示omxh265enc 到“!”的这段都是vcu的编码参数:
gst-launch-1.0 v4l2src io-mode=dmabuf device=/dev/video0 ! video/x-raw, width=1280, height=720, framerate=30/1 ! videoconvert ! video/x-raw, format=NV12 ! omxh265enc qp-mode=auto gop-mode=basic gop-length=60 b-frames=0 target-bitrate=15000 num-slices=8 control-rate=constant prefetch-buffer=true low-bandwidth=false filler-data=true cpb-size=1000 initial-delay=500 ! video/x-h265, alignment=au ! filesink location="/yy_test/video_1.h265"
gdr-mode:GDR帧模式可选有Horizontal/Vertical/Disabled