diff options
author | wm4 <wm4@nowhere> | 2014-10-21 13:16:48 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-10-21 13:19:20 +0200 |
commit | f0f83ff36600abc8715f3a11c31b2eeeda6c8c92 (patch) | |
tree | 38c6faba94976b08052fed67615d6680c748022e /demux | |
parent | bcc3d72995e926f899c0baa215599c50e23b9523 (diff) | |
download | mpv-f0f83ff36600abc8715f3a11c31b2eeeda6c8c92.tar.bz2 mpv-f0f83ff36600abc8715f3a11c31b2eeeda6c8c92.tar.xz |
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.
Diffstat (limited to 'demux')
-rw-r--r-- | demux/demux.c | 1 | ||||
-rw-r--r-- | demux/demux_lavf.c | 1 | ||||
-rw-r--r-- | demux/stheader.h | 2 |
3 files changed, 4 insertions, 0 deletions
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; |