From fc6bc8c17cb2f24b320a2db72daf300b2b46d1ca Mon Sep 17 00:00:00 2001 From: Fiona Glaser Date: Wed, 3 Feb 2010 18:19:29 -0800 Subject: [PATCH] Simplify decimate checks in macroblock_encode Also fix a misleading comment. --- common/common.h | 1 + encoder/analyse.c | 2 ++ encoder/macroblock.c | 12 +++++------- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/common/common.h b/common/common.h index 950f48f9..8b1b05a5 100644 --- a/common/common.h +++ b/common/common.h @@ -484,6 +484,7 @@ struct x264_t int b_chroma_me; int b_trellis; int b_noise_reduction; + int b_dct_decimate; int i_psy_rd; /* Psy RD strength--fixed point value*/ int i_psy_trellis; /* Psy trellis strength--fixed point value*/ diff --git a/encoder/analyse.c b/encoder/analyse.c index 25ccc44d..96d95e53 100644 --- a/encoder/analyse.c +++ b/encoder/analyse.c @@ -364,6 +364,8 @@ static void x264_mb_analyse_init( x264_t *h, x264_mb_analysis_t *a, int i_qp ) h->mb.i_subpel_refine = h->param.analyse.i_subpel_refine; h->mb.b_chroma_me = h->param.analyse.b_chroma_me && h->sh.i_type == SLICE_TYPE_P && h->mb.i_subpel_refine >= 5; + h->mb.b_dct_decimate = h->sh.i_type == SLICE_TYPE_B || + (h->param.analyse.b_dct_decimate && h->sh.i_type != SLICE_TYPE_I); h->mb.b_transform_8x8 = 0; h->mb.b_noise_reduction = 0; diff --git a/encoder/macroblock.c b/encoder/macroblock.c index a709d26c..8000d6da 100644 --- a/encoder/macroblock.c +++ b/encoder/macroblock.c @@ -208,8 +208,7 @@ static void x264_mb_encode_i16x16( x264_t *h, int i_qp ) ALIGNED_ARRAY_16( int16_t, dct_dc4x4,[16] ); int i, nz; - int b_decimate = h->sh.i_type == SLICE_TYPE_B || (h->param.analyse.b_dct_decimate && h->sh.i_type == SLICE_TYPE_P); - int decimate_score = b_decimate ? 0 : 9; + int decimate_score = h->mb.b_dct_decimate ? 0 : 9; if( h->mb.b_lossless ) { @@ -342,7 +341,7 @@ static inline int x264_mb_optimize_chroma_dc( x264_t *h, int b_inter, int i_qp, void x264_mb_encode_8x8_chroma( x264_t *h, int b_inter, int i_qp ) { int i, ch, nz, nz_dc; - int b_decimate = b_inter && (h->sh.i_type == SLICE_TYPE_B || h->param.analyse.b_dct_decimate); + int b_decimate = b_inter && h->mb.b_dct_decimate; ALIGNED_ARRAY_16( int16_t, dct2x2,[4] ); h->mb.i_cbp_chroma = 0; @@ -607,7 +606,7 @@ void x264_macroblock_encode( x264_t *h ) { int i_cbp_dc = 0; int i_qp = h->mb.i_qp; - int b_decimate = h->sh.i_type == SLICE_TYPE_B || h->param.analyse.b_dct_decimate; + int b_decimate = h->mb.b_dct_decimate; int b_force_no_skip = 0; int i,idx,nz; h->mb.i_cbp_luma = 0; @@ -914,8 +913,7 @@ void x264_macroblock_encode( x264_t *h ) /***************************************************************************** * x264_macroblock_probe_skip: - * Check if the current MB could be encoded as a [PB]_SKIP (it supposes you use - * the previous QP + * Check if the current MB could be encoded as a [PB]_SKIP *****************************************************************************/ int x264_macroblock_probe_skip( x264_t *h, int b_bidir ) { @@ -1052,7 +1050,7 @@ void x264_macroblock_encode_p8x8( x264_t *h, int i8 ) int i_qp = h->mb.i_qp; uint8_t *p_fenc = h->mb.pic.p_fenc[0] + (i8&1)*8 + (i8>>1)*8*FENC_STRIDE; uint8_t *p_fdec = h->mb.pic.p_fdec[0] + (i8&1)*8 + (i8>>1)*8*FDEC_STRIDE; - int b_decimate = h->sh.i_type == SLICE_TYPE_B || h->param.analyse.b_dct_decimate; + int b_decimate = h->mb.b_dct_decimate; int nnz8x8 = 0; int ch, nz; -- 2.40.0