From patchwork Sat Dec 4 01:09:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 31950 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp1426701iog; Fri, 3 Dec 2021 17:09:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJxeJZcUsvL8mVayODUF0h9Yk5u6q/ExWrjLO/5kHEzQHq/BRbLjh3vzYH+17GAsxF5z+I8W X-Received: by 2002:a05:6402:339:: with SMTP id q25mr31434908edw.251.1638580180004; Fri, 03 Dec 2021 17:09:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1638580179; cv=none; d=google.com; s=arc-20160816; b=ePvN3or2OQzHtudzQCeQiMwDFIhAP+B9j3GcTxT3bJ/5WDccAazpb6OWjBaEVLylkq GS1RLFsDfl8JhISbxorb0HsXFChCiAJH4+iEWb2DaD4SprNzXwXLIJv1+aeV+9+apaU1 DVWoVrmal/naP+jl8tEL6dyNAlG7dBVZXANJ80h1OqLHcY56M1XjNWE1nRk4gC41SSSp uFIKhZrPZdSXhN0KM9dsSYOYriIDuFEiIcHug/K6LKU94pyofZTZeWSAlXc0bbxuYJgL hFGuCBhTwa0H4qVX33FCn+lAX0LSUGoLZ0gVbnlroZxFofim5Kb8h3YzaWgf9jq+xsGX rR/A== 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=OllAzC8zqcqdDyQJK1uwEzgZ+7kizblkHt9I/lCIDk8=; b=sOQFC3xXSUzOkdFHqIu7oKwVjMZM6eEC2sh0tuU1gpgyDdvwUS2TWNe1FgQ6q6YCb4 mx1MyUraVIRQWMprqMglTATAo0KW++0ZH7671Us6Ugtd85AmJycKdp8zLHup7DAmSpSe GVYA583fHje9Ii9z3pkfkutzwX9tATFQUN8JirKRcemxzEWBBbBs6Lr0TItijhUgj657 bSBtSQHk87+4VMNLlU0MRuaU4QjSfkZ2OQXGWY4Rf32mBQQk95qvOONgu0Tu5NUHz/Kl dntMf5yLNfe03X3vpdHqeVbBfD+jGdFZc/CO6H6zMnO4dZf1IKatHbpe6Bjig9vNFe/r cNBA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=oFmIep0J; 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 z3si8166705edl.489.2021.12.03.17.09.39; Fri, 03 Dec 2021 17:09: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=oFmIep0J; 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 559C168A8D9; Sat, 4 Dec 2021 03:09:26 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A512068A8D9 for ; Sat, 4 Dec 2021 03:09:19 +0200 (EET) Received: by mail-wm1-f49.google.com with SMTP id 133so3763004wme.0 for ; Fri, 03 Dec 2021 17:09:19 -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=0nVp0zH3noeH5kl3Ej14lkzrnZIvokf1HbsV0YFVKaE=; b=oFmIep0Juutp5R5bgYRo7ZvZxR8sLuu9u+2mLSEtfJuhHgygPrztq2IiTCkLapif37 j7EXs6vjZt3iZvtFQhnePSiNHNFuJOyNgJCMlDGBIBk6v+HPLiX5NcLwmbHYAUm2GEdp UvOq/IAXFm0a1F4ernTTKpXZ7fVaoGdIXTpNFl3wOYjHT5bI0hnT1IP38rtON1XP9C0j FsNDmgrBGyq20tXXQQyNBg4/QjQXr4YuTDJK0p1DorwFIOdinkwE+Y0kN/nwpcyfTgPe 364lPtf6bhS8bOPevp0UFt2qUqkHyqN0Xc8naCGFH3OX3anI5vcxbXCJypcWcvzcYCgO /95g== 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=0nVp0zH3noeH5kl3Ej14lkzrnZIvokf1HbsV0YFVKaE=; b=NkclHLq6mmj6A4tm8+q+La2uEoyiy6+4k9ar51m6JNBM/dHag49JVjD54Xj1BPVcvd WuZhTHzPWPmbpoX7Q2K6oXIt75M93zxxMUNTkSeQ3To6M5j1atxR/39aeormVlx5BeOX BAsQ9aAyks+V1Kpdoabj5Zh5cb5+Pizclo2Y2evSmuzoJvh9YmbMHz9ni9zIceq9+NKv QgNpcsVOTQ1go99svchpHo5mD6hROD6tW+QkcXHB+r+FSoys9K2KGfO7kiwGTcsIKt6M cGVGmB2MguVPH9A1RMqZMfMPguG9xU/8QKkhKDqmeh/4l8h6aJIdolhcGApM9dV9bWUv iTFA== X-Gm-Message-State: AOAM530Atkheqt4w5g71p2oAShf47iDj6P1j9I2qjJ4qrNUwjUn4hBbX 9SXlFOnBWDCqqUZVKpaBVDR6YxsPbeSkXA== X-Received: by 2002:a1c:488:: with SMTP id 130mr19490320wme.157.1638580158929; Fri, 03 Dec 2021 17:09:18 -0800 (PST) Received: from localhost.localdomain ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id d8sm3873739wrm.76.2021.12.03.17.09.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 17:09:18 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 4 Dec 2021 02:09:01 +0100 Message-Id: <20211204010905.2258652-2-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211204010905.2258652-1-tcChlisop0@gmail.com> References: <20211204010905.2258652-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v8 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: qypa/cJQK/mq 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 | 123 ++++++++++++++++++++++++++++++++++++++++ libavformat/dovi_isom.h | 35 ++++++++++++ 2 files changed, 158 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..679c913730 --- /dev/null +++ b/libavformat/dovi_isom.c @@ -0,0 +1,123 @@ +/* + * 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; +} + +int ff_isom_put_dvcc_dvvc(AVFormatContext *s, uint8_t out[ISOM_DVCC_DVVC_SIZE], uint64_t size, + AVDOVIDecoderConfigurationRecord *dovi) +{ + PutBitContext pb; + + if (size < ISOM_DVCC_DVVC_SIZE) + return AVERROR(EINVAL); + + init_put_bits(&pb, out, 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); + + return put_bytes_output(&pb); +} diff --git a/libavformat/dovi_isom.h b/libavformat/dovi_isom.h new file mode 100644 index 0000000000..d33e436a4f --- /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); +int ff_isom_put_dvcc_dvvc(AVFormatContext *s, uint8_t out[ISOM_DVCC_DVVC_SIZE], uint64_t size, + AVDOVIDecoderConfigurationRecord *dovi); + +#endif /* AVFORMAT_DOVI_ISOM_H */ From patchwork Sat Dec 4 01:09:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 31951 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp1426886iog; Fri, 3 Dec 2021 17:09:50 -0800 (PST) X-Google-Smtp-Source: ABdhPJxSNLQpkpuF68Wx4SiPMQ4em6c9uf8zZQgSVJ6mLd96wmnqI/ugPMUBYwkQHa86BQ88CN3G X-Received: by 2002:a17:906:c111:: with SMTP id do17mr27612453ejc.284.1638580190094; Fri, 03 Dec 2021 17:09:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1638580190; cv=none; d=google.com; s=arc-20160816; b=jSq5TQ7tskAMYlJ2r009DrSetGZEvY3q5cEt7Q2B8zqriyd7hFFnEuhx+TRkI90bBO P855R5gFlpm76hAyF0PzIIaA214Eu+HIWGO6qWIyROtWtX001aCckYCOl7++xltteQ6G QVrqNGOFQJ/Ky0SZ+cLLvGUvnJ1TYeAJJNtD6nemQHkQCMFK8DDAM6r5b9u8eUmtucJE BZB7SlIU5J5FD2a6gONx9UgfhEjZntLx48xlBpSKhHb49mr7P9I7nM60/h4UHD76VXst zCxzpU99os9/tyCTyOsTpjg/0b1zW2aEpo8BmqWMCMW3SmEP5aoFqgSl87M6TWM9Acvt 3uDA== 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=tqLxIELlIvyxzUYgOcpQ4z7dD5G1DDA5+aSAHJuGlF0=; b=m3Jy+t7BBhD4a6PJRjx1ZjBqTOpo0naPkwucxbXapSVrsOeEqf1AqoaJHMxzymoUdS YezBuNUqJ1YIMmqYhej7Ued6HvbN4emSrFHcyf9ppYcXvgPzwl6ZhzxvbQpUM6/Sxx25 5XhoqE7v2H/Xd+HF2Lc8lek5DD/LD42x0nm9/yuRymS0OXPuLnNDfYgmON5Ix3eflJO2 Xa5fwwZKee6D7YE8XpZezZnodcA6bSxxa1nsqiySczKJLDL88TiTx1FtBfem8z+LynM8 TX8jJdo9tKyE/cyAl3j3uJzajjtt+nJfVutcA8iCYLJSlRAg9sEhJZ9COK/ebzx6OlKu pXUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=loDkVORP; 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 lr12si5461849ejb.296.2021.12.03.17.09.49; Fri, 03 Dec 2021 17:09:50 -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=loDkVORP; 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 7411C680967; Sat, 4 Dec 2021 03:09:29 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 43AB668A774 for ; Sat, 4 Dec 2021 03:09:20 +0200 (EET) Received: by mail-wm1-f41.google.com with SMTP id p18so3699530wmq.5 for ; Fri, 03 Dec 2021 17:09:20 -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=wOkO7xKwIGlNeJLCVcgkNL8izZEnf2xshssKGJuj/pc=; b=loDkVORP7bloDnKzJF9P90+Dy0dtJCkfkx8v+zJ8BeyAoUvVTPJRZvSB5LpvsRWfHq ZBgOWTe90h00K5uy+nVjY5CU7lJbWVgO++tOwL7fhhgROQhGrr7AMjGZ9Ot6HjhK/aui 0Yik5MIojpXdfgJi1juX2X432mcYlTC4CUK5zsBKK6fgveB1u8qCLf7QVVoHek1Y6UNI t/wSJSbe1iQZ4zDoosFVfysAYQ0ShCn3dvCERlTfpZeAYLyGk/Oc1WCd7Z5oAP6reb+f fX7v5M/of9fX5BfBxFCndwKT7s8zAF7HG0iYo/oZt5sqyQiu2hMZzAzWezDvsyO39CA4 MOkg== 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=wOkO7xKwIGlNeJLCVcgkNL8izZEnf2xshssKGJuj/pc=; b=yDNT/zgj2yFZwTRnmMJp3Uc1jE6x8bCNI9e8FuEDcBVzpHwN5J/bAWqUBCzCqkD1t1 lcK5lHiwkEP4mkZwMaOPucc4X8Df1wSwbZCdh0l/k8MofHABEBbozqc5VjjFcUYY+6NU MRjqgoVzE9zqEl7dPVNmgoENY0A5c2AM1hwhECjvjr3IU/EiQdDgW44aRTO114U771tR JNEq739sHZYI45keXUHKV/RDGHi3FMnm/YlNdb//1M1pvdoMSgLmNGu57z2iPyEcNmGM zVds7MCutVY5neM+lgA7RBMAQrIledaS6Vc5K74l1JDzotiXuJluT1MGDPgjdROahA/r dpXA== X-Gm-Message-State: AOAM531wtTx7oywworMWXXyjuKhPpoRou3CCs0t8VQF087UX5h3LKww7 uu1gPgx0EAysbXRZk8xQ4eu5qmB7iVIWIw== X-Received: by 2002:a05:600c:4113:: with SMTP id j19mr19759767wmi.48.1638580159541; Fri, 03 Dec 2021 17:09:19 -0800 (PST) Received: from localhost.localdomain ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id d8sm3873739wrm.76.2021.12.03.17.09.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 17:09:19 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 4 Dec 2021 02:09:02 +0100 Message-Id: <20211204010905.2258652-3-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211204010905.2258652-1-tcChlisop0@gmail.com> References: <20211204010905.2258652-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v8 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: yTvt16a4ZF6o From: quietvoid 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 | 45 ++++++++++++++++++++++++++++++ 4 files changed, 112 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..6fca0e3cb9 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,44 @@ static int mkv_write_stereo_mode(AVFormatContext *s, AVIOContext *pb, return 0; } +static int mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) +{ + int ret; + 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 size; + 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'); + } + + if ((ret = ff_isom_put_dvcc_dvvc(s, buf, sizeof(buf), dovi)) < 0) + return ret; + + size = ret; + + 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, size); + + end_ebml_master(pb, mapping); + } + + return 0; +} + static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, AVStream *st, mkv_track *track, AVIOContext *pb, int is_default) @@ -1319,6 +1358,12 @@ 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) { + if ((ret = mkv_write_dovi(s, pb, st)) < 0) + return ret; + } + break; case AVMEDIA_TYPE_AUDIO: From patchwork Sat Dec 4 01:09:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 31955 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp1427071iog; Fri, 3 Dec 2021 17:10:01 -0800 (PST) X-Google-Smtp-Source: ABdhPJxWD9aqlqxeckPEu2PnuS8wx0pq/vXDmlef+8lJhfQQTaF4clR/qr9ZpYTUI88ouPF2TDeA X-Received: by 2002:a17:906:b854:: with SMTP id ga20mr27103770ejb.308.1638580200872; Fri, 03 Dec 2021 17:10:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1638580200; cv=none; d=google.com; s=arc-20160816; b=UKeDS3/E0CqnYHSjjJi0FI+F2dHLiJaDQfuKDL1QMmammBOFKfk4U++NWQwdzwv8cB Wa7F+S1nM0EG5hZ6CFrHPlFDTMdh3dYsX4nHm/Xa/IcmcSgLojwVMarkpeD/UDEXIkrT SgcSh6mmg4m8lbU74n6/rCbcm5KEd0yZ022alk3g6vmEAmLlTvXThZliAQrV36QfbwYF yl0yZ2E0knwD4qLsuISG6viDc4hfsb/R74BdO5CS82Q3aQh9RW5ONIIK6ofjXOL8sDMe QIeHCWrsTgzQRX0eoRKRd4EknwGZnhRWlzJO39cM4vAx7f63oOz82EVuQj9s9JdnOCBY t2ag== 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=FiPLwaV9dnWWdUaJUv0s0S0aWM4cRK8VLa3RzoewlUw=; b=lmG3eq2/dZ8QVdC3PLsWHHWwJF0l0ezIKco9P/I0MQlmH6LzldJ4oqlylC+QErSwhe CcHFDVFEy0Qr6KnpuBwV3+rAtoRfg4Lx6o2CfqSB6XX8yBogMMdqI5/aHFi4RsVQiera saODLtKliQsDKWkAB0SKhFUvi3nropfSgwXu95S0iEE989HwGPmf6X40MJeCwBRlvwAY jA1CcYzPAV00UV9VyKJ8iW7xB8Syz/OJM4zfK/GGRQEynqlrtdSFaczgLGbaIy694ZBX BJ2woyWoGWtuukvllLAhd+RxDrowHh746yKxXgxoFJ3D5R/3WA7MbBLaAOE5OidlLS+2 th2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=S1ytU8cs; 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 r10si6559705edc.370.2021.12.03.17.10.00; Fri, 03 Dec 2021 17:10:00 -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=S1ytU8cs; 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 4057D68AE4A; Sat, 4 Dec 2021 03:09:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D05B468AB2E for ; Sat, 4 Dec 2021 03:09:20 +0200 (EET) Received: by mail-wr1-f46.google.com with SMTP id v11so9222931wrw.10 for ; Fri, 03 Dec 2021 17:09:20 -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=Q8vEEuG9eWrDDpw+X/X13u0QfEsOcm/LKZIyuGqmPBY=; b=S1ytU8cstozfn6YskjPNirGaRfTYVAVh/6RaOkKuwz+H21mPkUbTTu0NX1GX/tZUFX cJAsWyud3l/uROambll5tS2Up1cvqUj7zqN7cVOGv14lHL8nxl29rYIrhoY10ZBQhKEL sx0VJXvNs7BqYMFssYXqJT4vBBkvHTN8e92uKQmKa+gS1Et4o/nuc07OL5FgVbxNpeQY bZyeTqhgwmWE16XDf/FP+LWwPlFFYBWlINSqQ3WK0HaG+Fwr+st2u70KTl0pZsXhhx6R 2IfnUD+FEY98defcQiUvAjv67fb12OKLChcz6C6ABAMpFjxGooKYek8BfVnOs19p5Vqm 9VIw== 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=Q8vEEuG9eWrDDpw+X/X13u0QfEsOcm/LKZIyuGqmPBY=; b=riEQgb3Exqk9M+u8ErXP4WCEvGd45MubToWD4UWTEdFd2HIPuhj9F3hygYf7LG8KUg J/FSpQKdV0UmqsTYeHSlpbbkPMq2QSdSlmw6WKfw9e/uXCpQcf4FdDwymCkhyFxdVvF1 5GwDYxZHNmSe7GP9cjaWfKx//fr3w+htmYmMJqgJQJLaCq324TALrpJscCm4tAcnRsQH 19YU0ay56vHhoZH1i9IPTJJiuqkDtAr3jK/gpoEk6NoQXS3tkqLt4jtuz1Ux8PbQn3LL KPbZF/3UuGMVmuZh7wxDtzJUjRXbSuLk/g60BocP4dAcNCR1oJ7Q4/bEW/hO1QsF9Hfn Q+9Q== X-Gm-Message-State: AOAM531wTo+aJXtivOX4itcO09VdbEcF2GSqTD4Mu/lfN2ZMeTFIjDgO b7i2tX2oVYt1NEwULPZWCaRdiNmo43v/rg== X-Received: by 2002:a5d:6211:: with SMTP id y17mr25782027wru.97.1638580160128; Fri, 03 Dec 2021 17:09:20 -0800 (PST) Received: from localhost.localdomain ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id d8sm3873739wrm.76.2021.12.03.17.09.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 17:09:19 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 4 Dec 2021 02:09:03 +0100 Message-Id: <20211204010905.2258652-4-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211204010905.2258652-1-tcChlisop0@gmail.com> References: <20211204010905.2258652-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v8 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: Tp6/3nEBsxDw From: quietvoid To avoid duplicating code. The implementation in dovi_isom is identical. Signed-off-by: quietvoid --- libavformat/mov.c | 50 +++++++++-------------------------------------- 1 file changed, 9 insertions(+), 41 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 5c74d099da..b5f974fe05 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" @@ -7051,58 +7052,25 @@ 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 + AV_INPUT_BUFFER_PADDING_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); + if ((ret = avio_read(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 - ); + read_size = ret; - 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 Dec 4 01:09:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 31953 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp1427267iog; Fri, 3 Dec 2021 17:10:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJzKHTJD1USTnecKrrXBzHuTEqPMPDXqTRT2YN0aZbTXn+/78yWLkkOpqgrcY7f9hu4hYZSi X-Received: by 2002:a17:906:a10c:: with SMTP id t12mr27862058ejy.429.1638580213742; Fri, 03 Dec 2021 17:10:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1638580213; cv=none; d=google.com; s=arc-20160816; b=YrLfK2KvIf2ri5zujC++h92XRAAtrqggxOm/fP8qqp/OagOKBzBdTYiib6t9v0gIkI W/KlI2rWhNR0qoOG3MI9F9nOuEuF2r2ifp+PGyQqZnOsnYYSX2qX3/7XrKsbbTrnZRhT 1M/QM2l2UEdQpCLVAjbqPI7hTTe8nqYSKb3D3lRK0ho6jVF49aOTMJcYL/mvLrTgdCRK BY9YqPCQma2c382XJpGqejdRoM2SCVvSnuY1JB7++KmIurJbnrGn9KCnbgR0k6Em85qp n76Drvjl8SoGUY+VS9FqSfI27P2jg4C1CNfW0inpCuhaOWN06DQOC+pfwhMGzNck7YAb ss3Q== 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=4wdfjeS+QpL+Jb2N8t5tBHEVHLZuIcbp0Yd0aGSbyCQ=; b=wuyYLaocx0dgPHHJLf3KsWmT3+529uLXUN2LK0HsOu2FVqE9gGOp6+zVoKrKAgWjhC bS4PE4UcMQm8n0f4D+wTunexVt9pVAdR9B8t+Ic7ki65LPagOF18+30OJGgFHzA2MygE OTvujycOuOXcpqzYdG32V68K94iuE9DnQs85ZSCZecFmHfQug8FU6bUdK4H426vdJua2 3at/Q/gg68Gof+MKV8nFJvER5J0GRkIgSaz28+AWrdGWXhLx/7pkWlQg1JWIdZTVQvyS +6WUgB8rCeCD8svyy3o5jNT/Bc8r1jao9yIbhJSZIIPGnmK9tBL38rTu43Rs4+Q3UR7G WQ3A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=cb4tQTPz; 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 qw34si7843341ejc.778.2021.12.03.17.10.11; Fri, 03 Dec 2021 17:10:13 -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=cb4tQTPz; 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 4B7FD68AE13; Sat, 4 Dec 2021 03:09:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7210968ADCE for ; Sat, 4 Dec 2021 03:09:21 +0200 (EET) Received: by mail-wr1-f51.google.com with SMTP id l16so9242845wrp.11 for ; Fri, 03 Dec 2021 17:09: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=9inQPiCg/TIaEpe1ZFXqNJRyqgnV6bpeFJoHMXJkq8A=; b=cb4tQTPzhxJF9MbZmQf/MtztVuu3HU8ULkGWYeOd8KUaXW8IA6zMF7hU/TCL65aoyk ZPRZ7NKBOEEIOYaSWxL2UjNuGt+/gaQt5MnwHEcHMfRqclNnqAJbcYCWXgGONHLxAMm4 BCrDWaSksbQEmgLuoZTGsjbYb5k1ashONsVUNjTbTQQ7Q5O21MANcGwMhGWGgmj1GtVV j+QazP6RWuMPUUMYvDt0oJxmpK5O+q0w9r6+VPVA4bcyoKRGnDOy3WLN1XhNtOiq3DYL FEYScw/UDo9Gyou/TNn88b4B+ZEQ5M4OHnZRSlGLACQ7yI9EwUhvNH7yxVLnD3rAHxLI EFBg== 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=9inQPiCg/TIaEpe1ZFXqNJRyqgnV6bpeFJoHMXJkq8A=; b=sQQ28KNhjNWEsw4NmeDHFnF2DlPVCWmGaktlhEtle8BQu/YvniRD/iikNuZwJniIcp hKksmXMuTHT7DTWhwEvpFuqFbkAorBlPHGAN49g5IaiQqN3ACkkg/G4VL7JfZXjB5CWW sf7VwfimeUUJQWEc6Xm/XJ03r/TkzWpXlEr2yzPBFHUCCWe9MGEuCQWJ2+JsaeCCbyDn H5YTbX758W2m8W8khLOcRojRlIuqEvs9le23SnlaSQWaIJYiUbkI8KFtwppbHrb/8Cgv 06IrZf6S6pld+dW0ETkZ/kIhFtPOWU/dZPfeihSA8xjW+T+vIqr6r3QuSZyqEBZ+lqHt kOZA== X-Gm-Message-State: AOAM531jgykCXZAH0QxO+YkNKAgPo+0FXUj/kxpFnoz+dfqq+VzN+3St qV3kiT9XXd7sy7ht4YlTvPN4fetgMZEgJA== X-Received: by 2002:a5d:674f:: with SMTP id l15mr24792594wrw.624.1638580160764; Fri, 03 Dec 2021 17:09:20 -0800 (PST) Received: from localhost.localdomain ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id d8sm3873739wrm.76.2021.12.03.17.09.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 17:09:20 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 4 Dec 2021 02:09:04 +0100 Message-Id: <20211204010905.2258652-5-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211204010905.2258652-1-tcChlisop0@gmail.com> References: <20211204010905.2258652-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v8 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: c/yDPb4k+DSu From: quietvoid 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 | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 38ff90833a..79f7d70747 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,9 @@ 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]; + int size; + avio_wb32(pb, 32); /* size = 8 + 24 */ if (dovi->dv_profile > 10) ffio_wfourcc(pb, "dvwC"); @@ -1918,23 +1922,11 @@ 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); + + size = ff_isom_put_dvcc_dvvc(s, buf, sizeof(buf), dovi); + + avio_write(pb, buf, size); + return 32; /* 8 + 24 */ } From patchwork Sat Dec 4 01:09:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 31952 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp1427431iog; Fri, 3 Dec 2021 17:10:22 -0800 (PST) X-Google-Smtp-Source: ABdhPJzU0J9/GtBUZlLNx4OYOalJALVCO/317vaPZRFQuB8nd5ZbaXXt6e0iR7lUHpagqiCO0s9k X-Received: by 2002:a05:6402:1450:: with SMTP id d16mr31333929edx.144.1638580222350; Fri, 03 Dec 2021 17:10:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1638580222; cv=none; d=google.com; s=arc-20160816; b=Q9L0IsLKR0D0zG2arxI5PGv79jlxhxpP9gSN4xlMb/XffjLmceobZc3xk9vzmtig1Z TLW11SOOT8E3yTG8bUzQPzzSZ8uhChvzKs9zTYCbrZdG4WVDWmMxHYaCuGoJ06WZ1nS4 8S8JqB649XT52rKY16/M/UyG/Y6eLhKnr/6DIv7HXffEMwdJjh2tdJYahxBbdZEufdoc a5Gc++FLrUPF2Ai3MpOAkNo/QT8v54/fKHQIQ+480OVAeYuljwXLDbdYSsIN6HoxbaWB tU8wBf6qvXPeio2CKzbgbRyrma+W3g99FG3o9JW4R2JMwFuqBN/3DWksllb/nX76i2yF ogAg== 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=cV0uriHfRufzIQmaVImys5XtcGIxwGnNxDS292w620GbSevoxbmDi+hfbK07Z6dvsS eOg2SOQGfDOadDG4CZliSPT63uqvsNSgsKpQVUdB/MF/Jxq3WRH5WJNSn3may1QpzY/+ z/B+Suo7h53N3SUX01RbMPkpWplLZb+21WxBdc0tv8CQNULwNV/xNHp98EUVgGuPvNdg 6S3keFWAppBqrac+NzyWlsIalXVyYBYNT0fUYE2tNRYyOpjkOVq+ikDrW8CsMP6zY95Z oSKF1Ku/RdkbuM8FACIfvYP9+y/zj2MeiCbg2opkLNE8JkYAvpXDk4zAckMg/Ngbei+O px5A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=YmtwfgAI; 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 m2si7866046edc.497.2021.12.03.17.10.22; Fri, 03 Dec 2021 17:10:22 -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=YmtwfgAI; 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 5953468AE71; Sat, 4 Dec 2021 03:09:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4FC5968A3DE for ; Sat, 4 Dec 2021 03:09:22 +0200 (EET) Received: by mail-wm1-f45.google.com with SMTP id d72-20020a1c1d4b000000b00331140f3dc8so3515383wmd.1 for ; Fri, 03 Dec 2021 17:09: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=cp9ZzroVj8ixH9Loa/oThd8bsVibM8IK7gy7QqycigI=; b=YmtwfgAIHsud937TJZybVnJqMPeRQBfxhkY5UnborNbnG2QcSENtkpoWqDAI38OYwr gEJUiTeXegIiwBSE9ZQRMyFIXTA46DQk1e8hbXVGC33pdjOoLOI9UFaYhJa24HhdoJnP ++yW8aKTVBxVWJsBze3zjbZMrXDHzFrdYv6qedJnDus8Zan9xEbSqnbvHA9E9dvCM5M1 cu6tapBcNnj5DYw/sCjWHjuF+9ACwiKrF5VQaIuTIafLwhr8SZSIAJgNuPpVTSmgqPdx +fM+dGcLqRXsCs10OoB3qLz6Qc99BMvebBh0E2xfU8CnwAmSD6zQDyPZWGLX3n4Q5XjX r4Gg== 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=J5gUqsToZD32tzeicCks+97Kj9ZwYHpb+cmjZkooYXT0pFcEO4Hqcy/rNtAOy8ZQW8 dkS0ET3QVxvW3BkWAaTBT37EZsAt0O6h/THtbbH555zV41SI0rim+QZnAbtIzQ3a2+Vl yQrmBNAwdfYPY+WFtRnbj47VE32ibAW1Mg7MUJiKiInnf47V4zFwZLY1pBvpP57o6paj 6L70lg0/4DFwjz+zAgRfYklMfEHHb7z5dR8BusCrgK/uNkGUePQVXr2j1osarXkOt+67 hLMrYQNxZlj4nNgAZs+BRpYy+xbqCvcuijhgjT4xPw/slBqsC2j7nFyL0f0mvuil0NoQ cEXw== X-Gm-Message-State: AOAM532B41iGy+ub6BuwOKJdXLx+7AvekiP+U5ONGexZKp2V2D/g0dZN oKY7zoaipOVdAAf2d0f0tB79XfwOyA+zCg== X-Received: by 2002:a7b:c084:: with SMTP id r4mr19735740wmh.117.1638580161328; Fri, 03 Dec 2021 17:09:21 -0800 (PST) Received: from localhost.localdomain ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id d8sm3873739wrm.76.2021.12.03.17.09.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Dec 2021 17:09:20 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 4 Dec 2021 02:09:05 +0100 Message-Id: <20211204010905.2258652-6-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20211204010905.2258652-1-tcChlisop0@gmail.com> References: <20211204010905.2258652-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v8 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: lzNey3cBLJbD 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]