H.264解码器中参考图像的管理

编程

图1 frame_num取值示例
note:
B帧不作参考时,我们可以忽略B帧,然后I/P帧按排列顺序是依次递增得。
B帧作参考时,frame_num就完全等同与编解码得顺序。
PicNum: 短期参考图像的序号,其计算过程如下:
//note: frame_num为当前图象的序号
if(listX[i]->frame_num > frame_num)
{
       FrameNumWrap=listX[i]->frame_num - frame_num;
}
else
       FrameNumWrap=listX[i]->frame_num;
 
listX[i]->PicNum=FrameNumWrap;
LongTermPicNum: 长期参考图象的序号,外部指定。
 
二、解码流程(突出参考图像管理部分)

图2 解码流程
参考图像列表初始化:将DBP中符合要求的重建图像放到listX[0],并进行排序。
参考图像列表重排序:根据当前slice码流中的句法元素,对listX[0]进行重排序。
参考图像的标记:对DBP中的重建图像进行标记,可标记为:不作参考,短期参考,或长期参考。
 
二、参考图像的标记
note: 之所以先讲参考图像的标记,是为了和实际解码的过程相一致,因为第1帧I帧是不需要用到参考帧的,只会保存参考帧。
如果当前图像不作参考,则跳过该环节。
1、保存重建图像到DPB
如果当前图像是IDR帧,则根据读入的语法元素,指明是否清空DPB,另外,还确定将IDR帧作为长期参考还是短期参考。
非IDR帧情况,当前帧作为短期参考插入DPB。
 
2、参考图像标记
参考图像标记有两种方法,自动滑窗法和自定义标记法,由相应的句法元素确定采用何种方法。
自动滑窗法:即FIFO的方法,当DPB已满时,将DPB中PicNum最小的短期参考图像(即最早的参考图像)移出DPB。
自定义标记法(adaptive_ref_pic_marking_mode):在句法元素中指定将某一参考图像设置为何种类型的参考图像或移出。其命令如下表:
表1 自定义参考图象标记命令


 
三、参考图像的初始化
1、将DBP中符合要求的重建图像放到listX[0]
 
2、排序
listX[0]中,先放短期参考,再放长期参考,
短期参考按PicNum降序排列,
长期参考按LongTermPicNum升序排列。
具体见表2的示例:
表2 参考图象初始化排序实例

四、参考图像的重排序
为什么要重排序:节省码流,当一个序号(ref_idx)比较大的参考图象被用到的比例很大,这个时候将该参考图象的序号调小可以降低码率。这个过程即重排序。
 
参考图象重排序的大致过程如下:
对listX[0]中的参考图象进行遍历,每遍历到一个参考图象,读入句法元素reordering_of_pic_nums_idc,更新其参考图象序号。
 
reordering_of_pic_nums_idc具体命令如下:
0/1:指定短期参考图象序号,分别用加偏移量和减偏移量的方法
2:指定长期参考图象序号
3:结束重排序。
 
参考图象重排序实例:
 
 
 
 

以上是 H.264解码器中参考图像的管理 的全部内容, 来源链接: utcz.com/z/515363.html

回到顶部