diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2004-07-15 14:06:39 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2004-07-15 14:06:39 +0000 |
commit | 5c07b9e914695a596874fabbe1c86b56d8afeca0 (patch) | |
tree | 586120acf93d818260f5b0b74d4efe44b391af33 | |
parent | f4888b830f44349de0bb137bc913ea6193adbe9e (diff) | |
download | ffmpeg-5c07b9e914695a596874fabbe1c86b56d8afeca0.tar.gz |
more comments
Originally committed as revision 3317 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/integer.c | 26 | ||||
-rw-r--r-- | libavcodec/rational.c | 12 | ||||
-rw-r--r-- | libavcodec/rational.h | 18 |
3 files changed, 51 insertions, 5 deletions
diff --git a/libavcodec/integer.c b/libavcodec/integer.c index 025560f9e8..38a826f861 100644 --- a/libavcodec/integer.c +++ b/libavcodec/integer.c @@ -47,6 +47,10 @@ AVInteger av_sub_i(AVInteger a, AVInteger b){ return a; } +/** + * returns the rounded down value of the logarithm of base 2 of the given AVInteger. + * this is simply the index of the most significant bit which is 1. Or 0 of all bits are 0 + */ int av_log2_i(AVInteger a){ int i; @@ -78,6 +82,9 @@ AVInteger av_mul_i(AVInteger a, AVInteger b){ return out; } +/** + * returns 0 if a==b, 1 if a>b and -1 if a<b. + */ int av_cmp_i(AVInteger a, AVInteger b){ int i; int v= (int16_t)a.v[AV_INTEGER_SIZE-1] - (int16_t)b.v[AV_INTEGER_SIZE-1]; @@ -90,6 +97,10 @@ int av_cmp_i(AVInteger a, AVInteger b){ return 0; } +/** + * bitwise shift. + * @param s the number of bits by which the value should be shifted right, may be negative for shifting left + */ AVInteger av_shr_i(AVInteger a, int s){ AVInteger out; int i; @@ -104,6 +115,10 @@ AVInteger av_shr_i(AVInteger a, int s){ return out; } +/** + * returns a % b. + * @param quot a/b will be stored here + */ AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b){ int i= av_log2_i(a) - av_log2_i(b); AVInteger quot_temp; @@ -128,12 +143,18 @@ AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b){ return a; } +/** + * returns a/b. + */ AVInteger av_div_i(AVInteger a, AVInteger b){ AVInteger quot; av_mod_i(", a, b); return quot; } +/** + * converts the given int64_t to an AVInteger. + */ AVInteger av_int2i(int64_t a){ AVInteger out; int i; @@ -145,6 +166,11 @@ AVInteger av_int2i(int64_t a){ return out; } +/** + * converts the given AVInteger to an int64_t. + * if the AVInteger is too large to fit into an int64_t, + * then only the least significant 64bit will be used + */ int64_t av_i2int(AVInteger a){ int i; int64_t out=(int8_t)a.v[AV_INTEGER_SIZE-1]; diff --git a/libavcodec/rational.c b/libavcodec/rational.c index ad085653a5..7ccad9e383 100644 --- a/libavcodec/rational.c +++ b/libavcodec/rational.c @@ -31,21 +31,33 @@ #include "avcodec.h" #include "rational.h" +/** + * returns b*c. + */ AVRational av_mul_q(AVRational b, AVRational c){ av_reduce(&b.num, &b.den, b.num * (int64_t)c.num, b.den * (int64_t)c.den, INT_MAX); return b; } +/** + * returns b/c. + */ AVRational av_div_q(AVRational b, AVRational c){ av_reduce(&b.num, &b.den, b.num * (int64_t)c.den, b.den * (int64_t)c.num, INT_MAX); return b; } +/** + * returns b+c. + */ AVRational av_add_q(AVRational b, AVRational c){ 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); return b; } +/** + * returns b-c. + */ AVRational av_sub_q(AVRational b, AVRational c){ 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); return b; diff --git a/libavcodec/rational.h b/libavcodec/rational.h index d5fc77f1a6..fcda759c4c 100644 --- a/libavcodec/rational.h +++ b/libavcodec/rational.h @@ -27,19 +27,27 @@ #ifndef RATIONAL_H #define RATIONAL_H +/** + * Rational number num/den. + */ typedef struct AVRational{ - int num; - int den; + int num; ///< numerator + int den; ///< denominator } AVRational; +/** + * returns 0 if a==b, 1 if a>b and -1 if a<b. + */ static inline int av_cmp_q(AVRational a, AVRational b){ const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den; - if (tmp < 0) return -1; - else if(tmp == 0) return 0; - else return 1; + if(tmp) return (tmp>>63)|1; + else return 0; } +/** + * converts the given AVRational to a double. + */ static inline double av_q2d(AVRational a){ return a.num / (double) a.den; } |