Remove the av1_get_interp_filter_params() function We use the av1_get_interp_filter_params_with_block_size() function introduced by short filter experiment instead. Note: For motion search, we use 8-tap filter even for small blocks as before, because that seems to yield slightly better compression than using a short (4-tap) filter. This is a cleanup only: no change in output. Change-Id: Ie92a07b16f01ed3e946e972d0925568a01a1fc63
diff --git a/aom_dsp/variance.c b/aom_dsp/variance.c index 5b5e02f..71d9290 100644 --- a/aom_dsp/variance.c +++ b/aom_dsp/variance.c
@@ -8,19 +8,19 @@ * 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 <assert.h> #include <stdlib.h> #include <string.h> -#include <assert.h> #include "./aom_config.h" #include "./aom_dsp_rtcd.h" -#include "aom_ports/mem.h" #include "aom/aom_integer.h" +#include "aom_ports/mem.h" -#include "aom_dsp/variance.h" #include "aom_dsp/aom_filter.h" #include "aom_dsp/blend.h" +#include "aom_dsp/variance.h" #include "./av1_rtcd.h" #include "av1/common/filter.h" @@ -312,29 +312,28 @@ ref += ref_stride; } } else { - InterpFilterParams filter; - filter = av1_get_interp_filter_params(EIGHTTAP_REGULAR); + const InterpFilterParams filter = + av1_get_interp_filter_params_with_block_size(EIGHTTAP_REGULAR, 8); if (!subpel_y_q3) { - const int16_t *kernel; - kernel = av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); + const int16_t *kernel = + av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); /*Directly call C version to allow this to work for small (2x2) sizes.*/ aom_convolve8_horiz_c(ref, ref_stride, comp_pred, width, kernel, 16, NULL, -1, width, height); } else if (!subpel_x_q3) { - const int16_t *kernel; - kernel = av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); + const int16_t *kernel = + av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); /*Directly call C version to allow this to work for small (2x2) sizes.*/ aom_convolve8_vert_c(ref, ref_stride, comp_pred, width, NULL, -1, kernel, 16, width, height); } else { DECLARE_ALIGNED(16, uint8_t, temp[((MAX_SB_SIZE * 2 + 16) + 16) * MAX_SB_SIZE]); - const int16_t *kernel_x; - const int16_t *kernel_y; - int intermediate_height; - kernel_x = av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); - kernel_y = av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); - intermediate_height = + const int16_t *kernel_x = + av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); + const int16_t *kernel_y = + av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); + const int intermediate_height = (((height - 1) * 8 + subpel_y_q3) >> 3) + filter.taps; assert(intermediate_height <= (MAX_SB_SIZE * 2 + 16) + 16); /*Directly call C versions to allow this to work for small (2x2) sizes.*/ @@ -824,18 +823,18 @@ ref += ref_stride; } } else { - InterpFilterParams filter; - filter = av1_get_interp_filter_params(EIGHTTAP_REGULAR); + const InterpFilterParams filter = + av1_get_interp_filter_params_with_block_size(EIGHTTAP_REGULAR, 8); if (!subpel_y_q3) { - const int16_t *kernel; - kernel = av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); + const int16_t *kernel = + av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); /*Directly call C version to allow this to work for small (2x2) sizes.*/ aom_highbd_convolve8_horiz_c(ref8, ref_stride, CONVERT_TO_BYTEPTR(comp_pred), width, kernel, 16, NULL, -1, width, height, bd); } else if (!subpel_x_q3) { - const int16_t *kernel; - kernel = av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); + const int16_t *kernel = + av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); /*Directly call C version to allow this to work for small (2x2) sizes.*/ aom_highbd_convolve8_vert_c(ref8, ref_stride, CONVERT_TO_BYTEPTR(comp_pred), width, NULL, @@ -843,12 +842,11 @@ } else { DECLARE_ALIGNED(16, uint16_t, temp[((MAX_SB_SIZE + 16) + 16) * MAX_SB_SIZE]); - const int16_t *kernel_x; - const int16_t *kernel_y; - int intermediate_height; - kernel_x = av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); - kernel_y = av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); - intermediate_height = + const int16_t *kernel_x = + av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); + const int16_t *kernel_y = + av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); + const int intermediate_height = (((height - 1) * 8 + subpel_y_q3) >> 3) + filter.taps; assert(intermediate_height <= (MAX_SB_SIZE * 2 + 16) + 16); /*Directly call C versions to allow this to work for small (2x2) sizes.*/
diff --git a/aom_dsp/x86/highbd_variance_sse2.c b/aom_dsp/x86/highbd_variance_sse2.c index 9e89508..740145d 100644 --- a/aom_dsp/x86/highbd_variance_sse2.c +++ b/aom_dsp/x86/highbd_variance_sse2.c
@@ -619,28 +619,27 @@ } } } else { - InterpFilterParams filter; - filter = av1_get_interp_filter_params(EIGHTTAP_REGULAR); + const InterpFilterParams filter = + av1_get_interp_filter_params_with_block_size(EIGHTTAP_REGULAR, 8); if (!subpel_y_q3) { - const int16_t *kernel; - kernel = av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); + const int16_t *kernel = + av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); aom_highbd_convolve8_horiz(ref8, ref_stride, CONVERT_TO_BYTEPTR(comp_pred), width, kernel, 16, NULL, -1, width, height, bd); } else if (!subpel_x_q3) { - const int16_t *kernel; - kernel = av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); + const int16_t *kernel = + av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); aom_highbd_convolve8_vert(ref8, ref_stride, CONVERT_TO_BYTEPTR(comp_pred), width, NULL, -1, kernel, 16, width, height, bd); } else { DECLARE_ALIGNED(16, uint16_t, temp[((MAX_SB_SIZE + 16) + 16) * MAX_SB_SIZE]); - const int16_t *kernel_x; - const int16_t *kernel_y; - int intermediate_height; - kernel_x = av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); - kernel_y = av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); - intermediate_height = + const int16_t *kernel_x = + av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); + const int16_t *kernel_y = + av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); + const int intermediate_height = (((height - 1) * 8 + subpel_y_q3) >> 3) + filter.taps; assert(intermediate_height <= (MAX_SB_SIZE * 2 + 16) + 16); aom_highbd_convolve8_horiz(ref8 - ref_stride * ((filter.taps >> 1) - 1),
diff --git a/aom_dsp/x86/variance_sse2.c b/aom_dsp/x86/variance_sse2.c index ad9deb5..a6ac66b 100644 --- a/aom_dsp/x86/variance_sse2.c +++ b/aom_dsp/x86/variance_sse2.c
@@ -565,27 +565,26 @@ } } } else { - InterpFilterParams filter; - filter = av1_get_interp_filter_params(EIGHTTAP_REGULAR); + const InterpFilterParams filter = + av1_get_interp_filter_params_with_block_size(EIGHTTAP_REGULAR, 8); if (!subpel_y_q3) { - const int16_t *kernel; - kernel = av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); + const int16_t *kernel = + av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); aom_convolve8_horiz(ref, ref_stride, comp_pred, width, kernel, 16, NULL, -1, width, height); } else if (!subpel_x_q3) { - const int16_t *kernel; - kernel = av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); + const int16_t *kernel = + av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); aom_convolve8_vert(ref, ref_stride, comp_pred, width, NULL, -1, kernel, 16, width, height); } else { DECLARE_ALIGNED(16, uint8_t, temp[((MAX_SB_SIZE * 2 + 16) + 16) * MAX_SB_SIZE]); - const int16_t *kernel_x; - const int16_t *kernel_y; - int intermediate_height; - kernel_x = av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); - kernel_y = av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); - intermediate_height = + const int16_t *kernel_x = + av1_get_interp_filter_subpel_kernel(filter, subpel_x_q3 << 1); + const int16_t *kernel_y = + av1_get_interp_filter_subpel_kernel(filter, subpel_y_q3 << 1); + const int intermediate_height = (((height - 1) * 8 + subpel_y_q3) >> 3) + filter.taps; assert(intermediate_height <= (MAX_SB_SIZE * 2 + 16) + 16); aom_convolve8_horiz(ref - ref_stride * ((filter.taps >> 1) - 1),
diff --git a/av1/common/filter.c b/av1/common/filter.c index dbb51e8..a7e67ea 100644 --- a/av1/common/filter.c +++ b/av1/common/filter.c
@@ -103,11 +103,6 @@ EIGHTTAP_SMOOTH }, }; -InterpFilterParams av1_get_interp_filter_params( - const InterpFilter interp_filter) { - return av1_interp_filter_params_list[interp_filter]; -} - InterpFilterParams av1_get_interp_filter_params_with_block_size( const InterpFilter interp_filter, const int w) { if (w <= 4 &&
diff --git a/av1/common/filter.h b/av1/common/filter.h index 661ad8e..7a2d687 100644 --- a/av1/common/filter.h +++ b/av1/common/filter.h
@@ -91,12 +91,6 @@ return filter_params.filter_ptr + filter_params.taps * subpel; } -static INLINE int av1_is_interpolating_filter( - const InterpFilter interp_filter) { - const InterpFilterParams ip = av1_get_interp_filter_params(interp_filter); - return (ip.filter_ptr[ip.taps / 2 - 1] == 128); -} - #ifdef __cplusplus } // extern "C" #endif
diff --git a/test/av1_convolve_2d_test_util.cc b/test/av1_convolve_2d_test_util.cc index 1c65941..84656b2 100644 --- a/test/av1_convolve_2d_test_util.cc +++ b/test/av1_convolve_2d_test_util.cc
@@ -64,9 +64,11 @@ for (vfilter = EIGHTTAP_REGULAR; vfilter < INTERP_FILTERS_ALL; ++vfilter) { InterpFilterParams filter_params_x = - av1_get_interp_filter_params((InterpFilter)hfilter); + av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter, + out_w); InterpFilterParams filter_params_y = - av1_get_interp_filter_params((InterpFilter)vfilter); + av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter, + out_h); for (int do_average = 0; do_average < 1; ++do_average) { ConvolveParams conv_params1 = get_conv_params_no_round(0, do_average, 0, NULL, 0, 0, 8); @@ -122,10 +124,6 @@ int hfilter = EIGHTTAP_REGULAR, vfilter = EIGHTTAP_REGULAR; int subx = 0, suby = 0; - InterpFilterParams filter_params_x = - av1_get_interp_filter_params((InterpFilter)hfilter); - InterpFilterParams filter_params_y = - av1_get_interp_filter_params((InterpFilter)vfilter); const int do_average = 0; ConvolveParams conv_params2 = get_conv_params_no_round(0, do_average, 0, NULL, 0, 0, 8); @@ -138,6 +136,14 @@ const int out_w = block_size_wide[block_idx] >> shift; const int out_h = block_size_high[block_idx] >> shift; const int num_loops = 1000000000 / (out_w + out_h); + + InterpFilterParams filter_params_x = + av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter, + out_w); + InterpFilterParams filter_params_y = + av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter, + out_h); + aom_usec_timer timer; aom_usec_timer_start(&timer); @@ -183,9 +189,11 @@ for (hfilter = EIGHTTAP_REGULAR; hfilter < INTERP_FILTERS_ALL; ++hfilter) { for (vfilter = EIGHTTAP_REGULAR; vfilter < INTERP_FILTERS_ALL; ++vfilter) { InterpFilterParams filter_params_x = - av1_get_interp_filter_params((InterpFilter)hfilter); + av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter, + out_w); InterpFilterParams filter_params_y = - av1_get_interp_filter_params((InterpFilter)vfilter); + av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter, + out_h); for (int do_average = 0; do_average <= 1; ++do_average) { ConvolveParams conv_params1 = get_conv_params_no_round( 0, do_average, 0, output1, MAX_SB_SIZE, 1, 8); @@ -333,11 +341,6 @@ subx = 0; suby = 0; - InterpFilterParams filter_params_x = - av1_get_interp_filter_params((InterpFilter)hfilter); - InterpFilterParams filter_params_y = - av1_get_interp_filter_params((InterpFilter)vfilter); - ConvolveParams conv_params = get_conv_params_no_round(0, do_average, 0, NULL, 0, 0, bd); @@ -351,6 +354,13 @@ const int out_h = block_size_high[block_idx] >> shift; const int num_loops = 1000000000 / (out_w + out_h); + InterpFilterParams filter_params_x = + av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter, + out_w); + InterpFilterParams filter_params_y = + av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter, + out_h); + aom_usec_timer timer; aom_usec_timer_start(&timer); for (int i = 0; i < num_loops; ++i) @@ -394,9 +404,11 @@ for (vfilter = EIGHTTAP_REGULAR; vfilter < INTERP_FILTERS_ALL; ++vfilter) { InterpFilterParams filter_params_x = - av1_get_interp_filter_params((InterpFilter)hfilter); + av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter, + out_w); InterpFilterParams filter_params_y = - av1_get_interp_filter_params((InterpFilter)vfilter); + av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter, + out_h); for (int do_average = 0; do_average < 1; ++do_average) { ConvolveParams conv_params1 = get_conv_params_no_round(0, do_average, 0, NULL, 0, 0, bd); @@ -466,9 +478,11 @@ const int out_h = block_size_high[block_idx]; InterpFilterParams filter_params_x = - av1_get_interp_filter_params((InterpFilter)hfilter); + av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter, + out_w); InterpFilterParams filter_params_y = - av1_get_interp_filter_params((InterpFilter)vfilter); + av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter, + out_h); ConvolveParams conv_params = get_conv_params_no_round(0, do_average, 0, output, MAX_SB_SIZE, 1, bd); @@ -523,9 +537,11 @@ for (hfilter = EIGHTTAP_REGULAR; hfilter < INTERP_FILTERS_ALL; ++hfilter) { for (vfilter = EIGHTTAP_REGULAR; vfilter < INTERP_FILTERS_ALL; ++vfilter) { InterpFilterParams filter_params_x = - av1_get_interp_filter_params((InterpFilter)hfilter); + av1_get_interp_filter_params_with_block_size((InterpFilter)hfilter, + out_w); InterpFilterParams filter_params_y = - av1_get_interp_filter_params((InterpFilter)vfilter); + av1_get_interp_filter_params_with_block_size((InterpFilter)vfilter, + out_h); for (int do_average = 0; do_average <= 1; ++do_average) { ConvolveParams conv_params1 = get_conv_params_no_round( 0, do_average, 0, output1, MAX_SB_SIZE, 1, bd);
diff --git a/test/convolve_test.cc b/test/convolve_test.cc index ef80ef1..ae4c438 100644 --- a/test/convolve_test.cc +++ b/test/convolve_test.cc
@@ -15,16 +15,16 @@ #include "./aom_config.h" #include "./aom_dsp_rtcd.h" +#include "aom_dsp/aom_dsp_common.h" +#include "aom_dsp/aom_filter.h" +#include "aom_mem/aom_mem.h" +#include "aom_ports/aom_timer.h" +#include "aom_ports/mem.h" +#include "av1/common/filter.h" #include "test/acm_random.h" #include "test/clear_system_state.h" #include "test/register_state_check.h" #include "test/util.h" -#include "aom_dsp/aom_dsp_common.h" -#include "aom_dsp/aom_filter.h" -#include "aom_mem/aom_mem.h" -#include "aom_ports/mem.h" -#include "aom_ports/aom_timer.h" -#include "av1/common/filter.h" namespace { @@ -494,7 +494,7 @@ const InterpKernel *filters = (const InterpKernel *)av1_get_interp_filter_kernel(filter); const InterpFilterParams filter_params = - av1_get_interp_filter_params(filter); + av1_get_interp_filter_params_with_block_size(filter, 8); if (filter_params.taps != SUBPEL_TAPS) continue; for (int i = 0; i < kNumFilters; i++) { const int p0 = filters[i][0] + filters[i][1]; @@ -532,7 +532,7 @@ const InterpKernel *filters = (const InterpKernel *)av1_get_interp_filter_kernel(filter); const InterpFilterParams filter_params = - av1_get_interp_filter_params(filter); + av1_get_interp_filter_params_with_block_size(filter, 8); if (filter_params.taps != SUBPEL_TAPS) continue; for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { @@ -618,7 +618,7 @@ const InterpKernel *filters = (const InterpKernel *)av1_get_interp_filter_kernel(filter); const InterpFilterParams filter_params = - av1_get_interp_filter_params(filter); + av1_get_interp_filter_params_with_block_size(filter, 8); if (filter_params.taps != SUBPEL_TAPS) continue; for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { @@ -717,7 +717,7 @@ const InterpKernel *filters = (const InterpKernel *)av1_get_interp_filter_kernel(filter); const InterpFilterParams filter_params = - av1_get_interp_filter_params(filter); + av1_get_interp_filter_params_with_block_size(filter, 8); if (filter_params.taps != SUBPEL_TAPS) continue; for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) {