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
This commit is contained in:
@@ -143,6 +143,9 @@ struct macroblock {
|
|||||||
uint8_t zcoeff_blk[TX_SIZES][256];
|
uint8_t zcoeff_blk[TX_SIZES][256];
|
||||||
#if CONFIG_VAR_TX
|
#if CONFIG_VAR_TX
|
||||||
uint8_t blk_skip[MAX_MB_PLANE][256];
|
uint8_t blk_skip[MAX_MB_PLANE][256];
|
||||||
|
#if CONFIG_REF_MV
|
||||||
|
uint8_t blk_skip_drl[MAX_MB_PLANE][256];
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int skip;
|
int skip;
|
||||||
|
@@ -3987,6 +3987,9 @@ static void encode_frame_internal(VP10_COMP *cpi) {
|
|||||||
vp10_zero(x->skip_txfm);
|
vp10_zero(x->skip_txfm);
|
||||||
#if CONFIG_VAR_TX
|
#if CONFIG_VAR_TX
|
||||||
vp10_zero(x->blk_skip);
|
vp10_zero(x->blk_skip);
|
||||||
|
#if CONFIG_REF_MV
|
||||||
|
vp10_zero(x->blk_skip_drl);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@@ -7208,6 +7208,11 @@ void vp10_rd_pick_inter_mode_sb(VP10_COMP *cpi,
|
|||||||
rate_y - rate_uv,
|
rate_y - rate_uv,
|
||||||
total_sse);
|
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) {
|
for (ref_idx = 0; ref_idx < ref_set; ++ref_idx) {
|
||||||
int64_t tmp_alt_rd = INT64_MAX;
|
int64_t tmp_alt_rd = INT64_MAX;
|
||||||
@@ -7235,8 +7240,6 @@ void vp10_rd_pick_inter_mode_sb(VP10_COMP *cpi,
|
|||||||
#else
|
#else
|
||||||
int_mv dummy_single_newmv[MAX_REF_FRAMES] = { { 0 } };
|
int_mv dummy_single_newmv[MAX_REF_FRAMES] = { { 0 } };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
mbmi->ref_mv_idx = 1 + ref_idx;
|
mbmi->ref_mv_idx = 1 + ref_idx;
|
||||||
|
|
||||||
frame_mv[NEARMV][ref_frame] = cur_mv;
|
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;
|
this_rd = tmp_alt_rd;
|
||||||
tmp_ref_rd = tmp_alt_rd;
|
tmp_ref_rd = tmp_alt_rd;
|
||||||
backup_mbmi = *mbmi;
|
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 {
|
} else {
|
||||||
*mbmi = backup_mbmi;
|
*mbmi = backup_mbmi;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
frame_mv[NEARMV][ref_frame] = backup_mv;
|
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
|
#endif // CONFIG_REF_MV
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user