/* * Copyright (c) 2010 The WebM project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef VARIANCE_H #define VARIANCE_H #define prototype_sad(sym)\ unsigned int (sym)\ (\ const unsigned char *src_ptr, \ int source_stride, \ const unsigned char *ref_ptr, \ int ref_stride, \ int max_sad\ ) #define prototype_sad_multi_same_address(sym)\ void (sym)\ (\ const unsigned char *src_ptr, \ int source_stride, \ const unsigned char *ref_ptr, \ int ref_stride, \ unsigned int *sad_array\ ) #define prototype_sad_multi_dif_address(sym)\ void (sym)\ (\ const unsigned char *src_ptr, \ int source_stride, \ unsigned char *ref_ptr[4], \ int ref_stride, \ unsigned int *sad_array\ ) #define prototype_variance(sym) \ unsigned int (sym) \ (\ const unsigned char *src_ptr, \ int source_stride, \ const unsigned char *ref_ptr, \ int ref_stride, \ unsigned int *sse\ ) #define prototype_variance2(sym) \ unsigned int (sym) \ (\ const unsigned char *src_ptr, \ int source_stride, \ const unsigned char *ref_ptr, \ int ref_stride, \ unsigned int *sse,\ int *sum\ ) #define prototype_subpixvariance(sym) \ unsigned int (sym) \ ( \ const unsigned char *src_ptr, \ int source_stride, \ int xoffset, \ int yoffset, \ const unsigned char *ref_ptr, \ int Refstride, \ unsigned int *sse \ ); #define prototype_getmbss(sym) unsigned int (sym)(const short *) #if ARCH_X86 || ARCH_X86_64 #include "x86/variance_x86.h" #endif #if ARCH_ARM #include "arm/variance_arm.h" #endif #ifndef vp8_variance_sad4x4 #define vp8_variance_sad4x4 vp8_sad4x4_c #endif extern prototype_sad(vp8_variance_sad4x4); #ifndef vp8_variance_sad8x8 #define vp8_variance_sad8x8 vp8_sad8x8_c #endif extern prototype_sad(vp8_variance_sad8x8); #ifndef vp8_variance_sad8x16 #define vp8_variance_sad8x16 vp8_sad8x16_c #endif extern prototype_sad(vp8_variance_sad8x16); #ifndef vp8_variance_sad16x8 #define vp8_variance_sad16x8 vp8_sad16x8_c #endif extern prototype_sad(vp8_variance_sad16x8); #ifndef vp8_variance_sad16x16 #define vp8_variance_sad16x16 vp8_sad16x16_c #endif extern prototype_sad(vp8_variance_sad16x16); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #ifndef vp8_variance_sad16x16x3 #define vp8_variance_sad16x16x3 vp8_sad16x16x3_c #endif extern prototype_sad_multi_same_address(vp8_variance_sad16x16x3); #ifndef vp8_variance_sad16x8x3 #define vp8_variance_sad16x8x3 vp8_sad16x8x3_c #endif extern prototype_sad_multi_same_address(vp8_variance_sad16x8x3); #ifndef vp8_variance_sad8x8x3 #define vp8_variance_sad8x8x3 vp8_sad8x8x3_c #endif extern prototype_sad_multi_same_address(vp8_variance_sad8x8x3); #ifndef vp8_variance_sad8x16x3 #define vp8_variance_sad8x16x3 vp8_sad8x16x3_c #endif extern prototype_sad_multi_same_address(vp8_variance_sad8x16x3); #ifndef vp8_variance_sad4x4x3 #define vp8_variance_sad4x4x3 vp8_sad4x4x3_c #endif extern prototype_sad_multi_same_address(vp8_variance_sad4x4x3); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #ifndef vp8_variance_sad16x16x4d #define vp8_variance_sad16x16x4d vp8_sad16x16x4d_c #endif extern prototype_sad_multi_dif_address(vp8_variance_sad16x16x4d); #ifndef vp8_variance_sad16x8x4d #define vp8_variance_sad16x8x4d vp8_sad16x8x4d_c #endif extern prototype_sad_multi_dif_address(vp8_variance_sad16x8x4d); #ifndef vp8_variance_sad8x8x4d #define vp8_variance_sad8x8x4d vp8_sad8x8x4d_c #endif extern prototype_sad_multi_dif_address(vp8_variance_sad8x8x4d); #ifndef vp8_variance_sad8x16x4d #define vp8_variance_sad8x16x4d vp8_sad8x16x4d_c #endif extern prototype_sad_multi_dif_address(vp8_variance_sad8x16x4d); #ifndef vp8_variance_sad4x4x4d #define vp8_variance_sad4x4x4d vp8_sad4x4x4d_c #endif extern prototype_sad_multi_dif_address(vp8_variance_sad4x4x4d); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #ifndef vp8_variance_var4x4 #define vp8_variance_var4x4 vp8_variance4x4_c #endif extern prototype_variance(vp8_variance_var4x4); #ifndef vp8_variance_var8x8 #define vp8_variance_var8x8 vp8_variance8x8_c #endif extern prototype_variance(vp8_variance_var8x8); #ifndef vp8_variance_var8x16 #define vp8_variance_var8x16 vp8_variance8x16_c #endif extern prototype_variance(vp8_variance_var8x16); #ifndef vp8_variance_var16x8 #define vp8_variance_var16x8 vp8_variance16x8_c #endif extern prototype_variance(vp8_variance_var16x8); #ifndef vp8_variance_var16x16 #define vp8_variance_var16x16 vp8_variance16x16_c #endif extern prototype_variance(vp8_variance_var16x16); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #ifndef vp8_variance_subpixvar4x4 #define vp8_variance_subpixvar4x4 vp8_sub_pixel_variance4x4_c #endif extern prototype_subpixvariance(vp8_variance_subpixvar4x4); #ifndef vp8_variance_subpixvar8x8 #define vp8_variance_subpixvar8x8 vp8_sub_pixel_variance8x8_c #endif extern prototype_subpixvariance(vp8_variance_subpixvar8x8); #ifndef vp8_variance_subpixvar8x16 #define vp8_variance_subpixvar8x16 vp8_sub_pixel_variance8x16_c #endif extern prototype_subpixvariance(vp8_variance_subpixvar8x16); #ifndef vp8_variance_subpixvar16x8 #define vp8_variance_subpixvar16x8 vp8_sub_pixel_variance16x8_c #endif extern prototype_subpixvariance(vp8_variance_subpixvar16x8); #ifndef vp8_variance_subpixvar16x16 #define vp8_variance_subpixvar16x16 vp8_sub_pixel_variance16x16_c #endif extern prototype_subpixvariance(vp8_variance_subpixvar16x16); #ifndef vp8_variance_subpixmse16x16 #define vp8_variance_subpixmse16x16 vp8_sub_pixel_mse16x16_c #endif extern prototype_subpixvariance(vp8_variance_subpixmse16x16); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #ifndef vp8_variance_getmbss #define vp8_variance_getmbss vp8_get_mb_ss_c #endif extern prototype_getmbss(vp8_variance_getmbss); #ifndef vp8_variance_mse16x16 #define vp8_variance_mse16x16 vp8_mse16x16_c #endif extern prototype_variance(vp8_variance_mse16x16); #ifndef vp8_variance_get16x16prederror #define vp8_variance_get16x16prederror vp8_get16x16pred_error_c #endif extern prototype_sad(vp8_variance_get16x16prederror); #ifndef vp8_variance_get8x8var #define vp8_variance_get8x8var vp8_get8x8var_c #endif extern prototype_variance2(vp8_variance_get8x8var); #ifndef vp8_variance_get16x16var #define vp8_variance_get16x16var vp8_get16x16var_c #endif extern prototype_variance2(vp8_variance_get16x16var); #ifndef vp8_variance_get4x4sse_cs #define vp8_variance_get4x4sse_cs vp8_get4x4sse_cs_c #endif extern prototype_sad(vp8_variance_get4x4sse_cs); typedef prototype_sad(*vp8_sad_fn_t); typedef prototype_sad_multi_same_address(*vp8_sad_multi_fn_t); typedef prototype_sad_multi_dif_address(*vp8_sad_multi_d_fn_t); typedef prototype_variance(*vp8_variance_fn_t); typedef prototype_variance2(*vp8_variance2_fn_t); typedef prototype_subpixvariance(*vp8_subpixvariance_fn_t); typedef prototype_getmbss(*vp8_getmbss_fn_t); typedef struct { vp8_sad_fn_t sad4x4; vp8_sad_fn_t sad8x8; vp8_sad_fn_t sad8x16; vp8_sad_fn_t sad16x8; vp8_sad_fn_t sad16x16; vp8_variance_fn_t var4x4; vp8_variance_fn_t var8x8; vp8_variance_fn_t var8x16; vp8_variance_fn_t var16x8; vp8_variance_fn_t var16x16; vp8_subpixvariance_fn_t subpixvar4x4; vp8_subpixvariance_fn_t subpixvar8x8; vp8_subpixvariance_fn_t subpixvar8x16; vp8_subpixvariance_fn_t subpixvar16x8; vp8_subpixvariance_fn_t subpixvar16x16; vp8_subpixvariance_fn_t subpixmse16x16; vp8_getmbss_fn_t getmbss; vp8_variance_fn_t mse16x16; vp8_sad_fn_t get16x16prederror; vp8_variance2_fn_t get8x8var; vp8_variance2_fn_t get16x16var; vp8_sad_fn_t get4x4sse_cs; vp8_sad_multi_fn_t sad16x16x3; vp8_sad_multi_fn_t sad16x8x3; vp8_sad_multi_fn_t sad8x16x3; vp8_sad_multi_fn_t sad8x8x3; vp8_sad_multi_fn_t sad4x4x3; vp8_sad_multi_d_fn_t sad16x16x4d; vp8_sad_multi_d_fn_t sad16x8x4d; vp8_sad_multi_d_fn_t sad8x16x4d; vp8_sad_multi_d_fn_t sad8x8x4d; vp8_sad_multi_d_fn_t sad4x4x4d; } vp8_variance_rtcd_vtable_t; typedef struct { vp8_sad_fn_t sdf; vp8_sad_multi_fn_t sdx3f; vp8_sad_multi_d_fn_t sdx4df; vp8_variance_fn_t vf; vp8_subpixvariance_fn_t svf; } vp8_variance_fn_ptr_t; #if CONFIG_RUNTIME_CPU_DETECT #define VARIANCE_INVOKE(ctx,fn) (ctx)->fn #else #define VARIANCE_INVOKE(ctx,fn) vp8_variance_##fn #endif /* TODO: Determine if this USEBILINEAR flag is necessary. */ #define USEBILINEAR #endif