From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 5E90240EC0 for ; Sat, 1 Jan 2022 02:16:40 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C5C8F68B087; Sat, 1 Jan 2022 04:16:37 +0200 (EET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2064.outbound.protection.outlook.com [40.92.90.64]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CE8F268B070 for ; Sat, 1 Jan 2022 04:16:31 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ap5zDliy8A1XP9IKxQCLcRsWeij8Qnl5rP5QDPN0t2S59OFfLqiEIfCMb78Vqwgq9KXK7zKfY/kC0PhV8fCDvXgejes48zUMCuPxV16lofUgkqtwa6Ob+qW9cvdNRNYePD/VL4WNIu11iGxNzhSbDdhnl/5DYCuD+/wA0fA6fJGQRSBi0HD1LXqS7xj2BqZagc6Z4HnJJNvsWVsP0b2UlBnBymyqt2ZMAmz0Yf2F8OEM6p69IrDC1U3vAVnO1V11JIe3g/SX9AsvmBI2HkdcrExkgIkSS52f6fkT+tRbr9NaTlE/dE8VnTi0G0NisaEuIZjGURioGsFFrR7jyGeiwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=8KzHcQEFrGr3oSNxlcBPBF3q4m/0UM9Ba6CcvDqXMrs=; b=m4nq8FX/xBgQGwBcp9+YQ4XG8vfEMKkZLmERiQH4Ol9V8ZkzCwGEr9sAw2A1+pDjmlf8V2x2OPVUU1PYHA27LvNP3MSybHa0EUV1c4+Y1T/7L3tcSFOZIW8rLNWwKQOBouurlDlytFGr1IaIPBtkP8WJsIR17+2Tw69kUlEIoNHPf737OuJ0BjaDm0FjmofXkjE8a7nFaFYkrWkRwAecmI1cLfeviWlsUXkEBY5Oig35eUA2/NHR/1DDxNp66ergy99zL2ssaepwbl4VS8TmQNbqHJHOHAA4KzJwf8nJXREFuUk/dGbLUxNQd6RiBEXGi55hJ8ntHuwKsmLw81QR6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8KzHcQEFrGr3oSNxlcBPBF3q4m/0UM9Ba6CcvDqXMrs=; b=pGprcHGGI/7MFHsHvFvrgMDiVHc3O/n35q285uclm5XVI2bOU9zLROW3G236PsoLC3NW3Yq7ieGoqZ4A6/t8uDW8Oc436WcLLgQtWOPzdiRUrhiMiBA+5KPfxytkyRC5RTB84UuCrl1XnJwnQq78eqDkdooi3h5wN4BJ5OjcPaqo8F67TRJ4r6jkQlWXIlDxUnI3SGRIUoZWuzSM8DgNNScYY15crbe1+JtchMDIydCl9gOUGnlSJ4eg0JxMf7gKt6KcTB2F/uhZasR7rA9XlWtKGGL8DLfs/y6Bi4U+sRj2PNA1fxM7ypfy+1RXzyIkQKFKtug+hJCOAHw/mlwcXA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB5444.eurprd03.prod.outlook.com (2603:10a6:20b:cb::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.19; Sat, 1 Jan 2022 02:16:30 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5%6]) with mapi id 15.20.4844.015; Sat, 1 Jan 2022 02:16:30 +0000 Message-ID: Date: Sat, 1 Jan 2022 03:16:29 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20211214153001.2610297-1-tcChlisop0@gmail.com> <20211214153001.2610297-2-tcChlisop0@gmail.com> From: Andreas Rheinhardt In-Reply-To: <20211214153001.2610297-2-tcChlisop0@gmail.com> X-TMN: [CUTyGCtpQY4cbPDbAII1xzO8oKhbYprQ] X-ClientProxiedBy: AS9PR06CA0123.eurprd06.prod.outlook.com (2603:10a6:20b:467::14) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <9c044164-3259-4600-269a-9d826b028e6c@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0ad1edd0-7f8f-4dd3-96a2-08d9ccccb90e X-MS-TrafficTypeDiagnostic: AM6PR03MB5444:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XnXk9i2oabRBkdh4MBNxDfJYxsKQ29r7p1sfjWYpwBafxaj0dbZw55gYxjYWcvyKB1FINmhzTwAte7CMDh5I8KQXlQ8mny8q/TaqWmaj8nYdbiAADdw7LhbS0IO/6cjgwFp3BXXdONKpXUzTBtuRBbJR9SwBw+bs/LOeU3XyBoNU92gs64UbO//GuZHARyGntIj8Ybo72vAlvCyrmVxsI9bEcFRdKYIdoaipp/Ile7FfKm2POj/ZIVtEUJUmrmXZvaS+xyE1ru4XTUFteDAQKl+9yQSJGhOJGqyV+EK+XZONStLVJOQfoNY/6eW/wJBJRmMV3eQ05mxJRZdO/0EkDeP8Y9A+vNsdElk1sH8CTeSp6FKqWzR4Cykdms3xXfA4Zzy+FMveiRHWYpPkNl0XRwkGlWmz7CMSY0strRYvvrAdhKj85KunooNLifHBIJ+bmauMNFviR5ic6dbn6LZZgWbVUSVrBZPzcTPPbgxWxqhuU7sZvLg31izqnq6fVkaMqXfpP3ZkvxjwmJBpXa0/zPhEYOU6oOJatHb28ySRfH09cni7ZJQ9MnwQ8DAM3j+1LLRgbgs+75yYn90FuyMhGw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Q2ZnU05CcmtHVm4xWGRZT3F4QXBxZUo1MDY1Z1JzRmRqQ1pmWDNyRVQ4eEFm?= =?utf-8?B?SFRpb0YwVGNWVFp0bUNEeTJnZXlNNmdxNTV3S0lMMGZlYyt1UWlXeU9jS2ta?= =?utf-8?B?cnRCZG03ZDl5dlExZldCTHlEZm1OckowZFdxREhnejdMc0hlUmxMMWM3ZEJl?= =?utf-8?B?QTNEUlVLZFIraUFHVnd3SW11Z1l6TW5MdEZFbFlGenAxTjI5aFJLdlJjM3hV?= =?utf-8?B?N0pOTUxxWXZSemx0d1JSWmhNOCtMYzhEdE5MRVYwMmFjT1AySUttRGM0N0gy?= =?utf-8?B?SUthbkdLb3M5aTQrNGJFY1RQZDlFZVVqTFZqbDE2WjRkWU9wUDZzNjhuUnZV?= =?utf-8?B?YUd4UnRLUG9iclgwaXY3UVI4eDk1Ujk0OWJZSEd6VmZTdS9TbllraVlYWlg2?= =?utf-8?B?bmRNcjZxVzlRcjRuWG5xSGF0eG1hRmt0SjJVempuRlFEaWFPNUFnN0pFbXJn?= =?utf-8?B?L1RoQjVRZHBJS2VuWDkzTXhkRDV4c01JUGlTa2o2blZFbDdwY0NJN213VjFN?= =?utf-8?B?KzVuNlAxTTVNaUdJWGNkUHFZd1NYUWtwR0NHaEtxbFpqVmtoc21xT2tjOGlP?= =?utf-8?B?MXRQK2F3VEcyUUZhWjkwL3FMRXdzblc2UEtZL0N2YkdyckMyOEZaMTJUWHh3?= =?utf-8?B?RCtRYTR2bE1raWljSUtmMFAxYXdJNnkyM2p2T3J1L0JlQ3FGWUtsd3lJR0pV?= =?utf-8?B?azlKSzJJYThPSzMzOFQ1N1BLWDdOQkpKbi9tYlJCSnloODBFUGlEUDZQYlhn?= =?utf-8?B?L1J4alRZaCtYZ0Z3TnM1cE94OE5nTzBPMGZoYlhKNVdWVE1Jd2VGRDdXQlpr?= =?utf-8?B?emtsY3pGaGovTldFL1lNMjc1ckMxZXBCUm9XcUswVGFLaGZjMWZYRVlhemR1?= =?utf-8?B?YUdLYnorYXFUY1pNc3ZJMlpvNjdRZkFwWTJWcTFXTWpQQ2dnZlptT1pOOUY4?= =?utf-8?B?Z3JwKzlCS0lzemF5aC9SNmdMQXpJQnRROVlGZCtpS3RSb1pCMFc2clpCMk5v?= =?utf-8?B?bURXcnZFRWZGaUdQWW1TZFRBMUc4YnF3MnFnMlBkUWpCbndOM1dJUm8rbXhQ?= =?utf-8?B?alFnWllrOTBNSUJCVkk0b1dtRlVvRytsbm1jS1NNTWtzNkI4bm5IY1R6WTVv?= =?utf-8?B?Rzk5ZGdmakY4a1lsUHRxNEw2WE42ZVdZN0lxdnNDRmR1S05wNTF4SC9tQ2Z0?= =?utf-8?B?VU0xdWxLemN5ZndpbFlMZWdVTGpEdTJtQVZ5VlAvNWwrQS9QOFlCVll0RytI?= =?utf-8?B?THN5MTl0cDRWakQvK3VqRWgwR3V1UFVDbngzblExVHA2ZGZ2UT09?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ad1edd0-7f8f-4dd3-96a2-08d9ccccb90e X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jan 2022 02:16:30.1802 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR03MB5444 Subject: Re: [FFmpeg-devel] [PATCH v10 1/5] avformat/dovi_isom: Implement Dolby Vision configuration parsing/writing X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: quietvoid: > Both parse/write implementations are based on mov/movenc. > > This only adds support for the "Dolby Vision configuration box". > Other configuration boxes, such as > "Dolby Vision enhancement layer configuration box" are not supported. > > The new functions will be used to implement parsing/writing the DOVI config > for Matroska, as well as to refactor both mov/movenc to use dovi_isom functions. > > Signed-off-by: quietvoid > --- > libavformat/dovi_isom.c | 118 ++++++++++++++++++++++++++++++++++++++++ > libavformat/dovi_isom.h | 35 ++++++++++++ > 2 files changed, 153 insertions(+) > create mode 100644 libavformat/dovi_isom.c > create mode 100644 libavformat/dovi_isom.h > > diff --git a/libavformat/dovi_isom.c b/libavformat/dovi_isom.c > new file mode 100644 > index 0000000000..262d7e37ba > --- /dev/null > +++ b/libavformat/dovi_isom.c > @@ -0,0 +1,118 @@ > +/* > + * DOVI ISO Media common code > + * > + * Copyright (c) 2020 Vacing Fang > + * Copyright (c) 2021 quietvoid > + * > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA > + */ > + > +#include "libavutil/dovi_meta.h" > + > +#include "libavcodec/put_bits.h" > + > +#include "avformat.h" > +#include "dovi_isom.h" > + > +int ff_isom_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, const uint8_t *buf_ptr, uint64_t size) > +{ > + uint32_t buf; > + AVDOVIDecoderConfigurationRecord *dovi; > + size_t dovi_size; > + int ret; > + > + if (size > (1 << 30) || size < 4) > + return AVERROR_INVALIDDATA; > + > + dovi = av_dovi_alloc(&dovi_size); > + if (!dovi) > + return AVERROR(ENOMEM); > + > + dovi->dv_version_major = *buf_ptr++; // 8 bits > + dovi->dv_version_minor = *buf_ptr++; // 8 bits > + > + buf = *buf_ptr++ << 8; > + buf |= *buf_ptr++; > + > + dovi->dv_profile = (buf >> 9) & 0x7f; // 7 bits > + dovi->dv_level = (buf >> 3) & 0x3f; // 6 bits > + dovi->rpu_present_flag = (buf >> 2) & 0x01; // 1 bit > + dovi->el_present_flag = (buf >> 1) & 0x01; // 1 bit > + dovi->bl_present_flag = buf & 0x01; // 1 bit > + > + // Has enough remaining data > + if (size >= 5) { > + dovi->dv_bl_signal_compatibility_id = ((*buf_ptr++) >> 4) & 0x0f; // 4 bits > + } else { > + // 0 stands for None > + // Dolby Vision V1.2.93 profiles and levels > + dovi->dv_bl_signal_compatibility_id = 0; > + } > + > + ret = av_stream_add_side_data(st, AV_PKT_DATA_DOVI_CONF, > + (uint8_t *)dovi, dovi_size); > + if (ret < 0) { > + av_free(dovi); > + return ret; > + } > + > + av_log(s, AV_LOG_TRACE, "DOVI in dvcC/dvvC/dvwC box, version: %d.%d, profile: %d, level: %d, " > + "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n", > + dovi->dv_version_major, dovi->dv_version_minor, > + dovi->dv_profile, dovi->dv_level, > + dovi->rpu_present_flag, > + dovi->el_present_flag, > + dovi->bl_present_flag, > + dovi->dv_bl_signal_compatibility_id); > + > + return 0; > +} > + > +void ff_isom_put_dvcc_dvvc(AVFormatContext *s, uint8_t out[ISOM_DVCC_DVVC_SIZE], > + AVDOVIDecoderConfigurationRecord *dovi) > +{ > + PutBitContext pb; > + > + init_put_bits(&pb, out, ISOM_DVCC_DVVC_SIZE); > + > + put_bits(&pb, 8, dovi->dv_version_major); > + put_bits(&pb, 8, dovi->dv_version_minor); > + put_bits(&pb, 7, dovi->dv_profile); > + put_bits(&pb, 6, dovi->dv_level); > + put_bits(&pb, 1, dovi->rpu_present_flag); > + put_bits(&pb, 1, dovi->el_present_flag); > + put_bits(&pb, 1, dovi->bl_present_flag); > + put_bits(&pb, 4, dovi->dv_bl_signal_compatibility_id); There is a slight problem with the last six values: They come from the user and therefore must not be trusted to be within the range they are supposed to be. (The put_bits API uses an av_assert2 to check that the values to be written actually fit into the amount of bits that is used to write them.) So I suggest you use !! for the flags and appropriate masks for dv_profile, dv_level and dv_bl_signal_compatibility_id. > + > + put_bits(&pb, 28, 0); /* reserved */ > + put_bits32(&pb, 0); /* reserved */ > + put_bits32(&pb, 0); /* reserved */ > + put_bits32(&pb, 0); /* reserved */ > + put_bits32(&pb, 0); /* reserved */ > + > + flush_put_bits(&pb); > + > + av_log(s, AV_LOG_DEBUG, "DOVI in %s box, version: %d.%d, profile: %d, level: %d, " > + "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n", > + dovi->dv_profile > 10 ? "dvwC" : (dovi->dv_profile > 7 ? "dvvC" : "dvcC"), > + dovi->dv_version_major, dovi->dv_version_minor, > + dovi->dv_profile, dovi->dv_level, > + dovi->rpu_present_flag, > + dovi->el_present_flag, > + dovi->bl_present_flag, > + dovi->dv_bl_signal_compatibility_id); > +} > diff --git a/libavformat/dovi_isom.h b/libavformat/dovi_isom.h > new file mode 100644 > index 0000000000..1526164319 > --- /dev/null > +++ b/libavformat/dovi_isom.h > @@ -0,0 +1,35 @@ > +/* > + * DOVI ISO Media common code > + * Copyright (c) 2021 quietvoid > + * > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA > + */ > + > +#ifndef AVFORMAT_DOVI_ISOM_H > +#define AVFORMAT_DOVI_ISOM_H > + > +#include "libavutil/dovi_meta.h" > + > +#include "avformat.h" > + > +#define ISOM_DVCC_DVVC_SIZE 24 > + > +int ff_isom_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, const uint8_t *buf_ptr, uint64_t size); > +void ff_isom_put_dvcc_dvvc(AVFormatContext *s, uint8_t out[ISOM_DVCC_DVVC_SIZE], > + AVDOVIDecoderConfigurationRecord *dovi); > + > +#endif /* AVFORMAT_DOVI_ISOM_H */ > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".