## intra_main
该模式所有待编码图像都是IDR图像,都采用帧内编码模式,编码顺序和播放顺序完全一致。HM中输出结果如下
这里编了10帧,每一帧都是I-SLICE,QP选择的是32,后面的L0和L1代表的是参考图像列表,由于intra_main模式全为帧内编码,所以这里没有参考列表。
## lowdelay_P_main
该模式中第一帧是IDR图像,采用帧内编码模式,其余所有帧都为p帧,编码顺序也是按照播放顺序,参考其他图像时只参考在自己播放顺序之前的,量化参数的选择和p帧所处的时域层决定
这里用lowdelay_p_main模式编码了21帧,可以看到,除了第一帧是I-SLICE之外,其余全为P-SLICEE,该模式中只有一个参考图像列表,即L0,在这里也可以看出他参考列表的选择规律,某一帧的前一帧一定是自己的参考帧,这里的GOP选择的是4,所以0、4、8、12等等是作为主要的参考帧。举个例子,若某帧是第n帧,则n-1一定是他的参考帧,然后往前数那些是4的整数倍的帧,一共选择四个。量化参数的选择规则是以第一个IDR帧作为基准,不同的时域层进行不同程度的补偿,以4为周期,如下图
在上图中,IDR选择的是32,所以后面依次是35、34、35、33,不断循环。
##lowdelay_main
lowdelay有两种,一种就是前面的lowdelay_P,还有一种是lowdelay_B,但是在HM中,这种模式的名字的配置文件是
lowdelay_main,如下图
除了第一帧是I-SLICE之外,其余的帧都为B-SLICE,其余的无论是量化参数QP的选择规则,还是参考列表的选择规则,都是和lowdelay_P_main配置是一样的。唯一的区别是在该模式中,B-SLICE的两个参考列表都填了,但是两个参考列表内容是相同的。(其实我感觉在lowdelay模式下,两者的区别不是很大,真诚请教评论区的朋友,感谢感谢)。
##randomaccess_main
该模式与lowdelay最大的不同是图像的编码顺序和参考列表。
编码顺序与播放顺序是不同的,参考列表有两个,每一个中最多有两个参考图像。
randomaccess_main中有两个重要的参数,在HM中称为GOPSize和IntraPeriod。该模式下的具体输出如下:
该图片中,GOPSize = 8,IntraPeriod = 32,
IntraPeriod代表I帧出现的频率,每32帧出现一个,0、32、64、、、,这些I帧起着隔离的作用,如32帧之后的帧将不会将32帧之前的图像作为参考图像。I帧之间的全部是B帧,这些B帧的量化参数QP以I帧的QP为基准,根据所处的时域层加上一定的补偿值。以0帧和32帧之间的B帧为例,8、16、24帧为第一时域层,补偿值为1,4、12、20、28帧为第二时域层,补偿值为2,2、6、10、14、18、22、26、30为第三时域层,补偿值为3,最后剩下的全部都是奇数帧,补偿值为4。
在该模式下,所有的奇数帧是不作为参考图像的,具体的参考规则可以依据上图中的结果总结,比如作为第一时域层的B帧,他们参考图像就是前面两个第一时域的B帧,比如24帧的参考就是16帧和第8帧,这些参考不能越过I帧。