Mercurial > libavutil.hg
changeset 148:e299e867a485 libavutil
return optimal fraction
based on a patch by Uoti Urpala
author | michael |
---|---|
date | Thu, 30 Nov 2006 01:18:57 +0000 |
parents | 7e143f348a72 |
children | a7b367ec551a |
files | rational.c |
diffstat | 1 files changed, 9 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/rational.c Sun Nov 19 09:43:26 2006 +0000 +++ b/rational.c Thu Nov 30 01:18:57 2006 +0000 @@ -51,7 +51,15 @@ 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};