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);