You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

509 lines
15KB

  1. /*
  2. * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
  3. *
  4. * This file is part of FFmpeg.
  5. *
  6. * FFmpeg is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2.1 of the License, or (at your option) any later version.
  10. *
  11. * FFmpeg is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with FFmpeg; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  19. */
  20. /**
  21. * @file
  22. * common internal and external API header
  23. */
  24. #ifndef AVUTIL_COMMON_H
  25. #define AVUTIL_COMMON_H
  26. #if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C)
  27. #error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS
  28. #endif
  29. #include <errno.h>
  30. #include <inttypes.h>
  31. #include <limits.h>
  32. #include <math.h>
  33. #include <stdint.h>
  34. #include <stdio.h>
  35. #include <stdlib.h>
  36. #include <string.h>
  37. #include "attributes.h"
  38. #include "version.h"
  39. #include "libavutil/avconfig.h"
  40. #if AV_HAVE_BIGENDIAN
  41. # define AV_NE(be, le) (be)
  42. #else
  43. # define AV_NE(be, le) (le)
  44. #endif
  45. //rounded division & shift
  46. #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b))
  47. /* assume b>0 */
  48. #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
  49. /* assume a>0 and b>0 */
  50. #define FF_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \
  51. : ((a) + (1<<(b)) - 1) >> (b))
  52. #define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b))
  53. #define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b))
  54. /**
  55. * Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they
  56. * are not representable as absolute values of their type. This is the same
  57. * as with *abs()
  58. * @see FFNABS()
  59. */
  60. #define FFABS(a) ((a) >= 0 ? (a) : (-(a)))
  61. #define FFSIGN(a) ((a) > 0 ? 1 : -1)
  62. /**
  63. * Negative Absolute value.
  64. * this works for all integers of all types.
  65. * As with many macros, this evaluates its argument twice, it thus must not have
  66. * a sideeffect, that is FFNABS(x++) has undefined behavior.
  67. */
  68. #define FFNABS(a) ((a) <= 0 ? (a) : (-(a)))
  69. #define FFMAX(a,b) ((a) > (b) ? (a) : (b))
  70. #define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c)
  71. #define FFMIN(a,b) ((a) > (b) ? (b) : (a))
  72. #define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c)
  73. #define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0)
  74. #define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0]))
  75. #define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1))
  76. /* misc math functions */
  77. #ifdef HAVE_AV_CONFIG_H
  78. # include "config.h"
  79. # include "intmath.h"
  80. #endif
  81. /* Pull in unguarded fallback defines at the end of this file. */
  82. #include "common.h"
  83. #ifndef av_log2
  84. av_const int av_log2(unsigned v);
  85. #endif
  86. #ifndef av_log2_16bit
  87. av_const int av_log2_16bit(unsigned v);
  88. #endif
  89. /**
  90. * Clip a signed integer value into the amin-amax range.
  91. * @param a value to clip
  92. * @param amin minimum value of the clip range
  93. * @param amax maximum value of the clip range
  94. * @return clipped value
  95. */
  96. static av_always_inline av_const int av_clip_c(int a, int amin, int amax)
  97. {
  98. #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
  99. if (amin > amax) abort();
  100. #endif
  101. if (a < amin) return amin;
  102. else if (a > amax) return amax;
  103. else return a;
  104. }
  105. /**
  106. * Clip a signed 64bit integer value into the amin-amax range.
  107. * @param a value to clip
  108. * @param amin minimum value of the clip range
  109. * @param amax maximum value of the clip range
  110. * @return clipped value
  111. */
  112. static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax)
  113. {
  114. #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
  115. if (amin > amax) abort();
  116. #endif
  117. if (a < amin) return amin;
  118. else if (a > amax) return amax;
  119. else return a;
  120. }
  121. /**
  122. * Clip a signed integer value into the 0-255 range.
  123. * @param a value to clip
  124. * @return clipped value
  125. */
  126. static av_always_inline av_const uint8_t av_clip_uint8_c(int a)
  127. {
  128. if (a&(~0xFF)) return (-a)>>31;
  129. else return a;
  130. }
  131. /**
  132. * Clip a signed integer value into the -128,127 range.
  133. * @param a value to clip
  134. * @return clipped value
  135. */
  136. static av_always_inline av_const int8_t av_clip_int8_c(int a)
  137. {
  138. if ((a+0x80U) & ~0xFF) return (a>>31) ^ 0x7F;
  139. else return a;
  140. }
  141. /**
  142. * Clip a signed integer value into the 0-65535 range.
  143. * @param a value to clip
  144. * @return clipped value
  145. */
  146. static av_always_inline av_const uint16_t av_clip_uint16_c(int a)
  147. {
  148. if (a&(~0xFFFF)) return (-a)>>31;
  149. else return a;
  150. }
  151. /**
  152. * Clip a signed integer value into the -32768,32767 range.
  153. * @param a value to clip
  154. * @return clipped value
  155. */
  156. static av_always_inline av_const int16_t av_clip_int16_c(int a)
  157. {
  158. if ((a+0x8000U) & ~0xFFFF) return (a>>31) ^ 0x7FFF;
  159. else return a;
  160. }
  161. /**
  162. * Clip a signed 64-bit integer value into the -2147483648,2147483647 range.
  163. * @param a value to clip
  164. * @return clipped value
  165. */
  166. static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
  167. {
  168. if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF);
  169. else return (int32_t)a;
  170. }
  171. /**
  172. * Clip a signed integer into the -(2^p),(2^p-1) range.
  173. * @param a value to clip
  174. * @param p bit position to clip at
  175. * @return clipped value
  176. */
  177. static av_always_inline av_const int av_clip_intp2_c(int a, int p)
  178. {
  179. if ((a + (1 << p)) & ~((2 << p) - 1))
  180. return (a >> 31) ^ ((1 << p) - 1);
  181. else
  182. return a;
  183. }
  184. /**
  185. * Clip a signed integer to an unsigned power of two range.
  186. * @param a value to clip
  187. * @param p bit position to clip at
  188. * @return clipped value
  189. */
  190. static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
  191. {
  192. if (a & ~((1<<p) - 1)) return -a >> 31 & ((1<<p) - 1);
  193. else return a;
  194. }
  195. /**
  196. * Clear high bits from an unsigned integer starting with specific bit position
  197. * @param a value to clip
  198. * @param p bit position to clip at
  199. * @return clipped value
  200. */
  201. static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, unsigned p)
  202. {
  203. return a & ((1 << p) - 1);
  204. }
  205. /**
  206. * Add two signed 32-bit values with saturation.
  207. *
  208. * @param a one value
  209. * @param b another value
  210. * @return sum with signed saturation
  211. */
  212. static av_always_inline int av_sat_add32_c(int a, int b)
  213. {
  214. return av_clipl_int32((int64_t)a + b);
  215. }
  216. /**
  217. * Add a doubled value to another value with saturation at both stages.
  218. *
  219. * @param a first value
  220. * @param b value doubled and added to a
  221. * @return sum with signed saturation
  222. */
  223. static av_always_inline int av_sat_dadd32_c(int a, int b)
  224. {
  225. return av_sat_add32(a, av_sat_add32(b, b));
  226. }
  227. /**
  228. * Clip a float value into the amin-amax range.
  229. * @param a value to clip
  230. * @param amin minimum value of the clip range
  231. * @param amax maximum value of the clip range
  232. * @return clipped value
  233. */
  234. static av_always_inline av_const float av_clipf_c(float a, float amin, float amax)
  235. {
  236. #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
  237. if (amin > amax) abort();
  238. #endif
  239. if (a < amin) return amin;
  240. else if (a > amax) return amax;
  241. else return a;
  242. }
  243. /**
  244. * Clip a double value into the amin-amax range.
  245. * @param a value to clip
  246. * @param amin minimum value of the clip range
  247. * @param amax maximum value of the clip range
  248. * @return clipped value
  249. */
  250. static av_always_inline av_const double av_clipd_c(double a, double amin, double amax)
  251. {
  252. #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
  253. if (amin > amax) abort();
  254. #endif
  255. if (a < amin) return amin;
  256. else if (a > amax) return amax;
  257. else return a;
  258. }
  259. /** Compute ceil(log2(x)).
  260. * @param x value used to compute ceil(log2(x))
  261. * @return computed ceiling of log2(x)
  262. */
  263. static av_always_inline av_const int av_ceil_log2_c(int x)
  264. {
  265. return av_log2((x - 1) << 1);
  266. }
  267. /**
  268. * Count number of bits set to one in x
  269. * @param x value to count bits of
  270. * @return the number of bits set to one in x
  271. */
  272. static av_always_inline av_const int av_popcount_c(uint32_t x)
  273. {
  274. x -= (x >> 1) & 0x55555555;
  275. x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
  276. x = (x + (x >> 4)) & 0x0F0F0F0F;
  277. x += x >> 8;
  278. return (x + (x >> 16)) & 0x3F;
  279. }
  280. /**
  281. * Count number of bits set to one in x
  282. * @param x value to count bits of
  283. * @return the number of bits set to one in x
  284. */
  285. static av_always_inline av_const int av_popcount64_c(uint64_t x)
  286. {
  287. return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32));
  288. }
  289. #define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
  290. #define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24))
  291. /**
  292. * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
  293. *
  294. * @param val Output value, must be an lvalue of type uint32_t.
  295. * @param GET_BYTE Expression reading one byte from the input.
  296. * Evaluated up to 7 times (4 for the currently
  297. * assigned Unicode range). With a memory buffer
  298. * input, this could be *ptr++.
  299. * @param ERROR Expression to be evaluated on invalid input,
  300. * typically a goto statement.
  301. *
  302. * @warning ERROR should not contain a loop control statement which
  303. * could interact with the internal while loop, and should force an
  304. * exit from the macro code (e.g. through a goto or a return) in order
  305. * to prevent undefined results.
  306. */
  307. #define GET_UTF8(val, GET_BYTE, ERROR)\
  308. val= GET_BYTE;\
  309. {\
  310. uint32_t top = (val & 128) >> 1;\
  311. if ((val & 0xc0) == 0x80 || val >= 0xFE)\
  312. ERROR\
  313. while (val & top) {\
  314. int tmp= GET_BYTE - 128;\
  315. if(tmp>>6)\
  316. ERROR\
  317. val= (val<<6) + tmp;\
  318. top <<= 5;\
  319. }\
  320. val &= (top << 1) - 1;\
  321. }
  322. /**
  323. * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form.
  324. *
  325. * @param val Output value, must be an lvalue of type uint32_t.
  326. * @param GET_16BIT Expression returning two bytes of UTF-16 data converted
  327. * to native byte order. Evaluated one or two times.
  328. * @param ERROR Expression to be evaluated on invalid input,
  329. * typically a goto statement.
  330. */
  331. #define GET_UTF16(val, GET_16BIT, ERROR)\
  332. val = GET_16BIT;\
  333. {\
  334. unsigned int hi = val - 0xD800;\
  335. if (hi < 0x800) {\
  336. val = GET_16BIT - 0xDC00;\
  337. if (val > 0x3FFU || hi > 0x3FFU)\
  338. ERROR\
  339. val += (hi<<10) + 0x10000;\
  340. }\
  341. }\
  342. /**
  343. * @def PUT_UTF8(val, tmp, PUT_BYTE)
  344. * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
  345. * @param val is an input-only argument and should be of type uint32_t. It holds
  346. * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If
  347. * val is given as a function it is executed only once.
  348. * @param tmp is a temporary variable and should be of type uint8_t. It
  349. * represents an intermediate value during conversion that is to be
  350. * output by PUT_BYTE.
  351. * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination.
  352. * It could be a function or a statement, and uses tmp as the input byte.
  353. * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be
  354. * executed up to 4 times for values in the valid UTF-8 range and up to
  355. * 7 times in the general case, depending on the length of the converted
  356. * Unicode character.
  357. */
  358. #define PUT_UTF8(val, tmp, PUT_BYTE)\
  359. {\
  360. int bytes, shift;\
  361. uint32_t in = val;\
  362. if (in < 0x80) {\
  363. tmp = in;\
  364. PUT_BYTE\
  365. } else {\
  366. bytes = (av_log2(in) + 4) / 5;\
  367. shift = (bytes - 1) * 6;\
  368. tmp = (256 - (256 >> bytes)) | (in >> shift);\
  369. PUT_BYTE\
  370. while (shift >= 6) {\
  371. shift -= 6;\
  372. tmp = 0x80 | ((in >> shift) & 0x3f);\
  373. PUT_BYTE\
  374. }\
  375. }\
  376. }
  377. /**
  378. * @def PUT_UTF16(val, tmp, PUT_16BIT)
  379. * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes).
  380. * @param val is an input-only argument and should be of type uint32_t. It holds
  381. * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If
  382. * val is given as a function it is executed only once.
  383. * @param tmp is a temporary variable and should be of type uint16_t. It
  384. * represents an intermediate value during conversion that is to be
  385. * output by PUT_16BIT.
  386. * @param PUT_16BIT writes the converted UTF-16 data to any proper destination
  387. * in desired endianness. It could be a function or a statement, and uses tmp
  388. * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;"
  389. * PUT_BYTE will be executed 1 or 2 times depending on input character.
  390. */
  391. #define PUT_UTF16(val, tmp, PUT_16BIT)\
  392. {\
  393. uint32_t in = val;\
  394. if (in < 0x10000) {\
  395. tmp = in;\
  396. PUT_16BIT\
  397. } else {\
  398. tmp = 0xD800 | ((in - 0x10000) >> 10);\
  399. PUT_16BIT\
  400. tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\
  401. PUT_16BIT\
  402. }\
  403. }\
  404. #include "mem.h"
  405. #ifdef HAVE_AV_CONFIG_H
  406. # include "internal.h"
  407. #endif /* HAVE_AV_CONFIG_H */
  408. #endif /* AVUTIL_COMMON_H */
  409. /*
  410. * The following definitions are outside the multiple inclusion guard
  411. * to ensure they are immediately available in intmath.h.
  412. */
  413. #ifndef av_ceil_log2
  414. # define av_ceil_log2 av_ceil_log2_c
  415. #endif
  416. #ifndef av_clip
  417. # define av_clip av_clip_c
  418. #endif
  419. #ifndef av_clip64
  420. # define av_clip64 av_clip64_c
  421. #endif
  422. #ifndef av_clip_uint8
  423. # define av_clip_uint8 av_clip_uint8_c
  424. #endif
  425. #ifndef av_clip_int8
  426. # define av_clip_int8 av_clip_int8_c
  427. #endif
  428. #ifndef av_clip_uint16
  429. # define av_clip_uint16 av_clip_uint16_c
  430. #endif
  431. #ifndef av_clip_int16
  432. # define av_clip_int16 av_clip_int16_c
  433. #endif
  434. #ifndef av_clipl_int32
  435. # define av_clipl_int32 av_clipl_int32_c
  436. #endif
  437. #ifndef av_clip_intp2
  438. # define av_clip_intp2 av_clip_intp2_c
  439. #endif
  440. #ifndef av_clip_uintp2
  441. # define av_clip_uintp2 av_clip_uintp2_c
  442. #endif
  443. #ifndef av_mod_uintp2
  444. # define av_mod_uintp2 av_mod_uintp2_c
  445. #endif
  446. #ifndef av_sat_add32
  447. # define av_sat_add32 av_sat_add32_c
  448. #endif
  449. #ifndef av_sat_dadd32
  450. # define av_sat_dadd32 av_sat_dadd32_c
  451. #endif
  452. #ifndef av_clipf
  453. # define av_clipf av_clipf_c
  454. #endif
  455. #ifndef av_clipd
  456. # define av_clipd av_clipd_c
  457. #endif
  458. #ifndef av_popcount
  459. # define av_popcount av_popcount_c
  460. #endif
  461. #ifndef av_popcount64
  462. # define av_popcount64 av_popcount64_c
  463. #endif