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
diff --git a/vp10/encoder/block.h b/vp10/encoder/block.h index 7921300..ce650b1 100644 --- a/vp10/encoder/block.h +++ b/vp10/encoder/block.h
@@ -143,6 +143,9 @@ 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 d3ea94b..8c7af63 100644 --- a/vp10/encoder/encodeframe.c +++ b/vp10/encoder/encodeframe.c
@@ -3987,6 +3987,9 @@ 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 96edc0f..193bc45 100644 --- a/vp10/encoder/rdopt.c +++ b/vp10/encoder/rdopt.c
@@ -7208,6 +7208,11 @@ 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 @@ #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 @@ 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