From f0f83ff36600abc8715f3a11c31b2eeeda6c8c92 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 21 Oct 2014 13:16:48 +0200 Subject: player: add stream selection by ffmpeg index Apparently using the stream index is the best way to refer to the same streams across multiple FFmpeg-using programs, even if the stream index itself is rarely meaningful in any way. For Matroska, there are some possible problems, depending how FFmpeg actually adds streams. Normally they seem to match though. --- demux/demux.c | 1 + demux/demux_lavf.c | 1 + demux/stheader.h | 2 ++ 3 files changed, 4 insertions(+) (limited to 'demux') diff --git a/demux/demux.c b/demux/demux.c index e5cd4d53fe..7c563e9625 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -190,6 +190,7 @@ struct sh_stream *new_sh_stream(demuxer_t *demuxer, enum stream_type type) *sh = (struct sh_stream) { .type = type, .index = demuxer->num_streams, + .ff_index = demuxer->num_streams, .demuxer_id = demuxer_id, // may be overwritten by demuxer .ds = talloc(sh, struct demux_stream), }; diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 85db0692e8..553e43aea0 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -587,6 +587,7 @@ static void handle_stream(demuxer_t *demuxer, int i) MP_TARRAY_APPEND(priv, priv->streams, priv->num_streams, sh); if (sh) { + sh->ff_index = st->index; sh->codec = mp_codec_from_av_codec_id(codec->codec_id); sh->lav_headers = codec; diff --git a/demux/stheader.h b/demux/stheader.h index 7c9b182f4b..2b5b43702f 100644 --- a/demux/stheader.h +++ b/demux/stheader.h @@ -36,6 +36,8 @@ struct sh_stream { // Demuxer/format specific ID. Corresponds to the stream IDs as encoded in // some file formats (e.g. MPEG), or an index chosen by demux.c. int demuxer_id; + // FFmpeg stream index (AVFormatContext.streams[index]), or equivalent. + int ff_index; // One of these is non-NULL, the others are NULL, depending on the stream // type. struct sh_audio *audio; -- cgit v1.2.3