From 370ed5777c6f0b7e89542bcd3357270b88e09e93 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 3 Dec 2019 21:04:53 +0100 Subject: demux: do not make up demuxer_id The demuxer_id (exported in as "src-id" property) is supposed to be the native stream ID, as it exists in the file, or -1 if that does not exist (actually any negative value), or if it is unknown. Until now, an ID was made up if it was missing. That seems like strange non-sense, and I can't find the reason why it was done. But it was probably for convenience by the EDL stuff or so. Stop doing this. Fortunately, the src-id property was documented as being unavailable if the ID is not known. Even the code for this was present, it was just inactive until now. Extend input.rst with some explanations. Also fixing 3 other places where negative demuxer_id was ignored or avoided. --- demux/demux.c | 9 ++------- demux/demux_mkv.c | 1 - demux/demux_timeline.c | 2 +- 3 files changed, 3 insertions(+), 9 deletions(-) (limited to 'demux') diff --git a/demux/demux.c b/demux/demux.c index 40439b32a8..813cb1aa23 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -980,13 +980,6 @@ static void demux_add_sh_stream_locked(struct demux_internal *in, if (sh->ff_index < 0) sh->ff_index = sh->index; - if (sh->demuxer_id < 0) { - sh->demuxer_id = 0; - for (int n = 0; n < in->num_streams; n++) { - if (in->streams[n]->type == sh->type) - sh->demuxer_id += 1; - } - } MP_TARRAY_APPEND(in, in->streams, in->num_streams, sh); assert(in->streams[sh->index] == sh); @@ -3762,6 +3755,8 @@ static bool queue_seek(struct demux_internal *in, double seek_pts, int flags, struct sh_stream *demuxer_stream_by_demuxer_id(struct demuxer *d, enum stream_type t, int id) { + if (id < 0) + return NULL; int num = demux_get_num_stream(d); for (int n = 0; n < num; n++) { struct sh_stream *s = demux_get_stream(d, n); diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index 4c5f376137..99e481bc7d 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -1286,7 +1286,6 @@ static void add_coverart(struct demuxer *demuxer) if (!codec) continue; struct sh_stream *sh = demux_alloc_sh_stream(STREAM_VIDEO); - sh->demuxer_id = -1 - sh->index; // don't clash with mkv IDs sh->codec->codec = codec; sh->attached_picture = new_demux_packet_from(att->data, att->data_size); if (sh->attached_picture) { diff --git a/demux/demux_timeline.c b/demux/demux_timeline.c index aefca9f1c9..f8f096c464 100644 --- a/demux/demux_timeline.c +++ b/demux/demux_timeline.c @@ -133,7 +133,7 @@ static void associate_streams(struct demuxer *demuxer, // Matching by demuxer ID is supposedly useful and preferable for // ordered chapters. - if (sh->demuxer_id == vs->sh->demuxer_id) + if (sh->demuxer_id >= 0 && sh->demuxer_id == vs->sh->demuxer_id) other = vs; } -- cgit v1.2.3