本文主要讲的是HEVC中GOP structure的创建:
GOP structure主要成员:
- Type: slice类型,在HEVC中有I, P, B;
- POC:(picture order count)指的是在GOP中帧的序列,范围是从1到GOPSize.此序列与解码序列是不同的;
- QPOffset:QP offset是添加到QP参数集中最终用到帧编码的值;
- QPFactor:在率失真优化中使用的权值,值越大意味着低质量视频和较少的码率。通常范围是0.3~1;
- tcOffsetDiv2,betaOffsetDiv2,temporal_id:这三个值目前还没有用到;
- num_ref_pics_active:参考图像列表L0和L1大小,指定的是在编码期间每个方向可以使用的参考图片;
- num_ref_pics:指的是实际参考数, 即reference_idcs中“1”的个数;
- reference_pictures:当前帧相对于其参考帧的POC偏移,求reference POC - current POC;
- predict:为0和1表示是否使用下面三个值;
- deltaRPS:求法上一个POC-current POC;
- num_ref_idcs:是reference_idcs个数,或者说是num_ref_pic+1;
- reference_idcs:用来表示参考图片,下面详解。
#解释不太全,可以参考HEVC的software-manual.pdf
下面我将以实例给大家讲解GOP structure parameter 设置
GOPSize=16的GOP结构体
tcOffsetDiv2, betaOffsetDiv2, temporal_id全为0。
fra me | Ty pe | POC | QP offset | QP factor | ref _pics _active | num _ref _pics | referen ce_pict ures | pr e di ct | delta RPS | Ref_ idcs | Referen ce_idcs |
---|---|---|---|---|---|---|---|---|---|---|---|
F1 | P | 16 | 1 | 0.442 | 1 | 1 | -16 | 0 | |||
F2 | B | 8 | 2 | 0.3536 | 2 | 2 | -8 8 | 1 | 8 | 2 | 1 1 |
F3 | B | 4 | 3 | 0.3536 | 2 | 3 | -4 4 12 | 1 | 4 | 3 | 1 1 1 |
F4 | B | 2 | 4 | 0.3536 | 2 | 4 | -2 2 6 14 | 1 | 2 | 4 | 1 1 1 1 |
F5 | B | 1 | 5 | 0.68 | 2 | 5 | -1 1 3 7 15 | 1 | 1 | 5 | 1 1 1 1 1 |
F6 | B | 3 | 5 | 0.68 | 2 | 5 | -1 -3 1 5 13 | 1 | -2 | 6 | 1 1 1 1 1 0 |
F7 | B | 6 | 4 | 0.3536 | 2 | 4 | -2 -6 2 10 | 1 | -3 | 6 | 0 1 1 1 1 0 |
F8 | B | 5 | 5 | 0.68 | 2 | 5 | -1 -5 1 3 11 | 1 | 1 | 5 | 1 1 1 1 1 |
F9 | B | 7 | 5 | 0.68 | 2 | 5 | -1 -3 -7 1 9 | 1 | -2 | 6 | 1 1 1 1 1 0 |
F10 | B | 12 | 3 | 0.3536 | 2 | 3 | -4 -12 4 | 1 | -5 | 6 | 0 0 1 1 1 0 |
F11 | B | 10 | 4 | 0.3536 | 2 | 4 | -2 -10 2 6 | 1 | 2 | 4 | 1 1 1 1 |
F12 | B | 9 | 5 | 0.68 | 2 | 5 | -1 -9 1 3 7 | 1 | 1 | 5 | 1 1 1 1 1 |
F13 | B | 11 | 5 | 0.3536 | 2 | 5 | -1 -3 -11 1 5 1 | -2 | 6 | 1 1 1 1 1 0 | |
F14 | B | 14 | 4 | 0.3536 | 2 | 4 | -2 -6 -14 2 | 1 | -3 | 6 | 0 1 1 1 1 0 |
F15 | B | 13 | 5 | 0.68 | 2 | 5 | -1 -5 -13 1 3 | 1 | 1 | 5 | 1 1 1 1 1 |
F16 | B | 15 | 5 | 0.68 | 2 | 5 | -1 -3 -7 -15 | 1 | 1 | -2 | 6 |
–**在这中间其实最难理解的是Reference_idcs
1、F2参考的图片是POC=0, 16,所以其reference_idcs 是1 1
2、F3首先要参考F2 的reference_pictures -8 8,由图可以知道-8和8 是F3的参考图像,所以reference_idcs:1 1,接着F2是F3的参考图像,最终reference_idcs:1 1 1。这里所说的-8 8,其实就是F2参考图像,即:POC=0和16这两个帧。
3、F4,参照F3 reference_pictures:-4 4 12, -4 4和12都为F4的参考图像且F3也为F4的参考图像,reference_idcs:1 1 1 1 。-4 4和12即是POC=0 8 16这三个帧。
说到这里大家明白了吧,当遇到不是当前帧的参考图像时,reference_idcs:0。比如F6在参考F5时,F5的参考帧也是F6的参考帧,但是F5不是F6的参考帧,所以F6的reference_idcs为1 1 1 1 1 0。
–**关于reference_pictures
在HEVC中官网文档给出的其实只是一部分解释,在实际参考图片设置中POC=6将会参考POC=2。因为他会根据IntraPeriod这个参数不同而改变。下面我们设置为CDR帧。所谓的CDR是指GOP结构是开放的形式。
此时如果你的IntraPeriod:32