From patchwork Tue Dec 14 15:29:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32497 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp7121200iog; Tue, 14 Dec 2021 07:30:39 -0800 (PST) X-Google-Smtp-Source: ABdhPJwdtOjiRYb1ZiiNlG3B2FlBW63ZEYvFP8mYkLPjGiXhEbKBMopHc4wGZzb3QDjNGtBdYaVV X-Received: by 2002:a17:907:a0d4:: with SMTP id hw20mr6301884ejc.16.1639495839376; Tue, 14 Dec 2021 07:30:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639495839; cv=none; d=google.com; s=arc-20160816; b=OifFZ8cyUcUQTQNrXVphI5jhmVwUEEoP7igxZ3NBzpjMIUG031U0OwXCafp32xw3ii iNz0ATDs5ISUI/c/AV2AmXm/ann5c7B4VQjme04CTVKHEsU04mG4PAGIZ58cDFIKUsZ7 HKi8UapmdxWubLXrDdf/RaRlyAPn+Uhr1V7X9ccJtiAUQwC37IauDW1CSrqfH/GyB6Dx 3KV5ftYO1ZVZ+Kc/4NVirKiKs6idjFc8FTBlKo7yXKLfm/9eGgTHKWj18qv3e3XCjuaH qsVOG5aXYagrzc3nvn5ybxx7XKiaykZUTO1e/szj+/EQO+rgYebILiARoR4UPpbsFsjo k6GQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=0dnOduIjWN6Uxm/J2nfWkvi5C2ye6BtvgcqqLbou9B4=; b=CcqsOaE+LtveikOAT+GyDbSCLxyY19qQGJI+g8cmZ8xG0taDxGgD38wJj3e5rQavNM Tr0x4loF7jTuswG2ngCuJQ5zUlvJUFnKsXY6oNz7baKhQJ+fMgxiwwY/FwKiQGD97EId IlQx6u5dJsxLqO+ZhG59uCf59LQIhqxi0mJG6Jfmy+e2TLhQL3gIbcRGhhg6tikvf4Vj 0o1dWBznCLhFsZcWa9hqDjRsuoGXfiqzgGulkZJfOaKfXTb1X3Yy1qXREtZtptN01Zbm l2yyOPKHDCixfpYJyrJSGhx1umPM5WxSQWsSLcQLd8+/RWnaDfZngSCuKI1VZgd4PcUA vffA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=pmatcqjp; 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=QUARANTINE 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 sg18si304992ejc.241.2021.12.14.07.30.39; Tue, 14 Dec 2021 07:30:39 -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=20210112 header.b=pmatcqjp; 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=QUARANTINE 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 B5F6268AFD0; Tue, 14 Dec 2021 17:30:27 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0D15168AF9F for ; Tue, 14 Dec 2021 17:30:21 +0200 (EET) Received: by mail-ed1-f45.google.com with SMTP id o20so64727597eds.10 for ; Tue, 14 Dec 2021 07:30:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+RF1gT2v1RF80n2S5tjnMfoz97mllzHS3iRtK0mz7bs=; b=pmatcqjpJvQiZblSIAKP8QEoHvKFE+gsp7NHEwuKxpyENW3Ld6PrSZ2zNoWxpSF09Z R6b5qLIYAthxOftUbwH8UWHqgOaKizPP2JcLUcpFEE6BktDOlqFrWqLkcOcjBmnx4OAr 044pAnH4RTFy9KuewcjKrJANzb2FQF7iCAiwjVIP6JHj3xqybadNedvRp9lzPoYhfkLZ kYtibFHdqE3OXx6GnaszwLJ4W0nVxaKmiiOZDC7q6zSvX3D5SrDeWYXM5hsY7M6EX0Mp yqI5kPxru+MWBO9VPVFXzK6Pt8f9SZQCIIy1Jqv+u51Hxbcqc+/NHHQW/zxwYjPQffoP tmLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+RF1gT2v1RF80n2S5tjnMfoz97mllzHS3iRtK0mz7bs=; b=PTXYWJSiJzMJJWovounzbOkkDek5Qn8zVzM4Hz2y9UFeTvkwg1a+WvHxUhBuAgFylx fNCKaCs+E99VvcYQGm7tE7UVY4eqT5C1XmI5AXKlO0ovR5ezSgHFPoxKpueQhEOaxKBB Q4vqTfFpy90EMhoKKPS1x+qLShM9PWsOdsTBXtd5be5UZiQx4pdTdtGKnJVTKW9moXbQ BiUvjRu9R25h3V+viPaRcKUiaQ8NiGOkHsyBxFD21lmwM6yltn9fFnBnxbLdciBoGOJu cQ8UhxgblUtNmo1SGzwvA5Q9tBs9FfrUlUjKcGwtZwJqbUyUadkHnrYqdbqCb0UyH6gm V7Vw== X-Gm-Message-State: AOAM532MQ2B6JiWGVnED2mPMGEXqQ58Cyn2SIev23eVtOs73oGrzTocb e8yozS8Sf9PqEy33yw5bsIJmDZkg2fw= X-Received: by 2002:a17:907:d90:: with SMTP id go16mr6545033ejc.137.1639495820138; Tue, 14 Dec 2021 07:30:20 -0800 (PST) Received: from localhost.localdomain ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id p19sm22062ejn.97.2021.12.14.07.30.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Dec 2021 07:30:19 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Dec 2021 16:29:57 +0100 Message-Id: <20211214153001.2610297-2-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211214153001.2610297-1-tcChlisop0@gmail.com> References: <20211214153001.2610297-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v10 1/5] avformat/dovi_isom: Implement Dolby Vision configuration parsing/writing X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: quietvoid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 2w+cMWv/eMx7 Both parse/write implementations are based on mov/movenc. This only adds support for the "Dolby Vision configuration box". Other configuration boxes, such as "Dolby Vision enhancement layer configuration box" are not supported. The new functions will be used to implement parsing/writing the DOVI config for Matroska, as well as to refactor both mov/movenc to use dovi_isom functions. Signed-off-by: quietvoid --- libavformat/dovi_isom.c | 118 ++++++++++++++++++++++++++++++++++++++++ libavformat/dovi_isom.h | 35 ++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 libavformat/dovi_isom.c create mode 100644 libavformat/dovi_isom.h diff --git a/libavformat/dovi_isom.c b/libavformat/dovi_isom.c new file mode 100644 index 0000000000..262d7e37ba --- /dev/null +++ b/libavformat/dovi_isom.c @@ -0,0 +1,118 @@ +/* + * DOVI ISO Media common code + * + * Copyright (c) 2020 Vacing Fang + * Copyright (c) 2021 quietvoid + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/dovi_meta.h" + +#include "libavcodec/put_bits.h" + +#include "avformat.h" +#include "dovi_isom.h" + +int ff_isom_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, const uint8_t *buf_ptr, uint64_t size) +{ + uint32_t buf; + AVDOVIDecoderConfigurationRecord *dovi; + size_t dovi_size; + int ret; + + if (size > (1 << 30) || size < 4) + return AVERROR_INVALIDDATA; + + dovi = av_dovi_alloc(&dovi_size); + if (!dovi) + return AVERROR(ENOMEM); + + dovi->dv_version_major = *buf_ptr++; // 8 bits + dovi->dv_version_minor = *buf_ptr++; // 8 bits + + buf = *buf_ptr++ << 8; + buf |= *buf_ptr++; + + 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 + + // Has enough remaining data + if (size >= 5) { + dovi->dv_bl_signal_compatibility_id = ((*buf_ptr++) >> 4) & 0x0f; // 4 bits + } else { + // 0 stands for None + // Dolby Vision V1.2.93 profiles and levels + dovi->dv_bl_signal_compatibility_id = 0; + } + + ret = av_stream_add_side_data(st, AV_PKT_DATA_DOVI_CONF, + (uint8_t *)dovi, dovi_size); + if (ret < 0) { + av_free(dovi); + return ret; + } + + av_log(s, AV_LOG_TRACE, "DOVI in dvcC/dvvC/dvwC 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; +} + +void ff_isom_put_dvcc_dvvc(AVFormatContext *s, uint8_t out[ISOM_DVCC_DVVC_SIZE], + AVDOVIDecoderConfigurationRecord *dovi) +{ + PutBitContext pb; + + init_put_bits(&pb, out, ISOM_DVCC_DVVC_SIZE); + + put_bits(&pb, 8, dovi->dv_version_major); + put_bits(&pb, 8, dovi->dv_version_minor); + put_bits(&pb, 7, dovi->dv_profile); + put_bits(&pb, 6, dovi->dv_level); + put_bits(&pb, 1, dovi->rpu_present_flag); + put_bits(&pb, 1, dovi->el_present_flag); + put_bits(&pb, 1, dovi->bl_present_flag); + put_bits(&pb, 4, dovi->dv_bl_signal_compatibility_id); + + put_bits(&pb, 28, 0); /* reserved */ + put_bits32(&pb, 0); /* reserved */ + put_bits32(&pb, 0); /* reserved */ + put_bits32(&pb, 0); /* reserved */ + put_bits32(&pb, 0); /* reserved */ + + flush_put_bits(&pb); + + av_log(s, AV_LOG_DEBUG, "DOVI in %s box, version: %d.%d, profile: %d, level: %d, " + "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n", + dovi->dv_profile > 10 ? "dvwC" : (dovi->dv_profile > 7 ? "dvvC" : "dvcC"), + 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); +} diff --git a/libavformat/dovi_isom.h b/libavformat/dovi_isom.h new file mode 100644 index 0000000000..1526164319 --- /dev/null +++ b/libavformat/dovi_isom.h @@ -0,0 +1,35 @@ +/* + * DOVI ISO Media common code + * Copyright (c) 2021 quietvoid + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVFORMAT_DOVI_ISOM_H +#define AVFORMAT_DOVI_ISOM_H + +#include "libavutil/dovi_meta.h" + +#include "avformat.h" + +#define ISOM_DVCC_DVVC_SIZE 24 + +int ff_isom_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, const uint8_t *buf_ptr, uint64_t size); +void ff_isom_put_dvcc_dvvc(AVFormatContext *s, uint8_t out[ISOM_DVCC_DVVC_SIZE], + AVDOVIDecoderConfigurationRecord *dovi); + +#endif /* AVFORMAT_DOVI_ISOM_H */ From patchwork Tue Dec 14 15:29:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32498 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp7121424iog; Tue, 14 Dec 2021 07:30:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJwi/+nLdlxVY3UQFnjt3CUm/ih55s6qswooPn0DrReoGIrawyuTR8a4wt8S/Xt/7SL9K/GN X-Received: by 2002:a17:907:7253:: with SMTP id ds19mr6401558ejc.476.1639495848878; Tue, 14 Dec 2021 07:30:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639495848; cv=none; d=google.com; s=arc-20160816; b=WD+a+mhhqs5lxXdq9U2P+8joTy8taFyKVl1v3rwxPyYkjWdgQnr9EoOZEAMlvxWOMN 0ij8lPpM7YqL5w/n02WNx3449Km7GYZ2AlCa11WZGmraFfLSYjOqIhGg4awXY9ZgAWWm y4s/0DFA2aTWfXXElGHF9u6mDTx/N1dWcWbrHAT3/nXoLfOnLYOvzN/XHMy4vSSiZlER 4dO0ODUzvlOOFWQ57iWuIDhZ5Q840g892OpbQXfKjEPiZJoHi1ad07na1XKMCKlNjWLW Ql7Xsy+DJQgkJPEd4afDNZYBYWEJz28sLnj5SuzuR0WzGjRpUcZxmcbrVgFQYHABTLLM ps9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=PAKoTWY67lowz92tw9ZSjnA7kd2q7WBIq19lBpmpOpo=; b=n47naTYZyxwOIAtgTTuuX5vjiCZfONhEXuf6EezrZ5K+h8IbCzkHHlNXwvKnre/m3B YyQHZICnRV9ppCGNtEpr8iK+PTIMUaNt43YQCaF1pTRgLG1zliVbYfyhzYfdYgRoWc11 C14x3dv7FmRDc/zyWzlItbnm1aIIvoYumsJlSZyRZYXa0mtiRkz6GdkjA6AV7hQdVHQl wYAqmE6zrDCbzv7Ccdv6L6t724uBBWO+mYqQQ21kVNkFfNhKs2gAkfkEInXogI175cwA W5ffr257ErL6bxA07WxHjNrpvdd7rtxs0Y189SIQrsPDMN59W3x3sY6mZqKTeeQx7C0C BpVA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=cNX386yf; 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=QUARANTINE 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 mp42si193511ejc.216.2021.12.14.07.30.48; Tue, 14 Dec 2021 07:30:48 -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=20210112 header.b=cNX386yf; 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=QUARANTINE 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 C226E68AFDF; Tue, 14 Dec 2021 17:30:29 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 27A3168AFCB for ; Tue, 14 Dec 2021 17:30:22 +0200 (EET) Received: by mail-ed1-f47.google.com with SMTP id o20so64727756eds.10 for ; Tue, 14 Dec 2021 07:30:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=e1oz4f/x3zJ44mKnfrEpn5E8NtrOUVsGq1JvE6FoMOY=; b=cNX386yf/2khAsrE12g34tgTbyMHeL164f9nhTbnr2dpotTXz0li3oUAqk4D/FEO8m NGe9Ntv6p/BCCPe4R288t1IBXFW5bEK/QyFtABiq2OTYiVk2iPQspYWJ4cYzcAvWcMfu cJPHcZZeyW5nEm0iltMtOKk+nrSgANbAIZDCqEupzSUaE8cXbDxp2D8Bxqh5IDhygGgd RwOsU847zS5hSNyFVPihKNVm+zorZjn3YEx0Xi0LVo5DWR+a8dY+1ejWr4IFhPMiPZmQ c5WMeMymkDF4vFsjCjaABO6t6dFvcH+bzlhbHncG9/+f5VgYKfuFP05AeO6BrQJq0is8 7iBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=e1oz4f/x3zJ44mKnfrEpn5E8NtrOUVsGq1JvE6FoMOY=; b=waHxc1rhwVBMQ7hhD9AR+yA96YwriNZJEO6w7ymIvqopUl2ODbQPLWbm4OgM7hs+rr Ec7QqrPptOPklFRCiI1u2s5TNMFWWU5M1tMB7p0e6lcuQt5KiituSV/4uEIIAkgF59mF hxiK1kbCeKJ21QrxMCKM2HMNJcMaUUhy9jRgniAGr1pq02VPzB7shhcyE7EkJfpESqZU 1TFJhsKVhVBtE/VP6Sc84dZONPBo8C9OYbzpY0Emy7gsTP1f0pimFqAjQpk3n0s6zcXd qvL2kklL8n/u9rU2Xl2fYjbPkOaTb0HoGTKPdYcZXhxPLHOC4QNpCDpsoZslGuhFIEz0 aqqA== X-Gm-Message-State: AOAM5309ZWHJ3HSet/HVeYxUPEdykFxM6ZFgtgD9Vao1/XATxBz3S32l hDBGKkpTCxfyfu+RrBA2KeWHAYHJLn4JIQ== X-Received: by 2002:a17:906:794e:: with SMTP id l14mr6505960ejo.179.1639495820965; Tue, 14 Dec 2021 07:30:20 -0800 (PST) Received: from localhost.localdomain ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id p19sm22062ejn.97.2021.12.14.07.30.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Dec 2021 07:30:20 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Dec 2021 16:29:58 +0100 Message-Id: <20211214153001.2610297-3-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211214153001.2610297-1-tcChlisop0@gmail.com> References: <20211214153001.2610297-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v10 2/5] avformat/matroska{dec, enc}: Parse BlockAdditionMapping elements X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: quietvoid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: H74HZFFTin4d Adds handling of dvcC/dvvC block addition mappings. The parsing creates AVDOVIDecoderConfigurationRecord side data. The configuration block is written when muxing into Matroska, if DOVI side data is present for the track. Most of the Matroska element parsing is based on Plex's FFmpeg source code. Signed-off-by: quietvoid --- libavformat/Makefile | 4 +-- libavformat/matroska.h | 9 ++++++ libavformat/matroskadec.c | 58 +++++++++++++++++++++++++++++++++++++-- libavformat/matroskaenc.c | 37 +++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 4 deletions(-) diff --git a/libavformat/Makefile b/libavformat/Makefile index 2b5caf9d33..bd12562a24 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -314,11 +314,11 @@ OBJS-$(CONFIG_M4V_MUXER) += rawenc.o OBJS-$(CONFIG_MATROSKA_DEMUXER) += matroskadec.o matroska.o \ flac_picture.o isom_tags.o rmsipr.o \ oggparsevorbis.o vorbiscomment.o \ - qtpalette.o replaygain.o + qtpalette.o replaygain.o dovi_isom.o OBJS-$(CONFIG_MATROSKA_MUXER) += matroskaenc.o matroska.o \ av1.o avc.o hevc.o isom_tags.o \ flacenc_header.o avlanguage.o \ - vorbiscomment.o wv.o + vorbiscomment.o wv.o dovi_isom.o OBJS-$(CONFIG_MCA_DEMUXER) += mca.o OBJS-$(CONFIG_MCC_DEMUXER) += mccdec.o subtitles.o OBJS-$(CONFIG_MD5_MUXER) += hashenc.o diff --git a/libavformat/matroska.h b/libavformat/matroska.h index 2d04a6838b..16491aae22 100644 --- a/libavformat/matroska.h +++ b/libavformat/matroska.h @@ -111,6 +111,7 @@ #define MATROSKA_ID_TRACKCONTENTENCODING 0x6240 #define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F #define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE +#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4 /* IDs in the trackvideo master */ #define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3 @@ -189,6 +190,12 @@ #define MATROSKA_ID_ENCODINGSIGKEYID 0x47E4 #define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3 +/* IDs in the block addition mapping master */ +#define MATROSKA_ID_BLKADDIDVALUE 0x41F0 +#define MATROSKA_ID_BLKADDIDNAME 0x41A4 +#define MATROSKA_ID_BLKADDIDTYPE 0x41E7 +#define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED + /* ID in the cues master */ #define MATROSKA_ID_POINTENTRY 0xBB @@ -385,4 +392,6 @@ extern const char * const ff_matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_P int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode); +#define DVCC_DVVC_BLOCK_TYPE_NAME "Dolby Vision configuration" + #endif /* AVFORMAT_MATROSKA_H */ diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index a4bbbe954e..6ce553205d 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -53,6 +53,7 @@ #include "avformat.h" #include "avio_internal.h" +#include "dovi_isom.h" #include "internal.h" #include "isom.h" #include "matroska.h" @@ -239,6 +240,13 @@ typedef struct MatroskaTrackOperation { EbmlList combine_planes; } MatroskaTrackOperation; +typedef struct MatroskaBlockAdditionMapping { + uint64_t value; + char *name; + uint64_t type; + EbmlBin extradata; +} MatroskaBlockAdditionMapping; + typedef struct MatroskaTrack { uint64_t num; uint64_t uid; @@ -269,6 +277,7 @@ typedef struct MatroskaTrack { int ms_compat; int needs_decoding; uint64_t max_block_additional_id; + EbmlList block_addition_mappings; uint32_t palette[AVPALETTE_COUNT]; int has_palette; @@ -419,8 +428,8 @@ typedef struct MatroskaDemuxContext { // incomplete type (6.7.2 in C90, 6.9.2 in C99). // Removing the sizes breaks MSVC. static EbmlSyntax ebml_syntax[3], matroska_segment[9], matroska_track_video_color[15], matroska_track_video[19], - matroska_track[32], matroska_track_encoding[6], matroska_track_encodings[2], - matroska_track_combine_planes[2], matroska_track_operation[2], matroska_tracks[2], + matroska_track[33], matroska_track_encoding[6], matroska_track_encodings[2], + matroska_track_combine_planes[2], matroska_track_operation[2], matroska_block_addition_mapping[5], matroska_tracks[2], matroska_attachments[2], matroska_chapter_entry[9], matroska_chapter[6], matroska_chapters[2], matroska_index_entry[3], matroska_index[2], matroska_tag[3], matroska_tags[2], matroska_seekhead[2], matroska_blockadditions[2], matroska_blockgroup[8], matroska_cluster_parsing[8]; @@ -570,6 +579,14 @@ static EbmlSyntax matroska_track_operation[] = { CHILD_OF(matroska_track) }; +static EbmlSyntax matroska_block_addition_mapping[] = { + { MATROSKA_ID_BLKADDIDVALUE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, value) }, + { MATROSKA_ID_BLKADDIDNAME, EBML_STR, 0, 0, offsetof(MatroskaBlockAdditionMapping, name) }, + { MATROSKA_ID_BLKADDIDTYPE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, type) }, + { MATROSKA_ID_BLKADDIDEXTRADATA, EBML_BIN, 0, 0, offsetof(MatroskaBlockAdditionMapping, extradata) }, + CHILD_OF(matroska_track) +}; + static EbmlSyntax matroska_track[] = { { MATROSKA_ID_TRACKNUMBER, EBML_UINT, 0, 0, offsetof(MatroskaTrack, num) }, { MATROSKA_ID_TRACKNAME, EBML_UTF8, 0, 0, offsetof(MatroskaTrack, name) }, @@ -593,6 +610,7 @@ static EbmlSyntax matroska_track[] = { { MATROSKA_ID_TRACKOPERATION, EBML_NEST, 0, 0, offsetof(MatroskaTrack, operation), { .n = matroska_track_operation } }, { MATROSKA_ID_TRACKCONTENTENCODINGS, EBML_NEST, 0, 0, 0, { .n = matroska_track_encodings } }, { MATROSKA_ID_TRACKMAXBLKADDID, EBML_UINT, 0, 0, offsetof(MatroskaTrack, max_block_additional_id), { .u = 0 } }, + { MATROSKA_ID_TRACKBLKADDMAPPING, EBML_NEST, 0, sizeof(MatroskaBlockAdditionMapping), offsetof(MatroskaTrack, block_addition_mappings), { .n = matroska_block_addition_mapping } }, { MATROSKA_ID_SEEKPREROLL, EBML_UINT, 0, 0, offsetof(MatroskaTrack, seek_preroll), { .u = 0 } }, { MATROSKA_ID_TRACKFLAGENABLED, EBML_NONE }, { MATROSKA_ID_TRACKFLAGLACING, EBML_NONE }, @@ -2311,6 +2329,38 @@ static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track, return 0; } +static int mkv_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, const MatroskaTrack *track, + EbmlBin *bin) +{ + return ff_isom_parse_dvcc_dvvc(s, st, bin->data, bin->size); +} + +static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, const MatroskaTrack *track) +{ + const EbmlList *mappings_list = &track->block_addition_mappings; + MatroskaBlockAdditionMapping *mappings = mappings_list->elem; + int ret; + + for (int i = 0; i < mappings_list->nb_elem; i++) { + MatroskaBlockAdditionMapping *mapping = &mappings[i]; + + switch (mapping->type) { + case MKBETAG('d','v','c','C'): + case MKBETAG('d','v','v','C'): + if ((ret = mkv_parse_dvcc_dvvc(s, st, track, &mapping->extradata)) < 0) + return ret; + + break; + default: + av_log(s, AV_LOG_DEBUG, + "Unknown block additional mapping type 0x%"PRIx64", value %"PRIu64", name \"%s\"\n", + mapping->type, mapping->value, mapping->name ? mapping->name : ""); + } + } + + return 0; +} + static int get_qt_codec(MatroskaTrack *track, uint32_t *fourcc, enum AVCodecID *codec_id) { const AVCodecTag *codec_tags; @@ -2898,6 +2948,10 @@ static int matroska_parse_tracks(AVFormatContext *s) if (track->flag_textdescriptions) st->disposition |= AV_DISPOSITION_DESCRIPTIONS; } + + ret = mkv_parse_block_addition_mappings(s, st, track); + if (ret < 0) + return ret; } return 0; diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 8c4cf4024a..31b7d7e171 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -27,6 +27,7 @@ #include "avformat.h" #include "avio_internal.h" #include "avlanguage.h" +#include "dovi_isom.h" #include "flacenc.h" #include "internal.h" #include "isom.h" @@ -1120,6 +1121,37 @@ static int mkv_write_stereo_mode(AVFormatContext *s, AVIOContext *pb, return 0; } +static void mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) +{ + AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *) + av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL); + + if (dovi) { + ebml_master mapping; + uint8_t buf[ISOM_DVCC_DVVC_SIZE]; + uint32_t type; + + uint64_t expected_size = (2 + 1 + (sizeof(DVCC_DVVC_BLOCK_TYPE_NAME) - 1)) + + (2 + 1 + 4) + (2 + 1 + ISOM_DVCC_DVVC_SIZE); + + if (dovi->dv_profile > 7) { + type = MKBETAG('d', 'v', 'v', 'C'); + } else { + type = MKBETAG('d', 'v', 'c', 'C'); + } + + ff_isom_put_dvcc_dvvc(s, buf, dovi); + + mapping = start_ebml_master(pb, MATROSKA_ID_TRACKBLKADDMAPPING, expected_size); + + put_ebml_string(pb, MATROSKA_ID_BLKADDIDNAME, DVCC_DVVC_BLOCK_TYPE_NAME); + put_ebml_uint(pb, MATROSKA_ID_BLKADDIDTYPE, type); + put_ebml_binary(pb, MATROSKA_ID_BLKADDIDEXTRADATA, buf, sizeof(buf)); + + end_ebml_master(pb, mapping); + } +} + static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, AVStream *st, mkv_track *track, AVIOContext *pb, int is_default) @@ -1319,6 +1351,11 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, mkv_write_video_projection(s, pb, st); end_ebml_master(pb, subinfo); + + if (mkv->mode != MODE_WEBM) { + mkv_write_dovi(s, pb, st); + } + break; case AVMEDIA_TYPE_AUDIO: From patchwork Tue Dec 14 15:29:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32500 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp7121891iog; Tue, 14 Dec 2021 07:31:08 -0800 (PST) X-Google-Smtp-Source: ABdhPJworGFqsHt0Kb3AE7JiPHhHZjJDqMF/O2yKSPl2l0XG8MjlrzHf0t8KOKkwUPcOtYj4DcwJ X-Received: by 2002:a17:906:7315:: with SMTP id di21mr6702632ejc.193.1639495868501; Tue, 14 Dec 2021 07:31:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639495868; cv=none; d=google.com; s=arc-20160816; b=LbPM+VvHD2WBX6KWB0bbT3frIoqX0E0WatYlEAY6E1duODUqo8hPUhvjTGIhcDn1Xc cY3Ia1WshGYYms25C+7dxajiBw0Wn9TIpHLoUbFNukpbfLyOpJShLvwhFT89ZIRtLrz2 ucwPSJZkJJWEIiSlf0uoCB6nbIsFKuM8INICyZRz5nQ6EXUGyPj1kI84e/C5Cq/CzEAn uWsPF8JtBSRQVXxESO5a3eWPQcuFzx38UkOI9tDqTj0qGhLQUPESPMY1ae/8IsIgmvVC AnQfJDVb7GszR5e4SBePkVFC3n4Tv1RJdeWmAaPnTGbyulEKL6kFTelaeK2zzNwzV55Y UgkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=X4OvMWm88zKTQyCNVkOl6jradTZlIDWXUA9BvOtsusc=; b=TLRrXTSG5BiMHIS90rseTgbcZCuEcHM/6KDfkNSwKc80tcu7H0B9K+svfq73/dCh/t ydzjLcKMAaClSjL+mn2dnYHo9uizXZ8TUDVfLHg4ZOLbPieLNWUMembSf8PyPLNi5IFn kIZVVcx6Mipb2uyfKSHtFRwnNwKHwu1kcIsOCFaEp0hirpubQTPiLNbMZuZoz7P1cB8m wAj+WEAqNzAO6LL4GVW3QB3t/KyBRr9xJPDsfl/o6vapGkUYuCWrhNuTdyp0TpO8pBzk DmwJQeoDCOb5eVh21cf5rK0dX0TMbMr8PC/ifag0u+znIUp+dAnjw5s6U5qNWgauIobb GoCg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=YoCr2ALG; 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=QUARANTINE 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 nc26si261388ejc.455.2021.12.14.07.31.08; Tue, 14 Dec 2021 07:31:08 -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=20210112 header.b=YoCr2ALG; 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=QUARANTINE 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 095FF68AFB4; Tue, 14 Dec 2021 17:30:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3141968AFBB for ; Tue, 14 Dec 2021 17:30:23 +0200 (EET) Received: by mail-ed1-f41.google.com with SMTP id r25so63761930edq.7 for ; Tue, 14 Dec 2021 07:30:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=np1y8skOMvKPNokozSiiixb7I+dmsId1DVf4NFWmUVg=; b=YoCr2ALGd63d++/lrDbpPH/5UH8EBOmztav7jcXtATgfv1dxoGgYHubnOv6IfONfHg 1RVZDko/WOVxBYayVwtOLdp9h4xDgRu6ZUQe7QTkTZSwm4O4qEj2R44uPWZuj22fB5DB syOea/xu0tvQn9XHMZCb5M/l1pDCuRHRs7aK2Da6XUWVAHU2ABy3h6UxtBmf2Ca7ldev 3STJl0LcslvWtg0wUzXYAnYWpU71UbfHdHkupE7f24e2W35NF+Tm58cV3ijSTdR3QrX3 w7DFqqTGfGvhHIfS79oh91F/Lxhbo7gs4RLvrueyQ/vIansIQFN3b1HWWSrrkD6DWZDO qyuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=np1y8skOMvKPNokozSiiixb7I+dmsId1DVf4NFWmUVg=; b=o8X6uK2OyZ+w5oPEeTVsrc9hRzWr3RFecSLa4LSUy/PMxaQz2idjWc5a4jRUxLqTJn yHxkRtgzz4JTJpiUrk43jDu5di8R9QTwz5WJFTAXQGJ5a0DlnHSPNhtVHUDUjrWbLbfc 5hE8go94hTAwqarisSWuTiUB95Yi1lIGFe6ewevR/sGAg/S3ii7g3cNKdtOBKogvidUt lCPiUFYpSlZ7Ouv1inzTneIiqh7c7cmfYnX+sBupglZ7ihs17OEfQKxoKkTDv5vcLipk vrP2hI0ZzCCZhTqGdiNEGT0P8P22HNiRcP9xcP8aWFAre0zl4x9C5WpAkJI9YRYMvb5p AHQA== X-Gm-Message-State: AOAM5310fksYCD/Kcf8QEUE2tzti3W8jozuGBrLWOGt4848zl1UnDS76 wryfbjZ387dmKTjHw5F4V7ifg3RGyvlCDQ== X-Received: by 2002:a17:906:ece9:: with SMTP id qt9mr6324189ejb.362.1639495821563; Tue, 14 Dec 2021 07:30:21 -0800 (PST) Received: from localhost.localdomain ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id p19sm22062ejn.97.2021.12.14.07.30.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Dec 2021 07:30:21 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Dec 2021 16:29:59 +0100 Message-Id: <20211214153001.2610297-4-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211214153001.2610297-1-tcChlisop0@gmail.com> References: <20211214153001.2610297-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v10 3/5] avformat/mov: Refactor mov_read_dvcc_dvvc to use ff_isom_parse_dvcc_dvvc X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: quietvoid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: pmDZe4bNCc8K To avoid duplicating code. The implementation in dovi_isom is identical. Signed-off-by: quietvoid --- libavformat/mov.c | 52 ++++++++--------------------------------------- 1 file changed, 9 insertions(+), 43 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 9ebfa0bcc7..e3c80c399c 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -55,6 +55,7 @@ #include "avformat.h" #include "internal.h" #include "avio_internal.h" +#include "dovi_isom.h" #include "riff.h" #include "isom.h" #include "libavcodec/get_bits.h" @@ -7056,58 +7057,23 @@ static int mov_read_dmlp(MOVContext *c, AVIOContext *pb, MOVAtom atom) static int mov_read_dvcc_dvvc(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; - uint32_t buf; - AVDOVIDecoderConfigurationRecord *dovi; - size_t dovi_size; + uint8_t buf[ISOM_DVCC_DVVC_SIZE]; int ret; + int64_t read_size = atom.size; 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 = av_dovi_alloc(&dovi_size); - 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; + // At most 24 bytes + if (read_size > ISOM_DVCC_DVVC_SIZE) { + read_size = ISOM_DVCC_DVVC_SIZE; } - ret = av_stream_add_side_data(st, AV_PKT_DATA_DOVI_CONF, - (uint8_t *)dovi, dovi_size); - if (ret < 0) { - av_free(dovi); - return ret; - } + if ((ret = avio_read(pb, buf, read_size)) != read_size) + return ret < 0 ? ret : AVERROR(EIO); - av_log(c, AV_LOG_TRACE, "DOVI in dvcC/dvvC/dvwC 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; + return ff_isom_parse_dvcc_dvvc(c->fc, st, buf, read_size); } static int mov_read_kind(MOVContext *c, AVIOContext *pb, MOVAtom atom) From patchwork Tue Dec 14 15:30:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32499 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp7121660iog; Tue, 14 Dec 2021 07:30:58 -0800 (PST) X-Google-Smtp-Source: ABdhPJyNpwXPyR6GIVUZ/qJMLrKbQCD/KLiBkH0iOySvgQZ84XKJ4GnlMjnheV/b0nAoFFh5MmzV X-Received: by 2002:a17:906:7688:: with SMTP id o8mr6634507ejm.291.1639495858784; Tue, 14 Dec 2021 07:30:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639495858; cv=none; d=google.com; s=arc-20160816; b=YKW+uFM6EqjqsU6iF7ldGDK0Rk2AWpT191qW8teZxazF9K0t6M2wZpHPV3aNdyrahn xfV4FqGMGh6MLmkeZ+Y2SNQiFZY8S4vbmufRzq11b9j+JezTh/bvMy7xERiaMol5qGL+ oZinxGSKizFVnYvhnkW5845rBzTz5v4U8KX7Z7k/xeis3aW6paLQhxSbDfqdPbFGKQme iZHkIj2DrYHWrxHqVA+0NQudF88FObK1Fne5lbSIH2rx19JnK+R3IIFD/kMoFqDmhqJQ pwNvLQFUah75b/rrVaBznalL/Cr1q7CQZa2afiUTuGCEVvIk+9y8jtaY44sHKEVCkuwo twsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=RBeakLvmP/jA4/L0l94u19OMipzocuVWNwn0/XY6/t0=; b=jNIqAbk3vrGwW2347JBTeKIfVWcJpy2h7aRq/Yv2woAY1vLMeJVEkNXyxok2vV57pC J4r34PiywX4XhapE83vMaISalu0cJNEi21xW3cLbfCjgm117q4CeeoCFTFrzDOpfcNsV F2zD2LISuJFmPXtmhP1Z1Wdhj/M2mDzfp9UDhJFXbkUbTGFDDMKpQvw0UoQLbLYZu/Rq idv01BOjIE8irs4xVjvvXJ+66HqZcAVrty1BUBR498eojHTDyCL4RoW2fX6QH/BFAG+h 57QnJKRgnF1mQq7SCjqM7zmLCdMJ9ysKK3bUIKOZoXhV/VHXjdGXf7GLOLWU2Ev3FNXx zYBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=D1zA36tP; 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=QUARANTINE 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 js1si253091ejc.427.2021.12.14.07.30.57; Tue, 14 Dec 2021 07:30:58 -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=20210112 header.b=D1zA36tP; 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=QUARANTINE 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 E2FE468AFCC; Tue, 14 Dec 2021 17:30:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F024568AFD1 for ; Tue, 14 Dec 2021 17:30:22 +0200 (EET) Received: by mail-ed1-f43.google.com with SMTP id x15so65280899edv.1 for ; Tue, 14 Dec 2021 07:30:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=t18oN08m/ZUIztIXRhz+vMmx7LZSaDSOY8dAKJ1AW3Q=; b=D1zA36tPnTg8zW+x4AM2oMVL0QJng30tUv2PHJ5bdXrztf5IIIJrwzze4iBKodO1iX jdmF8/icYeG5UmNdReeAO0nTVirTEEqOEaKEj29sww6H/wnmjKQzPMSbLxubozABmuyM zRGiTdss3oznKM+PRmYSxmW6GNHGdtTgByAPFrma05I6Zz4bJSBk2sm8DSN9r/BMOwK+ OMZaLbRc1Doy2xOJFyETyIJFKNhHgsWQQMi1XxakioSCTG2piAJwkQGOvspjPCQ9+kfX vI9bLddPxV+muFhjpuXhwTZC2A+vIPvEnxkDX/3MW9dxuuQJZW87APH8EuCXm575/MbK XE3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=t18oN08m/ZUIztIXRhz+vMmx7LZSaDSOY8dAKJ1AW3Q=; b=RZrUy+Nu2G0xKJoRIOVQ9WH/KyFf91vApbR4/AcIHMh7c1byZ11ey55D/QsygixmD+ 8ySXNwT+nUy6OtSiQ6jXC+kK0CfldkxRNQUo21JfxM+qFAora64LJPpQqa9KxmTzZzLw HT3gO3xZdwDfKiUx4KUIT2bsmLy5qbUFLXQO9Fmw9h5oTtk5z8L3b/Mvn7KTs/6A4Cou tJSZQoL6sR4jUATCp+Y/ibrH4HWEmtR2EZNJEN0EVvDBz5xvtNJj656SLIc3ii1S40Z4 dvUIyLARRvLC4a2+fyBZG8QuLRq2uNVOlm4wEPowo5ObZmHRngkwg7vWun7fQ/Kmr0CP zDjg== X-Gm-Message-State: AOAM532bRr5Ov7J6Ua9K4HmzjtqUluJ6UblGviV8eE1s7jHPdC16SnQ2 sGl7mSkydpqRYpthqFSua4F1kWTukcHCcA== X-Received: by 2002:a17:906:4dd0:: with SMTP id f16mr6360805ejw.454.1639495822240; Tue, 14 Dec 2021 07:30:22 -0800 (PST) Received: from localhost.localdomain ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id p19sm22062ejn.97.2021.12.14.07.30.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Dec 2021 07:30:21 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Dec 2021 16:30:00 +0100 Message-Id: <20211214153001.2610297-5-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211214153001.2610297-1-tcChlisop0@gmail.com> References: <20211214153001.2610297-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v10 4/5] avformat/movenc: Refactor mov_write_dvcc_dvvc_tag to use ff_isom_put_dvcc_dvvc X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: quietvoid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 3A8VkuG101oU Improves code legibility by not using bit shifts. Also avoids duplicating the dvcC/dvvC ISOM box writing code. Signed-off-by: quietvoid --- libavformat/movenc.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 0f912dd012..f1fe43a79f 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -27,6 +27,7 @@ #include "movenc.h" #include "avformat.h" #include "avio_internal.h" +#include "dovi_isom.h" #include "riff.h" #include "avio.h" #include "isom.h" @@ -1911,6 +1912,8 @@ static int mov_write_sv3d_tag(AVFormatContext *s, AVIOContext *pb, AVSphericalMa static int mov_write_dvcc_dvvc_tag(AVFormatContext *s, AVIOContext *pb, AVDOVIDecoderConfigurationRecord *dovi) { + uint8_t buf[ISOM_DVCC_DVVC_SIZE]; + avio_wb32(pb, 32); /* size = 8 + 24 */ if (dovi->dv_profile > 10) ffio_wfourcc(pb, "dvwC"); @@ -1918,23 +1921,10 @@ static int mov_write_dvcc_dvvc_tag(AVFormatContext *s, AVIOContext *pb, AVDOVIDe ffio_wfourcc(pb, "dvvC"); else ffio_wfourcc(pb, "dvcC"); - avio_w8(pb, dovi->dv_version_major); - avio_w8(pb, dovi->dv_version_minor); - avio_wb16(pb, (dovi->dv_profile << 9) | (dovi->dv_level << 3) | - (dovi->rpu_present_flag << 2) | (dovi->el_present_flag << 1) | - dovi->bl_present_flag); - avio_wb32(pb, (dovi->dv_bl_signal_compatibility_id << 28) | 0); - - ffio_fill(pb, 0, 4 * 4); /* reserved */ - av_log(s, AV_LOG_DEBUG, "DOVI in %s box, version: %d.%d, profile: %d, level: %d, " - "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n", - dovi->dv_profile > 10 ? "dvwC" : (dovi->dv_profile > 7 ? "dvvC" : "dvcC"), - 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); + + ff_isom_put_dvcc_dvvc(s, buf, dovi); + avio_write(pb, buf, sizeof(buf)); + return 32; /* 8 + 24 */ } From patchwork Tue Dec 14 15:30:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32501 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp7122149iog; Tue, 14 Dec 2021 07:31:20 -0800 (PST) X-Google-Smtp-Source: ABdhPJw766gjaVIiojcjoW0ErK9ICfKHSYtPdAtIFK4Hq/C20+8AsRlKGcFdyzdEDc8anW+r8911 X-Received: by 2002:a17:907:7255:: with SMTP id ds21mr6362803ejc.42.1639495879866; Tue, 14 Dec 2021 07:31:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639495879; cv=none; d=google.com; s=arc-20160816; b=N3fkOZKsAwxZndAzAOfipiNZnuimiNyN7fpUILy8frPzzHOfS0MgmKJ0pM9807wBaI YumOvPPx/8VtFpMsXFy0tRDAZJFPU05E8pGzBgXaO9OXoiQIH/tq9a5YuiuUbmxzTH2/ 3qyDQBAuFsJ+CZzjgea1bJKw2gpYqsAbcqAJqAnv4epjFXGt0gIn60oSIvOyyh4QgHpN rJY1h8UU8UuCa0pydlkmcTN0ZDAztIeMZoDoUV1l0tDfEdJdV1Hsy6RM3b3A6N50dz7s Bxt0euYE4yGg5KF/wrdSHQUU/JqrigVbeg3Av5J2oNvClqsrvTbDEjqJ/ODieuU0LqJI POsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=Xmb1t2yz7xE2tKOBgnkVCRLtZ6JRScG8utezIqAxLoI=; b=nYY2EgtLdirgVya+/Us+khPcT978SmNGb0zYShyTs3rHSFsTzVUqDwB4Q3hM5H8dRE Iz0AftoIWdvENc4/ef7PxH7UHgYjX9c2++vqzIK04vA8rOIU5ba6OnYywju/ayW1tlvF vJrW1lHzQs0Uep6eKAM2tpgooQ2ID5DGO9HnWQAJWZ+IT8ApNbx3sd7pO4Q087vT+8WN TUDMI1ZF+g4fWtu9S2JxitPU6Ldw3oWmUt0cUwA607ektdHNiW932C2A9TGaatXSM6Zh scmdyEuoPjaiVKT3TLb+YsMCwXw0c52daKm5OKLpMV0El1KjVvOoEhOjzNJyiCJseSG3 Hycw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=ewFHlYtr; 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=QUARANTINE 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 n8si230110edy.88.2021.12.14.07.31.19; Tue, 14 Dec 2021 07:31:19 -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=20210112 header.b=ewFHlYtr; 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=QUARANTINE 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 328DA68B000; Tue, 14 Dec 2021 17:30:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C820B68AFD4 for ; Tue, 14 Dec 2021 17:30:23 +0200 (EET) Received: by mail-ed1-f54.google.com with SMTP id b7so5095639edd.6 for ; Tue, 14 Dec 2021 07:30:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cp9ZzroVj8ixH9Loa/oThd8bsVibM8IK7gy7QqycigI=; b=ewFHlYtrM1oTpw0BBJV5huuMv5WgrXJ42EAVHgIWhJOoP++hDIl3f4tq6FzjdwgbAa yV+JbxN4BagzctONjrhayncj7lpUG8566ADlrXgunyHxGbKlO4WKckwbxPi2xmaFwQ99 z+l2rG5H2PMKL0W3FOf8YlbiUS3MuWXf6cD5+sMM/vxnoKUw9/KAVtVs1tRpVTYbhvXj SLxc1MqsVbH+1V0q7/I4+INiPLARVUWbFF+wbrwTlRmxgOfzCy1ofwus6mo4OtAnfYgz mqKCE7NkHciZJwXPGk1a9JoNl/QVuQVBXqTyboe9afK7NXhKlA3wUAwxDWLc4a9G7W35 rVZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cp9ZzroVj8ixH9Loa/oThd8bsVibM8IK7gy7QqycigI=; b=zh9Uc67LEi/H1qpO3ZvzFV7IJlhYNpteiXzY6+HsOIPjFhDYlk+F6H0UWp/bF8q5N1 c5Auco/GAv8+jB95aq6jw+CPNmAWkuqMzJE6Y0jyTxyte3a1YOd1Oozhg4rP4TUygV6o 4O9OUGBZ5cuuP/QtDbs6bM/DCYPRujthvPLxYPFPNSwreg9iyHiDXYDr270Z8mNFS4vm +EvjrRgpoDU4RH35EtHlMG9TajQLDCcEZqpX4WBc58/Dmbvpdu+dV07CqkR0ISUVrIM8 HLucsZhYw1SVQwkRElbc6aX6NdEufsqrC0rFWMHlRYfwdNZ7POX5fDKAmVs8sxk1XbZt pu8Q== X-Gm-Message-State: AOAM533d+6of2RO19BKLxA5Ae2vsamu8Wcy9j1Dm8F+jX+TrrBNYuaiU r7N0hCMqbUBEnbUEkD+UZ+NkWj3E8KDPhw== X-Received: by 2002:a17:907:75d2:: with SMTP id jl18mr2319789ejc.230.1639495822776; Tue, 14 Dec 2021 07:30:22 -0800 (PST) Received: from localhost.localdomain ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id p19sm22062ejn.97.2021.12.14.07.30.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Dec 2021 07:30:22 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Dec 2021 16:30:01 +0100 Message-Id: <20211214153001.2610297-6-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211214153001.2610297-1-tcChlisop0@gmail.com> References: <20211214153001.2610297-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v10 5/5] fate/matroska: Add tests for reading/writing BlockAdditionMapping elements X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: quietvoid Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Y9tSxcu0KlK/ Tests the parsing and writing of AVDOVIDecoderConfigurationRecord, when it is present as a Dolby Vision configuration block addition mapping. Signed-off-by: quietvoid --- The required regression test file is available here: https://0x0.st/-hWK.mkv Should be moved to fate-suite/mkv/dovi-p5.mkv It is a blank frame encoded with x265. --- tests/fate/matroska.mak | 9 + tests/ref/fate/matroska-dovi-config-profile5 | 13 ++ tests/ref/fate/matroska-dovi-write-config | 223 +++++++++++++++++++ 3 files changed, 245 insertions(+) create mode 100644 tests/ref/fate/matroska-dovi-config-profile5 create mode 100644 tests/ref/fate/matroska-dovi-write-config diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index e117a0f6a6..ec2a0607b2 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -138,6 +138,15 @@ FATE_MATROSKA_FFMPEG_FFPROBE-$(call ALLYES, FILE_PROTOCOL WEBVTT_DEMUXER \ += fate-webm-webvtt-remux fate-webm-webvtt-remux: CMD = transcode webvtt $(TARGET_SAMPLES)/sub/WebVTT_capability_tester.vtt webm "-map 0 -map 0 -map 0 -map 0 -c:s copy -disposition:0 original+descriptions+hearing_impaired -disposition:1 lyrics+default+metadata -disposition:2 comment+forced -disposition:3 karaoke+captions+dub" "-map 0:0 -map 0:1 -c copy" "" "-show_entries stream_disposition:stream=index,codec_name:packet=stream_index,pts:packet_side_data_list -show_data_hash CRC32" +FATE_MATROSKA_FFMPEG_FFPROBE-$(call ALLYES, MATROSKA_DEMUXER) += fate-matroska-dovi-config-profile5 +fate-matroska-dovi-config-profile5: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_entries stream_side_data_list -select_streams v -v 0 $(TARGET_SAMPLES)/mkv/dovi-p5.mkv + +FATE_MATROSKA_FFMPEG_FFPROBE-$(call ALLYES, FILE_PROTOCOL PIPE_PROTOCOL \ + MOV_DEMUXER MATROSKA_MUXER \ + FRAMECRC_MUXER) \ + += fate-matroska-dovi-write-config +fate-matroska-dovi-write-config: CMD = transcode mov $(TARGET_SAMPLES)/hevc/dv84.mov matroska "-c:v copy" "-map 0 -c copy" "" "-show_entries stream_side_data_list -select_streams v -v 0" + FATE_SAMPLES_AVCONV += $(FATE_MATROSKA-yes) FATE_SAMPLES_FFPROBE += $(FATE_MATROSKA_FFPROBE-yes) FATE_SAMPLES_FFMPEG_FFPROBE += $(FATE_MATROSKA_FFMPEG_FFPROBE-yes) diff --git a/tests/ref/fate/matroska-dovi-config-profile5 b/tests/ref/fate/matroska-dovi-config-profile5 new file mode 100644 index 0000000000..a27976b71a --- /dev/null +++ b/tests/ref/fate/matroska-dovi-config-profile5 @@ -0,0 +1,13 @@ +[STREAM] +[SIDE_DATA] +side_data_type=DOVI configuration record +dv_version_major=1 +dv_version_minor=0 +dv_profile=5 +dv_level=4 +rpu_present_flag=1 +el_present_flag=0 +bl_present_flag=1 +dv_bl_signal_compatibility_id=0 +[/SIDE_DATA] +[/STREAM] diff --git a/tests/ref/fate/matroska-dovi-write-config b/tests/ref/fate/matroska-dovi-write-config new file mode 100644 index 0000000000..a253db9f00 --- /dev/null +++ b/tests/ref/fate/matroska-dovi-write-config @@ -0,0 +1,223 @@ +47d2c151ff02720fff7bd37b3028097e *tests/data/fate/matroska-dovi-write-config.matroska +3618445 tests/data/fate/matroska-dovi-write-config.matroska +#extradata 0: 551, 0xa18acf66 +#tb 0: 1/1000 +#media_type 0: video +#codec_id 0: hevc +#dimensions 0: 1920x1080 +#sar 0: 0/1 +#tb 1: 1/1000 +#media_type 1: audio +#codec_id 1: ac3 +#sample_rate 1: 44100 +#channel_layout 1: 3 +#channel_layout_name 1: stereo +0, -67, 0, 33, 63375, 0xc76606ab, S=1, 8 +0, -34, 133, 33, 46706, 0x0e08a7e5, F=0x0 +0, 0, 73, 33, 29766, 0x753c031a, F=0x0 +1, 0, 0, 34, 834, 0x6740ac04 +1, 35, 35, 34, 836, 0xe29a9a24 +0, 39, 39, 33, 19409, 0x4b948b6c, F=0x0 +1, 70, 70, 34, 836, 0xf7329e5f +0, 73, 106, 33, 21086, 0x1b9412ce, F=0x0 +1, 105, 105, 34, 836, 0x9622a243 +0, 106, 273, 33, 62043, 0xc2356b56, F=0x0 +0, 133, 206, 33, 36175, 0x0a7df38c, F=0x0 +1, 140, 140, 34, 836, 0xb2d497c5 +0, 173, 173, 33, 16028, 0xa57fcbe9, F=0x0 +1, 174, 174, 34, 836, 0x17c8980e +0, 206, 239, 33, 15428, 0x9a91f357, F=0x0 +1, 209, 209, 34, 836, 0xfe288a7d +0, 239, 406, 33, 66072, 0xa542b6d7, F=0x0 +1, 244, 244, 34, 836, 0x539e82b1 +0, 273, 339, 33, 34985, 0xbfd8ff45, F=0x0 +1, 279, 279, 34, 836, 0x166291cb +0, 306, 306, 33, 16036, 0xfc39c6ea, F=0x0 +1, 314, 314, 34, 836, 0x30127c33 +0, 339, 373, 33, 19893, 0x7e746f4e, F=0x0 +1, 348, 348, 34, 836, 0x0584947f +0, 373, 539, 33, 77576, 0xeba2e5c8, F=0x0 +1, 383, 383, 34, 836, 0xd8c4946a +0, 406, 473, 33, 35400, 0xbe179462, F=0x0 +1, 418, 418, 34, 836, 0xe16aa067 +0, 439, 439, 33, 15962, 0x7703dcd8, F=0x0 +1, 453, 453, 34, 836, 0x23819964 +0, 473, 506, 33, 16136, 0x78a74880, F=0x0 +1, 488, 488, 34, 836, 0x50e5974b +0, 506, 673, 33, 74990, 0xb6fc1da7, F=0x0 +1, 523, 523, 34, 836, 0x9bb98f18 +0, 539, 606, 33, 36594, 0xc3c61c3e, F=0x0 +1, 557, 557, 34, 836, 0x8d879235 +0, 573, 573, 33, 16524, 0xb297a886, F=0x0 +1, 592, 592, 34, 836, 0xed8d94ae +0, 606, 639, 33, 17033, 0x31b3dd63, F=0x0 +1, 627, 627, 34, 836, 0xdce8a1bc +0, 639, 806, 33, 66745, 0x5edee4b1, F=0x0 +1, 662, 662, 34, 836, 0x0ba6a147 +0, 673, 739, 33, 37648, 0x540b100f, F=0x0 +1, 697, 697, 34, 836, 0x056496b4 +0, 706, 706, 33, 16363, 0x569798e5, F=0x0 +1, 732, 732, 34, 836, 0xef178cba +0, 739, 773, 33, 17112, 0x9f04002b, F=0x0 +1, 766, 766, 34, 836, 0x5072955e +0, 773, 939, 33, 69462, 0x6ed4d0a2, F=0x0 +1, 801, 801, 34, 836, 0x93f07da3 +0, 806, 873, 33, 34772, 0x2baa0683, F=0x0 +1, 836, 836, 34, 836, 0xce1995ab +0, 839, 839, 33, 14301, 0x8d69c797, F=0x0 +1, 871, 871, 34, 834, 0x3dd29b4e +0, 873, 906, 33, 16355, 0x1ebb9962, F=0x0 +0, 906, 1073, 33, 107788, 0xcf28b065 +1, 906, 906, 34, 836, 0x4ee59927 +0, 939, 1006, 33, 35514, 0xa824dec0, F=0x0 +1, 941, 941, 34, 836, 0x00419cb1 +0, 973, 973, 33, 15937, 0x8c06a068, F=0x0 +1, 975, 975, 34, 836, 0x63089b3f +0, 1006, 1039, 33, 15936, 0x1a01f3e9, F=0x0 +1, 1010, 1010, 34, 836, 0xc0f0949b +0, 1039, 1208, 33, 79014, 0xef4c241e, F=0x0 +1, 1045, 1045, 34, 836, 0x2d78960d +0, 1073, 1139, 33, 37293, 0xb32c9665, F=0x0 +1, 1080, 1080, 34, 836, 0x62829a96 +0, 1106, 1106, 33, 12826, 0xddc8ba8d, F=0x0 +1, 1115, 1115, 34, 836, 0xb7e293cd +0, 1139, 1174, 33, 13376, 0x76fbc02f, F=0x0 +1, 1150, 1150, 34, 836, 0xe38a9af0 +0, 1174, 1341, 33, 68959, 0x5fdeaeac, F=0x0 +1, 1184, 1184, 34, 836, 0xdbb9a0cb +0, 1208, 1274, 33, 35503, 0x15dbf810, F=0x0 +1, 1219, 1219, 34, 836, 0xf3fb8501 +0, 1241, 1241, 33, 12298, 0xbc12d96e, F=0x0 +1, 1254, 1254, 34, 836, 0x32d49155 +0, 1274, 1308, 33, 16357, 0x3bb3e5c9, F=0x0 +1, 1289, 1289, 34, 836, 0xdc078765 +0, 1308, 1474, 33, 69872, 0x643e0e8a, F=0x0 +1, 1324, 1324, 34, 836, 0xff8a9403 +0, 1341, 1408, 33, 35059, 0xab5881c4, F=0x0 +1, 1359, 1359, 34, 836, 0x65169eff +0, 1374, 1374, 33, 17718, 0xe78b5150, F=0x0 +1, 1393, 1393, 34, 836, 0x6abe99ad +0, 1408, 1441, 33, 17264, 0xd5297233, F=0x0 +1, 1428, 1428, 34, 836, 0x29f79594 +0, 1441, 1608, 33, 68258, 0xea19d5bb, F=0x0 +1, 1463, 1463, 34, 836, 0x1fe49345 +0, 1474, 1541, 33, 34019, 0x1c25277c, F=0x0 +1, 1498, 1498, 34, 836, 0xf62b922e +0, 1508, 1508, 33, 16085, 0xfc5f1909, F=0x0 +1, 1533, 1533, 34, 836, 0x2658868c +0, 1541, 1574, 33, 17133, 0xccd80c32, F=0x0 +1, 1568, 1568, 34, 836, 0x9ac1a1dd +0, 1574, 1741, 33, 65478, 0x92adbcf5, F=0x0 +1, 1602, 1602, 34, 836, 0x72bf9a71 +0, 1608, 1674, 33, 35702, 0x85da366e, F=0x0 +1, 1637, 1637, 34, 836, 0x0d0a7dd1 +0, 1641, 1641, 33, 17729, 0x7c6037dd, F=0x0 +1, 1672, 1672, 34, 836, 0x3bcfaaae +0, 1674, 1708, 33, 16400, 0x07509624, F=0x0 +1, 1707, 1707, 34, 834, 0xee2f8e6d +0, 1708, 1874, 33, 65450, 0xc93a8591, F=0x0 +0, 1741, 1808, 33, 30572, 0xe4892d21, F=0x0 +1, 1742, 1742, 34, 836, 0x20d69f8f +0, 1774, 1774, 33, 16836, 0x34466a29, F=0x0 +1, 1777, 1777, 34, 836, 0x44a99be1 +0, 1808, 1841, 33, 16615, 0x06f42746, F=0x0 +1, 1811, 1811, 34, 836, 0x99178de9 +0, 1841, 2008, 33, 61621, 0x455e8141, F=0x0 +1, 1846, 1846, 34, 836, 0xd9ee9576 +0, 1874, 1941, 33, 35393, 0x91e3f353, F=0x0 +1, 1881, 1881, 34, 836, 0x1d9e99d5 +0, 1908, 1908, 33, 16421, 0xb5a4a3fd, F=0x0 +1, 1916, 1916, 34, 836, 0x8ffaa153 +0, 1941, 1974, 33, 15874, 0x8a12e636, F=0x0 +1, 1951, 1951, 34, 836, 0x3a4e91d2 +0, 1974, 2141, 33, 108249, 0x74b9d9a5 +1, 1986, 1986, 34, 836, 0x7c4897f5 +0, 2008, 2074, 33, 32427, 0x1b4e36e9, F=0x0 +1, 2020, 2020, 34, 836, 0x31e78ae6 +0, 2041, 2041, 33, 15263, 0xc96d6375, F=0x0 +1, 2055, 2055, 34, 836, 0x05f4a020 +0, 2074, 2108, 33, 15124, 0x24bf4865, F=0x0 +1, 2090, 2090, 34, 836, 0x33f59dee +0, 2108, 2274, 33, 66156, 0x9536eb3a, F=0x0 +1, 2125, 2125, 34, 836, 0x4bb589e8 +0, 2141, 2208, 33, 33590, 0x12693d54, F=0x0 +1, 2160, 2160, 34, 836, 0xc13189c1 +0, 2174, 2174, 33, 15633, 0xa1f67306, F=0x0 +1, 2194, 2194, 34, 836, 0x4444958c +0, 2208, 2241, 33, 16075, 0x1ee82b38, F=0x0 +1, 2229, 2229, 34, 836, 0x0a208c8f +0, 2241, 2408, 33, 63442, 0xb508621f, F=0x0 +1, 2264, 2264, 34, 836, 0x7fa897d1 +0, 2274, 2341, 33, 35773, 0xa79485e3, F=0x0 +1, 2299, 2299, 34, 836, 0x9b9983a9 +0, 2308, 2308, 33, 16970, 0x6fcf7d2c, F=0x0 +1, 2334, 2334, 34, 836, 0x7c62a39c +0, 2341, 2374, 33, 17773, 0x3a10880d, F=0x0 +1, 2369, 2369, 34, 836, 0x20e59eac +0, 2374, 2541, 33, 66942, 0x91535a55, F=0x0 +1, 2403, 2403, 34, 836, 0xba978958 +0, 2408, 2474, 33, 36289, 0xd1337338, F=0x0 +1, 2438, 2438, 34, 836, 0x5c318db6 +0, 2441, 2441, 33, 16878, 0x0c83a101, F=0x0 +1, 2473, 2473, 34, 836, 0xd4b097ae +0, 2474, 2508, 33, 17452, 0x8c3cb218, F=0x0 +0, 2508, 2674, 33, 64256, 0x2243ae19, F=0x0 +1, 2508, 2508, 34, 836, 0xe00c9b03 +0, 2541, 2608, 33, 33995, 0x3634ef46, F=0x0 +1, 2543, 2543, 34, 836, 0xc5458206 +0, 2574, 2574, 33, 17505, 0xb70bdaef, F=0x0 +1, 2578, 2578, 34, 834, 0x2f958a79 +0, 2608, 2641, 33, 17420, 0x0a39d08d, F=0x0 +1, 2612, 2612, 34, 836, 0xd6959d9c +0, 2641, 2808, 33, 64814, 0x52eba8da, F=0x0 +1, 2647, 2647, 34, 836, 0x44a085a8 +0, 2674, 2741, 33, 35168, 0x3bae1145, F=0x0 +1, 2682, 2682, 34, 836, 0x70218f40 +0, 2708, 2708, 33, 18363, 0x5aac8d0b, F=0x0 +1, 2717, 2717, 34, 836, 0xa5659884 +0, 2741, 2774, 33, 18577, 0x3ef410e2, F=0x0 +1, 2752, 2752, 34, 836, 0x8159a8ed +0, 2774, 2941, 33, 65960, 0xd928efea, F=0x0 +1, 2787, 2787, 34, 836, 0x3355a68b +0, 2808, 2874, 33, 35750, 0x1e6b3528, F=0x0 +1, 2821, 2821, 34, 836, 0x96429008 +0, 2841, 2841, 33, 18109, 0x04a60f42, F=0x0 +1, 2856, 2856, 34, 836, 0x22f9a207 +0, 2874, 2908, 33, 18965, 0xce88b8c2, F=0x0 +1, 2891, 2891, 34, 836, 0xc51e91aa +0, 2908, 3074, 33, 64413, 0x0e2a7b8d, F=0x0 +1, 2926, 2926, 34, 836, 0xd05a910c +0, 2941, 3008, 33, 36536, 0x1b69fcc7, F=0x0 +1, 2961, 2961, 34, 836, 0xd96693ca +0, 2974, 2974, 33, 16823, 0xc226cdd8, F=0x0 +1, 2996, 2996, 34, 836, 0xe4c28e6f +0, 3008, 3041, 33, 18254, 0xe28d2b32, F=0x0 +1, 3030, 3030, 34, 836, 0x912195c2 +0, 3041, 3208, 33, 108398, 0x04e8955a +1, 3065, 3065, 34, 836, 0x04689871 +0, 3074, 3141, 33, 39214, 0xc82d25cc, F=0x0 +1, 3100, 3100, 34, 836, 0xef3c9d49 +0, 3108, 3108, 33, 17093, 0x81e01006, F=0x0 +1, 3135, 3135, 34, 836, 0x8d567cf2 +0, 3141, 3174, 33, 16220, 0xb8b86777, F=0x0 +1, 3170, 3170, 34, 836, 0x0b319c70 +0, 3174, 3308, 33, 60533, 0xc63d4419, F=0x0 +1, 3205, 3205, 34, 836, 0xd0e88e98 +0, 3208, 3274, 33, 27638, 0xcd9cb6d0, F=0x0 +1, 3239, 3239, 34, 836, 0xd528a79c +0, 3241, 3241, 33, 16528, 0x5e9dc6fd, F=0x0 +1, 3274, 3274, 34, 836, 0x3a95a59f +1, 3309, 3309, 34, 836, 0xb4c88ae3 +[STREAM] +[SIDE_DATA] +side_data_type=DOVI configuration record +dv_version_major=1 +dv_version_minor=0 +dv_profile=8 +dv_level=4 +rpu_present_flag=1 +el_present_flag=0 +bl_present_flag=1 +dv_bl_signal_compatibility_id=4 +[/SIDE_DATA] +[/STREAM]