diff options
Diffstat (limited to 'vp8')
-rw-r--r-- | vp8/encoder/bitstream.c | 4 | ||||
-rw-r--r-- | vp8/encoder/block.h | 1 | ||||
-rw-r--r-- | vp8/encoder/encodeframe.c | 32 | ||||
-rw-r--r-- | vp8/encoder/ethreading.c | 2 | ||||
-rw-r--r-- | vp8/encoder/onyx_if.c | 26 | ||||
-rw-r--r-- | vp8/encoder/onyx_int.h | 1 |
6 files changed, 39 insertions, 27 deletions
diff --git a/vp8/encoder/bitstream.c b/vp8/encoder/bitstream.c index f84ae68f7..e666b6c7e 100644 --- a/vp8/encoder/bitstream.c +++ b/vp8/encoder/bitstream.c @@ -493,7 +493,7 @@ static void write_mb_features(vp8_writer *w, const MB_MODE_INFO *mi, const MACRO } void vp8_convert_rfct_to_prob(VP8_COMP *const cpi) { - const int *const rfct = cpi->count_mb_ref_frame_usage; + const int *const rfct = cpi->mb.count_mb_ref_frame_usage; const int rf_intra = rfct[INTRA_FRAME]; const int rf_inter = rfct[LAST_FRAME] + rfct[GOLDEN_FRAME] + rfct[ALTREF_FRAME]; @@ -996,7 +996,7 @@ int vp8_estimate_entropy_savings(VP8_COMP *cpi) { int savings = 0; - const int *const rfct = cpi->count_mb_ref_frame_usage; + const int *const rfct = cpi->mb.count_mb_ref_frame_usage; const int rf_intra = rfct[INTRA_FRAME]; const int rf_inter = rfct[LAST_FRAME] + rfct[GOLDEN_FRAME] + rfct[ALTREF_FRAME]; int new_intra, new_last, new_garf, oldtotal, newtotal; diff --git a/vp8/encoder/block.h b/vp8/encoder/block.h index f9d63eb50..c01b606a9 100644 --- a/vp8/encoder/block.h +++ b/vp8/encoder/block.h @@ -134,6 +134,7 @@ typedef struct macroblock int uv_mode_count[VP8_UV_MODES]; /* intra MB type cts this frame */ int64_t prediction_error; int64_t intra_error; + int count_mb_ref_frame_usage[MAX_REF_FRAMES]; void (*short_fdct4x4)(short *input, short *output, int pitch); diff --git a/vp8/encoder/encodeframe.c b/vp8/encoder/encodeframe.c index 8828dd999..1a234ca29 100644 --- a/vp8/encoder/encodeframe.c +++ b/vp8/encoder/encodeframe.c @@ -642,8 +642,6 @@ static void init_encode_frame_mb_context(VP8_COMP *cpi) xd->left_context = &cm->left_context; - vp8_zero(cpi->count_mb_ref_frame_usage) - x->mvc = cm->fc.mvc; vpx_memset(cm->above_context, 0, @@ -678,6 +676,7 @@ static void init_encode_frame_mb_context(VP8_COMP *cpi) vp8_zero(x->uv_mode_count) x->prediction_error = 0; x->intra_error = 0; + vp8_zero(x->count_mb_ref_frame_usage); } static void sum_coef_counts(MACROBLOCK *x, MACROBLOCK *x_thread) @@ -868,7 +867,7 @@ void vp8_encode_frame(VP8_COMP *cpi) for (i = 0; i < cpi->encoding_thread_count; i++) { int mode_count; - int mv_vals; + int c_idx; totalrate += cpi->mb_row_ei[i].totalrate; cpi->mb.skip_true_count += cpi->mb_row_ei[i].mb.skip_true_count; @@ -881,18 +880,22 @@ void vp8_encode_frame(VP8_COMP *cpi) cpi->mb.uv_mode_count[mode_count] += cpi->mb_row_ei[i].mb.uv_mode_count[mode_count]; - for(mv_vals = 0; mv_vals < MVvals; mv_vals++) + for(c_idx = 0; c_idx < MVvals; c_idx++) { - cpi->mb.MVcount[0][mv_vals] += - cpi->mb_row_ei[i].mb.MVcount[0][mv_vals]; - cpi->mb.MVcount[1][mv_vals] += - cpi->mb_row_ei[i].mb.MVcount[1][mv_vals]; + cpi->mb.MVcount[0][c_idx] += + cpi->mb_row_ei[i].mb.MVcount[0][c_idx]; + cpi->mb.MVcount[1][c_idx] += + cpi->mb_row_ei[i].mb.MVcount[1][c_idx]; } cpi->mb.prediction_error += cpi->mb_row_ei[i].mb.prediction_error; cpi->mb.intra_error += cpi->mb_row_ei[i].mb.intra_error; + for(c_idx = 0; c_idx < MAX_REF_FRAMES; c_idx++) + cpi->mb.count_mb_ref_frame_usage[c_idx] += + x->count_mb_ref_frame_usage[c_idx]; + /* add up counts for each thread */ sum_coef_counts(x, &cpi->mb_row_ei[i].mb); } @@ -987,13 +990,14 @@ void vp8_encode_frame(VP8_COMP *cpi) { int tot_modes; - tot_modes = cpi->count_mb_ref_frame_usage[INTRA_FRAME] - + cpi->count_mb_ref_frame_usage[LAST_FRAME] - + cpi->count_mb_ref_frame_usage[GOLDEN_FRAME] - + cpi->count_mb_ref_frame_usage[ALTREF_FRAME]; + tot_modes = cpi->mb.count_mb_ref_frame_usage[INTRA_FRAME] + + cpi->mb.count_mb_ref_frame_usage[LAST_FRAME] + + cpi->mb.count_mb_ref_frame_usage[GOLDEN_FRAME] + + cpi->mb.count_mb_ref_frame_usage[ALTREF_FRAME]; if (tot_modes) - cpi->this_frame_percent_intra = cpi->count_mb_ref_frame_usage[INTRA_FRAME] * 100 / tot_modes; + cpi->this_frame_percent_intra = + cpi->mb.count_mb_ref_frame_usage[INTRA_FRAME] * 100 / tot_modes; } @@ -1318,7 +1322,7 @@ int vp8cx_encode_inter_macroblock vp8_update_zbin_extra(cpi, x); } - cpi->count_mb_ref_frame_usage[xd->mode_info_context->mbmi.ref_frame] ++; + x->count_mb_ref_frame_usage[xd->mode_info_context->mbmi.ref_frame] ++; if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) { diff --git a/vp8/encoder/ethreading.c b/vp8/encoder/ethreading.c index 39340f236..021b3b094 100644 --- a/vp8/encoder/ethreading.c +++ b/vp8/encoder/ethreading.c @@ -478,6 +478,8 @@ void vp8cx_init_mbrthread_data(VP8_COMP *cpi, vp8_zero(mb->MVcount); mb->prediction_error = 0; mb->intra_error = 0; + vp8_zero(mb->count_mb_ref_frame_usage); + } } diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index c7d81b17f..8947c4f12 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -246,8 +246,8 @@ static void save_layer_context(VP8_COMP *cpi) lc->last_frame_percent_intra = cpi->last_frame_percent_intra; memcpy (lc->count_mb_ref_frame_usage, - cpi->count_mb_ref_frame_usage, - sizeof(cpi->count_mb_ref_frame_usage)); + cpi->mb.count_mb_ref_frame_usage, + sizeof(cpi->mb.count_mb_ref_frame_usage)); } static void restore_layer_context(VP8_COMP *cpi, const int layer) @@ -283,9 +283,9 @@ static void restore_layer_context(VP8_COMP *cpi, const int layer) cpi->last_frame_percent_intra = lc->last_frame_percent_intra; - memcpy (cpi->count_mb_ref_frame_usage, + memcpy (cpi->mb.count_mb_ref_frame_usage, lc->count_mb_ref_frame_usage, - sizeof(cpi->count_mb_ref_frame_usage)); + sizeof(cpi->mb.count_mb_ref_frame_usage)); } static void setup_features(VP8_COMP *cpi) @@ -2775,10 +2775,14 @@ static void update_golden_frame_stats(VP8_COMP *cpi) if (cpi->common.frames_since_golden > 1) { - cpi->recent_ref_frame_usage[INTRA_FRAME] += cpi->count_mb_ref_frame_usage[INTRA_FRAME]; - cpi->recent_ref_frame_usage[LAST_FRAME] += cpi->count_mb_ref_frame_usage[LAST_FRAME]; - cpi->recent_ref_frame_usage[GOLDEN_FRAME] += cpi->count_mb_ref_frame_usage[GOLDEN_FRAME]; - cpi->recent_ref_frame_usage[ALTREF_FRAME] += cpi->count_mb_ref_frame_usage[ALTREF_FRAME]; + cpi->recent_ref_frame_usage[INTRA_FRAME] += + cpi->mb.count_mb_ref_frame_usage[INTRA_FRAME]; + cpi->recent_ref_frame_usage[LAST_FRAME] += + cpi->mb.count_mb_ref_frame_usage[LAST_FRAME]; + cpi->recent_ref_frame_usage[GOLDEN_FRAME] += + cpi->mb.count_mb_ref_frame_usage[GOLDEN_FRAME]; + cpi->recent_ref_frame_usage[ALTREF_FRAME] += + cpi->mb.count_mb_ref_frame_usage[ALTREF_FRAME]; } } } @@ -2790,7 +2794,7 @@ static void update_rd_ref_frame_probs(VP8_COMP *cpi) { VP8_COMMON *cm = &cpi->common; - const int *const rfct = cpi->count_mb_ref_frame_usage; + const int *const rfct = cpi->mb.count_mb_ref_frame_usage; const int rf_intra = rfct[INTRA_FRAME]; const int rf_inter = rfct[LAST_FRAME] + rfct[GOLDEN_FRAME] + rfct[ALTREF_FRAME]; @@ -4709,7 +4713,9 @@ static void check_gf_quality(VP8_COMP *cpi) { VP8_COMMON *cm = &cpi->common; int gf_active_pct = (100 * cpi->gf_active_count) / (cm->mb_rows * cm->mb_cols); - int gf_ref_usage_pct = (cpi->count_mb_ref_frame_usage[GOLDEN_FRAME] * 100) / (cm->mb_rows * cm->mb_cols); + int gf_ref_usage_pct = + (cpi->mb.count_mb_ref_frame_usage[GOLDEN_FRAME] * 100) / + (cm->mb_rows * cm->mb_cols); int last_ref_zz_useage = (cpi->inter_zz_count * 100) / (cm->mb_rows * cm->mb_cols); /* Gf refresh is not currently being signalled */ diff --git a/vp8/encoder/onyx_int.h b/vp8/encoder/onyx_int.h index ed9c7624f..2918e28bf 100644 --- a/vp8/encoder/onyx_int.h +++ b/vp8/encoder/onyx_int.h @@ -493,7 +493,6 @@ typedef struct VP8_COMP int last_skip_probs_q[3]; int recent_ref_frame_usage[MAX_REF_FRAMES]; - int count_mb_ref_frame_usage[MAX_REF_FRAMES]; int this_frame_percent_intra; int last_frame_percent_intra; |