aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2004-07-15 14:06:39 +0000
committerMichael Niedermayer <michaelni@gmx.at>2004-07-15 14:06:39 +0000
commit5c07b9e914695a596874fabbe1c86b56d8afeca0 (patch)
tree586120acf93d818260f5b0b74d4efe44b391af33
parentf4888b830f44349de0bb137bc913ea6193adbe9e (diff)
downloadffmpeg-5c07b9e914695a596874fabbe1c86b56d8afeca0.tar.gz
more comments
Originally committed as revision 3317 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/integer.c26
-rw-r--r--libavcodec/rational.c12
-rw-r--r--libavcodec/rational.h18
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(&quot, 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;
}