jm8.6之参考帧管理

来源:互联网 发布:edf调度算法源代码 编辑:程序博客网 时间:2024/06/06 08:29

管理概述:

        在默认情况下,图像列表list0中的短期图像按照从高到低的图像次序(PicNum)进行排序(由帧号推出的变量),而长期图像则按照从低到高的图像次序(LongTermPicNum)进行排序。编码器可以明确地指定默认参考图像列表顺序的改变。
        当一个新的图像被加到短期列表的位置0时,剩余的短期图像列表按递增顺序索引。如果短期和长期图像的数目等于参考帧的最大数目,则最先存入的短期图像(有最大的索引)将从缓存器中删除(这个策略被称为滑动窗口内存控制)。
        实际上,这个过程的实现是在编码器和解码器各自产生一个N长度短期参考图像的窗口,这个窗口内存记录当前图像和(N-1)个先进编码的图像。对于帧间编码的宏块,编码器为每个宏块进行分块是从图像列表list0中选择一个参考图像的。参考图像的选择用一个索引是进行标记,这里索引号0对应于短期列表中的第一幅图像,而长期图像的索引开始于最后一个短期图像之后。

为什么要分长期参考和短期参考呢? 
    因为short term参考帧以frame_num做为索引,而frame_num是有最大值的,达到最大值后会进行取模,所以短期参考帧不能长期存在于参考列表中,因为一旦frame_num达到最大值后取模为0,该索引就失去意义了,而长期参考帧则不同!

什么时候做长期参考帧,什么时候做短期参考帧?
如果当前图像是IDR帧,则根据读入的语法元素,指明是否清空DPB,另外,还确定将IDR帧作为长期参考还是短期参考。
非IDR帧情况,当前帧作为短期参考插入DPB。

参考帧为什么要重排序?
    由于在解码每个MB时,都要用到参考帧的索引ref_idx_l0或ref_idx_l1。可能发生这样的情况,有个参考帧(短期参考帧或者长期参考帧)对于解码一个图像特别有用,但是这个参考帧在缺省的队列中并不位于索引值为0的位置,所以编码大的索引值需要花费多的比特。参考帧的重排序可以使这个参考帧位于索引值比较小的位置,以节省编码比特数。

0 0
原创粉丝点击