From patchwork Thu May 18 00:49:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 3689 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.10.2 with SMTP id 2csp436626vsk; Wed, 17 May 2017 17:50:38 -0700 (PDT) X-Received: by 10.28.136.83 with SMTP id k80mr14043744wmd.38.1495068638188; Wed, 17 May 2017 17:50:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1495068638; cv=none; d=google.com; s=arc-20160816; b=ClKJ2Z1izNXY94ZN8UTgBmM/mlFX77+aY6g39NSj8MyqQcWkt5C1PWQvAPie+IHAGN fKlDim+rhhue02f8lcPoBkfnslxoyc60jSVImkYjocFV2/7E11Yh6LaPezOpoCo/Qdbk brllUnWAKz9ES39CW1hHpd77rBNXfIupqQx7xNNr0bbtH7Q+JKnj6BklI+BIPRrqIOs7 coCim353oPX6/ao0j59rZsFo1spDRTkQMLwblq5xpZ0cF7A36cW8oDirJEibIcDixN69 0M0YmR5g9fsHi57KXYm4vX6kgedj8vFzW5qKEiV6pDo0lygMnQmK6w6cE4eZO5HAV+mQ JzKQ== 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=x3Jdp+IZfpXgBdsznBZ0nU2NHCN4i1QdvEazF8Y1RWg=; b=Ko1TZhiC2nDJ6j+rjEr5+u0NLKGfsQI4Ol0dyFGz2jKFw/bkbobHd1/eg6XCuwKOgQ 12fI4R8epvp5J2Sd7xo2zSgNRVVrLVITJljEK53pIm/qB/HhFzUVqwjwyilqcjagaNeo hA6r9M0Zr9uJbOPpacOXBJJNkyrTAGUNPrt+J5hWVMx0Zx0Kf0CzXP5Ul5vkHgdxucwh IFKfEJ02yFnWif7pVZwjSesj2nb+2aAW4PlhG6KaCGQU3loPmZVFOYL8dYsqKu1KhFgs hVtAU06f8RPPK+RD/F1wOmyAPHdt7tLVI3908Zcz40zRTaRfX4CHZlag8Y2rkrmW6uZw GneA== 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 r63si4162854wmb.166.2017.05.17.17.50.37; Wed, 17 May 2017 17:50:38 -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 7BEAF689820; Thu, 18 May 2017 03:50:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f193.google.com (mail-qk0-f193.google.com [209.85.220.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EA395680A0A for ; Thu, 18 May 2017 03:50:27 +0300 (EEST) Received: by mail-qk0-f193.google.com with SMTP id o85so4030194qkh.0 for ; Wed, 17 May 2017 17:50:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=eE8YtmmB4f4PWy2qWYYv80zYaijBjCKZLeAOTFb6IT0=; b=Mnw/1oXrsPZtia1xPDy2GztFVwgy5BxTTYIhPHCe1nsb1JiAIyxpMM79nkxgdKB5Si V5HFcdYRRW83TqMsz+Sj/D/F8+ox2yCYhnKRYpcl+Y2eSe4lEhRS0cgMIw1StvC4SlZ4 i6S4Txccs3pa2I6FmE/sbaZ4R5BEXmKB1tNfZMlAIXkqO2CUIPjAHkzhYFTqftGu+sj0 6Ilod2PNzSm9mO1oM0jSuIOkS/Ls22O9G84WiyrtciahLwolCU5GfBf6440/XxUjleox HrX0tTS6U6JOxiRmyMjviV/lGqHO29KmLgTfjddlpz3INAUeGD3VcwMloTWy0xuj7AlD b+Zg== 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=eE8YtmmB4f4PWy2qWYYv80zYaijBjCKZLeAOTFb6IT0=; b=hZF3cjXW/pEzi1E8tNmoKJIfEOA9AcvhNQVuidJVtEzXCFBSe2EOp0gw6GyYD4m44K +oWvOexert5nrVd9voXGo8l/MWAKJBu2wPy3iAbNK/eMeiH3rrvxbjcZZ/hlui70gSKb dPaPOHsSTVgLW7rV0RoY++rbyJndt5dDTlFWz+OYOE2JRi0HqmO/yF/hi/ME+Psd+AWn r7ZSqa127NDN/Ze8Ub8mz3d8sIoHtPhGLEI3aP5TWCCTxaOw7DV3pwKESjem2yqKuC5y usKfnbw+DLU/7l4G2aoB+VFvyuMZcxB8o9DB+8VcXUxat7t0mIF4SxS18F/dl2AEGc5W phlg== X-Gm-Message-State: AODbwcAutz8+eQ3AdfLFC2/qMNtfIsjp+ruXVq9+cjbo9JzOV8wzkUyG egpsL5tAu5OhVjSB X-Received: by 10.55.19.205 with SMTP id 74mr1346770qkt.220.1495068626513; Wed, 17 May 2017 17:50:26 -0700 (PDT) Received: from localhost.localdomain ([181.231.116.134]) by smtp.gmail.com with ESMTPSA id d5sm2504461qkf.4.2017.05.17.17.50.25 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 17 May 2017 17:50:26 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 17 May 2017 21:49:38 -0300 Message-Id: <20170518004941.5140-1-jamrial@gmail.com> X-Mailer: git-send-email 2.12.1 Subject: [FFmpeg-devel] [PATCH 1/4] avformat/movenc: add support for writing Mastering Display Metadata 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/movenc.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index a6c0662cd0..cd436df7a4 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -42,6 +42,7 @@ #include "libavutil/avstring.h" #include "libavutil/intfloat.h" #include "libavutil/mathematics.h" +#include "libavutil/mastering_display_metadata.h" #include "libavutil/libm.h" #include "libavutil/opt.h" #include "libavutil/dict.h" @@ -1118,6 +1119,41 @@ static int mov_write_vpcc_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *tra return update_size(pb, pos); } +static int mov_write_smdm_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *track) +{ + int size = 0; + int64_t pos; + const AVMasteringDisplayMetadata *mastering = + (const AVMasteringDisplayMetadata *) av_stream_get_side_data(track->st, + AV_PKT_DATA_MASTERING_DISPLAY_METADATA, + &size); + if (!size) + return 0; + + if (!mastering->has_primaries || !mastering->has_luminance) { + av_log(s, AV_LOG_WARNING, "Incomplete Mastering Display metadata. Both luminance " + "and display primaries are needed\n"); + return 0; + } + + pos = avio_tell(pb); + + avio_wb32(pb, 0); + ffio_wfourcc(pb, "SmDm"); + avio_wb32(pb, 0); /* version & flags */ + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[0][0]) * (1 << 16))); + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[0][1]) * (1 << 16))); + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[1][0]) * (1 << 16))); + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[1][1]) * (1 << 16))); + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[2][0]) * (1 << 16))); + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[2][1]) * (1 << 16))); + avio_wb16(pb, lrint(av_q2d(mastering->white_point[0]) * (1 << 16))); + avio_wb16(pb, lrint(av_q2d(mastering->white_point[1]) * (1 << 16))); + avio_wb32(pb, lrint(av_q2d(mastering->max_luminance) * (1 << 8))); + avio_wb32(pb, lrint(av_q2d(mastering->min_luminance) * (1 << 14))); + return update_size(pb, pos); +} + static int mov_write_hvcc_tag(AVIOContext *pb, MOVTrack *track) { int64_t pos = avio_tell(pb); @@ -1964,6 +2000,7 @@ static int mov_write_video_tag(AVIOContext *pb, MOVMuxContext *mov, MOVTrack *tr mov_write_uuid_tag_ipod(pb); } else if (track->par->codec_id == AV_CODEC_ID_VP9) { mov_write_vpcc_tag(mov->fc, pb, track); + mov_write_smdm_tag(mov->fc, pb, track); } else if (track->par->codec_id == AV_CODEC_ID_VC1 && track->vos_len > 0) mov_write_dvc1_tag(pb, track); else if (track->par->codec_id == AV_CODEC_ID_VP6F ||