variance.h 11.27 KiB
/*
 *  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_same_address_1(sym)\
    void (sym)\
     const unsigned char *src_ptr, \
     int source_stride, \
     const unsigned char *ref_ptr, \
     int  ref_stride, \
     unsigned short *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, \
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
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_ssimpf(sym) \ void (sym) \ ( \ unsigned char *s, \ int sp, \ unsigned char *r, \ int rp, \ unsigned long *sum_s, \ unsigned long *sum_r, \ unsigned long *sum_sq_s, \ unsigned long *sum_sq_r, \ unsigned long *sum_sxr \ ); #define prototype_getmbss(sym) unsigned int (sym)(const short *) #define prototype_get16x16prederror(sym)\ unsigned int (sym)\ (\ const unsigned char *src_ptr, \ int source_stride, \ const unsigned char *ref_ptr, \ int ref_stride \ ) #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);
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
#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_sad16x16x8 #define vp8_variance_sad16x16x8 vp8_sad16x16x8_c #endif extern prototype_sad_multi_same_address_1(vp8_variance_sad16x16x8); #ifndef vp8_variance_sad16x8x8 #define vp8_variance_sad16x8x8 vp8_sad16x8x8_c #endif extern prototype_sad_multi_same_address_1(vp8_variance_sad16x8x8); #ifndef vp8_variance_sad8x8x8 #define vp8_variance_sad8x8x8 vp8_sad8x8x8_c #endif extern prototype_sad_multi_same_address_1(vp8_variance_sad8x8x8); #ifndef vp8_variance_sad8x16x8 #define vp8_variance_sad8x16x8 vp8_sad8x16x8_c #endif extern prototype_sad_multi_same_address_1(vp8_variance_sad8x16x8); #ifndef vp8_variance_sad4x4x8 #define vp8_variance_sad4x4x8 vp8_sad4x4x8_c #endif extern prototype_sad_multi_same_address_1(vp8_variance_sad4x4x8); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #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
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
#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_halfpixvar16x16_h #define vp8_variance_halfpixvar16x16_h vp8_variance_halfpixvar16x16_h_c
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
#endif extern prototype_variance(vp8_variance_halfpixvar16x16_h); #ifndef vp8_variance_halfpixvar16x16_v #define vp8_variance_halfpixvar16x16_v vp8_variance_halfpixvar16x16_v_c #endif extern prototype_variance(vp8_variance_halfpixvar16x16_v); #ifndef vp8_variance_halfpixvar16x16_hv #define vp8_variance_halfpixvar16x16_hv vp8_variance_halfpixvar16x16_hv_c #endif extern prototype_variance(vp8_variance_halfpixvar16x16_hv); #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_get4x4sse_cs #define vp8_variance_get4x4sse_cs vp8_get4x4sse_cs_c #endif extern prototype_get16x16prederror(vp8_variance_get4x4sse_cs); #ifndef vp8_ssimpf #define vp8_ssimpf ssim_parms_c #endif extern prototype_ssimpf(vp8_ssimpf) #ifndef vp8_ssimpf_8x8 #define vp8_ssimpf_8x8 ssim_parms_8x8_c #endif extern prototype_ssimpf(vp8_ssimpf_8x8) typedef prototype_sad(*vp8_sad_fn_t); typedef prototype_sad_multi_same_address(*vp8_sad_multi_fn_t); typedef prototype_sad_multi_same_address_1(*vp8_sad_multi1_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 prototype_ssimpf(*vp8_ssimpf_fn_t); typedef prototype_get16x16prederror(*vp8_get16x16prederror_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;
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
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_variance_fn_t halfpixvar16x16_h; vp8_variance_fn_t halfpixvar16x16_v; vp8_variance_fn_t halfpixvar16x16_hv; vp8_subpixvariance_fn_t subpixmse16x16; vp8_getmbss_fn_t getmbss; vp8_variance_fn_t mse16x16; vp8_get16x16prederror_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_multi1_fn_t sad16x16x8; vp8_sad_multi1_fn_t sad16x8x8; vp8_sad_multi1_fn_t sad8x16x8; vp8_sad_multi1_fn_t sad8x8x8; vp8_sad_multi1_fn_t sad4x4x8; 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; #if CONFIG_INTERNAL_STATS vp8_ssimpf_fn_t ssimpf_8x8; vp8_ssimpf_fn_t ssimpf; #endif } vp8_variance_rtcd_vtable_t; typedef struct { vp8_sad_fn_t sdf; vp8_variance_fn_t vf; vp8_subpixvariance_fn_t svf; vp8_variance_fn_t svf_halfpix_h; vp8_variance_fn_t svf_halfpix_v; vp8_variance_fn_t svf_halfpix_hv; vp8_sad_multi_fn_t sdx3f; vp8_sad_multi1_fn_t sdx8f; vp8_sad_multi_d_fn_t sdx4df; } 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 #endif