diff mbox series

[FFmpeg-devel,1/3] avutil/rational: increase av_d2q precision

Message ID 20240128030136.5585-1-cus@passwd.hu
State Accepted
Commit 8fccd6d510fe802c7d2dbe291676b0780cd4cf7f
Headers show
Series [FFmpeg-devel,1/3] avutil/rational: increase av_d2q precision | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Marton Balint Jan. 28, 2024, 3:01 a.m. UTC
Fixes parsing small timebases from expressions (where the expression API
converts the result to double), like in this command line:

ffprobe -f lavfi -i testsrc=d=1,settb=1/2000000000 -show_streams -show_entries stream=time_base

Before the patch timebase was parsed as 1/1999999999.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavutil/rational.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Michael Niedermayer Jan. 30, 2024, 11:57 p.m. UTC | #1
On Sun, Jan 28, 2024 at 04:01:34AM +0100, Marton Balint wrote:
> Fixes parsing small timebases from expressions (where the expression API
> converts the result to double), like in this command line:
> 
> ffprobe -f lavfi -i testsrc=d=1,settb=1/2000000000 -show_streams -show_entries stream=time_base
> 
> Before the patch timebase was parsed as 1/1999999999.
> 
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
>  libavutil/rational.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

should be ok

thx

[...]
diff mbox series

Patch

diff --git a/libavutil/rational.c b/libavutil/rational.c
index eb148ddb12..329fbf3302 100644
--- a/libavutil/rational.c
+++ b/libavutil/rational.c
@@ -114,7 +114,7 @@  AVRational av_d2q(double d, int max)
         return (AVRational) { d < 0 ? -1 : 1, 0 };
     frexp(d, &exponent);
     exponent = FFMAX(exponent-1, 0);
-    den = 1LL << (61 - exponent);
+    den = 1LL << (62 - exponent);
     // (int64_t)rint() and llrint() do not work with gcc on ia64 and sparc64,
     // see Ticket2713 for affected gcc/glibc versions
     av_reduce(&a.num, &a.den, floor(d * den + 0.5), den, max);