Commit d8b1ddce authored by Lester Lu's avatar Lester Lu
Browse files

Signature changes for the LGT experiment

The input arguments of av1_fht* and av1_iht* functions (and their
HBD versions) are slightly changed. Input arguments tx_type and
bd are carried by a struct fwd_txfm_param/inv_txfm_param. This
struct is meant to later on carry other prediction information,
such as intra top/left boundaries to the transform level, so
that the choice of transforms can be more adaptive to the
prediction mode and local video content.

Change-Id: Ia42544248a51845be64b72855b642ef1fe5910a9
parent cff9171e
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "./av1_rtcd.h" #include "./av1_rtcd.h"
#include "aom_dsp/txfm_common.h" #include "aom_dsp/txfm_common.h"
#include "av1/common/common.h" #include "av1/common/common.h"
#include "av1/common/idct.h"
static INLINE void TRANSPOSE4X4(int16x8_t *q8s16, int16x8_t *q9s16) { static INLINE void TRANSPOSE4X4(int16x8_t *q8s16, int16x8_t *q9s16) {
int32x4_t q8s32, q9s32; int32x4_t q8s32, q9s32;
...@@ -134,7 +135,7 @@ static INLINE void IADST4x4_1D(int16x4_t *d3s16, int16x4_t *d4s16, ...@@ -134,7 +135,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, void av1_iht4x4_16_add_neon(const tran_low_t *input, uint8_t *dest,
int dest_stride, int tx_type) { int dest_stride, const INV_TXFM_PARAM *param) {
uint8x8_t d26u8, d27u8; uint8x8_t d26u8, d27u8;
int16x4_t d0s16, d1s16, d2s16, d3s16, d4s16, d5s16; int16x4_t d0s16, d1s16, d2s16, d3s16, d4s16, d5s16;
uint32x2_t d26u32, d27u32; uint32x2_t d26u32, d27u32;
...@@ -148,9 +149,10 @@ void av1_iht4x4_16_add_neon(const tran_low_t *input, uint8_t *dest, ...@@ -148,9 +149,10 @@ void av1_iht4x4_16_add_neon(const tran_low_t *input, uint8_t *dest,
TRANSPOSE4X4(&q8s16, &q9s16); TRANSPOSE4X4(&q8s16, &q9s16);
int tx_type = param->tx_type;
switch (tx_type) { switch (tx_type) {
case 0: // idct_idct is not supported. Fall back to C case 0: // idct_idct is not supported. Fall back to C
av1_iht4x4_16_add_c(input, dest, dest_stride, tx_type); av1_iht4x4_16_add_c(input, dest, dest_stride, param);
return; return;
break; break;
case 1: // iadst_idct case 1: // iadst_idct
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "./av1_rtcd.h" #include "./av1_rtcd.h"
#include "aom_dsp/txfm_common.h" #include "aom_dsp/txfm_common.h"
#include "av1/common/common.h" #include "av1/common/common.h"
#include "av1/common/idct.h"
static INLINE void TRANSPOSE8X8(int16x8_t *q8s16, int16x8_t *q9s16, static INLINE void TRANSPOSE8X8(int16x8_t *q8s16, int16x8_t *q9s16,
int16x8_t *q10s16, int16x8_t *q11s16, int16x8_t *q10s16, int16x8_t *q11s16,
...@@ -458,7 +459,7 @@ static INLINE void IADST8X8_1D(int16x8_t *q8s16, int16x8_t *q9s16, ...@@ -458,7 +459,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, void av1_iht8x8_64_add_neon(const tran_low_t *input, uint8_t *dest,
int dest_stride, int tx_type) { int dest_stride, const INV_TXFM_PARAM *param) {
int i; int i;
uint8_t *d1, *d2; uint8_t *d1, *d2;
uint8x8_t d0u8, d1u8, d2u8, d3u8; uint8x8_t d0u8, d1u8, d2u8, d3u8;
...@@ -478,9 +479,10 @@ void av1_iht8x8_64_add_neon(const tran_low_t *input, uint8_t *dest, ...@@ -478,9 +479,10 @@ void av1_iht8x8_64_add_neon(const tran_low_t *input, uint8_t *dest,
TRANSPOSE8X8(&q8s16, &q9s16, &q10s16, &q11s16, &q12s16, &q13s16, &q14s16, TRANSPOSE8X8(&q8s16, &q9s16, &q10s16, &q11s16, &q12s16, &q13s16, &q14s16,
&q15s16); &q15s16);
int tx_type = param->tx_type;
switch (tx_type) { switch (tx_type) {
case 0: // idct_idct is not supported. Fall back to C case 0: // idct_idct is not supported. Fall back to C
av1_iht8x8_64_add_c(input, dest, dest_stride, tx_type); av1_iht8x8_64_add_c(input, dest, dest_stride, param);
return; return;
break; break;
case 1: // iadst_idct case 1: // iadst_idct
......
...@@ -11,12 +11,15 @@ print <<EOF ...@@ -11,12 +11,15 @@ print <<EOF
#include "av1/common/filter.h" #include "av1/common/filter.h"
#include "av1/common/convolve.h" #include "av1/common/convolve.h"
#include "av1/common/av1_txfm.h" #include "av1/common/av1_txfm.h"
#include "av1/common/idct.h"
#include "av1/common/odintrin.h" #include "av1/common/odintrin.h"
struct macroblockd; struct macroblockd;
/* Encoder forward decls */ /* Encoder forward decls */
struct macroblock; struct macroblock;
struct fwd_txfm_param;
struct inv_txfm_param;
struct aom_variance_vtable; struct aom_variance_vtable;
struct search_site_config; struct search_site_config;
struct mv; struct mv;
...@@ -63,81 +66,81 @@ if (aom_config("CONFIG_HIGHBITDEPTH") eq "yes") { ...@@ -63,81 +66,81 @@ if (aom_config("CONFIG_HIGHBITDEPTH") eq "yes") {
# #
if (aom_config("CONFIG_HIGHBITDEPTH") eq "yes") { if (aom_config("CONFIG_HIGHBITDEPTH") eq "yes") {
{ {
add_proto qw/void av1_iht4x4_16_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht4x4_16_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht4x4_16_add sse2/; specialize qw/av1_iht4x4_16_add sse2/;
add_proto qw/void av1_iht4x8_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht4x8_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht4x8_32_add sse2/; specialize qw/av1_iht4x8_32_add sse2/;
add_proto qw/void av1_iht8x4_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht8x4_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht8x4_32_add sse2/; specialize qw/av1_iht8x4_32_add sse2/;
add_proto qw/void av1_iht8x16_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht8x16_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht8x16_128_add sse2/; specialize qw/av1_iht8x16_128_add sse2/;
add_proto qw/void av1_iht16x8_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht16x8_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht16x8_128_add sse2/; specialize qw/av1_iht16x8_128_add sse2/;
add_proto qw/void av1_iht16x32_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht16x32_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht16x32_512_add sse2/; specialize qw/av1_iht16x32_512_add sse2/;
add_proto qw/void av1_iht32x16_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht32x16_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht32x16_512_add sse2/; specialize qw/av1_iht32x16_512_add sse2/;
add_proto qw/void av1_iht4x16_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht4x16_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_iht16x4_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht16x4_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_iht8x32_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht8x32_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_iht32x8_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht32x8_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_iht8x8_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht8x8_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht8x8_64_add sse2/; specialize qw/av1_iht8x8_64_add sse2/;
add_proto qw/void av1_iht16x16_256_add/, "const tran_low_t *input, uint8_t *output, int pitch, int tx_type"; add_proto qw/void av1_iht16x16_256_add/, "const tran_low_t *input, uint8_t *output, int pitch, const struct inv_txfm_param *param";
specialize qw/av1_iht16x16_256_add sse2 avx2/; specialize qw/av1_iht16x16_256_add sse2 avx2/;
add_proto qw/void av1_iht32x32_1024_add/, "const tran_low_t *input, uint8_t *output, int pitch, int tx_type"; add_proto qw/void av1_iht32x32_1024_add/, "const tran_low_t *input, uint8_t *output, int pitch, const struct inv_txfm_param *param";
} }
} else { } else {
{ {
add_proto qw/void av1_iht4x4_16_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht4x4_16_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht4x4_16_add sse2 neon dspr2/; specialize qw/av1_iht4x4_16_add sse2 neon dspr2/;
add_proto qw/void av1_iht4x8_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht4x8_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht4x8_32_add sse2/; specialize qw/av1_iht4x8_32_add sse2/;
add_proto qw/void av1_iht8x4_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht8x4_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht8x4_32_add sse2/; specialize qw/av1_iht8x4_32_add sse2/;
add_proto qw/void av1_iht8x16_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht8x16_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht8x16_128_add sse2/; specialize qw/av1_iht8x16_128_add sse2/;
add_proto qw/void av1_iht16x8_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht16x8_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht16x8_128_add sse2/; specialize qw/av1_iht16x8_128_add sse2/;
add_proto qw/void av1_iht16x32_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht16x32_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht16x32_512_add sse2/; specialize qw/av1_iht16x32_512_add sse2/;
add_proto qw/void av1_iht32x16_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht32x16_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht32x16_512_add sse2/; specialize qw/av1_iht32x16_512_add sse2/;
add_proto qw/void av1_iht4x16_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht4x16_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_iht16x4_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht16x4_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_iht8x32_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht8x32_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_iht32x8_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht32x8_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_iht8x8_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type"; add_proto qw/void av1_iht8x8_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
specialize qw/av1_iht8x8_64_add sse2 neon dspr2/; specialize qw/av1_iht8x8_64_add sse2 neon dspr2/;
add_proto qw/void av1_iht16x16_256_add/, "const tran_low_t *input, uint8_t *output, int pitch, int tx_type"; add_proto qw/void av1_iht16x16_256_add/, "const tran_low_t *input, uint8_t *output, int pitch, const struct inv_txfm_param *param";
specialize qw/av1_iht16x16_256_add sse2 avx2 dspr2/; specialize qw/av1_iht16x16_256_add sse2 avx2 dspr2/;
add_proto qw/void av1_iht32x32_1024_add/, "const tran_low_t *input, uint8_t *output, int pitch, int tx_type"; add_proto qw/void av1_iht32x32_1024_add/, "const tran_low_t *input, uint8_t *output, int pitch, const struct inv_txfm_param *param";
if (aom_config("CONFIG_EXT_TX") ne "yes") { if (aom_config("CONFIG_EXT_TX") ne "yes") {
specialize qw/av1_iht4x4_16_add msa/; specialize qw/av1_iht4x4_16_add msa/;
...@@ -147,10 +150,10 @@ if (aom_config("CONFIG_HIGHBITDEPTH") eq "yes") { ...@@ -147,10 +150,10 @@ if (aom_config("CONFIG_HIGHBITDEPTH") eq "yes") {
} }
} }
add_proto qw/void av1_iht32x32_1024_add/, "const tran_low_t *input, uint8_t *output, int pitch, int tx_type"; add_proto qw/void av1_iht32x32_1024_add/, "const tran_low_t *input, uint8_t *output, int pitch, const struct inv_txfm_param *param";
if (aom_config("CONFIG_TX64X64") eq "yes") { if (aom_config("CONFIG_TX64X64") eq "yes") {
add_proto qw/void av1_iht64x64_4096_add/, "const tran_low_t *input, uint8_t *output, int pitch, int tx_type"; add_proto qw/void av1_iht64x64_4096_add/, "const tran_low_t *input, uint8_t *output, int pitch, const struct inv_txfm_param *param";
} }
if (aom_config("CONFIG_NEW_QUANT") eq "yes") { if (aom_config("CONFIG_NEW_QUANT") eq "yes") {
...@@ -226,31 +229,31 @@ if (aom_config("CONFIG_HIGHBITDEPTH") eq "yes") { ...@@ -226,31 +229,31 @@ if (aom_config("CONFIG_HIGHBITDEPTH") eq "yes") {
# #
# dct # dct
# #
add_proto qw/void av1_highbd_iht4x4_16_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht4x4_16_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht4x8_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht4x8_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht8x4_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht8x4_32_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht8x16_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht8x16_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht16x8_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht16x8_128_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht16x32_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht16x32_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht32x16_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht32x16_512_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht4x16_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht4x16_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht16x4_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht16x4_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht8x32_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht8x32_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht32x8_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht32x8_256_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht8x8_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int tx_type, int bd"; add_proto qw/void av1_highbd_iht8x8_64_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, const struct inv_txfm_param *param";
add_proto qw/void av1_highbd_iht16x16_256_add/, "const tran_low_t *input, uint8_t *output, int pitch, int tx_type, int bd"; add_proto qw/void av1_highbd_iht16x16_256_add/, "const tran_low_t *input, uint8_t *output, int pitch, const struct inv_txfm_param *param";
} }
#inv txfm #inv txfm
...@@ -353,49 +356,49 @@ if (aom_config("CONFIG_AOM_QM") eq "yes") { ...@@ -353,49 +356,49 @@ if (aom_config("CONFIG_AOM_QM") eq "yes") {
# fdct functions # fdct functions
add_proto qw/void av1_fht4x4/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht4x4/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht4x4 sse2/; specialize qw/av1_fht4x4 sse2/;
add_proto qw/void av1_fwht4x4/, "const int16_t *input, tran_low_t *output, int stride"; add_proto qw/void av1_fwht4x4/, "const int16_t *input, tran_low_t *output, int stride";
add_proto qw/void av1_fht8x8/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht8x8/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht8x8 sse2/; specialize qw/av1_fht8x8 sse2/;
add_proto qw/void av1_fht16x16/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht16x16/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht16x16 sse2 avx2/; specialize qw/av1_fht16x16 sse2 avx2/;
add_proto qw/void av1_fht32x32/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht32x32/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht32x32 sse2 avx2/; specialize qw/av1_fht32x32 sse2 avx2/;
if (aom_config("CONFIG_TX64X64") eq "yes") { if (aom_config("CONFIG_TX64X64") eq "yes") {
add_proto qw/void av1_fht64x64/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht64x64/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
} }
add_proto qw/void av1_fht4x8/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht4x8/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht4x8 sse2/; specialize qw/av1_fht4x8 sse2/;
add_proto qw/void av1_fht8x4/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht8x4/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht8x4 sse2/; specialize qw/av1_fht8x4 sse2/;
add_proto qw/void av1_fht8x16/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht8x16/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht8x16 sse2/; specialize qw/av1_fht8x16 sse2/;
add_proto qw/void av1_fht16x8/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht16x8/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht16x8 sse2/; specialize qw/av1_fht16x8 sse2/;
add_proto qw/void av1_fht16x32/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht16x32/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht16x32 sse2/; specialize qw/av1_fht16x32 sse2/;
add_proto qw/void av1_fht32x16/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht32x16/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht32x16 sse2/; specialize qw/av1_fht32x16 sse2/;
add_proto qw/void av1_fht4x16/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht4x16/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
add_proto qw/void av1_fht16x4/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht16x4/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
add_proto qw/void av1_fht8x32/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht8x32/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
add_proto qw/void av1_fht32x8/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht32x8/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
if (aom_config("CONFIG_HIGHBITDEPTH") ne "yes") { if (aom_config("CONFIG_HIGHBITDEPTH") ne "yes") {
if (aom_config("CONFIG_EXT_TX") ne "yes") { if (aom_config("CONFIG_EXT_TX") ne "yes") {
...@@ -525,25 +528,25 @@ if (aom_config("CONFIG_PVQ") eq "yes") { ...@@ -525,25 +528,25 @@ if (aom_config("CONFIG_PVQ") eq "yes") {
# fdct functions # fdct functions
if (aom_config("CONFIG_HIGHBITDEPTH") eq "yes") { if (aom_config("CONFIG_HIGHBITDEPTH") eq "yes") {
add_proto qw/void av1_fht4x4/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht4x4/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht4x4 sse2/; specialize qw/av1_fht4x4 sse2/;
add_proto qw/void av1_fht8x8/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht8x8/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht8x8 sse2/; specialize qw/av1_fht8x8 sse2/;
add_proto qw/void av1_fht16x16/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht16x16/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht16x16 sse2/; specialize qw/av1_fht16x16 sse2/;
add_proto qw/void av1_fwht4x4/, "const int16_t *input, tran_low_t *output, int stride"; add_proto qw/void av1_fwht4x4/, "const int16_t *input, tran_low_t *output, int stride";
specialize qw/av1_fwht4x4 sse2/; specialize qw/av1_fwht4x4 sse2/;
} else { } else {
add_proto qw/void av1_fht4x4/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht4x4/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht4x4 sse2 msa/; specialize qw/av1_fht4x4 sse2 msa/;
add_proto qw/void av1_fht8x8/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht8x8/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht8x8 sse2 msa/; specialize qw/av1_fht8x8 sse2 msa/;
add_proto qw/void av1_fht16x16/, "const int16_t *input, tran_low_t *output, int stride, int tx_type"; add_proto qw/void av1_fht16x16/, "const int16_t *input, tran_low_t *output, int stride, struct fwd_txfm_param *param";
specialize qw/av1_fht16x16 sse2 msa/; specialize qw/av1_fht16x16 sse2 msa/;
add_proto qw/void av1_fwht4x4/, "const int16_t *input, tran_low_t *output, int stride"; add_proto qw/void av1_fwht4x4/, "const int16_t *input, tran_low_t *output, int stride";
......
This diff is collapsed.
...@@ -26,7 +26,16 @@ ...@@ -26,7 +26,16 @@
extern "C" { extern "C" {
#endif #endif
typedef struct INV_TXFM_PARAM { // 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;
} FWD_TXFM_PARAM;
typedef struct inv_txfm_param {
#if CONFIG_ADAPT_SCAN #if CONFIG_ADAPT_SCAN
const int16_t *eob_threshold; const int16_t *eob_threshold;
#endif #endif
...@@ -71,12 +80,11 @@ void av1_inverse_transform_block_facade(MACROBLOCKD *xd, int plane, int block, ...@@ -71,12 +80,11 @@ 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, void av1_highbd_iwht4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
int eob, int bd); int eob, int bd);
void av1_highbd_inv_txfm_add_4x4(const tran_low_t *input, uint8_t *dest, void av1_highbd_inv_txfm_add_4x4(const tran_low_t *input, uint8_t *dest,
int stride, int eob, int bd, TX_TYPE tx_type, int stride, const INV_TXFM_PARAM *param);
int lossless);
void av1_highbd_inv_txfm_add_4x8(const tran_low_t *input, uint8_t *dest, void av1_highbd_inv_txfm_add_4x8(const tran_low_t *input, uint8_t *dest,
int stride, int eob, int bd, TX_TYPE tx_type); int stride, const INV_TXFM_PARAM *param);
void av1_highbd_inv_txfm_add_8x4(const tran_low_t *input, uint8_t *dest, void av1_highbd_inv_txfm_add_8x4(const tran_low_t *input, uint8_t *dest,
int stride, int eob, int bd, TX_TYPE tx_type); int stride, const INV_TXFM_PARAM *param);
void av1_highbd_inv_txfm_add(const tran_low_t *input, uint8_t *dest, int stride, void av1_highbd_inv_txfm_add(const tran_low_t *input, uint8_t *dest, int stride,
INV_TXFM_PARAM *inv_txfm_param); INV_TXFM_PARAM *inv_txfm_param);
......
...@@ -23,12 +23,13 @@ ...@@ -23,12 +23,13 @@
#if HAVE_DSPR2 #if HAVE_DSPR2
void av1_iht16x16_256_add_dspr2(const int16_t *input, uint8_t *dest, int pitch, void av1_iht16x16_256_add_dspr2(const int16_t *input, uint8_t *dest, int pitch,
int tx_type) { FWD_TXFM_PARAM *param) {
int i, j; int i, j;
DECLARE_ALIGNED(32, int16_t, out[16 * 16]); DECLARE_ALIGNED(32, int16_t, out[16 * 16]);
int16_t *outptr = out; int16_t *outptr = out;
int16_t temp_out[16]; int16_t temp_out[16];
uint32_t pos = 45; uint32_t pos = 45;
int tx_type = param->tx_type;
/* bit positon for extract from acc */ /* bit positon for extract from acc */
__asm__ __volatile__("wrdsp %[pos], 1 \n\t" : : [pos] "r"(pos)); __asm__ __volatile__("wrdsp %[pos], 1 \n\t" : : [pos] "r"(pos));
......
...@@ -23,12 +23,13 @@ ...@@ -23,12 +23,13 @@
#if HAVE_DSPR2 #if HAVE_DSPR2
void av1_iht4x4_16_add_dspr2(const int16_t *input, uint8_t *dest, void av1_iht4x4_16_add_dspr2(const int16_t *input, uint8_t *dest,
int dest_stride, int tx_type) { int dest_stride, FWD_TXFM_PARAM *param) {
int i, j; int i, j;
DECLARE_ALIGNED(32, int16_t, out[4 * 4]); DECLARE_ALIGNED(32, int16_t, out[4 * 4]);
int16_t *outptr = out; int16_t *outptr = out;
int16_t temp_in[4 * 4], temp_out[4]; int16_t temp_in[4 * 4], temp_out[4];
uint32_t pos = 45; uint32_t pos = 45;
int tx_type = param->tx_type;
/* bit positon for extract from acc */ /* bit positon for extract from acc */
__asm__ __volatile__("wrdsp %[pos], 1 \n\t" __asm__ __volatile__("wrdsp %[pos], 1 \n\t"
......
...@@ -16,18 +16,20 @@ ...@@ -16,18 +16,20 @@
#include "./av1_rtcd.h" #include "./av1_rtcd.h"
#include "av1/common/common.h" #include "av1/common/common.h"
#include "av1/common/blockd.h" #include "av1/common/blockd.h"
#include "av1/common/idct.h"
#include "aom_dsp/mips/inv_txfm_dspr2.h" #include "aom_dsp/mips/inv_txfm_dspr2.h"
#include "aom_dsp/txfm_common.h" #include "aom_dsp/txfm_common.h"
#include "aom_ports/mem.h" #include "aom_ports/mem.h"
#if HAVE_DSPR2 #if HAVE_DSPR2
void av1_iht8x8_64_add_dspr2(const int16_t *input, uint8_t *dest, void av1_iht8x8_64_add_dspr2(const int16_t *input, uint8_t *dest,
int dest_stride, int tx_type) { int dest_stride, FWD_TXFM_PARAM *param) {
int i, j; int i, j;
DECLARE_ALIGNED(32, int16_t, out[8 * 8]); DECLARE_ALIGNED(32, int16_t, out[8 * 8]);
int16_t *outptr = out; int16_t *outptr = out;
int16_t temp_in[8 * 8], temp_out[8];