From: Loren Merritt Date: Thu, 21 Aug 2008 02:56:56 +0000 (-0600) Subject: remove the distinction between itex and ptex X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=1e393b8c8139a39e8ff9bfc782e866598f3e2615;p=x264 remove the distinction between itex and ptex (changes 2pass statsfile format) --- diff --git a/common/common.h b/common/common.h index ca555d1e..af5fb871 100644 --- a/common/common.h +++ b/common/common.h @@ -532,11 +532,10 @@ struct x264_t /* Current frame stats */ struct { - /* Headers bits (MV+Ref+MB Block Type */ - int i_hdr_bits; - /* Texture bits (Intra/Predicted) */ - int i_itex_bits; - int i_ptex_bits; + /* MV bits (MV+Ref+Block Type) */ + int i_mv_bits; + /* Texture bits (DCT coefs) */ + int i_tex_bits; /* ? */ int i_misc_bits; /* MB type counts */ diff --git a/encoder/cabac.c b/encoder/cabac.c index e1f4ffab..8187438c 100644 --- a/encoder/cabac.c +++ b/encoder/cabac.c @@ -790,7 +790,7 @@ void x264_macroblock_write_cabac( x264_t *h, x264_cabac_t *cb ) if( i_mb_type == I_PCM ) { i_mb_pos_tex = x264_cabac_pos( cb ); - h->stat.frame.i_hdr_bits += i_mb_pos_tex - i_mb_pos_start; + h->stat.frame.i_mv_bits += i_mb_pos_tex - i_mb_pos_start; memcpy( cb->p, h->mb.pic.p_fenc[0], 256 ); cb->p += 256; @@ -811,7 +811,7 @@ void x264_macroblock_write_cabac( x264_t *h, x264_cabac_t *cb ) h->mc.copy[PIXEL_8x8] ( h->mb.pic.p_fdec[1], FDEC_STRIDE, h->mb.pic.p_fenc[1], FENC_STRIDE, 8 ); h->mc.copy[PIXEL_8x8] ( h->mb.pic.p_fdec[2], FDEC_STRIDE, h->mb.pic.p_fenc[2], FENC_STRIDE, 8 ); - h->stat.frame.i_itex_bits += x264_cabac_pos( cb ) - i_mb_pos_tex; + h->stat.frame.i_tex_bits += x264_cabac_pos( cb ) - i_mb_pos_tex; return; } #endif @@ -963,7 +963,7 @@ void x264_macroblock_write_cabac( x264_t *h, x264_cabac_t *cb ) #ifndef RDO_SKIP_BS i_mb_pos_tex = x264_cabac_pos( cb ); - h->stat.frame.i_hdr_bits += i_mb_pos_tex - i_mb_pos_start; + h->stat.frame.i_mv_bits += i_mb_pos_tex - i_mb_pos_start; #endif if( i_mb_type != I_16x16 ) @@ -1018,10 +1018,7 @@ void x264_macroblock_write_cabac( x264_t *h, x264_cabac_t *cb ) } #ifndef RDO_SKIP_BS - if( IS_INTRA( i_mb_type ) ) - h->stat.frame.i_itex_bits += x264_cabac_pos( cb ) - i_mb_pos_tex; - else - h->stat.frame.i_ptex_bits += x264_cabac_pos( cb ) - i_mb_pos_tex; + h->stat.frame.i_tex_bits += x264_cabac_pos( cb ) - i_mb_pos_tex; #endif } diff --git a/encoder/cavlc.c b/encoder/cavlc.c index e6d85c6b..345957f4 100644 --- a/encoder/cavlc.c +++ b/encoder/cavlc.c @@ -344,7 +344,7 @@ void x264_macroblock_write_cavlc( x264_t *h, bs_t *s ) { bs_write_ue( s, i_mb_i_offset + 25 ); i_mb_pos_tex = bs_pos( s ); - h->stat.frame.i_hdr_bits += i_mb_pos_tex - i_mb_pos_start; + h->stat.frame.i_mv_bits += i_mb_pos_tex - i_mb_pos_start; bs_align_0( s ); @@ -362,7 +362,7 @@ void x264_macroblock_write_cavlc( x264_t *h, bs_t *s ) h->mc.copy[PIXEL_8x8] ( h->mb.pic.p_fdec[1], FDEC_STRIDE, h->mb.pic.p_fenc[1], FENC_STRIDE, 8 ); h->mc.copy[PIXEL_8x8] ( h->mb.pic.p_fdec[2], FDEC_STRIDE, h->mb.pic.p_fenc[2], FENC_STRIDE, 8 ); - h->stat.frame.i_itex_bits += bs_pos(s) - i_mb_pos_tex; + h->stat.frame.i_tex_bits += bs_pos(s) - i_mb_pos_tex; return; } #endif @@ -612,7 +612,7 @@ void x264_macroblock_write_cavlc( x264_t *h, bs_t *s ) #ifndef RDO_SKIP_BS i_mb_pos_tex = bs_pos( s ); - h->stat.frame.i_hdr_bits += i_mb_pos_tex - i_mb_pos_start; + h->stat.frame.i_mv_bits += i_mb_pos_tex - i_mb_pos_start; #endif /* Coded block patern */ @@ -666,10 +666,7 @@ void x264_macroblock_write_cavlc( x264_t *h, bs_t *s ) } #ifndef RDO_SKIP_BS - if( IS_INTRA( i_mb_type ) ) - h->stat.frame.i_itex_bits += bs_pos(s) - i_mb_pos_tex; - else - h->stat.frame.i_ptex_bits += bs_pos(s) - i_mb_pos_tex; + h->stat.frame.i_tex_bits += bs_pos(s) - i_mb_pos_tex; #endif } diff --git a/encoder/encoder.c b/encoder/encoder.c index 1c114324..d991a5e2 100644 --- a/encoder/encoder.c +++ b/encoder/encoder.c @@ -1235,9 +1235,8 @@ static void x264_slice_write( x264_t *h ) /* Compute misc bits */ h->stat.frame.i_misc_bits = bs_pos( &h->out.bs ) + NALU_OVERHEAD * 8 - - h->stat.frame.i_itex_bits - - h->stat.frame.i_ptex_bits - - h->stat.frame.i_hdr_bits; + - h->stat.frame.i_tex_bits + - h->stat.frame.i_mv_bits; } static void x264_thread_sync_context( x264_t *dst, x264_t *src ) diff --git a/encoder/ratecontrol.c b/encoder/ratecontrol.c index cb8f5c56..4c425e35 100644 --- a/encoder/ratecontrol.c +++ b/encoder/ratecontrol.c @@ -40,8 +40,7 @@ typedef struct int kept_as_ref; float qscale; int mv_bits; - int i_tex_bits; - int p_tex_bits; + int tex_bits; int misc_bits; uint64_t expected_bits; double expected_vbv; @@ -167,7 +166,7 @@ static inline double qscale2bits(ratecontrol_entry_t *rce, double qscale) { if(qscale<0.1) qscale = 0.1; - return (rce->i_tex_bits + rce->p_tex_bits + .1) * pow( rce->qscale / qscale, 1.1 ) + return (rce->tex_bits + .1) * pow( rce->qscale / qscale, 1.1 ) + rce->mv_bits * pow( X264_MAX(rce->qscale, 1) / X264_MAX(qscale, 1), 0.5 ) + rce->misc_bits; } @@ -496,8 +495,8 @@ int x264_ratecontrol_new( x264_t *h ) rce = &rc->entry[frame_number]; rce->direct_mode = 0; - e += sscanf(p, " in:%*d out:%*d type:%c q:%f itex:%d ptex:%d mv:%d misc:%d imb:%d pmb:%d smb:%d d:%c", - &pict_type, &qp, &rce->i_tex_bits, &rce->p_tex_bits, + e += sscanf(p, " in:%*d out:%*d type:%c q:%f tex:%d mv:%d misc:%d imb:%d pmb:%d smb:%d d:%c", + &pict_type, &qp, &rce->tex_bits, &rce->mv_bits, &rce->misc_bits, &rce->i_count, &rce->p_count, &rce->s_count, &rce->direct_mode); @@ -1071,11 +1070,12 @@ void x264_ratecontrol_end( x264_t *h, int bits ) dir_avg>0 ? 's' : dir_avg<0 ? 't' : '-' ) : '-'; fprintf( rc->p_stat_file_out, - "in:%d out:%d type:%c q:%.2f itex:%d ptex:%d mv:%d misc:%d imb:%d pmb:%d smb:%d d:%c;\n", + "in:%d out:%d type:%c q:%.2f tex:%d mv:%d misc:%d imb:%d pmb:%d smb:%d d:%c;\n", h->fenc->i_frame, h->i_frame, c_type, rc->qpa_rc, - h->stat.frame.i_itex_bits, h->stat.frame.i_ptex_bits, - h->stat.frame.i_hdr_bits, h->stat.frame.i_misc_bits, + h->stat.frame.i_tex_bits, + h->stat.frame.i_mv_bits, + h->stat.frame.i_misc_bits, h->stat.frame.i_mb_count_i, h->stat.frame.i_mb_count_p, h->stat.frame.i_mb_count_skip, @@ -1138,7 +1138,7 @@ static double get_qscale(x264_t *h, ratecontrol_entry_t *rce, double rate_factor q = pow( rce->blurred_complexity, 1 - h->param.rc.f_qcompress ); // avoid NaN's in the rc_eq - if(!isfinite(q) || rce->i_tex_bits + rce->p_tex_bits + rce->mv_bits == 0) + if(!isfinite(q) || rce->tex_bits + rce->mv_bits == 0) q = rcc->last_qscale; else { @@ -1190,7 +1190,7 @@ static double get_diff_limited_q(x264_t *h, ratecontrol_entry_t *rce, double q) } else if( pict_type == SLICE_TYPE_P && rcc->last_non_b_pict_type == SLICE_TYPE_P - && rce->i_tex_bits + rce->p_tex_bits == 0 ) + && rce->tex_bits == 0 ) { q = last_p_q; } @@ -1471,9 +1471,8 @@ static float rate_estimate_qscale( x264_t *h ) rcc->short_term_cplxsum += rcc->last_satd; rcc->short_term_cplxcount ++; - rce.p_tex_bits = rcc->last_satd; + rce.tex_bits = rcc->last_satd; rce.blurred_complexity = rcc->short_term_cplxsum / rcc->short_term_cplxcount; - rce.i_tex_bits = 0; rce.mv_bits = 0; rce.p_count = rcc->nmb; rce.i_count = 0;