demux: timeline: honor quit requests

This commit is contained in:
wm4 2015-02-20 22:08:02 +01:00
parent 1cac7d1a65
commit ee653b8a26
5 changed files with 12 additions and 4 deletions

View File

@ -192,7 +192,7 @@ static bool try_open(struct timeline *tl, char *filename)
|| bstrcasecmp(bstr0(tl->demuxer->filename), bfilename) == 0)
return false;
struct stream *s = stream_open(filename, tl->global);
struct stream *s = stream_create(filename, STREAM_READ, tl->cancel, tl->global);
if (!s)
return false;
struct demuxer *d = demux_open(s, NULL, tl->global);

View File

@ -141,7 +141,7 @@ static struct demuxer *open_source(struct timeline *tl, char *filename)
if (strcmp(d->stream->url, filename) == 0)
return d;
}
struct demuxer *d = demux_open_url(filename, NULL, NULL, tl->global);
struct demuxer *d = demux_open_url(filename, NULL, tl->cancel, tl->global);
if (d) {
MP_TARRAY_APPEND(tl, tl->sources, tl->num_sources, d);
} else {

View File

@ -47,6 +47,7 @@
struct tl_ctx {
struct mp_log *log;
struct mpv_global *global;
struct timeline *tl;
struct demuxer *demuxer;
@ -174,7 +175,11 @@ static bool check_file_seg(struct tl_ctx *ctx, struct demuxer ***sources,
.matroska_was_valid = &was_valid,
.disable_cache = true,
};
struct demuxer *d = demux_open_url(filename, &params, NULL, ctx->global);
struct mp_cancel *cancel = ctx->tl->cancel;
if (mp_cancel_test(cancel))
return false;
struct demuxer *d = demux_open_url(filename, &params, cancel, ctx->global);
if (!d)
return false;
@ -212,7 +217,7 @@ static bool check_file_seg(struct tl_ctx *ctx, struct demuxer ***sources,
{
free_demuxer_and_stream(d);
params.disable_cache = false;
d = demux_open_url(filename, &params, NULL, ctx->global);
d = demux_open_url(filename, &params, cancel, ctx->global);
if (!d)
continue;
}
@ -518,6 +523,7 @@ void build_ordered_chapter_timeline(struct timeline *tl)
*ctx = (struct tl_ctx){
.log = tl->log,
.global = tl->global,
.tl = tl,
.demuxer = demuxer,
};

View File

@ -14,6 +14,7 @@ struct timeline *timeline_load(struct mpv_global *global, struct mp_log *log,
*tl = (struct timeline){
.global = global,
.log = log,
.cancel = demuxer->stream->cancel,
.demuxer = demuxer,
.track_layout = demuxer,
};

View File

@ -10,6 +10,7 @@ struct timeline_part {
struct timeline {
struct mpv_global *global;
struct mp_log *log;
struct mp_cancel *cancel;
// main source
struct demuxer *demuxer;