## ffmpeg / libavutil / libm.h @ 23d3931a

History | View | Annotate | Download (2.33 KB)

1 | 335ee1aa | Måns Rullgård | ```
/*
``` |
---|---|---|---|

2 | 2912e87a | Mans Rullgard | ```
* This file is part of Libav.
``` |

3 | 335ee1aa | Måns Rullgård | ```
*
``` |

4 | 2912e87a | Mans Rullgard | ```
* Libav is free software; you can redistribute it and/or
``` |

5 | 335ee1aa | Måns Rullgård | ```
* modify it under the terms of the GNU Lesser General Public
``` |

6 | ```
* License as published by the Free Software Foundation; either
``` |
||

7 | ```
* version 2.1 of the License, or (at your option) any later version.
``` |
||

8 | ```
*
``` |
||

9 | 2912e87a | Mans Rullgard | ```
* Libav is distributed in the hope that it will be useful,
``` |

10 | 335ee1aa | Måns Rullgård | ```
* but WITHOUT ANY WARRANTY; without even the implied warranty of
``` |

11 | ```
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
``` |
||

12 | ```
* Lesser General Public License for more details.
``` |
||

13 | ```
*
``` |
||

14 | ```
* You should have received a copy of the GNU Lesser General Public
``` |
||

15 | 2912e87a | Mans Rullgard | ```
* License along with Libav; if not, write to the Free Software
``` |

16 | 335ee1aa | Måns Rullgård | ```
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
``` |

17 | ```
*/
``` |
||

18 | |||

19 | ```
/**
``` |
||

20 | ba87f080 | Diego Biurrun | ```
* @file
``` |

21 | 335ee1aa | Måns Rullgård | ```
* Replacements for frequently missing libm functions
``` |

22 | ```
*/
``` |
||

23 | |||

24 | ```
#ifndef AVUTIL_LIBM_H
``` |
||

25 | ```
#define AVUTIL_LIBM_H
``` |
||

26 | |||

27 | #include <math.h> |
||

28 | #include "config.h" |
||

29 | 297bfb2f | Måns Rullgård | #include "attributes.h" |

30 | 335ee1aa | Måns Rullgård | |

31 | ```
#if !HAVE_EXP2
``` |
||

32 | ```
#undef exp2
``` |
||

33 | #define exp2(x) exp((x) * 0.693147180559945) |
||

34 | #endif /* HAVE_EXP2 */ |
||

35 | |||

36 | ```
#if !HAVE_EXP2F
``` |
||

37 | ```
#undef exp2f
``` |
||

38 | #define exp2f(x) ((float)exp2(x)) |
||

39 | #endif /* HAVE_EXP2F */ |
||

40 | |||

41 | ```
#if !HAVE_LLRINT
``` |
||

42 | ```
#undef llrint
``` |
||

43 | #define llrint(x) ((long long)rint(x)) |
||

44 | #endif /* HAVE_LLRINT */ |
||

45 | |||

46 | 07876e25 | Måns Rullgård | ```
#if !HAVE_LLRINTF
``` |

47 | ```
#undef llrintf
``` |
||

48 | #define llrintf(x) ((long long)rint(x)) |
||

49 | #endif /* HAVE_LLRINT */ |
||

50 | |||

51 | 335ee1aa | Måns Rullgård | ```
#if !HAVE_LOG2
``` |

52 | ```
#undef log2
``` |
||

53 | #define log2(x) (log(x) * 1.44269504088896340736) |
||

54 | #endif /* HAVE_LOG2 */ |
||

55 | |||

56 | ```
#if !HAVE_LOG2F
``` |
||

57 | ```
#undef log2f
``` |
||

58 | #define log2f(x) ((float)log2(x)) |
||

59 | #endif /* HAVE_LOG2F */ |
||

60 | |||

61 | ```
#if !HAVE_LRINT
``` |
||

62 | static av_always_inline av_const long int lrint(double x) |
||

63 | { |
||

64 | ```
return rint(x);
``` |
||

65 | } |
||

66 | #endif /* HAVE_LRINT */ |
||

67 | |||

68 | ```
#if !HAVE_LRINTF
``` |
||

69 | static av_always_inline av_const long int lrintf(float x) |
||

70 | { |
||

71 | return (int)(rint(x)); |
||

72 | } |
||

73 | #endif /* HAVE_LRINTF */ |
||

74 | |||

75 | ```
#if !HAVE_ROUND
``` |
||

76 | static av_always_inline av_const double round(double x) |
||

77 | { |
||

78 | return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5); |
||

79 | } |
||

80 | #endif /* HAVE_ROUND */ |
||

81 | |||

82 | ```
#if !HAVE_ROUNDF
``` |
||

83 | static av_always_inline av_const float roundf(float x) |
||

84 | { |
||

85 | return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5); |
||

86 | } |
||

87 | #endif /* HAVE_ROUNDF */ |
||

88 | |||

89 | 23d3931a | Martin Storsjö | ```
#if !HAVE_TRUNC
``` |

90 | static av_always_inline av_const double trunc(double x) |
||

91 | { |
||

92 | return (x > 0) ? floor(x) : ceil(x); |
||

93 | } |
||

94 | #endif /* HAVE_TRUNC */ |
||

95 | |||

96 | 335ee1aa | Måns Rullgård | ```
#if !HAVE_TRUNCF
``` |

97 | static av_always_inline av_const float truncf(float x) |
||

98 | { |
||

99 | return (x > 0) ? floor(x) : ceil(x); |
||

100 | } |
||

101 | #endif /* HAVE_TRUNCF */ |
||

102 | |||

103 | #endif /* AVUTIL_LIBM_H */ |