list0和list1帧内排序情况
JM采用和上图一致的方案,但是x264对参考队列管理比较简单,ref0中存放小于current_poc的帧,且按降序排列;ref1中存放大于current_poc的帧,且按升序排列
//参考队列freference复位
static inline void x264_reference_reset( x264_t *h )
{
int i;
/* reset ref pictures */
for( i = 1; i < h->param.i_frame_reference+2; i++ )
{
h->freference[i]->i_poc = -1;
}
h->freference[0]->i_poc = 0;
}
/*下面部分,没编码一帧都会被执行到*/
//初始化fref0和fref1,会根据当前帧的poc重排参考帧
static inline void x264_reference_build_list( x264_t *h, int i_poc )
{
int i;
int b_ok;
/* build ref list 0/1 */
h->i_ref0 = 0;
h->i_ref1 = 0;
for( i = 1; i < h->param.i_frame_reference+2; i++ )//先用参考队列freference初始化ref0和ref1
{
if( h->freference[i]->i_poc >= 0 )
{
if( h->freference[i]->i_poc < i_poc )
{
h->fref0[h->i_ref0++] = h->freference[i]