Unified · Split
| @@ -493,7 +493,7 @@ static void write_mb_features(vp8_writer *w, const MB_MODE_INFO *mi, const MACRO · 492 unmodified lines | |||
| 493 | } | 493 | } |
| 494 | void vp8_convert_rfct_to_prob(VP8_COMP *const cpi) | 494 | void vp8_convert_rfct_to_prob(VP8_COMP *const cpi) |
| 495 | { | 495 | { |
| 496 | const int *const rfct = cpi->count_mb_ref_frame_usage; | 496 | const int *const rfct = cpi->mb.count_mb_ref_frame_usage; |
| 497 | const int rf_intra = rfct[INTRA_FRAME]; | 497 | const int rf_intra = rfct[INTRA_FRAME]; |
| 498 | const int rf_inter = rfct[LAST_FRAME] + rfct[GOLDEN_FRAME] + rfct[ALTREF_FRAME]; | 498 | const int rf_inter = rfct[LAST_FRAME] + rfct[GOLDEN_FRAME] + rfct[ALTREF_FRAME]; |
| 499 | 499 | ||
| @@ -996,7 +996,7 @@ int vp8_estimate_entropy_savings(VP8_COMP *cpi) · 496 unmodified lines | |||
| 996 | { | 996 | { |
| 997 | int savings = 0; | 997 | int savings = 0; |
| 998 | 998 | ||
| 999 | const int *const rfct = cpi->count_mb_ref_frame_usage; | 999 | const int *const rfct = cpi->mb.count_mb_ref_frame_usage; |
| 1000 | const int rf_intra = rfct[INTRA_FRAME]; | 1000 | const int rf_intra = rfct[INTRA_FRAME]; |
| 1001 | const int rf_inter = rfct[LAST_FRAME] + rfct[GOLDEN_FRAME] + rfct[ALTREF_FRAME]; | 1001 | const int rf_inter = rfct[LAST_FRAME] + rfct[GOLDEN_FRAME] + rfct[ALTREF_FRAME]; |
| 1002 | int new_intra, new_last, new_garf, oldtotal, newtotal; | 1002 | int new_intra, new_last, new_garf, oldtotal, newtotal; |
| @@ -134,6 +134,7 @@ typedef struct macroblock · 133 unmodified lines | |||
| 134 | int uv_mode_count[VP8_UV_MODES]; /* intra MB type cts this frame */ | 134 | int uv_mode_count[VP8_UV_MODES]; /* intra MB type cts this frame */ |
| 135 | int64_t prediction_error; | 135 | int64_t prediction_error; |
| 136 | int64_t intra_error; | 136 | int64_t intra_error; |
| 137 | int count_mb_ref_frame_usage[MAX_REF_FRAMES]; | ||
| 137 | 138 | ||
| 138 | 139 | ||
| 139 | void (*short_fdct4x4)(short *input, short *output, int pitch); | 140 | void (*short_fdct4x4)(short *input, short *output, int pitch); |
| @@ -642,8 +642,6 @@ static void init_encode_frame_mb_context(VP8_COMP *cpi) · 641 unmodified lines | |||
| 642 | 642 | ||
| 643 | xd->left_context = &cm->left_context; | 643 | xd->left_context = &cm->left_context; |
| 644 | 644 | ||
| 645 | vp8_zero(cpi->count_mb_ref_frame_usage) | ||
| 646 | |||
| 647 | x->mvc = cm->fc.mvc; | 645 | x->mvc = cm->fc.mvc; |
| 648 | 646 | ||
| 649 | vpx_memset(cm->above_context, 0, | 647 | vpx_memset(cm->above_context, 0, |
| @@ -678,6 +676,7 @@ static void init_encode_frame_mb_context(VP8_COMP *cpi) · 28 unmodified lines | |||
| 678 | vp8_zero(x->uv_mode_count) | 676 | vp8_zero(x->uv_mode_count) |
| 679 | x->prediction_error = 0; | 677 | x->prediction_error = 0; |
| 680 | x->intra_error = 0; | 678 | x->intra_error = 0; |
| 679 | vp8_zero(x->count_mb_ref_frame_usage); | ||
| 681 | } | 680 | } |
| 682 | 681 | ||
| 683 | static void sum_coef_counts(MACROBLOCK *x, MACROBLOCK *x_thread) | 682 | static void sum_coef_counts(MACROBLOCK *x, MACROBLOCK *x_thread) |
| @@ -868,7 +867,7 @@ void vp8_encode_frame(VP8_COMP *cpi) · 184 unmodified lines | |||
| 868 | for (i = 0; i < cpi->encoding_thread_count; i++) | 867 | for (i = 0; i < cpi->encoding_thread_count; i++) |
| 869 | { | 868 | { |
| 870 | int mode_count; | 869 | int mode_count; |
| 871 | int mv_vals; | 870 | int c_idx; |
| 872 | totalrate += cpi->mb_row_ei[i].totalrate; | 871 | totalrate += cpi->mb_row_ei[i].totalrate; |
| 873 | 872 | ||
| 874 | cpi->mb.skip_true_count += cpi->mb_row_ei[i].mb.skip_true_count; | 873 | 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) · 6 unmodified lines | |||
| 881 | cpi->mb.uv_mode_count[mode_count] += | 880 | cpi->mb.uv_mode_count[mode_count] += |
| 882 | cpi->mb_row_ei[i].mb.uv_mode_count[mode_count]; | 881 | cpi->mb_row_ei[i].mb.uv_mode_count[mode_count]; |
| 883 | 882 | ||
| 884 | for(mv_vals = 0; mv_vals < MVvals; mv_vals++) | 883 | for(c_idx = 0; c_idx < MVvals; c_idx++) |
| 885 | { | 884 | { |
| 886 | cpi->mb.MVcount[0][mv_vals] += | 885 | cpi->mb.MVcount[0][c_idx] += |
| 887 | cpi->mb_row_ei[i].mb.MVcount[0][mv_vals]; | 886 | cpi->mb_row_ei[i].mb.MVcount[0][c_idx]; |
| 888 | cpi->mb.MVcount[1][mv_vals] += | 887 | cpi->mb.MVcount[1][c_idx] += |
| 889 | cpi->mb_row_ei[i].mb.MVcount[1][mv_vals]; | 888 | cpi->mb_row_ei[i].mb.MVcount[1][c_idx]; |
| 890 | } | 889 | } |
| 891 | 890 | ||
| 892 | cpi->mb.prediction_error += | 891 | cpi->mb.prediction_error += |
| 893 | cpi->mb_row_ei[i].mb.prediction_error; | 892 | cpi->mb_row_ei[i].mb.prediction_error; |
| 894 | cpi->mb.intra_error += cpi->mb_row_ei[i].mb.intra_error; | 893 | cpi->mb.intra_error += cpi->mb_row_ei[i].mb.intra_error; |
| 895 | 894 | ||
| 895 | for(c_idx = 0; c_idx < MAX_REF_FRAMES; c_idx++) | ||
| 896 | cpi->mb.count_mb_ref_frame_usage[c_idx] += | ||
| 897 | x->count_mb_ref_frame_usage[c_idx]; | ||
| 898 | |||
| 896 | /* add up counts for each thread */ | 899 | /* add up counts for each thread */ |
| 897 | sum_coef_counts(x, &cpi->mb_row_ei[i].mb); | 900 | sum_coef_counts(x, &cpi->mb_row_ei[i].mb); |
| 898 | } | 901 | } |
| @@ -987,13 +990,14 @@ void vp8_encode_frame(VP8_COMP *cpi) · 88 unmodified lines | |||
| 987 | { | 990 | { |
| 988 | int tot_modes; | 991 | int tot_modes; |
| 989 | 992 | ||
| 990 | tot_modes = cpi->count_mb_ref_frame_usage[INTRA_FRAME] | 993 | tot_modes = cpi->mb.count_mb_ref_frame_usage[INTRA_FRAME] |
| 991 | + cpi->count_mb_ref_frame_usage[LAST_FRAME] | 994 | + cpi->mb.count_mb_ref_frame_usage[LAST_FRAME] |
| 992 | + cpi->count_mb_ref_frame_usage[GOLDEN_FRAME] | 995 | + cpi->mb.count_mb_ref_frame_usage[GOLDEN_FRAME] |
| 993 | + cpi->count_mb_ref_frame_usage[ALTREF_FRAME]; | 996 | + cpi->mb.count_mb_ref_frame_usage[ALTREF_FRAME]; |
| 994 | 997 | ||
| 995 | if (tot_modes) | 998 | if (tot_modes) |
| 996 | cpi->this_frame_percent_intra = cpi->count_mb_ref_frame_usage[INTRA_FRAME] * 100 / tot_modes; | 999 | cpi->this_frame_percent_intra = |
| 1000 | cpi->mb.count_mb_ref_frame_usage[INTRA_FRAME] * 100 / tot_modes; | ||
| 997 | 1001 | ||
| 998 | } | 1002 | } |
| 999 | 1003 | ||
| @@ -1318,7 +1322,7 @@ int vp8cx_encode_inter_macroblock · 318 unmodified lines | |||
| 1318 | vp8_update_zbin_extra(cpi, x); | 1322 | vp8_update_zbin_extra(cpi, x); |
| 1319 | } | 1323 | } |
| 1320 | 1324 | ||
| 1321 | cpi->count_mb_ref_frame_usage[xd->mode_info_context->mbmi.ref_frame] ++; | 1325 | x->count_mb_ref_frame_usage[xd->mode_info_context->mbmi.ref_frame] ++; |
| 1322 | 1326 | ||
| 1323 | if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) | 1327 | if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) |
| 1324 | { | 1328 | { |
| @@ -478,6 +478,8 @@ void vp8cx_init_mbrthread_data(VP8_COMP *cpi, · 477 unmodified lines | |||
| 478 | vp8_zero(mb->MVcount); | 478 | vp8_zero(mb->MVcount); |
| 479 | mb->prediction_error = 0; | 479 | mb->prediction_error = 0; |
| 480 | mb->intra_error = 0; | 480 | mb->intra_error = 0; |
| 481 | vp8_zero(mb->count_mb_ref_frame_usage); | ||
| 482 | |||
| 481 | } | 483 | } |
| 482 | } | 484 | } |
| 483 | 485 | ||
| @@ -246,8 +246,8 @@ static void save_layer_context(VP8_COMP *cpi) · 245 unmodified lines | |||
| 246 | lc->last_frame_percent_intra = cpi->last_frame_percent_intra; | 246 | lc->last_frame_percent_intra = cpi->last_frame_percent_intra; |
| 247 | 247 | ||
| 248 | memcpy (lc->count_mb_ref_frame_usage, | 248 | memcpy (lc->count_mb_ref_frame_usage, |
| 249 | cpi->count_mb_ref_frame_usage, | 249 | cpi->mb.count_mb_ref_frame_usage, |
| 250 | sizeof(cpi->count_mb_ref_frame_usage)); | 250 | sizeof(cpi->mb.count_mb_ref_frame_usage)); |
| 251 | } | 251 | } |
| 252 | 252 | ||
| 253 | static void restore_layer_context(VP8_COMP *cpi, const int layer) | 253 | 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) · 29 unmodified lines | |||
| 283 | 283 | ||
| 284 | cpi->last_frame_percent_intra = lc->last_frame_percent_intra; | 284 | cpi->last_frame_percent_intra = lc->last_frame_percent_intra; |
| 285 | 285 | ||
| 286 | memcpy (cpi->count_mb_ref_frame_usage, | 286 | memcpy (cpi->mb.count_mb_ref_frame_usage, |
| 287 | lc->count_mb_ref_frame_usage, | 287 | lc->count_mb_ref_frame_usage, |
| 288 | sizeof(cpi->count_mb_ref_frame_usage)); | 288 | sizeof(cpi->mb.count_mb_ref_frame_usage)); |
| 289 | } | 289 | } |
| 290 | 290 | ||
| 291 | static void setup_features(VP8_COMP *cpi) | 291 | static void setup_features(VP8_COMP *cpi) |
| @@ -2775,10 +2775,14 @@ static void update_golden_frame_stats(VP8_COMP *cpi) · 2483 unmodified lines | |||
| 2775 | 2775 | ||
| 2776 | if (cpi->common.frames_since_golden > 1) | 2776 | if (cpi->common.frames_since_golden > 1) |
| 2777 | { | 2777 | { |
| 2778 | cpi->recent_ref_frame_usage[INTRA_FRAME] += cpi->count_mb_ref_frame_usage[INTRA_FRAME]; | 2778 | cpi->recent_ref_frame_usage[INTRA_FRAME] += |
| 2779 | cpi->recent_ref_frame_usage[LAST_FRAME] += cpi->count_mb_ref_frame_usage[LAST_FRAME]; | 2779 | cpi->mb.count_mb_ref_frame_usage[INTRA_FRAME]; |
| 2780 | cpi->recent_ref_frame_usage[GOLDEN_FRAME] += cpi->count_mb_ref_frame_usage[GOLDEN_FRAME]; | 2780 | cpi->recent_ref_frame_usage[LAST_FRAME] += |
| 2781 | cpi->recent_ref_frame_usage[ALTREF_FRAME] += cpi->count_mb_ref_frame_usage[ALTREF_FRAME]; | 2781 | cpi->mb.count_mb_ref_frame_usage[LAST_FRAME]; |
| 2782 | cpi->recent_ref_frame_usage[GOLDEN_FRAME] += | ||
| 2783 | cpi->mb.count_mb_ref_frame_usage[GOLDEN_FRAME]; | ||
| 2784 | cpi->recent_ref_frame_usage[ALTREF_FRAME] += | ||
| 2785 | cpi->mb.count_mb_ref_frame_usage[ALTREF_FRAME]; | ||
| 2782 | } | 2786 | } |
| 2783 | } | 2787 | } |
| 2784 | } | 2788 | } |
| @@ -2790,7 +2794,7 @@ static void update_rd_ref_frame_probs(VP8_COMP *cpi) · 5 unmodified lines | |||
| 2790 | { | 2794 | { |
| 2791 | VP8_COMMON *cm = &cpi->common; | 2795 | VP8_COMMON *cm = &cpi->common; |
| 2792 | 2796 | ||
| 2793 | const int *const rfct = cpi->count_mb_ref_frame_usage; | 2797 | const int *const rfct = cpi->mb.count_mb_ref_frame_usage; |
| 2794 | const int rf_intra = rfct[INTRA_FRAME]; | 2798 | const int rf_intra = rfct[INTRA_FRAME]; |
| 2795 | const int rf_inter = rfct[LAST_FRAME] + rfct[GOLDEN_FRAME] + rfct[ALTREF_FRAME]; | 2799 | const int rf_inter = rfct[LAST_FRAME] + rfct[GOLDEN_FRAME] + rfct[ALTREF_FRAME]; |
| 2796 | 2800 | ||
| @@ -4709,7 +4713,9 @@ static void check_gf_quality(VP8_COMP *cpi) · 1912 unmodified lines | |||
| 4709 | { | 4713 | { |
| 4710 | VP8_COMMON *cm = &cpi->common; | 4714 | VP8_COMMON *cm = &cpi->common; |
| 4711 | int gf_active_pct = (100 * cpi->gf_active_count) / (cm->mb_rows * cm->mb_cols); | 4715 | int gf_active_pct = (100 * cpi->gf_active_count) / (cm->mb_rows * cm->mb_cols); |
| 4712 | int gf_ref_usage_pct = (cpi->count_mb_ref_frame_usage[GOLDEN_FRAME] * 100) / (cm->mb_rows * cm->mb_cols); | 4716 | int gf_ref_usage_pct = |
| 4717 | (cpi->mb.count_mb_ref_frame_usage[GOLDEN_FRAME] * 100) / | ||
| 4718 | (cm->mb_rows * cm->mb_cols); | ||
| 4713 | int last_ref_zz_useage = (cpi->inter_zz_count * 100) / (cm->mb_rows * cm->mb_cols); | 4719 | int last_ref_zz_useage = (cpi->inter_zz_count * 100) / (cm->mb_rows * cm->mb_cols); |
| 4714 | 4720 | ||
| 4715 | /* Gf refresh is not currently being signalled */ | 4721 | /* Gf refresh is not currently being signalled */ |
| @@ -493,7 +493,6 @@ typedef struct VP8_COMP · 492 unmodified lines | |||
| 493 | int last_skip_probs_q[3]; | 493 | int last_skip_probs_q[3]; |
| 494 | int recent_ref_frame_usage[MAX_REF_FRAMES]; | 494 | int recent_ref_frame_usage[MAX_REF_FRAMES]; |
| 495 | 495 | ||
| 496 | int count_mb_ref_frame_usage[MAX_REF_FRAMES]; | ||
| 497 | int this_frame_percent_intra; | 496 | int this_frame_percent_intra; |
| 498 | int last_frame_percent_intra; | 497 | int last_frame_percent_intra; |
| 499 | 498 | ||