## ffmpeg / libavutil / rational.h @ 99778631

History | View | Annotate | Download (3.36 KB)

1 | 5ff85f1d | Michael Niedermayer | ```
/*
``` |
---|---|---|---|

2 | 89c9ff50 | Diego Biurrun | ```
* rational numbers
``` |

3 | 5ff85f1d | Michael Niedermayer | ```
* Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
``` |

4 | ```
*
``` |
||

5 | b78e7197 | Diego Biurrun | ```
* This file is part of FFmpeg.
``` |

6 | ```
*
``` |
||

7 | ```
* FFmpeg is free software; you can redistribute it and/or
``` |
||

8 | 5ff85f1d | Michael Niedermayer | ```
* modify it under the terms of the GNU Lesser General Public
``` |

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

10 | b78e7197 | Diego Biurrun | ```
* version 2.1 of the License, or (at your option) any later version.
``` |

11 | 5ff85f1d | Michael Niedermayer | ```
*
``` |

12 | b78e7197 | Diego Biurrun | ```
* FFmpeg is distributed in the hope that it will be useful,
``` |

13 | 5ff85f1d | Michael Niedermayer | ```
* but WITHOUT ANY WARRANTY; without even the implied warranty of
``` |

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

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

16 | ```
*
``` |
||

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

18 | b78e7197 | Diego Biurrun | ```
* License along with FFmpeg; if not, write to the Free Software
``` |

19 | 5509bffa | Diego Biurrun | ```
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
``` |

20 | 5ff85f1d | Michael Niedermayer | ```
*/
``` |

21 | 115329f1 | Diego Biurrun | |

22 | 5ff85f1d | Michael Niedermayer | ```
/**
``` |

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

24 | 89c9ff50 | Diego Biurrun | ```
* rational numbers
``` |

25 | 5ff85f1d | Michael Niedermayer | ```
* @author Michael Niedermayer <michaelni@gmx.at>
``` |

26 | ```
*/
``` |
||

27 | |||

28 | 98790382 | Stefano Sabatini | ```
#ifndef AVUTIL_RATIONAL_H
``` |

29 | ```
#define AVUTIL_RATIONAL_H
``` |
||

30 | 5ff85f1d | Michael Niedermayer | |

31 | 99545457 | Måns Rullgård | #include <stdint.h> |

32 | 2ed6f399 | Måns Rullgård | #include "attributes.h" |

33 | 99545457 | Måns Rullgård | |

34 | 5c07b9e9 | Michael Niedermayer | ```
/**
``` |

35 | 89c9ff50 | Diego Biurrun | ```
* rational number numerator/denominator
``` |

36 | 5c07b9e9 | Michael Niedermayer | ```
*/
``` |

37 | 5ff85f1d | Michael Niedermayer | typedef struct AVRational{ |

38 | 5c07b9e9 | Michael Niedermayer | int num; ///< numerator |

39 | int den; ///< denominator |
||

40 | 5ff85f1d | Michael Niedermayer | } AVRational; |

41 | |||

42 | 5c07b9e9 | Michael Niedermayer | ```
/**
``` |

43 | 89c9ff50 | Diego Biurrun | ```
* Compares two rationals.
``` |

44 | 1c95ef8b | Dujardin Bernard | ```
* @param a first rational
``` |

45 | ```
* @param b second rational
``` |
||

46 | 89c9ff50 | Diego Biurrun | ```
* @return 0 if a==b, 1 if a>b and -1 if a<b
``` |

47 | 5c07b9e9 | Michael Niedermayer | ```
*/
``` |

48 | 5ff85f1d | Michael Niedermayer | static inline int av_cmp_q(AVRational a, AVRational b){ |

49 | ```
const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den;
``` |
||

50 | |||

51 | 5c07b9e9 | Michael Niedermayer | if(tmp) return (tmp>>63)|1; |

52 | else return 0; |
||

53 | 5ff85f1d | Michael Niedermayer | } |

54 | |||

55 | 5c07b9e9 | Michael Niedermayer | ```
/**
``` |

56 | 89c9ff50 | Diego Biurrun | ```
* Converts rational to double.
``` |

57 | 1c95ef8b | Dujardin Bernard | ```
* @param a rational to convert
``` |

58 | ```
* @return (double) a
``` |
||

59 | 5c07b9e9 | Michael Niedermayer | ```
*/
``` |

60 | 5ff85f1d | Michael Niedermayer | static inline double av_q2d(AVRational a){ |

61 | return a.num / (double) a.den; |
||

62 | } |
||

63 | |||

64 | c11c2bc2 | Alexander Strasser | ```
/**
``` |

65 | 89c9ff50 | Diego Biurrun | ```
* Reduces a fraction.
``` |

66 | 804de96a | Diego Biurrun | ```
* This is useful for framerate calculations.
``` |

67 | 674bd4f6 | Diego Biurrun | ```
* @param dst_num destination numerator
``` |

68 | 1c95ef8b | Dujardin Bernard | ```
* @param dst_den destination denominator
``` |

69 | 674bd4f6 | Diego Biurrun | ```
* @param num source numerator
``` |

70 | 1c95ef8b | Dujardin Bernard | ```
* @param den source denominator
``` |

71 | 674bd4f6 | Diego Biurrun | ```
* @param max the maximum allowed for dst_num & dst_den
``` |

72 | c11c2bc2 | Alexander Strasser | ```
* @return 1 if exact, 0 otherwise
``` |

73 | ```
*/
``` |
||

74 | 674bd4f6 | Diego Biurrun | int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max); |

75 | c11c2bc2 | Alexander Strasser | |

76 | 0b006599 | Dujardin Bernard | ```
/**
``` |

77 | ```
* Multiplies two rationals.
``` |
||

78 | 89c9ff50 | Diego Biurrun | ```
* @param b first rational
``` |

79 | ```
* @param c second rational
``` |
||

80 | ```
* @return b*c
``` |
||

81 | 0b006599 | Dujardin Bernard | ```
*/
``` |

82 | 85074d3c | Zuxy Meng | AVRational av_mul_q(AVRational b, AVRational c) av_const; |

83 | 0b006599 | Dujardin Bernard | |

84 | ```
/**
``` |
||

85 | ca9049ef | Guillaume Poirier | ```
* Divides one rational by another.
``` |

86 | 89c9ff50 | Diego Biurrun | ```
* @param b first rational
``` |

87 | ```
* @param c second rational
``` |
||

88 | ```
* @return b/c
``` |
||

89 | 0b006599 | Dujardin Bernard | ```
*/
``` |

90 | 85074d3c | Zuxy Meng | AVRational av_div_q(AVRational b, AVRational c) av_const; |

91 | 0b006599 | Dujardin Bernard | |

92 | ```
/**
``` |
||

93 | ```
* Adds two rationals.
``` |
||

94 | 89c9ff50 | Diego Biurrun | ```
* @param b first rational
``` |

95 | ```
* @param c second rational
``` |
||

96 | ```
* @return b+c
``` |
||

97 | 0b006599 | Dujardin Bernard | ```
*/
``` |

98 | 85074d3c | Zuxy Meng | AVRational av_add_q(AVRational b, AVRational c) av_const; |

99 | 0b006599 | Dujardin Bernard | |

100 | ```
/**
``` |
||

101 | ca9049ef | Guillaume Poirier | ```
* Subtracts one rational from another.
``` |

102 | 89c9ff50 | Diego Biurrun | ```
* @param b first rational
``` |

103 | ```
* @param c second rational
``` |
||

104 | ```
* @return b-c
``` |
||

105 | 0b006599 | Dujardin Bernard | ```
*/
``` |

106 | 85074d3c | Zuxy Meng | AVRational av_sub_q(AVRational b, AVRational c) av_const; |

107 | 0b006599 | Dujardin Bernard | |

108 | ```
/**
``` |
||

109 | ```
* Converts a double precision floating point number to a rational.
``` |
||

110 | ```
* @param d double to convert
``` |
||

111 | ```
* @param max the maximum allowed numerator and denominator
``` |
||

112 | 89c9ff50 | Diego Biurrun | ```
* @return (AVRational) d
``` |

113 | 0b006599 | Dujardin Bernard | ```
*/
``` |

114 | 85074d3c | Zuxy Meng | AVRational av_d2q(double d, int max) av_const; |

115 | 5ff85f1d | Michael Niedermayer | |

116 | 05b90fc0 | Stefano Sabatini | ```
/**
``` |

117 | bf7e799c | Stefano Sabatini | ```
* @return 1 if q1 is nearer to q than q2, -1 if q2 is nearer
``` |

118 | ```
* than q1, 0 if they have the same distance.
``` |
||

119 | 05b90fc0 | Stefano Sabatini | ```
*/
``` |

120 | ```
int av_nearer_q(AVRational q, AVRational q1, AVRational q2);
``` |
||

121 | |||

122 | ```
/**
``` |
||

123 | bf7e799c | Stefano Sabatini | ```
* Finds the nearest value in q_list to q.
``` |

124 | 05b90fc0 | Stefano Sabatini | ```
* @param q_list an array of rationals terminated by {0, 0}
``` |

125 | ```
* @return the index of the nearest value found in the array
``` |
||

126 | ```
*/
``` |
||

127 | int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); |
||

128 | |||

129 | 98790382 | Stefano Sabatini | #endif /* AVUTIL_RATIONAL_H */ |