projects
/
platform
/
upstream
/
libav.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
8fa641f
)
return optimal fraction
author
Michael Niedermayer
<michaelni@gmx.at>
Thu, 30 Nov 2006 01:18:57 +0000
(
01:18
+0000)
committer
Michael Niedermayer
<michaelni@gmx.at>
Thu, 30 Nov 2006 01:18:57 +0000
(
01:18
+0000)
based on a patch by Uoti Urpala
Originally committed as revision 7186 to svn://svn.ffmpeg.org/ffmpeg/trunk
libavutil/rational.c
patch
|
blob
|
history
diff --git
a/libavutil/rational.c
b/libavutil/rational.c
index
4f343f7
..
9fcf621
100644
(file)
--- a/
libavutil/rational.c
+++ b/
libavutil/rational.c
@@
-51,7
+51,15
@@
int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max)
int64_t a2n= x*a1.num + a0.num;
int64_t a2d= x*a1.den + a0.den;
- if(a2n > max || a2d > max) break;
+ if(a2n > max || a2d > max){
+ if(a1.num) x= (max - a0.num) / a1.num;
+ if(a1.den) x= FFMIN(x, (max - a0.den) / a1.den);
+
+ // Won't overflow, sum == original denominator
+ if (den*(2*x*a1.den + a0.den) > nom*a1.den)
+ a1 = (AVRational){x*a1.num + a0.num, x*a1.den + a0.den};
+ break;
+ }
a0= a1;
a1= (AVRational){a2n, a2d};