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 BAB1949D58 for ; Tue, 9 Apr 2024 16:15:01 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4EDFE68B004; Tue, 9 Apr 2024 19:14:58 +0300 (EEST) Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02olkn2066.outbound.protection.outlook.com [40.92.48.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4459768CDA6 for ; Tue, 9 Apr 2024 19:14:51 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nwQZMK64OS6Ma+SvTUkdxyS6GnmS/SuzRhBa1L6oyT6B59ahjqsFudRIKq/UCu7uDP/Cmt9YdQmpVAIhObOZnQueUrdXpMfLY1/J1l8uzvPwOHb44vPAWMq3DePsbeTmRpAAeHCU0guPhUsViuZjD6UMXSq0cv3vGZZAwK9Y3RZ/IWzvAogYqmYIgeoUXHb8uHLv8nw9rRqoZnVlEIyaxk2syfT3J7ZLHtkYxJ7OneHRn8L2cvGtSMlL+UgAeSUwZDgrBKPm0ZBqN0TOQf//tOVNne1K6MX1OU/9EVcYl1lcQ8yHEhoipaEk1XiCDSvSXdgYsJEhk04yCtEAO7lsWw== 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=xdruR3cqnsyTkldT4Ndkx1i7WevsmfZnWit85pDef2k=; b=cQE2kWfsP/vmWfFYqb/gap7I7+73TGx3A5uAbIhZGUITxJdn54KSlN8eL8d8jTwzzOG6XkIXsW84qe9xUvxrSqV3upva5+CgbMgRVBkIuCg2aboB+a/BmBnyNyI5TuKQpE+v3IDl5go8wqSeg6YaO1YpltDmXgF9hCu1/hwUo7tYmH/SMKIMgyn1rcXlOXF9T9a4GfAKV9eO5S1yg//tXjzFD4+jf+mNQEM9yokb5FW2uqu0Q7luCIu4yTLrfkKDLVTdm3oyKqmeR/OxVIRTJO8ZCb1/Tv9lkL5xkGnaf7rtml/BdcoT7UOD1SPfFUWhWrcFreMHxWbD1+SE0/5PNA== 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=xdruR3cqnsyTkldT4Ndkx1i7WevsmfZnWit85pDef2k=; b=ZhSc8rqzWi/1eh1wbMS7hMlAvV/ZpS0gjnUegLQaW0ZNBB3n3NKiFL4sosw02DGSvTdKOqWG6SsZWfi88SDjnBXOxkRvi8qqmA/+3k5Z/mtmNlE5Vx1t8Ay5wt2ywwkmoCfZQmb2g/5Wbf6w7vg+pW81xtEwxkTVxldBVi2aXvAVSl/LqRnoF9Hvtc2gO7bO1ywtcKqQ0CIhw8dwC5SDP4tqQ/B4pVUtoWrmMR78nyTrnPPHPGAhbbDHMVnnS/ZioaU1f7kDPS3ymwjHMAg0UFXA1ACHXqASNUOiZywfJdnuZKbiD9YIZUaSLt4LOmVAwoPDJmp6RpAaGuvqf9s3dA== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by DU2P250MB0302.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:27b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.55; Tue, 9 Apr 2024 16:00:22 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d%4]) with mapi id 15.20.7409.042; Tue, 9 Apr 2024 16:00:22 +0000 Message-ID: Date: Tue, 9 Apr 2024 18:00:21 +0200 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20240409125914.61149-1-ffmpeg@haasn.xyz> <20240409125914.61149-6-ffmpeg@haasn.xyz> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20240409125914.61149-6-ffmpeg@haasn.xyz> X-TMN: [3evya+r+Df6gkaTjx4G4cIAZbGl2r7on1Ga/uFjM9Ak=] X-ClientProxiedBy: FR3P281CA0088.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1f::16) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|DU2P250MB0302:EE_ X-MS-Office365-Filtering-Correlation-Id: 58098a29-dbf5-438b-eec9-08dc58ae29a2 X-MS-Exchange-SLBlob-MailProps: Cq7lScuPrnpTlH+md5UtcCit/CoctGLPVPkQvOnRxJh/N6D6GDwYivrkE0+BIXm2bH85X9opHOmFK4TFMdGRYRdfI3J+Td5YCtimJJm6qoT/R2VvKUJnVeXVDsk0wl2ipTBwzgeHm3zh2KrZs6dQ4uSI1qK9PlVE7UprnHWm//Mzoyv3CIBJ1Q98w/StM2+DqZF17nP15XCRJ/W2NtS4beE1qLgjI6MVCqVQCDd07CdXxtWqWK3sI64uky2PX7kxozElvRJuwk3ZyC87y1/Y2031QcKcB5y/cjBsDU+bCSPho9NGcGFjsG/DjqGFSBAt93aXjspj0I1dg7w0TMVXYkFkq8AZyS7Lg/MkuXF30O58bAleIw45YCyyFMmA5LRufRICCIU7KuYIjpA+/+5Tqu+CStlnHPewOIQikuJoD7L6raV0fM4gctqxQjqG/lTyvv2WpCBOAkR9l5Po9ryeTTUE3yi8X6GhEq25vcI9HLEB1/IsXNQbUEFlloWCxgbCGtN05GxLD1N9/tPUhJGoIyB4qnq2A58g+PGGWAAZkccc7AALrotts5UvFc7MY1HfMvcnnmeMIKuGJxbdrTRSZFjzBNsRLFfVF/OpZ3wMNe+zeHkGsT7meb8UM5t4Gi41C71y4O69o9ku8ZBItMp2C0ZrtFi8NSMj2G5aKoCt+EnsuWgf6eZ3OG0SnHJms9Akijm72MFy44Z6T2hO41ygcG7rs8m4l2EeUZGfFR4YlnkLhTfdcVYSwQmhF1/CGwbbluKMd3msaHc= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WP1QEIUlpaOZum5Tuppp8pLPoPAqgAiRBEi37dhPogogOAU1WlJFKdaK59r0WlemURzI4IDVIjNVgCpLZ/1SlQzTV3lxZ9ldQDbIFbW5ek31rPdIWuaFgwZPlfHrNVHA6OOR3KuOvl2aYXdqTPlJzqpKP1nTi3u2jl0BtV9LAqqZQxqBBc1TXdsU/P4vFxT1X1QaSXqkRtzmRnlUWZ+7uO8vKf+LqMkGCSiSuAi6FC7sAlG+8bckXM170IPb+rLY5ncczmoStyp24WCeIjjOXK3YDU+recT55JEDqC8EemIl5TuUGqpXiEhjcdCQ0g0Uytpg+Gtppn/ccXHxnGz0KDIsGNgcXgBX6GOEDp1mkETXejAdZVIE+5aKQs6SPuUnE3HBdAKsXmo1Tbjf4YolkQfbGMMrvgDmWSlkEmmri8Le2spN8mkf+jZN6FCWIliq6P5Yecg4OINW2CdAR3eN86M8jyjsJH+zuNMMqZVDrkbT8p7+TOayGcBzI/6N4bJQEWYs8wP3dlM+JrDnPH2rj5Csq/NOmKHbrop4MI451YR+50zeu0EaiAlA6WrXhqFC X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RCtoNXFOb1RwYjZYSVBKL1FCOHJIZTdjUk93YzMxU0xCdDhpRFBsSjBZcHQ5?= =?utf-8?B?bnhkQ0FCYTA1Z2FFVWVtczBKcytpMDUxaTVOTFhSM3dqK0NsbXNuNy9qOFFy?= =?utf-8?B?TTNUSWN2YkVYNm1XZi9NOXNqdjFYTzBBSXc1WEVWRzM5Yzl6ang0aktiL2pl?= =?utf-8?B?ZnAzSWNQWnBVUWtrT0RlQXJNMzlrRThHR3g0TmxQUGdncG1ZMW11SGRyTE85?= =?utf-8?B?bDB6TGZnMzQzd2xKRmhScU9Qb25QQURKM1UrZU1PMlZXSXRWR3VEeHJabUI2?= =?utf-8?B?Q3pEczNha2NCeHp6NUVNMlhRNHp2bDZRZjRsVUdpbU5XQjR4eml2UDdKNUJh?= =?utf-8?B?dnp4aXhiL1JEay9QU0pDNUEySzV4MmVmSlZRMTZrWlVnSUJyNlVXYmRiN2JV?= =?utf-8?B?djVyOXdQWUM2bjIrSk11RjZObSt4aUVvYjZVa2dGM3ZldTM0YmVlUlRkODV1?= =?utf-8?B?OHBCK0hxdm83dVJ5QjlxbXljTXhxTWhlVlBmUjZCM0JoQ1ZwSTYzS25kcmc2?= =?utf-8?B?OVhkQjl5L1dmdjNvb1VSV3B6MmJpRjJKUHRJUzdvNW9uL0p1RmFya0s2emRS?= =?utf-8?B?cFkrWG1mVWZXaFhHa3dlZ0V1NWhzY25DNWdpc0ZEREQ3SnYyUnFRNEFCNEJE?= =?utf-8?B?UUtQTnUwa3RaSDVLazVNeXh3cG9EK2NvUWxLWEs4ZUx5MjVLa01UQmR3eElj?= =?utf-8?B?OC9DWHNGWTI1MXlDa0xGUFF6d1BLUjlBdlo2QlVhWUoxMGNtbXdhUkNjdzB1?= =?utf-8?B?dExTeVhMK091QnlNUjBnZkdjWVdiaytsZlVOdVAxRkx5Vk1MQ0tGVTBFdnhm?= =?utf-8?B?MnIzZnd6WUd3WjBwQ2o1RlVwd0cwMkh6bzJhODUrSU12YStzc2tVMk1Rd1JM?= =?utf-8?B?VVdUWXVtamxFTFJUZWpkMXFkT29qLzRkeFJ6Y3hWY050V01URWM1Y2xqTFJR?= =?utf-8?B?anRwN3RZMi95aG5tYTR0QWgzMDd3Ylh6amdkRkFFQkZGSE9pMS9IcWU4MTZR?= =?utf-8?B?YWpiTFBxUVZSaDM2c0xkckZFdjlWYmpJb29UYWJkNUd3ZzM4VldOVEdJR0Zv?= =?utf-8?B?TnN3RHNNdTB4eWNOR3Uwam5DclJTeGlhMFloRVo2dDQ2cVZtWEw2dmN6R1NE?= =?utf-8?B?dWRBdXhCazRzMGliTnpzajZUWkl2NEw4eXBZY1lTNHB0STJzZ2NONS9xanMv?= =?utf-8?B?OUpyWXpBNnFPMllYWmwzMERNRmd4bHlTTityVzF1TWhzRE15SFNmcDBSNllv?= =?utf-8?B?OXNpWmtzeXN3Y2RSM3NDSk1JSEl1SG53SCtpaGpWVnl0UFZzaVN2V1BBMFBS?= =?utf-8?B?NXlIQ1I0RkliNkdTMExBb0h2alp4NmF4OVRyUFlJbVBhMDZKMGlvbWcwaTln?= =?utf-8?B?TmhwcSttMG81bUY2QWhHak9Fdm4zd0ovL0wyS0JlQVN4SElIajFEVzRKWnkx?= =?utf-8?B?d1dkczNKYjMyd05rdzdFczYvbTBwTEFyeEdzZ1E4c0Z3bFpuNW1YaFh6WXps?= =?utf-8?B?YWZDZnN3SjJmdUZKbTFPMDJaLy9DeExYVlk3ajMzN0pTdjJzUnM4WWJHT01v?= =?utf-8?B?TzVNTEczK29NZ1d6SUZta0k4VHpEOXVsMjgzT3hIWlhJN1RacGlRaGtpRVVh?= =?utf-8?B?L2ZOYU8wQkEycTdGNDFmd0Rtc2EvdEEvSU0yNzJUWjhES0xjUG5HRXdILzlT?= =?utf-8?B?bUhkaWphTTdoTVk5ZjI2aTg0UmJWOHROWnl3VisvRmdiYUo5a1AwZFd3PT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 58098a29-dbf5-438b-eec9-08dc58ae29a2 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2024 16:00:22.8537 (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: DU2P250MB0302 Subject: Re: [FFmpeg-devel] [PATCH v2 05/11] avcodec/dovi_rpu: add ff_dovi_configure() 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: Niklas Haas: > From: Niklas Haas > > We need to set up the configuration struct appropriately based on the > codec type, colorspace metadata, and presence/absence of an EL (though, > we currently don't support an EL). > > When present, we use the signalled RPU data header to help infer (and > validate) the right values. > > Behavior can be controlled by a new DOVIContext.enable flag. > --- > libavcodec/dovi_rpu.c | 176 ++++++++++++++++++++++++++++++++++++++++++ > libavcodec/dovi_rpu.h | 23 +++++- > 2 files changed, 198 insertions(+), 1 deletion(-) > > diff --git a/libavcodec/dovi_rpu.c b/libavcodec/dovi_rpu.c > index 4da711d763e..d3a284c150d 100644 > --- a/libavcodec/dovi_rpu.c > +++ b/libavcodec/dovi_rpu.c > @@ -144,6 +144,182 @@ static int guess_hevc_profile(const AVDOVIRpuDataHeader *hdr) > return 0; /* unknown */ > } > > +static struct { > + uint64_t pps; // maximum pixels per second > + int width; // maximum width > + int main; // maximum bitrate in main tier > + int high; // maximum bitrate in high tier > +} dv_levels[] = { > + [1] = {1280*720*24, 1280, 20, 50}, > + [2] = {1280*720*30, 1280, 20, 50}, > + [3] = {1920*1080*24, 1920, 20, 70}, > + [4] = {1920*1080*30, 2560, 20, 70}, > + [5] = {1920*1080*60, 3840, 20, 70}, > + [6] = {3840*2160*24, 3840, 25, 130}, > + [7] = {3840*2160*30, 3840, 25, 130}, > + [8] = {3840*2160*48, 3840, 40, 130}, > + [9] = {3840*2160*60, 3840, 40, 130}, > + [10] = {3840*2160*120, 3840, 60, 240}, > + [11] = {3840*2160*120, 7680, 60, 240}, > + [12] = {7680*4320*60, 7680, 120, 450}, > + [13] = {7680*4320*120u, 7680, 240, 800}, > +}; > + > +int ff_dovi_configure(DOVIContext *s, AVCodecContext *avctx) > +{ > + AVDOVIDecoderConfigurationRecord *cfg; > + const AVDOVIRpuDataHeader *hdr = NULL; > + const AVFrameSideData *sd; > + int dv_profile, dv_level, bl_compat_id; > + size_t cfg_size; > + uint64_t pps; > + > + if (!s->enable) > + goto skip; > + > + sd = av_frame_side_data_get(avctx->decoded_side_data, > + avctx->nb_decoded_side_data, AV_FRAME_DATA_DOVI_METADATA); > + > + if (sd) > + hdr = av_dovi_get_header((const AVDOVIMetadata *) sd->data); > + > + if (s->enable == FF_DOVI_AUTOMATIC && !hdr) > + goto skip; > + > + switch (avctx->codec_id) { > + case AV_CODEC_ID_AV1: dv_profile = 10; break; > + case AV_CODEC_ID_H264: dv_profile = 9; break; > + case AV_CODEC_ID_HEVC: dv_profile = hdr ? guess_hevc_profile(hdr) : 8; break; > + default: > + /* No other encoder should be calling this! */ > + av_assert0(0); > + return AVERROR_BUG; > + } > + > + if (avctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) { > + if (dv_profile == 9) { > + if (avctx->pix_fmt != AV_PIX_FMT_YUV420P) > + dv_profile = 0; > + } else { > + if (avctx->pix_fmt != AV_PIX_FMT_YUV420P10) > + dv_profile = 0; > + } > + } > + > + switch (dv_profile) { > + case 0: /* None */ > + bl_compat_id = -1; > + break; > + case 4: /* HEVC with enhancement layer */ > + case 7: > + if (s->enable > 0) { > + av_log(s->logctx, AV_LOG_ERROR, "Coding of Dolby Vision enhancement " > + "layers is currently unsupported."); > + return AVERROR_PATCHWELCOME; > + } else { > + goto skip; > + } > + case 5: /* HEVC with proprietary IPTPQc2 */ > + bl_compat_id = 0; > + break; > + case 10: > + /* FIXME: check for proper H.273 tags once those are added */ > + if (hdr && hdr->bl_video_full_range_flag) { > + /* AV1 with proprietary IPTPQc2 */ > + bl_compat_id = 0; > + break; > + } > + /* fall through */ > + case 8: /* HEVC (or AV1) with BL compatibility */ > + if (avctx->colorspace == AVCOL_SPC_BT2020_NCL && > + avctx->color_primaries == AVCOL_PRI_BT2020 && > + avctx->color_trc == AVCOL_TRC_SMPTE2084) { > + bl_compat_id = 1; > + } else if (avctx->colorspace == AVCOL_SPC_BT2020_NCL && > + avctx->color_primaries == AVCOL_PRI_BT2020 && > + avctx->color_trc == AVCOL_TRC_ARIB_STD_B67) { > + bl_compat_id = 4; > + } else if (avctx->colorspace == AVCOL_SPC_BT709 && > + avctx->color_primaries == AVCOL_PRI_BT709 && > + avctx->color_trc == AVCOL_TRC_BT709) { > + bl_compat_id = 2; > + } else { > + /* Not a valid colorspace combination */ > + bl_compat_id = -1; > + } > + } > + > + if (!dv_profile || bl_compat_id < 0) { > + if (s->enable > 0) { > + av_log(s->logctx, AV_LOG_ERROR, "Dolby Vision enabled, but could " > + "not determine profile and compaatibility mode. Double-check " > + "colorspace and format settings for compatibility?\n"); > + return AVERROR(EINVAL); > + } > + goto skip; > + } > + > + pps = avctx->width * avctx->height; > + if (avctx->framerate.num) { > + pps = pps * avctx->framerate.num / avctx->framerate.den; > + } else { > + pps *= 25; /* sanity fallback */ > + } > + > + dv_level = 0; > + for (int i = 1; i < FF_ARRAY_ELEMS(dv_levels); i++) { > + if (pps > dv_levels[i].pps) > + continue; > + if (avctx->width > dv_levels[i].width) > + continue; > + /* In theory, we should also test the bitrate when known, and > + * distinguish between main and high tier. In practice, just ignore > + * the bitrate constraints and hope they work out. This would ideally > + * be handled by either the encoder or muxer directly. */ > + dv_level = i; > + break; > + } > + > + if (!dv_level) { > + if (avctx->strict_std_compliance >= FF_COMPLIANCE_STRICT) { > + av_log(s->logctx, AV_LOG_ERROR, "Coded PPS (%"PRIu64") and width (%d) " > + "exceed Dolby Vision limitations\n", pps, avctx->width); > + return AVERROR(EINVAL); > + } else { > + av_log(s->logctx, AV_LOG_WARNING, "Coded PPS (%"PRIu64") and width (%d) " > + "exceed Dolby Vision limitations. Ignoring, resulting file " > + "may be non-conforming.\n", pps, avctx->width); > + dv_level = FF_ARRAY_ELEMS(dv_levels) - 1; > + } > + } > + > + cfg = av_dovi_alloc(&cfg_size); > + if (!cfg) > + return AVERROR(ENOMEM); > + > + if (!av_packet_side_data_add(&avctx->coded_side_data, &avctx->nb_coded_side_data, > + AV_PKT_DATA_DOVI_CONF, cfg, cfg_size, 0)) { > + av_free(cfg); > + return AVERROR(ENOMEM); > + } > + > + cfg->dv_version_major = 1; > + cfg->dv_version_minor = 0; > + cfg->dv_profile = dv_profile; > + cfg->dv_level = dv_level; > + cfg->rpu_present_flag = 1; > + cfg->el_present_flag = 0; > + cfg->bl_present_flag = 1; > + cfg->dv_bl_signal_compatibility_id = bl_compat_id; > + > + s->cfg = *cfg; > + return 0; > + > +skip: > + s->cfg = (AVDOVIDecoderConfigurationRecord) {0}; > + return 0; > +} > + > static inline uint64_t get_ue_coef(GetBitContext *gb, const AVDOVIRpuDataHeader *hdr) > { > uint64_t ipart; > diff --git a/libavcodec/dovi_rpu.h b/libavcodec/dovi_rpu.h > index 9a68e45bf1b..56395707369 100644 > --- a/libavcodec/dovi_rpu.h > +++ b/libavcodec/dovi_rpu.h > @@ -26,14 +26,25 @@ > > #include "libavutil/dovi_meta.h" > #include "libavutil/frame.h" > +#include "avcodec.h" > > #define DOVI_MAX_DM_ID 15 > typedef struct DOVIContext { > void *logctx; > > + /** > + * Enable tri-state. > + * > + * For encoding, FF_DOVI_AUTOMATIC enables Dolby Vision only if > + * avctx->decoded_side_data contains an AVDOVIMetadata. > + */ > +#define FF_DOVI_AUTOMATIC -1 > + int enable; > + > /** > * Currently active dolby vision configuration, or {0} for none. > - * Set by the user when decoding. > + * Set by the user when decoding. Generated by ff_dovi_configure() > + * when encoding. > * > * Note: sizeof(cfg) is not part of the libavutil ABI, so users should > * never pass &cfg to any other library calls. This is included merely as > @@ -96,4 +107,14 @@ int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size, > */ > int ff_dovi_attach_side_data(DOVIContext *s, AVFrame *frame); > > +/** > + * Configure the encoder for Dolby Vision encoding. Generates a configuration > + * record in s->cfg, and attaches it to avctx->coded_side_data. Sets the correct > + * profile and compatibility ID based on the tagged AVCodecContext colorspace > + * metadata, and the correct level based on the resolution and tagged framerate. > + * > + * Returns 0 or a negative error code. > + */ > +int ff_dovi_configure(DOVIContext *s, AVCodecContext *avctx); > + > #endif /* AVCODEC_DOVI_RPU_H */ All of these encoder-only functions should be put into a file of their own so that it is not built when not enabling these non-native encoders. - Andreas _______________________________________________ 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".