From patchwork Sun Apr 19 01:07:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 19079 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 4FBD744002F for ; Sun, 19 Apr 2020 04:08:41 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 37F8B68B65F; Sun, 19 Apr 2020 04:08:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4286868B785 for ; Sun, 19 Apr 2020 04:08:39 +0300 (EEST) Received: by mail-pj1-f42.google.com with SMTP id 7so3429584pjo.0 for ; Sat, 18 Apr 2020 18:08:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0rb90PoKax83U4w23M7f4c8c6+GvspMWAKn/wgz8KWI=; b=azSK/gNXZUBEqZIZBLz5khedCGua0DixVs3UTpvZvRrsD+ZOg77QBumYCFGVdHj6fb 5ag5BxeBgLBPrgBNfztx/7DhVqGnknKF7O05xOXAv3TRyScLcEOLUw09/inyhsMsNkJv 5SUYQ38fE8aQz7lxlqThpknUvZhkJYOAsVm/jlvHwK0adK5WFWCSL1hWM8TFXFgSx96e a8dPLINMO6uyZssUUpTSEMzqrcJNiEmRTx4LpYRMCSOueOx1w1nkERrchrBs8eVIS4Fe X3pkXu6YL6CTJKrkD74RpedphnAbuBcDKegJpvYESNeXr2UA4aW3mfU8DHxWkglVn1Cs jg7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0rb90PoKax83U4w23M7f4c8c6+GvspMWAKn/wgz8KWI=; b=GbnYnQF1f2wUSrDVTWPU2h/DbYvnMHGvBGhC3Qks6MwyzzopXWQFbi7VN+hOtRaj+O iGUaYxlIY0VVM0TYH8M7TK+d0viBqKZk4wbWnn7CuidQmrqxB05/SV2Zk9e0Mr6MaI8G cH/bR0Q4NAPgkalmtvnBw2fF3oMDvwq+ubERH9GODGTZVNUPmwSJBjsbFxhOzle/ZfHY t8H+mtSoRQTH++0bgYXEAf0pLcxkm18XEuJSBpEKfnS5Wxf/d3R4zA5vUJKKLPrZjm3j Z94RyEEWe1SUMv5lV1kA82aUA56WbvUwt39GQMV9yDmWzapm7ZMN0EGk/G1OnQbUHX/y eCkw== X-Gm-Message-State: AGi0Pub6AHSDG6qL7D1eVNcs73uJSCiuHzUl50MyiQ5rK5+tvUgx3cb8 yynWGJQ+xOllCiqWJYh3xzuhKn+GMS4= X-Google-Smtp-Source: APiQypIsJcFVtw1fKxo83uaftq0kgR9GQdm8XkgGbMOr6ypSvxHoK0iRydf5ZJDVw0GFKxRWLi3r6Q== X-Received: by 2002:a17:90a:ec0f:: with SMTP id l15mr13409145pjy.16.1587258517260; Sat, 18 Apr 2020 18:08:37 -0700 (PDT) Received: from localhost.localdomain ([49.51.162.193]) by smtp.gmail.com with ESMTPSA id e11sm23498535pfl.65.2020.04.18.18.08.34 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Apr 2020 18:08:36 -0700 (PDT) From: Jun Zhao To: ffmpeg-devel@ffmpeg.org Date: Sun, 19 Apr 2020 09:07:47 +0800 Message-Id: <1587258489-17189-5-git-send-email-mypopydev@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1587258489-17189-1-git-send-email-mypopydev@gmail.com> References: <1587258489-17189-1-git-send-email-mypopydev@gmail.com> Subject: [FFmpeg-devel] [PATCH v4 4/7] lavf/mov: support dvcC/dvvC box for DOVI 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 Cc: vacingfang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: vacingfang support dvcC/dvcC box from spec Dolby Vision Streams Within the ISO Base MediaFile Format Version 2.1.2 (https://www.dolby.com/in/en/technologies/dolby-vision/dolby-vision\ -bitstreams-within-the-iso-base-media-file-format-v2.1.2.pdf) export the DOVI information to sidedata. Signed-off-by: vacingfang --- libavformat/mov.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index 8e8aba7..eaf0c22 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -46,6 +46,7 @@ #include "libavutil/spherical.h" #include "libavutil/stereo3d.h" #include "libavutil/timecode.h" +#include "libavutil/dovi_meta.h" #include "libavcodec/ac3tab.h" #include "libavcodec/flac.h" #include "libavcodec/mpegaudiodecheader.h" @@ -6786,6 +6787,55 @@ static int mov_read_dmlp(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_dvcc_dvvc(MOVContext *c, AVIOContext *pb, MOVAtom atom) +{ + AVStream *st; + uint32_t buf; + AVDOVIDecoderConfigurationRecord *dovi; + + if (c->fc->nb_streams < 1) + return 0; + st = c->fc->streams[c->fc->nb_streams-1]; + + if ((uint64_t)atom.size > (1<<30) || atom.size < 4) + return AVERROR_INVALIDDATA; + + dovi = (AVDOVIDecoderConfigurationRecord *)av_stream_new_side_data( + st, AV_PKT_DATA_DOVI_CONF, sizeof(*dovi)); + if (!dovi) + return AVERROR(ENOMEM); + + dovi->dv_version_major = avio_r8(pb); + dovi->dv_version_minor = avio_r8(pb); + + buf = avio_rb16(pb); + dovi->dv_profile = (buf >> 9) & 0x7f; // 7 bits + dovi->dv_level = (buf >> 3) & 0x3f; // 6 bits + dovi->rpu_present_flag = (buf >> 2) & 0x01; // 1 bit + dovi->el_present_flag = (buf >> 1) & 0x01; // 1 bit + dovi->bl_present_flag = buf & 0x01; // 1 bit + if (atom.size >= 24) { // 4 + 4 + 4 * 4 + buf = avio_r8(pb); + dovi->dv_bl_signal_compatibility_id = (buf >> 4) & 0x0f; // 4 bits + } else { + // 0 stands for None + // Dolby Vision V1.2.93 profiles and levels + dovi->dv_bl_signal_compatibility_id = 0; + } + + av_log(c, AV_LOG_TRACE, "DOVI in dvcC/dvvC box, version: %d.%d, profile: %d, level: %d, " + "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n", + dovi->dv_version_major, dovi->dv_version_minor, + dovi->dv_profile, dovi->dv_level, + dovi->rpu_present_flag, + dovi->el_present_flag, + dovi->bl_present_flag, + dovi->dv_bl_signal_compatibility_id + ); + + return 0; +} + static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('A','C','L','R'), mov_read_aclr }, { MKTAG('A','P','R','G'), mov_read_avid }, @@ -6881,6 +6931,8 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('v','p','c','C'), mov_read_vpcc }, { MKTAG('m','d','c','v'), mov_read_mdcv }, { MKTAG('c','l','l','i'), mov_read_clli }, +{ MKTAG('d','v','c','C'), mov_read_dvcc_dvvc }, +{ MKTAG('d','v','v','C'), mov_read_dvcc_dvvc }, { 0, NULL } };