Move iwht4x4 to av1_inv_txfm2d.c Change-Id: Idd22da6bf5b34bad87193f3b360c9bd25842f5ae
diff --git a/aom_dsp/aom_dsp.cmake b/aom_dsp/aom_dsp.cmake index 09169a3..757ed16 100644 --- a/aom_dsp/aom_dsp.cmake +++ b/aom_dsp/aom_dsp.cmake
@@ -28,8 +28,6 @@ "${AOM_ROOT}/aom_dsp/entcode.h" "${AOM_ROOT}/aom_dsp/intrapred.c" "${AOM_ROOT}/aom_dsp/intrapred_common.h" - "${AOM_ROOT}/aom_dsp/inv_txfm.c" - "${AOM_ROOT}/aom_dsp/inv_txfm.h" "${AOM_ROOT}/aom_dsp/loopfilter.c" "${AOM_ROOT}/aom_dsp/prob.h" "${AOM_ROOT}/aom_dsp/simd/v128_intrinsics.h"
diff --git a/aom_dsp/aom_dsp_rtcd_defs.pl b/aom_dsp/aom_dsp_rtcd_defs.pl index ad34ba5..140a535 100755 --- a/aom_dsp/aom_dsp_rtcd_defs.pl +++ b/aom_dsp/aom_dsp_rtcd_defs.pl
@@ -478,14 +478,6 @@ } # CONFIG_AV1_ENCODER # -# Inverse transform -if (aom_config("CONFIG_AV1") eq "yes") { - add_proto qw/void aom_highbd_iwht4x4_1_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int bd"; - - add_proto qw/void aom_highbd_iwht4x4_16_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int bd"; -} # CONFIG_AV1 - -# # Quantization # if (aom_config("CONFIG_AV1_ENCODER") eq "yes") {
diff --git a/aom_dsp/inv_txfm.c b/aom_dsp/inv_txfm.c deleted file mode 100644 index 4d7b630..0000000 --- a/aom_dsp/inv_txfm.c +++ /dev/null
@@ -1,103 +0,0 @@ -/* - * Copyright (c) 2016, Alliance for Open Media. All rights reserved - * - * This source code is subject to the terms of the BSD 2 Clause License and - * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License - * was not distributed with this source code in the LICENSE file, you can - * obtain it at www.aomedia.org/license/software. If the Alliance for Open - * Media Patent License 1.0 was not distributed with this source code in the - * PATENTS file, you can obtain it at www.aomedia.org/license/patent. - */ - -#include <math.h> -#include <string.h> - -#include "./aom_dsp_rtcd.h" -#include "aom_dsp/inv_txfm.h" - -void aom_highbd_iwht4x4_16_add_c(const tran_low_t *input, uint8_t *dest8, - int stride, int bd) { - /* 4-point reversible, orthonormal inverse Walsh-Hadamard in 3.5 adds, - 0.5 shifts per pixel. */ - int i; - tran_low_t output[16]; - tran_low_t a1, b1, c1, d1, e1; - const tran_low_t *ip = input; - tran_low_t *op = output; - uint16_t *dest = CONVERT_TO_SHORTPTR(dest8); - - for (i = 0; i < 4; i++) { - a1 = ip[0] >> UNIT_QUANT_SHIFT; - c1 = ip[1] >> UNIT_QUANT_SHIFT; - d1 = ip[2] >> UNIT_QUANT_SHIFT; - b1 = ip[3] >> UNIT_QUANT_SHIFT; - a1 += c1; - d1 -= b1; - e1 = (a1 - d1) >> 1; - b1 = e1 - b1; - c1 = e1 - c1; - a1 -= b1; - d1 += c1; - op[0] = a1; - op[1] = b1; - op[2] = c1; - op[3] = d1; - ip += 4; - op += 4; - } - - ip = output; - for (i = 0; i < 4; i++) { - a1 = ip[4 * 0]; - c1 = ip[4 * 1]; - d1 = ip[4 * 2]; - b1 = ip[4 * 3]; - a1 += c1; - d1 -= b1; - e1 = (a1 - d1) >> 1; - b1 = e1 - b1; - c1 = e1 - c1; - a1 -= b1; - d1 += c1; - dest[stride * 0] = highbd_clip_pixel_add(dest[stride * 0], a1, bd); - dest[stride * 1] = highbd_clip_pixel_add(dest[stride * 1], b1, bd); - dest[stride * 2] = highbd_clip_pixel_add(dest[stride * 2], c1, bd); - dest[stride * 3] = highbd_clip_pixel_add(dest[stride * 3], d1, bd); - - ip++; - dest++; - } -} - -void aom_highbd_iwht4x4_1_add_c(const tran_low_t *in, uint8_t *dest8, - int dest_stride, int bd) { - int i; - tran_low_t a1, e1; - tran_low_t tmp[4]; - const tran_low_t *ip = in; - tran_low_t *op = tmp; - uint16_t *dest = CONVERT_TO_SHORTPTR(dest8); - (void)bd; - - a1 = ip[0] >> UNIT_QUANT_SHIFT; - e1 = a1 >> 1; - a1 -= e1; - op[0] = a1; - op[1] = op[2] = op[3] = e1; - - ip = tmp; - for (i = 0; i < 4; i++) { - e1 = ip[0] >> 1; - a1 = ip[0] - e1; - dest[dest_stride * 0] = - highbd_clip_pixel_add(dest[dest_stride * 0], a1, bd); - dest[dest_stride * 1] = - highbd_clip_pixel_add(dest[dest_stride * 1], e1, bd); - dest[dest_stride * 2] = - highbd_clip_pixel_add(dest[dest_stride * 2], e1, bd); - dest[dest_stride * 3] = - highbd_clip_pixel_add(dest[dest_stride * 3], e1, bd); - ip++; - dest++; - } -}
diff --git a/aom_dsp/inv_txfm.h b/aom_dsp/inv_txfm.h deleted file mode 100644 index bd7e7d9..0000000 --- a/aom_dsp/inv_txfm.h +++ /dev/null
@@ -1,39 +0,0 @@ -/* - * Copyright (c) 2016, Alliance for Open Media. All rights reserved - * - * This source code is subject to the terms of the BSD 2 Clause License and - * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License - * was not distributed with this source code in the LICENSE file, you can - * obtain it at www.aomedia.org/license/software. If the Alliance for Open - * Media Patent License 1.0 was not distributed with this source code in the - * PATENTS file, you can obtain it at www.aomedia.org/license/patent. - */ - -#ifndef AOM_DSP_INV_TXFM_H_ -#define AOM_DSP_INV_TXFM_H_ - -#include <assert.h> - -#include "./aom_config.h" -#include "aom_dsp/txfm_common.h" -#include "av1/common/odintrin.h" -#include "aom_ports/mem.h" - -#ifdef __cplusplus -extern "C" { -#endif - -static INLINE tran_high_t dct_const_round_shift(tran_high_t input) { - return ROUND_POWER_OF_TWO(input, DCT_CONST_BITS); -} - -static INLINE uint16_t highbd_clip_pixel_add(uint16_t dest, tran_high_t trans, - int bd) { - return clip_pixel_highbd(dest + (int)trans, bd); -} - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // AOM_DSP_INV_TXFM_H_
diff --git a/av1/common/av1_inv_txfm1d.c b/av1/common/av1_inv_txfm1d.c index 1e566ef..8514dc6 100644 --- a/av1/common/av1_inv_txfm1d.c +++ b/av1/common/av1_inv_txfm1d.c
@@ -10,7 +10,6 @@ */ #include <stdlib.h> -#include "aom_dsp/inv_txfm.h" #include "av1/common/av1_inv_txfm1d.h" static void range_check_buf(int32_t stage, const int32_t *input,
diff --git a/av1/common/av1_inv_txfm2d.c b/av1/common/av1_inv_txfm2d.c index 9033278..1d7194e 100644 --- a/av1/common/av1_inv_txfm2d.c +++ b/av1/common/av1_inv_txfm2d.c
@@ -11,12 +11,98 @@ #include "./aom_dsp_rtcd.h" #include "./av1_rtcd.h" -#include "aom_dsp/inv_txfm.h" #include "av1/common/enums.h" #include "av1/common/av1_txfm.h" #include "av1/common/av1_inv_txfm1d.h" #include "av1/common/av1_inv_txfm1d_cfg.h" +void av1_highbd_iwht4x4_16_add_c(const tran_low_t *input, uint8_t *dest8, + int stride, int bd) { + /* 4-point reversible, orthonormal inverse Walsh-Hadamard in 3.5 adds, + 0.5 shifts per pixel. */ + int i; + tran_low_t output[16]; + tran_low_t a1, b1, c1, d1, e1; + const tran_low_t *ip = input; + tran_low_t *op = output; + uint16_t *dest = CONVERT_TO_SHORTPTR(dest8); + + for (i = 0; i < 4; i++) { + a1 = ip[0] >> UNIT_QUANT_SHIFT; + c1 = ip[1] >> UNIT_QUANT_SHIFT; + d1 = ip[2] >> UNIT_QUANT_SHIFT; + b1 = ip[3] >> UNIT_QUANT_SHIFT; + a1 += c1; + d1 -= b1; + e1 = (a1 - d1) >> 1; + b1 = e1 - b1; + c1 = e1 - c1; + a1 -= b1; + d1 += c1; + op[0] = a1; + op[1] = b1; + op[2] = c1; + op[3] = d1; + ip += 4; + op += 4; + } + + ip = output; + for (i = 0; i < 4; i++) { + a1 = ip[4 * 0]; + c1 = ip[4 * 1]; + d1 = ip[4 * 2]; + b1 = ip[4 * 3]; + a1 += c1; + d1 -= b1; + e1 = (a1 - d1) >> 1; + b1 = e1 - b1; + c1 = e1 - c1; + a1 -= b1; + d1 += c1; + dest[stride * 0] = highbd_clip_pixel_add(dest[stride * 0], a1, bd); + dest[stride * 1] = highbd_clip_pixel_add(dest[stride * 1], b1, bd); + dest[stride * 2] = highbd_clip_pixel_add(dest[stride * 2], c1, bd); + dest[stride * 3] = highbd_clip_pixel_add(dest[stride * 3], d1, bd); + + ip++; + dest++; + } +} + +void av1_highbd_iwht4x4_1_add_c(const tran_low_t *in, uint8_t *dest8, + int dest_stride, int bd) { + int i; + tran_low_t a1, e1; + tran_low_t tmp[4]; + const tran_low_t *ip = in; + tran_low_t *op = tmp; + uint16_t *dest = CONVERT_TO_SHORTPTR(dest8); + (void)bd; + + a1 = ip[0] >> UNIT_QUANT_SHIFT; + e1 = a1 >> 1; + a1 -= e1; + op[0] = a1; + op[1] = op[2] = op[3] = e1; + + ip = tmp; + for (i = 0; i < 4; i++) { + e1 = ip[0] >> 1; + a1 = ip[0] - e1; + dest[dest_stride * 0] = + highbd_clip_pixel_add(dest[dest_stride * 0], a1, bd); + dest[dest_stride * 1] = + highbd_clip_pixel_add(dest[dest_stride * 1], e1, bd); + dest[dest_stride * 2] = + highbd_clip_pixel_add(dest[dest_stride * 2], e1, bd); + dest[dest_stride * 3] = + highbd_clip_pixel_add(dest[dest_stride * 3], e1, bd); + ip++; + dest++; + } +} + static INLINE TxfmFunc inv_txfm_type_to_func(TXFM_TYPE txfm_type) { switch (txfm_type) { case TXFM_TYPE_DCT4: return av1_idct4_new;
diff --git a/av1/common/av1_rtcd_defs.pl b/av1/common/av1_rtcd_defs.pl index 3a9babe..eaa689d 100755 --- a/av1/common/av1_rtcd_defs.pl +++ b/av1/common/av1_rtcd_defs.pl
@@ -109,6 +109,9 @@ add_proto qw/void av1_inv_txfm_add/, "const tran_low_t *dqcoeff, uint8_t *dst, int stride, const TxfmParam *txfm_param"; specialize qw/av1_inv_txfm_add ssse3 avx2/; +add_proto qw/void av1_highbd_iwht4x4_1_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int bd"; +add_proto qw/void av1_highbd_iwht4x4_16_add/, "const tran_low_t *input, uint8_t *dest, int dest_stride, int bd"; + add_proto qw/void av1_inv_txfm2d_add_4x8/, "const int32_t *input, uint16_t *output, int stride, TX_TYPE tx_type, int bd"; add_proto qw/void av1_inv_txfm2d_add_8x4/, "const int32_t *input, uint16_t *output, int stride, TX_TYPE tx_type, int bd"; add_proto qw/void av1_inv_txfm2d_add_8x16/, "const int32_t *input, uint16_t *output, int stride, TX_TYPE tx_type, int bd";
diff --git a/av1/common/av1_txfm.h b/av1/common/av1_txfm.h index 55bcb35..fea10f2 100644 --- a/av1/common/av1_txfm.h +++ b/av1/common/av1_txfm.h
@@ -83,6 +83,11 @@ return round_shift(result_64, bit); } +static INLINE uint16_t highbd_clip_pixel_add(uint16_t dest, tran_high_t trans, + int bd) { + return clip_pixel_highbd(dest + (int)trans, bd); +} + typedef void (*TxfmFunc)(const int32_t *input, int32_t *output, int8_t cos_bit, const int8_t *stage_range);
diff --git a/av1/common/idct.c b/av1/common/idct.c index d6befcd..7c0f9b8 100644 --- a/av1/common/idct.c +++ b/av1/common/idct.c
@@ -13,9 +13,9 @@ #include "./aom_dsp_rtcd.h" #include "./av1_rtcd.h" -#include "aom_dsp/inv_txfm.h" #include "aom_ports/mem.h" #include "av1/common/av1_inv_txfm1d_cfg.h" +#include "av1/common/av1_txfm.h" #include "av1/common/blockd.h" #include "av1/common/enums.h" #include "av1/common/idct.h" @@ -33,9 +33,9 @@ static void highbd_iwht4x4_add(const tran_low_t *input, uint8_t *dest, int stride, int eob, int bd) { if (eob > 1) - aom_highbd_iwht4x4_16_add(input, dest, stride, bd); + av1_highbd_iwht4x4_16_add(input, dest, stride, bd); else - aom_highbd_iwht4x4_1_add(input, dest, stride, bd); + av1_highbd_iwht4x4_1_add(input, dest, stride, bd); } static const int32_t *cast_to_int32(const tran_low_t *input) {
diff --git a/av1/common/idct.h b/av1/common/idct.h index ab6a281..0fc6575 100644 --- a/av1/common/idct.h +++ b/av1/common/idct.h
@@ -16,7 +16,6 @@ #include "av1/common/blockd.h" #include "av1/common/common.h" #include "av1/common/enums.h" -#include "aom_dsp/inv_txfm.h" #include "aom_dsp/txfm_common.h" #ifdef __cplusplus
diff --git a/av1/encoder/av1_fwd_txfm1d.c b/av1/encoder/av1_fwd_txfm1d.c index 18308f3..b92b346 100644 --- a/av1/encoder/av1_fwd_txfm1d.c +++ b/av1/encoder/av1_fwd_txfm1d.c
@@ -10,7 +10,6 @@ */ #include <stdlib.h> -#include "aom_dsp/inv_txfm.h" #include "av1/encoder/av1_fwd_txfm1d.h" #if CONFIG_COEFFICIENT_RANGE_CHECKING
diff --git a/test/fwht4x4_test.cc b/test/fwht4x4_test.cc index 72a2982..2a326dc 100644 --- a/test/fwht4x4_test.cc +++ b/test/fwht4x4_test.cc
@@ -44,11 +44,11 @@ } void iwht4x4_10(const tran_low_t *in, uint8_t *out, int stride) { - aom_highbd_iwht4x4_16_add_c(in, out, stride, 10); + av1_highbd_iwht4x4_16_add_c(in, out, stride, 10); } void iwht4x4_12(const tran_low_t *in, uint8_t *out, int stride) { - aom_highbd_iwht4x4_16_add_c(in, out, stride, 12); + av1_highbd_iwht4x4_16_add_c(in, out, stride, 12); } class Trans4x4WHT : public libaom_test::TransformTestBase,