From e9add0d85b38db8efebd53bed83125945103e11f Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 2 Jun 2014 19:00:18 +0200 Subject: [PATCH] av_add_stable: Add fast special case where step can be represented exactly Signed-off-by: Michael Niedermayer --- libavutil/mathematics.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libavutil/mathematics.c b/libavutil/mathematics.c index c8f1e1cd89..df7d0d88bf 100644 --- a/libavutil/mathematics.c +++ b/libavutil/mathematics.c @@ -188,9 +188,17 @@ simple_round: int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc) { + int64_t m, d; + if (inc != 1) inc_tb = av_mul_q(inc_tb, (AVRational) {inc, 1}); + m = inc_tb.num * (int64_t)ts_tb.den; + d = inc_tb.den * (int64_t)ts_tb.num; + + if (m % d == 0) + return ts + m / d; + if (av_cmp_q(inc_tb, ts_tb) < 0) { //increase step is too small for even 1 step to be representable return ts;