Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Side by Side Diff: source/libvpx/vp9/encoder/vp9_rdopt.c

Issue 290653003: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 } 738 }
739 739
740 static void txfm_rd_in_plane(MACROBLOCK *x, 740 static void txfm_rd_in_plane(MACROBLOCK *x,
741 int *rate, int64_t *distortion, 741 int *rate, int64_t *distortion,
742 int *skippable, int64_t *sse, 742 int *skippable, int64_t *sse,
743 int64_t ref_best_rd, int plane, 743 int64_t ref_best_rd, int plane,
744 BLOCK_SIZE bsize, TX_SIZE tx_size, 744 BLOCK_SIZE bsize, TX_SIZE tx_size,
745 int use_fast_coef_casting) { 745 int use_fast_coef_casting) {
746 MACROBLOCKD *const xd = &x->e_mbd; 746 MACROBLOCKD *const xd = &x->e_mbd;
747 const struct macroblockd_plane *const pd = &xd->plane[plane]; 747 const struct macroblockd_plane *const pd = &xd->plane[plane];
748 struct rdcost_block_args args = { 0 }; 748 struct rdcost_block_args args;
749 vp9_zero(args);
749 args.x = x; 750 args.x = x;
750 args.best_rd = ref_best_rd; 751 args.best_rd = ref_best_rd;
751 args.use_fast_coef_costing = use_fast_coef_casting; 752 args.use_fast_coef_costing = use_fast_coef_casting;
752 753
753 if (plane == 0) 754 if (plane == 0)
754 xd->mi[0]->mbmi.tx_size = tx_size; 755 xd->mi[0]->mbmi.tx_size = tx_size;
755 756
756 vp9_get_entropy_contexts(bsize, tx_size, pd, args.t_above, args.t_left); 757 vp9_get_entropy_contexts(bsize, tx_size, pd, args.t_above, args.t_left);
757 758
758 args.so = get_scan(xd, tx_size, pd->plane_type, 0); 759 args.so = get_scan(xd, tx_size, pd->plane_type, 0);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 BLOCK_SIZE bs) { 800 BLOCK_SIZE bs) {
800 const TX_SIZE max_tx_size = max_txsize_lookup[bs]; 801 const TX_SIZE max_tx_size = max_txsize_lookup[bs];
801 VP9_COMMON *const cm = &cpi->common; 802 VP9_COMMON *const cm = &cpi->common;
802 MACROBLOCKD *const xd = &x->e_mbd; 803 MACROBLOCKD *const xd = &x->e_mbd;
803 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; 804 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
804 vp9_prob skip_prob = vp9_get_skip_prob(cm, xd); 805 vp9_prob skip_prob = vp9_get_skip_prob(cm, xd);
805 int64_t rd[TX_SIZES][2] = {{INT64_MAX, INT64_MAX}, 806 int64_t rd[TX_SIZES][2] = {{INT64_MAX, INT64_MAX},
806 {INT64_MAX, INT64_MAX}, 807 {INT64_MAX, INT64_MAX},
807 {INT64_MAX, INT64_MAX}, 808 {INT64_MAX, INT64_MAX},
808 {INT64_MAX, INT64_MAX}}; 809 {INT64_MAX, INT64_MAX}};
809 int n, m; 810 TX_SIZE n, m;
810 int s0, s1; 811 int s0, s1;
811 const TX_SIZE max_mode_tx_size = tx_mode_to_biggest_tx_size[cm->tx_mode]; 812 const TX_SIZE max_mode_tx_size = tx_mode_to_biggest_tx_size[cm->tx_mode];
812 int64_t best_rd = INT64_MAX; 813 int64_t best_rd = INT64_MAX;
813 TX_SIZE best_tx = TX_4X4; 814 TX_SIZE best_tx = TX_4X4;
814 815
815 const vp9_prob *tx_probs = get_tx_probs2(max_tx_size, xd, &cm->fc.tx_probs); 816 const vp9_prob *tx_probs = get_tx_probs2(max_tx_size, xd, &cm->fc.tx_probs);
816 assert(skip_prob > 0); 817 assert(skip_prob > 0);
817 s0 = vp9_cost_bit(skip_prob, 0); 818 s0 = vp9_cost_bit(skip_prob, 0);
818 s1 = vp9_cost_bit(skip_prob, 1); 819 s1 = vp9_cost_bit(skip_prob, 1);
819 820
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 BLOCK_SIZE bs) { 883 BLOCK_SIZE bs) {
883 const TX_SIZE max_tx_size = max_txsize_lookup[bs]; 884 const TX_SIZE max_tx_size = max_txsize_lookup[bs];
884 VP9_COMMON *const cm = &cpi->common; 885 VP9_COMMON *const cm = &cpi->common;
885 MACROBLOCKD *const xd = &x->e_mbd; 886 MACROBLOCKD *const xd = &x->e_mbd;
886 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; 887 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
887 vp9_prob skip_prob = vp9_get_skip_prob(cm, xd); 888 vp9_prob skip_prob = vp9_get_skip_prob(cm, xd);
888 int64_t rd[TX_SIZES][2] = {{INT64_MAX, INT64_MAX}, 889 int64_t rd[TX_SIZES][2] = {{INT64_MAX, INT64_MAX},
889 {INT64_MAX, INT64_MAX}, 890 {INT64_MAX, INT64_MAX},
890 {INT64_MAX, INT64_MAX}, 891 {INT64_MAX, INT64_MAX},
891 {INT64_MAX, INT64_MAX}}; 892 {INT64_MAX, INT64_MAX}};
892 int n, m; 893 TX_SIZE n, m;
893 int s0, s1; 894 int s0, s1;
894 double scale_rd[TX_SIZES] = {1.73, 1.44, 1.20, 1.00}; 895 double scale_rd[TX_SIZES] = {1.73, 1.44, 1.20, 1.00};
895 const TX_SIZE max_mode_tx_size = tx_mode_to_biggest_tx_size[cm->tx_mode]; 896 const TX_SIZE max_mode_tx_size = tx_mode_to_biggest_tx_size[cm->tx_mode];
896 int64_t best_rd = INT64_MAX; 897 int64_t best_rd = INT64_MAX;
897 TX_SIZE best_tx = TX_4X4; 898 TX_SIZE best_tx = TX_4X4;
898 899
899 const vp9_prob *tx_probs = get_tx_probs2(max_tx_size, xd, &cm->fc.tx_probs); 900 const vp9_prob *tx_probs = get_tx_probs2(max_tx_size, xd, &cm->fc.tx_probs);
900 assert(skip_prob > 0); 901 assert(skip_prob > 0);
901 s0 = vp9_cost_bit(skip_prob, 0); 902 s0 = vp9_cost_bit(skip_prob, 0);
902 s1 = vp9_cost_bit(skip_prob, 1); 903 s1 = vp9_cost_bit(skip_prob, 1);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 int64_t d[TX_SIZES], sse[TX_SIZES]; 955 int64_t d[TX_SIZES], sse[TX_SIZES];
955 MACROBLOCKD *xd = &x->e_mbd; 956 MACROBLOCKD *xd = &x->e_mbd;
956 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; 957 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
957 const TX_SIZE max_tx_size = max_txsize_lookup[bs]; 958 const TX_SIZE max_tx_size = max_txsize_lookup[bs];
958 TX_SIZE tx_size; 959 TX_SIZE tx_size;
959 960
960 assert(bs == mbmi->sb_type); 961 assert(bs == mbmi->sb_type);
961 962
962 vp9_subtract_plane(x, bs, 0); 963 vp9_subtract_plane(x, bs, 0);
963 964
964 if (cpi->sf.tx_size_search_method == USE_LARGESTALL) { 965 if (cpi->sf.tx_size_search_method == USE_LARGESTALL || xd->lossless) {
965 vpx_memset(txfm_cache, 0, TX_MODES * sizeof(int64_t)); 966 vpx_memset(txfm_cache, 0, TX_MODES * sizeof(int64_t));
966 choose_largest_txfm_size(cpi, x, rate, distortion, skip, sse, 967 choose_largest_txfm_size(cpi, x, rate, distortion, skip, sse,
967 ref_best_rd, bs); 968 ref_best_rd, bs);
968 if (psse) 969 if (psse)
969 *psse = sse[mbmi->tx_size]; 970 *psse = sse[mbmi->tx_size];
970 return; 971 return;
971 } 972 }
972 973
973 if (cpi->sf.tx_size_search_method == USE_LARGESTINTRA_MODELINTER) { 974 if (cpi->sf.tx_size_search_method == USE_LARGESTINTRA_MODELINTER) {
974 for (tx_size = TX_4X4; tx_size <= max_tx_size; ++tx_size) 975 for (tx_size = TX_4X4; tx_size <= max_tx_size; ++tx_size)
(...skipping 17 matching lines...) Expand all
992 static void intra_super_block_yrd(VP9_COMP *cpi, MACROBLOCK *x, int *rate, 993 static void intra_super_block_yrd(VP9_COMP *cpi, MACROBLOCK *x, int *rate,
993 int64_t *distortion, int *skip, 994 int64_t *distortion, int *skip,
994 int64_t *psse, BLOCK_SIZE bs, 995 int64_t *psse, BLOCK_SIZE bs,
995 int64_t txfm_cache[TX_MODES], 996 int64_t txfm_cache[TX_MODES],
996 int64_t ref_best_rd) { 997 int64_t ref_best_rd) {
997 int64_t sse[TX_SIZES]; 998 int64_t sse[TX_SIZES];
998 MACROBLOCKD *xd = &x->e_mbd; 999 MACROBLOCKD *xd = &x->e_mbd;
999 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; 1000 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
1000 1001
1001 assert(bs == mbmi->sb_type); 1002 assert(bs == mbmi->sb_type);
1002 if (cpi->sf.tx_size_search_method != USE_FULL_RD) { 1003 if (cpi->sf.tx_size_search_method != USE_FULL_RD || xd->lossless) {
1003 vpx_memset(txfm_cache, 0, TX_MODES * sizeof(int64_t)); 1004 vpx_memset(txfm_cache, 0, TX_MODES * sizeof(int64_t));
1004 choose_largest_txfm_size(cpi, x, rate, distortion, skip, sse, 1005 choose_largest_txfm_size(cpi, x, rate, distortion, skip, sse,
1005 ref_best_rd, bs); 1006 ref_best_rd, bs);
1006 } else { 1007 } else {
1007 int r[TX_SIZES][2], s[TX_SIZES]; 1008 int r[TX_SIZES][2], s[TX_SIZES];
1008 int64_t d[TX_SIZES]; 1009 int64_t d[TX_SIZES];
1009 TX_SIZE tx_size; 1010 TX_SIZE tx_size;
1010 for (tx_size = TX_4X4; tx_size <= max_txsize_lookup[bs]; ++tx_size) 1011 for (tx_size = TX_4X4; tx_size <= max_txsize_lookup[bs]; ++tx_size)
1011 txfm_rd_in_plane(x, &r[tx_size][0], &d[tx_size], 1012 txfm_rd_in_plane(x, &r[tx_size][0], &d[tx_size],
1012 &s[tx_size], &sse[tx_size], 1013 &s[tx_size], &sse[tx_size],
(...skipping 1292 matching lines...) Expand 10 before | Expand all | Expand 10 after
2305 cpi->switchable_interp_costs[ctx][mbmi->interp_filter]; 2306 cpi->switchable_interp_costs[ctx][mbmi->interp_filter];
2306 } 2307 }
2307 2308
2308 static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x, 2309 static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x,
2309 BLOCK_SIZE bsize, 2310 BLOCK_SIZE bsize,
2310 int mi_row, int mi_col, 2311 int mi_row, int mi_col,
2311 int_mv *tmp_mv, int *rate_mv) { 2312 int_mv *tmp_mv, int *rate_mv) {
2312 MACROBLOCKD *xd = &x->e_mbd; 2313 MACROBLOCKD *xd = &x->e_mbd;
2313 const VP9_COMMON *cm = &cpi->common; 2314 const VP9_COMMON *cm = &cpi->common;
2314 MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi; 2315 MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi;
2315 struct buf_2d backup_yv12[MAX_MB_PLANE] = {{0}}; 2316 struct buf_2d backup_yv12[MAX_MB_PLANE] = {{0, 0}};
2316 int bestsme = INT_MAX; 2317 int bestsme = INT_MAX;
2317 int step_param; 2318 int step_param;
2318 int sadpb = x->sadperbit16; 2319 int sadpb = x->sadperbit16;
2319 MV mvp_full; 2320 MV mvp_full;
2320 int ref = mbmi->ref_frame[0]; 2321 int ref = mbmi->ref_frame[0];
2321 MV ref_mv = mbmi->ref_mvs[ref][0].as_mv; 2322 MV ref_mv = mbmi->ref_mvs[ref][0].as_mv;
2322 2323
2323 int tmp_col_min = x->mv_col_min; 2324 int tmp_col_min = x->mv_col_min;
2324 int tmp_col_max = x->mv_col_max; 2325 int tmp_col_max = x->mv_col_max;
2325 int tmp_row_min = x->mv_row_min; 2326 int tmp_row_min = x->mv_row_min;
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
2507 // Use mv result from single mode as mvp. 2508 // Use mv result from single mode as mvp.
2508 tmp_mv = frame_mv[refs[id]].as_mv; 2509 tmp_mv = frame_mv[refs[id]].as_mv;
2509 2510
2510 tmp_mv.col >>= 3; 2511 tmp_mv.col >>= 3;
2511 tmp_mv.row >>= 3; 2512 tmp_mv.row >>= 3;
2512 2513
2513 // Small-range full-pixel motion search 2514 // Small-range full-pixel motion search
2514 bestsme = vp9_refining_search_8p_c(x, &tmp_mv, sadpb, 2515 bestsme = vp9_refining_search_8p_c(x, &tmp_mv, sadpb,
2515 search_range, 2516 search_range,
2516 &cpi->fn_ptr[bsize], 2517 &cpi->fn_ptr[bsize],
2517 &ref_mv[id].as_mv, second_pred, 2518 &ref_mv[id].as_mv, second_pred);
2518 pw, ph);
2519 if (bestsme < INT_MAX) 2519 if (bestsme < INT_MAX)
2520 bestsme = vp9_get_mvpred_av_var(x, &tmp_mv, &ref_mv[id].as_mv, 2520 bestsme = vp9_get_mvpred_av_var(x, &tmp_mv, &ref_mv[id].as_mv,
2521 second_pred, &cpi->fn_ptr[bsize], 1); 2521 second_pred, &cpi->fn_ptr[bsize], 1);
2522 2522
2523 x->mv_col_min = tmp_col_min; 2523 x->mv_col_min = tmp_col_min;
2524 x->mv_col_max = tmp_col_max; 2524 x->mv_col_max = tmp_col_max;
2525 x->mv_row_min = tmp_row_min; 2525 x->mv_row_min = tmp_row_min;
2526 x->mv_row_max = tmp_row_max; 2526 x->mv_row_max = tmp_row_max;
2527 2527
2528 if (bestsme < INT_MAX) { 2528 if (bestsme < INT_MAX) {
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
3062 int_mv single_newmv[MAX_REF_FRAMES] = { { 0 } }; 3062 int_mv single_newmv[MAX_REF_FRAMES] = { { 0 } };
3063 static const int flag_list[4] = { 0, VP9_LAST_FLAG, VP9_GOLD_FLAG, 3063 static const int flag_list[4] = { 0, VP9_LAST_FLAG, VP9_GOLD_FLAG,
3064 VP9_ALT_FLAG }; 3064 VP9_ALT_FLAG };
3065 int64_t best_rd = best_rd_so_far; 3065 int64_t best_rd = best_rd_so_far;
3066 int64_t best_tx_rd[TX_MODES]; 3066 int64_t best_tx_rd[TX_MODES];
3067 int64_t best_tx_diff[TX_MODES]; 3067 int64_t best_tx_diff[TX_MODES];
3068 int64_t best_pred_diff[REFERENCE_MODES]; 3068 int64_t best_pred_diff[REFERENCE_MODES];
3069 int64_t best_pred_rd[REFERENCE_MODES]; 3069 int64_t best_pred_rd[REFERENCE_MODES];
3070 int64_t best_filter_rd[SWITCHABLE_FILTER_CONTEXTS]; 3070 int64_t best_filter_rd[SWITCHABLE_FILTER_CONTEXTS];
3071 int64_t best_filter_diff[SWITCHABLE_FILTER_CONTEXTS]; 3071 int64_t best_filter_diff[SWITCHABLE_FILTER_CONTEXTS];
3072 MB_MODE_INFO best_mbmode = { 0 }; 3072 MB_MODE_INFO best_mbmode;
3073 int mode_index, best_mode_index = -1; 3073 int mode_index, best_mode_index = -1;
3074 unsigned int ref_costs_single[MAX_REF_FRAMES], ref_costs_comp[MAX_REF_FRAMES]; 3074 unsigned int ref_costs_single[MAX_REF_FRAMES], ref_costs_comp[MAX_REF_FRAMES];
3075 vp9_prob comp_mode_p; 3075 vp9_prob comp_mode_p;
3076 int64_t best_intra_rd = INT64_MAX; 3076 int64_t best_intra_rd = INT64_MAX;
3077 int64_t best_inter_rd = INT64_MAX; 3077 int64_t best_inter_rd = INT64_MAX;
3078 PREDICTION_MODE best_intra_mode = DC_PRED; 3078 PREDICTION_MODE best_intra_mode = DC_PRED;
3079 MV_REFERENCE_FRAME best_inter_ref_frame = LAST_FRAME; 3079 MV_REFERENCE_FRAME best_inter_ref_frame = LAST_FRAME;
3080 INTERP_FILTER tmp_best_filter = SWITCHABLE; 3080 INTERP_FILTER tmp_best_filter = SWITCHABLE;
3081 int rate_uv_intra[TX_SIZES], rate_uv_tokenonly[TX_SIZES]; 3081 int rate_uv_intra[TX_SIZES], rate_uv_tokenonly[TX_SIZES];
3082 int64_t dist_uv[TX_SIZES]; 3082 int64_t dist_uv[TX_SIZES];
3083 int skip_uv[TX_SIZES]; 3083 int skip_uv[TX_SIZES];
3084 PREDICTION_MODE mode_uv[TX_SIZES]; 3084 PREDICTION_MODE mode_uv[TX_SIZES];
3085 int64_t mode_distortions[MB_MODE_COUNT] = {-1}; 3085 int64_t mode_distortions[MB_MODE_COUNT] = {-1};
3086 int intra_cost_penalty = 20 * vp9_dc_quant(cm->base_qindex, cm->y_dc_delta_q); 3086 int intra_cost_penalty = 20 * vp9_dc_quant(cm->base_qindex, cm->y_dc_delta_q);
3087 const int bws = num_8x8_blocks_wide_lookup[bsize] / 2; 3087 const int bws = num_8x8_blocks_wide_lookup[bsize] / 2;
3088 const int bhs = num_8x8_blocks_high_lookup[bsize] / 2; 3088 const int bhs = num_8x8_blocks_high_lookup[bsize] / 2;
3089 int best_skip2 = 0; 3089 int best_skip2 = 0;
3090 int mode_skip_mask = 0; 3090 int mode_skip_mask = 0;
3091 int mode_skip_start = cpi->sf.mode_skip_start + 1; 3091 int mode_skip_start = cpi->sf.mode_skip_start + 1;
3092 const int *const rd_threshes = rd_opt->threshes[segment_id][bsize]; 3092 const int *const rd_threshes = rd_opt->threshes[segment_id][bsize];
3093 const int *const rd_thresh_freq_fact = rd_opt->thresh_freq_fact[bsize]; 3093 const int *const rd_thresh_freq_fact = rd_opt->thresh_freq_fact[bsize];
3094 const int mode_search_skip_flags = cpi->sf.mode_search_skip_flags; 3094 const int mode_search_skip_flags = cpi->sf.mode_search_skip_flags;
3095 const int intra_y_mode_mask = 3095 const int intra_y_mode_mask =
3096 cpi->sf.intra_y_mode_mask[max_txsize_lookup[bsize]]; 3096 cpi->sf.intra_y_mode_mask[max_txsize_lookup[bsize]];
3097 int disable_inter_mode_mask = cpi->sf.disable_inter_mode_mask[bsize]; 3097 int disable_inter_mode_mask = cpi->sf.disable_inter_mode_mask[bsize];
3098 3098 vp9_zero(best_mbmode);
3099 x->skip_encode = cpi->sf.skip_encode_frame && x->q_index < QIDX_SKIP_THRESH; 3099 x->skip_encode = cpi->sf.skip_encode_frame && x->q_index < QIDX_SKIP_THRESH;
3100 3100
3101 estimate_ref_frame_costs(cm, xd, segment_id, ref_costs_single, ref_costs_comp, 3101 estimate_ref_frame_costs(cm, xd, segment_id, ref_costs_single, ref_costs_comp,
3102 &comp_mode_p); 3102 &comp_mode_p);
3103 3103
3104 for (i = 0; i < REFERENCE_MODES; ++i) 3104 for (i = 0; i < REFERENCE_MODES; ++i)
3105 best_pred_rd[i] = INT64_MAX; 3105 best_pred_rd[i] = INT64_MAX;
3106 for (i = 0; i < TX_MODES; i++) 3106 for (i = 0; i < TX_MODES; i++)
3107 best_tx_rd[i] = INT64_MAX; 3107 best_tx_rd[i] = INT64_MAX;
3108 for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++) 3108 for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++)
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after
3671 struct buf_2d yv12_mb[4][MAX_MB_PLANE]; 3671 struct buf_2d yv12_mb[4][MAX_MB_PLANE];
3672 static const int flag_list[4] = { 0, VP9_LAST_FLAG, VP9_GOLD_FLAG, 3672 static const int flag_list[4] = { 0, VP9_LAST_FLAG, VP9_GOLD_FLAG,
3673 VP9_ALT_FLAG }; 3673 VP9_ALT_FLAG };
3674 int64_t best_rd = best_rd_so_far; 3674 int64_t best_rd = best_rd_so_far;
3675 int64_t best_yrd = best_rd_so_far; // FIXME(rbultje) more precise 3675 int64_t best_yrd = best_rd_so_far; // FIXME(rbultje) more precise
3676 static const int64_t best_tx_diff[TX_MODES] = { 0 }; 3676 static const int64_t best_tx_diff[TX_MODES] = { 0 };
3677 int64_t best_pred_diff[REFERENCE_MODES]; 3677 int64_t best_pred_diff[REFERENCE_MODES];
3678 int64_t best_pred_rd[REFERENCE_MODES]; 3678 int64_t best_pred_rd[REFERENCE_MODES];
3679 int64_t best_filter_rd[SWITCHABLE_FILTER_CONTEXTS]; 3679 int64_t best_filter_rd[SWITCHABLE_FILTER_CONTEXTS];
3680 int64_t best_filter_diff[SWITCHABLE_FILTER_CONTEXTS]; 3680 int64_t best_filter_diff[SWITCHABLE_FILTER_CONTEXTS];
3681 MB_MODE_INFO best_mbmode = { 0 }; 3681 MB_MODE_INFO best_mbmode;
3682 int ref_index, best_ref_index = 0; 3682 int ref_index, best_ref_index = 0;
3683 unsigned int ref_costs_single[MAX_REF_FRAMES], ref_costs_comp[MAX_REF_FRAMES]; 3683 unsigned int ref_costs_single[MAX_REF_FRAMES], ref_costs_comp[MAX_REF_FRAMES];
3684 vp9_prob comp_mode_p; 3684 vp9_prob comp_mode_p;
3685 int64_t best_inter_rd = INT64_MAX; 3685 int64_t best_inter_rd = INT64_MAX;
3686 MV_REFERENCE_FRAME best_inter_ref_frame = LAST_FRAME; 3686 MV_REFERENCE_FRAME best_inter_ref_frame = LAST_FRAME;
3687 INTERP_FILTER tmp_best_filter = SWITCHABLE; 3687 INTERP_FILTER tmp_best_filter = SWITCHABLE;
3688 int rate_uv_intra, rate_uv_tokenonly; 3688 int rate_uv_intra, rate_uv_tokenonly;
3689 int64_t dist_uv; 3689 int64_t dist_uv;
3690 int skip_uv; 3690 int skip_uv;
3691 PREDICTION_MODE mode_uv = DC_PRED; 3691 PREDICTION_MODE mode_uv = DC_PRED;
3692 int intra_cost_penalty = 20 * vp9_dc_quant(cm->base_qindex, cm->y_dc_delta_q); 3692 int intra_cost_penalty = 20 * vp9_dc_quant(cm->base_qindex, cm->y_dc_delta_q);
3693 int_mv seg_mvs[4][MAX_REF_FRAMES]; 3693 int_mv seg_mvs[4][MAX_REF_FRAMES];
3694 b_mode_info best_bmodes[4]; 3694 b_mode_info best_bmodes[4];
3695 int best_skip2 = 0; 3695 int best_skip2 = 0;
3696 int ref_frame_mask = 0; 3696 int ref_frame_mask = 0;
3697 int mode_skip_mask = 0; 3697 int mode_skip_mask = 0;
3698 3698
3699 x->skip_encode = cpi->sf.skip_encode_frame && x->q_index < QIDX_SKIP_THRESH; 3699 x->skip_encode = cpi->sf.skip_encode_frame && x->q_index < QIDX_SKIP_THRESH;
3700 vpx_memset(x->zcoeff_blk[TX_4X4], 0, 4); 3700 vpx_memset(x->zcoeff_blk[TX_4X4], 0, 4);
3701 vp9_zero(best_mbmode);
3701 3702
3702 for (i = 0; i < 4; i++) { 3703 for (i = 0; i < 4; i++) {
3703 int j; 3704 int j;
3704 for (j = 0; j < MAX_REF_FRAMES; j++) 3705 for (j = 0; j < MAX_REF_FRAMES; j++)
3705 seg_mvs[i][j].as_int = INVALID_MV; 3706 seg_mvs[i][j].as_int = INVALID_MV;
3706 } 3707 }
3707 3708
3708 estimate_ref_frame_costs(cm, xd, segment_id, ref_costs_single, ref_costs_comp, 3709 estimate_ref_frame_costs(cm, xd, segment_id, ref_costs_single, ref_costs_comp,
3709 &comp_mode_p); 3710 &comp_mode_p);
3710 3711
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
4391 rd->thresh_mult_sub8x8[THR_GOLD] = INT_MAX; 4392 rd->thresh_mult_sub8x8[THR_GOLD] = INT_MAX;
4392 if (!(cpi->ref_frame_flags & VP9_ALT_FLAG)) 4393 if (!(cpi->ref_frame_flags & VP9_ALT_FLAG))
4393 rd->thresh_mult_sub8x8[THR_ALTR] = INT_MAX; 4394 rd->thresh_mult_sub8x8[THR_ALTR] = INT_MAX;
4394 if ((cpi->ref_frame_flags & (VP9_LAST_FLAG | VP9_ALT_FLAG)) != 4395 if ((cpi->ref_frame_flags & (VP9_LAST_FLAG | VP9_ALT_FLAG)) !=
4395 (VP9_LAST_FLAG | VP9_ALT_FLAG)) 4396 (VP9_LAST_FLAG | VP9_ALT_FLAG))
4396 rd->thresh_mult_sub8x8[THR_COMP_LA] = INT_MAX; 4397 rd->thresh_mult_sub8x8[THR_COMP_LA] = INT_MAX;
4397 if ((cpi->ref_frame_flags & (VP9_GOLD_FLAG | VP9_ALT_FLAG)) != 4398 if ((cpi->ref_frame_flags & (VP9_GOLD_FLAG | VP9_ALT_FLAG)) !=
4398 (VP9_GOLD_FLAG | VP9_ALT_FLAG)) 4399 (VP9_GOLD_FLAG | VP9_ALT_FLAG))
4399 rd->thresh_mult_sub8x8[THR_COMP_GA] = INT_MAX; 4400 rd->thresh_mult_sub8x8[THR_COMP_GA] = INT_MAX;
4400 } 4401 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698