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;