Use av1_inverse_transform_block() whenever possible
Change-Id: I8ab3e3b15a3ee4890d80595fbde554bfb4ac365a
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index c3f9f70..206e615 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2568,43 +2568,6 @@
}
#endif // CONFIG_PALETTE
-// Wrappers to make function pointers usable.
-static void inv_txfm_add_4x8_wrapper(const tran_low_t *input, uint8_t *dest,
- int stride, int eob, TX_TYPE tx_type,
- int lossless) {
- (void)lossless;
- av1_inv_txfm_add_4x8(input, dest, stride, eob, tx_type);
-}
-
-static void inv_txfm_add_8x4_wrapper(const tran_low_t *input, uint8_t *dest,
- int stride, int eob, TX_TYPE tx_type,
- int lossless) {
- (void)lossless;
- av1_inv_txfm_add_8x4(input, dest, stride, eob, tx_type);
-}
-
-typedef void (*inv_txfm_func_ptr)(const tran_low_t *, uint8_t *, int, int,
- TX_TYPE, int);
-#if CONFIG_AOM_HIGHBITDEPTH
-
-void highbd_inv_txfm_add_4x8_wrapper(const tran_low_t *input, uint8_t *dest,
- int stride, int eob, int bd,
- TX_TYPE tx_type, int is_lossless) {
- (void)is_lossless;
- av1_highbd_inv_txfm_add_4x8(input, dest, stride, eob, bd, tx_type);
-}
-
-void highbd_inv_txfm_add_8x4_wrapper(const tran_low_t *input, uint8_t *dest,
- int stride, int eob, int bd,
- TX_TYPE tx_type, int is_lossless) {
- (void)is_lossless;
- av1_highbd_inv_txfm_add_8x4(input, dest, stride, eob, bd, tx_type);
-}
-
-typedef void (*highbd_inv_txfm_func_ptr)(const tran_low_t *, uint8_t *, int,
- int, int, TX_TYPE, int);
-#endif // CONFIG_AOM_HIGHBITDEPTH
-
static int64_t rd_pick_intra_sub_8x8_y_subblock_mode(
const AV1_COMP *const cpi, MACROBLOCK *x, int row, int col,
PREDICTION_MODE *best_mode, const int *bmode_costs, ENTROPY_CONTEXT *a,
@@ -2643,17 +2606,8 @@
int idx, idy;
int best_can_skip = 0;
uint8_t best_dst[8 * 8];
- inv_txfm_func_ptr inv_txfm_func =
- (tx_size == TX_4X4) ? av1_inv_txfm_add_4x4
- : (tx_size == TX_4X8) ? inv_txfm_add_4x8_wrapper
- : inv_txfm_add_8x4_wrapper;
#if CONFIG_AOM_HIGHBITDEPTH
uint16_t best_dst16[8 * 8];
- highbd_inv_txfm_func_ptr highbd_inv_txfm_func =
- (tx_size == TX_4X4)
- ? av1_highbd_inv_txfm_add_4x4
- : (tx_size == TX_4X8) ? highbd_inv_txfm_add_4x8_wrapper
- : highbd_inv_txfm_add_8x4_wrapper;
#endif // CONFIG_AOM_HIGHBITDEPTH
const int is_lossless = xd->lossless[xd->mi[0]->mbmi.segment_id];
#if CONFIG_EXT_TX && CONFIG_RECT_TX
@@ -2723,8 +2677,6 @@
#if !CONFIG_PVQ
int16_t *const src_diff = av1_raster_block_offset_int16(
BLOCK_8X8, block_raster_idx, p->src_diff);
-#else
- int i, j;
#endif
int skip;
assert(block < 4);
@@ -2778,22 +2730,11 @@
if (RDCOST(x->rdmult, x->rddiv, ratey, distortion) >= best_rd)
goto next_highbd;
#if CONFIG_PVQ
- if (!skip) {
- if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
- for (j = 0; j < tx_height; j++)
- for (i = 0; i < tx_width; i++)
- *CONVERT_TO_SHORTPTR(dst + j * dst_stride + i) = 0;
- } else {
- for (j = 0; j < tx_height; j++)
- for (i = 0; i < tx_width; i++) dst[j * dst_stride + i] = 0;
- }
+ if (!skip)
#endif
- highbd_inv_txfm_func(BLOCK_OFFSET(pd->dqcoeff, block), dst,
- dst_stride, p->eobs[block], xd->bd, DCT_DCT,
- 1);
-#if CONFIG_PVQ
- }
-#endif
+ av1_inverse_transform_block(xd, BLOCK_OFFSET(pd->dqcoeff, block),
+ DCT_DCT, tx_size, dst, dst_stride,
+ p->eobs[block]);
} else {
int64_t dist;
unsigned int tmp;
@@ -2832,22 +2773,11 @@
can_skip &= skip;
#endif
#if CONFIG_PVQ
- if (!skip) {
- if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
- for (j = 0; j < tx_height; j++)
- for (i = 0; i < tx_width; i++)
- *CONVERT_TO_SHORTPTR(dst + j * dst_stride + i) = 0;
- } else {
- for (j = 0; j < tx_height; j++)
- for (i = 0; i < tx_width; i++) dst[j * dst_stride + i] = 0;
- }
+ if (!skip)
#endif
- highbd_inv_txfm_func(BLOCK_OFFSET(pd->dqcoeff, block), dst,
- dst_stride, p->eobs[block], xd->bd, tx_type,
- 0);
-#if CONFIG_PVQ
- }
-#endif
+ av1_inverse_transform_block(xd, BLOCK_OFFSET(pd->dqcoeff, block),
+ tx_type, tx_size, dst, dst_stride,
+ p->eobs[block]);
cpi->fn_ptr[sub_bsize].vf(src, src_stride, dst, dst_stride, &tmp);
dist = (int64_t)tmp << 4;
distortion += dist;
@@ -2936,8 +2866,6 @@
#if !CONFIG_PVQ
int16_t *const src_diff = av1_raster_block_offset_int16(
BLOCK_8X8, block_raster_idx, p->src_diff);
-#else
- int i, j;
#endif // !CONFIG_PVQ
int skip;
assert(block < 4);
@@ -3011,15 +2939,11 @@
if (RDCOST(x->rdmult, x->rddiv, ratey, distortion) >= best_rd)
goto next;
#if CONFIG_PVQ
- if (!skip) {
- for (j = 0; j < tx_height; j++)
- for (i = 0; i < tx_width; i++) dst[j * dst_stride + i] = 0;
+ if (!skip)
#endif // CONFIG_PVQ
- inv_txfm_func(BLOCK_OFFSET(pd->dqcoeff, block), dst, dst_stride,
- p->eobs[block], DCT_DCT, 1);
-#if CONFIG_PVQ
- }
-#endif // CONFIG_PVQ
+ av1_inverse_transform_block(xd, BLOCK_OFFSET(pd->dqcoeff, block),
+ DCT_DCT, tx_size, dst, dst_stride,
+ p->eobs[block]);
} else {
int64_t dist;
unsigned int tmp;
@@ -3071,16 +2995,11 @@
can_skip &= skip;
#endif // !CONFIG_PVQ
#if CONFIG_PVQ
- if (!skip) {
- for (j = 0; j < tx_height; j++)
- for (i = 0; i < tx_width; i++) dst[j * dst_stride + i] = 0;
+ if (!skip)
#endif // CONFIG_PVQ
- inv_txfm_func(BLOCK_OFFSET(pd->dqcoeff, block), dst, dst_stride,
- p->eobs[block], tx_type, 0);
-#if CONFIG_PVQ
- }
-#endif // CONFIG_PVQ
- // No need for av1_block_error2_c because the ssz is unused
+ av1_inverse_transform_block(xd, BLOCK_OFFSET(pd->dqcoeff, block),
+ tx_type, tx_size, dst, dst_stride,
+ p->eobs[block]);
cpi->fn_ptr[sub_bsize].vf(src, src_stride, dst, dst_stride, &tmp);
dist = (int64_t)tmp << 4;
distortion += dist;