Commit 8414b514 authored by michael's avatar michael

more comments


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@3317 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 49724f69
...@@ -47,6 +47,10 @@ AVInteger av_sub_i(AVInteger a, AVInteger b){ ...@@ -47,6 +47,10 @@ AVInteger av_sub_i(AVInteger a, AVInteger b){
return a; 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 av_log2_i(AVInteger a){
int i; int i;
...@@ -78,6 +82,9 @@ AVInteger av_mul_i(AVInteger a, AVInteger b){ ...@@ -78,6 +82,9 @@ AVInteger av_mul_i(AVInteger a, AVInteger b){
return out; 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 av_cmp_i(AVInteger a, AVInteger b){
int i; int i;
int v= (int16_t)a.v[AV_INTEGER_SIZE-1] - (int16_t)b.v[AV_INTEGER_SIZE-1]; 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){ ...@@ -90,6 +97,10 @@ int av_cmp_i(AVInteger a, AVInteger b){
return 0; 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 av_shr_i(AVInteger a, int s){
AVInteger out; AVInteger out;
int i; int i;
...@@ -104,6 +115,10 @@ AVInteger av_shr_i(AVInteger a, int s){ ...@@ -104,6 +115,10 @@ AVInteger av_shr_i(AVInteger a, int s){
return out; return out;
} }
/**
* returns a % b.
* @param quot a/b will be stored here
*/
AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b){ AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b){
int i= av_log2_i(a) - av_log2_i(b); int i= av_log2_i(a) - av_log2_i(b);
AVInteger quot_temp; AVInteger quot_temp;
...@@ -128,12 +143,18 @@ AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b){ ...@@ -128,12 +143,18 @@ AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b){
return a; return a;
} }
/**
* returns a/b.
*/
AVInteger av_div_i(AVInteger a, AVInteger b){ AVInteger av_div_i(AVInteger a, AVInteger b){
AVInteger quot; AVInteger quot;
av_mod_i(&quot, a, b); av_mod_i(&quot, a, b);
return quot; return quot;
} }
/**
* converts the given int64_t to an AVInteger.
*/
AVInteger av_int2i(int64_t a){ AVInteger av_int2i(int64_t a){
AVInteger out; AVInteger out;
int i; int i;
...@@ -145,6 +166,11 @@ AVInteger av_int2i(int64_t a){ ...@@ -145,6 +166,11 @@ AVInteger av_int2i(int64_t a){
return out; 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){ int64_t av_i2int(AVInteger a){
int i; int i;
int64_t out=(int8_t)a.v[AV_INTEGER_SIZE-1]; int64_t out=(int8_t)a.v[AV_INTEGER_SIZE-1];
......
...@@ -31,21 +31,33 @@ ...@@ -31,21 +31,33 @@
#include "avcodec.h" #include "avcodec.h"
#include "rational.h" #include "rational.h"
/**
* returns b*c.
*/
AVRational av_mul_q(AVRational b, AVRational 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); av_reduce(&b.num, &b.den, b.num * (int64_t)c.num, b.den * (int64_t)c.den, INT_MAX);
return b; return b;
} }
/**
* returns b/c.
*/
AVRational av_div_q(AVRational b, AVRational 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); av_reduce(&b.num, &b.den, b.num * (int64_t)c.den, b.den * (int64_t)c.num, INT_MAX);
return b; return b;
} }
/**
* returns b+c.
*/
AVRational av_add_q(AVRational b, AVRational 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); 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; return b;
} }
/**
* returns b-c.
*/
AVRational av_sub_q(AVRational b, AVRational 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); 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; return b;
......
...@@ -27,19 +27,27 @@ ...@@ -27,19 +27,27 @@
#ifndef RATIONAL_H #ifndef RATIONAL_H
#define RATIONAL_H #define RATIONAL_H
/**
* Rational number num/den.
*/
typedef struct AVRational{ typedef struct AVRational{
int num; int num; ///< numerator
int den; int den; ///< denominator
} AVRational; } 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){ 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; const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den;
if (tmp < 0) return -1; if(tmp) return (tmp>>63)|1;
else if(tmp == 0) return 0; else return 0;
else return 1;
} }
/**
* converts the given AVRational to a double.
*/
static inline double av_q2d(AVRational a){ static inline double av_q2d(AVRational a){
return a.num / (double) a.den; return a.num / (double) a.den;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment