diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-12-02 21:58:56 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-12-02 21:58:56 +0000 |
commit | 92afdd9267027f569dea2807d7057eaa2bbdb8c9 (patch) | |
tree | a715e06f0c0c9cc2e8074255935f3f0f9665f164 /src/libffmpeg/libavcodec/common.c | |
parent | 0c94a4778c29309553e86e8c39f314277f4b2ddf (diff) | |
download | xine-lib-92afdd9267027f569dea2807d7057eaa2bbdb8c9.tar.gz xine-lib-92afdd9267027f569dea2807d7057eaa2bbdb8c9.tar.bz2 |
update ffmpeg, pass fourcc and other stuff that might be useful
CVS patchset: 3414
CVS date: 2002/12/02 21:58:56
Diffstat (limited to 'src/libffmpeg/libavcodec/common.c')
-rw-r--r-- | src/libffmpeg/libavcodec/common.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/libffmpeg/libavcodec/common.c b/src/libffmpeg/libavcodec/common.c index 2344dc6be..40ba49811 100644 --- a/src/libffmpeg/libavcodec/common.c +++ b/src/libffmpeg/libavcodec/common.c @@ -326,3 +326,29 @@ int ff_gcd(int a, int b){ if(b) return ff_gcd(b, a%b); else return a; } + +void ff_float2fraction(int *nom_arg, int *denom_arg, double f, int max){ + double best_diff=1E10, diff; + int best_denom=1, best_nom=1; + int nom, denom, gcd; + + //brute force here, perhaps we should try continued fractions if we need large max ... + for(denom=1; denom<=max; denom++){ + nom= (int)(f*denom + 0.5); + if(nom<=0 || nom>max) continue; + + diff= ABS( f - (double)nom / (double)denom ); + if(diff < best_diff){ + best_diff= diff; + best_nom= nom; + best_denom= denom; + } + } + + gcd= ff_gcd(best_nom, best_denom); + best_nom /= gcd; + best_denom /= gcd; + + *nom_arg= best_nom; + *denom_arg= best_denom; +} |