From 7174d637e80eb5a167751b7d660e7beff38d30a8 Mon Sep 17 00:00:00 2001 From: Jingning Han Date: Thu, 3 Mar 2016 09:20:10 -0800 Subject: [PATCH] Properly restore transform block skip flag in RD search This commit fixes an encoding issue related to var-tx and ref-mv experiments that causes the codec to use random values for transform block skip flag. Change-Id: I8daa6d6b88ea45b5bbeb81b43dd0eeff545c8e5a --- vp10/encoder/block.h | 3 +++ vp10/encoder/encodeframe.c | 3 +++ vp10/encoder/rdopt.c | 17 +++++++++++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/vp10/encoder/block.h b/vp10/encoder/block.h index 792130073..ce650b199 100644 --- a/vp10/encoder/block.h +++ b/vp10/encoder/block.h @@ -143,6 +143,9 @@ struct macroblock { uint8_t zcoeff_blk[TX_SIZES][256]; #if CONFIG_VAR_TX uint8_t blk_skip[MAX_MB_PLANE][256]; +#if CONFIG_REF_MV + uint8_t blk_skip_drl[MAX_MB_PLANE][256]; +#endif #endif int skip; diff --git a/vp10/encoder/encodeframe.c b/vp10/encoder/encodeframe.c index d3ea94bff..8c7af63f0 100644 --- a/vp10/encoder/encodeframe.c +++ b/vp10/encoder/encodeframe.c @@ -3987,6 +3987,9 @@ static void encode_frame_internal(VP10_COMP *cpi) { vp10_zero(x->skip_txfm); #if CONFIG_VAR_TX vp10_zero(x->blk_skip); +#if CONFIG_REF_MV + vp10_zero(x->blk_skip_drl); +#endif #endif { diff --git a/vp10/encoder/rdopt.c b/vp10/encoder/rdopt.c index 96edc0ff7..193bc45c3 100644 --- a/vp10/encoder/rdopt.c +++ b/vp10/encoder/rdopt.c @@ -7208,6 +7208,11 @@ void vp10_rd_pick_inter_mode_sb(VP10_COMP *cpi, rate_y - rate_uv, total_sse); } +#if CONFIG_VAR_TX + for (i = 0; i < MAX_MB_PLANE; ++i) + memcpy(x->blk_skip_drl[i], x->blk_skip[i], + sizeof(uint8_t) * ctx->num_4x4_blk); +#endif for (ref_idx = 0; ref_idx < ref_set; ++ref_idx) { int64_t tmp_alt_rd = INT64_MAX; @@ -7235,8 +7240,6 @@ void vp10_rd_pick_inter_mode_sb(VP10_COMP *cpi, #else int_mv dummy_single_newmv[MAX_REF_FRAMES] = { { 0 } }; #endif - - mbmi->ref_mv_idx = 1 + ref_idx; frame_mv[NEARMV][ref_frame] = cur_mv; @@ -7299,12 +7302,22 @@ void vp10_rd_pick_inter_mode_sb(VP10_COMP *cpi, this_rd = tmp_alt_rd; tmp_ref_rd = tmp_alt_rd; backup_mbmi = *mbmi; +#if CONFIG_VAR_TX + for (i = 0; i < MAX_MB_PLANE; ++i) + memcpy(x->blk_skip_drl[i], x->blk_skip[i], + sizeof(uint8_t) * ctx->num_4x4_blk); +#endif } else { *mbmi = backup_mbmi; } } frame_mv[NEARMV][ref_frame] = backup_mv; +#if CONFIG_VAR_TX + for (i = 0; i < MAX_MB_PLANE; ++i) + memcpy(x->blk_skip[i], x->blk_skip_drl[i], + sizeof(uint8_t) * ctx->num_4x4_blk); +#endif } #endif // CONFIG_REF_MV -- 2.40.0