16fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org/* 26fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 36fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * 46fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * Use of this source code is governed by a BSD-style license 56fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * that can be found in the LICENSE file in the root of the source 66fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * tree. An additional intellectual property rights grant can be found 76fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * in the file PATENTS. All contributing project authors may 86fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org * be found in the AUTHORS file in the root of the source tree. 96fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org */ 106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 11ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org#include "./vp9_rtcd.h" 126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org#include "vpx_ports/mem.h" 14ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org#include "vpx/vpx_integer.h" 15ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 16ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org#include "vp9/common/vp9_common.h" 17ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org#include "vp9/common/vp9_filter.h" 18ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 19ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org#include "vp9/encoder/vp9_variance.h" 20ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 21693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comvoid variance(const uint8_t *a, int a_stride, 22693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const uint8_t *b, int b_stride, 23693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com int w, int h, unsigned int *sse, int *sum) { 24ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org int i, j; 25ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 26ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org *sum = 0; 27ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org *sse = 0; 28ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 29ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org for (i = 0; i < h; i++) { 30ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org for (j = 0; j < w; j++) { 31693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const int diff = a[j] - b[j]; 32ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org *sum += diff; 33ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org *sse += diff * diff; 34ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org } 35ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 36693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com a += a_stride; 37693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com b += b_stride; 38ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org } 39ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org} 40ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 41693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// Applies a 1-D 2-tap bi-linear filter to the source block in either horizontal 42693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// or vertical direction to produce the filtered output block. Used to implement 43693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// first-pass of 2-D separable filter. 44693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// 45693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// Produces int32_t output to retain precision for next pass. Two filter taps 46693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// should sum to VP9_FILTER_WEIGHT. pixel_step defines whether the filter is 47693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// applied horizontally (pixel_step=1) or vertically (pixel_step=stride). It 48693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// defines the offset required to move from one input to the next. 49ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.orgstatic void var_filter_block2d_bil_first_pass(const uint8_t *src_ptr, 50ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org uint16_t *output_ptr, 51ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org unsigned int src_pixels_per_line, 52ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org int pixel_step, 53ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org unsigned int output_height, 54ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org unsigned int output_width, 55ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org const int16_t *vp9_filter) { 56ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org unsigned int i, j; 57ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 58ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org for (i = 0; i < output_height; i++) { 59ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org for (j = 0; j < output_width; j++) { 60ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org output_ptr[j] = ROUND_POWER_OF_TWO((int)src_ptr[0] * vp9_filter[0] + 61ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org (int)src_ptr[pixel_step] * vp9_filter[1], 62ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org FILTER_BITS); 63ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 64ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org src_ptr++; 65ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org } 66ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 67ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org // Next row... 68ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org src_ptr += src_pixels_per_line - output_width; 69ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org output_ptr += output_width; 70ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org } 71ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org} 72ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 73693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// Applies a 1-D 2-tap bi-linear filter to the source block in either horizontal 74693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// or vertical direction to produce the filtered output block. Used to implement 75693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// second-pass of 2-D separable filter. 76693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// 77693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// Requires 32-bit input as produced by filter_block2d_bil_first_pass. Two 78693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// filter taps should sum to VP9_FILTER_WEIGHT. pixel_step defines whether the 79693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// filter is applied horizontally (pixel_step=1) or vertically (pixel_step= 80693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com// stride). It defines the offset required to move from one input to the next. 81ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.orgstatic void var_filter_block2d_bil_second_pass(const uint16_t *src_ptr, 82ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org uint8_t *output_ptr, 83ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org unsigned int src_pixels_per_line, 84ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org unsigned int pixel_step, 85ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org unsigned int output_height, 86ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org unsigned int output_width, 87ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org const int16_t *vp9_filter) { 88ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org unsigned int i, j; 89ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 90ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org for (i = 0; i < output_height; i++) { 91ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org for (j = 0; j < output_width; j++) { 92ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org output_ptr[j] = ROUND_POWER_OF_TWO((int)src_ptr[0] * vp9_filter[0] + 93ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org (int)src_ptr[pixel_step] * vp9_filter[1], 94ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org FILTER_BITS); 95ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org src_ptr++; 96ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org } 97ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org 98ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org src_ptr += src_pixels_per_line - output_width; 99ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org output_ptr += output_width; 100ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org } 101ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org} 1026fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 103d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.orgunsigned int vp9_get_mb_ss_c(const int16_t *src_ptr) { 1046fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unsigned int i, sum = 0; 1056fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 106d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org for (i = 0; i < 256; ++i) { 107693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com sum += src_ptr[i] * src_ptr[i]; 108d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org } 1096fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 1106fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return sum; 1116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org} 1126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 113693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com#define VAR(W, H) \ 114693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comunsigned int vp9_variance##W##x##H##_c(const uint8_t *a, int a_stride, \ 115693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const uint8_t *b, int b_stride, \ 116693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com unsigned int *sse) { \ 117810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org int sum; \ 118810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org variance(a, a_stride, b, b_stride, W, H, sse, &sum); \ 119810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org return *sse - (((int64_t)sum * sum) / (W * H)); \ 120693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com} 121693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com 122693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com#define SUBPIX_VAR(W, H) \ 123693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comunsigned int vp9_sub_pixel_variance##W##x##H##_c( \ 124693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const uint8_t *src, int src_stride, \ 125693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com int xoffset, int yoffset, \ 126693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const uint8_t *dst, int dst_stride, \ 127693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com unsigned int *sse) { \ 128693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com uint16_t fdata3[(H + 1) * W]; \ 129693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com uint8_t temp2[H * W]; \ 130693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com\ 131693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, W, \ 132693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com BILINEAR_FILTERS_2TAP(xoffset)); \ 133693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \ 134693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com BILINEAR_FILTERS_2TAP(yoffset)); \ 135693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com\ 136693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com return vp9_variance##W##x##H##_c(temp2, W, dst, dst_stride, sse); \ 137693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com} 138693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com 139693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com#define SUBPIX_AVG_VAR(W, H) \ 140693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comunsigned int vp9_sub_pixel_avg_variance##W##x##H##_c( \ 141693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const uint8_t *src, int src_stride, \ 142693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com int xoffset, int yoffset, \ 143693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const uint8_t *dst, int dst_stride, \ 144693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com unsigned int *sse, \ 145693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const uint8_t *second_pred) { \ 146693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com uint16_t fdata3[(H + 1) * W]; \ 147693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com uint8_t temp2[H * W]; \ 148693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com DECLARE_ALIGNED_ARRAY(16, uint8_t, temp3, H * W); \ 149693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com\ 150693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, W, \ 151693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com BILINEAR_FILTERS_2TAP(xoffset)); \ 152693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \ 153693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com BILINEAR_FILTERS_2TAP(yoffset)); \ 154693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com\ 155693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com vp9_comp_avg_pred(temp3, second_pred, W, H, temp2, W); \ 156693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com\ 157693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com return vp9_variance##W##x##H##_c(temp3, W, dst, dst_stride, sse); \ 158693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com} 159693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com 16088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid vp9_get16x16var_c(const uint8_t *src_ptr, int source_stride, 16188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const uint8_t *ref_ptr, int ref_stride, 16288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org unsigned int *sse, int *sum) { 16388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org variance(src_ptr, source_stride, ref_ptr, ref_stride, 16, 16, sse, sum); 16488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org} 16588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 16688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid vp9_get8x8var_c(const uint8_t *src_ptr, int source_stride, 16788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org const uint8_t *ref_ptr, int ref_stride, 16888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org unsigned int *sse, int *sum) { 16988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org variance(src_ptr, source_stride, ref_ptr, ref_stride, 8, 8, sse, sum); 17088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org} 17188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 172810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.orgunsigned int vp9_mse16x16_c(const uint8_t *src, int src_stride, 173810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org const uint8_t *ref, int ref_stride, 1746fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org unsigned int *sse) { 175810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org int sum; 176810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org variance(src, src_stride, ref, ref_stride, 16, 16, sse, &sum); 177810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org return *sse; 1786fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org} 1796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 180810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.orgunsigned int vp9_mse16x8_c(const uint8_t *src, int src_stride, 181810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org const uint8_t *ref, int ref_stride, 18210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org unsigned int *sse) { 183810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org int sum; 184810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org variance(src, src_stride, ref, ref_stride, 16, 8, sse, &sum); 185810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org return *sse; 18610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org} 18710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 188810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.orgunsigned int vp9_mse8x16_c(const uint8_t *src, int src_stride, 189810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org const uint8_t *ref, int ref_stride, 19010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org unsigned int *sse) { 191810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org int sum; 192810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org variance(src, src_stride, ref, ref_stride, 8, 16, sse, &sum); 193810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org return *sse; 19410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org} 19510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 196810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.orgunsigned int vp9_mse8x8_c(const uint8_t *src, int src_stride, 197810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org const uint8_t *ref, int ref_stride, 19810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org unsigned int *sse) { 199810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org int sum; 200810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org variance(src, src_stride, ref, ref_stride, 8, 8, sse, &sum); 201810cf1767dc8df4783e02ba8a712072f50ddc99efgalligan@chromium.org return *sse; 20210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org} 20310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 204693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(4, 4) 205693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(4, 4) 206693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(4, 4) 2076fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 208693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(4, 8) 209693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(4, 8) 210693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(4, 8) 21110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 212693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(8, 4) 213693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(8, 4) 214693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(8, 4) 21510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 216693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(8, 8) 217693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(8, 8) 218693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(8, 8) 219d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org 220693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(8, 16) 221693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(8, 16) 222693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(8, 16) 223d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org 224693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(16, 8) 225693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(16, 8) 226693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(16, 8) 227d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org 228693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(16, 16) 229693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(16, 16) 230693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(16, 16) 231d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org 232693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(16, 32) 233693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(16, 32) 234693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(16, 32) 23510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 236693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(32, 16) 237693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(32, 16) 238693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(32, 16) 23910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 240693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(32, 32) 241693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(32, 32) 242693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(32, 32) 2436fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org 244693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(32, 64) 245693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(32, 64) 246693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(32, 64) 24710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 248693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(64, 32) 249693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(64, 32) 250693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(64, 32) 25110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 252693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comVAR(64, 64) 253693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_VAR(64, 64) 254693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comSUBPIX_AVG_VAR(64, 64) 25510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org 25693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgvoid vp9_comp_avg_pred(uint8_t *comp_pred, const uint8_t *pred, int width, 25793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int height, const uint8_t *ref, int ref_stride) { 25893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int i, j; 25993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 26093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org for (i = 0; i < height; i++) { 26193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org for (j = 0; j < width; j++) { 262693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com const int tmp = pred[j] + ref[j]; 263693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com comp_pred[j] = ROUND_POWER_OF_TWO(tmp, 1); 26493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org } 26593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org comp_pred += width; 26693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org pred += width; 26793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ref += ref_stride; 26893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org } 26993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} 27087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 27187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#if CONFIG_VP9_HIGHBITDEPTH 27287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid high_variance64(const uint8_t *a8, int a_stride, 27387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *b8, int b_stride, 27487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h, uint64_t *sse, 27587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint64_t *sum) { 27687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int i, j; 27787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 27887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *a = CONVERT_TO_SHORTPTR(a8); 27987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *b = CONVERT_TO_SHORTPTR(b8); 28087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *sum = 0; 28187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *sse = 0; 28287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 28387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (i = 0; i < h; i++) { 28487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (j = 0; j < w; j++) { 28587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int diff = a[j] - b[j]; 28687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *sum += diff; 28787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *sse += diff * diff; 28887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 28987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org a += a_stride; 29087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org b += b_stride; 29187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 29287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 29387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 29487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid high_variance(const uint8_t *a8, int a_stride, 29587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *b8, int b_stride, 29687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h, unsigned int *sse, 29787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int *sum) { 29887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint64_t sse_long = 0; 29987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint64_t sum_long = 0; 30087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_variance64(a8, a_stride, b8, b_stride, w, h, &sse_long, &sum_long); 30187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *sse = sse_long; 30287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *sum = sum_long; 30387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 30487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 30587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid high_10_variance(const uint8_t *a8, int a_stride, 30687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *b8, int b_stride, 30787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h, unsigned int *sse, 30887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int *sum) { 30987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint64_t sse_long = 0; 31087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint64_t sum_long = 0; 31187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_variance64(a8, a_stride, b8, b_stride, w, h, &sse_long, &sum_long); 31287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *sum = ROUND_POWER_OF_TWO(sum_long, 2); 31387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *sse = ROUND_POWER_OF_TWO(sse_long, 4); 31487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 31587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 31687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid high_12_variance(const uint8_t *a8, int a_stride, 31787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *b8, int b_stride, 31887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int w, int h, unsigned int *sse, 31987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int *sum) { 32087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint64_t sse_long = 0; 32187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint64_t sum_long = 0; 32287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_variance64(a8, a_stride, b8, b_stride, w, h, &sse_long, &sum_long); 32387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *sum = ROUND_POWER_OF_TWO(sum_long, 4); 32487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org *sse = ROUND_POWER_OF_TWO(sse_long, 8); 32587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 32687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 32787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgstatic void high_var_filter_block2d_bil_first_pass( 32887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *src_ptr8, 32987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *output_ptr, 33087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int src_pixels_per_line, 33187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int pixel_step, 33287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_height, 33387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_width, 33487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *vp9_filter) { 33587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int i, j; 33687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *src_ptr = CONVERT_TO_SHORTPTR(src_ptr8); 33787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (i = 0; i < output_height; i++) { 33887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (j = 0; j < output_width; j++) { 33987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_ptr[j] = 34087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ROUND_POWER_OF_TWO((int)src_ptr[0] * vp9_filter[0] + 34187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (int)src_ptr[pixel_step] * vp9_filter[1], 34287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org FILTER_BITS); 34387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 34487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org src_ptr++; 34587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 34687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 34787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org // Next row... 34887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org src_ptr += src_pixels_per_line - output_width; 34987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_ptr += output_width; 35087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 35187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 35287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 35387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgstatic void high_var_filter_block2d_bil_second_pass( 35487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint16_t *src_ptr, 35587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *output_ptr, 35687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int src_pixels_per_line, 35787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int pixel_step, 35887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_height, 35987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int output_width, 36087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int16_t *vp9_filter) { 36187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int i, j; 36287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 36387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (i = 0; i < output_height; i++) { 36487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (j = 0; j < output_width; j++) { 36587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_ptr[j] = 36687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ROUND_POWER_OF_TWO((int)src_ptr[0] * vp9_filter[0] + 36787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (int)src_ptr[pixel_step] * vp9_filter[1], 36887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org FILTER_BITS); 36987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org src_ptr++; 37087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 37187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 37287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org src_ptr += src_pixels_per_line - output_width; 37387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org output_ptr += output_width; 37487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 37587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 37687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 37787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#define HIGH_VAR(W, H) \ 37887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_variance##W##x##H##_c(const uint8_t *a, int a_stride, \ 37987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *b, int b_stride, \ 38087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse) { \ 38187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int sum; \ 38287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_variance(a, a_stride, b, b_stride, W, H, sse, &sum); \ 38387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return *sse - (((int64_t)sum * sum) / (W * H)); \ 38487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} \ 38587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 38687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_10_variance##W##x##H##_c(const uint8_t *a, int a_stride, \ 38787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *b, int b_stride, \ 38887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse) { \ 38987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int sum; \ 39087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_10_variance(a, a_stride, b, b_stride, W, H, sse, &sum); \ 39187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return *sse - (((int64_t)sum * sum) / (W * H)); \ 39287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} \ 39387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 39487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_12_variance##W##x##H##_c(const uint8_t *a, int a_stride, \ 39587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *b, int b_stride, \ 39687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse) { \ 39787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int sum; \ 39887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_12_variance(a, a_stride, b, b_stride, W, H, sse, &sum); \ 39987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return *sse - (((int64_t)sum * sum) / (W * H)); \ 40087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 40187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 40287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#define HIGH_SUBPIX_VAR(W, H) \ 40387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_sub_pixel_variance##W##x##H##_c( \ 40487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *src, int src_stride, \ 40587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int xoffset, int yoffset, \ 40687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *dst, int dst_stride, \ 40787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse) { \ 40887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t fdata3[(H + 1) * W]; \ 40987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t temp2[H * W]; \ 41087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 41187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, \ 41287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org W, BILINEAR_FILTERS_2TAP(xoffset)); \ 41387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \ 41487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org BILINEAR_FILTERS_2TAP(yoffset)); \ 41587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 41687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return vp9_high_variance##W##x##H##_c(CONVERT_TO_BYTEPTR(temp2), W, dst, \ 41787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org dst_stride, sse); \ 41887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} \ 41987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 42087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_10_sub_pixel_variance##W##x##H##_c( \ 42187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *src, int src_stride, \ 42287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int xoffset, int yoffset, \ 42387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *dst, int dst_stride, \ 42487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse) { \ 42587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t fdata3[(H + 1) * W]; \ 42687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t temp2[H * W]; \ 42787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 42887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, \ 42987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org W, BILINEAR_FILTERS_2TAP(xoffset)); \ 43087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \ 43187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org BILINEAR_FILTERS_2TAP(yoffset)); \ 43287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 43387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return vp9_high_10_variance##W##x##H##_c(CONVERT_TO_BYTEPTR(temp2), W, dst, \ 43487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org dst_stride, sse); \ 43587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} \ 43687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 43787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_12_sub_pixel_variance##W##x##H##_c( \ 43887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *src, int src_stride, \ 43987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int xoffset, int yoffset, \ 44087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *dst, int dst_stride, \ 44187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse) { \ 44287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t fdata3[(H + 1) * W]; \ 44387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t temp2[H * W]; \ 44487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 44587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, \ 44687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org W, BILINEAR_FILTERS_2TAP(xoffset)); \ 44787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \ 44887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org BILINEAR_FILTERS_2TAP(yoffset)); \ 44987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 45087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return vp9_high_12_variance##W##x##H##_c(CONVERT_TO_BYTEPTR(temp2), W, dst, \ 45187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org dst_stride, sse); \ 45287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 45387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 45487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#define HIGH_SUBPIX_AVG_VAR(W, H) \ 45587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_sub_pixel_avg_variance##W##x##H##_c( \ 45687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *src, int src_stride, \ 45787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int xoffset, int yoffset, \ 45887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *dst, int dst_stride, \ 45987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse, \ 46087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *second_pred) { \ 46187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t fdata3[(H + 1) * W]; \ 46287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t temp2[H * W]; \ 46387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org DECLARE_ALIGNED_ARRAY(16, uint16_t, temp3, H * W); \ 46487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 46587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, \ 46687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org W, BILINEAR_FILTERS_2TAP(xoffset)); \ 46787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \ 46887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org BILINEAR_FILTERS_2TAP(yoffset)); \ 46987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 47087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_comp_avg_pred(temp3, second_pred, W, H, CONVERT_TO_BYTEPTR(temp2), \ 47187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org W); \ 47287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 47387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return vp9_high_variance##W##x##H##_c(CONVERT_TO_BYTEPTR(temp3), W, dst, \ 47487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org dst_stride, sse); \ 47587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} \ 47687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 47787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_10_sub_pixel_avg_variance##W##x##H##_c( \ 47887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *src, int src_stride, \ 47987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int xoffset, int yoffset, \ 48087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *dst, int dst_stride, \ 48187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse, \ 48287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *second_pred) { \ 48387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t fdata3[(H + 1) * W]; \ 48487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t temp2[H * W]; \ 48587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org DECLARE_ALIGNED_ARRAY(16, uint16_t, temp3, H * W); \ 48687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 48787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, \ 48887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org W, BILINEAR_FILTERS_2TAP(xoffset)); \ 48987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \ 49087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org BILINEAR_FILTERS_2TAP(yoffset)); \ 49187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 49287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_comp_avg_pred(temp3, second_pred, W, H, CONVERT_TO_BYTEPTR(temp2), \ 49387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org W); \ 49487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 49587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return vp9_high_10_variance##W##x##H##_c(CONVERT_TO_BYTEPTR(temp3), W, dst, \ 49687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org dst_stride, sse); \ 49787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} \ 49887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 49987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_12_sub_pixel_avg_variance##W##x##H##_c( \ 50087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *src, int src_stride, \ 50187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int xoffset, int yoffset, \ 50287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *dst, int dst_stride, \ 50387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse, \ 50487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *second_pred) { \ 50587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t fdata3[(H + 1) * W]; \ 50687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t temp2[H * W]; \ 50787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org DECLARE_ALIGNED_ARRAY(16, uint16_t, temp3, H * W); \ 50887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 50987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_first_pass(src, fdata3, src_stride, 1, H + 1, \ 51087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org W, BILINEAR_FILTERS_2TAP(xoffset)); \ 51187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_var_filter_block2d_bil_second_pass(fdata3, temp2, W, W, H, W, \ 51287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org BILINEAR_FILTERS_2TAP(yoffset)); \ 51387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 51487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org vp9_high_comp_avg_pred(temp3, second_pred, W, H, CONVERT_TO_BYTEPTR(temp2), \ 51587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org W); \ 51687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 51787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return vp9_high_12_variance##W##x##H##_c(CONVERT_TO_BYTEPTR(temp3), W, dst, \ 51887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org dst_stride, sse); \ 51987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 52087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 52187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#define HIGH_GET_VAR(S) \ 52287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid vp9_high_get##S##x##S##var_c(const uint8_t *src, int src_stride, \ 52387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *ref, int ref_stride, \ 52487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse, int *sum) { \ 52587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_variance(src, src_stride, ref, ref_stride, S, S, sse, sum); \ 52687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} \ 52787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 52887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid vp9_high_10_get##S##x##S##var_c(const uint8_t *src, int src_stride, \ 52987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *ref, int ref_stride, \ 53087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse, int *sum) { \ 53187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_10_variance(src, src_stride, ref, ref_stride, S, S, sse, sum); \ 53287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} \ 53387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 53487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid vp9_high_12_get##S##x##S##var_c(const uint8_t *src, int src_stride, \ 53587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *ref, int ref_stride, \ 53687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse, int *sum) { \ 53787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_12_variance(src, src_stride, ref, ref_stride, S, S, sse, sum); \ 53887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 53987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 54087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#define HIGH_MSE(W, H) \ 54187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_mse##W##x##H##_c(const uint8_t *src, int src_stride, \ 54287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *ref, int ref_stride, \ 54387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse) { \ 54487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int sum; \ 54587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_variance(src, src_stride, ref, ref_stride, W, H, sse, &sum); \ 54687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return *sse; \ 54787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} \ 54887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 54987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_10_mse##W##x##H##_c(const uint8_t *src, int src_stride, \ 55087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *ref, int ref_stride, \ 55187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse) { \ 55287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int sum; \ 55387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_10_variance(src, src_stride, ref, ref_stride, W, H, sse, &sum); \ 55487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return *sse; \ 55587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} \ 55687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org\ 55787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgunsigned int vp9_high_12_mse##W##x##H##_c(const uint8_t *src, int src_stride, \ 55887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const uint8_t *ref, int ref_stride, \ 55987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org unsigned int *sse) { \ 56087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int sum; \ 56187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org high_12_variance(src, src_stride, ref, ref_stride, W, H, sse, &sum); \ 56287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org return *sse; \ 56387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 56487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 56587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_GET_VAR(8) 56687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_GET_VAR(16) 56787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 56887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_MSE(16, 16) 56987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_MSE(16, 8) 57087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_MSE(8, 16) 57187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_MSE(8, 8) 57287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 57387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(4, 4) 57487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(4, 4) 57587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(4, 4) 57687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 57787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(4, 8) 57887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(4, 8) 57987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(4, 8) 58087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 58187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(8, 4) 58287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(8, 4) 58387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(8, 4) 58487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 58587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(8, 8) 58687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(8, 8) 58787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(8, 8) 58887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 58987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(8, 16) 59087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(8, 16) 59187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(8, 16) 59287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 59387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(16, 8) 59487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(16, 8) 59587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(16, 8) 59687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 59787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(16, 16) 59887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(16, 16) 59987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(16, 16) 60087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 60187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(16, 32) 60287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(16, 32) 60387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(16, 32) 60487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 60587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(32, 16) 60687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(32, 16) 60787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(32, 16) 60887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 60987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(32, 32) 61087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(32, 32) 61187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(32, 32) 61287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 61387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(32, 64) 61487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(32, 64) 61587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(32, 64) 61687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 61787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(64, 32) 61887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(64, 32) 61987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(64, 32) 62087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 62187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_VAR(64, 64) 62287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_VAR(64, 64) 62387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgHIGH_SUBPIX_AVG_VAR(64, 64) 62487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 62587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgvoid vp9_high_comp_avg_pred(uint16_t *comp_pred, const uint8_t *pred8, 62687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int width, int height, const uint8_t *ref8, 62787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int ref_stride) { 62887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int i, j; 62987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *pred = CONVERT_TO_SHORTPTR(pred8); 63087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org uint16_t *ref = CONVERT_TO_SHORTPTR(ref8); 63187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (i = 0; i < height; i++) { 63287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org for (j = 0; j < width; j++) { 63387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org const int tmp = pred[j] + ref[j]; 63487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org comp_pred[j] = ROUND_POWER_OF_TWO(tmp, 1); 63587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 63687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org comp_pred += width; 63787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org pred += width; 63887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org ref += ref_stride; 63987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org } 64087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org} 64187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif // CONFIG_VP9_HIGHBITDEPTH 642