00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef AVCODEC_MATHOPS_H
00023 #define AVCODEC_MATHOPS_H
00024
00025 #include "libavutil/common.h"
00026
00027 #if ARCH_X86
00028
00029 #include "x86/mathops.h"
00030
00031 #elif ARCH_ARM
00032
00033 #include "arm/mathops.h"
00034
00035 #elif ARCH_PPC
00036
00037 #include "ppc/mathops.h"
00038
00039 #elif ARCH_BFIN
00040
00041 #include "bfin/mathops.h"
00042
00043 #endif
00044
00045
00046
00047 #ifndef MULL
00048 # define MULL(a,b,s) (((int64_t)(a) * (int64_t)(b)) >> (s))
00049 #endif
00050
00051 #ifndef MULH
00052
00053
00054
00055 static av_always_inline int MULH(int a, int b){
00056 return ((int64_t)(a) * (int64_t)(b))>>32;
00057 }
00058 #endif
00059
00060 #ifndef MUL64
00061 # define MUL64(a,b) ((int64_t)(a) * (int64_t)(b))
00062 #endif
00063
00064 #ifndef MAC64
00065 # define MAC64(d, a, b) ((d) += MUL64(a, b))
00066 #endif
00067
00068 #ifndef MLS64
00069 # define MLS64(d, a, b) ((d) -= MUL64(a, b))
00070 #endif
00071
00072
00073 #ifndef MAC16
00074 # define MAC16(rt, ra, rb) rt += (ra) * (rb)
00075 #endif
00076
00077
00078 #ifndef MUL16
00079 # define MUL16(ra, rb) ((ra) * (rb))
00080 #endif
00081
00082 #ifndef MLS16
00083 # define MLS16(rt, ra, rb) ((rt) -= (ra) * (rb))
00084 #endif
00085
00086
00087 #ifndef mid_pred
00088 #define mid_pred mid_pred
00089 static inline av_const int mid_pred(int a, int b, int c)
00090 {
00091 #if 0
00092 int t= (a-b)&((a-b)>>31);
00093 a-=t;
00094 b+=t;
00095 b-= (b-c)&((b-c)>>31);
00096 b+= (a-b)&((a-b)>>31);
00097
00098 return b;
00099 #else
00100 if(a>b){
00101 if(c>b){
00102 if(c>a) b=a;
00103 else b=c;
00104 }
00105 }else{
00106 if(b>c){
00107 if(c>a) b=c;
00108 else b=a;
00109 }
00110 }
00111 return b;
00112 #endif
00113 }
00114 #endif
00115
00116 #endif
00117