00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _IFUNCTIONS_H_
00018 #define _IFUNCTIONS_H_
00019
00020 # if !defined(WIN32) && (__STDC_VERSION__ < 199901L)
00021 #define static
00022 #define inline
00023 #endif
00024 #include <math.h>
00025
00026 static inline int imin(int a, int b)
00027 {
00028 return ((a) < (b)) ? (a) : (b);
00029 }
00030
00031 static inline int imax(int a, int b)
00032 {
00033 return ((a) > (b)) ? (a) : (b);
00034 }
00035
00036 static inline double dmin(double a, double b)
00037 {
00038 return ((a) < (b)) ? (a) : (b);
00039 }
00040
00041 static inline double dmax(double a, double b)
00042 {
00043 return ((a) > (b)) ? (a) : (b);
00044 }
00045
00046 static inline int64 i64min(int64 a, int64 b)
00047 {
00048 return ((a) < (b)) ? (a) : (b);
00049 }
00050
00051 static inline int64 i64max(int64 a, int64 b)
00052 {
00053 return ((a) > (b)) ? (a) : (b);
00054 }
00055
00056 static inline int sabs(short x)
00057 {
00058 return ((x) < 0) ? -(x) : (x);
00059 }
00060
00061 static inline int iabs(int x)
00062 {
00063 return ((x) < 0) ? -(x) : (x);
00064 }
00065
00066 static inline double dabs(double x)
00067 {
00068 return ((x) < 0) ? -(x) : (x);
00069 }
00070
00071 static inline int64 i64abs(int64 x)
00072 {
00073 return ((x) < 0) ? -(x) : (x);
00074 }
00075
00076 static inline double dabs2(double x)
00077 {
00078 return (x) * (x);
00079 }
00080
00081 static inline int iabs2(int x)
00082 {
00083 return (x) * (x);
00084 }
00085
00086 static inline int64 i64abs2(int64 x)
00087 {
00088 return (x) * (x);
00089 }
00090
00091 static inline int isign(int x)
00092 {
00093 return ((x) < 0) ? -1 : 1;
00094 }
00095
00096 static inline int isignab(int a, int b)
00097 {
00098 return ((b) < 0) ? -iabs(a) : iabs(a);
00099 }
00100
00101 static inline int rshift_rnd(int x, int a)
00102 {
00103 return (a > 0) ? ((x + (1 << (a-1) )) >> a) : (x << (-a));
00104 }
00105
00106 static inline int rshift_rnd_sign(int x, int a)
00107 {
00108 return (x > 0) ? ( ( x + (1 << (a-1)) ) >> a ) : (-( ( iabs(x) + (1 << (a-1)) ) >> a ));
00109 }
00110
00111 static inline unsigned int rshift_rnd_us(unsigned int x, unsigned int a)
00112 {
00113 return (a > 0) ? ((x + (1 << (a-1))) >> a) : x;
00114 }
00115
00116 static inline int rshift_rnd_sf(int x, int a)
00117 {
00118 return ((x + (1 << (a-1) )) >> a);
00119 }
00120
00121 static inline unsigned int rshift_rnd_us_sf(unsigned int x, unsigned int a)
00122 {
00123 return ((x + (1 << (a-1))) >> a);
00124 }
00125
00126 static inline int iClip1(int high, int x)
00127 {
00128 x = imax(x, 0);
00129 x = imin(x, high);
00130
00131 return x;
00132 }
00133
00134 static inline int iClip3(int low, int high, int x)
00135 {
00136 x = imax(x, low);
00137 x = imin(x, high);
00138
00139 return x;
00140 }
00141
00142 static inline double dClip3(double low, double high, double x)
00143 {
00144 x = dmax(x, low);
00145 x = dmin(x, high);
00146
00147 return x;
00148 }
00149
00150 static inline int weighted_cost(int factor, int bits)
00151 {
00152 return (((factor)*(bits))>>LAMBDA_ACCURACY_BITS);
00153 }
00154
00155 static inline int RSD(int x)
00156 {
00157 return ((x&2)?(x|1):(x&(~1)));
00158 }
00159
00160 static inline int power2(int x)
00161 {
00162 return 1 << (x);
00163 }
00164
00165 static inline int float2int (float x)
00166 {
00167 return (int)((x < 0) ? (x - 0.5f) : (x + 0.5f));
00168 }
00169
00170 static inline int get_bit(int64 x,int n)
00171 {
00172 return (int)(((x >> n) & 1));
00173 }
00174
00175 #if ZEROSNR
00176 static inline float psnr(int max_sample_sq, int samples, float sse_distortion )
00177 {
00178 return (float) (10.0 * log10(max_sample_sq * (double) ((double) samples / (sse_distortion == 0.0 ? 1.0 : sse_distortion))));
00179 }
00180 #else
00181 static inline float psnr(int max_sample_sq, int samples, float sse_distortion )
00182 {
00183 return (float) (sse_distortion == 0.0 ? 0.0 : (10.0 * log10(max_sample_sq * (double) ((double) samples / sse_distortion))));
00184 }
00185 #endif
00186
00187
00188 # if !defined(WIN32) && (__STDC_VERSION__ < 199901L)
00189 #undef static
00190 #undef inline
00191 #endif
00192
00193 #endif
00194