From 472e044587d5fe43bbc84713ca824fd8350924b8 Mon Sep 17 00:00:00 2001 From: vectronic Date: Mon, 23 Sep 2019 21:43:04 +0100 Subject: avformat/mov: add ICC profile support for colr atom Signed-off-by: vectronic --- libavformat/mov.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'libavformat') diff --git a/libavformat/mov.c b/libavformat/mov.c index ff1e534489..79544da127 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1546,6 +1546,7 @@ static int mov_read_enda(MOVContext *c, AVIOContext *pb, MOVAtom atom) static int mov_read_colr(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; + uint8_t *icc_profile; char color_parameter_type[5] = { 0 }; uint16_t color_primaries, color_trc, color_matrix; int ret; @@ -1558,12 +1559,22 @@ static int mov_read_colr(MOVContext *c, AVIOContext *pb, MOVAtom atom) if (ret < 0) return ret; if (strncmp(color_parameter_type, "nclx", 4) && - strncmp(color_parameter_type, "nclc", 4)) { + strncmp(color_parameter_type, "nclc", 4) && + strncmp(color_parameter_type, "prof", 4)) { av_log(c->fc, AV_LOG_WARNING, "unsupported color_parameter_type %s\n", color_parameter_type); return 0; } + if (!strncmp(color_parameter_type, "prof", 4)) { + icc_profile = av_stream_new_side_data(st, AV_PKT_DATA_ICC_PROFILE, atom.size - 4); + if (!icc_profile) + return AVERROR(ENOMEM); + ret = ffio_read_size(pb, icc_profile, atom.size - 4); + if (ret < 0) + return ret; + } + else { color_primaries = avio_rb16(pb); color_trc = avio_rb16(pb); color_matrix = avio_rb16(pb); @@ -1592,7 +1603,7 @@ static int mov_read_colr(MOVContext *c, AVIOContext *pb, MOVAtom atom) st->codecpar->color_trc = color_trc; st->codecpar->color_space = color_matrix; av_log(c->fc, AV_LOG_TRACE, "\n"); - + } return 0; } -- cgit v1.2.3