From patchwork Mon Nov 27 20:20:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vittorio Giovara X-Patchwork-Id: 6409 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp2257117jah; Mon, 27 Nov 2017 12:27:50 -0800 (PST) X-Google-Smtp-Source: AGs4zMZI/YOfRkFdk0B8ha4eR6sd9XlDwu7GA+2mPl4tu+d37OHCWLblGUswD2rVwAsz5j67zjtT X-Received: by 10.28.143.84 with SMTP id r81mr19277856wmd.122.1511814470731; Mon, 27 Nov 2017 12:27:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511814470; cv=none; d=google.com; s=arc-20160816; b=urEmvR9raNAWz95pAsbqklLyknN1XhyRZgPa1nJd+B4ZT5WmJyxDYP+hCMLix+zeW5 VCkgwgbS7+udceOJ2FbxIAPlmaQHpQkElUGsLeseDUVp3QXvrTKFhvRnsWthffL30GN6 CetMLKUZdRnjxuy7TACLYfSVMIFCnKFxsgnSmrOACW9I3Y9jTPiCPeNi3E5pdAN0fqZz DzAJJSACCGLZHyyCAhu4JV2wan+NBvRbShLc98dYlrJVbulxHByy/Jy9zenhLFHRxGvy /oOaow5JOkihFpSKe6Gp5+6hwBt4Nu1ez+kVOJ2UGyaLlIOn91YeTgBEU06matG5jja3 Li+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=e25m3G02CnZq/h/TJd6/ctHRhoC1yz5IO8w84E+Gn38=; b=cpy79Gu7saFJ4XC4hUdRIe4DFlX2t61GJWzHWTn5E78gSxhqHon7vx6YxqS17Z4Yqq 0InWXf4WMkZpz0w+lEHWNGTi6TVB5KWi0ZkdIaf2MI/138vWJtzr02HxSjMGjDBJXKXB DJdNx9vbemxY3q3Qfa0ZmII24xcTz0Kglr2VvZGTk0bW0tLe5ERpUEhuOBgWRu4x1UrV +xB48l8aNZfNZDAHa0dTAJ8SMR1Ls6gMeN2nD/Yz81dwyfN5V2JFOXphQnKtA4Foak83 HANZteFxo9YZ4HGFDJUrFKrLONw8JVtXif2ZblCA1FVB2fwfviCmwTldIjjxhDDt94xr sQUg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=kYu3b8VU; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f6si2989318wrh.148.2017.11.27.12.27.50; Mon, 27 Nov 2017 12:27:50 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=kYu3b8VU; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 88D65689A40; Mon, 27 Nov 2017 22:27:46 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f193.google.com (mail-qt0-f193.google.com [209.85.216.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4E40168996B for ; Mon, 27 Nov 2017 22:27:40 +0200 (EET) Received: by mail-qt0-f193.google.com with SMTP id j12so19144843qtc.9 for ; Mon, 27 Nov 2017 12:27:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=6r3q13arRsT1l/wwKnxwFqfWUIjVJyKHRHiDsO5TI6U=; b=kYu3b8VUOMbjUERTDoA332gcwWnbHaZ6UhCyIDMl62EHcKM3YHzNV4t8WytG5IDe7E 3Dz9OCUm65eetuQYkhhfM/CjemiqyUGpuzna4TGyqTu2e3xJElbdedDTeCsZLv5mcMZs jL/S6zSpNlcozDMCnoGgGdRrm+dVo96UIrCU7veqjyJZVj7t8IrDuDbAvX+lofw8p6qv gECFCyrZoMMz6rn91bZb+IFOMVFyvbgveGyghZ30IHjX7grLmiyBx4MpgFcWAuSg8ypF 8t9T6/WPfnvJXBgc9CsdDbWn7YW949ex52AAsDl96RibHAAebTWFD75hac+WuBNrF1z9 UYQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=6r3q13arRsT1l/wwKnxwFqfWUIjVJyKHRHiDsO5TI6U=; b=FG0WXid43ITC/crNw82LwIyKOB2f74rJSzVP94t231cs2OChf3vhzvhUz/Atgiv8Ma 0QLvyzRHk4BXhoxRmCRDMTi63tKxuG1ZhN/NCcG6DI6/f/DBG01O/oJOjiSgZzds5Sw7 pnT5/l+vVKhEVVmdG1JK7L7qIBvn97Dh5OqDXAmOAe6Y3QLqhm5XM3Kp7RpG0VNG5MSR HBmb9w9yBldsQh0JK0xn9Ibzm3Nhorjdql8/OjprfEYQcrx6/4d3wyhj3Ybs57Zw429+ umULqGju8vzMGlmkKCUeoTr1PFTJsIwKSHqhKkdqxq+UikAowEwtAdVmlNIkNIsA8Jui oQmQ== X-Gm-Message-State: AJaThX7dE/EejOQpU+D4hisVZ8riVwIuG+bR44El071TTdPK52xmPXsW IBgBCBkjgXLsYNulKWtNoUf5zA== X-Received: by 10.237.54.227 with SMTP id f90mr61668318qtb.121.1511814013220; Mon, 27 Nov 2017 12:20:13 -0800 (PST) Received: from vimacbookpro.vimeows.com ([8.40.92.159]) by smtp.gmail.com with ESMTPSA id m50sm21339004qtm.31.2017.11.27.12.20.11 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 27 Nov 2017 12:20:11 -0800 (PST) From: Vittorio Giovara To: ffmpeg-devel@ffmpeg.org Date: Mon, 27 Nov 2017 15:20:10 -0500 Message-Id: <20171127202010.45621-1-vittorio.giovara@gmail.com> X-Mailer: git-send-email 2.14.2 Subject: [FFmpeg-devel] [PATCH] mov: Support mdcv and clli boxes for mastering display an color light level X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Vittorio Giovara --- libavformat/mov.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index 79023ef369..bb463017a3 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -5072,6 +5072,51 @@ static int mov_read_smdm(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_mdcv(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + MOVStreamContext *sc; + const int mapping[3] = {1, 2, 0}; + const int chroma_den = 50000; + const int luma_den = 10000; + int i; + + if (c->fc->nb_streams < 1) + return AVERROR_INVALIDDATA; + + sc = c->fc->streams[c->fc->nb_streams - 1]->priv_data; + + if (atom.size < 24) { + av_log(c->fc, AV_LOG_ERROR, "Invalid Mastering Display Color Volume box\n"); + return AVERROR_INVALIDDATA; + } + + sc->mastering = av_mastering_display_metadata_alloc(); + if (!sc->mastering) + return AVERROR(ENOMEM); + + for (i = 0; i < 3; i++) { + const int j = mapping[i]; + sc->mastering->display_primaries[j][0].num = avio_rb16(pb); + sc->mastering->display_primaries[j][0].den = chroma_den; + sc->mastering->display_primaries[j][1].num = avio_rb16(pb); + sc->mastering->display_primaries[j][1].den = chroma_den; + } + sc->mastering->white_point[0].num = avio_rb16(pb); + sc->mastering->white_point[0].den = chroma_den; + sc->mastering->white_point[1].num = avio_rb16(pb); + sc->mastering->white_point[1].den = chroma_den; + + sc->mastering->max_luminance.num = avio_rb32(pb); + sc->mastering->max_luminance.den = luma_den; + sc->mastering->min_luminance.num = avio_rb32(pb); + sc->mastering->min_luminance.den = luma_den; + + sc->mastering->has_luminance = 1; + sc->mastering->has_primaries = 1; + + return 0; +} + static int mov_read_coll(MOVContext *c, AVIOContext *pb, MOVAtom atom) { MOVStreamContext *sc; @@ -5104,6 +5149,30 @@ static int mov_read_coll(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_clli(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + MOVStreamContext *sc; + + if (c->fc->nb_streams < 1) + return AVERROR_INVALIDDATA; + + sc = c->fc->streams[c->fc->nb_streams - 1]->priv_data; + + if (atom.size < 4) { + av_log(c->fc, AV_LOG_ERROR, "Empty Content Light Level Info box\n"); + return AVERROR_INVALIDDATA; + } + + sc->coll = av_content_light_metadata_alloc(&sc->coll_size); + if (!sc->coll) + return AVERROR(ENOMEM); + + sc->coll->MaxCLL = avio_rb16(pb); + sc->coll->MaxFALL = avio_rb16(pb); + + return 0; +} + static int mov_read_st3d(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; @@ -5912,6 +5981,8 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('S','m','D','m'), mov_read_smdm }, { MKTAG('C','o','L','L'), mov_read_coll }, { MKTAG('v','p','c','C'), mov_read_vpcc }, +{ MKTAG('m','d','c','v'), mov_read_mdcv }, +{ MKTAG('c','l','l','i'), mov_read_clli }, { 0, NULL } };