ifunctions.h
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:4k
源码类别:

Audio

开发平台:

Visual C++

  1. /*!
  2.  ************************************************************************
  3.  *  file
  4.  *     ifunctions.h
  5.  *
  6.  *  brief
  7.  *     define some inline functions that are used within the encoder.
  8.  *
  9.  *  author
  10.  *      Main contributors (see contributors.h for copyright, address and affiliation details)
  11.  *      - Karsten S黨ring                 <suehring@hhi.de>
  12.  *      - Alexis Tourapis                 <alexismt@ieee.org>
  13.  *
  14.  ************************************************************************
  15.  */
  16. #ifndef _IFUNCTIONS_H_
  17. #define _IFUNCTIONS_H_
  18. # if !defined(WIN32) && (__STDC_VERSION__ < 199901L)
  19.   #define static
  20.   #define inline
  21. #endif
  22. #include <math.h>
  23. static inline int imin(int a, int b)
  24. {
  25.   return ((a) < (b)) ? (a) : (b);
  26. }
  27. static inline int imax(int a, int b)
  28. {
  29.   return ((a) > (b)) ? (a) : (b);
  30. }
  31. static inline double dmin(double a, double b)
  32. {
  33.   return ((a) < (b)) ? (a) : (b);
  34. }
  35. static inline double dmax(double a, double b)
  36. {
  37.   return ((a) > (b)) ? (a) : (b);
  38. }
  39. static inline int64 i64min(int64 a, int64 b)
  40. {
  41.   return ((a) < (b)) ? (a) : (b);
  42. }
  43. static inline int64 i64max(int64 a, int64 b)
  44. {
  45.   return ((a) > (b)) ? (a) : (b);
  46. }
  47. static inline int iabs(int x)
  48. {
  49.   return ((x) < 0) ? -(x) : (x);
  50. }
  51. static inline double dabs(double x)
  52. {
  53.   return ((x) < 0) ? -(x) : (x);
  54. }
  55. static inline int64 i64abs(int64 x)
  56. {
  57.   return ((x) < 0) ? -(x) : (x);
  58. }
  59. static inline double dabs2(double x)
  60. {
  61.   return (x) * (x);
  62. }
  63. static inline int iabs2(int x) 
  64. {
  65.   return (x) * (x);
  66. }
  67. static inline int64 i64abs2(int64 x)
  68. {
  69.   return (x) * (x);
  70. }
  71. static inline int isign(int x)
  72. {
  73.   return ((x) < 0) ? -1 : 1;
  74. }
  75. static inline int isignab(int a, int b)
  76. {
  77.   return ((b) < 0) ? -iabs(a) : iabs(a);
  78. }
  79. static inline int rshift_rnd(int x, int a)
  80. {
  81.   return (a > 0) ? ((x + (1 << (a-1) )) >> a) : (x << (-a));
  82. }
  83. static inline int rshift_rnd_sign(int x, int a)
  84. {
  85.   return (x > 0) ? ( ( x + (1 << (a-1)) ) >> a ) : (-( ( iabs(x) + (1 << (a-1)) ) >> a ));
  86. }
  87. static inline unsigned int rshift_rnd_us(unsigned int x, unsigned int a)
  88. {
  89.   return (a > 0) ? ((x + (1 << (a-1))) >> a) : x;
  90. }
  91. static inline int rshift_rnd_sf(int x, int a)
  92. {
  93.   return ((x + (1 << (a-1) )) >> a);
  94. }
  95. static inline unsigned int rshift_rnd_us_sf(unsigned int x, unsigned int a)
  96. {
  97.   return ((x + (1 << (a-1))) >> a);
  98. }
  99. static inline int iClip1(int high, int x)
  100. {
  101.   x = imax(x, 0);
  102.   x = imin(x, high);
  103.   return x;
  104. }
  105. static inline int iClip3(int low, int high, int x)
  106. {
  107.   x = imax(x, low);
  108.   x = imin(x, high);
  109.   return x;
  110. }
  111. static inline double dClip3(double low, double high, double x)
  112. {
  113.   x = dmax(x, low);
  114.   x = dmin(x, high);
  115.   return x;
  116. }
  117. static inline int weighted_cost(int factor, int bits)
  118. {
  119.   return (((factor)*(bits))>>LAMBDA_ACCURACY_BITS);
  120. }
  121. static inline int RSD(int x)
  122. {
  123.  return ((x&2)?(x|1):(x&(~1)));
  124. }
  125. static inline int power2(int x) 
  126. {
  127.   return 1 << (x);
  128. }
  129. static inline int float2int (float x)
  130. {
  131.   return (int)((x < 0) ? (x - 0.5f) : (x + 0.5f));
  132. }
  133. #if ZEROSNR
  134. static inline float psnr(int max_sample_sq, int samples, float sse_distortion ) 
  135. {
  136.   return (float) (10.0 * log10(max_sample_sq * (double) ((double) samples / (sse_distortion == 0.0 ? 1.0 : sse_distortion))));
  137. }
  138. #else
  139. static inline float psnr(int max_sample_sq, int samples, float sse_distortion ) 
  140. {
  141.   return (float) (sse_distortion == 0.0 ? 0.0 : (10.0 * log10(max_sample_sq * (double) ((double) samples / sse_distortion))));
  142. }
  143. #endif
  144. # if !defined(WIN32) && (__STDC_VERSION__ < 199901L)
  145.   #undef static
  146.   #undef inline
  147. #endif
  148. #endif