summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-03-09 22:32:04 +0100
committerwm4 <wm4@nowhere>2015-03-09 22:32:04 +0100
commit39fa05d3742aea94c7638c5b9223d680459b7799 (patch)
treea3614047cd81153012aba53a98e9b816a733655a /demux
parent5f0eda7b94e5af25970bfd5bef0cf401fe3a10e7 (diff)
downloadmpv-39fa05d3742aea94c7638c5b9223d680459b7799.tar.bz2
mpv-39fa05d3742aea94c7638c5b9223d680459b7799.tar.xz
demux_mkv: check for playback aborts
Check async abort notification. libavformat already do something equivalent. Before this commit, the demuxer could enter resync mode (and print silly warning messages) when the stream stopped returning data because of an abort.
Diffstat (limited to 'demux')
-rw-r--r--demux/demux.c5
-rw-r--r--demux/demux.h2
-rw-r--r--demux/demux_mkv.c2
3 files changed, 9 insertions, 0 deletions
diff --git a/demux/demux.c b/demux/demux.c
index 16918e5453..e9edac78f8 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -1482,6 +1482,11 @@ void demux_unpause(demuxer_t *demuxer)
pthread_mutex_unlock(&in->lock);
}
+bool demux_cancel_test(struct demuxer *demuxer)
+{
+ return mp_cancel_test(demuxer->stream->cancel);
+}
+
struct demux_chapter *demux_copy_chapter_data(struct demux_chapter *c, int num)
{
struct demux_chapter *new = talloc_array(NULL, struct demux_chapter, num);
diff --git a/demux/demux.h b/demux/demux.h
index b6aa4af517..702da3fbd5 100644
--- a/demux/demux.h
+++ b/demux/demux.h
@@ -270,6 +270,8 @@ void demux_start_thread(struct demuxer *demuxer);
void demux_stop_thread(struct demuxer *demuxer);
void demux_set_wakeup_cb(struct demuxer *demuxer, void (*cb)(void *ctx), void *ctx);
+bool demux_cancel_test(struct demuxer *demuxer);
+
void demux_flush(struct demuxer *demuxer);
int demux_seek(struct demuxer *demuxer, double rel_seek_secs, int flags);
void demux_set_enable_refresh_seeks(struct demuxer *demuxer, bool enabled);
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index c9537995d8..ead19ac37f 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -2524,6 +2524,8 @@ static int read_next_block(demuxer_t *demuxer, struct block_info *block)
break;
if (s->eof)
return -1;
+ if (demux_cancel_test(demuxer))
+ return -1;
if (id == EBML_ID_EBML && stream_tell(s) >= mkv_d->segment_end) {
// Appended segment - don't use its clusters, consider this EOF.
stream_seek(s, stream_tell(s) - 4);