summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 06511aaa50..930d19f9cd 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -1378,6 +1378,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 b2bedf0a23..0078ca8a7b 100644
--- a/demux/demux.h
+++ b/demux/demux.h
@@ -251,6 +251,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);
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index 1a3f8f0a84..9cc521fab8 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -2522,6 +2522,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);