Commit 9c2d401c authored by Angie Chiang's avatar Angie Chiang Committed by Gerrit Code Review
Browse files

Merge "Simplify file dependencies of SIMD implementation of interpolation filters" into nextgenv2

parents cb603790 b9ba5c25
...@@ -72,13 +72,11 @@ AV1_COMMON_SRCS-yes += common/av1_fwd_txfm2d.c ...@@ -72,13 +72,11 @@ AV1_COMMON_SRCS-yes += common/av1_fwd_txfm2d.c
AV1_COMMON_SRCS-yes += common/av1_fwd_txfm2d_cfg.h 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.c
AV1_COMMON_SRCS-yes += common/av1_inv_txfm2d_cfg.h 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_ssse3.c
AV1_COMMON_SRCS-$(HAVE_SSSE3) += common/x86/av1_convolve_filters_ssse3.c AV1_COMMON_SRCS-$(HAVE_SSSE3) += common/x86/av1_convolve_filters_ssse3.h
ifeq ($(CONFIG_AOM_HIGHBITDEPTH),yes) 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_sse4.c
AV1_COMMON_SRCS-$(HAVE_SSE4_1) += common/x86/av1_highbd_convolve_filters_sse4.c AV1_COMMON_SRCS-$(HAVE_SSE4_1) += common/x86/av1_highbd_convolve_filters_sse4.h
endif endif
AV1_COMMON_SRCS-yes += common/av1_convolve.c AV1_COMMON_SRCS-yes += common/av1_convolve.c
AV1_COMMON_SRCS-yes += common/av1_convolve.h AV1_COMMON_SRCS-yes += common/av1_convolve.h
......
...@@ -26,8 +26,8 @@ DECLARE_ALIGNED(256, static const InterpKernel, ...@@ -26,8 +26,8 @@ DECLARE_ALIGNED(256, static const InterpKernel,
}; };
#if USE_TEMPORALFILTER_12TAP #if USE_TEMPORALFILTER_12TAP
DECLARE_ALIGNED(16, const int16_t, DECLARE_ALIGNED(16, static const int16_t,
av1_sub_pel_filters_temporalfilter_12[SUBPEL_SHIFTS][12]) = { sub_pel_filters_temporalfilter_12[SUBPEL_SHIFTS][12]) = {
// intfilt 0.8 // intfilt 0.8
{ 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0 },
{ 0, 1, -1, 3, -7, 127, 8, -4, 2, -1, 0, 0 }, { 0, 1, -1, 3, -7, 127, 8, -4, 2, -1, 0, 0 },
...@@ -77,8 +77,8 @@ DECLARE_ALIGNED(256, static const InterpKernel, ...@@ -77,8 +77,8 @@ DECLARE_ALIGNED(256, static const InterpKernel,
}; };
#endif // CONFIG_EXT_INTRA #endif // CONFIG_EXT_INTRA
DECLARE_ALIGNED(256, const int16_t, DECLARE_ALIGNED(256, static const int16_t,
av1_sub_pel_filters_10sharp[SUBPEL_SHIFTS][10]) = { sub_pel_filters_10sharp[SUBPEL_SHIFTS][10]) = {
// intfilt 0.77 // intfilt 0.77
{ 0, 0, 0, 0, 128, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 128, 0, 0, 0, 0, 0 },
{ 0, -1, 3, -6, 127, 8, -4, 2, -1, 0 }, { 0, -1, 3, -6, 127, 8, -4, 2, -1, 0 },
...@@ -124,8 +124,8 @@ DECLARE_ALIGNED(256, static const InterpKernel, ...@@ -124,8 +124,8 @@ DECLARE_ALIGNED(256, static const InterpKernel,
{ 0, 2, -12, 37, 94, 14, -9, 2 }, { 0, 2, -11, 31, 95, 19, -10, 2 }, { 0, 2, -12, 37, 94, 14, -9, 2 }, { 0, 2, -11, 31, 95, 19, -10, 2 },
}; };
DECLARE_ALIGNED(16, const int16_t, DECLARE_ALIGNED(16, static const int16_t,
av1_sub_pel_filters_12sharp[SUBPEL_SHIFTS][12]) = { sub_pel_filters_12sharp[SUBPEL_SHIFTS][12]) = {
// intfilt 0.85 // intfilt 0.85
{ 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0 },
{ 0, 1, -2, 3, -7, 127, 8, -4, 2, -1, 1, 0 }, { 0, 1, -2, 3, -7, 127, 8, -4, 2, -1, 1, 0 },
...@@ -198,26 +198,37 @@ const InterpKernel *av1_intra_filter_kernels[INTRA_FILTERS] = { ...@@ -198,26 +198,37 @@ const InterpKernel *av1_intra_filter_kernels[INTRA_FILTERS] = {
#if CONFIG_EXT_INTERP #if CONFIG_EXT_INTERP
static const InterpFilterParams static const InterpFilterParams
av1_interp_filter_params_list[SWITCHABLE_FILTERS + 1] = { 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_8, SUBPEL_TAPS, SUBPEL_SHIFTS,
{ (const int16_t *)sub_pel_filters_8smooth, SUBPEL_TAPS, SUBPEL_SHIFTS }, EIGHTTAP_REGULAR },
{ (const int16_t *)av1_sub_pel_filters_10sharp, 10, SUBPEL_SHIFTS }, { (const int16_t *)sub_pel_filters_8smooth, SUBPEL_TAPS, SUBPEL_SHIFTS,
{ (const int16_t *)sub_pel_filters_8smooth2, SUBPEL_TAPS, SUBPEL_SHIFTS }, EIGHTTAP_SMOOTH },
{ (const int16_t *)av1_sub_pel_filters_12sharp, 12, SUBPEL_SHIFTS }, { (const int16_t *)sub_pel_filters_10sharp, 10, SUBPEL_SHIFTS,
{ (const int16_t *)bilinear_filters, SUBPEL_TAPS, SUBPEL_SHIFTS } MULTITAP_SHARP },
{ (const int16_t *)sub_pel_filters_8smooth2, SUBPEL_TAPS, SUBPEL_SHIFTS,
EIGHTTAP_SMOOTH2 },
{ (const int16_t *)sub_pel_filters_12sharp, 12, SUBPEL_SHIFTS,
MULTITAP_SHARP2 },
{ (const int16_t *)bilinear_filters, SUBPEL_TAPS, SUBPEL_SHIFTS,
BILINEAR }
}; };
#else #else
static const InterpFilterParams static const InterpFilterParams
av1_interp_filter_params_list[SWITCHABLE_FILTERS + 1] = { 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_8, SUBPEL_TAPS, SUBPEL_SHIFTS,
{ (const int16_t *)sub_pel_filters_8smooth, SUBPEL_TAPS, SUBPEL_SHIFTS }, EIGHTTAP_REGULAR },
{ (const int16_t *)sub_pel_filters_8sharp, SUBPEL_TAPS, SUBPEL_SHIFTS }, { (const int16_t *)sub_pel_filters_8smooth, SUBPEL_TAPS, SUBPEL_SHIFTS,
{ (const int16_t *)bilinear_filters, SUBPEL_TAPS, SUBPEL_SHIFTS } EIGHTTAP_SMOOTH },
{ (const int16_t *)sub_pel_filters_8sharp, SUBPEL_TAPS, SUBPEL_SHIFTS,
MULTITAP_SHARP },
{ (const int16_t *)bilinear_filters, SUBPEL_TAPS, SUBPEL_SHIFTS,
BILINEAR }
}; };
#endif // CONFIG_EXT_INTERP #endif // CONFIG_EXT_INTERP
#if USE_TEMPORALFILTER_12TAP #if USE_TEMPORALFILTER_12TAP
static const InterpFilterParams av1_interp_temporalfilter_12tap = { static const InterpFilterParams av1_interp_temporalfilter_12tap = {
(const int16_t *)av1_sub_pel_filters_temporalfilter_12, 12, SUBPEL_SHIFTS (const int16_t *)sub_pel_filters_temporalfilter_12, 12, SUBPEL_SHIFTS,
TEMPORALFILTER_12TAP
}; };
#endif // USE_TEMPORALFILTER_12TAP #endif // USE_TEMPORALFILTER_12TAP
......
...@@ -73,6 +73,7 @@ typedef struct InterpFilterParams { ...@@ -73,6 +73,7 @@ typedef struct InterpFilterParams {
const int16_t *filter_ptr; const int16_t *filter_ptr;
uint16_t taps; uint16_t taps;
uint16_t subpel_shifts; uint16_t subpel_shifts;
InterpFilter interp_filter;
} InterpFilterParams; } InterpFilterParams;
InterpFilterParams av1_get_interp_filter_params( InterpFilterParams av1_get_interp_filter_params(
...@@ -91,33 +92,6 @@ static INLINE int av1_is_interpolating_filter( ...@@ -91,33 +92,6 @@ static INLINE int av1_is_interpolating_filter(
return (ip.filter_ptr[ip.taps / 2 - 1] == 128); return (ip.filter_ptr[ip.taps / 2 - 1] == 128);
} }
#if USE_TEMPORALFILTER_12TAP
DECLARE_ALIGNED(16, extern const int16_t,
av1_sub_pel_filters_temporalfilter_12[SUBPEL_SHIFTS][12]);
#endif
#if CONFIG_EXT_INTERP
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_AOM_HIGHBITDEPTH
typedef const int16_t (*HbdSubpelFilterCoeffs)[8];
#endif
SubpelFilterCoeffs av1_get_subpel_filter_signal_dir(const InterpFilterParams p,
int index);
SubpelFilterCoeffs av1_get_subpel_filter_ver_signal_dir(
const InterpFilterParams p, int index);
#if CONFIG_AOM_HIGHBITDEPTH
HbdSubpelFilterCoeffs av1_hbd_get_subpel_filter_ver_signal_dir(
const InterpFilterParams p, int index);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} // extern "C" } // extern "C"
#endif #endif
......
/* /*
* Copyright (c) 2016 The WebM project authors. All Rights Reserved. * Copyright (c) 2016, Alliance for Open Media. All rights reserved
* *
* Use of this source code is governed by a BSD-style license * This source code is subject to the terms of the BSD 2 Clause License and
* that can be found in the LICENSE file in the root of the source * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
* tree. An additional intellectual property rights grant can be found * was not distributed with this source code in the LICENSE file, you can
* in the file PATENTS. All contributing project authors may * obtain it at www.aomedia.org/license/software. If the Alliance for Open
* be found in the AUTHORS file in the root of the source tree. * 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_AV1_CONVOLVE_FILTERS_SSSE3_H_
#define AV1_COMMON_X86_AV1_CONVOLVE_FILTERS_SSSE3_H_
#include "./aom_config.h" #include "./aom_config.h"
#include "av1/common/filter.h"
#if CONFIG_EXT_INTERP #if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int8_t, DECLARE_ALIGNED(16, static const int8_t,
av1_sub_pel_filters_10sharp_signal_dir[15][2][16]) = { 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, -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 }, { 0, 0, 0, 0, -1, 3, -6, 127, 8, -4, 2, -1, 0, 0, 0, 0 },
...@@ -76,8 +80,8 @@ DECLARE_ALIGNED(16, const int8_t, ...@@ -76,8 +80,8 @@ DECLARE_ALIGNED(16, const int8_t,
}; };
#endif #endif
#if CONFIG_EXT_INTERP #if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int8_t, DECLARE_ALIGNED(16, static const int8_t,
av1_sub_pel_filters_10sharp_ver_signal_dir[15][6][16]) = { 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 }, { 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 }, { -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3 },
...@@ -227,8 +231,8 @@ DECLARE_ALIGNED(16, const int8_t, ...@@ -227,8 +231,8 @@ DECLARE_ALIGNED(16, const int8_t,
}; };
#endif #endif
#if CONFIG_EXT_INTERP #if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int8_t, DECLARE_ALIGNED(16, static const int8_t,
av1_sub_pel_filters_12sharp_signal_dir[15][2][16]) = { 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, 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 }, { 0, 0, 0, 1, -2, 3, -7, 127, 8, -4, 2, -1, 1, 0, 0, 0 },
...@@ -292,8 +296,8 @@ DECLARE_ALIGNED(16, const int8_t, ...@@ -292,8 +296,8 @@ DECLARE_ALIGNED(16, const int8_t,
}; };
#endif #endif
#if CONFIG_EXT_INTERP #if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int8_t, DECLARE_ALIGNED(16, static const int8_t,
av1_sub_pel_filters_12sharp_ver_signal_dir[15][6][16]) = { 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 }, { 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 }, { -2, 3, -2, 3, -2, 3, -2, 3, -2, 3, -2, 3, -2, 3, -2, 3 },
...@@ -443,8 +447,8 @@ DECLARE_ALIGNED(16, const int8_t, ...@@ -443,8 +447,8 @@ DECLARE_ALIGNED(16, const int8_t,
}; };
#endif #endif
#if USE_TEMPORALFILTER_12TAP #if USE_TEMPORALFILTER_12TAP
DECLARE_ALIGNED(16, const int8_t, DECLARE_ALIGNED(16, static const int8_t,
av1_sub_pel_filters_temporalfilter_12_signal_dir[15][2][16]) = { 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, 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 }, { 0, 0, 0, 1, -1, 3, -7, 127, 8, -4, 2, -1, 0, 0, 0, 0 },
...@@ -508,9 +512,8 @@ DECLARE_ALIGNED(16, const int8_t, ...@@ -508,9 +512,8 @@ DECLARE_ALIGNED(16, const int8_t,
}; };
#endif #endif
#if USE_TEMPORALFILTER_12TAP #if USE_TEMPORALFILTER_12TAP
DECLARE_ALIGNED(16, const int8_t, DECLARE_ALIGNED(16, static const int8_t,
av1_sub_pel_filters_temporalfilter_12_ver_signal_dir[15][6] sub_pel_filters_temporalfilter_12_ver_signal_dir[15][6][16]) = {
[16]) = {
{ {
{ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }, { 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 }, { -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3, -1, 3 },
...@@ -659,3 +662,4 @@ DECLARE_ALIGNED(16, const int8_t, ...@@ -659,3 +662,4 @@ DECLARE_ALIGNED(16, const int8_t,
}, },
}; };
#endif #endif
#endif // AV1_COMMON_X86_AV1_CONVOLVE_FILTERS_SSSE3_H_
...@@ -12,25 +12,29 @@ ...@@ -12,25 +12,29 @@
#include <assert.h> #include <assert.h>
#include <tmmintrin.h> #include <tmmintrin.h>
#include "./aom_config.h"
#include "./av1_rtcd.h" #include "./av1_rtcd.h"
#include "av1/common/x86/convolve_filter_ssse3.h" #include "av1/common/filter.h"
#include "av1/common/x86/av1_convolve_filters_ssse3.h"
#define WIDTH_BOUND (16) #define WIDTH_BOUND (16)
#define HEIGHT_BOUND (16) #define HEIGHT_BOUND (16)
static SubpelFilterCoeffs get_subpel_filter_signal_dir( typedef const int8_t (*SubpelFilterCoeffs)[16];
const InterpFilterParams p, int index) {
static INLINE SubpelFilterCoeffs
get_subpel_filter_signal_dir(const InterpFilterParams p, int index) {
#if CONFIG_EXT_INTERP #if CONFIG_EXT_INTERP
if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_12sharp) { if (p.interp_filter == MULTITAP_SHARP2) {
return &av1_sub_pel_filters_12sharp_signal_dir[index][0]; return &sub_pel_filters_12sharp_signal_dir[index][0];
} }
if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_10sharp) { if (p.interp_filter == MULTITAP_SHARP) {
return &av1_sub_pel_filters_10sharp_signal_dir[index][0]; return &sub_pel_filters_10sharp_signal_dir[index][0];
} }
#endif #endif
#if USE_TEMPORALFILTER_12TAP #if USE_TEMPORALFILTER_12TAP
if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_temporalfilter_12) { if (p.interp_filter == TEMPORALFILTER_12TAP) {
return &av1_sub_pel_filters_temporalfilter_12_signal_dir[index][0]; return &sub_pel_filters_temporalfilter_12_signal_dir[index][0];
} }
#endif #endif
(void)p; (void)p;
...@@ -38,19 +42,19 @@ static SubpelFilterCoeffs get_subpel_filter_signal_dir( ...@@ -38,19 +42,19 @@ static SubpelFilterCoeffs get_subpel_filter_signal_dir(
return NULL; return NULL;
} }
static SubpelFilterCoeffs get_subpel_filter_ver_signal_dir( static INLINE SubpelFilterCoeffs
const InterpFilterParams p, int index) { get_subpel_filter_ver_signal_dir(const InterpFilterParams p, int index) {
#if CONFIG_EXT_INTERP #if CONFIG_EXT_INTERP
if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_12sharp) { if (p.interp_filter == MULTITAP_SHARP2) {
return &av1_sub_pel_filters_12sharp_ver_signal_dir[index][0]; return &sub_pel_filters_12sharp_ver_signal_dir[index][0];
} }
if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_10sharp) { if (p.interp_filter == MULTITAP_SHARP) {
return &av1_sub_pel_filters_10sharp_ver_signal_dir[index][0]; return &sub_pel_filters_10sharp_ver_signal_dir[index][0];
} }
#endif #endif
#if USE_TEMPORALFILTER_12TAP #if USE_TEMPORALFILTER_12TAP
if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_temporalfilter_12) { if (p.interp_filter == TEMPORALFILTER_12TAP) {
return &av1_sub_pel_filters_temporalfilter_12_ver_signal_dir[index][0]; return &sub_pel_filters_temporalfilter_12_ver_signal_dir[index][0];
} }
#endif #endif
(void)p; (void)p;
......
/* /*
* Copyright (c) 2016 The WebM project authors. All Rights Reserved. * Copyright (c) 2016, Alliance for Open Media. All rights reserved
* *
* Use of this source code is governed by a BSD-style license * This source code is subject to the terms of the BSD 2 Clause License and
* that can be found in the LICENSE file in the root of the source * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
* tree. An additional intellectual property rights grant can be found * was not distributed with this source code in the LICENSE file, you can
* in the file PATENTS. All contributing project authors may * obtain it at www.aomedia.org/license/software. If the Alliance for Open
* be found in the AUTHORS file in the root of the source tree. * 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_AV1_HIGHBD_CONVOLVE_FILTERS_SSE4_H_
#define AV1_COMMON_X86_AV1_HIGHBD_CONVOLVE_FILTERS_SSE4_H_
#include "./aom_config.h" #include "./aom_config.h"
#include "av1/common/filter.h"
#if CONFIG_AOM_HIGHBITDEPTH #if CONFIG_AOM_HIGHBITDEPTH
#if CONFIG_EXT_INTERP #if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int16_t, DECLARE_ALIGNED(16, static const int16_t,
av1_sub_pel_filters_10sharp_highbd_ver_signal_dir[15][6][8]) = { sub_pel_filters_10sharp_highbd_ver_signal_dir[15][6][8]) = {
{ {
{ 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 },
...@@ -139,8 +143,8 @@ DECLARE_ALIGNED(16, const int16_t, ...@@ -139,8 +143,8 @@ DECLARE_ALIGNED(16, const int16_t,
#endif #endif
#if CONFIG_AOM_HIGHBITDEPTH #if CONFIG_AOM_HIGHBITDEPTH
#if CONFIG_EXT_INTERP #if CONFIG_EXT_INTERP
DECLARE_ALIGNED(16, const int16_t, DECLARE_ALIGNED(16, static const int16_t,
av1_sub_pel_filters_12sharp_highbd_ver_signal_dir[15][6][8]) = { sub_pel_filters_12sharp_highbd_ver_signal_dir[15][6][8]) = {
{ {
{ 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 },
...@@ -266,9 +270,9 @@ DECLARE_ALIGNED(16, const int16_t, ...@@ -266,9 +270,9 @@ DECLARE_ALIGNED(16, const int16_t,
#endif #endif
#if CONFIG_AOM_HIGHBITDEPTH #if CONFIG_AOM_HIGHBITDEPTH
#if USE_TEMPORALFILTER_12TAP #if USE_TEMPORALFILTER_12TAP
DECLARE_ALIGNED( DECLARE_ALIGNED(16, static const int16_t,
16, const int16_t, sub_pel_filters_temporalfilter_12_highbd_ver_signal_dir[15][6]
av1_sub_pel_filters_temporalfilter_12_highbd_ver_signal_dir[15][6][8]) = { [8]) = {
{ {
{ 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 },
...@@ -392,3 +396,4 @@ DECLARE_ALIGNED( ...@@ -392,3 +396,4 @@ DECLARE_ALIGNED(
}; };
#endif #endif
#endif #endif
#endif // AV1_COMMON_X86_AV1_HIGHBD_CONVOLVE_FILTERS_SSE4_H_
...@@ -13,26 +13,28 @@ ...@@ -13,26 +13,28 @@
#include <smmintrin.h> #include <smmintrin.h>
#include "./av1_rtcd.h" #include "./av1_rtcd.h"
#include "av1/common/x86/highbd_convolve_filter_sse4.h" #include "av1/common/filter.h"
#include "av1/common/x86/av1_highbd_convolve_filters_sse4.h"
typedef const int16_t (*HbdSubpelFilterCoeffs)[8];
typedef void (*TransposeSave)(const int width, int pixelsNum, uint32_t *src, typedef void (*TransposeSave)(const int width, int pixelsNum, uint32_t *src,
int src_stride, uint16_t *dst, int dst_stride, int src_stride, uint16_t *dst, int dst_stride,
int bd); int bd);
static HbdSubpelFilterCoeffs hbd_get_subpel_filter_ver_signal_dir( static INLINE HbdSubpelFilterCoeffs
const InterpFilterParams p, int index) { hbd_get_subpel_filter_ver_signal_dir(const InterpFilterParams p, int index) {
#if CONFIG_EXT_INTERP #if CONFIG_EXT_INTERP
if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_12sharp) { if (p.interp_filter == MULTITAP_SHARP2) {
return &av1_sub_pel_filters_12sharp_highbd_ver_signal_dir[index][0]; return &sub_pel_filters_12sharp_highbd_ver_signal_dir[index][0];
} }
if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_10sharp) { if (p.interp_filter == MULTITAP_SHARP) {
return &av1_sub_pel_filters_10sharp_highbd_ver_signal_dir[index][0]; return &sub_pel_filters_10sharp_highbd_ver_signal_dir[index][0];
} }
#endif #endif
#if USE_TEMPORALFILTER_12TAP #if USE_TEMPORALFILTER_12TAP
if (p.filter_ptr == (const int16_t *)av1_sub_pel_filters_temporalfilter_12) { if (p.interp_filter == TEMPORALFILTER_12TAP) {
return &av1_sub_pel_filters_temporalfilter_12_highbd_ver_signal_dir[index] return &sub_pel_filters_temporalfilter_12_highbd_ver_signal_dir[index][0];
[0];
} }
#endif #endif
(void)p; (void)p;
......
/*
* 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_
/*
* 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_