From patchwork Thu May 18 00:49:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 3692 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.10.2 with SMTP id 2csp436779vsk; Wed, 17 May 2017 17:51:12 -0700 (PDT) X-Received: by 10.28.153.143 with SMTP id b137mr1007733wme.15.1495068672204; Wed, 17 May 2017 17:51:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1495068672; cv=none; d=google.com; s=arc-20160816; b=PWUDuhZQXk3XcbvnXQlktI+A1CN7ZUsVyaTlxMs3FsgGVWCpNb7iFHZTjmSlMwmh/a t4VDIu/u7gWorzyC8eR0xelCKuXGntPc97E5N4F7kRK3PMx7nDPdvhBjusmV8mFzDasJ pgQXckEGMR/TEKAQYSH5ixhH3Bia5pHrxgSwdJk+HDTaifsUfzzPXf+m6B7mmQd6ixRa xeXPoij2F0B44bKGQAp0p5CYXwJ2zD75GIfzOdA54+yr60NQjSJOpBZhuCJlkUe4iAXV j1vr101ZEoyFSBtIRkprHuhteVaVLHWokx1tWmwL9z6H++5wIWXC8DEpSSX6r09R2/9T X5bA== 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:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=dHPgd1myYNb1kySq9Ty9i4T15YBfftCOnuD6/7EsXvg=; b=AmBn4sicoVF0O+HoZr+0ljTMYjgpkVllnskrP7ILH75wv6kE/2ndjER7CJX2O8jv0N PtcInZ3ASX4pbkXxYh6vBOzygE4XfPT7uDxLqvs2MVJqVv1eNoufr90r7UU+qFBKrMBt ZI/SfE6O6OUN3iucG7ukotTBDxd2DhVOJJJlQLrzheQysXKc+obF5Z6S9vAwyRuHiuDs KY+ZmLot3RAcLG8XpNWuTDSalK+Ye9mXv7rzQ1WySPQhGexwzbwVgtfM2wFt93NUvzKX hoZYvIr4Mw02fBXISluWOV42u3z6kyA6nJlW7ILlZ7tO4ez3Cgn8Wgdla2fiTy7ECP+1 rfgg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com; 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 t138si4572923wmd.63.2017.05.17.17.51.03; Wed, 17 May 2017 17:51:12 -0700 (PDT) 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; 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 8E54668990D; Thu, 18 May 2017 03:50:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f176.google.com (mail-qk0-f176.google.com [209.85.220.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6CFBD680A0A for ; Thu, 18 May 2017 03:50:31 +0300 (EEST) Received: by mail-qk0-f176.google.com with SMTP id a72so24219504qkj.2 for ; Wed, 17 May 2017 17:50:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=2reoBvfyEx0TS6nyuVU+jhxQOIf7ObjJL0LOcVzFP1o=; b=bVVSrZAFDFU9ArZog2oMwMu+cBlQoZOL2AnP+uYRvVOu9EBjsvWROnfeF7g1D1LSxE BiTY37KDUvShlbWRUA97zRunG7CFemnq2Xa0fcVXNpx4VwqRKEg80yNO3iEDd41sdo2p qfNtJzibQmoxcDvYTpPh5YsQnHO02oddS0pZSjVJnbW/ahdZfnQBpfXUIzbfvxhop06N gr7LsYH3wSquY1SUOfDhJJR9K6pNx4b3Fr8p48Ha9zPOOPagkHdXAJuWrzSZ/q+UTNoa /AV+mGl8StCLs0kPREZPr+iBZtVnWnTiX/n/3nOtJvefPq0+khAv85eIfiUZexn8Tmtt 3Aog== 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:in-reply-to :references; bh=2reoBvfyEx0TS6nyuVU+jhxQOIf7ObjJL0LOcVzFP1o=; b=gTTO15htntyd3JyLK7iUroUPd9BANYPPmDQ3bqUnxVKO8zgu/Wno9XdXErErze0y// UQUpPB5eZ2Pa1fyA5J2/npmJL89d3qCcXlLjaUGZrrxEKM9y1KGvNZXMsEg9FJSjs9gq K1zuOVwjqSf1p1VdUEd2wSFKvYkpsB9HoD9BSTyVLxJDeBjV7bkqByxq5EQdOqdCNleH GT4iCeonpS36t0vWXj2s2qOfL0ghYqoeAWI9vjxju8t1DLQYrSYTHJ8hvfZTvgKDgYsO bvaVTjy55KnwID7gpMjNh1+7mmPN2OpG2Dxe3bQF8Os+X+F2IA+KTjfRV6U1EiiM10O4 LljA== X-Gm-Message-State: AODbwcD0OW3pHVFkqPkCDxOXvkLE/UAHzXN63xFdaXV0bYnBZVGhqjLR +0DqAIuZ3Glt27UU X-Received: by 10.55.144.5 with SMTP id s5mr1316258qkd.39.1495068630253; Wed, 17 May 2017 17:50:30 -0700 (PDT) Received: from localhost.localdomain ([181.231.116.134]) by smtp.gmail.com with ESMTPSA id d5sm2504461qkf.4.2017.05.17.17.50.29 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 17 May 2017 17:50:29 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 17 May 2017 21:49:41 -0300 Message-Id: <20170518004941.5140-4-jamrial@gmail.com> X-Mailer: git-send-email 2.12.1 In-Reply-To: <20170518004941.5140-1-jamrial@gmail.com> References: <20170518004941.5140-1-jamrial@gmail.com> Subject: [FFmpeg-devel] [PATCH 4/4] avformat/mov: add support for reading Content Light Level Box 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" As defined in "VP Codec ISO Media File Format Binding v1.0" https://github.com/webmproject/vp9-dash/blob/master/VPCodecISOMediaFileFormatBinding.md Signed-off-by: James Almer --- libavformat/isom.h | 2 ++ libavformat/mov.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/libavformat/isom.h b/libavformat/isom.h index 426f732247..ff009b0896 100644 --- a/libavformat/isom.h +++ b/libavformat/isom.h @@ -196,6 +196,8 @@ typedef struct MOVStreamContext { AVSphericalMapping *spherical; size_t spherical_size; AVMasteringDisplayMetadata *mastering; + AVContentLightMetadata *coll; + size_t coll_size; uint32_t format; diff --git a/libavformat/mov.c b/libavformat/mov.c index 0b5fd849f3..db39890234 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -4666,6 +4666,38 @@ static int mov_read_smdm(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_coll(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + MOVStreamContext *sc; + int version; + + if (c->fc->nb_streams < 1) + return AVERROR_INVALIDDATA; + + sc = c->fc->streams[c->fc->nb_streams - 1]->priv_data; + + if (atom.size < 5) { + av_log(c->fc, AV_LOG_ERROR, "Empty Content Light Level box\n"); + return AVERROR_INVALIDDATA; + } + + version = avio_r8(pb); + if (version) { + av_log(c->fc, AV_LOG_WARNING, "Unsupported Content Light Level box version %d\n", version); + return 0; + } + avio_skip(pb, 3); /* flags */ + + 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; @@ -5453,6 +5485,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('s','v','3','d'), mov_read_sv3d }, /* spherical video box */ { MKTAG('d','O','p','s'), mov_read_dops }, { MKTAG('S','m','D','m'), mov_read_smdm }, +{ MKTAG('C','o','L','L'), mov_read_coll }, { 0, NULL } }; @@ -5878,6 +5911,7 @@ static int mov_read_close(AVFormatContext *s) av_freep(&sc->stereo3d); av_freep(&sc->spherical); av_freep(&sc->mastering); + av_freep(&sc->coll); } if (mov->dv_demux) { @@ -6237,6 +6271,15 @@ static int mov_read_header(AVFormatContext *s) sc->mastering = NULL; } + if (sc->coll) { + err = av_stream_add_side_data(st, AV_PKT_DATA_CONTENT_LIGHT_LEVEL, + (uint8_t *)sc->coll, + sc->coll_size); + if (err < 0) + return err; + + sc->coll = NULL; + } break; } }