ffmpeg / libavutil / rational.h @ d71ad089
History | View | Annotate | Download (3.38 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 | bad5537e | Diego Biurrun | * @file libavutil/rational.h
|
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 | 85074d3c | Zuxy Meng | #include "common.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 */ |