From patchwork Sat Jan 1 16:51:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32992 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp14862786iog; Sat, 1 Jan 2022 08:52:16 -0800 (PST) X-Google-Smtp-Source: ABdhPJyVIh0LjDTQCyUyRP51fa870UkGDqnCOOgG9sWBXMgSLKBYZqxXQR4ZwRGm62XVlNO8mu/R X-Received: by 2002:a17:907:96a0:: with SMTP id hd32mr30490820ejc.677.1641055936378; Sat, 01 Jan 2022 08:52:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641055936; cv=none; d=google.com; s=arc-20160816; b=TV7iZARuRAE8fcHOY5o1CBdTRTeYg9goDdBhnPkqPCpcMUCBBVcNOkxtKlQkCxZP5D OLabXh93D9l74pZrUTN3vatVEyHeyTrzYL5ZvDaGfzgn8gQUXFNBgTlGerfLbZdrmg0W jp20B2HE7kab6RBon//3UVtE3wepaGTXPJQbPTmT/Sm8pNj/3qrfM6/y51zwq1YtmpXr Lr5FBxyi5eA2WvhV3n0CBA6dtF1rXGGKivseMxNRuYsnNlPhVgCOtKK6ylVqYFtdVgzc svL/EttOchMixa6Zu1swnataQg9PPhwZS7Gw5zmno3g34Cy3mQ5tQT8LtLrcskNYcHaD Ki0Q== 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=0dYtlbNYjWlepiBHZ2a81qgDHUdHQhsuC5SfxI/JOzc=; b=LnZf4OtmxSHToIy6p7l96nIynsAwPUGLtDPXnEWYLe5TV60V7FEYdJmnpzQAjJuwtg TZ4x4arB++ysO0UqJoLf2158Of855EXmkbdsZv47Lt8DnPIz0CFbA+GrPcSmaBZUx0Oq 7NAei/uHmx0vAIz+Y7bFdeCAvOZvQ9sCedWh/kfXq/ajMZHDXxE9E3GK1D8+HAUJA3Iw reUz0k9p7PzZKK9qRhyinh4zXBVAHkCMIzn9cMGOsr770r6SZHJR3IviFJoZm7024vSN HBJZHBTgRX7+TmitFHexK35OIlDBa3Dn+q0wnsXJof4qIykh3SaD8UNMinqLh2GFbYm6 shEQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=HFjK7Rbz; 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 ga19si14935382ejc.751.2022.01.01.08.52.16; Sat, 01 Jan 2022 08:52:16 -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=HFjK7Rbz; 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 82E8E68B123; Sat, 1 Jan 2022 18:52:05 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E8D5668B0DC for ; Sat, 1 Jan 2022 18:51:58 +0200 (EET) Received: by mail-ed1-f51.google.com with SMTP id bm14so119197923edb.5 for ; Sat, 01 Jan 2022 08:51:58 -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=ppbzzMPoQ4+GXkoF0Qk6Dv0DYRMHOhTLXvDtY4A8Eoo=; b=HFjK7RbzIBrRMqyQHMxym87J+DMROfk9Ql/Sj9Ltgu5c9NA+i1d5cK0e7bzn6+AGNU GWqzvIw6N9lIa10UKT5HKxpSAFFw/jUQoc/DOFE++Px37WmOvnzYUjpekA0K0YVtMUkb xep995fKoReDQLKKOuKfDaJpRdW2iiKzL+ChLtE4M/zB+JFS9XabMSohKh0LVLwlhNYu 3BgVnCcIEFgPL77KbrkB+YF9VvqIjR1bpYHqFa/lEJjoa42kb4+HFwA1l3SRukgOZIX6 ydiDYKXYauC/N2oxiFEciStyX2KtJxRs3qU1HrDxd3JBOxXWhJ4A56oXrVcq9wRskzwX MBJg== 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=ppbzzMPoQ4+GXkoF0Qk6Dv0DYRMHOhTLXvDtY4A8Eoo=; b=xpV1aAGW9qYb0gtTl3sNAqTysOXQ/lOjK8IWQDafo5O4s8uxlPFXkcSfnOFvryM1nF 7i7GgRiOTpFd8Tlm0GzUHFrQvtNdBhNe/PSb+zDDs9Jmn5JewnxPw6+H8FhbjYkn6Eqi flw3Zvu9Cdam3lEARwHRSm8dvKHODzcpKy5jdYXbx9DJbMy9jKoRJHa88VjP8Dzfmbb+ 0KSWmSLg+EZYB+X5jqpbGklapA+iXmXtHzG5/qHpmdrjUrPbDwpWCSrbxX4+3Se8b/oi MQXgr4rf3vbOwhhmJsAouNBj70iNDFcvSyWNSQ/MoxohYtUW9teXrfuQUIuMIh439OZk AiYQ== X-Gm-Message-State: AOAM53090+ZeuOw8OXfKICVCaQPWyxXbw0bdvGzW7If+rKAP0KoZrun2 lnzA/jLpFTF4YPFqdm/QhJbliHayjIxE5A== X-Received: by 2002:aa7:c941:: with SMTP id h1mr38985087edt.319.1641055918182; Sat, 01 Jan 2022 08:51:58 -0800 (PST) Received: from nark.. ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id gn8sm9280298ejc.23.2022.01.01.08.51.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Jan 2022 08:51:57 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Jan 2022 17:51:49 +0100 Message-Id: <20220101165153.440729-2-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220101165153.440729-1-tcChlisop0@gmail.com> References: <20220101165153.440729-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v12 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: Bz2XeaAgP9cj 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..76681b9451 --- /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 & 0x7f); + put_bits(&pb, 6, dovi->dv_level & 0x3f); + 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 & 0x0f); + + 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 Sat Jan 1 16:51:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32993 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp14862884iog; Sat, 1 Jan 2022 08:52:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJyl8JzzElGHoF59RMOsPUpazK7x0+pdWqqpg7R3aEI8WsgA+yIont+3mKIj0O5cI4JoixUN X-Received: by 2002:a17:907:9717:: with SMTP id jg23mr34092409ejc.593.1641055945935; Sat, 01 Jan 2022 08:52:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641055945; cv=none; d=google.com; s=arc-20160816; b=q7OfC58WI5TC0ufjgI0Y0PSMOVs0eoTSy/h2/k8vUjPm4wJCEnuERahRTwL9pajdb/ 5RevhVmJmKiZFztqf87cIVUGUw46eJm9hjldMzKRQ+/MOCXm7SZJBLDn3TdFRQmfsY7S UrHYXBSsFTu9KJKfc7wuMEirwJ2Jc+4PpAili71IbZWDAf2BP5w/1/Hx3pwFjA7xxyp6 QeaUDVVttS3QIJbRv65Jq2qqA8guehS8GpimEGKuLaVwqnEPB8tBFvvuiz/gQUcucQ90 lfzcLPB20qm5g38aLJ2zBGtND+XjerL7MFPQ6LmSruV5ko+IGKNEvX+DFpDjwRLacSGB ZBGg== 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=NNUtVPGmLDrF3CaHXSaS4UeGi8/y2YZIjbq//FUk6hg=; b=WXVdMhS0sYF/b0E6d/HP5wIeutjpwZuLLfcHXHIF/A6Sgh0VvA3UcTpckZde9BtLII TWrnXI9FsyCk/U/7lYv/Qj+OsnSA1WDg4+5IZNTjvbw1D+m+NMlJRqhN4hx/Tl/yhmNP fFlYKPRpezhtJ6mPBIC2A7muuCpfWCjdLHlH+QrbVYYCHAqlyzYb3wzoCicRZSHFC0Gp 6FB+WaZTcVEGsySGe79PpA9nFmsTrrlI/Az5/uF9S+wVYR8nr5sMD2KFqa5DvmS3FT0w Kd2S4vzpamsLP6erZLcqaw+Hc1eB8eRkcmFziRjmcE6jWrPNfuyrTbXsKM+V6e2x5+dh Vv6A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=eunJZcJG; 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 g16si14169268ejs.761.2022.01.01.08.52.25; Sat, 01 Jan 2022 08:52:25 -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=eunJZcJG; 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 5BC2868B124; Sat, 1 Jan 2022 18:52:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 700D968B114 for ; Sat, 1 Jan 2022 18:51:59 +0200 (EET) Received: by mail-ed1-f46.google.com with SMTP id z9so49292453edm.10 for ; Sat, 01 Jan 2022 08:51:59 -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=A2ALUKCqqwq20e3+90QAjFlg9e1jmNZL2+5gl8/uVzQ=; b=eunJZcJGfz1abh2xjuZGwgJiJlbGjnmCR8BJIbxsJmjVugnfvR+kUCm9fuIVgpNp1I m5o2KgmtNhfXMMEhVRvzFORuTSDHU4OLgGkLUGZRPcwAJoHqmEpxcgXesq/P2Mtiw2rD 4ofFohV1P5/xk380HVJloLToEMR3LUN6SbOM2GyJOmWEV/yyNTFwMjgwXImnhdb68csv sasU6pVC+8DBAMB7Svkeiyr240DXZyBXQMzRCwg2rfU+zxgxY1kskmd1Dr5ULDPmy880 YRGXgaTtG1nUTNzqPOV/eRFr47OjjD7NlB4/e+3cK6Yx97VglhEqwxEvnDUNyY8o/JtF 845Q== 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=A2ALUKCqqwq20e3+90QAjFlg9e1jmNZL2+5gl8/uVzQ=; b=JEIPa0UNdMmHv1Ke1QoFimVaJ0pTlluM7RmpaRuAqTkVWjrQvLdfbbvONaP8Ln5Za0 FEDEA1uuZpMrVnIyrSEVZrWktIKdnCvNyj99hEDB2XCanHU42ROzU7JaLn1dKOAB0yAQ 8Kqm64XQW6zJo4xGT02DbGts81TJ04OJ/hsDa7hJSzolawtbabHUAKyXU3DTjLV2CZhq iVRiOEI0kPoiQgdvupzDUvQc7+4mNASlhDOuK4Bn9B3HCgZfY24qdtyOnMDjh16lFM/J EjI7mvO+9OWdHmZwr6xmURoXpQ7WNBjd8xIKtoqGOw0ITboqRzDDimUGzTTGPQG+8Mnq vIfA== X-Gm-Message-State: AOAM531ng/rI3Ia9r/X6qR5z/p+bUByYhxYzmfq79TY9NB7pUkGsu+I3 hxiJWZaJPGwyalxG1bYkKbm+IeloiP5XUw== X-Received: by 2002:a05:6402:1d4b:: with SMTP id dz11mr37936321edb.15.1641055918735; Sat, 01 Jan 2022 08:51:58 -0800 (PST) Received: from nark.. ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id gn8sm9280298ejc.23.2022.01.01.08.51.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Jan 2022 08:51:58 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Jan 2022 17:51:50 +0100 Message-Id: <20220101165153.440729-3-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220101165153.440729-1-tcChlisop0@gmail.com> References: <20220101165153.440729-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v12 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: pRDCHcG1fSlB 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 e31b248ac0..4464c2b049 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -316,11 +316,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..5cc59dc9f8 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 && dovi->dv_profile <= 10) { + 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 Sat Jan 1 16:51:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32994 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp14862971iog; Sat, 1 Jan 2022 08:52:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJz5JiyY3wXhl7mGRPw6xYRDxw014sRKIHk4Ny++J30qS36gs+QRPtVrmqvRNALo8RyDQGCJ X-Received: by 2002:a05:6402:5107:: with SMTP id m7mr38281762edd.108.1641055955408; Sat, 01 Jan 2022 08:52:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641055955; cv=none; d=google.com; s=arc-20160816; b=vT2KBnDK48DZbvf2S3pKPUtGzPVDF1gKAIVW/gpnzr60kCl9c1sxJwXNQqwDD90C1v GMn8wiS3aydncSlMvXjxxF9YfeoNs7YBNn4/Wp7ixhgyApMMkMIQ00z+JDh+e54aZWzv F4jCjzzdChHuaNzuRPezktew69Na3Dn317oSUURmfT/2h3DrHxqCt7iCptvE2cfCJxdZ 0qlXAKXRzcsrJpJd6+d8YAqn/4inXr52MI/5vEy3rL/yuPdnOVgnJoermrHC2SjpH2Dh hy6y1HXO9NlTjT8lmaEbcmGPxB+dncP3MjwFQ8m5fYGkB7A1lopq+OhIjgj+cJD0r+Z3 gTlg== 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=p9gN6HijoApCJcg7vNd5l+P5KFeHG7op6V1WxYUikyg=; b=ix77E9t3eJe4fG0f0BrCOmZ6xDMAKOYqigrQBK5JpNHYYyWDyEWbZECHObV1FEme0F PXXxZSeKvCuC+ykvOMZfMRXHL0AVBYqbqWqRvy3JSjmLmKwCaL/Yvc5DfH260A2yiADm ybpivCPgvg/NxtV643Q7r1kWH4F7G0Cipqu2Oq37lqIyzfyXBIgL0d47iLzTR9aemSpd WSw46NdRzkBOCqb064fqQFsRZLT0QCJ/A3QUK/CGxlCJxuyluuCuTcy+He0bQ2Naq5Wg gfoqonJVswc9wa+lHKBIZgemF7/JQsVOJkK5uXuyCF404v2t8ZYEz6/SMxxMzcXoRosq gYLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=T2oJwXTn; 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 l12si1094591edb.624.2022.01.01.08.52.35; Sat, 01 Jan 2022 08:52:35 -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=T2oJwXTn; 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 4C81368B13F; Sat, 1 Jan 2022 18:52:07 +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 E556B68B0DC for ; Sat, 1 Jan 2022 18:51:59 +0200 (EET) Received: by mail-ed1-f45.google.com with SMTP id j6so119044952edw.12 for ; Sat, 01 Jan 2022 08:51:59 -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=ntxECzFH3m91P9NVx3rbjAu47yDQlrNi0xK2yi3IsoE=; b=T2oJwXTnvql5DlKAvJIdlKj3u8oTNHXCiR9+R3O9WYuA9uTlkslp1wSp+PAtzS1WKW vE1p9EDQBYwcJHmIZRgQvp+eot6shgDWvlfIpV9eEFzYq/Yb79RbxsED5wNPoyOZ1z8Z 09bCu/8oxYZMn22vctzLvY2F/5J/t6wA28H7fK2EoXmg4Fp0Bc4VTuex+/26WDBZB8n+ FiUGC36qm0zsT+JnZmx3Re3VBgxrFB0E0rDl0ReKw1dm9lrxGEgjC3OM3RpfM853HaVv qyb8U9lL6J5erWcavJlZfD/vMrFnQ7V0vuKC0Ms29XV2wVQ29n3M2RAqJRjS973AFqSx Kp9w== 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=ntxECzFH3m91P9NVx3rbjAu47yDQlrNi0xK2yi3IsoE=; b=iXaKbZuo2VivqHPcSBbamPZIAG8L2/DWkkrFOUntdEq/OWwkWBfqyiWqGTJMrHvXX8 hNnDVEL7wAIeuHS/raSfEkc7oTRacLGDieS/mq79p6Mp+wLXpKCN6dU+OQzHOHvCvjKk gyG6VN/DH4Al3oaPW+WyQ3Uwe7BOuuKuJxJvUl4PdolCzDdoJb4KldLIWPeibghp1uTx g09hoql5bHmOZ3TNkmqs42lG/H1OitIxeHvF3Stghxu2eXkVU2CWXBg33/ELyThy7khw nbc++UbWKKfAc9Z0xRJqu1/l4Y/hAYtyDZVeUwFbpI2/PSuQOjnib4FkUk3zAaDKg31q SlJw== X-Gm-Message-State: AOAM532kad52IMYueruGwjxpDXPKbWGzCd2iW0zOaaMC5NE++mWC6fFY Q5HYccYK5oz2lr5tfDowzQroVFOdLnLNjA== X-Received: by 2002:a17:907:1c8c:: with SMTP id nb12mr32234357ejc.9.1641055919281; Sat, 01 Jan 2022 08:51:59 -0800 (PST) Received: from nark.. ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id gn8sm9280298ejc.23.2022.01.01.08.51.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Jan 2022 08:51:59 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Jan 2022 17:51:51 +0100 Message-Id: <20220101165153.440729-4-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220101165153.440729-1-tcChlisop0@gmail.com> References: <20220101165153.440729-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v12 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: 55EaQ28V5xJJ To avoid duplicating code. The implementation in dovi_isom is identical. Signed-off-by: quietvoid --- libavformat/Makefile | 2 +- libavformat/mov.c | 50 +++++++------------------------------------- 2 files changed, 8 insertions(+), 44 deletions(-) diff --git a/libavformat/Makefile b/libavformat/Makefile index 4464c2b049..cd9810ba01 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -339,7 +339,7 @@ OBJS-$(CONFIG_MMF_MUXER) += mmf.o rawenc.o OBJS-$(CONFIG_MODS_DEMUXER) += mods.o OBJS-$(CONFIG_MOFLEX_DEMUXER) += moflex.o OBJS-$(CONFIG_MOV_DEMUXER) += mov.o mov_chan.o mov_esds.o \ - qtpalette.o replaygain.o + qtpalette.o replaygain.o dovi_isom.o OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o hevc.o vpcc.o \ movenchint.o mov_chan.o rtp.o \ movenccenc.o movenc_ttml.o rawutils.o diff --git a/libavformat/mov.c b/libavformat/mov.c index 351ecde770..ad5ab6b491 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" @@ -7062,58 +7063,21 @@ 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 + read_size = FFMIN(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); + if ((ret = ffio_read_size(pb, buf, read_size)) < 0) return ret; - } - 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 Sat Jan 1 16:51:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32995 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp14863068iog; Sat, 1 Jan 2022 08:52:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJxzYFd+nFhOmCh15zi6oJzQtzLS05LzE/kU9Py1bwiG01z82gAxFCFChCBoJGFjb+Fu3Msf X-Received: by 2002:a17:907:6d22:: with SMTP id sa34mr31249955ejc.533.1641055964901; Sat, 01 Jan 2022 08:52:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641055964; cv=none; d=google.com; s=arc-20160816; b=0hhUcsz+Pnh5uPOCFDMSbCxRXYc/OZNIsQ+LlLb2bYUBwIGG15uFFdcXvG1xZPG6bn sVYUxsD5V+3RZOBuwsU6EloDBDD1f99lnLNGQhtFJ08gOGF+/2ZLmUF8CXTa4a/xzvKw Hba00o8Bxt25sPDwNnhK309byUzv0RcnwkZprgJ7S+IWwZer1q506Ut/C/dQhZ9suk+k GXkYhKhusetwa945blNoJdT9zAXYqiIzM/PgoTB/Ivw5C6Lc5mZ6XFQkYyhWPXakQEJp AbjuEVcTxr6E2wwKFZv5W8IplGFpExugns6YfKAOWzdOQuY9eM/2moALzs7GT4qioGHk FDSg== 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=MhgXVkn27HaoP52mIk8Pm36z4t7ZlZtZQTO1Y03OQ6w=; b=xFOu2yYlfFgG7BvsIUIjb4MVjHzEsDN7MaGQPfOWWwDC5E8tmGtVpj4q3IY6Men1fj sKRxYCW1FKtK8H+qXpCHo7LUv6HX/pDxOduZx/lm6Zg34EICnzQiyT1pYMmm1QJfhyVX dC/KEqPHaJhmWw6GuIkpj39yZA89FDNb7tUJwA8NJ3FpOft8O92hvW7Wjn0CakFOheUu Q6Vho6RIG9vJxk8O8HMuIFlHo/QGwRoB4J2Sc6qmd9x/e/fMxEhWPxdAI8l5tjOuEHXp I11iKMoFDFTQCh1W8WqLGw4jG4+vMZwsyBDTEZc4lsOIE+kimVLuON8HtqLDLYqPxUvn 4GpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=COnHDBws; 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 u21si15059637edy.502.2022.01.01.08.52.44; Sat, 01 Jan 2022 08:52:44 -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=COnHDBws; 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 70FE268B149; Sat, 1 Jan 2022 18:52:08 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7CF0068B122 for ; Sat, 1 Jan 2022 18:52:00 +0200 (EET) Received: by mail-ed1-f44.google.com with SMTP id q14so111421354edi.3 for ; Sat, 01 Jan 2022 08:52:00 -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=nbBaxP0LM+G5/L9aN8Inih1LrU5lEBslCSq2v5UiNcg=; b=COnHDBwsVVIodtMpma1ccRbVYQi+pfvbV8cc8Wh4OZ360TVHavsvKh0SrDuf7QUxVl P4XkH807j4EA5zmd9udnBn0t7jWA7QxjEDqEnmuCwKXr2y8xGt1xJ/pAqawStsUTrA8G 85Ydia9N3JtGI+T/mJ7mB51a0+eexicqawHUWhLL8ieJD0aOoiNQWGZ7qyNPvkLeUtqv BOlpJeItJ9nR1z/5/w61chbbp8lSOfHQUj4CGhmoKRkeEt1NLgffrdi5KXzTonB/1JtK 0kHBceJ8y879FBLfBnqTh4ndOdVVhy7Z329fooe6ZueR20mWL7z8Qu191Xt9i59A266E MkUQ== 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=nbBaxP0LM+G5/L9aN8Inih1LrU5lEBslCSq2v5UiNcg=; b=5lSWtg+ThF9DTR7cI7CtQ+jPd1NaBoaXodcl/nxtX8QBIuYmp88YixMJj2MsR7tjhO XJiCfyrRY44RNrLC+pUVRUxwjhySseIMyye7MYaJbSpQfEZyyEuK5ljhVUdy8R1S2HwX 6/GiqT4beZOfZiwCO66fNAI1wJPJIxzeVQmbQ7eV/38Buzyy5a9GJp/ORxsyAckeWOeo FEVAmQTSTwdk9wXtlQflv66PgxTeKx0FrcRqUAi1uy+k4HwaJlkInDXo484/DhhdyBBj GBIJ8yN/NGP5Mtytg6RcYdqphZrzNu0TCKhwA+TL7pvlc2xMRJncM0mgy72fP07eDKyf prlw== X-Gm-Message-State: AOAM532VLbfy32pdh8JSIMRdqDHJIm3xlAN0ppzzGCUST309plv26vZR R0Wyt5bVL9s+daYbbTPvMgxcyX3dwQB0jQ== X-Received: by 2002:a05:6402:292e:: with SMTP id ee46mr37900291edb.222.1641055919826; Sat, 01 Jan 2022 08:51:59 -0800 (PST) Received: from nark.. ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id gn8sm9280298ejc.23.2022.01.01.08.51.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Jan 2022 08:51:59 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Jan 2022 17:51:52 +0100 Message-Id: <20220101165153.440729-5-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220101165153.440729-1-tcChlisop0@gmail.com> References: <20220101165153.440729-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v12 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: 0Rar8zIda80F Improves code legibility by not using bit shifts. Also avoids duplicating the dvcC/dvvC ISOM box writing code. Signed-off-by: quietvoid --- libavformat/Makefile | 3 ++- libavformat/movenc.c | 24 +++++++----------------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/libavformat/Makefile b/libavformat/Makefile index cd9810ba01..a9afb9c042 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -342,7 +342,8 @@ OBJS-$(CONFIG_MOV_DEMUXER) += mov.o mov_chan.o mov_esds.o \ qtpalette.o replaygain.o dovi_isom.o OBJS-$(CONFIG_MOV_MUXER) += movenc.o av1.o avc.o hevc.o vpcc.o \ movenchint.o mov_chan.o rtp.o \ - movenccenc.o movenc_ttml.o rawutils.o + movenccenc.o movenc_ttml.o rawutils.o \ + dovi_isom.o OBJS-$(CONFIG_MP2_MUXER) += rawenc.o OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o replaygain.o OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o id3v2enc.o 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 Sat Jan 1 16:51:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32996 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp14863179iog; Sat, 1 Jan 2022 08:52:55 -0800 (PST) X-Google-Smtp-Source: ABdhPJxen6RWhMhG+NG5/9SUNzpu7gDNeOFOgD1nvh1JDmoPKor6zO/dH8Pi+zIRAIf3vXYsXyD8 X-Received: by 2002:a17:907:20f9:: with SMTP id rh25mr32146847ejb.209.1641055975285; Sat, 01 Jan 2022 08:52:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641055975; cv=none; d=google.com; s=arc-20160816; b=nn7C4U8fwnxal/05VJdBCOZywPsCC4K6tTTksCl8qHZ1qNdK9K9LgfTyKLMFXEAar8 FulsGqsOt0a3PGD8iRKYKwrZSPW575ftVkHRSNButIN4nSchqlKpx69nVR02Mm7XH4Mu uvuYfsafMkLePtyC8y5mYCgOZuob+Z47RLoFhklVP80A2GUoaeJwkFPxz5IMHqAhwe5q 0R0BRKAV9lElOpNMUxLpPKc+laPnV4st6CLuNHYod2dsUz4GyCVZmxbNrkRMFL5+8gpW bO6+/g5BDBY1nTJy35teFkG4sSvY7PTCDoQQWK0w21JcatCTyR/Zm9GbJIRFTj0k3Wbd thQw== 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=19akYqyx1+N4BQCOuSl/sYCqcL44Eso8FkEMm9grAFI=; b=krf4El76w+6GmxrFNvAuDYbxwOCpuhIrS1He0II9nIt+YuUMeXQkq9SMEd9+8qPCph LNVp0mnKp8VY1RAPmrOihbdPHo80eIQxznmsiJhBWscSufdhcD5OAvg7emiMqH3bWhyr M0DPWt7UhUIDsZ4N3lfi2FWyWyQ75axT8lBsUC/10WUXSQnxlIpFBM7VPfLbzkeMywdx YmhkjwtkLPkFZu00RrynPClW7G6eNYvah7QSPzn3Q9a9F5ZrCx7Ljm6V02sAeeVRmxoy 1sAVfvXTb0MvBLrYxmZBt3c0nvyDcWcvM/rIdGsM8dGJeJ1miK7VleNIDuopPJm8Rjih olqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=UGw8msF2; 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 o5si15392514edq.585.2022.01.01.08.52.54; Sat, 01 Jan 2022 08:52:55 -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=UGw8msF2; 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 59AEB68B156; Sat, 1 Jan 2022 18:52:09 +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 59D6268B117 for ; Sat, 1 Jan 2022 18:52:01 +0200 (EET) Received: by mail-ed1-f47.google.com with SMTP id q14so111421447edi.3 for ; Sat, 01 Jan 2022 08:52:01 -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=D2Mea48eGqdtixASTkxdr5gqbtJ48kb2CjEQNVZ3hNo=; b=UGw8msF2oLclXI0IXagpljvGVd6fhVrFbzv6lVoD4T6KajXNw48nk8CR0VweCulLgQ kFhjF76BJn1j2HA443j4oTleOdWML83y/vp0JoacjhJXa+Jag5nBnaJQKvznNh31nChg WOkDtIDQmos0s0b2ehUx864zJ6TAIsXahjWu4iMx25lbMVISFoUyjt/MAra6O1xLMYM4 P7+HCJxe0qOwhyf24gvtZ0OUu8mGtpzbojM4mR9HPY/l0heuLmHCD+ZTRZUvm025zXFP /zJRSMg2t4l1itfzVZPwtR5WNp8rBgxx0e9pXmXygZDTLkFeFSH+bFmSqyDYZsMydXKF Z0TQ== 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=D2Mea48eGqdtixASTkxdr5gqbtJ48kb2CjEQNVZ3hNo=; b=PTOvw7KdekQvNOHMf71Cd0ybhpUGXTrZ+AvDtrjm/rmlqw7azQMO3QwCICV2Qok+5n JjYMGQn8hRFw00HiWe71cY0K2PKU+9tHpnp9KK11S2TNjM4qvx5ywpiGC+8N2/bj4GJ4 qdoNI6BaCgWl3h9c4+y4Ikjc4k/FwjKheLnjK4k0XMLomSfgaHt8wRGoHyN6USTMhaPi fe7oXjJHX38re+Rl98+uPsCly9xJLvkGVbJZX6orwm3E0z+8U+UTOu353bixpNvvcdQq NS0DX/dEI7LkqCUyjlKg6WM+JvEA3lHrijggMZFe/Qgut/l8BdFVEvSZs2zBX2DKmROY NlgQ== X-Gm-Message-State: AOAM530/M1Kor+a8XCTKt81Moz9Spj4ik7KYoU/5o3DwvQu3tefUrkmm gH0Vb7wegURnfXBfMwR1d5DgG9czLLtwww== X-Received: by 2002:a17:907:c0f:: with SMTP id ga15mr31910716ejc.623.1641055920363; Sat, 01 Jan 2022 08:52:00 -0800 (PST) Received: from nark.. ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id gn8sm9280298ejc.23.2022.01.01.08.51.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 01 Jan 2022 08:52:00 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Jan 2022 17:51:53 +0100 Message-Id: <20220101165153.440729-6-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220101165153.440729-1-tcChlisop0@gmail.com> References: <20220101165153.440729-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v12 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: 2V5YJFQV7TIw 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..5a86d0fc45 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_FFPROBE-$(CONFIG_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_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]