From 2118f66a9189cfcb400fc5e72b97af10d0580f16 Mon Sep 17 00:00:00 2001 From: hui su Date: Fri, 30 Jan 2015 11:28:12 -0800 Subject: [PATCH] Enable tx_skip for inter blocks Enable tx_skip for inter blocks whose q-index is smaller than 64. tx_skip experiment alone: derflr: +0.233% (was +0.038%) all experiments: derflr: +5.98% (was +5.94%) Change-Id: I35245a476ff7039fec8468a92a6aa63feaf74831 --- vp9/common/vp9_quant_common.h | 2 +- vp9/decoder/vp9_decodemv.c | 7 ++++++- vp9/encoder/vp9_bitstream.c | 9 ++++++++- vp9/encoder/vp9_encodeframe.c | 16 +++++++++++++++- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/vp9/common/vp9_quant_common.h b/vp9/common/vp9_quant_common.h index 2ca1d6fad..af3bdb82f 100644 --- a/vp9/common/vp9_quant_common.h +++ b/vp9/common/vp9_quant_common.h @@ -23,7 +23,7 @@ extern "C" { #define QINDEX_RANGE (MAXQ - MINQ + 1) #define QINDEX_BITS 8 #if CONFIG_TX_SKIP -#define TX_SKIP_Q_THRESH_INTER 0 +#define TX_SKIP_Q_THRESH_INTER 64 #define TX_SKIP_Q_THRESH_INTRA 255 #define TX_SKIP_SHIFT_THRESH 0 #endif // CONFIG_TX_SKIP diff --git a/vp9/decoder/vp9_decodemv.c b/vp9/decoder/vp9_decodemv.c index 459e7c63d..8e0657e39 100644 --- a/vp9/decoder/vp9_decodemv.c +++ b/vp9/decoder/vp9_decodemv.c @@ -1020,8 +1020,13 @@ static void read_inter_frame_mode_info(VP9_COMMON *const cm, int q_idx = vp9_get_qindex(&cm->seg, mbmi->segment_id, cm->base_qindex); int try_tx_skip = inter_block ? q_idx <= TX_SKIP_Q_THRESH_INTER : q_idx <= TX_SKIP_Q_THRESH_INTRA; +#if CONFIG_COPY_MODE + if (mbmi->copy_mode != NOREF) + try_tx_skip = 0; +#endif // CONFIG_COPY_MODE + #if CONFIG_SUPERTX - if (try_tx_skip) { + if (try_tx_skip && !supertx_enabled) { #else if (try_tx_skip && (!mbmi->skip || !inter_block)) { #endif // CONFIG_SUPERTX diff --git a/vp9/encoder/vp9_bitstream.c b/vp9/encoder/vp9_bitstream.c index 86045e5c5..3edda3fde 100644 --- a/vp9/encoder/vp9_bitstream.c +++ b/vp9/encoder/vp9_bitstream.c @@ -478,8 +478,15 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, const MODE_INFO *mi, int q_idx = vp9_get_qindex(seg, segment_id, cm->base_qindex); int try_tx_skip = is_inter ? q_idx <= TX_SKIP_Q_THRESH_INTER : q_idx <= TX_SKIP_Q_THRESH_INTRA; + +#if CONFIG_COPY_MODE + if (mbmi->copy_mode != NOREF) { + try_tx_skip = 0; + } +#endif // CONFIG_COPY_MODE + #if CONFIG_SUPERTX - if (try_tx_skip) { + if (try_tx_skip && !supertx_enabled) { #else if (try_tx_skip && (!skip || !is_inter)) { #endif // CONFIG_SUPERTX diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 4278336d3..c17ebbad8 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -1090,7 +1090,11 @@ static void update_supertx_param(VP9_COMP *cpi, PICK_MODE_CONTEXT *ctx, ctx->skip = x->skip; #if CONFIG_EXT_TX ctx->mic.mbmi.ext_txfrm = best_tx; -#endif +#endif // CONFIG_EXT_TX +#if CONFIG_TX_SKIP + ctx->mic.mbmi.tx_skip[0] = 0; + ctx->mic.mbmi.tx_skip[1] = 0; +#endif // CONFIG_EXT_TX } static void update_supertx_param_sb(VP9_COMP *cpi, int mi_row, int mi_col, @@ -4833,6 +4837,11 @@ static void encode_superblock(VP9_COMP *cpi, TOKENEXTRA **t, int output_enabled, int q_idx = vp9_get_qindex(&cm->seg, mbmi->segment_id, cm->base_qindex); int try_tx_skip = is_inter_block(mbmi) ? q_idx <= TX_SKIP_Q_THRESH_INTER : q_idx <= TX_SKIP_Q_THRESH_INTRA; +#if CONFIG_COPY_MODE + if (mbmi->copy_mode != NOREF) + try_tx_skip = 0; +#endif // CONFIG_COPY_MODE + #if CONFIG_SUPERTX if (try_tx_skip) { #else @@ -5303,6 +5312,11 @@ static void rd_supertx_sb(VP9_COMP *cpi, const TileInfo *const tile, *best_tx = NORM; #endif +#if CONFIG_TX_SKIP + xd->mi[0].mbmi.tx_skip[0] = 0; + xd->mi[0].mbmi.tx_skip[1] = 0; +#endif + // chroma skippable_uv = 1; rate_uv = 0;