diff options
author | wm4 <wm4@nowhere> | 2013-06-15 17:53:15 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-06-15 18:36:17 +0200 |
commit | 98e50d54778e0a568e1dfea848baa871b6349af6 (patch) | |
tree | 41fd9adebb8e799e74b6f4120d6f1d8a4c212cf5 /demux/demux_lavf.c | |
parent | b04ce5471182b8deff0867ed2a16c7c4749e94c2 (diff) | |
download | mpv-98e50d54778e0a568e1dfea848baa871b6349af6.tar.bz2 mpv-98e50d54778e0a568e1dfea848baa871b6349af6.tar.xz |
demux_lavf: show metadata for OGG audio files
Whether this is a hack or not, I don't even know anymore.
Diffstat (limited to 'demux/demux_lavf.c')
-rw-r--r-- | demux/demux_lavf.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index a482f736c6..d3b64d3009 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -474,6 +474,13 @@ static void add_new_streams(demuxer_t *demuxer) handle_stream(demuxer, priv->num_streams); } +static void add_metadata(demuxer_t *demuxer, AVDictionary *metadata) +{ + AVDictionaryEntry *t = NULL; + while ((t = av_dict_get(metadata, "", t, AV_DICT_IGNORE_SUFFIX))) + demux_info_add(demuxer, t->key, t->value); +} + static demuxer_t *demux_open_lavf(demuxer_t *demuxer) { struct MPOpts *opts = demuxer->opts; @@ -561,11 +568,6 @@ static demuxer_t *demux_open_lavf(demuxer_t *demuxer) mp_msg(MSGT_HEADER, MSGL_V, "demux_lavf: avformat_find_stream_info() " "finished after %"PRId64" bytes.\n", stream_tell(demuxer->stream)); - /* Add metadata. */ - while ((t = av_dict_get(avfc->metadata, "", t, - AV_DICT_IGNORE_SUFFIX))) - demux_info_add(demuxer, t->key, t->value); - for (i = 0; i < avfc->nb_chapters; i++) { AVChapter *c = avfc->chapters[i]; uint64_t start = av_rescale_q(c->start, c->time_base, @@ -579,6 +581,17 @@ static demuxer_t *demux_open_lavf(demuxer_t *demuxer) add_new_streams(demuxer); + add_metadata(demuxer, avfc->metadata); + + // Often useful with OGG audio-only files, which have metadata in the audio + // track metadata instead of the main metadata. + if (demuxer->num_streams == 1) { + for (int n = 0; n < priv->num_streams; n++) { + if (priv->streams[n]) + add_metadata(demuxer, avfc->streams[n]->metadata); + } + } + if (avfc->nb_programs) { int p; for (p = 0; p < avfc->nb_programs; p++) { |