diff --git a/vp8/encoder/encodeintra.c b/vp8/encoder/encodeintra.c index 6611e0077ba591182175b7e841603dc170fffcb0..a790456f89a1ecdef13a23325e651ed8528115c2 100644 --- a/vp8/encoder/encodeintra.c +++ b/vp8/encoder/encodeintra.c @@ -105,7 +105,7 @@ void vp8_encode_intra16x16mby(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) #if !(CONFIG_REALTIME_ONLY) #if 1 - if (x->optimize && x->rddiv > 1) + if (x->optimize==2 ||(x->optimize && x->rddiv > 1)) vp8_optimize_mby(x, rtcd); #endif @@ -200,7 +200,7 @@ void vp8_encode_intra16x16mbuv(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) #if !(CONFIG_REALTIME_ONLY) #if 1 - if (x->optimize && x->rddiv > 1) + if (x->optimize==2 ||(x->optimize && x->rddiv > 1)) vp8_optimize_mbuv(x, rtcd); #endif diff --git a/vp8/encoder/encodemb.c b/vp8/encoder/encodemb.c index 1f9568902b56814277ea193c8814f2eee1163d6d..782b6fd2d8a99ca65c436d3f038e8480164a9805 100644 --- a/vp8/encoder/encodemb.c +++ b/vp8/encoder/encodemb.c @@ -633,7 +633,7 @@ void vp8_encode_inter16x16(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x) vp8_quantize_mb(x); #if !(CONFIG_REALTIME_ONLY) - if (x->optimize && x->rddiv > 1) + if (x->optimize==2 ||(x->optimize && x->rddiv > 1)) vp8_optimize_mb(x, rtcd); #endif diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index 34af6ea8ee21cf69de7b3eaff60ab07451f53271..382a9de5828f38281b279e428326c3fe56c7f153 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -1282,7 +1282,7 @@ void vp8_set_speed_features(VP8_COMP *cpi) } if (cpi->sf.optimize_coefficients == 1) - cpi->mb.optimize = 1; + cpi->mb.optimize = 1 + cpi->is_next_src_alt_ref; else cpi->mb.optimize = 0; @@ -1749,6 +1749,7 @@ void vp8_init_config(VP8_PTR ptr, VP8_CONFIG *oxcf) // YX Temp cpi->last_alt_ref_sei = -1; cpi->is_src_frame_alt_ref = 0; + cpi->is_next_src_alt_ref = 0; #if 0 // Experimental RD Code @@ -2034,6 +2035,7 @@ void vp8_change_config(VP8_PTR ptr, VP8_CONFIG *oxcf) // YX Temp cpi->last_alt_ref_sei = -1; cpi->is_src_frame_alt_ref = 0; + cpi->is_next_src_alt_ref = 0; #if 0 // Experimental RD Code @@ -5419,6 +5421,7 @@ int vp8_get_compressed_data(VP8_PTR ptr, unsigned int *frame_flags, unsigned lon cm->show_frame = 0; cpi->source_alt_ref_pending = FALSE; // Clear Pending altf Ref flag. cpi->is_src_frame_alt_ref = 0; + cpi->is_next_src_alt_ref = 0; } else #endif @@ -5437,6 +5440,11 @@ int vp8_get_compressed_data(VP8_PTR ptr, unsigned int *frame_flags, unsigned lon cpi->is_src_frame_alt_ref = 0; cpi->source_encode_index = (cpi->source_encode_index + 1) % cpi->oxcf.lag_in_frames; + + if(cpi->source_encode_index == cpi->last_alt_ref_sei) + cpi->is_next_src_alt_ref = 1; + else + cpi->is_next_src_alt_ref = 0; } #endif diff --git a/vp8/encoder/onyx_int.h b/vp8/encoder/onyx_int.h index cb768c01840d2e4bf18876adf20b5df75e121416..8a34a1f3aab0692ee18144ffd13e674e93c18265 100644 --- a/vp8/encoder/onyx_int.h +++ b/vp8/encoder/onyx_int.h @@ -273,6 +273,7 @@ typedef struct int last_alt_ref_sei; int is_src_frame_alt_ref; + int is_next_src_alt_ref; int gold_is_last; // golden frame same as last frame ( short circuit gold searches) int alt_is_last; // Alt reference frame same as last ( short circuit altref search)