1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2015 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker * 4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker */ 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_VPX_DSP_VARIANCE_H_ 12*fb1b10abSAndroid Build Coastguard Worker #define VPX_VPX_DSP_VARIANCE_H_ 13*fb1b10abSAndroid Build Coastguard Worker 14*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_config.h" 15*fb1b10abSAndroid Build Coastguard Worker 16*fb1b10abSAndroid Build Coastguard Worker #include "vpx/vpx_integer.h" 17*fb1b10abSAndroid Build Coastguard Worker 18*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 19*fb1b10abSAndroid Build Coastguard Worker extern "C" { 20*fb1b10abSAndroid Build Coastguard Worker #endif 21*fb1b10abSAndroid Build Coastguard Worker 22*fb1b10abSAndroid Build Coastguard Worker #define FILTER_BITS 7 23*fb1b10abSAndroid Build Coastguard Worker #define FILTER_WEIGHT 128 24*fb1b10abSAndroid Build Coastguard Worker 25*fb1b10abSAndroid Build Coastguard Worker typedef unsigned int (*vpx_sad_fn_t)(const uint8_t *src_ptr, int src_stride, 26*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride); 27*fb1b10abSAndroid Build Coastguard Worker 28*fb1b10abSAndroid Build Coastguard Worker typedef unsigned int (*vpx_sad_avg_fn_t)(const uint8_t *src_ptr, int src_stride, 29*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride, 30*fb1b10abSAndroid Build Coastguard Worker const uint8_t *second_pred); 31*fb1b10abSAndroid Build Coastguard Worker 32*fb1b10abSAndroid Build Coastguard Worker typedef void (*vp8_copy32xn_fn_t)(const uint8_t *src_ptr, int src_stride, 33*fb1b10abSAndroid Build Coastguard Worker uint8_t *ref_ptr, int ref_stride, int n); 34*fb1b10abSAndroid Build Coastguard Worker 35*fb1b10abSAndroid Build Coastguard Worker typedef void (*vpx_sad_multi_fn_t)(const uint8_t *src_ptr, int src_stride, 36*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride, 37*fb1b10abSAndroid Build Coastguard Worker unsigned int *sad_array); 38*fb1b10abSAndroid Build Coastguard Worker 39*fb1b10abSAndroid Build Coastguard Worker typedef void (*vpx_sad_multi_d_fn_t)(const uint8_t *src_ptr, int src_stride, 40*fb1b10abSAndroid Build Coastguard Worker const uint8_t *const b_array[], 41*fb1b10abSAndroid Build Coastguard Worker int ref_stride, unsigned int *sad_array); 42*fb1b10abSAndroid Build Coastguard Worker 43*fb1b10abSAndroid Build Coastguard Worker typedef unsigned int (*vpx_variance_fn_t)(const uint8_t *src_ptr, 44*fb1b10abSAndroid Build Coastguard Worker int src_stride, 45*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, 46*fb1b10abSAndroid Build Coastguard Worker int ref_stride, unsigned int *sse); 47*fb1b10abSAndroid Build Coastguard Worker 48*fb1b10abSAndroid Build Coastguard Worker typedef unsigned int (*vpx_subpixvariance_fn_t)( 49*fb1b10abSAndroid Build Coastguard Worker const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, 50*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride, unsigned int *sse); 51*fb1b10abSAndroid Build Coastguard Worker 52*fb1b10abSAndroid Build Coastguard Worker typedef unsigned int (*vpx_subp_avg_variance_fn_t)( 53*fb1b10abSAndroid Build Coastguard Worker const uint8_t *src_ptr, int src_stride, int x_offset, int y_offset, 54*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride, unsigned int *sse, 55*fb1b10abSAndroid Build Coastguard Worker const uint8_t *second_pred); 56*fb1b10abSAndroid Build Coastguard Worker 57*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP8 58*fb1b10abSAndroid Build Coastguard Worker typedef struct variance_vtable { 59*fb1b10abSAndroid Build Coastguard Worker vpx_sad_fn_t sdf; 60*fb1b10abSAndroid Build Coastguard Worker vpx_variance_fn_t vf; 61*fb1b10abSAndroid Build Coastguard Worker vpx_subpixvariance_fn_t svf; 62*fb1b10abSAndroid Build Coastguard Worker vpx_sad_multi_d_fn_t sdx4df; 63*fb1b10abSAndroid Build Coastguard Worker #if VPX_ARCH_X86 || VPX_ARCH_X86_64 64*fb1b10abSAndroid Build Coastguard Worker vp8_copy32xn_fn_t copymem; 65*fb1b10abSAndroid Build Coastguard Worker #endif 66*fb1b10abSAndroid Build Coastguard Worker } vp8_variance_fn_ptr_t; 67*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP8 68*fb1b10abSAndroid Build Coastguard Worker 69*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_VP9 70*fb1b10abSAndroid Build Coastguard Worker typedef struct vp9_variance_vtable { 71*fb1b10abSAndroid Build Coastguard Worker vpx_sad_fn_t sdf; 72*fb1b10abSAndroid Build Coastguard Worker // Same as normal sad, but downsample the rows by a factor of 2. 73*fb1b10abSAndroid Build Coastguard Worker vpx_sad_fn_t sdsf; 74*fb1b10abSAndroid Build Coastguard Worker vpx_sad_avg_fn_t sdaf; 75*fb1b10abSAndroid Build Coastguard Worker vpx_variance_fn_t vf; 76*fb1b10abSAndroid Build Coastguard Worker vpx_subpixvariance_fn_t svf; 77*fb1b10abSAndroid Build Coastguard Worker vpx_subp_avg_variance_fn_t svaf; 78*fb1b10abSAndroid Build Coastguard Worker vpx_sad_multi_d_fn_t sdx4df; 79*fb1b10abSAndroid Build Coastguard Worker // Same as sadx4, but downsample the rows by a factor of 2. 80*fb1b10abSAndroid Build Coastguard Worker vpx_sad_multi_d_fn_t sdsx4df; 81*fb1b10abSAndroid Build Coastguard Worker } vp9_variance_fn_ptr_t; 82*fb1b10abSAndroid Build Coastguard Worker #endif // CONFIG_VP9 83*fb1b10abSAndroid Build Coastguard Worker 84*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 85*fb1b10abSAndroid Build Coastguard Worker } // extern "C" 86*fb1b10abSAndroid Build Coastguard Worker #endif 87*fb1b10abSAndroid Build Coastguard Worker 88*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_VPX_DSP_VARIANCE_H_ 89