- s->pts = pts - avresample_get_delay(s->avr);
- ret = avresample_convert(s->avr, NULL, 0, 0, buf->extended_data,
- buf->linesize[0], buf->nb_samples);
+ new_pts = pts - avresample_get_delay(s->avr);
+ /* check for s->pts monotonicity */
+ if (new_pts > s->pts) {
+ s->pts = new_pts;
+ ret = avresample_convert(s->avr, NULL, 0, 0, buf->extended_data,
+ buf->linesize[0], buf->nb_samples);
+ } else {
+ av_log(ctx, AV_LOG_WARNING, "Non-monotonous timestamps, dropping "
+ "whole buffer.\n");
+ ret = 0;
+ }