annotate rational.c @ 1795:920e6381e1fe libavcodec

2 byte shorter userdata for mpeg4 in the past it was startcode,string,00,7F,startcode now it is startcode,string,stratcode both are mpeg4 compliant, as according to the standard the userdata lasts until the next 00 00 01 (startcode prefix) but some very primitive decoders which simply skip until the first 00 byte and then expect the next valid startcode might fail with the old variant, just a theory though (didnt test if quicktime can decode it now)
author michael
date Sun, 08 Feb 2004 22:52:35 +0000
parents c910ff78ef80
children 2c2f738772b7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1548
dd544554ed42 AVRational
michael
parents:
diff changeset
1 /*
dd544554ed42 AVRational
michael
parents:
diff changeset
2 * Rational numbers
dd544554ed42 AVRational
michael
parents:
diff changeset
3 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
dd544554ed42 AVRational
michael
parents:
diff changeset
4 *
dd544554ed42 AVRational
michael
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
dd544554ed42 AVRational
michael
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
dd544554ed42 AVRational
michael
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
dd544554ed42 AVRational
michael
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
dd544554ed42 AVRational
michael
parents:
diff changeset
9 *
dd544554ed42 AVRational
michael
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
dd544554ed42 AVRational
michael
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dd544554ed42 AVRational
michael
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dd544554ed42 AVRational
michael
parents:
diff changeset
13 * Lesser General Public License for more details.
dd544554ed42 AVRational
michael
parents:
diff changeset
14 *
dd544554ed42 AVRational
michael
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
dd544554ed42 AVRational
michael
parents:
diff changeset
16 * License along with this library; if not, write to the Free Software
dd544554ed42 AVRational
michael
parents:
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
dd544554ed42 AVRational
michael
parents:
diff changeset
18 *
dd544554ed42 AVRational
michael
parents:
diff changeset
19 */
dd544554ed42 AVRational
michael
parents:
diff changeset
20
dd544554ed42 AVRational
michael
parents:
diff changeset
21 /**
dd544554ed42 AVRational
michael
parents:
diff changeset
22 * @file rational.c
dd544554ed42 AVRational
michael
parents:
diff changeset
23 * Rational numbers
dd544554ed42 AVRational
michael
parents:
diff changeset
24 * @author Michael Niedermayer <michaelni@gmx.at>
dd544554ed42 AVRational
michael
parents:
diff changeset
25 */
dd544554ed42 AVRational
michael
parents:
diff changeset
26
dd544554ed42 AVRational
michael
parents:
diff changeset
27 //#include <math.h>
dd544554ed42 AVRational
michael
parents:
diff changeset
28 #include <limits.h>
dd544554ed42 AVRational
michael
parents:
diff changeset
29
dd544554ed42 AVRational
michael
parents:
diff changeset
30 #include "common.h"
dd544554ed42 AVRational
michael
parents:
diff changeset
31 #include "avcodec.h"
dd544554ed42 AVRational
michael
parents:
diff changeset
32 #include "rational.h"
dd544554ed42 AVRational
michael
parents:
diff changeset
33
dd544554ed42 AVRational
michael
parents:
diff changeset
34 AVRational av_mul_q(AVRational b, AVRational c){
dd544554ed42 AVRational
michael
parents:
diff changeset
35 av_reduce(&b.num, &b.den, b.num * (int64_t)c.num, b.den * (int64_t)c.den, INT_MAX);
dd544554ed42 AVRational
michael
parents:
diff changeset
36 return b;
dd544554ed42 AVRational
michael
parents:
diff changeset
37 }
dd544554ed42 AVRational
michael
parents:
diff changeset
38
dd544554ed42 AVRational
michael
parents:
diff changeset
39 AVRational av_div_q(AVRational b, AVRational c){
dd544554ed42 AVRational
michael
parents:
diff changeset
40 av_reduce(&b.num, &b.den, b.num * (int64_t)c.den, b.den * (int64_t)c.num, INT_MAX);
dd544554ed42 AVRational
michael
parents:
diff changeset
41 return b;
dd544554ed42 AVRational
michael
parents:
diff changeset
42 }
dd544554ed42 AVRational
michael
parents:
diff changeset
43
dd544554ed42 AVRational
michael
parents:
diff changeset
44 AVRational av_add_q(AVRational b, AVRational c){
dd544554ed42 AVRational
michael
parents:
diff changeset
45 av_reduce(&b.num, &b.den, b.num * (int64_t)c.den + c.num * (int64_t)b.den, b.den * (int64_t)c.den, INT_MAX);
dd544554ed42 AVRational
michael
parents:
diff changeset
46 return b;
dd544554ed42 AVRational
michael
parents:
diff changeset
47 }
dd544554ed42 AVRational
michael
parents:
diff changeset
48
dd544554ed42 AVRational
michael
parents:
diff changeset
49 AVRational av_sub_q(AVRational b, AVRational c){
dd544554ed42 AVRational
michael
parents:
diff changeset
50 av_reduce(&b.num, &b.den, b.num * (int64_t)c.den - c.num * (int64_t)b.den, b.den * (int64_t)c.den, INT_MAX);
dd544554ed42 AVRational
michael
parents:
diff changeset
51 return b;
dd544554ed42 AVRational
michael
parents:
diff changeset
52 }
dd544554ed42 AVRational
michael
parents:
diff changeset
53
1625
c910ff78ef80 av_d2q() documentation
michael
parents: 1551
diff changeset
54 /**
c910ff78ef80 av_d2q() documentation
michael
parents: 1551
diff changeset
55 * Converts a double precission floating point number to a AVRational.
c910ff78ef80 av_d2q() documentation
michael
parents: 1551
diff changeset
56 * @param max the maximum allowed numerator and denominator
c910ff78ef80 av_d2q() documentation
michael
parents: 1551
diff changeset
57 */
1548
dd544554ed42 AVRational
michael
parents:
diff changeset
58 AVRational av_d2q(double d, int max){
dd544554ed42 AVRational
michael
parents:
diff changeset
59 AVRational a;
1551
85028cd13cf1 BSD doesnt have log2
michael
parents: 1548
diff changeset
60 int exponent= FFMAX( (int)(log(ABS(d) + 1e-20)/log(2)), 0);
1548
dd544554ed42 AVRational
michael
parents:
diff changeset
61 int64_t den= 1LL << (61 - exponent);
dd544554ed42 AVRational
michael
parents:
diff changeset
62 av_reduce(&a.num, &a.den, (int64_t)(d * den + 0.5), den, max);
dd544554ed42 AVRational
michael
parents:
diff changeset
63
dd544554ed42 AVRational
michael
parents:
diff changeset
64 return a;
dd544554ed42 AVRational
michael
parents:
diff changeset
65 }