av_assert2(b >=0);
av_assert2((unsigned)(rnd&~AV_ROUND_PASS_MINMAX)<=5 && (rnd&~AV_ROUND_PASS_MINMAX)!=4);
+ if (c <= 0 || b < 0 || !((unsigned)(rnd&~AV_ROUND_PASS_MINMAX)<=5 && (rnd&~AV_ROUND_PASS_MINMAX)!=4))
+ return INT64_MIN;
+
if (rnd & AV_ROUND_PASS_MINMAX) {
if (a == INT64_MIN || a == INT64_MAX)
return a;
return av_rescale_q(this, fs_tb, out_tb);
}
+
+int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc)
+{
+ AVRational step = av_mul_q(inc_tb, (AVRational) {inc, 1});
+
+ if (av_cmp_q(step, ts_tb) < 0) {
+ //increase step is too small for even 1 step to be representable
+ return ts;
+ } else {
+ int64_t old = av_rescale_q(ts, ts_tb, step);
+ int64_t old_ts = av_rescale_q(old, step, ts_tb);
+ return av_rescale_q(old + 1, step, ts_tb) + (ts - old_ts);
+ }
+}