Ppt中介绍的大体过程
- 建立参考队列list0和list1
P slice从list0中取参考帧做预测,b slice 从list1中取参考帧做预测
List0中存储的是display顺序在poc顺序在当前帧之前的帧,顺序是从高到低
List1中存储的是在当前帧poc之后的真。它的顺序是从低到高。
- 里面有一个函数x264_reference_check_reorder 用来检测是否list0有顺序和标准不符合的帧存在
X264_t中一些变量含义
Int i_ref[2] 表示参考帧个数 i_ref[0]表示过去的帧 i_ref[1]表示以后的帧
h->frames.fref[][] DPB表示的就是list0和list1 由第一个循环可以看出,通过poc顺序来存放reference
h->i_ref 参考帧队列中的索引
再次理一下自己思路
下面两个函数一起作用,然后完成DPB的更新
static inline int x264_reference_update( x264_t *h )
x264_reference_build_list( h, h->fdec->i_poc );
在 x264_reference_update函数中,首先对于unused里面做一些操作掠过
然后再通过 x264_frame_push( h->frames.reference, h->fdec )中将编过码重建的帧放入h->frames.reference,通过看h->fdec->i_frame 是线性的(理解错误i_frame)递增,所以首先通过这个放入h->frames.reference数组然后再后面的x264_referecne_build_list中对于当前刚放进去的h->frames.reference放入dpb中,然后再进行排序等一系列操作