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

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

Issue 1302353004: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: Created 5 years, 3 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
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_rd.c ('k') | source/libvpx/vp9/encoder/vp9_resize.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
11 #include <assert.h> 11 #include <assert.h>
12 #include <math.h> 12 #include <math.h>
13 13
14 #include "./vp9_rtcd.h" 14 #include "./vp9_rtcd.h"
15 #include "./vpx_dsp_rtcd.h" 15 #include "./vpx_dsp_rtcd.h"
16 16
17 #include "vpx_mem/vpx_mem.h" 17 #include "vpx_mem/vpx_mem.h"
18 #include "vpx_ports/mem.h" 18 #include "vpx_ports/mem.h"
19 #include "vpx_ports/system_state.h"
19 20
20 #include "vp9/common/vp9_common.h" 21 #include "vp9/common/vp9_common.h"
21 #include "vp9/common/vp9_entropy.h" 22 #include "vp9/common/vp9_entropy.h"
22 #include "vp9/common/vp9_entropymode.h" 23 #include "vp9/common/vp9_entropymode.h"
23 #include "vp9/common/vp9_idct.h" 24 #include "vp9/common/vp9_idct.h"
24 #include "vp9/common/vp9_mvref_common.h" 25 #include "vp9/common/vp9_mvref_common.h"
25 #include "vp9/common/vp9_pred_common.h" 26 #include "vp9/common/vp9_pred_common.h"
26 #include "vp9/common/vp9_quant_common.h" 27 #include "vp9/common/vp9_quant_common.h"
27 #include "vp9/common/vp9_reconinter.h" 28 #include "vp9/common/vp9_reconinter.h"
28 #include "vp9/common/vp9_reconintra.h" 29 #include "vp9/common/vp9_reconintra.h"
29 #include "vp9/common/vp9_scan.h" 30 #include "vp9/common/vp9_scan.h"
30 #include "vp9/common/vp9_seg_common.h" 31 #include "vp9/common/vp9_seg_common.h"
31 #include "vp9/common/vp9_systemdependent.h"
32 32
33 #include "vp9/encoder/vp9_cost.h" 33 #include "vp9/encoder/vp9_cost.h"
34 #include "vp9/encoder/vp9_encodemb.h" 34 #include "vp9/encoder/vp9_encodemb.h"
35 #include "vp9/encoder/vp9_encodemv.h" 35 #include "vp9/encoder/vp9_encodemv.h"
36 #include "vp9/encoder/vp9_encoder.h" 36 #include "vp9/encoder/vp9_encoder.h"
37 #include "vp9/encoder/vp9_mcomp.h" 37 #include "vp9/encoder/vp9_mcomp.h"
38 #include "vp9/encoder/vp9_quantize.h" 38 #include "vp9/encoder/vp9_quantize.h"
39 #include "vp9/encoder/vp9_ratectrl.h" 39 #include "vp9/encoder/vp9_ratectrl.h"
40 #include "vp9/encoder/vp9_rd.h" 40 #include "vp9/encoder/vp9_rd.h"
41 #include "vp9/encoder/vp9_rdopt.h" 41 #include "vp9/encoder/vp9_rdopt.h"
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 for (i = 0; i < MAX_MB_PLANE; ++i) { 185 for (i = 0; i < MAX_MB_PLANE; ++i) {
186 struct macroblock_plane *const p = &x->plane[i]; 186 struct macroblock_plane *const p = &x->plane[i];
187 struct macroblockd_plane *const pd = &xd->plane[i]; 187 struct macroblockd_plane *const pd = &xd->plane[i];
188 const BLOCK_SIZE bs = get_plane_block_size(bsize, pd); 188 const BLOCK_SIZE bs = get_plane_block_size(bsize, pd);
189 const TX_SIZE max_tx_size = max_txsize_lookup[bs]; 189 const TX_SIZE max_tx_size = max_txsize_lookup[bs];
190 const BLOCK_SIZE unit_size = txsize_to_bsize[max_tx_size]; 190 const BLOCK_SIZE unit_size = txsize_to_bsize[max_tx_size];
191 const int64_t dc_thr = p->quant_thred[0] >> shift; 191 const int64_t dc_thr = p->quant_thred[0] >> shift;
192 const int64_t ac_thr = p->quant_thred[1] >> shift; 192 const int64_t ac_thr = p->quant_thred[1] >> shift;
193 // The low thresholds are used to measure if the prediction errors are 193 // The low thresholds are used to measure if the prediction errors are
194 // low enough so that we can skip the mode search. 194 // low enough so that we can skip the mode search.
195 const int64_t low_dc_thr = MIN(50, dc_thr >> 2); 195 const int64_t low_dc_thr = VPXMIN(50, dc_thr >> 2);
196 const int64_t low_ac_thr = MIN(80, ac_thr >> 2); 196 const int64_t low_ac_thr = VPXMIN(80, ac_thr >> 2);
197 int bw = 1 << (b_width_log2_lookup[bs] - b_width_log2_lookup[unit_size]); 197 int bw = 1 << (b_width_log2_lookup[bs] - b_width_log2_lookup[unit_size]);
198 int bh = 1 << (b_height_log2_lookup[bs] - b_width_log2_lookup[unit_size]); 198 int bh = 1 << (b_height_log2_lookup[bs] - b_width_log2_lookup[unit_size]);
199 int idx, idy; 199 int idx, idy;
200 int lw = b_width_log2_lookup[unit_size] + 2; 200 int lw = b_width_log2_lookup[unit_size] + 2;
201 int lh = b_height_log2_lookup[unit_size] + 2; 201 int lh = b_height_log2_lookup[unit_size] + 2;
202 202
203 sum_sse = 0; 203 sum_sse = 0;
204 204
205 for (idy = 0; idy < bh; ++idy) { 205 for (idy = 0; idy < bh; ++idy) {
206 for (idx = 0; idx < bw; ++idx) { 206 for (idx = 0; idx < bw; ++idx) {
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 if (x->plane[plane].eobs[block]) { 498 if (x->plane[plane].eobs[block]) {
499 const int64_t orig_sse = (int64_t)coeff[0] * coeff[0]; 499 const int64_t orig_sse = (int64_t)coeff[0] * coeff[0];
500 const int64_t resd_sse = coeff[0] - dqcoeff[0]; 500 const int64_t resd_sse = coeff[0] - dqcoeff[0];
501 int64_t dc_correct = orig_sse - resd_sse * resd_sse; 501 int64_t dc_correct = orig_sse - resd_sse * resd_sse;
502 #if CONFIG_VP9_HIGHBITDEPTH 502 #if CONFIG_VP9_HIGHBITDEPTH
503 dc_correct >>= ((xd->bd - 8) * 2); 503 dc_correct >>= ((xd->bd - 8) * 2);
504 #endif 504 #endif
505 if (tx_size != TX_32X32) 505 if (tx_size != TX_32X32)
506 dc_correct >>= 2; 506 dc_correct >>= 2;
507 507
508 dist = MAX(0, sse - dc_correct); 508 dist = VPXMAX(0, sse - dc_correct);
509 } 509 }
510 } else { 510 } else {
511 // SKIP_TXFM_AC_DC 511 // SKIP_TXFM_AC_DC
512 // skip forward transform 512 // skip forward transform
513 x->plane[plane].eobs[block] = 0; 513 x->plane[plane].eobs[block] = 0;
514 sse = x->bsse[(plane << 2) + (block >> (tx_size << 1))] << 4; 514 sse = x->bsse[(plane << 2) + (block >> (tx_size << 1))] << 4;
515 dist = sse; 515 dist = sse;
516 } 516 }
517 } else { 517 } else {
518 // full forward transform and quantization 518 // full forward transform and quantization
519 vp9_xform_quant(x, plane, block, plane_bsize, tx_size); 519 vp9_xform_quant(x, plane, block, plane_bsize, tx_size);
520 dist_block(x, plane, block, tx_size, &dist, &sse); 520 dist_block(x, plane, block, tx_size, &dist, &sse);
521 } 521 }
522 522
523 rd = RDCOST(x->rdmult, x->rddiv, 0, dist); 523 rd = RDCOST(x->rdmult, x->rddiv, 0, dist);
524 if (args->this_rd + rd > args->best_rd) { 524 if (args->this_rd + rd > args->best_rd) {
525 args->exit_early = 1; 525 args->exit_early = 1;
526 return; 526 return;
527 } 527 }
528 528
529 rate = rate_block(plane, block, plane_bsize, tx_size, args); 529 rate = rate_block(plane, block, plane_bsize, tx_size, args);
530 rd1 = RDCOST(x->rdmult, x->rddiv, rate, dist); 530 rd1 = RDCOST(x->rdmult, x->rddiv, rate, dist);
531 rd2 = RDCOST(x->rdmult, x->rddiv, 0, sse); 531 rd2 = RDCOST(x->rdmult, x->rddiv, 0, sse);
532 532
533 // TODO(jingning): temporarily enabled only for luma component 533 // TODO(jingning): temporarily enabled only for luma component
534 rd = MIN(rd1, rd2); 534 rd = VPXMIN(rd1, rd2);
535 if (plane == 0) 535 if (plane == 0)
536 x->zcoeff_blk[tx_size][block] = !x->plane[plane].eobs[block] || 536 x->zcoeff_blk[tx_size][block] = !x->plane[plane].eobs[block] ||
537 (rd1 > rd2 && !xd->lossless); 537 (rd1 > rd2 && !xd->lossless);
538 538
539 args->this_rate += rate; 539 args->this_rate += rate;
540 args->this_dist += dist; 540 args->this_dist += dist;
541 args->this_sse += sse; 541 args->this_sse += sse;
542 args->this_rd += rd; 542 args->this_rd += rd;
543 543
544 if (args->this_rd > args->best_rd) { 544 if (args->this_rd > args->best_rd) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 int *rate, int64_t *distortion, 590 int *rate, int64_t *distortion,
591 int *skip, int64_t *sse, 591 int *skip, int64_t *sse,
592 int64_t ref_best_rd, 592 int64_t ref_best_rd,
593 BLOCK_SIZE bs) { 593 BLOCK_SIZE bs) {
594 const TX_SIZE max_tx_size = max_txsize_lookup[bs]; 594 const TX_SIZE max_tx_size = max_txsize_lookup[bs];
595 VP9_COMMON *const cm = &cpi->common; 595 VP9_COMMON *const cm = &cpi->common;
596 const TX_SIZE largest_tx_size = tx_mode_to_biggest_tx_size[cm->tx_mode]; 596 const TX_SIZE largest_tx_size = tx_mode_to_biggest_tx_size[cm->tx_mode];
597 MACROBLOCKD *const xd = &x->e_mbd; 597 MACROBLOCKD *const xd = &x->e_mbd;
598 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; 598 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
599 599
600 mbmi->tx_size = MIN(max_tx_size, largest_tx_size); 600 mbmi->tx_size = VPXMIN(max_tx_size, largest_tx_size);
601 601
602 txfm_rd_in_plane(x, rate, distortion, skip, 602 txfm_rd_in_plane(x, rate, distortion, skip,
603 sse, ref_best_rd, 0, bs, 603 sse, ref_best_rd, 0, bs,
604 mbmi->tx_size, cpi->sf.use_fast_coef_costing); 604 mbmi->tx_size, cpi->sf.use_fast_coef_costing);
605 } 605 }
606 606
607 static void choose_tx_size_from_rd(VP9_COMP *cpi, MACROBLOCK *x, 607 static void choose_tx_size_from_rd(VP9_COMP *cpi, MACROBLOCK *x,
608 int *rate, 608 int *rate,
609 int64_t *distortion, 609 int64_t *distortion,
610 int *skip, 610 int *skip,
(...skipping 19 matching lines...) Expand all
630 630
631 const vpx_prob *tx_probs = get_tx_probs2(max_tx_size, xd, &cm->fc->tx_probs); 631 const vpx_prob *tx_probs = get_tx_probs2(max_tx_size, xd, &cm->fc->tx_probs);
632 assert(skip_prob > 0); 632 assert(skip_prob > 0);
633 s0 = vp9_cost_bit(skip_prob, 0); 633 s0 = vp9_cost_bit(skip_prob, 0);
634 s1 = vp9_cost_bit(skip_prob, 1); 634 s1 = vp9_cost_bit(skip_prob, 1);
635 635
636 if (cm->tx_mode == TX_MODE_SELECT) { 636 if (cm->tx_mode == TX_MODE_SELECT) {
637 start_tx = max_tx_size; 637 start_tx = max_tx_size;
638 end_tx = 0; 638 end_tx = 0;
639 } else { 639 } else {
640 TX_SIZE chosen_tx_size = MIN(max_tx_size, 640 TX_SIZE chosen_tx_size = VPXMIN(max_tx_size,
641 tx_mode_to_biggest_tx_size[cm->tx_mode]); 641 tx_mode_to_biggest_tx_size[cm->tx_mode]);
642 start_tx = chosen_tx_size; 642 start_tx = chosen_tx_size;
643 end_tx = chosen_tx_size; 643 end_tx = chosen_tx_size;
644 } 644 }
645 645
646 for (n = start_tx; n >= end_tx; n--) { 646 for (n = start_tx; n >= end_tx; n--) {
647 int r_tx_size = 0;
648 for (m = 0; m <= n - (n == (int) max_tx_size); m++) {
649 if (m == n)
650 r_tx_size += vp9_cost_zero(tx_probs[m]);
651 else
652 r_tx_size += vp9_cost_one(tx_probs[m]);
653 }
647 txfm_rd_in_plane(x, &r[n][0], &d[n], &s[n], 654 txfm_rd_in_plane(x, &r[n][0], &d[n], &s[n],
648 &sse[n], ref_best_rd, 0, bs, n, 655 &sse[n], ref_best_rd, 0, bs, n,
649 cpi->sf.use_fast_coef_costing); 656 cpi->sf.use_fast_coef_costing);
650 r[n][1] = r[n][0]; 657 r[n][1] = r[n][0];
651 if (r[n][0] < INT_MAX) { 658 if (r[n][0] < INT_MAX) {
652 for (m = 0; m <= n - (n == (int) max_tx_size); m++) { 659 r[n][1] += r_tx_size;
653 if (m == n)
654 r[n][1] += vp9_cost_zero(tx_probs[m]);
655 else
656 r[n][1] += vp9_cost_one(tx_probs[m]);
657 }
658 } 660 }
659 if (d[n] == INT64_MAX) { 661 if (d[n] == INT64_MAX || r[n][0] == INT_MAX) {
660 rd[n][0] = rd[n][1] = INT64_MAX; 662 rd[n][0] = rd[n][1] = INT64_MAX;
661 } else if (s[n]) { 663 } else if (s[n]) {
662 rd[n][0] = rd[n][1] = RDCOST(x->rdmult, x->rddiv, s1, d[n]); 664 if (is_inter_block(mbmi)) {
665 rd[n][0] = rd[n][1] = RDCOST(x->rdmult, x->rddiv, s1, sse[n]);
666 } else {
667 rd[n][0] = RDCOST(x->rdmult, x->rddiv, s1, sse[n]);
668 rd[n][1] = RDCOST(x->rdmult, x->rddiv, s1 + r_tx_size, sse[n]);
669 }
663 } else { 670 } else {
664 rd[n][0] = RDCOST(x->rdmult, x->rddiv, r[n][0] + s0, d[n]); 671 rd[n][0] = RDCOST(x->rdmult, x->rddiv, r[n][0] + s0, d[n]);
665 rd[n][1] = RDCOST(x->rdmult, x->rddiv, r[n][1] + s0, d[n]); 672 rd[n][1] = RDCOST(x->rdmult, x->rddiv, r[n][1] + s0, d[n]);
666 } 673 }
667 674
668 // Early termination in transform size search. 675 // Early termination in transform size search.
669 if (cpi->sf.tx_size_search_breakout && 676 if (cpi->sf.tx_size_search_breakout &&
670 (rd[n][1] == INT64_MAX || 677 (rd[n][1] == INT64_MAX ||
671 (n < (int) max_tx_size && rd[n][1] > rd[n + 1][1]) || 678 (n < (int) max_tx_size && rd[n][1] > rd[n + 1][1]) ||
672 s[n] == 1)) 679 s[n] == 1))
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 int *bmode_costs; 1045 int *bmode_costs;
1039 const MODE_INFO *above_mi = xd->above_mi; 1046 const MODE_INFO *above_mi = xd->above_mi;
1040 const MODE_INFO *left_mi = xd->left_mi; 1047 const MODE_INFO *left_mi = xd->left_mi;
1041 const PREDICTION_MODE A = vp9_above_block_mode(mic, above_mi, 0); 1048 const PREDICTION_MODE A = vp9_above_block_mode(mic, above_mi, 0);
1042 const PREDICTION_MODE L = vp9_left_block_mode(mic, left_mi, 0); 1049 const PREDICTION_MODE L = vp9_left_block_mode(mic, left_mi, 0);
1043 bmode_costs = cpi->y_mode_costs[A][L]; 1050 bmode_costs = cpi->y_mode_costs[A][L];
1044 1051
1045 memset(x->skip_txfm, SKIP_TXFM_NONE, sizeof(x->skip_txfm)); 1052 memset(x->skip_txfm, SKIP_TXFM_NONE, sizeof(x->skip_txfm));
1046 /* Y Search for intra prediction mode */ 1053 /* Y Search for intra prediction mode */
1047 for (mode = DC_PRED; mode <= TM_PRED; mode++) { 1054 for (mode = DC_PRED; mode <= TM_PRED; mode++) {
1048
1049 if (cpi->sf.use_nonrd_pick_mode) { 1055 if (cpi->sf.use_nonrd_pick_mode) {
1050 // These speed features are turned on in hybrid non-RD and RD mode 1056 // These speed features are turned on in hybrid non-RD and RD mode
1051 // for key frame coding in the context of real-time setting. 1057 // for key frame coding in the context of real-time setting.
1052 if (conditional_skipintra(mode, mode_selected)) 1058 if (conditional_skipintra(mode, mode_selected))
1053 continue; 1059 continue;
1054 if (*skippable) 1060 if (*skippable)
1055 break; 1061 break;
1056 } 1062 }
1057 1063
1058 mic->mbmi.mode = mode; 1064 mic->mbmi.mode = mode;
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
1376 #else 1382 #else
1377 thisdistortion += vp9_block_error(coeff, BLOCK_OFFSET(pd->dqcoeff, k), 1383 thisdistortion += vp9_block_error(coeff, BLOCK_OFFSET(pd->dqcoeff, k),
1378 16, &ssz); 1384 16, &ssz);
1379 #endif // CONFIG_VP9_HIGHBITDEPTH 1385 #endif // CONFIG_VP9_HIGHBITDEPTH
1380 thissse += ssz; 1386 thissse += ssz;
1381 thisrate += cost_coeffs(x, 0, k, ta + (k & 1), tl + (k >> 1), TX_4X4, 1387 thisrate += cost_coeffs(x, 0, k, ta + (k & 1), tl + (k >> 1), TX_4X4,
1382 so->scan, so->neighbors, 1388 so->scan, so->neighbors,
1383 cpi->sf.use_fast_coef_costing); 1389 cpi->sf.use_fast_coef_costing);
1384 rd1 = RDCOST(x->rdmult, x->rddiv, thisrate, thisdistortion >> 2); 1390 rd1 = RDCOST(x->rdmult, x->rddiv, thisrate, thisdistortion >> 2);
1385 rd2 = RDCOST(x->rdmult, x->rddiv, 0, thissse >> 2); 1391 rd2 = RDCOST(x->rdmult, x->rddiv, 0, thissse >> 2);
1386 rd = MIN(rd1, rd2); 1392 rd = VPXMIN(rd1, rd2);
1387 if (rd >= best_yrd) 1393 if (rd >= best_yrd)
1388 return INT64_MAX; 1394 return INT64_MAX;
1389 } 1395 }
1390 } 1396 }
1391 1397
1392 *distortion = thisdistortion >> 2; 1398 *distortion = thisdistortion >> 2;
1393 *labelyrate = thisrate; 1399 *labelyrate = thisrate;
1394 *sse = thissse >> 2; 1400 *sse = thissse >> 2;
1395 1401
1396 return RDCOST(x->rdmult, x->rddiv, *labelyrate, *distortion); 1402 return RDCOST(x->rdmult, x->rddiv, *labelyrate, *distortion);
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
1795 // use previous block's result as next block's MV predictor. 1801 // use previous block's result as next block's MV predictor.
1796 if (i > 0) { 1802 if (i > 0) {
1797 bsi->mvp.as_int = mi->bmi[i - 1].as_mv[0].as_int; 1803 bsi->mvp.as_int = mi->bmi[i - 1].as_mv[0].as_int;
1798 if (i == 2) 1804 if (i == 2)
1799 bsi->mvp.as_int = mi->bmi[i - 2].as_mv[0].as_int; 1805 bsi->mvp.as_int = mi->bmi[i - 2].as_mv[0].as_int;
1800 } 1806 }
1801 } 1807 }
1802 if (i == 0) 1808 if (i == 0)
1803 max_mv = x->max_mv_context[mbmi->ref_frame[0]]; 1809 max_mv = x->max_mv_context[mbmi->ref_frame[0]];
1804 else 1810 else
1805 max_mv = MAX(abs(bsi->mvp.as_mv.row), abs(bsi->mvp.as_mv.col)) >> 3; 1811 max_mv =
1812 VPXMAX(abs(bsi->mvp.as_mv.row), abs(bsi->mvp.as_mv.col)) >> 3;
1806 1813
1807 if (cpi->sf.mv.auto_mv_step_size && cm->show_frame) { 1814 if (cpi->sf.mv.auto_mv_step_size && cm->show_frame) {
1808 // Take wtd average of the step_params based on the last frame's 1815 // Take wtd average of the step_params based on the last frame's
1809 // max mv magnitude and the best ref mvs of the current block for 1816 // max mv magnitude and the best ref mvs of the current block for
1810 // the given reference. 1817 // the given reference.
1811 step_param = (vp9_init_search_range(max_mv) + 1818 step_param = (vp9_init_search_range(max_mv) +
1812 cpi->mv_step_param) / 2; 1819 cpi->mv_step_param) / 2;
1813 } else { 1820 } else {
1814 step_param = cpi->mv_step_param; 1821 step_param = cpi->mv_step_param;
1815 } 1822 }
1816 1823
1817 mvp_full.row = bsi->mvp.as_mv.row >> 3; 1824 mvp_full.row = bsi->mvp.as_mv.row >> 3;
1818 mvp_full.col = bsi->mvp.as_mv.col >> 3; 1825 mvp_full.col = bsi->mvp.as_mv.col >> 3;
1819 1826
1820 if (cpi->sf.adaptive_motion_search) { 1827 if (cpi->sf.adaptive_motion_search) {
1821 mvp_full.row = x->pred_mv[mbmi->ref_frame[0]].row >> 3; 1828 mvp_full.row = x->pred_mv[mbmi->ref_frame[0]].row >> 3;
1822 mvp_full.col = x->pred_mv[mbmi->ref_frame[0]].col >> 3; 1829 mvp_full.col = x->pred_mv[mbmi->ref_frame[0]].col >> 3;
1823 step_param = MAX(step_param, 8); 1830 step_param = VPXMAX(step_param, 8);
1824 } 1831 }
1825 1832
1826 // adjust src pointer for this block 1833 // adjust src pointer for this block
1827 mi_buf_shift(x, i); 1834 mi_buf_shift(x, i);
1828 1835
1829 vp9_set_mv_search_range(x, &bsi->ref_mv[0]->as_mv); 1836 vp9_set_mv_search_range(x, &bsi->ref_mv[0]->as_mv);
1830 1837
1831 bestsme = vp9_full_pixel_search( 1838 bestsme = vp9_full_pixel_search(
1832 cpi, x, bsize, &mvp_full, step_param, sadpb, 1839 cpi, x, bsize, &mvp_full, step_param, sadpb,
1833 cpi->sf.mv.subpel_search_method != SUBPEL_TREE ? cost_list : NULL, 1840 cpi->sf.mv.subpel_search_method != SUBPEL_TREE ? cost_list : NULL,
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
2218 // motion search code to be used without additional modifications. 2225 // motion search code to be used without additional modifications.
2219 for (i = 0; i < MAX_MB_PLANE; i++) 2226 for (i = 0; i < MAX_MB_PLANE; i++)
2220 backup_yv12[i] = xd->plane[i].pre[0]; 2227 backup_yv12[i] = xd->plane[i].pre[0];
2221 2228
2222 vp9_setup_pre_planes(xd, 0, scaled_ref_frame, mi_row, mi_col, NULL); 2229 vp9_setup_pre_planes(xd, 0, scaled_ref_frame, mi_row, mi_col, NULL);
2223 } 2230 }
2224 2231
2225 vp9_set_mv_search_range(x, &ref_mv); 2232 vp9_set_mv_search_range(x, &ref_mv);
2226 2233
2227 // Work out the size of the first step in the mv step search. 2234 // Work out the size of the first step in the mv step search.
2228 // 0 here is maximum length first step. 1 is MAX >> 1 etc. 2235 // 0 here is maximum length first step. 1 is VPXMAX >> 1 etc.
2229 if (cpi->sf.mv.auto_mv_step_size && cm->show_frame) { 2236 if (cpi->sf.mv.auto_mv_step_size && cm->show_frame) {
2230 // Take wtd average of the step_params based on the last frame's 2237 // Take wtd average of the step_params based on the last frame's
2231 // max mv magnitude and that based on the best ref mvs of the current 2238 // max mv magnitude and that based on the best ref mvs of the current
2232 // block for the given reference. 2239 // block for the given reference.
2233 step_param = (vp9_init_search_range(x->max_mv_context[ref]) + 2240 step_param = (vp9_init_search_range(x->max_mv_context[ref]) +
2234 cpi->mv_step_param) / 2; 2241 cpi->mv_step_param) / 2;
2235 } else { 2242 } else {
2236 step_param = cpi->mv_step_param; 2243 step_param = cpi->mv_step_param;
2237 } 2244 }
2238 2245
2239 if (cpi->sf.adaptive_motion_search && bsize < BLOCK_64X64) { 2246 if (cpi->sf.adaptive_motion_search && bsize < BLOCK_64X64) {
2240 int boffset = 2 * (b_width_log2_lookup[BLOCK_64X64] - 2247 int boffset =
2241 MIN(b_height_log2_lookup[bsize], b_width_log2_lookup[bsize])); 2248 2 * (b_width_log2_lookup[BLOCK_64X64] -
2242 step_param = MAX(step_param, boffset); 2249 VPXMIN(b_height_log2_lookup[bsize], b_width_log2_lookup[bsize]));
2250 step_param = VPXMAX(step_param, boffset);
2243 } 2251 }
2244 2252
2245 if (cpi->sf.adaptive_motion_search) { 2253 if (cpi->sf.adaptive_motion_search) {
2246 int bwl = b_width_log2_lookup[bsize]; 2254 int bwl = b_width_log2_lookup[bsize];
2247 int bhl = b_height_log2_lookup[bsize]; 2255 int bhl = b_height_log2_lookup[bsize];
2248 int tlevel = x->pred_mv_sad[ref] >> (bwl + bhl + 4); 2256 int tlevel = x->pred_mv_sad[ref] >> (bwl + bhl + 4);
2249 2257
2250 if (tlevel < 5) 2258 if (tlevel < 5)
2251 step_param += 2; 2259 step_param += 2;
2252 2260
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
2453 2461
2454 frame_mv[refs[0]].as_int = 2462 frame_mv[refs[0]].as_int =
2455 xd->mi[0]->bmi[0].as_mv[0].as_int = tmp_mv.as_int; 2463 xd->mi[0]->bmi[0].as_mv[0].as_int = tmp_mv.as_int;
2456 single_newmv[refs[0]].as_int = tmp_mv.as_int; 2464 single_newmv[refs[0]].as_int = tmp_mv.as_int;
2457 2465
2458 // Estimate the rate implications of a new mv but discount this 2466 // Estimate the rate implications of a new mv but discount this
2459 // under certain circumstances where we want to help initiate a weak 2467 // under certain circumstances where we want to help initiate a weak
2460 // motion field, where the distortion gain for a single block may not 2468 // motion field, where the distortion gain for a single block may not
2461 // be enough to overcome the cost of a new mv. 2469 // be enough to overcome the cost of a new mv.
2462 if (discount_newmv_test(cpi, this_mode, tmp_mv, mode_mv, refs[0])) { 2470 if (discount_newmv_test(cpi, this_mode, tmp_mv, mode_mv, refs[0])) {
2463 *rate2 += MAX((rate_mv / NEW_MV_DISCOUNT_FACTOR), 1); 2471 *rate2 += VPXMAX((rate_mv / NEW_MV_DISCOUNT_FACTOR), 1);
2464 } else { 2472 } else {
2465 *rate2 += rate_mv; 2473 *rate2 += rate_mv;
2466 } 2474 }
2467 } 2475 }
2468 } 2476 }
2469 2477
2470 for (i = 0; i < is_comp_pred + 1; ++i) { 2478 for (i = 0; i < is_comp_pred + 1; ++i) {
2471 cur_mv[i] = frame_mv[refs[i]]; 2479 cur_mv[i] = frame_mv[refs[i]];
2472 // Clip "next_nearest" so that it does not extend to far out of image 2480 // Clip "next_nearest" so that it does not extend to far out of image
2473 if (this_mode != NEWMV) 2481 if (this_mode != NEWMV)
2474 clamp_mv2(&cur_mv[i].as_mv, xd); 2482 clamp_mv2(&cur_mv[i].as_mv, xd);
2475 2483
2476 if (mv_check_bounds(x, &cur_mv[i].as_mv)) 2484 if (mv_check_bounds(x, &cur_mv[i].as_mv))
2477 return INT64_MAX; 2485 return INT64_MAX;
2478 mbmi->mv[i].as_int = cur_mv[i].as_int; 2486 mbmi->mv[i].as_int = cur_mv[i].as_int;
2479 } 2487 }
2480 2488
2481 // do first prediction into the destination buffer. Do the next 2489 // do first prediction into the destination buffer. Do the next
2482 // prediction into a temporary buffer. Then keep track of which one 2490 // prediction into a temporary buffer. Then keep track of which one
2483 // of these currently holds the best predictor, and use the other 2491 // of these currently holds the best predictor, and use the other
2484 // one for future predictions. In the end, copy from tmp_buf to 2492 // one for future predictions. In the end, copy from tmp_buf to
2485 // dst if necessary. 2493 // dst if necessary.
2486 for (i = 0; i < MAX_MB_PLANE; i++) { 2494 for (i = 0; i < MAX_MB_PLANE; i++) {
2487 orig_dst[i] = xd->plane[i].dst.buf; 2495 orig_dst[i] = xd->plane[i].dst.buf;
2488 orig_dst_stride[i] = xd->plane[i].dst.stride; 2496 orig_dst_stride[i] = xd->plane[i].dst.stride;
2489 } 2497 }
2490 2498
2491 // We don't include the cost of the second reference here, because there 2499 // We don't include the cost of the second reference here, because there
2492 // are only three options: Last/Golden, ARF/Last or Golden/ARF, or in other 2500 // are only two options: Last/ARF or Golden/ARF; The second one is always
2493 // words if you present them in that order, the second one is always known 2501 // known, which is ARF.
2494 // if the first is known.
2495 // 2502 //
2496 // Under some circumstances we discount the cost of new mv mode to encourage 2503 // Under some circumstances we discount the cost of new mv mode to encourage
2497 // initiation of a motion field. 2504 // initiation of a motion field.
2498 if (discount_newmv_test(cpi, this_mode, frame_mv[refs[0]], 2505 if (discount_newmv_test(cpi, this_mode, frame_mv[refs[0]],
2499 mode_mv, refs[0])) { 2506 mode_mv, refs[0])) {
2500 *rate2 += MIN(cost_mv_ref(cpi, this_mode, 2507 *rate2 += VPXMIN(cost_mv_ref(cpi, this_mode,
2501 mbmi_ext->mode_context[refs[0]]), 2508 mbmi_ext->mode_context[refs[0]]),
2502 cost_mv_ref(cpi, NEARESTMV, 2509 cost_mv_ref(cpi, NEARESTMV,
2503 mbmi_ext->mode_context[refs[0]])); 2510 mbmi_ext->mode_context[refs[0]]));
2504 } else { 2511 } else {
2505 *rate2 += cost_mv_ref(cpi, this_mode, mbmi_ext->mode_context[refs[0]]); 2512 *rate2 += cost_mv_ref(cpi, this_mode, mbmi_ext->mode_context[refs[0]]);
2506 } 2513 }
2507 2514
2508 if (RDCOST(x->rdmult, x->rddiv, *rate2, 0) > ref_best_rd && 2515 if (RDCOST(x->rdmult, x->rddiv, *rate2, 0) > ref_best_rd &&
2509 mbmi->mode != NEARESTMV) 2516 mbmi->mode != NEARESTMV)
2510 return INT64_MAX; 2517 return INT64_MAX;
2511 2518
2512 pred_exists = 0; 2519 pred_exists = 0;
2513 // Are all MVs integer pel for Y and UV 2520 // Are all MVs integer pel for Y and UV
(...skipping 21 matching lines...) Expand all
2535 int64_t tmp_skip_sse = INT64_MAX; 2542 int64_t tmp_skip_sse = INT64_MAX;
2536 2543
2537 mbmi->interp_filter = i; 2544 mbmi->interp_filter = i;
2538 rs = vp9_get_switchable_rate(cpi, xd); 2545 rs = vp9_get_switchable_rate(cpi, xd);
2539 rs_rd = RDCOST(x->rdmult, x->rddiv, rs, 0); 2546 rs_rd = RDCOST(x->rdmult, x->rddiv, rs, 0);
2540 2547
2541 if (i > 0 && intpel_mv) { 2548 if (i > 0 && intpel_mv) {
2542 rd = RDCOST(x->rdmult, x->rddiv, tmp_rate_sum, tmp_dist_sum); 2549 rd = RDCOST(x->rdmult, x->rddiv, tmp_rate_sum, tmp_dist_sum);
2543 filter_cache[i] = rd; 2550 filter_cache[i] = rd;
2544 filter_cache[SWITCHABLE_FILTERS] = 2551 filter_cache[SWITCHABLE_FILTERS] =
2545 MIN(filter_cache[SWITCHABLE_FILTERS], rd + rs_rd); 2552 VPXMIN(filter_cache[SWITCHABLE_FILTERS], rd + rs_rd);
2546 if (cm->interp_filter == SWITCHABLE) 2553 if (cm->interp_filter == SWITCHABLE)
2547 rd += rs_rd; 2554 rd += rs_rd;
2548 *mask_filter = MAX(*mask_filter, rd); 2555 *mask_filter = VPXMAX(*mask_filter, rd);
2549 } else { 2556 } else {
2550 int rate_sum = 0; 2557 int rate_sum = 0;
2551 int64_t dist_sum = 0; 2558 int64_t dist_sum = 0;
2552 if (i > 0 && cpi->sf.adaptive_interp_filter_search && 2559 if (i > 0 && cpi->sf.adaptive_interp_filter_search &&
2553 (cpi->sf.interp_filter_search_mask & (1 << i))) { 2560 (cpi->sf.interp_filter_search_mask & (1 << i))) {
2554 rate_sum = INT_MAX; 2561 rate_sum = INT_MAX;
2555 dist_sum = INT64_MAX; 2562 dist_sum = INT64_MAX;
2556 continue; 2563 continue;
2557 } 2564 }
2558 2565
2559 if ((cm->interp_filter == SWITCHABLE && 2566 if ((cm->interp_filter == SWITCHABLE &&
2560 (!i || best_needs_copy)) || 2567 (!i || best_needs_copy)) ||
2561 (cm->interp_filter != SWITCHABLE && 2568 (cm->interp_filter != SWITCHABLE &&
2562 (cm->interp_filter == mbmi->interp_filter || 2569 (cm->interp_filter == mbmi->interp_filter ||
2563 (i == 0 && intpel_mv)))) { 2570 (i == 0 && intpel_mv)))) {
2564 restore_dst_buf(xd, orig_dst, orig_dst_stride); 2571 restore_dst_buf(xd, orig_dst, orig_dst_stride);
2565 } else { 2572 } else {
2566 for (j = 0; j < MAX_MB_PLANE; j++) { 2573 for (j = 0; j < MAX_MB_PLANE; j++) {
2567 xd->plane[j].dst.buf = tmp_buf + j * 64 * 64; 2574 xd->plane[j].dst.buf = tmp_buf + j * 64 * 64;
2568 xd->plane[j].dst.stride = 64; 2575 xd->plane[j].dst.stride = 64;
2569 } 2576 }
2570 } 2577 }
2571 vp9_build_inter_predictors_sb(xd, mi_row, mi_col, bsize); 2578 vp9_build_inter_predictors_sb(xd, mi_row, mi_col, bsize);
2572 model_rd_for_sb(cpi, bsize, x, xd, &rate_sum, &dist_sum, 2579 model_rd_for_sb(cpi, bsize, x, xd, &rate_sum, &dist_sum,
2573 &tmp_skip_sb, &tmp_skip_sse); 2580 &tmp_skip_sb, &tmp_skip_sse);
2574 2581
2575 rd = RDCOST(x->rdmult, x->rddiv, rate_sum, dist_sum); 2582 rd = RDCOST(x->rdmult, x->rddiv, rate_sum, dist_sum);
2576 filter_cache[i] = rd; 2583 filter_cache[i] = rd;
2577 filter_cache[SWITCHABLE_FILTERS] = 2584 filter_cache[SWITCHABLE_FILTERS] =
2578 MIN(filter_cache[SWITCHABLE_FILTERS], rd + rs_rd); 2585 VPXMIN(filter_cache[SWITCHABLE_FILTERS], rd + rs_rd);
2579 if (cm->interp_filter == SWITCHABLE) 2586 if (cm->interp_filter == SWITCHABLE)
2580 rd += rs_rd; 2587 rd += rs_rd;
2581 *mask_filter = MAX(*mask_filter, rd); 2588 *mask_filter = VPXMAX(*mask_filter, rd);
2582 2589
2583 if (i == 0 && intpel_mv) { 2590 if (i == 0 && intpel_mv) {
2584 tmp_rate_sum = rate_sum; 2591 tmp_rate_sum = rate_sum;
2585 tmp_dist_sum = dist_sum; 2592 tmp_dist_sum = dist_sum;
2586 } 2593 }
2587 } 2594 }
2588 2595
2589 if (i == 0 && cpi->sf.use_rd_breakout && ref_best_rd < INT64_MAX) { 2596 if (i == 0 && cpi->sf.use_rd_breakout && ref_best_rd < INT64_MAX) {
2590 if (rd / 2 > ref_best_rd) { 2597 if (rd / 2 > ref_best_rd) {
2591 restore_dst_buf(xd, orig_dst, orig_dst_stride); 2598 restore_dst_buf(xd, orig_dst, orig_dst_stride);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
2682 *rate2 = INT_MAX; 2689 *rate2 = INT_MAX;
2683 *distortion = INT64_MAX; 2690 *distortion = INT64_MAX;
2684 restore_dst_buf(xd, orig_dst, orig_dst_stride); 2691 restore_dst_buf(xd, orig_dst, orig_dst_stride);
2685 return INT64_MAX; 2692 return INT64_MAX;
2686 } 2693 }
2687 2694
2688 *rate2 += *rate_y; 2695 *rate2 += *rate_y;
2689 *distortion += distortion_y; 2696 *distortion += distortion_y;
2690 2697
2691 rdcosty = RDCOST(x->rdmult, x->rddiv, *rate2, *distortion); 2698 rdcosty = RDCOST(x->rdmult, x->rddiv, *rate2, *distortion);
2692 rdcosty = MIN(rdcosty, RDCOST(x->rdmult, x->rddiv, 0, *psse)); 2699 rdcosty = VPXMIN(rdcosty, RDCOST(x->rdmult, x->rddiv, 0, *psse));
2693 2700
2694 if (!super_block_uvrd(cpi, x, rate_uv, &distortion_uv, &skippable_uv, 2701 if (!super_block_uvrd(cpi, x, rate_uv, &distortion_uv, &skippable_uv,
2695 &sseuv, bsize, ref_best_rd - rdcosty)) { 2702 &sseuv, bsize, ref_best_rd - rdcosty)) {
2696 *rate2 = INT_MAX; 2703 *rate2 = INT_MAX;
2697 *distortion = INT64_MAX; 2704 *distortion = INT64_MAX;
2698 restore_dst_buf(xd, orig_dst, orig_dst_stride); 2705 restore_dst_buf(xd, orig_dst, orig_dst_stride);
2699 return INT64_MAX; 2706 return INT64_MAX;
2700 } 2707 }
2701 2708
2702 *psse += sseuv; 2709 *psse += sseuv;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2747 if (rd_pick_intra_sub_8x8_y_mode(cpi, x, &rate_y, &rate_y_tokenonly, 2754 if (rd_pick_intra_sub_8x8_y_mode(cpi, x, &rate_y, &rate_y_tokenonly,
2748 &dist_y, best_rd) >= best_rd) { 2755 &dist_y, best_rd) >= best_rd) {
2749 rd_cost->rate = INT_MAX; 2756 rd_cost->rate = INT_MAX;
2750 return; 2757 return;
2751 } 2758 }
2752 } 2759 }
2753 max_uv_tx_size = get_uv_tx_size_impl(xd->mi[0]->mbmi.tx_size, bsize, 2760 max_uv_tx_size = get_uv_tx_size_impl(xd->mi[0]->mbmi.tx_size, bsize,
2754 pd[1].subsampling_x, 2761 pd[1].subsampling_x,
2755 pd[1].subsampling_y); 2762 pd[1].subsampling_y);
2756 rd_pick_intra_sbuv_mode(cpi, x, ctx, &rate_uv, &rate_uv_tokenonly, 2763 rd_pick_intra_sbuv_mode(cpi, x, ctx, &rate_uv, &rate_uv_tokenonly,
2757 &dist_uv, &uv_skip, MAX(BLOCK_8X8, bsize), 2764 &dist_uv, &uv_skip, VPXMAX(BLOCK_8X8, bsize),
2758 max_uv_tx_size); 2765 max_uv_tx_size);
2759 2766
2760 if (y_skip && uv_skip) { 2767 if (y_skip && uv_skip) {
2761 rd_cost->rate = rate_y + rate_uv - rate_y_tokenonly - rate_uv_tokenonly + 2768 rd_cost->rate = rate_y + rate_uv - rate_y_tokenonly - rate_uv_tokenonly +
2762 vp9_cost_bit(vp9_get_skip_prob(cm, xd), 1); 2769 vp9_cost_bit(vp9_get_skip_prob(cm, xd), 1);
2763 rd_cost->dist = dist_y + dist_uv; 2770 rd_cost->dist = dist_y + dist_uv;
2764 } else { 2771 } else {
2765 rd_cost->rate = rate_y + rate_uv + 2772 rd_cost->rate = rate_y + rate_uv +
2766 vp9_cost_bit(vp9_get_skip_prob(cm, xd), 0); 2773 vp9_cost_bit(vp9_get_skip_prob(cm, xd), 0);
2767 rd_cost->dist = dist_y + dist_uv; 2774 rd_cost->dist = dist_y + dist_uv;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2814 ((source_variance * source_variance) + 2821 ((source_variance * source_variance) +
2815 (recon_variance * recon_variance)); 2822 (recon_variance * recon_variance));
2816 var_error = 100 - var_error; 2823 var_error = 100 - var_error;
2817 } 2824 }
2818 2825
2819 // Source variance above a threshold and ref frame is intra. 2826 // Source variance above a threshold and ref frame is intra.
2820 // This case is targeted mainly at discouraging intra modes that give rise 2827 // This case is targeted mainly at discouraging intra modes that give rise
2821 // to a predictor with a low spatial complexity compared to the source. 2828 // to a predictor with a low spatial complexity compared to the source.
2822 if ((source_variance > LOW_VAR_THRESH) && (ref_frame == INTRA_FRAME) && 2829 if ((source_variance > LOW_VAR_THRESH) && (ref_frame == INTRA_FRAME) &&
2823 (source_variance > recon_variance)) { 2830 (source_variance > recon_variance)) {
2824 var_factor = MIN(absvar_diff, MIN(VLOW_ADJ_MAX, var_error)); 2831 var_factor = VPXMIN(absvar_diff, VPXMIN(VLOW_ADJ_MAX, var_error));
2825 // A second possible case of interest is where the source variance 2832 // A second possible case of interest is where the source variance
2826 // is very low and we wish to discourage false texture or motion trails. 2833 // is very low and we wish to discourage false texture or motion trails.
2827 } else if ((source_variance < (LOW_VAR_THRESH >> 1)) && 2834 } else if ((source_variance < (LOW_VAR_THRESH >> 1)) &&
2828 (recon_variance > source_variance)) { 2835 (recon_variance > source_variance)) {
2829 var_factor = MIN(absvar_diff, MIN(VHIGH_ADJ_MAX, var_error)); 2836 var_factor = VPXMIN(absvar_diff, VPXMIN(VHIGH_ADJ_MAX, var_error));
2830 } 2837 }
2831 *this_rd += (*this_rd * var_factor) / 100; 2838 *this_rd += (*this_rd * var_factor) / 100;
2832 } 2839 }
2833 2840
2834 2841
2835 // Do we have an internal image edge (e.g. formatting bars). 2842 // Do we have an internal image edge (e.g. formatting bars).
2836 int vp9_internal_image_edge(VP9_COMP *cpi) { 2843 int vp9_internal_image_edge(VP9_COMP *cpi) {
2837 return (cpi->oxcf.pass == 2) && 2844 return (cpi->oxcf.pass == 2) &&
2838 ((cpi->twopass.this_frame_stats.inactive_zone_rows > 0) || 2845 ((cpi->twopass.this_frame_stats.inactive_zone_rows > 0) ||
2839 (cpi->twopass.this_frame_stats.inactive_zone_cols > 0)); 2846 (cpi->twopass.this_frame_stats.inactive_zone_cols > 0));
2840 } 2847 }
2841 2848
2842 // Checks to see if a super block is on a horizontal image edge. 2849 // Checks to see if a super block is on a horizontal image edge.
2843 // In most cases this is the "real" edge unless there are formatting 2850 // In most cases this is the "real" edge unless there are formatting
2844 // bars embedded in the stream. 2851 // bars embedded in the stream.
2845 int vp9_active_h_edge(VP9_COMP *cpi, int mi_row, int mi_step) { 2852 int vp9_active_h_edge(VP9_COMP *cpi, int mi_row, int mi_step) {
2846 int top_edge = 0; 2853 int top_edge = 0;
2847 int bottom_edge = cpi->common.mi_rows; 2854 int bottom_edge = cpi->common.mi_rows;
2848 int is_active_h_edge = 0; 2855 int is_active_h_edge = 0;
2849 2856
2850 // For two pass account for any formatting bars detected. 2857 // For two pass account for any formatting bars detected.
2851 if (cpi->oxcf.pass == 2) { 2858 if (cpi->oxcf.pass == 2) {
2852 TWO_PASS *twopass = &cpi->twopass; 2859 TWO_PASS *twopass = &cpi->twopass;
2853 2860
2854 // The inactive region is specified in MBs not mi units. 2861 // The inactive region is specified in MBs not mi units.
2855 // The image edge is in the following MB row. 2862 // The image edge is in the following MB row.
2856 top_edge += (int)(twopass->this_frame_stats.inactive_zone_rows * 2); 2863 top_edge += (int)(twopass->this_frame_stats.inactive_zone_rows * 2);
2857 2864
2858 bottom_edge -= (int)(twopass->this_frame_stats.inactive_zone_rows * 2); 2865 bottom_edge -= (int)(twopass->this_frame_stats.inactive_zone_rows * 2);
2859 bottom_edge = MAX(top_edge, bottom_edge); 2866 bottom_edge = VPXMAX(top_edge, bottom_edge);
2860 } 2867 }
2861 2868
2862 if (((top_edge >= mi_row) && (top_edge < (mi_row + mi_step))) || 2869 if (((top_edge >= mi_row) && (top_edge < (mi_row + mi_step))) ||
2863 ((bottom_edge >= mi_row) && (bottom_edge < (mi_row + mi_step)))) { 2870 ((bottom_edge >= mi_row) && (bottom_edge < (mi_row + mi_step)))) {
2864 is_active_h_edge = 1; 2871 is_active_h_edge = 1;
2865 } 2872 }
2866 return is_active_h_edge; 2873 return is_active_h_edge;
2867 } 2874 }
2868 2875
2869 // Checks to see if a super block is on a vertical image edge. 2876 // Checks to see if a super block is on a vertical image edge.
2870 // In most cases this is the "real" edge unless there are formatting 2877 // In most cases this is the "real" edge unless there are formatting
2871 // bars embedded in the stream. 2878 // bars embedded in the stream.
2872 int vp9_active_v_edge(VP9_COMP *cpi, int mi_col, int mi_step) { 2879 int vp9_active_v_edge(VP9_COMP *cpi, int mi_col, int mi_step) {
2873 int left_edge = 0; 2880 int left_edge = 0;
2874 int right_edge = cpi->common.mi_cols; 2881 int right_edge = cpi->common.mi_cols;
2875 int is_active_v_edge = 0; 2882 int is_active_v_edge = 0;
2876 2883
2877 // For two pass account for any formatting bars detected. 2884 // For two pass account for any formatting bars detected.
2878 if (cpi->oxcf.pass == 2) { 2885 if (cpi->oxcf.pass == 2) {
2879 TWO_PASS *twopass = &cpi->twopass; 2886 TWO_PASS *twopass = &cpi->twopass;
2880 2887
2881 // The inactive region is specified in MBs not mi units. 2888 // The inactive region is specified in MBs not mi units.
2882 // The image edge is in the following MB row. 2889 // The image edge is in the following MB row.
2883 left_edge += (int)(twopass->this_frame_stats.inactive_zone_cols * 2); 2890 left_edge += (int)(twopass->this_frame_stats.inactive_zone_cols * 2);
2884 2891
2885 right_edge -= (int)(twopass->this_frame_stats.inactive_zone_cols * 2); 2892 right_edge -= (int)(twopass->this_frame_stats.inactive_zone_cols * 2);
2886 right_edge = MAX(left_edge, right_edge); 2893 right_edge = VPXMAX(left_edge, right_edge);
2887 } 2894 }
2888 2895
2889 if (((left_edge >= mi_col) && (left_edge < (mi_col + mi_step))) || 2896 if (((left_edge >= mi_col) && (left_edge < (mi_col + mi_step))) ||
2890 ((right_edge >= mi_col) && (right_edge < (mi_col + mi_step)))) { 2897 ((right_edge >= mi_col) && (right_edge < (mi_col + mi_step)))) {
2891 is_active_v_edge = 1; 2898 is_active_v_edge = 1;
2892 } 2899 }
2893 return is_active_v_edge; 2900 return is_active_v_edge;
2894 } 2901 }
2895 2902
2896 // Checks to see if a super block is at the edge of the active image. 2903 // Checks to see if a super block is at the edge of the active image.
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
3123 ref_frame_skip_mask[0] |= ALT_REF_MODE_MASK; 3130 ref_frame_skip_mask[0] |= ALT_REF_MODE_MASK;
3124 break; 3131 break;
3125 case NONE: 3132 case NONE:
3126 case MAX_REF_FRAMES: 3133 case MAX_REF_FRAMES:
3127 assert(0 && "Invalid Reference frame"); 3134 assert(0 && "Invalid Reference frame");
3128 break; 3135 break;
3129 } 3136 }
3130 } 3137 }
3131 3138
3132 if ((ref_frame_skip_mask[0] & (1 << ref_frame)) && 3139 if ((ref_frame_skip_mask[0] & (1 << ref_frame)) &&
3133 (ref_frame_skip_mask[1] & (1 << MAX(0, second_ref_frame)))) 3140 (ref_frame_skip_mask[1] & (1 << VPXMAX(0, second_ref_frame))))
3134 continue; 3141 continue;
3135 3142
3136 if (mode_skip_mask[ref_frame] & (1 << this_mode)) 3143 if (mode_skip_mask[ref_frame] & (1 << this_mode))
3137 continue; 3144 continue;
3138 3145
3139 // Test best rd so far against threshold for trying this mode. 3146 // Test best rd so far against threshold for trying this mode.
3140 if (best_mode_skippable && sf->schedule_mode_search) 3147 if (best_mode_skippable && sf->schedule_mode_search)
3141 mode_threshold[mode_index] <<= 1; 3148 mode_threshold[mode_index] <<= 1;
3142 3149
3143 if (best_rd < mode_threshold[mode_index]) 3150 if (best_rd < mode_threshold[mode_index])
3144 continue; 3151 continue;
3145 3152
3146 if (sf->motion_field_mode_search) { 3153 if (sf->motion_field_mode_search) {
3147 const int mi_width = MIN(num_8x8_blocks_wide_lookup[bsize], 3154 const int mi_width = VPXMIN(num_8x8_blocks_wide_lookup[bsize],
3148 tile_info->mi_col_end - mi_col); 3155 tile_info->mi_col_end - mi_col);
3149 const int mi_height = MIN(num_8x8_blocks_high_lookup[bsize], 3156 const int mi_height = VPXMIN(num_8x8_blocks_high_lookup[bsize],
3150 tile_info->mi_row_end - mi_row); 3157 tile_info->mi_row_end - mi_row);
3151 const int bsl = mi_width_log2_lookup[bsize]; 3158 const int bsl = mi_width_log2_lookup[bsize];
3152 int cb_partition_search_ctrl = (((mi_row + mi_col) >> bsl) 3159 int cb_partition_search_ctrl = (((mi_row + mi_col) >> bsl)
3153 + get_chessboard_index(cm->current_video_frame)) & 0x1; 3160 + get_chessboard_index(cm->current_video_frame)) & 0x1;
3154 MB_MODE_INFO *ref_mbmi; 3161 MB_MODE_INFO *ref_mbmi;
3155 int const_motion = 1; 3162 int const_motion = 1;
3156 int skip_ref_frame = !cb_partition_search_ctrl; 3163 int skip_ref_frame = !cb_partition_search_ctrl;
3157 MV_REFERENCE_FRAME rf = NONE; 3164 MV_REFERENCE_FRAME rf = NONE;
3158 int_mv ref_mv; 3165 int_mv ref_mv;
3159 ref_mv.as_int = INVALID_MV; 3166 ref_mv.as_int = INVALID_MV;
3160 3167
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
3358 if (ref_frame == INTRA_FRAME) { 3365 if (ref_frame == INTRA_FRAME) {
3359 // Keep record of best intra rd 3366 // Keep record of best intra rd
3360 if (this_rd < best_intra_rd) { 3367 if (this_rd < best_intra_rd) {
3361 best_intra_rd = this_rd; 3368 best_intra_rd = this_rd;
3362 best_intra_mode = mbmi->mode; 3369 best_intra_mode = mbmi->mode;
3363 } 3370 }
3364 } 3371 }
3365 3372
3366 if (!disable_skip && ref_frame == INTRA_FRAME) { 3373 if (!disable_skip && ref_frame == INTRA_FRAME) {
3367 for (i = 0; i < REFERENCE_MODES; ++i) 3374 for (i = 0; i < REFERENCE_MODES; ++i)
3368 best_pred_rd[i] = MIN(best_pred_rd[i], this_rd); 3375 best_pred_rd[i] = VPXMIN(best_pred_rd[i], this_rd);
3369 for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++) 3376 for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++)
3370 best_filter_rd[i] = MIN(best_filter_rd[i], this_rd); 3377 best_filter_rd[i] = VPXMIN(best_filter_rd[i], this_rd);
3371 } 3378 }
3372 3379
3373 // Did this mode help.. i.e. is it the new best mode 3380 // Did this mode help.. i.e. is it the new best mode
3374 if (this_rd < best_rd || x->skip) { 3381 if (this_rd < best_rd || x->skip) {
3375 int max_plane = MAX_MB_PLANE; 3382 int max_plane = MAX_MB_PLANE;
3376 if (!mode_excluded) { 3383 if (!mode_excluded) {
3377 // Note index of best mode so far 3384 // Note index of best mode so far
3378 best_mode_index = mode_index; 3385 best_mode_index = mode_index;
3379 3386
3380 if (ref_frame == INTRA_FRAME) { 3387 if (ref_frame == INTRA_FRAME) {
3381 /* required for left and above block mv */ 3388 /* required for left and above block mv */
3382 mbmi->mv[0].as_int = 0; 3389 mbmi->mv[0].as_int = 0;
3383 max_plane = 1; 3390 max_plane = 1;
3384 } else { 3391 } else {
3385 best_pred_sse = x->pred_sse[ref_frame]; 3392 best_pred_sse = x->pred_sse[ref_frame];
3386 } 3393 }
3387 3394
3388 rd_cost->rate = rate2; 3395 rd_cost->rate = rate2;
3389 rd_cost->dist = distortion2; 3396 rd_cost->dist = distortion2;
3390 rd_cost->rdcost = this_rd; 3397 rd_cost->rdcost = this_rd;
3391 best_rd = this_rd; 3398 best_rd = this_rd;
3392 best_mbmode = *mbmi; 3399 best_mbmode = *mbmi;
3393 best_skip2 = this_skip2; 3400 best_skip2 = this_skip2;
3394 best_mode_skippable = skippable; 3401 best_mode_skippable = skippable;
3395 3402
3396 if (!x->select_tx_size) 3403 if (!x->select_tx_size)
3397 swap_block_ptr(x, ctx, 1, 0, 0, max_plane); 3404 swap_block_ptr(x, ctx, 1, 0, 0, max_plane);
3398 memcpy(ctx->zcoeff_blk, x->zcoeff_blk[mbmi->tx_size], 3405 memcpy(ctx->zcoeff_blk, x->zcoeff_blk[mbmi->tx_size],
3399 sizeof(uint8_t) * ctx->num_4x4_blk); 3406 sizeof(ctx->zcoeff_blk[0]) * ctx->num_4x4_blk);
3400 3407
3401 // TODO(debargha): enhance this test with a better distortion prediction 3408 // TODO(debargha): enhance this test with a better distortion prediction
3402 // based on qp, activity mask and history 3409 // based on qp, activity mask and history
3403 if ((mode_search_skip_flags & FLAG_EARLY_TERMINATE) && 3410 if ((mode_search_skip_flags & FLAG_EARLY_TERMINATE) &&
3404 (mode_index > MIN_EARLY_TERM_INDEX)) { 3411 (mode_index > MIN_EARLY_TERM_INDEX)) {
3405 int qstep = xd->plane[0].dequant[1]; 3412 int qstep = xd->plane[0].dequant[1];
3406 // TODO(debargha): Enhance this by specializing for each mode_index 3413 // TODO(debargha): Enhance this by specializing for each mode_index
3407 int scale = 4; 3414 int scale = 4;
3408 #if CONFIG_VP9_HIGHBITDEPTH 3415 #if CONFIG_VP9_HIGHBITDEPTH
3409 if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { 3416 if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
3459 else if (filter_cache[i] == INT64_MAX) 3466 else if (filter_cache[i] == INT64_MAX)
3460 // when early termination is triggered, the encoder does not have 3467 // when early termination is triggered, the encoder does not have
3461 // access to the rate-distortion cost. it only knows that the cost 3468 // access to the rate-distortion cost. it only knows that the cost
3462 // should be above the maximum valid value. hence it takes the known 3469 // should be above the maximum valid value. hence it takes the known
3463 // maximum plus an arbitrary constant as the rate-distortion cost. 3470 // maximum plus an arbitrary constant as the rate-distortion cost.
3464 adj_rd = mask_filter - ref + 10; 3471 adj_rd = mask_filter - ref + 10;
3465 else 3472 else
3466 adj_rd = filter_cache[i] - ref; 3473 adj_rd = filter_cache[i] - ref;
3467 3474
3468 adj_rd += this_rd; 3475 adj_rd += this_rd;
3469 best_filter_rd[i] = MIN(best_filter_rd[i], adj_rd); 3476 best_filter_rd[i] = VPXMIN(best_filter_rd[i], adj_rd);
3470 } 3477 }
3471 } 3478 }
3472 } 3479 }
3473 3480
3474 if (early_term) 3481 if (early_term)
3475 break; 3482 break;
3476 3483
3477 if (x->skip && !comp_pred) 3484 if (x->skip && !comp_pred)
3478 break; 3485 break;
3479 } 3486 }
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
3802 break; 3809 break;
3803 case NONE: 3810 case NONE:
3804 case MAX_REF_FRAMES: 3811 case MAX_REF_FRAMES:
3805 assert(0 && "Invalid Reference frame"); 3812 assert(0 && "Invalid Reference frame");
3806 break; 3813 break;
3807 } 3814 }
3808 } 3815 }
3809 } 3816 }
3810 3817
3811 if ((ref_frame_skip_mask[0] & (1 << ref_frame)) && 3818 if ((ref_frame_skip_mask[0] & (1 << ref_frame)) &&
3812 (ref_frame_skip_mask[1] & (1 << MAX(0, second_ref_frame)))) 3819 (ref_frame_skip_mask[1] & (1 << VPXMAX(0, second_ref_frame))))
3813 continue; 3820 continue;
3814 3821
3815 // Test best rd so far against threshold for trying this mode. 3822 // Test best rd so far against threshold for trying this mode.
3816 if (!internal_active_edge && 3823 if (!internal_active_edge &&
3817 rd_less_than_thresh(best_rd, 3824 rd_less_than_thresh(best_rd,
3818 rd_opt->threshes[segment_id][bsize][ref_index], 3825 rd_opt->threshes[segment_id][bsize][ref_index],
3819 tile_data->thresh_freq_fact[bsize][ref_index])) 3826 tile_data->thresh_freq_fact[bsize][ref_index]))
3820 continue; 3827 continue;
3821 3828
3822 comp_pred = second_ref_frame > INTRA_FRAME; 3829 comp_pred = second_ref_frame > INTRA_FRAME;
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
3957 (int) this_rd_thresh, seg_mvs, 3964 (int) this_rd_thresh, seg_mvs,
3958 bsi, switchable_filter_index, 3965 bsi, switchable_filter_index,
3959 mi_row, mi_col); 3966 mi_row, mi_col);
3960 3967
3961 if (tmp_rd == INT64_MAX) 3968 if (tmp_rd == INT64_MAX)
3962 continue; 3969 continue;
3963 rs = vp9_get_switchable_rate(cpi, xd); 3970 rs = vp9_get_switchable_rate(cpi, xd);
3964 rs_rd = RDCOST(x->rdmult, x->rddiv, rs, 0); 3971 rs_rd = RDCOST(x->rdmult, x->rddiv, rs, 0);
3965 filter_cache[switchable_filter_index] = tmp_rd; 3972 filter_cache[switchable_filter_index] = tmp_rd;
3966 filter_cache[SWITCHABLE_FILTERS] = 3973 filter_cache[SWITCHABLE_FILTERS] =
3967 MIN(filter_cache[SWITCHABLE_FILTERS], 3974 VPXMIN(filter_cache[SWITCHABLE_FILTERS], tmp_rd + rs_rd);
3968 tmp_rd + rs_rd);
3969 if (cm->interp_filter == SWITCHABLE) 3975 if (cm->interp_filter == SWITCHABLE)
3970 tmp_rd += rs_rd; 3976 tmp_rd += rs_rd;
3971 3977
3972 mask_filter = MAX(mask_filter, tmp_rd); 3978 mask_filter = VPXMAX(mask_filter, tmp_rd);
3973 3979
3974 newbest = (tmp_rd < tmp_best_rd); 3980 newbest = (tmp_rd < tmp_best_rd);
3975 if (newbest) { 3981 if (newbest) {
3976 tmp_best_filter = mbmi->interp_filter; 3982 tmp_best_filter = mbmi->interp_filter;
3977 tmp_best_rd = tmp_rd; 3983 tmp_best_rd = tmp_rd;
3978 } 3984 }
3979 if ((newbest && cm->interp_filter == SWITCHABLE) || 3985 if ((newbest && cm->interp_filter == SWITCHABLE) ||
3980 (mbmi->interp_filter == cm->interp_filter && 3986 (mbmi->interp_filter == cm->interp_filter &&
3981 cm->interp_filter != SWITCHABLE)) { 3987 cm->interp_filter != SWITCHABLE)) {
3982 tmp_best_rdu = tmp_rd; 3988 tmp_best_rdu = tmp_rd;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
4039 4045
4040 if (cm->interp_filter == SWITCHABLE) 4046 if (cm->interp_filter == SWITCHABLE)
4041 rate2 += vp9_get_switchable_rate(cpi, xd); 4047 rate2 += vp9_get_switchable_rate(cpi, xd);
4042 4048
4043 if (!mode_excluded) 4049 if (!mode_excluded)
4044 mode_excluded = comp_pred ? cm->reference_mode == SINGLE_REFERENCE 4050 mode_excluded = comp_pred ? cm->reference_mode == SINGLE_REFERENCE
4045 : cm->reference_mode == COMPOUND_REFERENCE; 4051 : cm->reference_mode == COMPOUND_REFERENCE;
4046 4052
4047 compmode_cost = vp9_cost_bit(comp_mode_p, comp_pred); 4053 compmode_cost = vp9_cost_bit(comp_mode_p, comp_pred);
4048 4054
4049 tmp_best_rdu = best_rd - 4055 tmp_best_rdu =
4050 MIN(RDCOST(x->rdmult, x->rddiv, rate2, distortion2), 4056 best_rd - VPXMIN(RDCOST(x->rdmult, x->rddiv, rate2, distortion2),
4051 RDCOST(x->rdmult, x->rddiv, 0, total_sse)); 4057 RDCOST(x->rdmult, x->rddiv, 0, total_sse));
4052 4058
4053 if (tmp_best_rdu > 0) { 4059 if (tmp_best_rdu > 0) {
4054 // If even the 'Y' rd value of split is higher than best so far 4060 // If even the 'Y' rd value of split is higher than best so far
4055 // then dont bother looking at UV 4061 // then dont bother looking at UV
4056 vp9_build_inter_predictors_sbuv(&x->e_mbd, mi_row, mi_col, 4062 vp9_build_inter_predictors_sbuv(&x->e_mbd, mi_row, mi_col,
4057 BLOCK_8X8); 4063 BLOCK_8X8);
4058 memset(x->skip_txfm, SKIP_TXFM_NONE, sizeof(x->skip_txfm)); 4064 memset(x->skip_txfm, SKIP_TXFM_NONE, sizeof(x->skip_txfm));
4059 if (!super_block_uvrd(cpi, x, &rate_uv, &distortion_uv, &uv_skippable, 4065 if (!super_block_uvrd(cpi, x, &rate_uv, &distortion_uv, &uv_skippable,
4060 &uv_sse, BLOCK_8X8, tmp_best_rdu)) 4066 &uv_sse, BLOCK_8X8, tmp_best_rdu))
4061 continue; 4067 continue;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
4101 // Add in the cost of the no skip flag. 4107 // Add in the cost of the no skip flag.
4102 rate2 += vp9_cost_bit(vp9_get_skip_prob(cm, xd), 0); 4108 rate2 += vp9_cost_bit(vp9_get_skip_prob(cm, xd), 0);
4103 } 4109 }
4104 4110
4105 // Calculate the final RD estimate for this mode. 4111 // Calculate the final RD estimate for this mode.
4106 this_rd = RDCOST(x->rdmult, x->rddiv, rate2, distortion2); 4112 this_rd = RDCOST(x->rdmult, x->rddiv, rate2, distortion2);
4107 } 4113 }
4108 4114
4109 if (!disable_skip && ref_frame == INTRA_FRAME) { 4115 if (!disable_skip && ref_frame == INTRA_FRAME) {
4110 for (i = 0; i < REFERENCE_MODES; ++i) 4116 for (i = 0; i < REFERENCE_MODES; ++i)
4111 best_pred_rd[i] = MIN(best_pred_rd[i], this_rd); 4117 best_pred_rd[i] = VPXMIN(best_pred_rd[i], this_rd);
4112 for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++) 4118 for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++)
4113 best_filter_rd[i] = MIN(best_filter_rd[i], this_rd); 4119 best_filter_rd[i] = VPXMIN(best_filter_rd[i], this_rd);
4114 } 4120 }
4115 4121
4116 // Did this mode help.. i.e. is it the new best mode 4122 // Did this mode help.. i.e. is it the new best mode
4117 if (this_rd < best_rd || x->skip) { 4123 if (this_rd < best_rd || x->skip) {
4118 if (!mode_excluded) { 4124 if (!mode_excluded) {
4119 int max_plane = MAX_MB_PLANE; 4125 int max_plane = MAX_MB_PLANE;
4120 // Note index of best mode so far 4126 // Note index of best mode so far
4121 best_ref_index = ref_index; 4127 best_ref_index = ref_index;
4122 4128
4123 if (ref_frame == INTRA_FRAME) { 4129 if (ref_frame == INTRA_FRAME) {
4124 /* required for left and above block mv */ 4130 /* required for left and above block mv */
4125 mbmi->mv[0].as_int = 0; 4131 mbmi->mv[0].as_int = 0;
4126 max_plane = 1; 4132 max_plane = 1;
4127 } 4133 }
4128 4134
4129 rd_cost->rate = rate2; 4135 rd_cost->rate = rate2;
4130 rd_cost->dist = distortion2; 4136 rd_cost->dist = distortion2;
4131 rd_cost->rdcost = this_rd; 4137 rd_cost->rdcost = this_rd;
4132 best_rd = this_rd; 4138 best_rd = this_rd;
4133 best_yrd = best_rd - 4139 best_yrd = best_rd -
4134 RDCOST(x->rdmult, x->rddiv, rate_uv, distortion_uv); 4140 RDCOST(x->rdmult, x->rddiv, rate_uv, distortion_uv);
4135 best_mbmode = *mbmi; 4141 best_mbmode = *mbmi;
4136 best_skip2 = this_skip2; 4142 best_skip2 = this_skip2;
4137 if (!x->select_tx_size) 4143 if (!x->select_tx_size)
4138 swap_block_ptr(x, ctx, 1, 0, 0, max_plane); 4144 swap_block_ptr(x, ctx, 1, 0, 0, max_plane);
4139 memcpy(ctx->zcoeff_blk, x->zcoeff_blk[TX_4X4], 4145 memcpy(ctx->zcoeff_blk, x->zcoeff_blk[TX_4X4],
4140 sizeof(uint8_t) * ctx->num_4x4_blk); 4146 sizeof(ctx->zcoeff_blk[0]) * ctx->num_4x4_blk);
4141 4147
4142 for (i = 0; i < 4; i++) 4148 for (i = 0; i < 4; i++)
4143 best_bmodes[i] = xd->mi[0]->bmi[i]; 4149 best_bmodes[i] = xd->mi[0]->bmi[i];
4144 4150
4145 // TODO(debargha): enhance this test with a better distortion prediction 4151 // TODO(debargha): enhance this test with a better distortion prediction
4146 // based on qp, activity mask and history 4152 // based on qp, activity mask and history
4147 if ((sf->mode_search_skip_flags & FLAG_EARLY_TERMINATE) && 4153 if ((sf->mode_search_skip_flags & FLAG_EARLY_TERMINATE) &&
4148 (ref_index > MIN_EARLY_TERM_INDEX)) { 4154 (ref_index > MIN_EARLY_TERM_INDEX)) {
4149 int qstep = xd->plane[0].dequant[1]; 4155 int qstep = xd->plane[0].dequant[1];
4150 // TODO(debargha): Enhance this by specializing for each mode_index 4156 // TODO(debargha): Enhance this by specializing for each mode_index
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
4202 else if (filter_cache[i] == INT64_MAX) 4208 else if (filter_cache[i] == INT64_MAX)
4203 // when early termination is triggered, the encoder does not have 4209 // when early termination is triggered, the encoder does not have
4204 // access to the rate-distortion cost. it only knows that the cost 4210 // access to the rate-distortion cost. it only knows that the cost
4205 // should be above the maximum valid value. hence it takes the known 4211 // should be above the maximum valid value. hence it takes the known
4206 // maximum plus an arbitrary constant as the rate-distortion cost. 4212 // maximum plus an arbitrary constant as the rate-distortion cost.
4207 adj_rd = mask_filter - ref + 10; 4213 adj_rd = mask_filter - ref + 10;
4208 else 4214 else
4209 adj_rd = filter_cache[i] - ref; 4215 adj_rd = filter_cache[i] - ref;
4210 4216
4211 adj_rd += this_rd; 4217 adj_rd += this_rd;
4212 best_filter_rd[i] = MIN(best_filter_rd[i], adj_rd); 4218 best_filter_rd[i] = VPXMIN(best_filter_rd[i], adj_rd);
4213 } 4219 }
4214 } 4220 }
4215 4221
4216 if (early_term) 4222 if (early_term)
4217 break; 4223 break;
4218 4224
4219 if (x->skip && !comp_pred) 4225 if (x->skip && !comp_pred)
4220 break; 4226 break;
4221 } 4227 }
4222 4228
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
4283 } 4289 }
4284 if (cm->interp_filter == SWITCHABLE) 4290 if (cm->interp_filter == SWITCHABLE)
4285 assert(best_filter_diff[SWITCHABLE_FILTERS] == 0); 4291 assert(best_filter_diff[SWITCHABLE_FILTERS] == 0);
4286 } else { 4292 } else {
4287 vp9_zero(best_filter_diff); 4293 vp9_zero(best_filter_diff);
4288 } 4294 }
4289 4295
4290 store_coding_context(x, ctx, best_ref_index, 4296 store_coding_context(x, ctx, best_ref_index,
4291 best_pred_diff, best_filter_diff, 0); 4297 best_pred_diff, best_filter_diff, 0);
4292 } 4298 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_rd.c ('k') | source/libvpx/vp9/encoder/vp9_resize.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698