427 参考帧管理

Ppt中介绍的大体过程

  1. 建立参考队列list0和list1

P slice从list0中取参考帧做预测,b slice 从list1中取参考帧做预测

List0中存储的是display顺序在poc顺序在当前帧之前的帧,顺序是从高到低

List1中存储的是在当前帧poc之后的真。它的顺序是从低到高。

  1. 里面有一个函数x264_reference_check_reorder 用来检测是否list0有顺序和标准不符合的帧存在
  2.  

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中,然后再进行排序等一系列操作

原文地址:https://www.cnblogs.com/hatreds/p/2473882.html