1923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org/* 2923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * 4923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * Use of this source code is governed by a BSD-style license 5923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * that can be found in the LICENSE file in the root of the source 6923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * tree. An additional intellectual property rights grant can be found 7923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * in the file PATENTS. All contributing project authors may 8923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * be found in the AUTHORS file in the root of the source tree. 9923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org */ 10923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 11f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org#include <string.h> 1210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org#include "test/acm_random.h" 1310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org#include "test/register_state_check.h" 1410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org#include "test/util.h" 1510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org#include "third_party/googletest/src/include/gtest/gtest.h" 16923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 17923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org#include "./vpx_config.h" 18923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org#include "./vp9_rtcd.h" 19923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org#include "vp9/common/vp9_filter.h" 20923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org#include "vpx_mem/vpx_mem.h" 21923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org#include "vpx_ports/mem.h" 22923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 23923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgnamespace { 2487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 2587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgstatic const unsigned int kMaxDimension = 64; 2687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 27ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgtypedef void (*ConvolveFunc)(const uint8_t *src, ptrdiff_t src_stride, 28ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 29ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org const int16_t *filter_x, int filter_x_stride, 30ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org const int16_t *filter_y, int filter_y_stride, 31ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org int w, int h); 32923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 33923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgstruct ConvolveFunctions { 34ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org ConvolveFunctions(ConvolveFunc h8, ConvolveFunc h8_avg, 35ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org ConvolveFunc v8, ConvolveFunc v8_avg, 3687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ConvolveFunc hv8, ConvolveFunc hv8_avg, 3787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int bd) 38923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org : h8_(h8), v8_(v8), hv8_(hv8), h8_avg_(h8_avg), v8_avg_(v8_avg), 3987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org hv8_avg_(hv8_avg), use_high_bd_(bd) {} 40923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 41ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org ConvolveFunc h8_; 42ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org ConvolveFunc v8_; 43ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org ConvolveFunc hv8_; 44ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org ConvolveFunc h8_avg_; 45ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org ConvolveFunc v8_avg_; 46ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org ConvolveFunc hv8_avg_; 4787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int use_high_bd_; // 0 if high bitdepth not used, else the actual bit depth. 48923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org}; 49923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 50ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgtypedef std::tr1::tuple<int, int, const ConvolveFunctions *> ConvolveParam; 51d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org 52923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org// Reference 8-tap subpixel filter, slightly modified to fit into this test. 53923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org#define VP9_FILTER_WEIGHT 128 54923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org#define VP9_FILTER_SHIFT 7 5510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.orguint8_t clip_pixel(int x) { 56923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org return x < 0 ? 0 : 57923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org x > 255 ? 255 : 58923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org x; 59923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org} 60923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 6110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.orgvoid filter_block2d_8_c(const uint8_t *src_ptr, 6210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const unsigned int src_stride, 6310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int16_t *HFilter, 6410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int16_t *VFilter, 6510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org uint8_t *dst_ptr, 6610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org unsigned int dst_stride, 6710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org unsigned int output_width, 6810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org unsigned int output_height) { 69923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // Between passes, we use an intermediate buffer whose height is extended to 70923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // have enough horizontally filtered values as input for the vertical pass. 71923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // This buffer is allocated to be big enough for the largest block type we 72923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // support. 73923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org const int kInterp_Extend = 4; 74923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org const unsigned int intermediate_height = 7510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (kInterp_Extend - 1) + output_height + kInterp_Extend; 7687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int i, j; 7787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 7887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // Size of intermediate_buffer is max_intermediate_height * filter_max_width, 7987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // where max_intermediate_height = (kInterp_Extend - 1) + filter_max_height 8087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // + kInterp_Extend 8187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // = 3 + 16 + 4 8287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // = 23 8387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // and filter_max_width = 16 8487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // 8587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t intermediate_buffer[71 * kMaxDimension]; 8687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int intermediate_next_stride = 1 - intermediate_height * output_width; 8787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 8887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // Horizontal pass (src -> transposed intermediate). 8987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *output_ptr = intermediate_buffer; 9087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int src_next_row_stride = src_stride - output_width; 9187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org src_ptr -= (kInterp_Extend - 1) * src_stride + (kInterp_Extend - 1); 9287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (i = 0; i < intermediate_height; ++i) { 9387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (j = 0; j < output_width; ++j) { 9487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // Apply filter... 9587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int temp = (src_ptr[0] * HFilter[0]) + 9687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[1] * HFilter[1]) + 9787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[2] * HFilter[2]) + 9887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[3] * HFilter[3]) + 9987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[4] * HFilter[4]) + 10087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[5] * HFilter[5]) + 10187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[6] * HFilter[6]) + 10287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[7] * HFilter[7]) + 10387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (VP9_FILTER_WEIGHT >> 1); // Rounding 10487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 10587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // Normalize back to 0-255... 10687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *output_ptr = clip_pixel(temp >> VP9_FILTER_SHIFT); 10787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ++src_ptr; 10887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_ptr += intermediate_height; 10987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 11087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org src_ptr += src_next_row_stride; 11187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_ptr += intermediate_next_stride; 11287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 11387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 11487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // Vertical pass (transposed intermediate -> dst). 11587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org src_ptr = intermediate_buffer; 11687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int dst_next_row_stride = dst_stride - output_width; 11787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (i = 0; i < output_height; ++i) { 11887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (j = 0; j < output_width; ++j) { 11987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // Apply filter... 12087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int temp = (src_ptr[0] * VFilter[0]) + 12187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[1] * VFilter[1]) + 12287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[2] * VFilter[2]) + 12387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[3] * VFilter[3]) + 12487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[4] * VFilter[4]) + 12587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[5] * VFilter[5]) + 12687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[6] * VFilter[6]) + 12787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (src_ptr[7] * VFilter[7]) + 12887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (VP9_FILTER_WEIGHT >> 1); // Rounding 12987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 13087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // Normalize back to 0-255... 13187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *dst_ptr++ = clip_pixel(temp >> VP9_FILTER_SHIFT); 13287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org src_ptr += intermediate_height; 13387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 13487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org src_ptr += intermediate_next_stride; 13587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org dst_ptr += dst_next_row_stride; 13687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 13787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 13887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 13987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid block2d_average_c(uint8_t *src, 14087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int src_stride, 14187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *output_ptr, 14287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_stride, 14387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_width, 14487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_height) { 14587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int i, j; 14687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (i = 0; i < output_height; ++i) { 14787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (j = 0; j < output_width; ++j) { 14887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_ptr[j] = (output_ptr[j] + src[i * src_stride + j] + 1) >> 1; 14987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 15087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_ptr += output_stride; 15187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 15287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 15387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 15487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid filter_average_block2d_8_c(const uint8_t *src_ptr, 15587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const unsigned int src_stride, 15687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *HFilter, 15787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *VFilter, 15887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst_ptr, 15987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int dst_stride, 16087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_width, 16187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_height) { 16287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t tmp[kMaxDimension * kMaxDimension]; 16387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 16487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org assert(output_width <= kMaxDimension); 16587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org assert(output_height <= kMaxDimension); 16687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_block2d_8_c(src_ptr, src_stride, HFilter, VFilter, tmp, 64, 16787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_width, output_height); 16887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org block2d_average_c(tmp, 64, dst_ptr, dst_stride, 16987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_width, output_height); 17087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 17187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 17287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 17387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid high_filter_block2d_8_c(const uint16_t *src_ptr, 17487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const unsigned int src_stride, 17587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *HFilter, 17687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *VFilter, 17787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *dst_ptr, 17887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int dst_stride, 17987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_width, 18087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_height, 18187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int bd) { 18287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // Between passes, we use an intermediate buffer whose height is extended to 18387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // have enough horizontally filtered values as input for the vertical pass. 18487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // This buffer is allocated to be big enough for the largest block type we 18587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // support. 18687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int kInterp_Extend = 4; 18787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const unsigned int intermediate_height = 18887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (kInterp_Extend - 1) + output_height + kInterp_Extend; 189923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 190923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org /* Size of intermediate_buffer is max_intermediate_height * filter_max_width, 191923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * where max_intermediate_height = (kInterp_Extend - 1) + filter_max_height 192923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * + kInterp_Extend 193923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * = 3 + 16 + 4 194923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * = 23 195923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org * and filter_max_width = 16 196923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org */ 19787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t intermediate_buffer[71 * kMaxDimension]; 198923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org const int intermediate_next_stride = 1 - intermediate_height * output_width; 199923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 200923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // Horizontal pass (src -> transposed intermediate). 201923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 20287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *output_ptr = intermediate_buffer; 203923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org const int src_next_row_stride = src_stride - output_width; 204923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org unsigned int i, j; 205923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org src_ptr -= (kInterp_Extend - 1) * src_stride + (kInterp_Extend - 1); 206923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (i = 0; i < intermediate_height; ++i) { 207923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (j = 0; j < output_width; ++j) { 208923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // Apply filter... 20910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int temp = (src_ptr[0] * HFilter[0]) + 21010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[1] * HFilter[1]) + 21110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[2] * HFilter[2]) + 21210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[3] * HFilter[3]) + 21310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[4] * HFilter[4]) + 21410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[5] * HFilter[5]) + 21510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[6] * HFilter[6]) + 21610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[7] * HFilter[7]) + 21710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (VP9_FILTER_WEIGHT >> 1); // Rounding 218923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 219923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // Normalize back to 0-255... 22087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *output_ptr = clip_pixel_high(temp >> VP9_FILTER_SHIFT, bd); 221923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org ++src_ptr; 222923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org output_ptr += intermediate_height; 223923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 224923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org src_ptr += src_next_row_stride; 225923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org output_ptr += intermediate_next_stride; 226923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 227923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 228923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 229923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // Vertical pass (transposed intermediate -> dst). 230923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 23187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *src_ptr = intermediate_buffer; 232923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org const int dst_next_row_stride = dst_stride - output_width; 233923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org unsigned int i, j; 234923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (i = 0; i < output_height; ++i) { 235923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (j = 0; j < output_width; ++j) { 236923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // Apply filter... 23710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int temp = (src_ptr[0] * VFilter[0]) + 23810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[1] * VFilter[1]) + 23910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[2] * VFilter[2]) + 24010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[3] * VFilter[3]) + 24110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[4] * VFilter[4]) + 24210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[5] * VFilter[5]) + 24310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[6] * VFilter[6]) + 24410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (src_ptr[7] * VFilter[7]) + 24510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org (VP9_FILTER_WEIGHT >> 1); // Rounding 246923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 247923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // Normalize back to 0-255... 24887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *dst_ptr++ = clip_pixel_high(temp >> VP9_FILTER_SHIFT, bd); 249923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org src_ptr += intermediate_height; 250923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 251923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org src_ptr += intermediate_next_stride; 252923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org dst_ptr += dst_next_row_stride; 253923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 254923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 255923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org} 256923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 25787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid high_block2d_average_c(uint16_t *src, 25887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int src_stride, 25987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *output_ptr, 26087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_stride, 26187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_width, 26287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_height, 26387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int bd) { 264923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org unsigned int i, j; 265923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (i = 0; i < output_height; ++i) { 266923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (j = 0; j < output_width; ++j) { 267923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org output_ptr[j] = (output_ptr[j] + src[i * src_stride + j] + 1) >> 1; 268923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 269923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org output_ptr += output_stride; 270923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 271923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org} 272923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 27387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid high_filter_average_block2d_8_c(const uint16_t *src_ptr, 27487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const unsigned int src_stride, 27587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *HFilter, 27687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *VFilter, 27787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *dst_ptr, 27887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int dst_stride, 27987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_width, 28087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_height, 28187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int bd) { 28287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t tmp[kMaxDimension * kMaxDimension]; 28387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 28487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org assert(output_width <= kMaxDimension); 28587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org assert(output_height <= kMaxDimension); 28687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_filter_block2d_8_c(src_ptr, src_stride, HFilter, VFilter, tmp, 64, 28787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_width, output_height, bd); 28887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_block2d_average_c(tmp, 64, dst_ptr, dst_stride, 28987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_width, output_height, bd); 290923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org} 29187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif // CONFIG_VP9_HIGHBITDEPTH 292923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 293ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.orgclass ConvolveTest : public ::testing::TestWithParam<ConvolveParam> { 294923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org public: 295923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org static void SetUpTestCase() { 296923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // Force input_ to be unaligned, output to be 16 byte aligned. 297923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org input_ = reinterpret_cast<uint8_t*>( 29810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org vpx_memalign(kDataAlignment, kInputBufferSize + 1)) + 1; 299923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org output_ = reinterpret_cast<uint8_t*>( 30010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org vpx_memalign(kDataAlignment, kOutputBufferSize)); 30187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 30287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org input16_ = reinterpret_cast<uint16_t*>( 30387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vpx_memalign(kDataAlignment, 30487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (kInputBufferSize + 1) * sizeof(uint16_t))) + 1; 30587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output16_ = reinterpret_cast<uint16_t*>( 30687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vpx_memalign(kDataAlignment, (kOutputBufferSize) * sizeof(uint16_t))); 30787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 308923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 309923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 310923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org static void TearDownTestCase() { 311923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org vpx_free(input_ - 1); 312923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org input_ = NULL; 313923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org vpx_free(output_); 314923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org output_ = NULL; 31587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 31687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vpx_free(input16_ - 1); 31787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org input16_ = NULL; 31887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vpx_free(output16_); 31987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output16_ = NULL; 32087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 321923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 322923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 32310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org protected: 32410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org static const int kDataAlignment = 16; 325f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org static const int kOuterBlockSize = 256; 32610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org static const int kInputStride = kOuterBlockSize; 32710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org static const int kOutputStride = kOuterBlockSize; 32810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org static const int kInputBufferSize = kOuterBlockSize * kOuterBlockSize; 32910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org static const int kOutputBufferSize = kOuterBlockSize * kOuterBlockSize; 33010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 33110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org int Width() const { return GET_PARAM(0); } 33210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org int Height() const { return GET_PARAM(1); } 33310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org int BorderLeft() const { 33410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int center = (kOuterBlockSize - Width()) / 2; 33510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org return (center + (kDataAlignment - 1)) & ~(kDataAlignment - 1); 33610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org } 33710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org int BorderTop() const { return (kOuterBlockSize - Height()) / 2; } 338923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 33910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org bool IsIndexInBorder(int i) { 34010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org return (i < BorderTop() * kOuterBlockSize || 34110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org i >= (BorderTop() + Height()) * kOuterBlockSize || 34210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org i % kOuterBlockSize < BorderLeft() || 34310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org i % kOuterBlockSize >= (BorderLeft() + Width())); 34410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org } 345923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 34610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org virtual void SetUp() { 34710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org UUT_ = GET_PARAM(2); 34887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 34987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ != 0) 35087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org mask_ = (1 << UUT_->use_high_bd_) - 1; 35187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org else 35287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org mask_ = 255; 35387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 35447265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org /* Set up guard blocks for an inner block centered in the outer block */ 35510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org for (int i = 0; i < kOutputBufferSize; ++i) { 35610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org if (IsIndexInBorder(i)) 35710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org output_[i] = 255; 35810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org else 35910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org output_[i] = 0; 360923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 361923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 36210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org ::libvpx_test::ACMRandom prng; 36388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org for (int i = 0; i < kInputBufferSize; ++i) { 36487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (i & 1) { 36588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org input_[i] = 255; 36687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 36787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org input16_[i] = mask_; 36887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 36987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 37088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org input_[i] = prng.Rand8Extremes(); 37187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 37287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org input16_[i] = prng.Rand16() & mask_; 37387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 37487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 37588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org } 37610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org } 377923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 378f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org void SetConstantInput(int value) { 379f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org memset(input_, value, kInputBufferSize); 38087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 38187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vpx_memset16(input16_, value, kInputBufferSize); 38287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 383f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org } 384f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org 38510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org void CheckGuardBlocks() { 38610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org for (int i = 0; i < kOutputBufferSize; ++i) { 38710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org if (IsIndexInBorder(i)) 38810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org EXPECT_EQ(255, output_[i]); 389923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 39010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org } 391923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 39287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *input() const { 39387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 39487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ == 0) { 39587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return input_ + BorderTop() * kOuterBlockSize + BorderLeft(); 39687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 39787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return CONVERT_TO_BYTEPTR(input16_ + BorderTop() * kOuterBlockSize + 39887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org BorderLeft()); 39987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 40087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 40110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org return input_ + BorderTop() * kOuterBlockSize + BorderLeft(); 40287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 40310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org } 404923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 40587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *output() const { 40687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 40787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ == 0) { 40887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return output_ + BorderTop() * kOuterBlockSize + BorderLeft(); 40987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 41087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return CONVERT_TO_BYTEPTR(output16_ + BorderTop() * kOuterBlockSize + 41187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org BorderLeft()); 41287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 41387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 41410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org return output_ + BorderTop() * kOuterBlockSize + BorderLeft(); 41587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 41687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 41787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 41887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t lookup(uint8_t *list, int index) const { 41987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 42087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ == 0) { 42187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return list[index]; 42287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 42387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return CONVERT_TO_SHORTPTR(list)[index]; 42487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 42587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 42687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return list[index]; 42787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 42887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 42987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 43087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org void assign_val(uint8_t *list, int index, uint16_t val) const { 43187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 43287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ == 0) { 43387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org list[index] = (uint8_t) val; 43487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 43587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org CONVERT_TO_SHORTPTR(list)[index] = val; 43687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 43787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 43887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org list[index] = (uint8_t) val; 43987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 44087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 44187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 44287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org void wrapper_filter_average_block2d_8_c(const uint8_t *src_ptr, 44387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const unsigned int src_stride, 44487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *HFilter, 44587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *VFilter, 44687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst_ptr, 44787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int dst_stride, 44887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_width, 44987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_height) { 45087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 45187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ == 0) { 45287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_average_block2d_8_c(src_ptr, src_stride, HFilter, VFilter, 45387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org dst_ptr, dst_stride, output_width, 45487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_height); 45587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 45687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_filter_average_block2d_8_c(CONVERT_TO_SHORTPTR(src_ptr), src_stride, 45787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org HFilter, VFilter, 45887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org CONVERT_TO_SHORTPTR(dst_ptr), dst_stride, 45987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_width, output_height, 46087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org UUT_->use_high_bd_); 46187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 46287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 46387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_average_block2d_8_c(src_ptr, src_stride, HFilter, VFilter, 46487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org dst_ptr, dst_stride, output_width, 46587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_height); 46687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 46787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 46887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 46987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org void wrapper_filter_block2d_8_c(const uint8_t *src_ptr, 47087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const unsigned int src_stride, 47187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *HFilter, 47287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *VFilter, 47387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst_ptr, 47487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int dst_stride, 47587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_width, 47687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_height) { 47787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 47887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ == 0) { 47987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_block2d_8_c(src_ptr, src_stride, HFilter, VFilter, 48087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org dst_ptr, dst_stride, output_width, output_height); 48187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 48287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_filter_block2d_8_c(CONVERT_TO_SHORTPTR(src_ptr), src_stride, 48387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org HFilter, VFilter, 48487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org CONVERT_TO_SHORTPTR(dst_ptr), dst_stride, 48587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_width, output_height, UUT_->use_high_bd_); 48687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 48787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 48887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_block2d_8_c(src_ptr, src_stride, HFilter, VFilter, 48987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org dst_ptr, dst_stride, output_width, output_height); 49087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 49110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org } 49210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 49310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const ConvolveFunctions* UUT_; 49410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org static uint8_t* input_; 49510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org static uint8_t* output_; 49687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 49787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org static uint16_t* input16_; 49887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org static uint16_t* output16_; 49987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int mask_; 50087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 501923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org}; 50287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 503923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orguint8_t* ConvolveTest::input_ = NULL; 504923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orguint8_t* ConvolveTest::output_ = NULL; 50587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 50687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orguint16_t* ConvolveTest::input16_ = NULL; 50787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orguint16_t* ConvolveTest::output16_ = NULL; 50887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 509923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 510923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgTEST_P(ConvolveTest, GuardBlocks) { 511923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org CheckGuardBlocks(); 512923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org} 513923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 514923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgTEST_P(ConvolveTest, CopyHoriz) { 515923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const in = input(); 516923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const out = output(); 5176ffb5d8eaaa9cb68c354c46f375ccc5b9bc8b107jpet@google.com DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; 518923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 51995aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 520923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org UUT_->h8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16, 521923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org Width(), Height())); 522923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 523923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org CheckGuardBlocks(); 524923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 525923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int y = 0; y < Height(); ++y) 526923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int x = 0; x < Width(); ++x) 52787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASSERT_EQ(lookup(out, y * kOutputStride + x), 52887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org lookup(in, y * kInputStride + x)) 529923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org << "(" << x << "," << y << ")"; 530923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org} 531923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 532923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgTEST_P(ConvolveTest, CopyVert) { 533923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const in = input(); 534923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const out = output(); 5356ffb5d8eaaa9cb68c354c46f375ccc5b9bc8b107jpet@google.com DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; 536923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 53795aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 538923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org UUT_->v8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16, 539923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org Width(), Height())); 540923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 541923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org CheckGuardBlocks(); 542923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 543923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int y = 0; y < Height(); ++y) 544923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int x = 0; x < Width(); ++x) 54587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASSERT_EQ(lookup(out, y * kOutputStride + x), 54687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org lookup(in, y * kInputStride + x)) 547923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org << "(" << x << "," << y << ")"; 548923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org} 549923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 550923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgTEST_P(ConvolveTest, Copy2D) { 551923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const in = input(); 552923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const out = output(); 5536ffb5d8eaaa9cb68c354c46f375ccc5b9bc8b107jpet@google.com DECLARE_ALIGNED(256, const int16_t, filter8[8]) = {0, 0, 0, 128, 0, 0, 0, 0}; 554923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 55595aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 556923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org UUT_->hv8_(in, kInputStride, out, kOutputStride, filter8, 16, filter8, 16, 557923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org Width(), Height())); 558923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 559923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org CheckGuardBlocks(); 560923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 561923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int y = 0; y < Height(); ++y) 562923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int x = 0; x < Width(); ++x) 56387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASSERT_EQ(lookup(out, y * kOutputStride + x), 56487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org lookup(in, y * kInputStride + x)) 565923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org << "(" << x << "," << y << ")"; 566923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org} 567923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 568693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comconst int kNumFilterBanks = 4; 56910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.orgconst int kNumFilters = 16; 57010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 57110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.orgTEST(ConvolveTest, FiltersWontSaturateWhenAddedPairwise) { 57210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { 573693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const InterpKernel *filters = 574693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com vp9_get_interp_kernel(static_cast<INTERP_FILTER>(filter_bank)); 57510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org for (int i = 0; i < kNumFilters; i++) { 57610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int p0 = filters[i][0] + filters[i][1]; 57710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int p1 = filters[i][2] + filters[i][3]; 57810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int p2 = filters[i][4] + filters[i][5]; 57910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int p3 = filters[i][6] + filters[i][7]; 58010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org EXPECT_LE(p0, 128); 58110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org EXPECT_LE(p1, 128); 58210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org EXPECT_LE(p2, 128); 58310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org EXPECT_LE(p3, 128); 58410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org EXPECT_LE(p0 + p3, 128); 58510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org EXPECT_LE(p0 + p3 + p1, 128); 58610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org EXPECT_LE(p0 + p3 + p1 + p2, 128); 58710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org EXPECT_EQ(p0 + p1 + p2 + p3, 128); 58810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org } 58910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org } 59010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org} 591923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 592923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgconst int16_t kInvalidFilter[8] = { 0 }; 593923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 594923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgTEST_P(ConvolveTest, MatchesReferenceSubpixelFilter) { 595923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const in = input(); 596923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const out = output(); 59787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 59887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t ref8[kOutputStride * kMaxDimension]; 59987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t ref16[kOutputStride * kMaxDimension]; 60087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t* ref; 60187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ == 0) { 60287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ref = ref8; 60387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 60487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ref = CONVERT_TO_BYTEPTR(ref16); 60587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 60687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 607923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t ref[kOutputStride * kMaxDimension]; 60887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 609923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 610923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { 611693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const InterpKernel *filters = 612693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com vp9_get_interp_kernel(static_cast<INTERP_FILTER>(filter_bank)); 61388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const InterpKernel *const eighttap_smooth = 61488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org vp9_get_interp_kernel(EIGHTTAP_SMOOTH); 61588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 616923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { 617923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { 61887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrapper_filter_block2d_8_c(in, kInputStride, 61987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filters[filter_x], filters[filter_y], 62087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ref, kOutputStride, 62187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org Width(), Height()); 622923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 62388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org if (filters == eighttap_smooth || (filter_x && filter_y)) 62495aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 625923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org UUT_->hv8_(in, kInputStride, out, kOutputStride, 626923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org filters[filter_x], 16, filters[filter_y], 16, 627923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org Width(), Height())); 628923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org else if (filter_y) 62995aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 630923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org UUT_->v8_(in, kInputStride, out, kOutputStride, 631923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org kInvalidFilter, 16, filters[filter_y], 16, 632923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org Width(), Height())); 633923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org else 63495aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 635923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org UUT_->h8_(in, kInputStride, out, kOutputStride, 636923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org filters[filter_x], 16, kInvalidFilter, 16, 637923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org Width(), Height())); 638923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 639923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org CheckGuardBlocks(); 640923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 641923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int y = 0; y < Height(); ++y) 642923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int x = 0; x < Width(); ++x) 64387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASSERT_EQ(lookup(ref, y * kOutputStride + x), 64487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org lookup(out, y * kOutputStride + x)) 645923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org << "mismatch at (" << x << "," << y << "), " 646923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org << "filters (" << filter_bank << "," 647923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org << filter_x << "," << filter_y << ")"; 648923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 649923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 650923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 651923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org} 652923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 653923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgTEST_P(ConvolveTest, MatchesReferenceAveragingSubpixelFilter) { 654923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const in = input(); 655923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const out = output(); 65687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 65787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t ref8[kOutputStride * kMaxDimension]; 65887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t ref16[kOutputStride * kMaxDimension]; 65987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t* ref; 66087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ == 0) { 66187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ref = ref8; 66287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 66387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ref = CONVERT_TO_BYTEPTR(ref16); 66487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 66587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 666923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t ref[kOutputStride * kMaxDimension]; 66787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 668923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 669923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org // Populate ref and out with some random data 670923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org ::libvpx_test::ACMRandom prng; 671923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int y = 0; y < Height(); ++y) { 672923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int x = 0; x < Width(); ++x) { 67387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t r; 67487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 67587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ == 0 || UUT_->use_high_bd_ == 8) { 67687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org r = prng.Rand8Extremes(); 67787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 67887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org r = prng.Rand16() & mask_; 67987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 68087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 68187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org r = prng.Rand8Extremes(); 68287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 683923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 68487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org assign_val(out, y * kOutputStride + x, r); 68587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org assign_val(ref, y * kOutputStride + x, r); 686923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 687923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 688923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 689923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { 690693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const InterpKernel *filters = 691693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com vp9_get_interp_kernel(static_cast<INTERP_FILTER>(filter_bank)); 69288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const InterpKernel *const eighttap_smooth = 69388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org vp9_get_interp_kernel(EIGHTTAP_SMOOTH); 694923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 695923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { 696923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { 69787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrapper_filter_average_block2d_8_c(in, kInputStride, 69887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filters[filter_x], filters[filter_y], 69987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ref, kOutputStride, 70087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org Width(), Height()); 701923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 70288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org if (filters == eighttap_smooth || (filter_x && filter_y)) 70395aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 704923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org UUT_->hv8_avg_(in, kInputStride, out, kOutputStride, 705923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org filters[filter_x], 16, filters[filter_y], 16, 706923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org Width(), Height())); 707923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org else if (filter_y) 70895aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 709923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org UUT_->v8_avg_(in, kInputStride, out, kOutputStride, 710923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org filters[filter_x], 16, filters[filter_y], 16, 711923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org Width(), Height())); 712923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org else 71395aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 714923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org UUT_->h8_avg_(in, kInputStride, out, kOutputStride, 715923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org filters[filter_x], 16, filters[filter_y], 16, 716923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org Width(), Height())); 717923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 718923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org CheckGuardBlocks(); 719923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 720923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int y = 0; y < Height(); ++y) 721923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int x = 0; x < Width(); ++x) 72287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASSERT_EQ(lookup(ref, y * kOutputStride + x), 72387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org lookup(out, y * kOutputStride + x)) 724923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org << "mismatch at (" << x << "," << y << "), " 725923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org << "filters (" << filter_bank << "," 726923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org << filter_x << "," << filter_y << ")"; 727923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 728923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 729923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 730923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org} 731923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 73287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgTEST_P(ConvolveTest, FilterExtremes) { 73387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *const in = input(); 73487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *const out = output(); 73587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 73687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t ref8[kOutputStride * kMaxDimension]; 73787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t ref16[kOutputStride * kMaxDimension]; 73887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *ref; 73987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ == 0) { 74087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ref = ref8; 74187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 74287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ref = CONVERT_TO_BYTEPTR(ref16); 74387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 74487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 74587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t ref[kOutputStride * kMaxDimension]; 74687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 74787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 74887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // Populate ref and out with some random data 74987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ::libvpx_test::ACMRandom prng; 75087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (int y = 0; y < Height(); ++y) { 75187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (int x = 0; x < Width(); ++x) { 75287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t r; 75387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 75487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (UUT_->use_high_bd_ == 0 || UUT_->use_high_bd_ == 8) { 75587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org r = prng.Rand8Extremes(); 75687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } else { 75787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org r = prng.Rand16() & mask_; 75887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 75987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 76087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org r = prng.Rand8Extremes(); 76187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 76287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org assign_val(out, y * kOutputStride + x, r); 76387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org assign_val(ref, y * kOutputStride + x, r); 76487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 76587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 76687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 76787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (int axis = 0; axis < 2; axis++) { 76887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int seed_val = 0; 76987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org while (seed_val < 256) { 77087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (int y = 0; y < 8; ++y) { 77187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (int x = 0; x < 8; ++x) { 77287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 77387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org assign_val(in, y * kOutputStride + x - SUBPEL_TAPS / 2 + 1, 77487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ((seed_val >> (axis ? y : x)) & 1) * mask_); 77587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 77687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org assign_val(in, y * kOutputStride + x - SUBPEL_TAPS / 2 + 1, 77787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ((seed_val >> (axis ? y : x)) & 1) * 255); 77887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 77987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (axis) seed_val++; 78087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 78187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (axis) 78287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org seed_val-= 8; 78387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org else 78487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org seed_val++; 78587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 78687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (axis) seed_val += 8; 78787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 78887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (int filter_bank = 0; filter_bank < kNumFilterBanks; ++filter_bank) { 78987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const InterpKernel *filters = 79087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_get_interp_kernel(static_cast<INTERP_FILTER>(filter_bank)); 79187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const InterpKernel *const eighttap_smooth = 79287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_get_interp_kernel(EIGHTTAP_SMOOTH); 79387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (int filter_x = 0; filter_x < kNumFilters; ++filter_x) { 79487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (int filter_y = 0; filter_y < kNumFilters; ++filter_y) { 79587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrapper_filter_block2d_8_c(in, kInputStride, 79687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filters[filter_x], filters[filter_y], 79787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ref, kOutputStride, 79887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org Width(), Height()); 79987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org if (filters == eighttap_smooth || (filter_x && filter_y)) 80087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASM_REGISTER_STATE_CHECK( 80187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org UUT_->hv8_(in, kInputStride, out, kOutputStride, 80287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filters[filter_x], 16, filters[filter_y], 16, 80387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org Width(), Height())); 80487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org else if (filter_y) 80587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASM_REGISTER_STATE_CHECK( 80687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org UUT_->v8_(in, kInputStride, out, kOutputStride, 80787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org kInvalidFilter, 16, filters[filter_y], 16, 80887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org Width(), Height())); 80987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org else 81087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASM_REGISTER_STATE_CHECK( 81187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org UUT_->h8_(in, kInputStride, out, kOutputStride, 81287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filters[filter_x], 16, kInvalidFilter, 16, 81387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org Width(), Height())); 81487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 81587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (int y = 0; y < Height(); ++y) 81687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (int x = 0; x < Width(); ++x) 81787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASSERT_EQ(lookup(ref, y * kOutputStride + x), 81887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org lookup(out, y * kOutputStride + x)) 81987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org << "mismatch at (" << x << "," << y << "), " 82087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org << "filters (" << filter_bank << "," 82187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org << filter_x << "," << filter_y << ")"; 82287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 82387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 82487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 82587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 82687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 82787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 82887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 829923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgDECLARE_ALIGNED(256, const int16_t, kChangeFilters[16][8]) = { 830923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 0, 0, 0, 0, 0, 128}, 831923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 0, 0, 0, 0, 128}, 832923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 0, 0, 0, 128}, 833923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 0, 0, 128}, 834923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 0, 128}, 835923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 128}, 836923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 128}, 837923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 128}, 838923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 0, 0, 0, 0, 0, 128}, 839923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 0, 0, 0, 0, 128}, 840923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 0, 0, 0, 128}, 841923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 0, 0, 128}, 842923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 0, 128}, 843923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 0, 128}, 844923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 0, 128}, 845923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org { 128} 846923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org}; 847923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 84853a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org/* This test exercises the horizontal and vertical filter functions. */ 849923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgTEST_P(ConvolveTest, ChangeFilterWorks) { 850923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const in = input(); 851923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org uint8_t* const out = output(); 85253a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org 85353a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org /* Assume that the first input sample is at the 8/16th position. */ 85453a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org const int kInitialSubPelOffset = 8; 85553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org 85653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org /* Filters are 8-tap, so the first filter tap will be applied to the pixel 85753a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * at position -3 with respect to the current filtering position. Since 85853a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * kInitialSubPelOffset is set to 8, we first select sub-pixel filter 8, 85953a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * which is non-zero only in the last tap. So, applying the filter at the 86053a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * current input position will result in an output equal to the pixel at 86153a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * offset +4 (-3 + 7) with respect to the current filtering position. 86253a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org */ 86310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int kPixelSelected = 4; 864923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 86553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org /* Assume that each output pixel requires us to step on by 17/16th pixels in 86653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * the input. 86753a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org */ 86853a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org const int kInputPixelStep = 17; 86953a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org 87053a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org /* The filters are setup in such a way that the expected output produces 87153a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * sets of 8 identical output samples. As the filter position moves to the 87253a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * next 1/16th pixel position the only active (=128) filter tap moves one 87353a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * position to the left, resulting in the same input pixel being replicated 87453a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * in to the output for 8 consecutive samples. After each set of 8 positions 87553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * the filters select a different input pixel. kFilterPeriodAdjust below 87653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * computes which input pixel is written to the output for a specified 87753a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org * x or y position. 87853a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org */ 87953a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org 88053a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org /* Test the horizontal filter. */ 88195aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 88295aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com UUT_->h8_(in, kInputStride, out, kOutputStride, 88395aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com kChangeFilters[kInitialSubPelOffset], 88495aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com kInputPixelStep, NULL, 0, Width(), Height())); 885923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 886923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int x = 0; x < Width(); ++x) { 88710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int kFilterPeriodAdjust = (x >> 3) << 3; 88853a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org const int ref_x = 88953a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org kPixelSelected + ((kInitialSubPelOffset 89053a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org + kFilterPeriodAdjust * kInputPixelStep) 89153a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org >> SUBPEL_BITS); 89287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASSERT_EQ(lookup(in, ref_x), lookup(out, x)) 89387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org << "x == " << x << "width = " << Width(); 894923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 895923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 89653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org /* Test the vertical filter. */ 89795aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 89895aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com UUT_->v8_(in, kInputStride, out, kOutputStride, 89995aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com NULL, 0, kChangeFilters[kInitialSubPelOffset], 90095aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com kInputPixelStep, Width(), Height())); 901923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 902923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int y = 0; y < Height(); ++y) { 90310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int kFilterPeriodAdjust = (y >> 3) << 3; 90453a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org const int ref_y = 90553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org kPixelSelected + ((kInitialSubPelOffset 90653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org + kFilterPeriodAdjust * kInputPixelStep) 90753a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org >> SUBPEL_BITS); 90887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASSERT_EQ(lookup(in, ref_y * kInputStride), lookup(out, y * kInputStride)) 90987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org << "y == " << y; 910923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 911923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 91253a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org /* Test the horizontal and vertical filters in combination. */ 91395aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK( 91495aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com UUT_->hv8_(in, kInputStride, out, kOutputStride, 91595aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com kChangeFilters[kInitialSubPelOffset], kInputPixelStep, 91695aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com kChangeFilters[kInitialSubPelOffset], kInputPixelStep, 91795aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com Width(), Height())); 918923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 919923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int y = 0; y < Height(); ++y) { 92010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int kFilterPeriodAdjustY = (y >> 3) << 3; 92153a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org const int ref_y = 92253a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org kPixelSelected + ((kInitialSubPelOffset 92353a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org + kFilterPeriodAdjustY * kInputPixelStep) 92453a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org >> SUBPEL_BITS); 925923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org for (int x = 0; x < Width(); ++x) { 92610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org const int kFilterPeriodAdjustX = (x >> 3) << 3; 92753a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org const int ref_x = 92853a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org kPixelSelected + ((kInitialSubPelOffset 92953a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org + kFilterPeriodAdjustX * kInputPixelStep) 93053a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org >> SUBPEL_BITS); 931923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 93287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASSERT_EQ(lookup(in, ref_y * kInputStride + ref_x), 93387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org lookup(out, y * kOutputStride + x)) 934923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org << "x == " << x << ", y == " << y; 935923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 936923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org } 937923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org} 938923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 939f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org/* This test exercises that enough rows and columns are filtered with every 940f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org possible initial fractional positions and scaling steps. */ 941f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.orgTEST_P(ConvolveTest, CheckScalingFiltering) { 942f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org uint8_t* const in = input(); 943f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org uint8_t* const out = output(); 94488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const InterpKernel *const eighttap = vp9_get_interp_kernel(EIGHTTAP); 945f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org 946f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org SetConstantInput(127); 947f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org 948f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org for (int frac = 0; frac < 16; ++frac) { 949f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org for (int step = 1; step <= 32; ++step) { 950f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org /* Test the horizontal and vertical filters in combination. */ 95195aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com ASM_REGISTER_STATE_CHECK(UUT_->hv8_(in, kInputStride, out, kOutputStride, 95295aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com eighttap[frac], step, 95395aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com eighttap[frac], step, 95495aa45d73048f952dcaad0037429cc6751b34f2fjohannkoenig@google.com Width(), Height())); 955f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org 956f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org CheckGuardBlocks(); 957f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org 958f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org for (int y = 0; y < Height(); ++y) { 959f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org for (int x = 0; x < Width(); ++x) { 96087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ASSERT_EQ(lookup(in, y * kInputStride + x), 96187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org lookup(out, y * kOutputStride + x)) 962f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org << "x == " << x << ", y == " << y 963f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org << ", frac == " << frac << ", step == " << step; 964f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org } 965f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org } 966f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org } 967f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org } 968f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org} 969f9586bb54d74c97d07b09eb2512f8569c9c1c025fgalligan@chromium.org 970923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgusing std::tr1::make_tuple; 971923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 97287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 97387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if HAVE_SSE2 && ARCH_X86_64 97487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_horiz_sse2_8(const uint8_t *src, ptrdiff_t src_stride, 97587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 97687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 97787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 97887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 97987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 98087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 98187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_horiz_sse2(src, src_stride, dst, dst_stride, filter_x, 98287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 98387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 8); 98487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 98587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 98687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_horiz_sse2_8(const uint8_t *src, ptrdiff_t src_stride, 98787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 98887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 98987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 99087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 99187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 99287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 99387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_horiz_sse2(src, src_stride, dst, dst_stride, filter_x, 99487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 8); 99587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 99687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 99787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_vert_sse2_8(const uint8_t *src, ptrdiff_t src_stride, 99887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 99987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 100087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 100187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 100287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 100387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 100487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_vert_sse2(src, src_stride, dst, dst_stride, filter_x, 100587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 8); 100687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 100787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 100887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_vert_sse2_8(const uint8_t *src, ptrdiff_t src_stride, 100987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 101087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 101187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 101287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 101387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 101487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 101587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_vert_sse2(src, src_stride, dst, dst_stride, filter_x, 101687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 101787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 8); 101887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 101987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 102087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_sse2_8(const uint8_t *src, ptrdiff_t src_stride, 102187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 102287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 102387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 102487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 102587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 102687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 102787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_sse2(src, src_stride, dst, dst_stride, filter_x, 102887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 8); 102987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 103087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 103187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_sse2_8(const uint8_t *src, ptrdiff_t src_stride, 103287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 103387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 103487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 103587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 103687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 103787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 103887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_sse2(src, src_stride, dst, dst_stride, filter_x, 103987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 8); 104087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 104187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 104287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_horiz_sse2_10(const uint8_t *src, ptrdiff_t src_stride, 104387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 104487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 104587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 104687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 104787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 104887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 104987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_horiz_sse2(src, src_stride, dst, dst_stride, filter_x, 105087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 10); 105187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 105287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 105387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_horiz_sse2_10(const uint8_t *src, ptrdiff_t src_stride, 105487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 105587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 105687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 105787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 105887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 105987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 106087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_horiz_sse2(src, src_stride, dst, dst_stride, filter_x, 106187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 10); 106287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 106387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 106487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_vert_sse2_10(const uint8_t *src, ptrdiff_t src_stride, 106587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 106687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 106787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 106887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 106987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 107087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 107187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_vert_sse2(src, src_stride, dst, dst_stride, filter_x, 107287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 10); 107387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 107487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 107587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_vert_sse2_10(const uint8_t *src, ptrdiff_t src_stride, 107687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 107787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 107887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 107987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 108087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 108187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 108287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_vert_sse2(src, src_stride, dst, dst_stride, filter_x, 108387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 10); 108487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 108587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 108687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_sse2_10(const uint8_t *src, ptrdiff_t src_stride, 108787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 108887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 108987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 109087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 109187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 109287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 109387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_sse2(src, src_stride, dst, dst_stride, filter_x, 109487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 10); 109587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 109687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 109787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_sse2_10(const uint8_t *src, ptrdiff_t src_stride, 109887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 109987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 110087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 110187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 110287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 110387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 110487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_sse2(src, src_stride, dst, dst_stride, filter_x, 110587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 110687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 10); 110787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 110887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 110987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_horiz_sse2_12(const uint8_t *src, ptrdiff_t src_stride, 111087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 111187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 111287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 111387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 111487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 111587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 111687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_horiz_sse2(src, src_stride, dst, dst_stride, filter_x, 111787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 111887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 12); 111987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 112087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 112187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_horiz_sse2_12(const uint8_t *src, ptrdiff_t src_stride, 112287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 112387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 112487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 112587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 112687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 112787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 112887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_horiz_sse2(src, src_stride, dst, dst_stride, filter_x, 112987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 113087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 12); 113187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 113287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 113387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_vert_sse2_12(const uint8_t *src, ptrdiff_t src_stride, 113487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 113587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 113687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 113787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 113887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 113987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 114087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_vert_sse2(src, src_stride, dst, dst_stride, filter_x, 114187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 114287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 12); 114387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 114487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 114587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_vert_sse2_12(const uint8_t *src, ptrdiff_t src_stride, 114687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 114787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 114887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 114987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 115087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 115187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 115287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_vert_sse2(src, src_stride, dst, dst_stride, filter_x, 115387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 12); 115487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 115587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 115687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_sse2_12(const uint8_t *src, ptrdiff_t src_stride, 115787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 115887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 115987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 116087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 116187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 116287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 116387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_sse2(src, src_stride, dst, dst_stride, filter_x, 116487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 12); 116587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 116687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 116787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_sse2_12(const uint8_t *src, ptrdiff_t src_stride, 116887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 116987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 117087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 117187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 117287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 117387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 117487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_sse2(src, src_stride, dst, dst_stride, filter_x, 117587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 12); 117687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 117787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif // HAVE_SSE2 && ARCH_X86_64 117887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 117987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_horiz_c_8(const uint8_t *src, ptrdiff_t src_stride, 118087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 118187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 118287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 118387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 118487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 118587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 118687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_horiz_c(src, src_stride, dst, dst_stride, filter_x, 118787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 8); 118887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 118987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 119087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_horiz_c_8(const uint8_t *src, ptrdiff_t src_stride, 119187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 119287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 119387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 119487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 119587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 119687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 119787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_horiz_c(src, src_stride, dst, dst_stride, filter_x, 119887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 8); 119987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 120087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 120187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_vert_c_8(const uint8_t *src, ptrdiff_t src_stride, 120287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 120387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 120487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 120587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 120687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 120787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 120887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_vert_c(src, src_stride, dst, dst_stride, filter_x, 120987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 8); 121087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 121187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 121287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_vert_c_8(const uint8_t *src, ptrdiff_t src_stride, 121387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 121487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 121587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 121687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 121787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 121887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 121987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_vert_c(src, src_stride, dst, dst_stride, filter_x, 122087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 8); 122187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 122287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 122387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_c_8(const uint8_t *src, ptrdiff_t src_stride, 122487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 122587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 122687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 122787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 122887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 122987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 123087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_c(src, src_stride, dst, dst_stride, filter_x, 123187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 8); 123287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 123387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 123487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_c_8(const uint8_t *src, ptrdiff_t src_stride, 123587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 123687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 123787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 123887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 123987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 124087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 124187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_c(src, src_stride, dst, dst_stride, filter_x, 124287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 124387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 8); 124487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 124587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 124687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_horiz_c_10(const uint8_t *src, ptrdiff_t src_stride, 124787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 124887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 124987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 125087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 125187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 125287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 125387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_horiz_c(src, src_stride, dst, dst_stride, filter_x, 125487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 10); 125587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 125687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 125787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_horiz_c_10(const uint8_t *src, ptrdiff_t src_stride, 125887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 125987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 126087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 126187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 126287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 126387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 126487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_horiz_c(src, src_stride, dst, dst_stride, filter_x, 126587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 126687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 10); 126787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 126887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 126987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_vert_c_10(const uint8_t *src, ptrdiff_t src_stride, 127087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 127187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 127287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 127387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 127487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 127587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 127687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_vert_c(src, src_stride, dst, dst_stride, filter_x, 127787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 10); 127887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 127987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 128087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_vert_c_10(const uint8_t *src, ptrdiff_t src_stride, 128187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 128287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 128387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 128487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 128587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 128687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 128787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_vert_c(src, src_stride, dst, dst_stride, filter_x, 128887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 10); 128987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 129087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 129187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_c_10(const uint8_t *src, ptrdiff_t src_stride, 129287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 129387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 129487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 129587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 129687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 129787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 129887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_c(src, src_stride, dst, dst_stride, filter_x, 129987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 10); 130087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 130187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 130287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_c_10(const uint8_t *src, ptrdiff_t src_stride, 130387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 130487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 130587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 130687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 130787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 130887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 130987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_c(src, src_stride, dst, dst_stride, filter_x, 131087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, w, h, 10); 131187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 131287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 131387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_horiz_c_12(const uint8_t *src, ptrdiff_t src_stride, 131487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 131587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 131687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 131787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 131887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 131987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 132087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_horiz_c(src, src_stride, dst, dst_stride, filter_x, 132187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 132287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 12); 132387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 132487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 132587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_horiz_c_12(const uint8_t *src, ptrdiff_t src_stride, 132687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 132787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 132887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 132987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 133087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 133187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 133287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_horiz_c(src, src_stride, dst, dst_stride, filter_x, 133387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 133487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 12); 133587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 133687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 133787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_vert_c_12(const uint8_t *src, ptrdiff_t src_stride, 133887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 133987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 134087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 134187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 134287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 134387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 134487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_vert_c(src, src_stride, dst, dst_stride, filter_x, 134587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 134687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 12); 134787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 134887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 134987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_vert_c_12(const uint8_t *src, ptrdiff_t src_stride, 135087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 135187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 135287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 135387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 135487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 135587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 135687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_vert_c(src, src_stride, dst, dst_stride, filter_x, 135787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 135887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 12); 135987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 136087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 136187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_c_12(const uint8_t *src, ptrdiff_t src_stride, 136287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 136387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 136487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 136587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 136687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 136787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 136887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_c(src, src_stride, dst, dst_stride, filter_x, 136987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 137087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 12); 137187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 137287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 137387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid wrap_convolve8_avg_c_12(const uint8_t *src, ptrdiff_t src_stride, 137487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint8_t *dst, ptrdiff_t dst_stride, 137587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_x, 137687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_x_stride, 137787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *filter_y, 137887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int filter_y_stride, 137987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h) { 138087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_convolve8_avg_c(src, src_stride, dst, dst_stride, filter_x, 138187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org filter_x_stride, filter_y, filter_y_stride, 138287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org w, h, 12); 138387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 138487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 138587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgconst ConvolveFunctions convolve8_c( 138687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_horiz_c_8, wrap_convolve8_avg_horiz_c_8, 138787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_vert_c_8, wrap_convolve8_avg_vert_c_8, 138887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_c_8, wrap_convolve8_avg_c_8, 8); 138987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgINSTANTIATE_TEST_CASE_P(C_8, ConvolveTest, ::testing::Values( 139087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 4, &convolve8_c), 139187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 4, &convolve8_c), 139287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 8, &convolve8_c), 139387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 8, &convolve8_c), 139487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 8, &convolve8_c), 139587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 16, &convolve8_c), 139687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 16, &convolve8_c), 139787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 16, &convolve8_c), 139887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 32, &convolve8_c), 139987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 32, &convolve8_c), 140087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 32, &convolve8_c), 140187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 64, &convolve8_c), 140287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 64, &convolve8_c))); 140387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgconst ConvolveFunctions convolve10_c( 140487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_horiz_c_10, wrap_convolve8_avg_horiz_c_10, 140587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_vert_c_10, wrap_convolve8_avg_vert_c_10, 140687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_c_10, wrap_convolve8_avg_c_10, 10); 140787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgINSTANTIATE_TEST_CASE_P(C_10, ConvolveTest, ::testing::Values( 140887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 4, &convolve10_c), 140987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 4, &convolve10_c), 141087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 8, &convolve10_c), 141187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 8, &convolve10_c), 141287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 8, &convolve10_c), 141387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 16, &convolve10_c), 141487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 16, &convolve10_c), 141587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 16, &convolve10_c), 141687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 32, &convolve10_c), 141787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 32, &convolve10_c), 141887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 32, &convolve10_c), 141987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 64, &convolve10_c), 142087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 64, &convolve10_c))); 142187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgconst ConvolveFunctions convolve12_c( 142287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_horiz_c_12, wrap_convolve8_avg_horiz_c_12, 142387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_vert_c_12, wrap_convolve8_avg_vert_c_12, 142487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_c_12, wrap_convolve8_avg_c_12, 12); 142587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgINSTANTIATE_TEST_CASE_P(C_12, ConvolveTest, ::testing::Values( 142687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 4, &convolve12_c), 142787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 4, &convolve12_c), 142887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 8, &convolve12_c), 142987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 8, &convolve12_c), 143087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 8, &convolve12_c), 143187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 16, &convolve12_c), 143287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 16, &convolve12_c), 143387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 16, &convolve12_c), 143487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 32, &convolve12_c), 143587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 32, &convolve12_c), 143687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 32, &convolve12_c), 143787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 64, &convolve12_c), 143887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 64, &convolve12_c))); 143987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 144087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 144187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 1442923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgconst ConvolveFunctions convolve8_c( 1443923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org vp9_convolve8_horiz_c, vp9_convolve8_avg_horiz_c, 1444923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org vp9_convolve8_vert_c, vp9_convolve8_avg_vert_c, 144587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_convolve8_c, vp9_convolve8_avg_c, 0); 1446923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 1447923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgINSTANTIATE_TEST_CASE_P(C, ConvolveTest, ::testing::Values( 1448923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org make_tuple(4, 4, &convolve8_c), 1449923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org make_tuple(8, 4, &convolve8_c), 145010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(4, 8, &convolve8_c), 1451923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org make_tuple(8, 8, &convolve8_c), 1452923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org make_tuple(16, 8, &convolve8_c), 145310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(8, 16, &convolve8_c), 145410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(16, 16, &convolve8_c), 145510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(32, 16, &convolve8_c), 145610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(16, 32, &convolve8_c), 145710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(32, 32, &convolve8_c), 145810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(64, 32, &convolve8_c), 145910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(32, 64, &convolve8_c), 146010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(64, 64, &convolve8_c))); 146187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif 1462923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 146387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if HAVE_SSE2 && ARCH_X86_64 146487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 146587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgconst ConvolveFunctions convolve8_sse2( 146687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_horiz_sse2_8, wrap_convolve8_avg_horiz_sse2_8, 146787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_vert_sse2_8, wrap_convolve8_avg_vert_sse2_8, 146887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_sse2_8, wrap_convolve8_avg_sse2_8, 8); 146987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgINSTANTIATE_TEST_CASE_P(SSE2_8, ConvolveTest, ::testing::Values( 147087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 4, &convolve8_sse2), 147187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 4, &convolve8_sse2), 147287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 8, &convolve8_sse2), 147387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 8, &convolve8_sse2), 147487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 8, &convolve8_sse2), 147587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 16, &convolve8_sse2), 147687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 16, &convolve8_sse2), 147787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 16, &convolve8_sse2), 147887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 32, &convolve8_sse2), 147987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 32, &convolve8_sse2), 148087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 32, &convolve8_sse2), 148187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 64, &convolve8_sse2), 148287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 64, &convolve8_sse2))); 148387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgconst ConvolveFunctions convolve10_sse2( 148487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_horiz_sse2_10, wrap_convolve8_avg_horiz_sse2_10, 148587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_vert_sse2_10, wrap_convolve8_avg_vert_sse2_10, 148687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_sse2_10, wrap_convolve8_avg_sse2_10, 10); 148787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgINSTANTIATE_TEST_CASE_P(SSE2_10, ConvolveTest, ::testing::Values( 148887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 4, &convolve10_sse2), 148987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 4, &convolve10_sse2), 149087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 8, &convolve10_sse2), 149187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 8, &convolve10_sse2), 149287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 8, &convolve10_sse2), 149387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 16, &convolve10_sse2), 149487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 16, &convolve10_sse2), 149587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 16, &convolve10_sse2), 149687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 32, &convolve10_sse2), 149787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 32, &convolve10_sse2), 149887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 32, &convolve10_sse2), 149987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 64, &convolve10_sse2), 150087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 64, &convolve10_sse2))); 150187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgconst ConvolveFunctions convolve12_sse2( 150287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_horiz_sse2_12, wrap_convolve8_avg_horiz_sse2_12, 150387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_vert_sse2_12, wrap_convolve8_avg_vert_sse2_12, 150487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org wrap_convolve8_sse2_12, wrap_convolve8_avg_sse2_12, 12); 150587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgINSTANTIATE_TEST_CASE_P(SSE2_12, ConvolveTest, ::testing::Values( 150687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 4, &convolve12_sse2), 150787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 4, &convolve12_sse2), 150887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(4, 8, &convolve12_sse2), 150987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 8, &convolve12_sse2), 151087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 8, &convolve12_sse2), 151187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(8, 16, &convolve12_sse2), 151287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 16, &convolve12_sse2), 151387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 16, &convolve12_sse2), 151487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(16, 32, &convolve12_sse2), 151587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 32, &convolve12_sse2), 151687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 32, &convolve12_sse2), 151787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(32, 64, &convolve12_sse2), 151887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org make_tuple(64, 64, &convolve12_sse2))); 151987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#else 15200d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.orgconst ConvolveFunctions convolve8_sse2( 15210d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org vp9_convolve8_horiz_sse2, vp9_convolve8_avg_horiz_sse2, 15220d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org vp9_convolve8_vert_sse2, vp9_convolve8_avg_vert_sse2, 152387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_convolve8_sse2, vp9_convolve8_avg_sse2, 0); 15240d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org 15250d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.orgINSTANTIATE_TEST_CASE_P(SSE2, ConvolveTest, ::testing::Values( 15260d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(4, 4, &convolve8_sse2), 15270d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(8, 4, &convolve8_sse2), 15280d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(4, 8, &convolve8_sse2), 15290d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(8, 8, &convolve8_sse2), 15300d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(16, 8, &convolve8_sse2), 15310d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(8, 16, &convolve8_sse2), 15320d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(16, 16, &convolve8_sse2), 15330d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(32, 16, &convolve8_sse2), 15340d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(16, 32, &convolve8_sse2), 15350d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(32, 32, &convolve8_sse2), 15360d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(64, 32, &convolve8_sse2), 15370d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(32, 64, &convolve8_sse2), 15380d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(64, 64, &convolve8_sse2))); 153987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif // CONFIG_VP9_HIGHBITDEPTH 15400d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org#endif 15410d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org 1542923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org#if HAVE_SSSE3 1543923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgconst ConvolveFunctions convolve8_ssse3( 154453a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org vp9_convolve8_horiz_ssse3, vp9_convolve8_avg_horiz_ssse3, 154553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org vp9_convolve8_vert_ssse3, vp9_convolve8_avg_vert_ssse3, 154687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_convolve8_ssse3, vp9_convolve8_avg_ssse3, 0); 1547923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org 1548923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.orgINSTANTIATE_TEST_CASE_P(SSSE3, ConvolveTest, ::testing::Values( 1549923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org make_tuple(4, 4, &convolve8_ssse3), 1550923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org make_tuple(8, 4, &convolve8_ssse3), 155110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(4, 8, &convolve8_ssse3), 1552923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org make_tuple(8, 8, &convolve8_ssse3), 1553923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org make_tuple(16, 8, &convolve8_ssse3), 155410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(8, 16, &convolve8_ssse3), 155510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(16, 16, &convolve8_ssse3), 155610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(32, 16, &convolve8_ssse3), 155710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(16, 32, &convolve8_ssse3), 155810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(32, 32, &convolve8_ssse3), 155910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(64, 32, &convolve8_ssse3), 156010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(32, 64, &convolve8_ssse3), 156110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org make_tuple(64, 64, &convolve8_ssse3))); 1562923acb6a717b7f2719ed21184c1bc533b0a14888johannkoenig@chromium.org#endif 156347265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org 156487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if HAVE_AVX2 && HAVE_SSSE3 156588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgconst ConvolveFunctions convolve8_avx2( 156688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org vp9_convolve8_horiz_avx2, vp9_convolve8_avg_horiz_ssse3, 156788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org vp9_convolve8_vert_avx2, vp9_convolve8_avg_vert_ssse3, 156887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_convolve8_avx2, vp9_convolve8_avg_ssse3, 0); 156988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 157088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgINSTANTIATE_TEST_CASE_P(AVX2, ConvolveTest, ::testing::Values( 157188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(4, 4, &convolve8_avx2), 157288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(8, 4, &convolve8_avx2), 157388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(4, 8, &convolve8_avx2), 157488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(8, 8, &convolve8_avx2), 1575ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org make_tuple(8, 16, &convolve8_avx2), 157688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(16, 8, &convolve8_avx2), 157788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(16, 16, &convolve8_avx2), 157888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(32, 16, &convolve8_avx2), 157988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(16, 32, &convolve8_avx2), 158088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(32, 32, &convolve8_avx2), 158188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(64, 32, &convolve8_avx2), 158288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(32, 64, &convolve8_avx2), 158388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org make_tuple(64, 64, &convolve8_avx2))); 158487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif // HAVE_AVX2 && HAVE_SSSE3 158588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 15867765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org#if HAVE_NEON_ASM 158747265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgconst ConvolveFunctions convolve8_neon( 158847265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org vp9_convolve8_horiz_neon, vp9_convolve8_avg_horiz_neon, 158947265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org vp9_convolve8_vert_neon, vp9_convolve8_avg_vert_neon, 159087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_convolve8_neon, vp9_convolve8_avg_neon, 0); 159147265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org 159247265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgINSTANTIATE_TEST_CASE_P(NEON, ConvolveTest, ::testing::Values( 159347265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(4, 4, &convolve8_neon), 159447265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(8, 4, &convolve8_neon), 159547265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(4, 8, &convolve8_neon), 159647265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(8, 8, &convolve8_neon), 159747265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(16, 8, &convolve8_neon), 159847265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(8, 16, &convolve8_neon), 159947265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(16, 16, &convolve8_neon), 160047265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(32, 16, &convolve8_neon), 160147265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(16, 32, &convolve8_neon), 160247265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(32, 32, &convolve8_neon), 160347265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(64, 32, &convolve8_neon), 160447265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(32, 64, &convolve8_neon), 160547265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org make_tuple(64, 64, &convolve8_neon))); 160647265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org#endif 16070d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org 16080d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org#if HAVE_DSPR2 16090d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.orgconst ConvolveFunctions convolve8_dspr2( 16100d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org vp9_convolve8_horiz_dspr2, vp9_convolve8_avg_horiz_dspr2, 16110d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org vp9_convolve8_vert_dspr2, vp9_convolve8_avg_vert_dspr2, 161287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_convolve8_dspr2, vp9_convolve8_avg_dspr2, 0); 16130d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org 16140d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.orgINSTANTIATE_TEST_CASE_P(DSPR2, ConvolveTest, ::testing::Values( 16150d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(4, 4, &convolve8_dspr2), 16160d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(8, 4, &convolve8_dspr2), 16170d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(4, 8, &convolve8_dspr2), 16180d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(8, 8, &convolve8_dspr2), 16190d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(16, 8, &convolve8_dspr2), 16200d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(8, 16, &convolve8_dspr2), 16210d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(16, 16, &convolve8_dspr2), 16220d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(32, 16, &convolve8_dspr2), 16230d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(16, 32, &convolve8_dspr2), 16240d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(32, 32, &convolve8_dspr2), 16250d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(64, 32, &convolve8_dspr2), 16260d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(32, 64, &convolve8_dspr2), 16270d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org make_tuple(64, 64, &convolve8_dspr2))); 16280d106b34dc08439a7c6887d1316a3e1a35f8f0cajohannkoenig@chromium.org#endif 162910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org} // namespace 1630