summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-10-30 22:50:44 +0100
committerwm4 <wm4@nowhere>2014-10-30 22:50:44 +0100
commit6c469dc9d9dde10bd284015548122985712535a9 (patch)
treedcc26aa8272b8e6baa38d9496cb387f193a93aec
parenta77a171b7ff436cb63b13321427a259a2a8c8fc7 (diff)
downloadmpv-6c469dc9d9dde10bd284015548122985712535a9.tar.bz2
mpv-6c469dc9d9dde10bd284015548122985712535a9.tar.xz
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.
-rw-r--r--demux/demux_lavf.c7
-rw-r--r--stream/stream_lavf.c4
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: