参数含义:intra-refresh
是否要把I帧平摊到多个P帧的intra 宏块中传输。 意思就是除了第一个IDR,后面都没有IDR<然后每个p帧中有几列是帧内参考的,一个GOP内所有的帧内参考组合起来就是一个完整的帧。
参数解析:
OPT("intra-refresh")
p->b_intra_refresh = atobool(value);//注意设置这个选项的时候,参考帧个数只能是1
代码逻辑:
if( h->param.b_intra_refresh && h->param.rc.i_vbv_buffer_size && h->fenc->i_type == X264_TYPE_P )
{
int ip_factor = 256 * h->param.rc.f_ip_factor; /* fix8 */
for( int y = 0; y < h->mb.i_mb_height; y++ )
{
int mb_xy = y * h->mb.i_mb_stride + h->fdec->i_pir_start_col;
for( int x = h->fdec->i_pir_start_col; x <= h->fdec->i_pir_end_col; x++, mb_xy++ )
{
int intra_cost = (h->fenc->i_intra_cost[mb_xy] * ip_factor + 128) >> 8;
int inter_cost = h->fenc->lowres_costs[b-p0][p1-b][mb_xy] & LOWRES_COST_MASK;
int diff = intra_cost - inter_cost;
if( h->param.rc.i_aq_mode )
h->fdec->i_row_satd[y] += (diff * frames[b]->i_inv_qscale_factor[mb_xy] + 128) >> 8;
else
h->fdec->i_row_satd[y] += diff;
cost += diff;
}
}
}
x264源码分析--参数intra-refresh
最新推荐文章于 2024-03-15 16:15:20 发布