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

Side by Side Diff: source/libvpx/vp9/encoder/vp9_encodeframe.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_denoiser.c ('k') | source/libvpx/vp9/encoder/vp9_encodemb.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 <limits.h> 11 #include <limits.h>
12 #include <math.h> 12 #include <math.h>
13 #include <stdio.h> 13 #include <stdio.h>
14 14
15 #include "./vp9_rtcd.h" 15 #include "./vp9_rtcd.h"
16 #include "./vpx_dsp_rtcd.h" 16 #include "./vpx_dsp_rtcd.h"
17 #include "./vpx_config.h" 17 #include "./vpx_config.h"
18 18
19 #include "vpx_ports/mem.h" 19 #include "vpx_ports/mem.h"
20 #include "vpx_ports/vpx_timer.h" 20 #include "vpx_ports/vpx_timer.h"
21 #include "vpx_ports/system_state.h"
21 22
22 #include "vp9/common/vp9_common.h" 23 #include "vp9/common/vp9_common.h"
23 #include "vp9/common/vp9_entropy.h" 24 #include "vp9/common/vp9_entropy.h"
24 #include "vp9/common/vp9_entropymode.h" 25 #include "vp9/common/vp9_entropymode.h"
25 #include "vp9/common/vp9_idct.h" 26 #include "vp9/common/vp9_idct.h"
26 #include "vp9/common/vp9_mvref_common.h" 27 #include "vp9/common/vp9_mvref_common.h"
27 #include "vp9/common/vp9_pred_common.h" 28 #include "vp9/common/vp9_pred_common.h"
28 #include "vp9/common/vp9_quant_common.h" 29 #include "vp9/common/vp9_quant_common.h"
29 #include "vp9/common/vp9_reconintra.h" 30 #include "vp9/common/vp9_reconintra.h"
30 #include "vp9/common/vp9_reconinter.h" 31 #include "vp9/common/vp9_reconinter.h"
31 #include "vp9/common/vp9_seg_common.h" 32 #include "vp9/common/vp9_seg_common.h"
32 #include "vp9/common/vp9_systemdependent.h"
33 #include "vp9/common/vp9_tile_common.h" 33 #include "vp9/common/vp9_tile_common.h"
34 34
35 #include "vp9/encoder/vp9_aq_complexity.h" 35 #include "vp9/encoder/vp9_aq_complexity.h"
36 #include "vp9/encoder/vp9_aq_cyclicrefresh.h" 36 #include "vp9/encoder/vp9_aq_cyclicrefresh.h"
37 #include "vp9/encoder/vp9_aq_variance.h" 37 #include "vp9/encoder/vp9_aq_variance.h"
38 #include "vp9/encoder/vp9_encodeframe.h" 38 #include "vp9/encoder/vp9_encodeframe.h"
39 #include "vp9/encoder/vp9_encodemb.h" 39 #include "vp9/encoder/vp9_encodemb.h"
40 #include "vp9/encoder/vp9_encodemv.h" 40 #include "vp9/encoder/vp9_encodemv.h"
41 #include "vp9/encoder/vp9_ethread.h" 41 #include "vp9/encoder/vp9_ethread.h"
42 #include "vp9/encoder/vp9_extend.h" 42 #include "vp9/encoder/vp9_extend.h"
(...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 + (mi_col + 4 < cm->mi_cols) * 2 + (mi_row + 4 < cm->mi_rows); 710 + (mi_col + 4 < cm->mi_cols) * 2 + (mi_row + 4 < cm->mi_rows);
711 711
712 assert(yv12 != NULL); 712 assert(yv12 != NULL);
713 713
714 if (!(is_one_pass_cbr_svc(cpi) && cpi->svc.spatial_layer_id)) { 714 if (!(is_one_pass_cbr_svc(cpi) && cpi->svc.spatial_layer_id)) {
715 // For now, GOLDEN will not be used for non-zero spatial layers, since 715 // For now, GOLDEN will not be used for non-zero spatial layers, since
716 // it may not be a temporal reference. 716 // it may not be a temporal reference.
717 yv12_g = get_ref_frame_buffer(cpi, GOLDEN_FRAME); 717 yv12_g = get_ref_frame_buffer(cpi, GOLDEN_FRAME);
718 } 718 }
719 719
720 if (yv12_g && yv12_g != yv12) { 720 if (yv12_g && yv12_g != yv12 &&
721 (cpi->ref_frame_flags & VP9_GOLD_FLAG)) {
721 vp9_setup_pre_planes(xd, 0, yv12_g, mi_row, mi_col, 722 vp9_setup_pre_planes(xd, 0, yv12_g, mi_row, mi_col,
722 &cm->frame_refs[GOLDEN_FRAME - 1].sf); 723 &cm->frame_refs[GOLDEN_FRAME - 1].sf);
723 y_sad_g = cpi->fn_ptr[bsize].sdf(x->plane[0].src.buf, 724 y_sad_g = cpi->fn_ptr[bsize].sdf(x->plane[0].src.buf,
724 x->plane[0].src.stride, 725 x->plane[0].src.stride,
725 xd->plane[0].pre[0].buf, 726 xd->plane[0].pre[0].buf,
726 xd->plane[0].pre[0].stride); 727 xd->plane[0].pre[0].stride);
727 } else { 728 } else {
728 y_sad_g = UINT_MAX; 729 y_sad_g = UINT_MAX;
729 } 730 }
730 731
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 MACROBLOCK *const x = &td->mb; 972 MACROBLOCK *const x = &td->mb;
972 MACROBLOCKD *const xd = &x->e_mbd; 973 MACROBLOCKD *const xd = &x->e_mbd;
973 struct macroblock_plane *const p = x->plane; 974 struct macroblock_plane *const p = x->plane;
974 struct macroblockd_plane *const pd = xd->plane; 975 struct macroblockd_plane *const pd = xd->plane;
975 MODE_INFO *mi = &ctx->mic; 976 MODE_INFO *mi = &ctx->mic;
976 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; 977 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
977 MODE_INFO *mi_addr = xd->mi[0]; 978 MODE_INFO *mi_addr = xd->mi[0];
978 const struct segmentation *const seg = &cm->seg; 979 const struct segmentation *const seg = &cm->seg;
979 const int bw = num_8x8_blocks_wide_lookup[mi->mbmi.sb_type]; 980 const int bw = num_8x8_blocks_wide_lookup[mi->mbmi.sb_type];
980 const int bh = num_8x8_blocks_high_lookup[mi->mbmi.sb_type]; 981 const int bh = num_8x8_blocks_high_lookup[mi->mbmi.sb_type];
981 const int x_mis = MIN(bw, cm->mi_cols - mi_col); 982 const int x_mis = VPXMIN(bw, cm->mi_cols - mi_col);
982 const int y_mis = MIN(bh, cm->mi_rows - mi_row); 983 const int y_mis = VPXMIN(bh, cm->mi_rows - mi_row);
983 MV_REF *const frame_mvs = 984 MV_REF *const frame_mvs =
984 cm->cur_frame->mvs + mi_row * cm->mi_cols + mi_col; 985 cm->cur_frame->mvs + mi_row * cm->mi_cols + mi_col;
985 int w, h; 986 int w, h;
986 987
987 const int mis = cm->mi_stride; 988 const int mis = cm->mi_stride;
988 const int mi_width = num_8x8_blocks_wide_lookup[bsize]; 989 const int mi_width = num_8x8_blocks_wide_lookup[bsize];
989 const int mi_height = num_8x8_blocks_high_lookup[bsize]; 990 const int mi_height = num_8x8_blocks_high_lookup[bsize];
990 int max_plane; 991 int max_plane;
991 992
992 assert(mi->mbmi.sb_type == bsize); 993 assert(mi->mbmi.sb_type == bsize);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1039 if (cpi->oxcf.aq_mode) 1040 if (cpi->oxcf.aq_mode)
1040 vp9_init_plane_quantizers(cpi, x); 1041 vp9_init_plane_quantizers(cpi, x);
1041 1042
1042 if (is_inter_block(mbmi) && mbmi->sb_type < BLOCK_8X8) { 1043 if (is_inter_block(mbmi) && mbmi->sb_type < BLOCK_8X8) {
1043 mbmi->mv[0].as_int = mi->bmi[3].as_mv[0].as_int; 1044 mbmi->mv[0].as_int = mi->bmi[3].as_mv[0].as_int;
1044 mbmi->mv[1].as_int = mi->bmi[3].as_mv[1].as_int; 1045 mbmi->mv[1].as_int = mi->bmi[3].as_mv[1].as_int;
1045 } 1046 }
1046 1047
1047 x->skip = ctx->skip; 1048 x->skip = ctx->skip;
1048 memcpy(x->zcoeff_blk[mbmi->tx_size], ctx->zcoeff_blk, 1049 memcpy(x->zcoeff_blk[mbmi->tx_size], ctx->zcoeff_blk,
1049 sizeof(uint8_t) * ctx->num_4x4_blk); 1050 sizeof(ctx->zcoeff_blk[0]) * ctx->num_4x4_blk);
1050 1051
1051 if (!output_enabled) 1052 if (!output_enabled)
1052 return; 1053 return;
1053 1054
1054 #if CONFIG_INTERNAL_STATS 1055 #if CONFIG_INTERNAL_STATS
1055 if (frame_is_intra_only(cm)) { 1056 if (frame_is_intra_only(cm)) {
1056 static const int kf_mode_index[] = { 1057 static const int kf_mode_index[] = {
1057 THR_DC /*DC_PRED*/, 1058 THR_DC /*DC_PRED*/,
1058 THR_V_PRED /*V_PRED*/, 1059 THR_V_PRED /*V_PRED*/,
1059 THR_H_PRED /*H_PRED*/, 1060 THR_H_PRED /*H_PRED*/,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 1125
1125 if (xd->up_available) 1126 if (xd->up_available)
1126 filter_ref = xd->mi[-xd->mi_stride]->mbmi.interp_filter; 1127 filter_ref = xd->mi[-xd->mi_stride]->mbmi.interp_filter;
1127 else if (xd->left_available) 1128 else if (xd->left_available)
1128 filter_ref = xd->mi[-1]->mbmi.interp_filter; 1129 filter_ref = xd->mi[-1]->mbmi.interp_filter;
1129 else 1130 else
1130 filter_ref = EIGHTTAP; 1131 filter_ref = EIGHTTAP;
1131 1132
1132 mbmi->sb_type = bsize; 1133 mbmi->sb_type = bsize;
1133 mbmi->mode = ZEROMV; 1134 mbmi->mode = ZEROMV;
1134 mbmi->tx_size = MIN(max_txsize_lookup[bsize], 1135 mbmi->tx_size =
1135 tx_mode_to_biggest_tx_size[tx_mode]); 1136 VPXMIN(max_txsize_lookup[bsize], tx_mode_to_biggest_tx_size[tx_mode]);
1136 mbmi->skip = 1; 1137 mbmi->skip = 1;
1137 mbmi->uv_mode = DC_PRED; 1138 mbmi->uv_mode = DC_PRED;
1138 mbmi->ref_frame[0] = LAST_FRAME; 1139 mbmi->ref_frame[0] = LAST_FRAME;
1139 mbmi->ref_frame[1] = NONE; 1140 mbmi->ref_frame[1] = NONE;
1140 mbmi->mv[0].as_int = 0; 1141 mbmi->mv[0].as_int = 0;
1141 mbmi->interp_filter = filter_ref; 1142 mbmi->interp_filter = filter_ref;
1142 1143
1143 xd->mi[0]->bmi[0].as_mv[0].as_int = 0; 1144 xd->mi[0]->bmi[0].as_mv[0].as_int = 0;
1144 x->skip = 1; 1145 x->skip = 1;
1145 1146
1146 vp9_rd_cost_init(rd_cost); 1147 vp9_rd_cost_init(rd_cost);
1147 } 1148 }
1148 1149
1149 static int set_segment_rdmult(VP9_COMP *const cpi, 1150 static int set_segment_rdmult(VP9_COMP *const cpi,
1150 MACROBLOCK *const x, 1151 MACROBLOCK *const x,
1151 int8_t segment_id) { 1152 int8_t segment_id) {
1152 int segment_qindex; 1153 int segment_qindex;
1153 VP9_COMMON *const cm = &cpi->common; 1154 VP9_COMMON *const cm = &cpi->common;
1154 vp9_init_plane_quantizers(cpi, x); 1155 vp9_init_plane_quantizers(cpi, x);
1155 vp9_clear_system_state(); 1156 vpx_clear_system_state();
1156 segment_qindex = vp9_get_qindex(&cm->seg, segment_id, 1157 segment_qindex = vp9_get_qindex(&cm->seg, segment_id,
1157 cm->base_qindex); 1158 cm->base_qindex);
1158 return vp9_compute_rd_mult(cpi, segment_qindex + cm->y_dc_delta_q); 1159 return vp9_compute_rd_mult(cpi, segment_qindex + cm->y_dc_delta_q);
1159 } 1160 }
1160 1161
1161 static void rd_pick_sb_modes(VP9_COMP *cpi, 1162 static void rd_pick_sb_modes(VP9_COMP *cpi,
1162 TileDataEnc *tile_data, 1163 TileDataEnc *tile_data,
1163 MACROBLOCK *const x, 1164 MACROBLOCK *const x,
1164 int mi_row, int mi_col, RD_COST *rd_cost, 1165 int mi_row, int mi_col, RD_COST *rd_cost,
1165 BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx, 1166 BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx,
1166 int64_t best_rd) { 1167 int64_t best_rd) {
1167 VP9_COMMON *const cm = &cpi->common; 1168 VP9_COMMON *const cm = &cpi->common;
1168 TileInfo *const tile_info = &tile_data->tile_info; 1169 TileInfo *const tile_info = &tile_data->tile_info;
1169 MACROBLOCKD *const xd = &x->e_mbd; 1170 MACROBLOCKD *const xd = &x->e_mbd;
1170 MB_MODE_INFO *mbmi; 1171 MB_MODE_INFO *mbmi;
1171 struct macroblock_plane *const p = x->plane; 1172 struct macroblock_plane *const p = x->plane;
1172 struct macroblockd_plane *const pd = xd->plane; 1173 struct macroblockd_plane *const pd = xd->plane;
1173 const AQ_MODE aq_mode = cpi->oxcf.aq_mode; 1174 const AQ_MODE aq_mode = cpi->oxcf.aq_mode;
1174 int i, orig_rdmult; 1175 int i, orig_rdmult;
1175 1176
1176 vp9_clear_system_state(); 1177 vpx_clear_system_state();
1177 1178
1178 // Use the lower precision, but faster, 32x32 fdct for mode selection. 1179 // Use the lower precision, but faster, 32x32 fdct for mode selection.
1179 x->use_lp32x32fdct = 1; 1180 x->use_lp32x32fdct = 1;
1180 1181
1181 set_offsets(cpi, tile_info, x, mi_row, mi_col, bsize); 1182 set_offsets(cpi, tile_info, x, mi_row, mi_col, bsize);
1182 mbmi = &xd->mi[0]->mbmi; 1183 mbmi = &xd->mi[0]->mbmi;
1183 mbmi->sb_type = bsize; 1184 mbmi->sb_type = bsize;
1184 1185
1185 for (i = 0; i < MAX_MB_PLANE; ++i) { 1186 for (i = 0; i < MAX_MB_PLANE; ++i) {
1186 p[i].coeff = ctx->coeff_pbuf[i][0]; 1187 p[i].coeff = ctx->coeff_pbuf[i][0];
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
1488 update_partition_context(xd, mi_row, mi_col, subsize, bsize); 1489 update_partition_context(xd, mi_row, mi_col, subsize, bsize);
1489 } 1490 }
1490 1491
1491 // Check to see if the given partition size is allowed for a specified number 1492 // Check to see if the given partition size is allowed for a specified number
1492 // of 8x8 block rows and columns remaining in the image. 1493 // of 8x8 block rows and columns remaining in the image.
1493 // If not then return the largest allowed partition size 1494 // If not then return the largest allowed partition size
1494 static BLOCK_SIZE find_partition_size(BLOCK_SIZE bsize, 1495 static BLOCK_SIZE find_partition_size(BLOCK_SIZE bsize,
1495 int rows_left, int cols_left, 1496 int rows_left, int cols_left,
1496 int *bh, int *bw) { 1497 int *bh, int *bw) {
1497 if (rows_left <= 0 || cols_left <= 0) { 1498 if (rows_left <= 0 || cols_left <= 0) {
1498 return MIN(bsize, BLOCK_8X8); 1499 return VPXMIN(bsize, BLOCK_8X8);
1499 } else { 1500 } else {
1500 for (; bsize > 0; bsize -= 3) { 1501 for (; bsize > 0; bsize -= 3) {
1501 *bh = num_8x8_blocks_high_lookup[bsize]; 1502 *bh = num_8x8_blocks_high_lookup[bsize];
1502 *bw = num_8x8_blocks_wide_lookup[bsize]; 1503 *bw = num_8x8_blocks_wide_lookup[bsize];
1503 if ((*bh <= rows_left) && (*bw <= cols_left)) { 1504 if ((*bh <= rows_left) && (*bw <= cols_left)) {
1504 break; 1505 break;
1505 } 1506 }
1506 } 1507 }
1507 } 1508 }
1508 return bsize; 1509 return bsize;
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1664 PICK_MODE_CONTEXT *ctx, 1665 PICK_MODE_CONTEXT *ctx,
1665 int mi_row, int mi_col, int bsize) { 1666 int mi_row, int mi_col, int bsize) {
1666 VP9_COMMON *const cm = &cpi->common; 1667 VP9_COMMON *const cm = &cpi->common;
1667 MACROBLOCK *const x = &td->mb; 1668 MACROBLOCK *const x = &td->mb;
1668 MACROBLOCKD *const xd = &x->e_mbd; 1669 MACROBLOCKD *const xd = &x->e_mbd;
1669 MODE_INFO *const mi = xd->mi[0]; 1670 MODE_INFO *const mi = xd->mi[0];
1670 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; 1671 MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
1671 const struct segmentation *const seg = &cm->seg; 1672 const struct segmentation *const seg = &cm->seg;
1672 const int bw = num_8x8_blocks_wide_lookup[mi->mbmi.sb_type]; 1673 const int bw = num_8x8_blocks_wide_lookup[mi->mbmi.sb_type];
1673 const int bh = num_8x8_blocks_high_lookup[mi->mbmi.sb_type]; 1674 const int bh = num_8x8_blocks_high_lookup[mi->mbmi.sb_type];
1674 const int x_mis = MIN(bw, cm->mi_cols - mi_col); 1675 const int x_mis = VPXMIN(bw, cm->mi_cols - mi_col);
1675 const int y_mis = MIN(bh, cm->mi_rows - mi_row); 1676 const int y_mis = VPXMIN(bh, cm->mi_rows - mi_row);
1676 1677
1677 *(xd->mi[0]) = ctx->mic; 1678 *(xd->mi[0]) = ctx->mic;
1678 *(x->mbmi_ext) = ctx->mbmi_ext; 1679 *(x->mbmi_ext) = ctx->mbmi_ext;
1679 1680
1680 if (seg->enabled && cpi->oxcf.aq_mode) { 1681 if (seg->enabled && cpi->oxcf.aq_mode) {
1681 // For in frame complexity AQ or variance AQ, copy segment_id from 1682 // For in frame complexity AQ or variance AQ, copy segment_id from
1682 // segmentation_map. 1683 // segmentation_map.
1683 if (cpi->oxcf.aq_mode == COMPLEXITY_AQ || 1684 if (cpi->oxcf.aq_mode == COMPLEXITY_AQ ||
1684 cpi->oxcf.aq_mode == VARIANCE_AQ ) { 1685 cpi->oxcf.aq_mode == VARIANCE_AQ ) {
1685 const uint8_t *const map = seg->update_map ? cpi->segmentation_map 1686 const uint8_t *const map = seg->update_map ? cpi->segmentation_map
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1733 int output_enabled, BLOCK_SIZE bsize, 1734 int output_enabled, BLOCK_SIZE bsize,
1734 PICK_MODE_CONTEXT *ctx) { 1735 PICK_MODE_CONTEXT *ctx) {
1735 MACROBLOCK *const x = &td->mb; 1736 MACROBLOCK *const x = &td->mb;
1736 set_offsets(cpi, tile, x, mi_row, mi_col, bsize); 1737 set_offsets(cpi, tile, x, mi_row, mi_col, bsize);
1737 update_state_rt(cpi, td, ctx, mi_row, mi_col, bsize); 1738 update_state_rt(cpi, td, ctx, mi_row, mi_col, bsize);
1738 1739
1739 #if CONFIG_VP9_TEMPORAL_DENOISING 1740 #if CONFIG_VP9_TEMPORAL_DENOISING
1740 if (cpi->oxcf.noise_sensitivity > 0 && output_enabled && 1741 if (cpi->oxcf.noise_sensitivity > 0 && output_enabled &&
1741 cpi->common.frame_type != KEY_FRAME) { 1742 cpi->common.frame_type != KEY_FRAME) {
1742 vp9_denoiser_denoise(&cpi->denoiser, x, mi_row, mi_col, 1743 vp9_denoiser_denoise(&cpi->denoiser, x, mi_row, mi_col,
1743 MAX(BLOCK_8X8, bsize), ctx); 1744 VPXMAX(BLOCK_8X8, bsize), ctx);
1744 } 1745 }
1745 #endif 1746 #endif
1746 1747
1747 encode_superblock(cpi, td, tp, output_enabled, mi_row, mi_col, bsize, ctx); 1748 encode_superblock(cpi, td, tp, output_enabled, mi_row, mi_col, bsize, ctx);
1748 update_stats(&cpi->common, td); 1749 update_stats(&cpi->common, td);
1749 1750
1750 (*tp)->token = EOSB_TOKEN; 1751 (*tp)->token = EOSB_TOKEN;
1751 (*tp)++; 1752 (*tp)++;
1752 } 1753 }
1753 1754
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
2125 int sb_height_in_blocks = MI_BLOCK_SIZE; 2126 int sb_height_in_blocks = MI_BLOCK_SIZE;
2126 int i, j; 2127 int i, j;
2127 int index = 0; 2128 int index = 0;
2128 2129
2129 // Check the sb_type for each block that belongs to this region. 2130 // Check the sb_type for each block that belongs to this region.
2130 for (i = 0; i < sb_height_in_blocks; ++i) { 2131 for (i = 0; i < sb_height_in_blocks; ++i) {
2131 for (j = 0; j < sb_width_in_blocks; ++j) { 2132 for (j = 0; j < sb_width_in_blocks; ++j) {
2132 MODE_INFO *mi = mi_8x8[index+j]; 2133 MODE_INFO *mi = mi_8x8[index+j];
2133 BLOCK_SIZE sb_type = mi ? mi->mbmi.sb_type : 0; 2134 BLOCK_SIZE sb_type = mi ? mi->mbmi.sb_type : 0;
2134 bs_hist[sb_type]++; 2135 bs_hist[sb_type]++;
2135 *min_block_size = MIN(*min_block_size, sb_type); 2136 *min_block_size = VPXMIN(*min_block_size, sb_type);
2136 *max_block_size = MAX(*max_block_size, sb_type); 2137 *max_block_size = VPXMAX(*max_block_size, sb_type);
2137 } 2138 }
2138 index += xd->mi_stride; 2139 index += xd->mi_stride;
2139 } 2140 }
2140 } 2141 }
2141 2142
2142 // Next square block size less or equal than current block size. 2143 // Next square block size less or equal than current block size.
2143 static const BLOCK_SIZE next_square_size[BLOCK_SIZES] = { 2144 static const BLOCK_SIZE next_square_size[BLOCK_SIZES] = {
2144 BLOCK_4X4, BLOCK_4X4, BLOCK_4X4, 2145 BLOCK_4X4, BLOCK_4X4, BLOCK_4X4,
2145 BLOCK_8X8, BLOCK_8X8, BLOCK_8X8, 2146 BLOCK_8X8, BLOCK_8X8, BLOCK_8X8,
2146 BLOCK_16X16, BLOCK_16X16, BLOCK_16X16, 2147 BLOCK_16X16, BLOCK_16X16, BLOCK_16X16,
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
2203 // Check border cases where max and min from neighbors may not be legal. 2204 // Check border cases where max and min from neighbors may not be legal.
2204 max_size = find_partition_size(max_size, 2205 max_size = find_partition_size(max_size,
2205 row8x8_remaining, col8x8_remaining, 2206 row8x8_remaining, col8x8_remaining,
2206 &bh, &bw); 2207 &bh, &bw);
2207 // Test for blocks at the edge of the active image. 2208 // Test for blocks at the edge of the active image.
2208 // This may be the actual edge of the image or where there are formatting 2209 // This may be the actual edge of the image or where there are formatting
2209 // bars. 2210 // bars.
2210 if (vp9_active_edge_sb(cpi, mi_row, mi_col)) { 2211 if (vp9_active_edge_sb(cpi, mi_row, mi_col)) {
2211 min_size = BLOCK_4X4; 2212 min_size = BLOCK_4X4;
2212 } else { 2213 } else {
2213 min_size = MIN(cpi->sf.rd_auto_partition_min_limit, 2214 min_size =
2214 MIN(min_size, max_size)); 2215 VPXMIN(cpi->sf.rd_auto_partition_min_limit, VPXMIN(min_size, max_size));
2215 } 2216 }
2216 2217
2217 // When use_square_partition_only is true, make sure at least one square 2218 // When use_square_partition_only is true, make sure at least one square
2218 // partition is allowed by selecting the next smaller square size as 2219 // partition is allowed by selecting the next smaller square size as
2219 // *min_block_size. 2220 // *min_block_size.
2220 if (cpi->sf.use_square_partition_only && 2221 if (cpi->sf.use_square_partition_only &&
2221 next_square_size[max_size] < min_size) { 2222 next_square_size[max_size] < min_size) {
2222 min_size = next_square_size[max_size]; 2223 min_size = next_square_size[max_size];
2223 } 2224 }
2224 2225
(...skipping 15 matching lines...) Expand all
2240 BLOCK_SIZE bs, min_size, max_size; 2241 BLOCK_SIZE bs, min_size, max_size;
2241 2242
2242 min_size = BLOCK_64X64; 2243 min_size = BLOCK_64X64;
2243 max_size = BLOCK_4X4; 2244 max_size = BLOCK_4X4;
2244 2245
2245 if (prev_mi) { 2246 if (prev_mi) {
2246 for (idy = 0; idy < mi_height; ++idy) { 2247 for (idy = 0; idy < mi_height; ++idy) {
2247 for (idx = 0; idx < mi_width; ++idx) { 2248 for (idx = 0; idx < mi_width; ++idx) {
2248 mi = prev_mi[idy * cm->mi_stride + idx]; 2249 mi = prev_mi[idy * cm->mi_stride + idx];
2249 bs = mi ? mi->mbmi.sb_type : bsize; 2250 bs = mi ? mi->mbmi.sb_type : bsize;
2250 min_size = MIN(min_size, bs); 2251 min_size = VPXMIN(min_size, bs);
2251 max_size = MAX(max_size, bs); 2252 max_size = VPXMAX(max_size, bs);
2252 } 2253 }
2253 } 2254 }
2254 } 2255 }
2255 2256
2256 if (xd->left_available) { 2257 if (xd->left_available) {
2257 for (idy = 0; idy < mi_height; ++idy) { 2258 for (idy = 0; idy < mi_height; ++idy) {
2258 mi = xd->mi[idy * cm->mi_stride - 1]; 2259 mi = xd->mi[idy * cm->mi_stride - 1];
2259 bs = mi ? mi->mbmi.sb_type : bsize; 2260 bs = mi ? mi->mbmi.sb_type : bsize;
2260 min_size = MIN(min_size, bs); 2261 min_size = VPXMIN(min_size, bs);
2261 max_size = MAX(max_size, bs); 2262 max_size = VPXMAX(max_size, bs);
2262 } 2263 }
2263 } 2264 }
2264 2265
2265 if (xd->up_available) { 2266 if (xd->up_available) {
2266 for (idx = 0; idx < mi_width; ++idx) { 2267 for (idx = 0; idx < mi_width; ++idx) {
2267 mi = xd->mi[idx - cm->mi_stride]; 2268 mi = xd->mi[idx - cm->mi_stride];
2268 bs = mi ? mi->mbmi.sb_type : bsize; 2269 bs = mi ? mi->mbmi.sb_type : bsize;
2269 min_size = MIN(min_size, bs); 2270 min_size = VPXMIN(min_size, bs);
2270 max_size = MAX(max_size, bs); 2271 max_size = VPXMAX(max_size, bs);
2271 } 2272 }
2272 } 2273 }
2273 2274
2274 if (min_size == max_size) { 2275 if (min_size == max_size) {
2275 min_size = min_partition_size[min_size]; 2276 min_size = min_partition_size[min_size];
2276 max_size = max_partition_size[max_size]; 2277 max_size = max_partition_size[max_size];
2277 } 2278 }
2278 2279
2279 *min_bs = min_size; 2280 *min_bs = min_size;
2280 *max_bs = max_size; 2281 *max_bs = max_size;
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
2425 2426
2426 #if CONFIG_FP_MB_STATS 2427 #if CONFIG_FP_MB_STATS
2427 // Decide whether we shall split directly and skip searching NONE by using 2428 // Decide whether we shall split directly and skip searching NONE by using
2428 // the first pass block statistics 2429 // the first pass block statistics
2429 if (cpi->use_fp_mb_stats && bsize >= BLOCK_32X32 && do_split && 2430 if (cpi->use_fp_mb_stats && bsize >= BLOCK_32X32 && do_split &&
2430 partition_none_allowed && src_diff_var > 4 && 2431 partition_none_allowed && src_diff_var > 4 &&
2431 cm->base_qindex < qindex_split_threshold_lookup[bsize]) { 2432 cm->base_qindex < qindex_split_threshold_lookup[bsize]) {
2432 int mb_row = mi_row >> 1; 2433 int mb_row = mi_row >> 1;
2433 int mb_col = mi_col >> 1; 2434 int mb_col = mi_col >> 1;
2434 int mb_row_end = 2435 int mb_row_end =
2435 MIN(mb_row + num_16x16_blocks_high_lookup[bsize], cm->mb_rows); 2436 VPXMIN(mb_row + num_16x16_blocks_high_lookup[bsize], cm->mb_rows);
2436 int mb_col_end = 2437 int mb_col_end =
2437 MIN(mb_col + num_16x16_blocks_wide_lookup[bsize], cm->mb_cols); 2438 VPXMIN(mb_col + num_16x16_blocks_wide_lookup[bsize], cm->mb_cols);
2438 int r, c; 2439 int r, c;
2439 2440
2440 // compute a complexity measure, basically measure inconsistency of motion 2441 // compute a complexity measure, basically measure inconsistency of motion
2441 // vectors obtained from the first pass in the current block 2442 // vectors obtained from the first pass in the current block
2442 for (r = mb_row; r < mb_row_end ; r++) { 2443 for (r = mb_row; r < mb_row_end ; r++) {
2443 for (c = mb_col; c < mb_col_end; c++) { 2444 for (c = mb_col; c < mb_col_end; c++) {
2444 const int mb_index = r * cm->mb_cols + c; 2445 const int mb_index = r * cm->mb_cols + c;
2445 2446
2446 MOTION_DIRECTION this_mv; 2447 MOTION_DIRECTION this_mv;
2447 MOTION_DIRECTION right_mv; 2448 MOTION_DIRECTION right_mv;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2516 // Check if every 16x16 first pass block statistics has zero 2517 // Check if every 16x16 first pass block statistics has zero
2517 // motion and the corresponding first pass residue is small enough. 2518 // motion and the corresponding first pass residue is small enough.
2518 // If that is the case, check the difference variance between the 2519 // If that is the case, check the difference variance between the
2519 // current frame and the last frame. If the variance is small enough, 2520 // current frame and the last frame. If the variance is small enough,
2520 // stop further splitting in RD optimization 2521 // stop further splitting in RD optimization
2521 if (cpi->use_fp_mb_stats && do_split != 0 && 2522 if (cpi->use_fp_mb_stats && do_split != 0 &&
2522 cm->base_qindex > qindex_skip_threshold_lookup[bsize]) { 2523 cm->base_qindex > qindex_skip_threshold_lookup[bsize]) {
2523 int mb_row = mi_row >> 1; 2524 int mb_row = mi_row >> 1;
2524 int mb_col = mi_col >> 1; 2525 int mb_col = mi_col >> 1;
2525 int mb_row_end = 2526 int mb_row_end =
2526 MIN(mb_row + num_16x16_blocks_high_lookup[bsize], cm->mb_rows); 2527 VPXMIN(mb_row + num_16x16_blocks_high_lookup[bsize], cm->mb_rows);
2527 int mb_col_end = 2528 int mb_col_end =
2528 MIN(mb_col + num_16x16_blocks_wide_lookup[bsize], cm->mb_cols); 2529 VPXMIN(mb_col + num_16x16_blocks_wide_lookup[bsize], cm->mb_cols);
2529 int r, c; 2530 int r, c;
2530 2531
2531 int skip = 1; 2532 int skip = 1;
2532 for (r = mb_row; r < mb_row_end; r++) { 2533 for (r = mb_row; r < mb_row_end; r++) {
2533 for (c = mb_col; c < mb_col_end; c++) { 2534 for (c = mb_col; c < mb_col_end; c++) {
2534 const int mb_index = r * cm->mb_cols + c; 2535 const int mb_index = r * cm->mb_cols + c;
2535 if (!(cpi->twopass.this_frame_mb_stats[mb_index] & 2536 if (!(cpi->twopass.this_frame_mb_stats[mb_index] &
2536 FPMB_MOTION_ZERO_MASK) || 2537 FPMB_MOTION_ZERO_MASK) ||
2537 !(cpi->twopass.this_frame_mb_stats[mb_index] & 2538 !(cpi->twopass.this_frame_mb_stats[mb_index] &
2538 FPMB_ERROR_SMALL_MASK)) { 2539 FPMB_ERROR_SMALL_MASK)) {
(...skipping 1099 matching lines...) Expand 10 before | Expand all | Expand 10 after
3638 static int set_var_thresh_from_histogram(VP9_COMP *cpi) { 3639 static int set_var_thresh_from_histogram(VP9_COMP *cpi) {
3639 const SPEED_FEATURES *const sf = &cpi->sf; 3640 const SPEED_FEATURES *const sf = &cpi->sf;
3640 const VP9_COMMON *const cm = &cpi->common; 3641 const VP9_COMMON *const cm = &cpi->common;
3641 3642
3642 const uint8_t *src = cpi->Source->y_buffer; 3643 const uint8_t *src = cpi->Source->y_buffer;
3643 const uint8_t *last_src = cpi->Last_Source->y_buffer; 3644 const uint8_t *last_src = cpi->Last_Source->y_buffer;
3644 const int src_stride = cpi->Source->y_stride; 3645 const int src_stride = cpi->Source->y_stride;
3645 const int last_stride = cpi->Last_Source->y_stride; 3646 const int last_stride = cpi->Last_Source->y_stride;
3646 3647
3647 // Pick cutoff threshold 3648 // Pick cutoff threshold
3648 const int cutoff = (MIN(cm->width, cm->height) >= 720) ? 3649 const int cutoff = (VPXMIN(cm->width, cm->height) >= 720) ?
3649 (cm->MBs * VAR_HIST_LARGE_CUT_OFF / 100) : 3650 (cm->MBs * VAR_HIST_LARGE_CUT_OFF / 100) :
3650 (cm->MBs * VAR_HIST_SMALL_CUT_OFF / 100); 3651 (cm->MBs * VAR_HIST_SMALL_CUT_OFF / 100);
3651 DECLARE_ALIGNED(16, int, hist[VAR_HIST_BINS]); 3652 DECLARE_ALIGNED(16, int, hist[VAR_HIST_BINS]);
3652 diff *var16 = cpi->source_diff_var; 3653 diff *var16 = cpi->source_diff_var;
3653 3654
3654 int sum = 0; 3655 int sum = 0;
3655 int i, j; 3656 int i, j;
3656 3657
3657 memset(hist, 0, VAR_HIST_BINS * sizeof(hist[0])); 3658 memset(hist, 0, VAR_HIST_BINS * sizeof(hist[0]));
3658 3659
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
3918 PICK_MODE_CONTEXT *ctx = &cpi->td.pc_root->none; 3919 PICK_MODE_CONTEXT *ctx = &cpi->td.pc_root->none;
3919 3920
3920 for (i = 0; i < MAX_MB_PLANE; ++i) { 3921 for (i = 0; i < MAX_MB_PLANE; ++i) {
3921 p[i].coeff = ctx->coeff_pbuf[i][0]; 3922 p[i].coeff = ctx->coeff_pbuf[i][0];
3922 p[i].qcoeff = ctx->qcoeff_pbuf[i][0]; 3923 p[i].qcoeff = ctx->qcoeff_pbuf[i][0];
3923 pd[i].dqcoeff = ctx->dqcoeff_pbuf[i][0]; 3924 pd[i].dqcoeff = ctx->dqcoeff_pbuf[i][0];
3924 p[i].eobs = ctx->eobs_pbuf[i][0]; 3925 p[i].eobs = ctx->eobs_pbuf[i][0];
3925 } 3926 }
3926 vp9_zero(x->zcoeff_blk); 3927 vp9_zero(x->zcoeff_blk);
3927 3928
3928 if (cm->frame_type != KEY_FRAME && cpi->rc.frames_since_golden == 0) 3929 if (cm->frame_type != KEY_FRAME &&
3930 cpi->rc.frames_since_golden == 0 &&
3931 !cpi->use_svc)
3929 cpi->ref_frame_flags &= (~VP9_GOLD_FLAG); 3932 cpi->ref_frame_flags &= (~VP9_GOLD_FLAG);
3930 3933
3931 if (sf->partition_search_type == SOURCE_VAR_BASED_PARTITION) 3934 if (sf->partition_search_type == SOURCE_VAR_BASED_PARTITION)
3932 source_var_based_partition_search_method(cpi); 3935 source_var_based_partition_search_method(cpi);
3933 } 3936 }
3934 3937
3935 { 3938 {
3936 struct vpx_usec_timer emr_timer; 3939 struct vpx_usec_timer emr_timer;
3937 vpx_usec_timer_start(&emr_timer); 3940 vpx_usec_timer_start(&emr_timer);
3938 3941
3939 #if CONFIG_FP_MB_STATS 3942 #if CONFIG_FP_MB_STATS
3940 if (cpi->use_fp_mb_stats) { 3943 if (cpi->use_fp_mb_stats) {
3941 input_fpmb_stats(&cpi->twopass.firstpass_mb_stats, cm, 3944 input_fpmb_stats(&cpi->twopass.firstpass_mb_stats, cm,
3942 &cpi->twopass.this_frame_mb_stats); 3945 &cpi->twopass.this_frame_mb_stats);
3943 } 3946 }
3944 #endif 3947 #endif
3945 3948
3946 // If allowed, encoding tiles in parallel with one thread handling one tile. 3949 // If allowed, encoding tiles in parallel with one thread handling one tile.
3947 if (MIN(cpi->oxcf.max_threads, 1 << cm->log2_tile_cols) > 1) 3950 if (VPXMIN(cpi->oxcf.max_threads, 1 << cm->log2_tile_cols) > 1)
3948 vp9_encode_tiles_mt(cpi); 3951 vp9_encode_tiles_mt(cpi);
3949 else 3952 else
3950 encode_tiles(cpi); 3953 encode_tiles(cpi);
3951 3954
3952 vpx_usec_timer_mark(&emr_timer); 3955 vpx_usec_timer_mark(&emr_timer);
3953 cpi->time_encode_sb_row += vpx_usec_timer_elapsed(&emr_timer); 3956 cpi->time_encode_sb_row += vpx_usec_timer_elapsed(&emr_timer);
3954 } 3957 }
3955 3958
3956 sf->skip_encode_frame = sf->skip_encode_sb ? 3959 sf->skip_encode_frame = sf->skip_encode_sb ?
3957 get_skip_encode_frame(cm, td) : 0; 3960 get_skip_encode_frame(cm, td) : 0;
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
4148 4151
4149 x->skip_optimize = ctx->is_coded; 4152 x->skip_optimize = ctx->is_coded;
4150 ctx->is_coded = 1; 4153 ctx->is_coded = 1;
4151 x->use_lp32x32fdct = cpi->sf.use_lp32x32fdct; 4154 x->use_lp32x32fdct = cpi->sf.use_lp32x32fdct;
4152 x->skip_encode = (!output_enabled && cpi->sf.skip_encode_frame && 4155 x->skip_encode = (!output_enabled && cpi->sf.skip_encode_frame &&
4153 x->q_index < QIDX_SKIP_THRESH); 4156 x->q_index < QIDX_SKIP_THRESH);
4154 4157
4155 if (x->skip_encode) 4158 if (x->skip_encode)
4156 return; 4159 return;
4157 4160
4158 set_ref_ptrs(cm, xd, mbmi->ref_frame[0], mbmi->ref_frame[1]);
4159
4160 if (!is_inter_block(mbmi)) { 4161 if (!is_inter_block(mbmi)) {
4161 int plane; 4162 int plane;
4162 mbmi->skip = 1; 4163 mbmi->skip = 1;
4163 for (plane = 0; plane < MAX_MB_PLANE; ++plane) 4164 for (plane = 0; plane < MAX_MB_PLANE; ++plane)
4164 vp9_encode_intra_block_plane(x, MAX(bsize, BLOCK_8X8), plane); 4165 vp9_encode_intra_block_plane(x, VPXMAX(bsize, BLOCK_8X8), plane);
4165 if (output_enabled) 4166 if (output_enabled)
4166 sum_intra_stats(td->counts, mi); 4167 sum_intra_stats(td->counts, mi);
4167 vp9_tokenize_sb(cpi, td, t, !output_enabled, MAX(bsize, BLOCK_8X8)); 4168 vp9_tokenize_sb(cpi, td, t, !output_enabled, VPXMAX(bsize, BLOCK_8X8));
4168 } else { 4169 } else {
4169 int ref; 4170 int ref;
4170 const int is_compound = has_second_ref(mbmi); 4171 const int is_compound = has_second_ref(mbmi);
4172 set_ref_ptrs(cm, xd, mbmi->ref_frame[0], mbmi->ref_frame[1]);
4171 for (ref = 0; ref < 1 + is_compound; ++ref) { 4173 for (ref = 0; ref < 1 + is_compound; ++ref) {
4172 YV12_BUFFER_CONFIG *cfg = get_ref_frame_buffer(cpi, 4174 YV12_BUFFER_CONFIG *cfg = get_ref_frame_buffer(cpi,
4173 mbmi->ref_frame[ref]); 4175 mbmi->ref_frame[ref]);
4174 assert(cfg != NULL); 4176 assert(cfg != NULL);
4175 vp9_setup_pre_planes(xd, ref, cfg, mi_row, mi_col, 4177 vp9_setup_pre_planes(xd, ref, cfg, mi_row, mi_col,
4176 &xd->block_refs[ref]->sf); 4178 &xd->block_refs[ref]->sf);
4177 } 4179 }
4178 if (!(cpi->sf.reuse_inter_pred_sby && ctx->pred_pixel_ready) || seg_skip) 4180 if (!(cpi->sf.reuse_inter_pred_sby && ctx->pred_pixel_ready) || seg_skip)
4179 vp9_build_inter_predictors_sby(xd, mi_row, mi_col, MAX(bsize, BLOCK_8X8)); 4181 vp9_build_inter_predictors_sby(xd, mi_row, mi_col,
4182 VPXMAX(bsize, BLOCK_8X8));
4180 4183
4181 vp9_build_inter_predictors_sbuv(xd, mi_row, mi_col, MAX(bsize, BLOCK_8X8)); 4184 vp9_build_inter_predictors_sbuv(xd, mi_row, mi_col,
4185 VPXMAX(bsize, BLOCK_8X8));
4182 4186
4183 vp9_encode_sb(x, MAX(bsize, BLOCK_8X8)); 4187 vp9_encode_sb(x, VPXMAX(bsize, BLOCK_8X8));
4184 vp9_tokenize_sb(cpi, td, t, !output_enabled, MAX(bsize, BLOCK_8X8)); 4188 vp9_tokenize_sb(cpi, td, t, !output_enabled, VPXMAX(bsize, BLOCK_8X8));
4185 } 4189 }
4186 4190
4187 if (output_enabled) { 4191 if (output_enabled) {
4188 if (cm->tx_mode == TX_MODE_SELECT && 4192 if (cm->tx_mode == TX_MODE_SELECT &&
4189 mbmi->sb_type >= BLOCK_8X8 && 4193 mbmi->sb_type >= BLOCK_8X8 &&
4190 !(is_inter_block(mbmi) && (mbmi->skip || seg_skip))) { 4194 !(is_inter_block(mbmi) && (mbmi->skip || seg_skip))) {
4191 ++get_tx_counts(max_txsize_lookup[bsize], get_tx_size_context(xd), 4195 ++get_tx_counts(max_txsize_lookup[bsize], get_tx_size_context(xd),
4192 &td->counts->tx)[mbmi->tx_size]; 4196 &td->counts->tx)[mbmi->tx_size];
4193 } else { 4197 } else {
4194 int x, y; 4198 int x, y;
4195 TX_SIZE tx_size; 4199 TX_SIZE tx_size;
4196 // The new intra coding scheme requires no change of transform size 4200 // The new intra coding scheme requires no change of transform size
4197 if (is_inter_block(&mi->mbmi)) { 4201 if (is_inter_block(&mi->mbmi)) {
4198 tx_size = MIN(tx_mode_to_biggest_tx_size[cm->tx_mode], 4202 tx_size = VPXMIN(tx_mode_to_biggest_tx_size[cm->tx_mode],
4199 max_txsize_lookup[bsize]); 4203 max_txsize_lookup[bsize]);
4200 } else { 4204 } else {
4201 tx_size = (bsize >= BLOCK_8X8) ? mbmi->tx_size : TX_4X4; 4205 tx_size = (bsize >= BLOCK_8X8) ? mbmi->tx_size : TX_4X4;
4202 } 4206 }
4203 4207
4204 for (y = 0; y < mi_height; y++) 4208 for (y = 0; y < mi_height; y++)
4205 for (x = 0; x < mi_width; x++) 4209 for (x = 0; x < mi_width; x++)
4206 if (mi_col + x < cm->mi_cols && mi_row + y < cm->mi_rows) 4210 if (mi_col + x < cm->mi_cols && mi_row + y < cm->mi_rows)
4207 mi_8x8[mis * y + x]->mbmi.tx_size = tx_size; 4211 mi_8x8[mis * y + x]->mbmi.tx_size = tx_size;
4208 } 4212 }
4209 ++td->counts->tx.tx_totals[mbmi->tx_size]; 4213 ++td->counts->tx.tx_totals[mbmi->tx_size];
4210 ++td->counts->tx.tx_totals[get_uv_tx_size(mbmi, &xd->plane[1])]; 4214 ++td->counts->tx.tx_totals[get_uv_tx_size(mbmi, &xd->plane[1])];
4211 } 4215 }
4212 } 4216 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_denoiser.c ('k') | source/libvpx/vp9/encoder/vp9_encodemb.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698