From 1ef56e9d080103f0f40797cb65592710c9b91a5e Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 22 Dec 2014 12:53:51 +0100 Subject: demux_mkv: support embedded coverart The code could as well be in demux.c, but it's better to avoid accidental clashes with demux_lavf.c. FFmpeg provides no way yet to map a mime type to a codec, so do it manually. (It _can_ map a mime type to an "input format", but not a codec.) Fixes #1374. --- demux/demux_mkv.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'demux/demux_mkv.c') diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index 2d3e98fcc3..c3996e85fc 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -1123,7 +1123,20 @@ skip: return 0; } - +static void add_coverart(struct demuxer *demuxer) +{ + for (int n = 0; n < demuxer->num_attachments; n++) { + struct demux_attachment *att = &demuxer->attachments[n]; + const char *codec = mp_map_mimetype_to_video_codec(att->type); + if (!codec) + continue; + struct sh_stream *sh = new_sh_stream(demuxer, STREAM_VIDEO); + if (!sh) + break; + sh->codec = codec; + sh->attached_picture = new_demux_packet_from(att->data, att->data_size); + } +} static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track); static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track); @@ -1831,6 +1844,7 @@ static int demux_mkv_open(demuxer_t *demuxer, enum demux_check check) process_tags(demuxer); display_create_tracks(demuxer); + add_coverart(demuxer); if (demuxer->opts->mkv_probe_duration) probe_last_timestamp(demuxer); -- cgit v1.2.3