diff options
author | Yunqing Wang <yunqingwang@google.com> | 2015-03-09 08:35:57 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2015-03-09 08:35:57 -0700 |
commit | c4fb2d7cc768477b78044e7d431d290d22261101 (patch) | |
tree | 5f67d952a3d6431fd85da3c8d89e3d6b859ce5b3 /vp9/encoder | |
parent | b12f531cc52945aaa51d51bf98b9237caf8b8fe3 (diff) | |
parent | 268f260d64d0ce5516af14d7ab7370e70e07be8e (diff) | |
download | libvpx-c4fb2d7cc768477b78044e7d431d290d22261101.tar libvpx-c4fb2d7cc768477b78044e7d431d290d22261101.tar.gz libvpx-c4fb2d7cc768477b78044e7d431d290d22261101.tar.bz2 libvpx-c4fb2d7cc768477b78044e7d431d290d22261101.zip |
Merge "Modify the setting of transform skip flags in non-rd mode"
Diffstat (limited to 'vp9/encoder')
-rw-r--r-- | vp9/encoder/vp9_pickmode.c | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index 2f9cccb99..4a6074e51 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -224,15 +224,6 @@ static void model_rd_for_sb_y(VP9_COMP *cpi, BLOCK_SIZE bsize, *var_y = var; *sse_y = sse; - x->skip_txfm[0] = 0; - // Check if all ac coefficients can be quantized to zero. - if (var < ac_thr || var == 0) { - x->skip_txfm[0] = 2; - // Check if dc coefficient can be quantized to zero. - if (sse - var < dc_thr || sse == var) - x->skip_txfm[0] = 1; - } - if (cpi->common.tx_mode == TX_MODE_SELECT) { if (sse > (var << 2)) xd->mi[0].src_mi->mbmi.tx_size = @@ -254,6 +245,32 @@ static void model_rd_for_sb_y(VP9_COMP *cpi, BLOCK_SIZE bsize, tx_mode_to_biggest_tx_size[cpi->common.tx_mode]); } + // Evaluate if the partition block is a skippable block in Y plane. + { + const BLOCK_SIZE unit_size = + txsize_to_bsize[xd->mi[0].src_mi->mbmi.tx_size]; + const unsigned int num_blk_log2 = + (b_width_log2_lookup[bsize] - b_width_log2_lookup[unit_size]) + + (b_height_log2_lookup[bsize] - b_height_log2_lookup[unit_size]); + const unsigned int sse_tx = sse >> num_blk_log2; + const unsigned int var_tx = var >> num_blk_log2; + + x->skip_txfm[0] = 0; + // Check if all ac coefficients can be quantized to zero. + if (var_tx < ac_thr || var == 0) { + x->skip_txfm[0] = 2; + // Check if dc coefficient can be quantized to zero. + if (sse_tx - var_tx < dc_thr || sse == var) + x->skip_txfm[0] = 1; + } + } + + if (x->skip_txfm[0] == 1) { + *out_rate_sum = 0; + *out_dist_sum = sse << 4; + return; + } + #if CONFIG_VP9_HIGHBITDEPTH if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) { vp9_model_rd_from_var_lapndz(sse - var, num_pels_log2_lookup[bsize], @@ -285,9 +302,6 @@ static void model_rd_for_sb_y(VP9_COMP *cpi, BLOCK_SIZE bsize, *out_rate_sum += rate; *out_dist_sum += dist << 4; - - if (*out_rate_sum == 0) - x->skip_txfm[0] = 1; } static void model_rd_for_sb_uv(VP9_COMP *cpi, BLOCK_SIZE bsize, |