From 6c469dc9d9dde10bd284015548122985712535a9 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 30 Oct 2014 22:50:44 +0100 Subject: demux_lavf, stream_lavf: drop local buffers on time-seeks There was chance that some data was left in various local buffers after time-seeks. Probably doesn't actually matter. --- demux/demux_lavf.c | 7 +++++-- stream/stream_lavf.c | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index d1158619b7..e6b62adb12 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -189,8 +189,11 @@ static int64_t mp_read_seek(void *opaque, int stream_idx, int64_t ts, int flags) .flags = flags, }; - int ret = stream_control(stream, STREAM_CTRL_AVSEEK, &cmd); - return ret < 1 ? AVERROR(ENOSYS) : 0; + if (stream_control(stream, STREAM_CTRL_AVSEEK, &cmd) == STREAM_OK) { + stream_drop_buffers(stream); + return 0; + } + return AVERROR(ENOSYS); } static void list_formats(struct demuxer *demuxer) diff --git a/stream/stream_lavf.c b/stream/stream_lavf.c index 76f2c8ee4e..286f9effcc 100644 --- a/stream/stream_lavf.c +++ b/stream/stream_lavf.c @@ -113,8 +113,10 @@ static int control(stream_t *s, int cmd, void *arg) case STREAM_CTRL_AVSEEK: { struct stream_avseek *c = arg; int64_t r = avio_seek_time(avio, c->stream_index, c->timestamp, c->flags); - if (r >= 0) + if (r >= 0) { + stream_drop_buffers(s); return 1; + } break; } case STREAM_CTRL_HAS_AVSEEK: -- cgit v1.2.3