summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
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);