From f5195cc4e715a141a4b74848e93a7921db713bff Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 8 Sep 2013 23:05:18 +0200 Subject: demux_mkv: support V_PRORES Why not... Code for demangling Matroska-style prores video packets inspired by libavformat's Matroska demuxer. --- demux/codec_tags.c | 1 + demux/demux_mkv.c | 9 +++++++++ demux/matroska.h | 1 + 3 files changed, 11 insertions(+) diff --git a/demux/codec_tags.c b/demux/codec_tags.c index 63564e7c7d..ba3472dda3 100644 --- a/demux/codec_tags.c +++ b/demux/codec_tags.c @@ -312,6 +312,7 @@ static const struct mp_codec_tag mp_video_codec_tags[] = { {MKTAG('V', 'Q', 'A', 'V'), "ws_vqa"}, {MKTAG('C', '9', '3', 'V'), "c93"}, {MKTAG('V', 'P', '9', '0'), "vp9"}, + {MKTAG('p', 'r', '0', '0'), "prores"}, {0}, }; diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c index 120bbbb93a..9fcadf6dfa 100644 --- a/demux/demux_mkv.c +++ b/demux/demux_mkv.c @@ -1167,6 +1167,7 @@ static const videocodec_info_t vinfo[] = { {MKV_V_VP8, mmioFOURCC('V', 'P', '8', '0'), 0}, {MKV_V_VP9, mmioFOURCC('V', 'P', '9', '0'), 0}, {MKV_V_DIRAC, mmioFOURCC('d', 'r', 'a', 'c'), 0}, + {MKV_V_PRORES, mmioFOURCC('p', 'r', '0', '0'), 0}, {NULL, 0, 0} }; @@ -2173,6 +2174,14 @@ static void mkv_parse_packet(mkv_track_t *track, bstr *buffer) buffer->len = size; } #endif + } else if (track->codec_id && strcmp(track->codec_id, MKV_V_PRORES) == 0) { + size_t newlen = buffer->len + 8; + char *data = talloc_size(NULL, newlen); + AV_WB32(data + 0, newlen); + AV_WB32(data + 4, MKBETAG('i', 'c', 'p', 'f')); + memcpy(data + 8, buffer->start, buffer->len); + buffer->start = data; + buffer->len = newlen; } } diff --git a/demux/matroska.h b/demux/matroska.h index baadc84a97..262686dcd5 100644 --- a/demux/matroska.h +++ b/demux/matroska.h @@ -79,6 +79,7 @@ #define MKV_V_MJPEG "V_MJPEG" #define MKV_V_UNCOMPRESSED "V_UNCOMPRESSED" #define MKV_V_DIRAC "V_DIRAC" +#define MKV_V_PRORES "V_PRORES" #define MKV_S_TEXTASCII "S_TEXT/ASCII" #define MKV_S_TEXTUTF8 "S_TEXT/UTF8" -- cgit v1.2.3