| /* |
| * 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_FILTER_H_ |
| #define AV1_COMMON_FILTER_H_ |
| |
| #include "./aom_config.h" |
| #include "aom/aom_integer.h" |
| #include "aom_dsp/aom_filter.h" |
| #include "aom_ports/mem.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #if CONFIG_EXT_INTERP |
| #define EIGHTTAP 0 |
| #define EIGHTTAP_SMOOTH 1 |
| #define EIGHTTAP_SHARP 2 |
| #define MULTITAP_SHARP EIGHTTAP_SHARP |
| #define EIGHTTAP_SMOOTH2 3 |
| #define MULTITAP_SHARP2 4 |
| #define SWITCHABLE_FILTERS 5 /* Number of switchable filters */ |
| |
| // (1 << LOG_SWITCHABLE_FILTERS) > SWITCHABLE_FILTERS |
| #define LOG_SWITCHABLE_FILTERS 3 |
| |
| #else |
| #define EIGHTTAP 0 |
| #define EIGHTTAP_SMOOTH 1 |
| #define EIGHTTAP_SHARP 2 |
| #define SWITCHABLE_FILTERS 3 /* Number of switchable filters */ |
| |
| // (1 << LOG_SWITCHABLE_FILTERS) > SWITCHABLE_FILTERS |
| #define LOG_SWITCHABLE_FILTERS 2 |
| |
| #endif // CONFIG_EXT_INTERP |
| #define BILINEAR SWITCHABLE_FILTERS |
| |
| // The codec can operate in four possible inter prediction filter mode: |
| // 8-tap, 8-tap-smooth, 8-tap-sharp, and switching between the three. |
| #define SWITCHABLE_FILTER_CONTEXTS (SWITCHABLE_FILTERS + 1) |
| #define SWITCHABLE (SWITCHABLE_FILTERS + 1) /* should be the last one */ |
| |
| typedef uint8_t InterpFilter; |
| |
| extern const InterpKernel* av1_filter_kernels[4]; |
| typedef struct InterpFilterParams { |
| const int16_t* filter_ptr; |
| uint16_t taps; |
| uint16_t subpel_shifts; |
| } InterpFilterParams; |
| |
| static INLINE const int16_t* get_interp_filter_subpel_kernel( |
| const InterpFilterParams filter_params, const int subpel) { |
| return filter_params.filter_ptr + filter_params.taps * subpel; |
| } |
| InterpFilterParams get_interp_filter_params(InterpFilter interp_filter); |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif |
| |
| #endif // AV1_COMMON_FILTER_H_ |