mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
more comments
Originally committed as revision 3317 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
f4888b830f
commit
5c07b9e914
@ -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){
|
|||||||
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){
|
|||||||
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){
|
|||||||
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){
|
|||||||
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(", a, b);
|
av_mod_i(", 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){
|
|||||||
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 @@
|
|||||||
#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 @@
|
|||||||
#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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user