问题引出
最近在做短期参考帧的marking操作时发现一个问题,我的预期是用两个短期参考帧,其中一个短期参考帧为当前帧的前一帧,另一个为距离当前位置较远的一个帧。
在大多数的帧都没有问题,但是在个别帧的位置会发生参考帧列表中帧的顺序和预期不一致的情况,我在第28帧的两个参考帧为13帧和27帧,然后把27帧unused,但是当第29帧时参考帧列表为[13,28]。
我预期是短期参考帧列表应该是按降序排列,顺序应该为[28,13],由于顺序和预期不一致,后面出现花屏。
问题的原因
为什么会出现这样的问题呢?因为为了节省码流,解码端记录的帧号为不像编码端那样,而是通过log2_max_frame_num_minus4设置最大帧号。
例如上图log2_max_frame_num_minus4=0,所以log2_max_frame_num = 4,解码端的内部帧号范围是0~15。
在解码端,如果当前帧号为13,有两个参考帧帧号分别为9,10,那么解码器认为帧号10距离当前帧较近,它排序参考帧列表为[10,9];如果当前帧号为1,两个参考帧帧号为14,0&#x