~ubuntu-branches/ubuntu/jaunty/xvidcap/jaunty-proposed

« back to all changes in this revision

Viewing changes to ffmpeg/libavutil/rational.h

  • Committer: Bazaar Package Importer
  • Author(s): John Dong
  • Date: 2008-02-25 15:47:12 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20080225154712-qvr11ekcea4c9ry8
Tags: 1.1.6-0.1ubuntu1
* Merge from debian-multimedia (LP: #120003), Ubuntu Changes:
 - For ffmpeg-related build-deps, remove cvs from package names.
 - Standards-Version 3.7.3
 - Maintainer Spec

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Rational numbers
 
3
 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
 
4
 *
 
5
 * This file is part of FFmpeg.
 
6
 *
 
7
 * FFmpeg is free software; you can redistribute it and/or
 
8
 * modify it under the terms of the GNU Lesser General Public
 
9
 * License as published by the Free Software Foundation; either
 
10
 * version 2.1 of the License, or (at your option) any later version.
 
11
 *
 
12
 * FFmpeg is distributed in the hope that it will be useful,
 
13
 * 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
 * License along with FFmpeg; if not, write to the Free Software
 
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
20
 *
 
21
 */
 
22
 
 
23
/**
 
24
 * @file rational.h
 
25
 * Rational numbers.
 
26
 * @author Michael Niedermayer <michaelni@gmx.at>
 
27
 */
 
28
 
 
29
#ifndef RATIONAL_H
 
30
#define RATIONAL_H
 
31
 
 
32
/**
 
33
 * Rational number num/den.
 
34
 */
 
35
typedef struct AVRational{
 
36
    int num; ///< numerator
 
37
    int den; ///< denominator
 
38
} AVRational;
 
39
 
 
40
/**
 
41
 * Compare two rationals.
 
42
 * @param a first rational
 
43
 * @param b second rational
 
44
 * @return 0 if a==b, 1 if a>b and -1 if a<b.
 
45
 */
 
46
static inline int av_cmp_q(AVRational a, AVRational b){
 
47
    const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den;
 
48
 
 
49
    if(tmp) return (tmp>>63)|1;
 
50
    else    return 0;
 
51
}
 
52
 
 
53
/**
 
54
 * Rational to double conversion.
 
55
 * @param a rational to convert
 
56
 * @return (double) a
 
57
 */
 
58
static inline double av_q2d(AVRational a){
 
59
    return a.num / (double) a.den;
 
60
}
 
61
 
 
62
/**
 
63
 * Reduce a fraction.
 
64
 * This is useful for framerate calculations.
 
65
 * @param dst_nom destination numerator
 
66
 * @param dst_den destination denominator
 
67
 * @param nom source numerator
 
68
 * @param den source denominator
 
69
 * @param max the maximum allowed for dst_nom & dst_den
 
70
 * @return 1 if exact, 0 otherwise
 
71
 */
 
72
int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max);
 
73
 
 
74
/**
 
75
 * Multiplies two rationals.
 
76
 * @param b first rational.
 
77
 * @param c second rational.
 
78
 * @return b*c.
 
79
 */
 
80
AVRational av_mul_q(AVRational b, AVRational c);
 
81
 
 
82
/**
 
83
 * Divides one rational by another.
 
84
 * @param b first rational.
 
85
 * @param c second rational.
 
86
 * @return b/c.
 
87
 */
 
88
AVRational av_div_q(AVRational b, AVRational c);
 
89
 
 
90
/**
 
91
 * Adds two rationals.
 
92
 * @param b first rational.
 
93
 * @param c second rational.
 
94
 * @return b+c.
 
95
 */
 
96
AVRational av_add_q(AVRational b, AVRational c);
 
97
 
 
98
/**
 
99
 * Subtracts one rational from another.
 
100
 * @param b first rational.
 
101
 * @param c second rational.
 
102
 * returns b-c.
 
103
 */
 
104
AVRational av_sub_q(AVRational b, AVRational c);
 
105
 
 
106
/**
 
107
 * Converts a double precision floating point number to a rational.
 
108
 * @param d double to convert
 
109
 * @param max the maximum allowed numerator and denominator
 
110
 * @return (AVRational) d.
 
111
 */
 
112
AVRational av_d2q(double d, int max);
 
113
 
 
114
#endif // RATIONAL_H