}
#endif
+ if( h->param.rc.i_rf_constant > 0 )
+ h->param.rc.i_qp_constant = h->param.rc.i_rf_constant;
+ h->param.rc.i_rf_constant = x264_clip3( h->param.rc.i_rf_constant, 0, 51 );
+ h->param.rc.i_qp_constant = x264_clip3( h->param.rc.i_qp_constant, 0, 51 );
if( !h->param.rc.b_cbr && h->param.rc.i_qp_constant == 0 )
{
h->mb.b_lossless = 1;
h->param.i_bframe = x264_clip3( h->param.i_bframe, 0, X264_BFRAME_MAX );
h->param.i_bframe_bias = x264_clip3( h->param.i_bframe_bias, -90, 100 );
h->param.b_bframe_pyramid = h->param.b_bframe_pyramid && h->param.i_bframe > 1;
+ h->param.b_bframe_adaptive = h->param.b_bframe_adaptive && h->param.i_bframe > 0;
h->param.i_deblocking_filter_alphac0 = x264_clip3( h->param.i_deblocking_filter_alphac0, -6, 6 );
h->param.i_deblocking_filter_beta = x264_clip3( h->param.i_deblocking_filter_beta, -6, 6 );
- h->param.i_cabac_init_idc = x264_clip3( h->param.i_cabac_init_idc, -1, 2 );
- /* don't yet support merging of cabac stats */
- if( h->param.i_threads > 1 && h->param.i_cabac_init_idc == -1 )
- h->param.i_cabac_init_idc = 0;
+ h->param.i_cabac_init_idc = x264_clip3( h->param.i_cabac_init_idc, 0, 2 );
if( h->param.i_cqm_preset < X264_CQM_FLAT || h->param.i_cqm_preset > X264_CQM_CUSTOM )
h->param.i_cqm_preset = X264_CQM_FLAT;
}
h->param.analyse.i_chroma_qp_offset = x264_clip3(h->param.analyse.i_chroma_qp_offset, -12, 12);
h->param.analyse.i_mv_range = x264_clip3(h->param.analyse.i_mv_range, 32, 2048);
+ if( !h->param.b_cabac )
+ h->param.analyse.i_trellis = 0;
if( h->param.rc.f_qblur < 0 )
h->param.rc.f_qblur = 0;
if( h->param.rc.f_complexity_blur < 0 )
h->param.rc.f_complexity_blur = 0;
- h->param.rc.i_qp_constant = x264_clip3(h->param.rc.i_qp_constant, 0, 51);
return 0;
}
h->frames.i_max_ref1 = h->sps->vui.i_num_reorder_frames;
h->frames.i_max_dpb = h->sps->vui.i_max_dec_frame_buffering + 1;
h->frames.b_have_lowres = !h->param.rc.b_stat_read
- && ( h->param.rc.b_cbr || h->param.b_bframe_adaptive );
+ && ( h->param.rc.b_cbr || h->param.rc.i_rf_constant || h->param.b_bframe_adaptive );
for( i = 0; i < X264_BFRAME_MAX + 3; i++ )
{
h->fdec = h->frames.reference[0];
- /* init mb cache */
x264_macroblock_cache_init( h );
-
- /* init cabac adaptive model */
- x264_cabac_model_init( &h->cabac );
+ x264_rdo_init( );
/* init CPU functions */
x264_predict_16x16_init( h->param.cpu, h->predict_16x16 );
x264_mc_init( h->param.cpu, &h->mc );
x264_csp_init( h->param.cpu, h->param.i_csp, &h->csp );
x264_quant_init( h, h->param.cpu, &h->quantf );
+ x264_deblock_init( h->param.cpu, &h->loopf );
memcpy( h->pixf.mbcmp,
( h->mb.b_lossless || h->param.analyse.i_subpel_refine <= 1 ) ? h->pixf.sad : h->pixf.satd,
h->param.analyse.i_me_method = param->analyse.i_me_method;
h->param.analyse.i_me_range = param->analyse.i_me_range;
h->param.analyse.i_subpel_refine = param->analyse.i_subpel_refine;
+ h->param.analyse.i_trellis = param->analyse.i_trellis;
h->param.analyse.intra = param->analyse.intra;
h->param.analyse.inter = param->analyse.inter;
if( h->sps->b_direct8x8_inference && h->param.i_bframe
: dtime > 0;
if( swap )
{
- x264_frame_t *tmp = list[i+1];
- list[i+1] = list[i];
- list[i] = tmp;
+ XCHG( x264_frame_t*, list[i], list[i+1] );
b_ok = 0;
}
}
{
if( h->fref0[i]->i_poc < h->fref0[i+1]->i_poc )
{
- x264_frame_t *tmp = h->fref0[i+1];
-
- h->fref0[i+1] = h->fref0[i];
- h->fref0[i] = tmp;
+ XCHG( x264_frame_t*, h->fref0[i], h->fref0[i+1] );
b_ok = 0;
break;
}
{
if( h->fref1[i]->i_poc > h->fref1[i+1]->i_poc )
{
- x264_frame_t *tmp = h->fref1[i+1];
-
- h->fref1[i+1] = h->fref1[i];
- h->fref1[i] = tmp;
+ XCHG( x264_frame_t*, h->fref1[i], h->fref1[i+1] );
b_ok = 0;
break;
}
/* move lowres copy of the image to the ref frame */
for( i = 0; i < 4; i++)
- {
- uint8_t *tmp = h->fdec->lowres[i];
- h->fdec->lowres[i] = h->fenc->lowres[i];
- h->fenc->lowres[i] = tmp;
- }
+ XCHG( uint8_t*, h->fdec->lowres[i], h->fenc->lowres[i] );
/* adaptive B decision needs a pointer, since it can't use the ref lists */
if( h->sh.i_type != SLICE_TYPE_B )
/* Nothing to do ? */
}
- /* get adapative cabac model if needed */
- if( h->param.b_cabac )
- {
- if( h->param.i_cabac_init_idc == -1 )
- {
- h->sh.i_cabac_init_idc = x264_cabac_model_get( &h->cabac, i_slice_type );
- }
- }
-
x264_macroblock_slice_init( h );
}
}
/* ---------------------- Update encoder state ------------------------- */
- /* update cabac */
- if( h->param.b_cabac && h->param.i_cabac_init_idc == -1 )
- {
- x264_cabac_model_update( &h->cabac, i_slice_type, h->sh.i_qp );
- }
/* handle references */
if( i_nal_ref_idc != NAL_PRIORITY_DISPOSABLE )