Commit 27319b6e authored by Lester Lu's avatar Lester Lu

Unify FWD_TXFM_PARAM and INV_TXFM_PARAM

Change two similar structs, FWD_TXFM_PARAM and INV_TXFM_PARAM,
into a common struct: TxfmParam. Its definition is moved to
aom_dsp/txfm_common.h to simplify dependency.

This change is made so that, in later changes of the LGT
experiment, functions requiring FWD_TXFM_PARAM and
INV_TXFM_PARAM, such as get_fwd_lgt4 and get_inv_lgt4, can
also be unified.

Change-Id: I756b0176a02314005060adbf8e62386f10eeb344
parent d27f5e27
......@@ -21,6 +21,25 @@
#define UNIT_QUANT_SHIFT 2
#define UNIT_QUANT_FACTOR (1 << UNIT_QUANT_SHIFT)
typedef struct txfm_param {
// for both forward and inverse transforms
int tx_type;
int tx_size;
int lossless;
int bd;
#if CONFIG_LGT
int is_inter;
int stride;
int mode;
uint8_t *dst;
#endif
// for inverse transforms only
#if CONFIG_ADAPT_SCAN
const int16_t *eob_threshold;
#endif
int eob;
} TxfmParam;
// Constants:
// for (int i = 1; i< 32; ++i)
// printf("static const int cospi_%d_64 = %.0f;\n", i,
......
......@@ -16,7 +16,6 @@
#include "./av1_rtcd.h"
#include "aom_dsp/txfm_common.h"
#include "av1/common/common.h"
#include "av1/common/idct.h"
static INLINE void TRANSPOSE4X4(int16x8_t *q8s16, int16x8_t *q9s16) {
int32x4_t q8s32, q9s32;
......@@ -135,7 +134,7 @@ static INLINE void IADST4x4_1D(int16x4_t *d3s16, int16x4_t *d4s16,
}
void av1_iht4x4_16_add_neon(const tran_low_t *input, uint8_t *dest,
int dest_stride, const INV_TXFM_PARAM *param) {
int dest_stride, const TxfmParam *txfm_param) {
uint8x8_t d26u8, d27u8;
int16x4_t d0s16, d1s16, d2s16, d3s16, d4s16, d5s16;
uint32x2_t d26u32, d27u32;
......@@ -149,10 +148,10 @@ void av1_iht4x4_16_add_neon(const tran_low_t *input, uint8_t *dest,
TRANSPOSE4X4(&q8s16, &q9s16);
int tx_type = param->tx_type;
int tx_type = txfm_param->tx_type;
switch (tx_type) {
case 0: // idct_idct is not supported. Fall back to C
av1_iht4x4_16_add_c(input, dest, dest_stride, param);
av1_iht4x4_16_add_c(input, dest, dest_stride, txfm_param);
return;
break;
case 1: // iadst_idct
......
......@@ -16,7 +16,6 @@
#include "./av1_rtcd.h"
#include "aom_dsp/txfm_common.h"
#include "av1/common/common.h"
#include "av1/common/idct.h"
static INLINE void TRANSPOSE8X8(int16x8_t *q8s16, int16x8_t *q9s16,
int16x8_t *q10s16, int16x8_t *q11s16,
......@@ -459,7 +458,7 @@ static INLINE void IADST8X8_1D(int16x8_t *q8s16, int16x8_t *q9s16,
}
void av1_iht8x8_64_add_neon(const tran_low_t *input, uint8_t *dest,
int dest_stride, const INV_TXFM_PARAM *param) {
int dest_stride, const TxfmParam *txfm_param) {
int i;
uint8_t *d1, *d2;
uint8x8_t d0u8, d1u8, d2u8, d3u8;
......@@ -479,10 +478,10 @@ void av1_iht8x8_64_add_neon(const tran_low_t *input, uint8_t *dest,
TRANSPOSE8X8(&q8s16, &q9s16, &q10s16, &q11s16, &q12s16, &q13s16, &q14s16,
&q15s16);
int tx_type = param->tx_type;
int tx_type = txfm_param->tx_type;
switch (tx_type) {
case 0: // idct_idct is not supported. Fall back to C
av1_iht8x8_64_add_c(input, dest, dest_stride, param);
av1_iht8x8_64_add_c(input, dest, dest_stride, txfm_param);
return;
break;
case 1: // iadst_idct
......
This diff is collapsed.
This diff is collapsed.
......@@ -26,38 +26,7 @@
extern "C" {
#endif
// TODO(kslu) Combine FWD_TXFM_PARAM and INV_TXFM_PARAM into a common struct.
// and move the common stuff in idct.h to av1_txfm.h or txfm_common.h
typedef struct fwd_txfm_param {
TX_TYPE tx_type;
TX_SIZE tx_size;
int lossless;
int bd;
#if CONFIG_LGT
int is_inter;
int stride;
PREDICTION_MODE mode;
uint8_t *dst;
#endif
} FWD_TXFM_PARAM;
typedef struct inv_txfm_param {
#if CONFIG_ADAPT_SCAN
const int16_t *eob_threshold;
#endif
TX_TYPE tx_type;
TX_SIZE tx_size;
int eob;
int lossless;
int bd;
#if CONFIG_LGT
int is_inter;
int stride;
PREDICTION_MODE mode;
uint8_t *dst;
#endif
} INV_TXFM_PARAM;
// TODO(kslu) move the common stuff in idct.h to av1_txfm.h or txfm_common.h
typedef void (*transform_1d)(const tran_low_t *, tran_low_t *);
typedef struct {
......@@ -76,12 +45,12 @@ typedef struct {
int av1_get_tx_scale(const TX_SIZE tx_size);
void av1_iwht4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
const INV_TXFM_PARAM *inv_txfm_param);
const TxfmParam *txfm_param);
void av1_idct4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
const INV_TXFM_PARAM *inv_txfm_param);
const TxfmParam *txfm_param);
void av1_inv_txfm_add(const tran_low_t *input, uint8_t *dest, int stride,
INV_TXFM_PARAM *inv_txfm_param);
TxfmParam *txfm_param);
void av1_inverse_transform_block(const MACROBLOCKD *xd,
const tran_low_t *dqcoeff,
#if CONFIG_LGT
......@@ -95,13 +64,13 @@ void av1_inverse_transform_block_facade(MACROBLOCKD *xd, int plane, int block,
void av1_highbd_iwht4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
int eob, int bd);
void av1_highbd_inv_txfm_add_4x4(const tran_low_t *input, uint8_t *dest,
int stride, const INV_TXFM_PARAM *param);
int stride, const TxfmParam *param);
void av1_highbd_inv_txfm_add_4x8(const tran_low_t *input, uint8_t *dest,
int stride, const INV_TXFM_PARAM *param);
int stride, const TxfmParam *param);
void av1_highbd_inv_txfm_add_8x4(const tran_low_t *input, uint8_t *dest,
int stride, const INV_TXFM_PARAM *param);
int stride, const TxfmParam *param);
void av1_highbd_inv_txfm_add(const tran_low_t *input, uint8_t *dest, int stride,
INV_TXFM_PARAM *inv_txfm_param);
TxfmParam *txfm_param);
#if CONFIG_DPCM_INTRA
void av1_dpcm_inv_txfm_add_4_c(const tran_low_t *input, int stride,
......
......@@ -16,20 +16,19 @@
#include "./av1_rtcd.h"
#include "av1/common/common.h"
#include "av1/common/blockd.h"
#include "av1/common/idct.h"
#include "aom_dsp/mips/inv_txfm_dspr2.h"
#include "aom_dsp/txfm_common.h"
#include "aom_ports/mem.h"
#if HAVE_DSPR2
void av1_iht16x16_256_add_dspr2(const int16_t *input, uint8_t *dest, int pitch,
FWD_TXFM_PARAM *param) {
TxfmParam *txfm_param) {
int i, j;
DECLARE_ALIGNED(32, int16_t, out[16 * 16]);
int16_t *outptr = out;
int16_t temp_out[16];
uint32_t pos = 45;
int tx_type = param->tx_type;
int tx_type = txfm_param->tx_type;
/* bit positon for extract from acc */
__asm__ __volatile__("wrdsp %[pos], 1 \n\t" : : [pos] "r"(pos));
......
......@@ -16,20 +16,19 @@
#include "./av1_rtcd.h"
#include "av1/common/common.h"
#include "av1/common/blockd.h"
#include "av1/common/idct.h"
#include "aom_dsp/mips/inv_txfm_dspr2.h"
#include "aom_dsp/txfm_common.h"
#include "aom_ports/mem.h"
#if HAVE_DSPR2
void av1_iht4x4_16_add_dspr2(const int16_t *input, uint8_t *dest,
int dest_stride, FWD_TXFM_PARAM *param) {
int dest_stride, TxfmParam *txfm_param) {
int i, j;
DECLARE_ALIGNED(32, int16_t, out[4 * 4]);
int16_t *outptr = out;
int16_t temp_in[4 * 4], temp_out[4];
uint32_t pos = 45;
int tx_type = param->tx_type;
int tx_type = txfm_param->tx_type;
/* bit positon for extract from acc */
__asm__ __volatile__("wrdsp %[pos], 1 \n\t"
......
......@@ -16,20 +16,19 @@
#include "./av1_rtcd.h"
#include "av1/common/common.h"
#include "av1/common/blockd.h"
#include "av1/common/idct.h"
#include "aom_dsp/mips/inv_txfm_dspr2.h"
#include "aom_dsp/txfm_common.h"
#include "aom_ports/mem.h"
#if HAVE_DSPR2
void av1_iht8x8_64_add_dspr2(const int16_t *input, uint8_t *dest,
int dest_stride, FWD_TXFM_PARAM *param) {
int dest_stride, TxfmParam *txfm_param) {
int i, j;
DECLARE_ALIGNED(32, int16_t, out[8 * 8]);
int16_t *outptr = out;
int16_t temp_in[8 * 8], temp_out[8];
uint32_t pos = 45;
int tx_type = param->tx_type;
int tx_type = txfm_param->tx_type;
/* bit positon for extract from acc */
__asm__ __volatile__("wrdsp %[pos], 1 \n\t" : : [pos] "r"(pos));
......
......@@ -12,15 +12,14 @@
#include <assert.h>
#include "av1/common/enums.h"
#include "av1/common/idct.h"
#include "aom_dsp/mips/inv_txfm_msa.h"
void av1_iht16x16_256_add_msa(const int16_t *input, uint8_t *dst,
int32_t dst_stride, FWD_TXFM_PARAM *param) {
int32_t dst_stride, TxfmParam *txfm_param) {
int32_t i;
DECLARE_ALIGNED(32, int16_t, out[16 * 16]);
int16_t *out_ptr = &out[0];
int32_t tx_type = param->tx_type;
int32_t tx_type = txfm_param->tx_type;
switch (tx_type) {
case DCT_DCT:
......
......@@ -12,13 +12,12 @@
#include <assert.h>
#include "av1/common/enums.h"
#include "av1/common/idct.h"
#include "aom_dsp/mips/inv_txfm_msa.h"
void av1_iht4x4_16_add_msa(const int16_t *input, uint8_t *dst,
int32_t dst_stride, FWD_TXFM_PARAM *param) {
int32_t dst_stride, TxfmParam *txfm_param) {
v8i16 in0, in1, in2, in3;
int32_t tx_type = param->tx_type;
int32_t tx_type = txfm_param->tx_type;
/* load vector elements of 4x4 block */
LD4x4_SH(input, in0, in1, in2, in3);
......
......@@ -12,13 +12,12 @@
#include <assert.h>
#include "av1/common/enums.h"
#include "av1/common/idct.h"
#include "aom_dsp/mips/inv_txfm_msa.h"
void av1_iht8x8_64_add_msa(const int16_t *input, uint8_t *dst,
int32_t dst_stride, FWD_TXFM_PARAM *param) {
int32_t dst_stride, TxfmParam *txfm_param) {
v8i16 in0, in1, in2, in3, in4, in5, in6, in7;
int32_t tx_type = param->tx_type;
int32_t tx_type = txfm_param->tx_type;
/* load vector elements of 8x8 block */
LD_SH8(input, 8, in0, in1, in2, in3, in4, in5, in6, in7);
......
......@@ -14,7 +14,6 @@
#include "./aom_config.h"
#include "./av1_rtcd.h"
#include "av1/common/idct.h"
#include "aom_dsp/x86/inv_txfm_common_avx2.h"
void av1_idct16_avx2(__m256i *in) {
......@@ -365,10 +364,9 @@ static void iidtx16(__m256i *in) {
#endif
void av1_iht16x16_256_add_avx2(const tran_low_t *input, uint8_t *dest,
int stride,
const INV_TXFM_PARAM *inv_txfm_param) {
int stride, const TxfmParam *txfm_param) {
__m256i in[16];
int tx_type = inv_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
load_buffer_16x16(input, in);
switch (tx_type) {
......
......@@ -15,7 +15,6 @@
#include "aom_dsp/x86/txfm_common_sse2.h"
#include "aom_ports/mem.h"
#include "av1/common/enums.h"
#include "av1/common/idct.h"
#if CONFIG_EXT_TX
static INLINE void fliplr_4x4(__m128i *in /*in[2]*/) {
......@@ -60,11 +59,11 @@ static INLINE void fliplr_16x8(__m128i *in /*in[16]*/) {
#endif
void av1_iht4x4_16_add_sse2(const tran_low_t *input, uint8_t *dest, int stride,
const INV_TXFM_PARAM *inv_txfm_param) {
const TxfmParam *txfm_param) {
__m128i in[2];
const __m128i zero = _mm_setzero_si128();
const __m128i eight = _mm_set1_epi16(8);
int tx_type = inv_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
in[0] = load_input_data(input);
in[1] = load_input_data(input + 8);
......@@ -152,11 +151,11 @@ void av1_iht4x4_16_add_sse2(const tran_low_t *input, uint8_t *dest, int stride,
}
void av1_iht8x8_64_add_sse2(const tran_low_t *input, uint8_t *dest, int stride,
const INV_TXFM_PARAM *inv_txfm_param) {
const TxfmParam *txfm_param) {
__m128i in[8];
const __m128i zero = _mm_setzero_si128();
const __m128i final_rounding = _mm_set1_epi16(1 << 4);
int tx_type = inv_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
// load input data
in[0] = load_input_data(input);
......@@ -254,12 +253,11 @@ static void iidtx16_sse2(__m128i *in0, __m128i *in1) {
#endif // CONFIG_EXT_TX
void av1_iht16x16_256_add_sse2(const tran_low_t *input, uint8_t *dest,
int stride,
const INV_TXFM_PARAM *inv_txfm_param) {
int stride, const TxfmParam *txfm_param) {
__m128i in[32];
__m128i *in0 = &in[0];
__m128i *in1 = &in[16];
int tx_type = inv_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
load_buffer_8x16(input, in0);
input += 8;
......@@ -393,10 +391,9 @@ static INLINE void flip_buffer_lr_8x8(__m128i *in) {
#endif // CONFIG_EXT_TX
void av1_iht8x16_128_add_sse2(const tran_low_t *input, uint8_t *dest,
int stride,
const INV_TXFM_PARAM *inv_txfm_param) {
int stride, const TxfmParam *txfm_param) {
__m128i in[16];
int tx_type = inv_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
in[0] = load_input_data(input + 0 * 8);
in[1] = load_input_data(input + 1 * 8);
......@@ -560,10 +557,9 @@ static INLINE void write_buffer_8x8_round6(uint8_t *dest, __m128i *in,
}
void av1_iht16x8_128_add_sse2(const tran_low_t *input, uint8_t *dest,
int stride,
const INV_TXFM_PARAM *inv_txfm_param) {
int stride, const TxfmParam *txfm_param) {
__m128i in[16];
int tx_type = inv_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
// Transpose 16x8 input into in[]
in[0] = load_input_data(input + 0 * 16);
......@@ -722,9 +718,9 @@ static INLINE void write_buffer_8x4_round5(uint8_t *dest, __m128i *in,
}
void av1_iht8x4_32_add_sse2(const tran_low_t *input, uint8_t *dest, int stride,
const INV_TXFM_PARAM *inv_txfm_param) {
const TxfmParam *txfm_param) {
__m128i in[8];
int tx_type = inv_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
in[0] = load_input_data(input + 0 * 8);
in[1] = load_input_data(input + 1 * 8);
......@@ -907,9 +903,9 @@ static INLINE void write_buffer_4x8_round5(uint8_t *dest, __m128i *in,
}
void av1_iht4x8_32_add_sse2(const tran_low_t *input, uint8_t *dest, int stride,
const INV_TXFM_PARAM *inv_txfm_param) {
const TxfmParam *txfm_param) {
__m128i in[8];
int tx_type = inv_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
// Load rows, packed two per element of 'in'.
// We pack into the bottom half of 'in' so that the
......@@ -1130,10 +1126,9 @@ static INLINE void write_buffer_16x32_round6(uint8_t *dest, __m128i *intl,
}
void av1_iht16x32_512_add_sse2(const tran_low_t *input, uint8_t *dest,
int stride,
const INV_TXFM_PARAM *inv_txfm_param) {
int stride, const TxfmParam *txfm_param) {
__m128i intl[16], intr[16], inbl[16], inbr[16];
int tx_type = inv_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
int i;
for (i = 0; i < 16; ++i) {
......@@ -1285,10 +1280,9 @@ static INLINE void write_buffer_32x16_round6(uint8_t *dest, __m128i *in0,
}
void av1_iht32x16_512_add_sse2(const tran_low_t *input, uint8_t *dest,
int stride,
const INV_TXFM_PARAM *inv_txfm_param) {
int stride, const TxfmParam *txfm_param) {
__m128i in0[16], in1[16], in2[16], in3[16];
int tx_type = inv_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
int i;
for (i = 0; i < 16; ++i) {
......
......@@ -419,7 +419,7 @@ static int av1_pvq_decode_helper2(AV1_COMMON *cm, MACROBLOCKD *const xd,
int xdec = pd->subsampling_x;
int seg_id = mbmi->segment_id;
int16_t *quant;
FWD_TXFM_PARAM fwd_txfm_param;
TxfmParam txfm_param;
// ToDo(yaowu): correct this with optimal number from decoding process.
const int max_scan_line = tx_size_2d[tx_size];
#if CONFIG_HIGHBITDEPTH
......@@ -437,17 +437,17 @@ static int av1_pvq_decode_helper2(AV1_COMMON *cm, MACROBLOCKD *const xd,
}
#endif
fwd_txfm_param.tx_type = tx_type;
fwd_txfm_param.tx_size = tx_size;
fwd_txfm_param.lossless = xd->lossless[seg_id];
txfm_param.tx_type = tx_type;
txfm_param.tx_size = tx_size;
txfm_param.lossless = xd->lossless[seg_id];
#if CONFIG_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
fwd_txfm_param.bd = xd->bd;
av1_highbd_fwd_txfm(pred, pvq_ref_coeff, diff_stride, &fwd_txfm_param);
txfm_param.bd = xd->bd;
av1_highbd_fwd_txfm(pred, pvq_ref_coeff, diff_stride, &txfm_param);
} else {
#endif // CONFIG_HIGHBITDEPTH
av1_fwd_txfm(pred, pvq_ref_coeff, diff_stride, &fwd_txfm_param);
av1_fwd_txfm(pred, pvq_ref_coeff, diff_stride, &txfm_param);
#if CONFIG_HIGHBITDEPTH
}
#endif // CONFIG_HIGHBITDEPTH
......
This diff is collapsed.
......@@ -490,7 +490,7 @@ static AV1_QUANT_FACADE
#endif // !CONFIG_PVQ
typedef void (*fwdTxfmFunc)(const int16_t *diff, tran_low_t *coeff, int stride,
FWD_TXFM_PARAM *param);
TxfmParam *txfm_param);
static const fwdTxfmFunc fwd_txfm_func[2] = { av1_fwd_txfm,
av1_highbd_fwd_txfm };
......@@ -532,7 +532,7 @@ void av1_xform_quant(const AV1_COMMON *cm, MACROBLOCK *x, int plane, int block,
: cm->giqmatrix[NUM_QM_LEVELS - 1][0][0][tx_size];
#endif
FWD_TXFM_PARAM fwd_txfm_param;
TxfmParam txfm_param;
#if CONFIG_PVQ || CONFIG_DAALA_DIST || CONFIG_LGT
uint8_t *dst;
......@@ -623,20 +623,20 @@ void av1_xform_quant(const AV1_COMMON *cm, MACROBLOCK *x, int plane, int block,
(void)ctx;
fwd_txfm_param.tx_type = tx_type;
fwd_txfm_param.tx_size = tx_size;
fwd_txfm_param.lossless = xd->lossless[mbmi->segment_id];
txfm_param.tx_type = tx_type;
txfm_param.tx_size = tx_size;
txfm_param.lossless = xd->lossless[mbmi->segment_id];
#if CONFIG_LGT
fwd_txfm_param.is_inter = is_inter_block(mbmi);
fwd_txfm_param.dst = dst;
fwd_txfm_param.stride = dst_stride;
fwd_txfm_param.mode = get_prediction_mode(xd->mi[0], plane, tx_size, block);
txfm_param.is_inter = is_inter_block(mbmi);
txfm_param.dst = dst;
txfm_param.stride = dst_stride;
txfm_param.mode = get_prediction_mode(xd->mi[0], plane, tx_size, block);
#endif
#if !CONFIG_PVQ
fwd_txfm_param.bd = xd->bd;
txfm_param.bd = xd->bd;
const int is_hbd = get_bitdepth_data_path_index(xd);
fwd_txfm_func[is_hbd](src_diff, coeff, diff_stride, &fwd_txfm_param);
fwd_txfm_func[is_hbd](src_diff, coeff, diff_stride, &txfm_param);
if (xform_quant_idx != AV1_XFORM_QUANT_SKIP_QUANT) {
if (LIKELY(!x->skip_block)) {
......@@ -654,14 +654,14 @@ void av1_xform_quant(const AV1_COMMON *cm, MACROBLOCK *x, int plane, int block,
#else // CONFIG_PVQ
(void)xform_quant_idx;
#if CONFIG_HIGHBITDEPTH
fwd_txfm_param.bd = xd->bd;
txfm_param.bd = xd->bd;
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
av1_highbd_fwd_txfm(src_int16, coeff, diff_stride, &fwd_txfm_param);
av1_highbd_fwd_txfm(pred, ref_coeff, diff_stride, &fwd_txfm_param);
av1_highbd_fwd_txfm(src_int16, coeff, diff_stride, &txfm_param);
av1_highbd_fwd_txfm(pred, ref_coeff, diff_stride, &txfm_param);
} else {
#endif
av1_fwd_txfm(src_int16, coeff, diff_stride, &fwd_txfm_param);
av1_fwd_txfm(pred, ref_coeff, diff_stride, &fwd_txfm_param);
av1_fwd_txfm(src_int16, coeff, diff_stride, &txfm_param);
av1_fwd_txfm(pred, ref_coeff, diff_stride, &txfm_param);
#if CONFIG_HIGHBITDEPTH
}
#endif
......@@ -827,7 +827,7 @@ static void encode_block_pass1(int plane, int block, int blk_row, int blk_col,
struct macroblock_plane *const p = &x->plane[plane];
struct macroblockd_plane *const pd = &xd->plane[plane];
tran_low_t *const dqcoeff = BLOCK_OFFSET(pd->dqcoeff, block);
INV_TXFM_PARAM inv_txfm_param;
TxfmParam txfm_param;
uint8_t *dst;
int ctx = 0;
dst = &pd->dst
......@@ -863,21 +863,20 @@ static void encode_block_pass1(int plane, int block, int blk_row, int blk_col,
#endif // CONFIG_HIGHBITDEPTH
}
#endif // !CONFIG_PVQ
inv_txfm_param.bd = xd->bd;
inv_txfm_param.tx_type = DCT_DCT;
inv_txfm_param.eob = p->eobs[block];
inv_txfm_param.lossless = xd->lossless[xd->mi[0]->mbmi.segment_id];
txfm_param.bd = xd->bd;
txfm_param.tx_type = DCT_DCT;
txfm_param.eob = p->eobs[block];
txfm_param.lossless = xd->lossless[xd->mi[0]->mbmi.segment_id];
#if CONFIG_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
av1_highbd_inv_txfm_add_4x4(dqcoeff, dst, pd->dst.stride,
&inv_txfm_param);
av1_highbd_inv_txfm_add_4x4(dqcoeff, dst, pd->dst.stride, &txfm_param);
return;
}
#endif // CONFIG_HIGHBITDEPTH
if (xd->lossless[xd->mi[0]->mbmi.segment_id]) {
av1_iwht4x4_add(dqcoeff, dst, pd->dst.stride, &inv_txfm_param);
av1_iwht4x4_add(dqcoeff, dst, pd->dst.stride, &txfm_param);
} else {
av1_idct4x4_add(dqcoeff, dst, pd->dst.stride, &inv_txfm_param);
av1_idct4x4_add(dqcoeff, dst, pd->dst.stride, &txfm_param);
}
}
}
......
This diff is collapsed.
......@@ -19,10 +19,10 @@ extern "C" {
#endif
void av1_fwd_txfm(const int16_t *src_diff, tran_low_t *coeff, int diff_stride,
FWD_TXFM_PARAM *fwd_txfm_param);
TxfmParam *txfm_param);
void av1_highbd_fwd_txfm(const int16_t *src_diff, tran_low_t *coeff,
int diff_stride, FWD_TXFM_PARAM *fwd_txfm_param);
int diff_stride, TxfmParam *txfm_param);
#ifdef __cplusplus
} // extern "C"
......
......@@ -14,7 +14,6 @@
#include "./aom_dsp_rtcd.h"
#include "./av1_rtcd.h"
#include "av1/common/idct.h"
#include "aom_dsp/txfm_common.h"
#include "aom_dsp/x86/fwd_txfm_sse2.h"
#include "aom_dsp/x86/synonyms.h"
......@@ -204,9 +203,9 @@ static void fidtx4_sse2(__m128i *in) {
#endif // CONFIG_EXT_TX
void av1_fht4x4_sse2(const int16_t *input, tran_low_t *output, int stride,
FWD_TXFM_PARAM *fwd_txfm_param) {
TxfmParam *txfm_param) {
__m128i in[4];
int tx_type = fwd_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
switch (tx_type) {
case DCT_DCT: aom_fdct4x4_sse2(input, output, stride); break;
......@@ -1303,9 +1302,9 @@ static void fidtx8_sse2(__m128i *in) {
#endif // CONFIG_EXT_TX
void av1_fht8x8_sse2(const int16_t *input, tran_low_t *output, int stride,
FWD_TXFM_PARAM *fwd_txfm_param) {
TxfmParam *txfm_param) {
__m128i in[8];
int tx_type = fwd_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
switch (tx_type) {
case DCT_DCT: aom_fdct8x8_sse2(input, output, stride); break;
......@@ -2337,9 +2336,9 @@ static void fidtx16_sse2(__m128i *in0, __m128i *in1) {
#endif // CONFIG_EXT_TX
void av1_fht16x16_sse2(const int16_t *input, tran_low_t *output, int stride,
FWD_TXFM_PARAM *fwd_txfm_param) {
TxfmParam *txfm_param) {
__m128i in0[16], in1[16];
int tx_type = fwd_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
switch (tx_type) {
case DCT_DCT:
......@@ -2554,9 +2553,9 @@ static INLINE void write_buffer_4x8(tran_low_t *output, __m128i *res) {
}
void av1_fht4x8_sse2(const int16_t *input, tran_low_t *output, int stride,
FWD_TXFM_PARAM *fwd_txfm_param) {
TxfmParam *txfm_param) {
__m128i in[8];
int tx_type = fwd_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
switch (tx_type) {
case DCT_DCT:
......@@ -2729,9 +2728,9 @@ static INLINE void write_buffer_8x4(tran_low_t *output, __m128i *res) {
}
void av1_fht8x4_sse2(const int16_t *input, tran_low_t *output, int stride,
FWD_TXFM_PARAM *fwd_txfm_param) {
TxfmParam *txfm_param) {
__m128i in[8];
int tx_type = fwd_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
switch (tx_type) {
case DCT_DCT:
......@@ -2870,9 +2869,9 @@ static void row_8x16_rounding(__m128i *in, int bits) {
}
void av1_fht8x16_sse2(const int16_t *input, tran_low_t *output, int stride,
FWD_TXFM_PARAM *fwd_txfm_param) {
TxfmParam *txfm_param) {
__m128i in[16];
int tx_type = fwd_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
__m128i *const t = in; // Alias to top 8x8 sub block
__m128i *const b = in + 8; // Alias to bottom 8x8 sub block
......@@ -3052,9 +3051,9 @@ static INLINE void load_buffer_16x8(const int16_t *input, __m128i *in,
#define col_16x8_rounding row_8x16_rounding
void av1_fht16x8_sse2(const int16_t *input, tran_low_t *output, int stride,
FWD_TXFM_PARAM *fwd_txfm_param) {
TxfmParam *txfm_param) {
__m128i in[16];
int tx_type = fwd_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
__m128i *const l = in; // Alias to left 8x8 sub block
__m128i *const r = in + 8; // Alias to right 8x8 sub block, which we store
......@@ -3363,9 +3362,9 @@ static INLINE void fhalfright32_16col(__m128i *tl, __m128i *tr, __m128i *bl,
// For 16x32, this means the input is a 2x2 grid of such blocks.
// For 32x16, it means the input is a 4x1 grid.
void av1_fht16x32_sse2(const int16_t *input, tran_low_t *output, int stride,
FWD_TXFM_PARAM *fwd_txfm_param) {
TxfmParam *txfm_param) {
__m128i intl[16], intr[16], inbl[16], inbr[16];
int tx_type = fwd_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
switch (tx_type) {
case DCT_DCT:
......@@ -3553,9 +3552,9 @@ static INLINE void write_buffer_32x16(tran_low_t *output, __m128i *res0,
}
void av1_fht32x16_sse2(const int16_t *input, tran_low_t *output, int stride,
FWD_TXFM_PARAM *fwd_txfm_param) {
TxfmParam *txfm_param) {
__m128i in0[16], in1[16], in2[16], in3[16];
int tx_type = fwd_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
load_buffer_32x16(input, in0, in1, in2, in3, stride, 0, 0);
switch (tx_type) {
......@@ -3794,9 +3793,9 @@ static INLINE void write_buffer_32x32(__m128i *in0, __m128i *in1, __m128i *in2,
}
void av1_fht32x32_sse2(const int16_t *input, tran_low_t *output, int stride,
FWD_TXFM_PARAM *fwd_txfm_param) {
TxfmParam *txfm_param) {
__m128i in0[32], in1[32], in2[32], in3[32];
int tx_type = fwd_txfm_param->tx_type;
int tx_type = txfm_param->tx_type;
load_buffer_32x32(input, in0, in1, in2, in3, stride, 0, 0);