- Move filter look-up functions to corresponding optimization modules.
BUG=webm:1296
Change-Id: I87f399609052db2dbc7e5a590afb08b82e3fa89f
AV1_COMMON_SRCS-yes += common/av1_fwd_txfm2d_cfg.h
AV1_COMMON_SRCS-yes += common/av1_inv_txfm2d.c
AV1_COMMON_SRCS-yes += common/av1_inv_txfm2d_cfg.h
+AV1_COMMON_SRCS-$(HAVE_SSSE3) += common/x86/convolve_filter_ssse3.h
AV1_COMMON_SRCS-$(HAVE_SSSE3) += common/x86/av1_convolve_ssse3.c
AV1_COMMON_SRCS-$(HAVE_SSSE3) += common/x86/av1_convolve_filters_ssse3.c
ifeq ($(CONFIG_AOM_HIGHBITDEPTH),yes)
+AV1_COMMON_SRCS-$(HAVE_SSE4_1) += common/x86/highbd_convolve_filter_sse4.h
AV1_COMMON_SRCS-$(HAVE_SSE4_1) += common/x86/av1_highbd_convolve_sse4.c
AV1_COMMON_SRCS-$(HAVE_SSE4_1) += common/x86/av1_highbd_convolve_filters_sse4.c
endif
};
#if USE_TEMPORALFILTER_12TAP
-DECLARE_ALIGNED(16, static const int16_t,
- sub_pel_filters_temporalfilter_12[SUBPEL_SHIFTS][12]) = {
+DECLARE_ALIGNED(16, const int16_t,
+ av1_sub_pel_filters_temporalfilter_12[SUBPEL_SHIFTS][12]) = {
// intfilt 0.8
{ 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0 },
{ 0, 1, -1, 3, -7, 127, 8, -4, 2, -1, 0, 0 },
};
#endif // CONFIG_EXT_INTRA
-DECLARE_ALIGNED(256, static const int16_t,
- sub_pel_filters_10sharp[SUBPEL_SHIFTS][10]) = {
+DECLARE_ALIGNED(256, const int16_t,
+ av1_sub_pel_filters_10sharp[SUBPEL_SHIFTS][10]) = {
// intfilt 0.77
{ 0, 0, 0, 0, 128, 0, 0, 0, 0, 0 },
{ 0, -1, 3, -6, 127, 8, -4, 2, -1, 0 },
{ 0, 2, -12, 37, 94, 14, -9, 2 }, { 0, 2, -11, 31, 95, 19, -10, 2 },
};
-DECLARE_ALIGNED(16, static const int16_t,
- sub_pel_filters_12sharp[SUBPEL_SHIFTS][12]) = {
+DECLARE_ALIGNED(16, const int16_t,
+ av1_sub_pel_filters_12sharp[SUBPEL_SHIFTS][12]) = {
// intfilt 0.85
{ 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0 },
{ 0, 1, -2, 3, -7, 127, 8, -4, 2, -1, 1, 0 },
av1_interp_filter_params_list[SWITCHABLE_FILTERS + 1] = {
{ (const int16_t *)sub_pel_filters_8, SUBPEL_TAPS, SUBPEL_SHIFTS },
{ (const int16_t *)sub_pel_filters_8smooth, SUBPEL_TAPS, SUBPEL_SHIFTS },
- { (const int16_t *)sub_pel_filters_10sharp, 10, SUBPEL_SHIFTS },
+ { (const int16_t *)av1_sub_pel_filters_10sharp, 10, SUBPEL_SHIFTS },
{ (const int16_t *)sub_pel_filters_8smooth2, SUBPEL_TAPS, SUBPEL_SHIFTS },
- { (const int16_t *)sub_pel_filters_12sharp, 12, SUBPEL_SHIFTS },
+ { (const int16_t *)av1_sub_pel_filters_12sharp, 12, SUBPEL_SHIFTS },
{ (const int16_t *)bilinear_filters, SUBPEL_TAPS, SUBPEL_SHIFTS }
};
#else
#if USE_TEMPORALFILTER_12TAP
static const InterpFilterParams av1_interp_temporalfilter_12tap = {
- (const int16_t *)sub_pel_filters_temporalfilter_12, 12, SUBPEL_SHIFTS
+ (const int16_t *)av1_sub_pel_filters_temporalfilter_12, 12, SUBPEL_SHIFTS
};
#endif // USE_TEMPORALFILTER_12TAP
return (const int16_t *)av1_interp_filter_params_list[interp_filter]
.filter_ptr;
}
-
-SubpelFilterCoeffs av1_get_subpel_filter_signal_dir(const InterpFilterParams p,
- int index) {
-#if CONFIG_EXT_INTERP && HAVE_SSSE3
- if (p.filter_ptr == (const int16_t *)sub_pel_filters_12sharp) {
- return &sub_pel_filters_12sharp_signal_dir[index][0];
- }
- if (p.filter_ptr == (const int16_t *)sub_pel_filters_10sharp) {
- return &sub_pel_filters_10sharp_signal_dir[index][0];
- }
-#endif
-#if USE_TEMPORALFILTER_12TAP && HAVE_SSSE3
- if (p.filter_ptr == (const int16_t *)sub_pel_filters_temporalfilter_12) {
- return &sub_pel_filters_temporalfilter_12_signal_dir[index][0];
- }
-#endif
- (void)p;
- (void)index;
- return NULL;
-}
-
-SubpelFilterCoeffs av1_get_subpel_filter_ver_signal_dir(
- const InterpFilterParams p, int index) {
-#if CONFIG_EXT_INTERP && HAVE_SSSE3
- if (p.filter_ptr == (const int16_t *)sub_pel_filters_12sharp) {
- return &sub_pel_filters_12sharp_ver_signal_dir[index][0];
- }
- if (p.filter_ptr == (const int16_t *)sub_pel_filters_10sharp) {
- return &sub_pel_filters_10sharp_ver_signal_dir[index][0];
- }
-#endif
-#if USE_TEMPORALFILTER_12TAP && HAVE_SSSE3
- if (p.filter_ptr == (const int16_t *)sub_pel_filters_temporalfilter_12) {
- return &sub_pel_filters_temporalfilter_12_ver_signal_dir[index][0];
- }
-#endif
- (void)p;
- (void)index;
- return NULL;
-}
-
-#if CONFIG_AOM_HIGHBITDEPTH
-HbdSubpelFilterCoeffs av1_hbd_get_subpel_filter_ver_signal_dir(
- const InterpFilterParams p, int index) {
-#if CONFIG_EXT_INTERP && HAVE_SSE4_1
- if (p.filter_ptr == (const int16_t *)sub_pel_filters_12sharp) {
- return &sub_pel_filters_12sharp_highbd_ver_signal_dir[index][0];
- }
- if (p.filter_ptr == (const int16_t *)sub_pel_filters_10sharp) {
- return &sub_pel_filters_10sharp_highbd_ver_signal_dir[index][0];
- }
-#endif
-#if USE_TEMPORALFILTER_12TAP && HAVE_SSE4_1
- if (p.filter_ptr == (const int16_t *)sub_pel_filters_temporalfilter_12) {
- return &sub_pel_filters_temporalfilter_12_highbd_ver_signal_dir[index][0];
- }
-#endif
- (void)p;
- (void)index;
- return NULL;
-}
-#endif
}
#if USE_TEMPORALFILTER_12TAP
-extern const int8_t sub_pel_filters_temporalfilter_12_signal_dir[15][2][16];
-extern const int8_t sub_pel_filters_temporalfilter_12_ver_signal_dir[15][6][16];
-#if CONFIG_AOM_HIGHBITDEPTH
-extern const int16_t sub_pel_filters_temporalfilter_12_highbd_ver_signal_dir[15]
- [6]
- [8];
-#endif
+DECLARE_ALIGNED(16, extern const int16_t,
+ av1_sub_pel_filters_temporalfilter_12[SUBPEL_SHIFTS][12]);
#endif
#if CONFIG_EXT_INTERP
-extern const int8_t sub_pel_filters_12sharp_signal_dir[15][2][16];
-extern const int8_t sub_pel_filters_10sharp_signal_dir[15][2][16];
-extern const int8_t sub_pel_filters_12sharp_ver_signal_dir[15][6][16];
-extern const int8_t sub_pel_filters_10sharp_ver_signal_dir[15][6][16];
-#if CONFIG_AOM_HIGHBITDEPTH
-extern const int16_t sub_pel_filters_12sharp_highbd_ver_signal_dir[15][6][8];
-extern const int16_t sub_pel_filters_10sharp_highbd_ver_signal_dir[15][6][8];
-#endif
+DECLARE_ALIGNED(256, extern const int16_t,
+ av1_sub_pel_filters_10sharp[SUBPEL_SHIFTS][10]);
+DECLARE_ALIGNED(16, extern const int16_t,
+ av1_sub_pel_filters_12sharp[SUBPEL_SHIFTS][12]);
#endif
typedef const int8_t (*SubpelFilterCoeffs)[16];
#if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int8_t,
- sub_pel_filters_10sharp_signal_dir[15][2][16]) = {
+ av1_sub_pel_filters_10sharp_signal_dir[15][2][16]) = {
{
{ 0, 0, -1, 3, -6, 127, 8, -4, 2, -1, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, -1, 3, -6, 127, 8, -4, 2, -1, 0, 0, 0, 0 },
#endif
#if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int8_t,
- sub_pel_filters_10sharp_ver_signal_dir[15][6][16]) = {
+ av1_sub_pel_filters_10sharp_ver_signal_dir[15][6][16]) = {
{
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3 },
#endif
#if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int8_t,
- sub_pel_filters_12sharp_signal_dir[15][2][16]) = {
+ av1_sub_pel_filters_12sharp_signal_dir[15][2][16]) = {
{
{ 0, 1, -2, 3, -7, 127, 8, -4, 2, -1, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 1, -2, 3, -7, 127, 8, -4, 2, -1, 1, 0, 0, 0 },
#endif
#if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int8_t,
- sub_pel_filters_12sharp_ver_signal_dir[15][6][16]) = {
+ av1_sub_pel_filters_12sharp_ver_signal_dir[15][6][16]) = {
{
{ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 },
{ -2, 3, -2, 3, -2, 3, -2, 3, -2, 3, -2, 3, -2, 3, -2, 3 },
#endif
#if USE_TEMPORALFILTER_12TAP
DECLARE_ALIGNED(16, const int8_t,
- sub_pel_filters_temporalfilter_12_signal_dir[15][2][16]) = {
+ av1_sub_pel_filters_temporalfilter_12_signal_dir[15][2][16]) = {
{
{ 0, 1, -1, 3, -7, 127, 8, -4, 2, -1, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 1, -1, 3, -7, 127, 8, -4, 2, -1, 0, 0, 0, 0 },
#endif
#if USE_TEMPORALFILTER_12TAP
DECLARE_ALIGNED(16, const int8_t,
- sub_pel_filters_temporalfilter_12_ver_signal_dir[15][6][16]) = {
+ av1_sub_pel_filters_temporalfilter_12_ver_signal_dir[15][6]
+ [16]) = {
{
{ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 },
{ -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3 },
#include <tmmintrin.h>
#include "./av1_rtcd.h"
-#include "av1/common/filter.h"
+#include "av1/common/x86/convolve_filter_ssse3.h"
#define WIDTH_BOUND (16)
#define HEIGHT_BOUND (16)
+static SubpelFilterCoeffs get_subpel_filter_signal_dir(
+ const InterpFilterParams p, int index) {
+#if CONFIG_EXT_INTERP
+ if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_12sharp) {
+ return &av1_sub_pel_filters_12sharp_signal_dir[index][0];
+ }
+ if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_10sharp) {
+ return &av1_sub_pel_filters_10sharp_signal_dir[index][0];
+ }
+#endif
+#if USE_TEMPORALFILTER_12TAP
+ if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_temporalfilter_12) {
+ return &av1_sub_pel_filters_temporalfilter_12_signal_dir[index][0];
+ }
+#endif
+ (void)p;
+ (void)index;
+ return NULL;
+}
+
+static SubpelFilterCoeffs get_subpel_filter_ver_signal_dir(
+ const InterpFilterParams p, int index) {
+#if CONFIG_EXT_INTERP
+ if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_12sharp) {
+ return &av1_sub_pel_filters_12sharp_ver_signal_dir[index][0];
+ }
+ if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_10sharp) {
+ return &av1_sub_pel_filters_10sharp_ver_signal_dir[index][0];
+ }
+#endif
+#if USE_TEMPORALFILTER_12TAP
+ if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_temporalfilter_12) {
+ return &av1_sub_pel_filters_temporalfilter_12_ver_signal_dir[index][0];
+ }
+#endif
+ (void)p;
+ (void)index;
+ return NULL;
+}
+
static INLINE void transpose_4x8(const __m128i *in, __m128i *out) {
__m128i t0, t1;
return;
}
- hCoeffs = av1_get_subpel_filter_signal_dir(filter_params, subpel_x_q4 - 1);
- vCoeffs =
- av1_get_subpel_filter_ver_signal_dir(filter_params, subpel_x_q4 - 1);
+ hCoeffs = get_subpel_filter_signal_dir(filter_params, subpel_x_q4 - 1);
+ vCoeffs = get_subpel_filter_ver_signal_dir(filter_params, subpel_x_q4 - 1);
if (!hCoeffs || !vCoeffs) {
av1_convolve_horiz_c(src, src_stride, dst, dst_stride, w, h, filter_params,
return;
}
- vCoeffs =
- av1_get_subpel_filter_ver_signal_dir(filter_params, subpel_y_q4 - 1);
+ vCoeffs = get_subpel_filter_ver_signal_dir(filter_params, subpel_y_q4 - 1);
if (!vCoeffs) {
av1_convolve_vert_c(src, src_stride, dst, dst_stride, w, h, filter_params,
#if CONFIG_AOM_HIGHBITDEPTH
#if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int16_t,
- sub_pel_filters_10sharp_highbd_ver_signal_dir[15][6][8]) = {
+ av1_sub_pel_filters_10sharp_highbd_ver_signal_dir[15][6][8]) = {
{
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ -1, 3, -1, 3, -1, 3, -1, 3 },
#if CONFIG_AOM_HIGHBITDEPTH
#if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int16_t,
- sub_pel_filters_12sharp_highbd_ver_signal_dir[15][6][8]) = {
+ av1_sub_pel_filters_12sharp_highbd_ver_signal_dir[15][6][8]) = {
{
{ 0, 1, 0, 1, 0, 1, 0, 1 },
{ -2, 3, -2, 3, -2, 3, -2, 3 },
#endif
#if CONFIG_AOM_HIGHBITDEPTH
#if USE_TEMPORALFILTER_12TAP
-DECLARE_ALIGNED(16, const int16_t,
- sub_pel_filters_temporalfilter_12_highbd_ver_signal_dir[15][6]
- [8]) = {
+DECLARE_ALIGNED(
+ 16, const int16_t,
+ av1_sub_pel_filters_temporalfilter_12_highbd_ver_signal_dir[15][6][8]) = {
{
{ 0, 1, 0, 1, 0, 1, 0, 1 },
{ -1, 3, -1, 3, -1, 3, -1, 3 },
#include <smmintrin.h>
#include "./av1_rtcd.h"
-#include "av1/common/filter.h"
+#include "av1/common/x86/highbd_convolve_filter_sse4.h"
typedef void (*TransposeSave)(const int width, int pixelsNum, uint32_t *src,
int src_stride, uint16_t *dst, int dst_stride,
int bd);
+static HbdSubpelFilterCoeffs hbd_get_subpel_filter_ver_signal_dir(
+ const InterpFilterParams p, int index) {
+#if CONFIG_EXT_INTERP
+ if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_12sharp) {
+ return &av1_sub_pel_filters_12sharp_highbd_ver_signal_dir[index][0];
+ }
+ if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_10sharp) {
+ return &av1_sub_pel_filters_10sharp_highbd_ver_signal_dir[index][0];
+ }
+#endif
+#if USE_TEMPORALFILTER_12TAP
+ if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_temporalfilter_12) {
+ return &av1_sub_pel_filters_temporalfilter_12_highbd_ver_signal_dir[index]
+ [0];
+ }
+#endif
+ (void)p;
+ (void)index;
+ return NULL;
+}
+
// pixelsNum 0: write all 4 pixels
// 1/2/3: residual pixels 1/2/3
static void writePixel(__m128i *u, int width, int pixelsNum, uint16_t *dst,
}
vCoeffs =
- av1_hbd_get_subpel_filter_ver_signal_dir(filter_params, subpel_x_q4 - 1);
+ hbd_get_subpel_filter_ver_signal_dir(filter_params, subpel_x_q4 - 1);
if (!vCoeffs) {
av1_highbd_convolve_horiz_c(src, src_stride, dst, dst_stride, w, h,
filter_params, subpel_x_q4, x_step_q4, avg, bd);
}
vCoeffs =
- av1_hbd_get_subpel_filter_ver_signal_dir(filter_params, subpel_y_q4 - 1);
+ hbd_get_subpel_filter_ver_signal_dir(filter_params, subpel_y_q4 - 1);
if (!vCoeffs) {
av1_highbd_convolve_vert_c(src, src_stride, dst, dst_stride, w, h,
filter_params, subpel_y_q4, y_step_q4, avg, bd);
--- /dev/null
+/*
+ * 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 AV1_COMMON_X86_CONVOLVE_FILTER_SSSE3_H_
+#define AV1_COMMON_X86_CONVOLVE_FILTER_SSSE3_H_
+
+#include "./aom_config.h"
+#include "av1/common/filter.h"
+
+#if USE_TEMPORALFILTER_12TAP
+DECLARE_ALIGNED(16, extern const int8_t,
+ av1_sub_pel_filters_temporalfilter_12_signal_dir[15][2][16]);
+DECLARE_ALIGNED(16, extern const int8_t,
+ av1_sub_pel_filters_temporalfilter_12_ver_signal_dir[15][6]
+ [16]);
+#endif
+
+#if CONFIG_EXT_INTERP
+DECLARE_ALIGNED(16, extern const int8_t,
+ av1_sub_pel_filters_12sharp_signal_dir[15][2][16]);
+DECLARE_ALIGNED(16, extern const int8_t,
+ av1_sub_pel_filters_10sharp_signal_dir[15][2][16]);
+DECLARE_ALIGNED(16, extern const int8_t,
+ av1_sub_pel_filters_12sharp_ver_signal_dir[15][6][16]);
+DECLARE_ALIGNED(16, extern const int8_t,
+ av1_sub_pel_filters_10sharp_ver_signal_dir[15][6][16]);
+#endif
+
+#endif // AV1_COMMON_X86_CONVOLVE_FILTER_SSSE3_H_
--- /dev/null
+/*
+ * 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 AV1_COMMON_X86_HIGHBD_CONVOLVE_FILTER_SSE4_H_
+#define AV1_COMMON_X86_HIGHBD_CONVOLVE_FILTER_SSE4_H_
+
+#include "./aom_config.h"
+#include "av1/common/filter.h"
+
+#if USE_TEMPORALFILTER_12TAP
+DECLARE_ALIGNED(16, extern const int16_t,
+ av1_sub_pel_filters_temporalfilter_12_highbd_ver_signal_dir[15]
+ [6]
+ [8]);
+#endif
+
+#if CONFIG_EXT_INTERP
+DECLARE_ALIGNED(16, extern const int16_t,
+ av1_sub_pel_filters_12sharp_highbd_ver_signal_dir[15][6][8]);
+DECLARE_ALIGNED(16, extern const int16_t,
+ av1_sub_pel_filters_10sharp_highbd_ver_signal_dir[15][6][8]);
+#endif
+
+#endif // AV1_COMMON_X86_HIGHBD_CONVOLVE_FILTER_SSE4_H_