From patchwork Sat Jan 1 04:16:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32980 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp14457928iog; Fri, 31 Dec 2021 20:16:46 -0800 (PST) X-Google-Smtp-Source: ABdhPJzNn+yiBTGjHeh9ntVMGupTEcds20vkx9LsTFETpVTCF9dmpoTHysSUN7EpCMbM3LsIbBEk X-Received: by 2002:aa7:dbc2:: with SMTP id v2mr2735179edt.59.1641010606034; Fri, 31 Dec 2021 20:16:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641010606; cv=none; d=google.com; s=arc-20160816; b=CWrkaF5xVv1/pESAx38rABD8M/ZaNkridP5lP16Tb65Fka+/suZKp94sH8437drXOq YUWLpI3hDTd6M5ISEIwd4bNYUlxFfwH17/1Ai3J0RpHtf5EyGhKhbsBusvKT6Dpru9tC T1bP0wKCHS9B8WwQiIOWdoyZZA8Y8cdATKgYy+hVGhWBQtrkh7Aw/Bhwv8wQGXNyyzNV t+Cx5LAeDODB1i7uNcPPv8O7CkgLvMCHRf0P1hoBcpyGdAGFylk+SAyrdHhrLsLKxh1N 9IR4uZmt6e/joaLryDEK0KsbHvBqzS/5D0gBpldLtb2YpnDLqyBe7qKlXLNND77o78/2 dOow== 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=aleYXpNoZaGh8N0oF2t50oH9JVm3TpJ6z8w8ingCPXJFAmG0dkZxPponS2j24eGGbb adPJPr5aGKTsamcYa6+OdLZgz4OkLEbUWEo5bz/IGnjl62P+fWMsEulnRwfjD8+glPz5 FIC1i7m/MGaLhVDDn3dC1kYb7nmA8rQolq/vk2TekaRmHeZXafntNwayD/LNAd1pW5wI k5arQNHXccYcHQcdgGBy29wgySeRZfPwIUA0bwbwOefbR2huS7KzvGFKZAGDTbb+5vTK XlpytWak5rmRYJ6R1NUMDyNwWcaowPGGoOtQTmIgMl29fyf06YEdBpmv1zoseUCkA1IU a3ag== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=HfWGLnIF; 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 hr40si15916808ejc.598.2021.12.31.20.16.45; Fri, 31 Dec 2021 20:16:46 -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=HfWGLnIF; 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 A6E2868B0AE; Sat, 1 Jan 2022 06:16:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3929B68B050 for ; Sat, 1 Jan 2022 06:16:25 +0200 (EET) Received: by mail-ed1-f48.google.com with SMTP id x15so114674642edv.1 for ; Fri, 31 Dec 2021 20:16:25 -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=HfWGLnIFfAApHDHEgxuAb6vE0dvHApQTLNKyMo8dpFQM9RjzYvZJj8OMLl9luXmWmv u1ChzhPHxIqCSq8lPk5nD1fsyschhNXIunVST+ebOKagj1IBtoi552PU/Rd8Z4FGIjfY 9hAKLIe8mdWTWuK2wLOqgWAuoYwzLjJuA2awne2cYZurUtLVTaoEnHTVOMK/8hmrQOrG mG8aj+FKzbUrCsmodrtn3JgCoxhmohdoI6+PqPwQO0qb1iN8o7KaTTx/mZfSpoCcEYAS hbQ5pckDCJRU/zxTkbw4PjzsP7OhrI49BznevWcn8tkZ9jo4hJo9M1pAKdGWRrZyQO8w U0uw== 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=in/u0VuY6/m+q3waMYr9puhPJup9D0vNNKTRdQPY6/RUFgr5f5W40E/bYXNIcr7MAn gh6z5cubWU3hmfI0ytINVyLLn8dXfaWybG20JGF3pSjNYwGLhlJHrwQ/Ks6yFtr47S1n eu+8RqQAsTy9VaQJyD8OhBfDvcJAZ7R7kdsW6f5PRG02k4Mpb5ZuH8wOte9iU1yp1Vnp SMOiYvWxG3ABOF+QBcO7PVi/e6UYodwQO7wBjeuNyrgpz2lStameM6PKk97r5L1mQceP LX3fQnAs3DWng/GHsTfJNm+mKeXdluxJ0fq0WV2QyNQyBly8cMUi619RSvJsqJvemK5u YnCA== X-Gm-Message-State: AOAM532IyU+2JyT9pB2VWrKtO6JAWqnHWF7cVTyES+d35TKHvXHI78Vi ZbkRXX5sDRy2+EKvRugrNaAqA2PS6do= X-Received: by 2002:aa7:c4d3:: with SMTP id p19mr4552775edr.186.1641010584481; Fri, 31 Dec 2021 20:16:24 -0800 (PST) Received: from nark.. ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id z18sm11272075edc.76.2021.12.31.20.16.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Dec 2021 20:16:24 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Jan 2022 05:16:17 +0100 Message-Id: <20220101041621.427012-2-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220101041621.427012-1-tcChlisop0@gmail.com> References: <20220101041621.427012-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v11 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: j2eYtyG5nBFA 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 04:16:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32981 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp14457988iog; Fri, 31 Dec 2021 20:16:55 -0800 (PST) X-Google-Smtp-Source: ABdhPJzcwTlhNiQWzcK5+Mvqva7F+TTcvjckhyFtkEsrXmP8FXUxYDZKHiIRy4iEqkXIv5uhSvw2 X-Received: by 2002:a17:906:5948:: with SMTP id g8mr29820931ejr.4.1641010614875; Fri, 31 Dec 2021 20:16:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641010614; cv=none; d=google.com; s=arc-20160816; b=A4Pr82xl0ENGP0afo2zFMknJE3x+apJOm90EJ31Z46MAsNvF0OcfnBo0qwtAKEN67i NudQGXgD1BNRwkA2XnyK9DwScYuZiJmKhggGZepsaXcXAdzy7MCzG38ior0K3MEgE0Qo dl92uJ6nPKKV/zw3SH0nQ1R+n6+gCUXbRFs8/OpcEdpB+Na8+0dDgBb5u7IoW5ZEgOMm mq5JKOr6C9Vj3sKC3dawhZo4qJFDyjpBtEELddtmXYBf2p/fJalBWF8khPAVYbPRV/PD eb2bqlLbLgJuibHtrJqZiUNKN3RKaGQnorNnyHOCnJFZ58hp58kW4xT9jXy9+yF6LMs/ o6Ng== 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=nLClWKiPrzghI67pd/1wP7LhZfMq1cMEa2kcy/N2vrLK4M5QkddX9kWYhY1f/H7kBv HlvCga9hqXC3iDlf/4dv0sZMbCHEOOKPf7S++6gHTGYbULNFjS3DrYCDU+Tv63zLQith KFqWtyiQRl8lexceUfgb/9JbNgua9bgYEjc7BdGpfXUAE3XKJoWNyYta8/NZtP/Ly+zW I4X2SYgrbdyVJPgCMw1GM3pQto55wDtQJxamBcCyrcHlcaA3gzY2Wblkh50dspMmgGV1 yE/GmVb/ftYVVf1DiG19XHdVoDg441uuXrz3HiWA0mmNRMRjA6xJ443bfQFrOqN7cRJN IgDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=YENitaec; 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 dn21si16694882ejc.45.2021.12.31.20.16.54; Fri, 31 Dec 2021 20:16:54 -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=YENitaec; 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 D94B268B0CC; Sat, 1 Jan 2022 06:16:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C6E1B68B050 for ; Sat, 1 Jan 2022 06:16:25 +0200 (EET) Received: by mail-ed1-f52.google.com with SMTP id w16so114592788edc.11 for ; Fri, 31 Dec 2021 20:16:25 -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=YENitaecx1d0eGHH7MStFjWHvE9Li+SiZVIEzi8FXISNaxn68lnkarYQyCs1dP4dYs Akt+IdGZKWhrBczpbosgGxVr2EF9svO7iuy4X/GoU9CQoGcagkBGDD39EI+WjCfUIBSx ICPSjNQXzRe0eWq+qutWeJbCsTXHo9OLndBsEs7pyApOrZUMRHVGgZ0FpNlbdsCB+428 x/Iu/dAb04g/KXm39pe+JWeB1O5dAgFLRn3QNDm4oNrvEzMjygjfOSXMFFfq6wA767Ze gVrPPsAKm7wAoFpmgLXmJeiAXAPnHKSs1hoB402L9e50nHH9PGp6d8jB5FzVQ/2rSQHP w6+A== 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=5GcG/ApeQjnCMyVQL+1jPiGwCc15YjcKWBeQS5rZ38XlFiQs7ytGxKgpznthcX+0we RKhmHCeLHReOZmomVzaV1hb14QNe6JSYSTK5qwxIJxFrsAiEDMoQvhV+tJZvfwBo8g/F TPiYIVcog/ir8bCRsmV2UwGPFWRQ/tF5NNrkqmB2BtACNTFSb1pmB6PZbIUk37qhZ3nX YS1izA5MJ3gJcfchGoTUoDP43ZJK7mQmY00mCe6C6OXFcKQ0vSpDWvMbP0BPc1vgU1Vd OFbr+b8ZvQDkCLLFEbGXHta04aFVz+Gl5ky4ovUl6fJujIIFZBcMeXX3qmwkqnQwSVHc 52eg== X-Gm-Message-State: AOAM533AZrqVq/5JgCRvz7y8Ut5G6MufrAvgciAutTwMXo2PICR3VXQm jytKmPW1k4RfbcU0r64EjMWqQXMUGUM= X-Received: by 2002:a17:906:4918:: with SMTP id b24mr29244737ejq.466.1641010585016; Fri, 31 Dec 2021 20:16:25 -0800 (PST) Received: from nark.. ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id z18sm11272075edc.76.2021.12.31.20.16.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Dec 2021 20:16:24 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Jan 2022 05:16:18 +0100 Message-Id: <20220101041621.427012-3-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220101041621.427012-1-tcChlisop0@gmail.com> References: <20220101041621.427012-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v11 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: BeNRnDXfI9nq 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 04:16:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32982 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp14458045iog; Fri, 31 Dec 2021 20:17:04 -0800 (PST) X-Google-Smtp-Source: ABdhPJxn9xY/8y1bDxxGiXt0KmVsUnIDxDH71gqHezb5bImCJmianAlc2IkEbgmEtAdRUTKD70Zz X-Received: by 2002:a05:6402:2707:: with SMTP id y7mr23364564edd.256.1641010624521; Fri, 31 Dec 2021 20:17:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641010624; cv=none; d=google.com; s=arc-20160816; b=QlqpsOPHaH8nlT6VTq9shmVstnGwPx3HRxpDwSAoJyqqkl3wFU8wxJ633azpV3jTyh jNpw1V/pYl/683uAnn0ofo0AC5MYadS9ipaHU8VRGDMAN3Sv8negnlXpAkC8LVGBtgaQ HnkHPaLqT0pyl4L/DMxOg82kdufjV9k/+GD22qfVc6MCB8AQ91yyrMWeHnUDbaQVb9Kj 7MDlOtQ1widv/ND0K9wnASDEpjiOZ11G4TrwhG6fG5Km8VZQR7wedgDlTpK23IVKZaAQ Kt13QXvg5txkKwxkM7BPBJMsOT7GIl93dJ8Jyp4E3vMkBO9OAum/mDuVkEYSZuzoJl0z hijw== 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=wiPbus9rfqgyBxEh/L9ZEwUqCOtWDmSLNZhsLPhBOqA=; b=cLi0CYd2rTXAhWuLpi95optr3GfcobQiDiFHcdkFcmx7Uv3bQcZqfXwyjrguqr5YDx fOshnute0SOsV46a5GPiar7nud3PAoImJEwrH3hYl8yjO+cu2x9O2QkpO3zbQcJlDFKZ fpkqTkBAxfdwL8kWqO5hnixB10tFMyELE4o0zVwwQESsQoBSQ5nwYVP31vKJMhsM0JAq FzceweEuvW/bmLtgoTlzC6VnWb5ixHwr9AWPTajFguKwBY0GTH06h8QI0b6aTp604r4P aTGVkBgehD+iCq+M0XDdznmToSNukceo75SG+XizSZSYVfUvnEHq2u0iZvzz36Go+mUq J2dw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=k17Z0lca; 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 f5si15063233edr.342.2021.12.31.20.17.04; Fri, 31 Dec 2021 20:17:04 -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=k17Z0lca; 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 DE1F368B0D6; Sat, 1 Jan 2022 06:16:34 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 457EE68B0B3 for ; Sat, 1 Jan 2022 06:16:26 +0200 (EET) Received: by mail-ed1-f50.google.com with SMTP id j21so114423628edt.9 for ; Fri, 31 Dec 2021 20:16:26 -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=J2TonDZc0uDuastphZzxhV7Hlaph4ViYDEJN0qMZoN8=; b=k17Z0lcaaPpfS0dc1+YhM3Getw4fVBW+Bttryf4304sgI3xUJ7SrNlYJTo/QuQwh1D S2y+3FRlgEdSIHh2g01JdXnQk4nuBUXJI7iKXs0fv5M7j7fb8CyweGg4wrqTdbun8Oi+ 66Z8nuJcUB3oADmyqrQcSQMvBrLpvh7ZBEd2vgoaqlwL+EtX6CQxzDHk8Qv72SdJiHvb r9KPQtWkbd3ATSGdaDMuCvTbDvwUHBCnD9v6bapmG0ezFkKy+SoWDE7SDYXXw4SeASe3 xWtAPuEqNsKjJAeYsoQLNZZbrWze34SVa948EMqQW11EdttVPYNWzbWswBFvGMV68Qc3 8w+w== 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=J2TonDZc0uDuastphZzxhV7Hlaph4ViYDEJN0qMZoN8=; b=Hjugr4j6Lyc9Dz7PUTUM3QchZhiPnvJi891iKACM62y96ZCpp1d4e2sjaaU9lJq2Na ZG49OGmwqO1qboXmccbTbwCVWpdZmMohSrbFA4F0NenTxdla9WSK7HDXN2Tv4AqT5ADc hajrZI80ZiHT+xDYE29vI35TUyVJq4/6mWP73Fc7PXOJJgC7Co0MmN218pcPRAXDmkHM vpOqJKe0AYuZwJPN2l2vbGUau13JwqVe7lspR1HNaliFzswd0aDJZu6OHmRCBNytGzRZ 5x39Qq4Ks8HXPtrFWvRji7my3OaWeoOpzmcW3PUwnq7ICzB+ZFh/4vDdJUj5EODjqUDc ukqQ== X-Gm-Message-State: AOAM533ObWoLxETdSzlfDPU/qgFoA1tpPNeUyLssDkIVsk/8VdjzDq+U Plfjf3lxmk9w0NOeqbyVT4RxOgUK/AnxiA== X-Received: by 2002:a17:907:8a04:: with SMTP id sc4mr30281434ejc.508.1641010585573; Fri, 31 Dec 2021 20:16:25 -0800 (PST) Received: from nark.. ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id z18sm11272075edc.76.2021.12.31.20.16.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Dec 2021 20:16:25 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Jan 2022 05:16:19 +0100 Message-Id: <20220101041621.427012-4-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220101041621.427012-1-tcChlisop0@gmail.com> References: <20220101041621.427012-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v11 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: /Y7svO8fbu6m To avoid duplicating code. The implementation in dovi_isom is identical. Signed-off-by: quietvoid --- libavformat/mov.c | 50 +++++++---------------------------------------- 1 file changed, 7 insertions(+), 43 deletions(-) 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 04:16:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32983 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp14458116iog; Fri, 31 Dec 2021 20:17:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJybYlcDpI+wHaLJu27m3vOwsyq56+TgGlhS2WB9XBZhGDAfkoCmCai8mfbeX53RbMtj6fHr X-Received: by 2002:a05:6402:292e:: with SMTP id ee46mr36087560edb.222.1641010633575; Fri, 31 Dec 2021 20:17:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641010633; cv=none; d=google.com; s=arc-20160816; b=qldoG9j5esOtjX9tkStC0dROklpt4HSf3SO+gAoD0hPsNXfkCFy0HulbzhecHSsY2T chXfyjD1DpB5xsoTRaGMRNWGq+26cwhnkuMfhHWN16aZD50vcLgf0ln9CGMltfkgKvXd Wpf0oY66bBuhrZqMECgTXHgSfsIDfW812Q9oWdNlzdpTyDU3kgu45UdaztrWhTlRJ0aE mmkz8oehavQrFqsxtEjnnHNYZQ75VD2MrJPaqx2ATTGNSop2pXG+vXWvm+R+akDqTYJw vUSVa3AGm6Z+s5D9whOuCTN8Llww5mql0jBVLmvXvXhaTo7FaphHxCruOJ13fH1Kswah u/nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=RBeakLvmP/jA4/L0l94u19OMipzocuVWNwn0/XY6/t0=; b=S1zY96zybXg+/t/9hr6+Wh5crAvtpcblJp9eSabltWl11HFu9Ij75kPn9pmpB8DZlu Xm9VseB5rA27KLpMO3D/05mplRkDC9LtLm7HsYV1jjuDqwC/KDylO1eqAM+qppIhluxI 560/zzssKX6WPqgF9WwXPBBAUkvCnVzxOObh2L19yrH75sWFCiNvIB+UTjsKgcXDGyTC 9/+nMPbbAdnloWNny3cLZr0Nb/1IAAm3+0E3dHRPgkiVKOKFX9XJr8M6SDgCBNG7vj4j 1oZl6onxidz1vgiPm1YJhsAGzhG5FNYYOAEPJ9i/uJyJVF4X/QwaH1XGIW8Y+EkUoo+g wBPQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=FVSfImwi; 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 sd26si14427026ejc.683.2021.12.31.20.17.13; Fri, 31 Dec 2021 20:17: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=FVSfImwi; 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 DAECE68B0DC; Sat, 1 Jan 2022 06:16:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AE06668B0AE for ; Sat, 1 Jan 2022 06:16:26 +0200 (EET) Received: by mail-ed1-f54.google.com with SMTP id bm14so114553109edb.5 for ; Fri, 31 Dec 2021 20:16:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=t18oN08m/ZUIztIXRhz+vMmx7LZSaDSOY8dAKJ1AW3Q=; b=FVSfImwidVMF2Y0xO84652jhEav2tkpLICco/J7Y5UomhWaIOCu4UKk0dn+1RikUQ6 PxZAfCBdTvnfy4HePp79Fvl2SapnAuv6keHRRM+vY1zmPN6Ioyigfq3I7lU1QafDSWGp c3s7d8JiVH1X6SAbesQjS0zJILxsYvzwXX7IrTIsAYwaJTl+FfcrnsH8YyAx8bwkI7QS K3c+mYeVVXY1D6edPslnu1Dg+WL3TzS7wq3jGj4w/NCP42UDZ6MJrAjqSOredx2TgDjm Forh7301vYuqT7M4UQ+IHVknMPPhLJBbDyirN2KpECYytJnXurx+bmU50R9pXx1Zj2tx d4fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=t18oN08m/ZUIztIXRhz+vMmx7LZSaDSOY8dAKJ1AW3Q=; b=7JYjLeFGdXYTtdqWkg/QBiwYLPIX8j5LXCVtxTj9v3Bbnmk+1Up0MjUuKrDF8wrDK3 /BH9txA5J9ix9sLXi7PlsaVdx0SBvVaSip1TdIC+wTIUEm71KQOozK86nxH9X1oJ4luw UM5mmBe6HcmcRTKVxerutwzFsaDUA4x9q+M0NIoM7sq0I9Yoy17+puxVhGtYAjpsl2j3 BI5pmklLx8YGo1KpBEWXDG1LNFGqsXT682WBLp4JNuNuKQd+KUiT4jpTscFu3IDBKU2i YhwGwepf5y/3tedbnCBngR0YatGcz4cy0zuDnq88TsySo9dLeo+clel+c+1mKos0sM2V Ofww== X-Gm-Message-State: AOAM531TYHt2+55X1soknbyW5jybhOLhgb57DoPXprx/VZ/bnVW38Ca4 aQ/MsyBFukl0J9GWv7WbQwhmQJ+xFJ3Vbw== X-Received: by 2002:aa7:d0d2:: with SMTP id u18mr35611750edo.14.1641010586084; Fri, 31 Dec 2021 20:16:26 -0800 (PST) Received: from nark.. ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id z18sm11272075edc.76.2021.12.31.20.16.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Dec 2021 20:16:25 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Jan 2022 05:16:20 +0100 Message-Id: <20220101041621.427012-5-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220101041621.427012-1-tcChlisop0@gmail.com> References: <20220101041621.427012-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v11 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: 5fsTNCCTyr0i Improves code legibility by not using bit shifts. Also avoids duplicating the dvcC/dvvC ISOM box writing code. Signed-off-by: quietvoid --- libavformat/movenc.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 0f912dd012..f1fe43a79f 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -27,6 +27,7 @@ #include "movenc.h" #include "avformat.h" #include "avio_internal.h" +#include "dovi_isom.h" #include "riff.h" #include "avio.h" #include "isom.h" @@ -1911,6 +1912,8 @@ static int mov_write_sv3d_tag(AVFormatContext *s, AVIOContext *pb, AVSphericalMa static int mov_write_dvcc_dvvc_tag(AVFormatContext *s, AVIOContext *pb, AVDOVIDecoderConfigurationRecord *dovi) { + uint8_t buf[ISOM_DVCC_DVVC_SIZE]; + avio_wb32(pb, 32); /* size = 8 + 24 */ if (dovi->dv_profile > 10) ffio_wfourcc(pb, "dvwC"); @@ -1918,23 +1921,10 @@ static int mov_write_dvcc_dvvc_tag(AVFormatContext *s, AVIOContext *pb, AVDOVIDe ffio_wfourcc(pb, "dvvC"); else ffio_wfourcc(pb, "dvcC"); - avio_w8(pb, dovi->dv_version_major); - avio_w8(pb, dovi->dv_version_minor); - avio_wb16(pb, (dovi->dv_profile << 9) | (dovi->dv_level << 3) | - (dovi->rpu_present_flag << 2) | (dovi->el_present_flag << 1) | - dovi->bl_present_flag); - avio_wb32(pb, (dovi->dv_bl_signal_compatibility_id << 28) | 0); - - ffio_fill(pb, 0, 4 * 4); /* reserved */ - av_log(s, AV_LOG_DEBUG, "DOVI in %s box, version: %d.%d, profile: %d, level: %d, " - "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n", - dovi->dv_profile > 10 ? "dvwC" : (dovi->dv_profile > 7 ? "dvvC" : "dvcC"), - dovi->dv_version_major, dovi->dv_version_minor, - dovi->dv_profile, dovi->dv_level, - dovi->rpu_present_flag, - dovi->el_present_flag, - dovi->bl_present_flag, - dovi->dv_bl_signal_compatibility_id); + + ff_isom_put_dvcc_dvvc(s, buf, dovi); + avio_write(pb, buf, sizeof(buf)); + return 32; /* 8 + 24 */ } From patchwork Sat Jan 1 04:16:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: quietvoid X-Patchwork-Id: 32984 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp14458185iog; Fri, 31 Dec 2021 20:17:23 -0800 (PST) X-Google-Smtp-Source: ABdhPJxhbk9QRuAEmNSLosP2GbrapWZfGrNChEytbIzZi4PYzXKEnOB1FvLU8d806ZwxUgXzBNhk X-Received: by 2002:a17:906:478a:: with SMTP id cw10mr29622903ejc.693.1641010643002; Fri, 31 Dec 2021 20:17:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1641010642; cv=none; d=google.com; s=arc-20160816; b=eG6c5TrZ2YtE4d2tTf/IamoEA7wzgcqxfIh78f70z9/E79jh0W1A/bNSvljg4JJL2X xn9kTKz3ewqt7day/uJY48nsHb5IUe1zFlXvTk6K9Zoq3jB4ZsCU/l9ZRVK10q4RVkBo fBjv3xnzlJN5AXz2FOPRgDOq9x0R38Xi0w35dFqRoBrwazzTUQ5DsA+r94LCk2XJdl3p AeQxpYMmpG6brRKJGZNZzYOafykLe7z1b3nIEs9tix+oAfyJ1wzsHtQmVqr42NdAAbsM atrScphUhFIDfTrDaz00B3vTkrq7cp4cTsIz4IFAwPOF3kjqltz/arC0Z6p0RKegYWPY /o8w== 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=JR9PWfFcOOXCcNnxut5NlOnemciPykhuwEN1l4XnYfgTVoiUjVkjcZICXLnHKSrms3 fqy/nv6ztiFXianr2Nu7okgZVD7wgPztplC5ZD1bBtsUQa/AjvYZ8yyHpME+529EW/k9 kKdMmL/9cyH3m9+Qh0qARg6rEW9c9pLHsPILOR7IQmkkmJ590AsoDl0blOwPz8vCL5pA XKtfGdgDY9mmZKC+OFiIUB4HDAcCFY3FrT9TFXKpV/wYV5bdUxGf9KqLY+/TL4GGaWH2 UFQmvMFOy4ude367FeaDZdO13q5q6AlaTVTsBfdwsWkhu+4hUxhVk3T6l63ISKlqoH77 W9xQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=a61OZnvQ; 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 ee41si8258223edb.493.2021.12.31.20.17.22; Fri, 31 Dec 2021 20:17: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=a61OZnvQ; 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 E0E3168AE10; Sat, 1 Jan 2022 06:16:36 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 790DA68B0C2 for ; Sat, 1 Jan 2022 06:16:27 +0200 (EET) Received: by mail-ed1-f53.google.com with SMTP id x15so114674871edv.1 for ; Fri, 31 Dec 2021 20:16:27 -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=a61OZnvQ/2iRcAsGC2JdwBCkQwrj0RFYY1dU7fmZErS4ydV1Urh7nvS4MMudVDgr9F IQ0m4p5I8UIN8v/At8bgUbkkReEwAKSRNRZxVbVP1kKMlCEOWvkwa2RlXYYQZvBPZzEP zVCaY2gP68Qa2wkqbbpJNvsHjFtBYb5LtL9ixToRjUs3Yqq2G19z14KRt2RcTw0fGSUI MB4yKOzVtl/3io8jzmzr/p0cPTOEV2gAnakYjkQ3JHq9t/ow298FjxTwHg+JujKQmRN7 Z5hh9StIuzFDSvxh19GTf5AnD7OfevsXTt/9UJ45buOWEA4cK1gAsiiixBW3f0QHz3gM SLaQ== 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=eT/Wl1d9tectjawHPZxqAq7MCmDtqKHIPmr+1Uth8o1lWubvMbRWqy8TBBLG3TAuVT zujpmxXtkxzJZD+J4WibbjAhrywGklraGLyx5dYefEIE/Gf/vBlnYdwC1xBAjnZj/52k Tflc3kT5E2Fsv15g923R1zQ7+cGUxAyU+95cPIfwwh6BIDH2GrJkPgQSzZvWR9+Fb7OH b7lGQUWju2W9qKgaz6gS0WM+xTWWIbxkQEprwlXyK1JTEsv+DnVlLHNMoPBE42RIy1Af P8y8v29MamlnTmV92JPz5jDXULaRWIPkBya7oUtDJtTDMqFpZB3AHy1LykFtP3TJFQGD ZGUg== X-Gm-Message-State: AOAM533DeIsFtz5cq4sxE4YKrs68xuYNZAaSPP9MfHuzuIVRYLs8bpif XYeivtykJ7zb+zSuf+8hmdHMHwSRv9+4Ng== X-Received: by 2002:a17:906:7945:: with SMTP id l5mr29965284ejo.82.1641010586589; Fri, 31 Dec 2021 20:16:26 -0800 (PST) Received: from nark.. ([2a01:4f8:162:73cc::2]) by smtp.gmail.com with ESMTPSA id z18sm11272075edc.76.2021.12.31.20.16.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Dec 2021 20:16:26 -0800 (PST) From: quietvoid X-Google-Original-From: quietvoid To: ffmpeg-devel@ffmpeg.org Date: Sat, 1 Jan 2022 05:16:21 +0100 Message-Id: <20220101041621.427012-6-tcChlisop0@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220101041621.427012-1-tcChlisop0@gmail.com> References: <20220101041621.427012-1-tcChlisop0@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v11 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: A2SvanCdLDuP 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]