From patchwork Mon Apr 13 11:57:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Zhao X-Patchwork-Id: 18909 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 2C13B44B1F1 for ; Mon, 13 Apr 2020 15:04:05 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1907268B6AB; Mon, 13 Apr 2020 15:04:05 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BD34768B66B for ; Mon, 13 Apr 2020 15:03:58 +0300 (EEST) Received: by mail-pl1-f170.google.com with SMTP id d24so3312535pll.8 for ; Mon, 13 Apr 2020 05:03:58 -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=S2Dw/ml7YsRj6pB6LUAYb7kbkP4cP1ErFc537mAdo3Lq+kKkLFE0oNk+1UsWuqb8cM aaTUm4KR2QCY0Q81MahdaQ1k6b3eBGfQDYQAExwXBDhNZgJPfSQTo2wcpNBSpTzTpw3y ICuYWo6AmbA2VZneCqnneTFZbf1wKOG7+Qduid7YM75k11gK3xJzZBoiZA1W+9/kth2b U7Wmdt7e6Zm65njjzVCp9BTLVrbrwc7CAgVEeWboCkHdbWZZkey1pS99T+70oXONjMd+ siyydCsD59UFD6a6o0LQSDiaq7bd4MUk+JlZbZrg9Dckn9sXWIzcoGUR1CB34aWMc0Sg nC3Q== 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=rJhVLm3CCuvQ8atn3Ctzv0PKhVHjpBOaxk4JYT+eHZGDO8vqK0lyRQnJ9vUgi7wpdG 1qfeqcTZ9Bsg36IfTrQKK9LFDC8VwBlHVnz+AEM5Sg/sHuyEcKgV6mQ5rJUJ2embKX+I bYQVwQtLL0kQ5ZvV5E9kn5p0BpqSXB6iSg470wl5qNKprCUSIGN70OeA+Muga77heihP vVcbyRanNUNxxLRh5lQO3zHv6P3y6oY61983Tp6bND6xxZqVKOQnr18VLGLVay2GfZu8 +POP29USMffhc4JlWEVJ4VSXwtSd1Ch4ZH5q7THwKIGz+S5scvbLKgwDAwhrrrTuWOHw q4Fg== X-Gm-Message-State: AGi0PuaSJqUQ12rM7oIeRQXz17NvkOPnsJssh7LsCHYeR/jW+vk/sy4F DmMzpPm9WTTxvBvQCeN0Bz79/5/sbFo= X-Google-Smtp-Source: APiQypJuVBBQ/sm2xlHhB2zr6NWTcfqK2dLI5PYxCkRkCaZpJnLN0pEl6CCMOoOFGaMsEcYZSkf/sg== X-Received: by 2002:aa7:9471:: with SMTP id t17mr17304759pfq.272.1586779126462; Mon, 13 Apr 2020 04:58:46 -0700 (PDT) Received: from localhost.localdomain ([49.51.162.193]) by smtp.gmail.com with ESMTPSA id gi2sm8882204pjb.30.2020.04.13.04.58.43 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Apr 2020 04:58:45 -0700 (PDT) From: Jun Zhao To: ffmpeg-devel@ffmpeg.org Date: Mon, 13 Apr 2020 19:57:33 +0800 Message-Id: <1586779102-31293-5-git-send-email-mypopydev@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1586779102-31293-1-git-send-email-mypopydev@gmail.com> References: <1586779102-31293-1-git-send-email-mypopydev@gmail.com> Subject: [FFmpeg-devel] [PATCH v3 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 } };