Removing max_uv_txsize_lookup lookup table.
Adding get_uv_tx_size_impl() with tx size selection logic, rewriting get_uv_tx_size(). Change-Id: I3ecb108059a41be227a8c89a0710bd174f508951
This commit is contained in:
parent
a19d694f09
commit
2c3120274a
@ -301,9 +301,18 @@ static void setup_block_dptrs(MACROBLOCKD *xd, int ss_x, int ss_y) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static TX_SIZE get_uv_tx_size_impl(TX_SIZE y_tx_size, BLOCK_SIZE bsize) {
|
||||||
|
if (bsize < BLOCK_8X8) {
|
||||||
|
return TX_4X4;
|
||||||
|
} else {
|
||||||
|
// TODO(dkovalev): Assuming YUV420 (ss_x == 1, ss_y == 1)
|
||||||
|
const BLOCK_SIZE plane_bsize = ss_size_lookup[bsize][1][1];
|
||||||
|
return MIN(y_tx_size, max_txsize_lookup[plane_bsize]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static INLINE TX_SIZE get_uv_tx_size(const MB_MODE_INFO *mbmi) {
|
static TX_SIZE get_uv_tx_size(const MB_MODE_INFO *mbmi) {
|
||||||
return MIN(mbmi->tx_size, max_uv_txsize_lookup[mbmi->sb_type]);
|
return get_uv_tx_size_impl(mbmi->tx_size, mbmi->sb_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BLOCK_SIZE get_plane_block_size(BLOCK_SIZE bsize,
|
static BLOCK_SIZE get_plane_block_size(BLOCK_SIZE bsize,
|
||||||
|
@ -108,12 +108,6 @@ const TX_SIZE max_txsize_lookup[BLOCK_SIZES] = {
|
|||||||
TX_16X16, TX_16X16, TX_16X16,
|
TX_16X16, TX_16X16, TX_16X16,
|
||||||
TX_32X32, TX_32X32, TX_32X32, TX_32X32
|
TX_32X32, TX_32X32, TX_32X32, TX_32X32
|
||||||
};
|
};
|
||||||
const TX_SIZE max_uv_txsize_lookup[BLOCK_SIZES] = {
|
|
||||||
TX_4X4, TX_4X4, TX_4X4,
|
|
||||||
TX_4X4, TX_4X4, TX_4X4,
|
|
||||||
TX_8X8, TX_8X8, TX_8X8,
|
|
||||||
TX_16X16, TX_16X16, TX_16X16, TX_32X32
|
|
||||||
};
|
|
||||||
|
|
||||||
const TX_SIZE tx_mode_to_biggest_tx_size[TX_MODES] = {
|
const TX_SIZE tx_mode_to_biggest_tx_size[TX_MODES] = {
|
||||||
TX_4X4, // ONLY_4X4
|
TX_4X4, // ONLY_4X4
|
||||||
|
@ -26,7 +26,6 @@ extern const int num_pels_log2_lookup[BLOCK_SIZES];
|
|||||||
extern const PARTITION_TYPE partition_lookup[][BLOCK_SIZES];
|
extern const PARTITION_TYPE partition_lookup[][BLOCK_SIZES];
|
||||||
extern const BLOCK_SIZE subsize_lookup[PARTITION_TYPES][BLOCK_SIZES];
|
extern const BLOCK_SIZE subsize_lookup[PARTITION_TYPES][BLOCK_SIZES];
|
||||||
extern const TX_SIZE max_txsize_lookup[BLOCK_SIZES];
|
extern const TX_SIZE max_txsize_lookup[BLOCK_SIZES];
|
||||||
extern const TX_SIZE max_uv_txsize_lookup[BLOCK_SIZES];
|
|
||||||
extern const TX_SIZE tx_mode_to_biggest_tx_size[TX_MODES];
|
extern const TX_SIZE tx_mode_to_biggest_tx_size[TX_MODES];
|
||||||
extern const BLOCK_SIZE ss_size_lookup[BLOCK_SIZES][2][2];
|
extern const BLOCK_SIZE ss_size_lookup[BLOCK_SIZES][2][2];
|
||||||
|
|
||||||
|
@ -1292,7 +1292,7 @@ static int64_t rd_pick_intra_sbuv_mode(VP9_COMP *cpi, MACROBLOCK *x,
|
|||||||
PICK_MODE_CONTEXT *ctx,
|
PICK_MODE_CONTEXT *ctx,
|
||||||
int *rate, int *rate_tokenonly,
|
int *rate, int *rate_tokenonly,
|
||||||
int64_t *distortion, int *skippable,
|
int64_t *distortion, int *skippable,
|
||||||
BLOCK_SIZE bsize) {
|
BLOCK_SIZE bsize, TX_SIZE max_tx_size) {
|
||||||
MB_PREDICTION_MODE mode;
|
MB_PREDICTION_MODE mode;
|
||||||
MB_PREDICTION_MODE mode_selected = DC_PRED;
|
MB_PREDICTION_MODE mode_selected = DC_PRED;
|
||||||
int64_t best_rd = INT64_MAX, this_rd;
|
int64_t best_rd = INT64_MAX, this_rd;
|
||||||
@ -1300,8 +1300,7 @@ static int64_t rd_pick_intra_sbuv_mode(VP9_COMP *cpi, MACROBLOCK *x,
|
|||||||
int64_t this_distortion, this_sse;
|
int64_t this_distortion, this_sse;
|
||||||
|
|
||||||
for (mode = DC_PRED; mode <= TM_PRED; ++mode) {
|
for (mode = DC_PRED; mode <= TM_PRED; ++mode) {
|
||||||
if (!(cpi->sf.intra_uv_mode_mask[max_uv_txsize_lookup[bsize]]
|
if (!(cpi->sf.intra_uv_mode_mask[max_tx_size] & (1 << mode)))
|
||||||
& (1 << mode)))
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
x->e_mbd.mi_8x8[0]->mbmi.uv_mode = mode;
|
x->e_mbd.mi_8x8[0]->mbmi.uv_mode = mode;
|
||||||
@ -1367,8 +1366,8 @@ static int64_t rd_sbuv_dcpred(VP9_COMP *cpi, MACROBLOCK *x,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void choose_intra_uv_mode(VP9_COMP *cpi, PICK_MODE_CONTEXT *ctx,
|
static void choose_intra_uv_mode(VP9_COMP *cpi, PICK_MODE_CONTEXT *ctx,
|
||||||
BLOCK_SIZE bsize, int *rate_uv,
|
BLOCK_SIZE bsize, TX_SIZE max_tx_size,
|
||||||
int *rate_uv_tokenonly,
|
int *rate_uv, int *rate_uv_tokenonly,
|
||||||
int64_t *dist_uv, int *skip_uv,
|
int64_t *dist_uv, int *skip_uv,
|
||||||
MB_PREDICTION_MODE *mode_uv) {
|
MB_PREDICTION_MODE *mode_uv) {
|
||||||
MACROBLOCK *const x = &cpi->mb;
|
MACROBLOCK *const x = &cpi->mb;
|
||||||
@ -1383,7 +1382,7 @@ static void choose_intra_uv_mode(VP9_COMP *cpi, PICK_MODE_CONTEXT *ctx,
|
|||||||
} else {
|
} else {
|
||||||
rd_pick_intra_sbuv_mode(cpi, x, ctx,
|
rd_pick_intra_sbuv_mode(cpi, x, ctx,
|
||||||
rate_uv, rate_uv_tokenonly, dist_uv, skip_uv,
|
rate_uv, rate_uv_tokenonly, dist_uv, skip_uv,
|
||||||
bsize < BLOCK_8X8 ? BLOCK_8X8 : bsize);
|
bsize < BLOCK_8X8 ? BLOCK_8X8 : bsize, max_tx_size);
|
||||||
}
|
}
|
||||||
*mode_uv = x->e_mbd.mi_8x8[0]->mbmi.uv_mode;
|
*mode_uv = x->e_mbd.mi_8x8[0]->mbmi.uv_mode;
|
||||||
}
|
}
|
||||||
@ -3028,9 +3027,11 @@ void vp9_rd_pick_intra_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
|
|||||||
int rate_y = 0, rate_uv = 0, rate_y_tokenonly = 0, rate_uv_tokenonly = 0;
|
int rate_y = 0, rate_uv = 0, rate_y_tokenonly = 0, rate_uv_tokenonly = 0;
|
||||||
int y_skip = 0, uv_skip = 0;
|
int y_skip = 0, uv_skip = 0;
|
||||||
int64_t dist_y = 0, dist_uv = 0, tx_cache[TX_MODES] = { 0 };
|
int64_t dist_y = 0, dist_uv = 0, tx_cache[TX_MODES] = { 0 };
|
||||||
|
TX_SIZE max_uv_tx_size;
|
||||||
x->skip_encode = 0;
|
x->skip_encode = 0;
|
||||||
ctx->skip = 0;
|
ctx->skip = 0;
|
||||||
xd->mi_8x8[0]->mbmi.ref_frame[0] = INTRA_FRAME;
|
xd->mi_8x8[0]->mbmi.ref_frame[0] = INTRA_FRAME;
|
||||||
|
|
||||||
if (bsize >= BLOCK_8X8) {
|
if (bsize >= BLOCK_8X8) {
|
||||||
if (rd_pick_intra_sby_mode(cpi, x, &rate_y, &rate_y_tokenonly,
|
if (rd_pick_intra_sby_mode(cpi, x, &rate_y, &rate_y_tokenonly,
|
||||||
&dist_y, &y_skip, bsize, tx_cache,
|
&dist_y, &y_skip, bsize, tx_cache,
|
||||||
@ -3038,8 +3039,9 @@ void vp9_rd_pick_intra_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
|
|||||||
*returnrate = INT_MAX;
|
*returnrate = INT_MAX;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
max_uv_tx_size = get_uv_tx_size_impl(xd->mi_8x8[0]->mbmi.tx_size, bsize);
|
||||||
rd_pick_intra_sbuv_mode(cpi, x, ctx, &rate_uv, &rate_uv_tokenonly,
|
rd_pick_intra_sbuv_mode(cpi, x, ctx, &rate_uv, &rate_uv_tokenonly,
|
||||||
&dist_uv, &uv_skip, bsize);
|
&dist_uv, &uv_skip, bsize, max_uv_tx_size);
|
||||||
} else {
|
} else {
|
||||||
y_skip = 0;
|
y_skip = 0;
|
||||||
if (rd_pick_intra_sub_8x8_y_mode(cpi, x, &rate_y, &rate_y_tokenonly,
|
if (rd_pick_intra_sub_8x8_y_mode(cpi, x, &rate_y, &rate_y_tokenonly,
|
||||||
@ -3047,8 +3049,9 @@ void vp9_rd_pick_intra_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
|
|||||||
*returnrate = INT_MAX;
|
*returnrate = INT_MAX;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
max_uv_tx_size = get_uv_tx_size_impl(xd->mi_8x8[0]->mbmi.tx_size, bsize);
|
||||||
rd_pick_intra_sbuv_mode(cpi, x, ctx, &rate_uv, &rate_uv_tokenonly,
|
rd_pick_intra_sbuv_mode(cpi, x, ctx, &rate_uv, &rate_uv_tokenonly,
|
||||||
&dist_uv, &uv_skip, BLOCK_8X8);
|
&dist_uv, &uv_skip, BLOCK_8X8, max_uv_tx_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (y_skip && uv_skip) {
|
if (y_skip && uv_skip) {
|
||||||
@ -3411,12 +3414,11 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
|
|||||||
if (rate_y == INT_MAX)
|
if (rate_y == INT_MAX)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
uv_tx = MIN(mbmi->tx_size, max_uv_txsize_lookup[bsize]);
|
uv_tx = get_uv_tx_size_impl(mbmi->tx_size, bsize);
|
||||||
if (rate_uv_intra[uv_tx] == INT_MAX) {
|
if (rate_uv_intra[uv_tx] == INT_MAX) {
|
||||||
choose_intra_uv_mode(cpi, ctx, bsize, &rate_uv_intra[uv_tx],
|
choose_intra_uv_mode(cpi, ctx, bsize, uv_tx,
|
||||||
&rate_uv_tokenonly[uv_tx],
|
&rate_uv_intra[uv_tx], &rate_uv_tokenonly[uv_tx],
|
||||||
&dist_uv[uv_tx], &skip_uv[uv_tx],
|
&dist_uv[uv_tx], &skip_uv[uv_tx], &mode_uv[uv_tx]);
|
||||||
&mode_uv[uv_tx]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rate_uv = rate_uv_tokenonly[uv_tx];
|
rate_uv = rate_uv_tokenonly[uv_tx];
|
||||||
@ -3677,7 +3679,8 @@ int64_t vp9_rd_pick_inter_mode_sb(VP9_COMP *cpi, MACROBLOCK *x,
|
|||||||
&rate_uv_tokenonly[uv_tx_size],
|
&rate_uv_tokenonly[uv_tx_size],
|
||||||
&dist_uv[uv_tx_size],
|
&dist_uv[uv_tx_size],
|
||||||
&skip_uv[uv_tx_size],
|
&skip_uv[uv_tx_size],
|
||||||
bsize < BLOCK_8X8 ? BLOCK_8X8 : bsize);
|
bsize < BLOCK_8X8 ? BLOCK_8X8 : bsize,
|
||||||
|
uv_tx_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4042,7 +4045,8 @@ int64_t vp9_rd_pick_inter_mode_sub8x8(VP9_COMP *cpi, MACROBLOCK *x,
|
|||||||
distortion2 += distortion_y;
|
distortion2 += distortion_y;
|
||||||
|
|
||||||
if (rate_uv_intra[TX_4X4] == INT_MAX) {
|
if (rate_uv_intra[TX_4X4] == INT_MAX) {
|
||||||
choose_intra_uv_mode(cpi, ctx, bsize, &rate_uv_intra[TX_4X4],
|
choose_intra_uv_mode(cpi, ctx, bsize, TX_4X4,
|
||||||
|
&rate_uv_intra[TX_4X4],
|
||||||
&rate_uv_tokenonly[TX_4X4],
|
&rate_uv_tokenonly[TX_4X4],
|
||||||
&dist_uv[TX_4X4], &skip_uv[TX_4X4],
|
&dist_uv[TX_4X4], &skip_uv[TX_4X4],
|
||||||
&mode_uv[TX_4X4]);
|
&mode_uv[TX_4X4]);
|
||||||
@ -4427,7 +4431,7 @@ int64_t vp9_rd_pick_inter_mode_sub8x8(VP9_COMP *cpi, MACROBLOCK *x,
|
|||||||
&rate_uv_tokenonly[uv_tx_size],
|
&rate_uv_tokenonly[uv_tx_size],
|
||||||
&dist_uv[uv_tx_size],
|
&dist_uv[uv_tx_size],
|
||||||
&skip_uv[uv_tx_size],
|
&skip_uv[uv_tx_size],
|
||||||
BLOCK_8X8);
|
BLOCK_8X8, uv_tx_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user