From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 815B84C37B for ; Sat, 24 May 2025 11:08:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id B74A468DA1B; Sat, 24 May 2025 14:08:25 +0300 (EEST) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2102.outbound.protection.outlook.com [40.92.89.102]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 623F268D8C3 for ; Sat, 24 May 2025 14:08:18 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OzU0CTS9HCDFPvi2GsGV8hi6Wu/GEBaxhcfaHFiZhf06tl5/3eov1vqyhrYWGpU/melvpBo7XO0FNfIamee3rYpk7j161RbMH/r8qkixZ4mzuDhgqhKHflo+sfg83Vrx4nkTKWTzBUTf3vCzKezgjkfDo3+e/lrZrg5Nn6ZUKgFbrBMzNcyI6iIY5Z4URvhx0mFYeWB8s6KUM/0cSVBOsu6yo1cgILK1OIhrq3kqhWmMKK/NV5dtcKl9tK7zArMkP+Xgr7AK98TDmecTfwERA/3mZNwOI3XohEqYiXJKU6Cyri9++4vP0nBkr4qKKWnYX/rguVRt3ulvYUYSCdWJ4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=R+LUZR0Bp6qsv5K0cw6iZHmsPSKOH6RqQswuIvWC7xM=; b=tbUuI9OFNLVTjpkWNxEwkBwER0rBrkxGg+zpP5Ff5bAyuRhOdmugV9QdbgUJZ973Ed3q/hzWcv8GF3maMjOWeva61OtpBHp3yQKeLdGfAs51bi6QXNSsSoHclXz2Yf6NOv9y5nc5I7K7op3Na5zoqc6twiu1qRAUoawcYawCJgRAL1tdzhTY5zXAadSxQ5Odb47yP0s6AJhXJ9P8fdWRqmvegjfaSwQMZCCLOoDaIC0dFo4px2jZ+7UGo82G/gzvPwoaJVb5eb7XWGApMzzgPGX9WYNGNLqDuWuWzY8Z9xD1OJA49NzzDUTeLrxWGcNv9OI67vFVJuRb7nzVJfWb9w== 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=R+LUZR0Bp6qsv5K0cw6iZHmsPSKOH6RqQswuIvWC7xM=; b=u9kN5wSW+DJ1Hyn01+yJEqMCkPhoqKs/FPBdCtNYAfLZcz8KFpvvcg4O1sSI16u7edxQodY5lfRjyw/UB52xX/0F0hKveqVsPiiaJ5LhtIb0DFEpuqahkiJSoIVeJujbPLSxpMKg5Niyj/dve0j67H2kWvv8+3eG7gV/RMV225v4y6JwTABEc0v4kHE2gW/O74XrMLiuR+ASNU5H4JXBfYlNfG1ZesyTUOEQq9LShZjQcqJEvaP7xi/jfhcLi+psvzIAHWEV795DJhvijOMBO8jMZyA9OS8LaO61D6LbgIUElZKvAomH4wnMd7mB5ziI2U/iiYXTrJUz+qLR9RakQQ== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DB4P250MB0901.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:387::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8769.22; Sat, 24 May 2025 11:08:16 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::384d:40d4:ecb7:1c9%4]) with mapi id 15.20.8722.027; Sat, 24 May 2025 11:08:16 +0000 Message-ID: Date: Sat, 24 May 2025 13:08:14 +0200 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20250523031021.15983-1-jamrial@gmail.com> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20250523031021.15983-1-jamrial@gmail.com> X-ClientProxiedBy: ZR0P278CA0206.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:6a::23) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <89033907-979a-4dc5-b603-e802c11cc65d@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DB4P250MB0901:EE_ X-MS-Office365-Filtering-Correlation-Id: f16b04fd-2439-4551-3791-08dd9ab34882 X-Microsoft-Antispam: BCL:0; ARA:14566002|6090799003|461199028|5072599009|8060799009|15080799009|41001999006|19110799006|12121999007|7092599006|440099028|3412199025|12091999003; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RG9NSEJ3dU5mRkZyN1lWK0hPSSt5cm9KZjZSSHgxTUJpdk8rOFhUcy8vMmdO?= =?utf-8?B?elhoR2RpS1FzRmhnekFpNzNiODNBUlJ2Sy8wOXZBS2lxSUt5UW1jSlgrK3do?= =?utf-8?B?WmpCTWFvQUhMUzdZVzVycU5jZGZRdHZSVEs0Ti9NSmRFSjZ0SjhBdzlPY2sr?= =?utf-8?B?dUlzZmdoZ2hQSjFBOWYzQkxtQUhsdkFxSU1PWEVsRG9lQk5xSUVYVmhTQVp2?= =?utf-8?B?M3JBN1crRkYyd2lOU0M1TjlkNzVIZVdpa2F6Tk5KZXl3dXN0NmR5c0RjcGgw?= =?utf-8?B?Mk5MZEpPVnJnVnA5OWZXbUFFOU13cWc4KzlPd3lHWjVwd1luTFBVNVN2NEc0?= =?utf-8?B?VXJsb0lUT1l6eWg1QnkzSkQ0dlBNcDlNQnZTNkFOeXJDaWI4MkhRazlTTENH?= =?utf-8?B?dS91azhZV3RTTlJwM2lDSWxmLytLRDRlZDQrV0MzNWJOUS9LZ091YmVFYWxD?= =?utf-8?B?MXpMSElLSjZXY0MwcjZ4aGE1N1htRVp4anUzZkZROVZsNjVHMUlZaXJFME94?= =?utf-8?B?ckNBeWFHTlY4bHg1aERJdU1qZVJWL3VwbElJMm5hMXlQeEZtWkNDQmhROEhr?= =?utf-8?B?N0lvWDdSUjhSWis5VmN6VWxoSWF0bCtaQzZkc25NVHg5S0lXK2FzUGxGMlEx?= =?utf-8?B?eVRwRXBuQmR2dXlIblZXTUNyRnlONnB6dmRGcWF5c21ncmxyQ2RPRTZRWGlU?= =?utf-8?B?N1NZajhxVXdhVGJxMWJ0dVJxRnJQUTVpS1Y4STZEL1JncjdncUJPVEh4Zk9y?= =?utf-8?B?aWhQQUFRYVJUc014em1JNHBpaDVTZThGZnpMSmthMkVCSk5EenVZaWF3ZFdq?= =?utf-8?B?c2RHTGRJbUlDaFNGaThuZ214a3RXUW5Fc2syY3dCWjk1Vm94TUJvUkxQVi9I?= =?utf-8?B?b1BHMDJzQVpHYmdQcTY3UDIzbFcrNlE4UGdYelJMZm5sbVNxYlFhcDZRK2lZ?= =?utf-8?B?bVlpbUY1MTZvN1dkQlBHcTZjRHk2eVh4anZkaFFXVkhodWZ2WUFvMmg1U25m?= =?utf-8?B?MUFOL29uMlZiVVh0TjJMU041aWtKUTVYOTY1NzB3MjZtMXpJci9FODV5cUQv?= =?utf-8?B?WDFrTUxDbzNaaW4yUGtuUWRYR0ZvLy9OaFIwdlhkR3hLcW1DbmhMaTlZS0xL?= =?utf-8?B?VnBjRXZ1Y0J6cjUxd2pmMGlZdnpkL1hyYWYxM2lRT3RNcGJLSlBRcjc5MWFF?= =?utf-8?B?QiswMU5IS1dIMCtGLzBBZjBma1BocDIxRWMzNm5GWDBJb2NNclJnOVdVbkhM?= =?utf-8?B?eXVpNFZVWDVUWkNlRmEyekVxNy9JaThNUHpacDBiWW5PbXNCaUNXd3lWNEg5?= =?utf-8?B?QlJFNHFIZUs0dU9zZGVqT3VEcmVYY3JIQnFURHpFMWtvQjRMbm5CV3JLT0h4?= =?utf-8?B?aVpoZC9YSTZUMTYyaHpORXdzQzV1RnBmZm1YeElKM2hSemt0bmN4ZUJVYWJW?= =?utf-8?B?Tjh3emFEdHRlSW82bEtiMllvR0JJL2F6MEpMQVFOSG5ScllSeGhQNU04cklx?= =?utf-8?B?R3VMcW1Xa2dCREZhOU9Yd1NwSlZWdTQ2OWN1N3c0RGg2ZG5RU2htdEpvL05s?= =?utf-8?B?Z0xqRktwdEZRS054MlQrSkQ5Q09ETC9lYWRCY0JHcGVZR25yQnQzKzg1UTJB?= =?utf-8?Q?8USUr2qXcRWfHMMp64QOhhbu2K1adbG+uz9Og6THi5TU=3D?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NWNjSWg4R0dCS3FudnA4MXI0cmVFQzhpYUx5bnJkKzREc20wQVY4bHJTNDhD?= =?utf-8?B?KzAxVzlMZmZLd1RTVU82OWxjR3pQSGQwZTdndnBURUIrTmlHV3I2RVk3SC8v?= =?utf-8?B?NjE5KzRtaVhmWG5BbUV3S2NwOXhwWFY2UEVhblFaVFArK0lkZzNjcXpTVlY1?= =?utf-8?B?U1VUTjhBOWRRYTRyM1lxZmxnMkgxd0N1encvdlloaDRGTEVrek1PdzVVLzF1?= =?utf-8?B?TzFjckNxNzhSelR6R1dtOGlwM00xV0I3K1ZEdWNsb3ltUDVtZ09QQVQ4TGZk?= =?utf-8?B?UzMwZDZzZTM2aDRWQlp3ZFIwL2krQ0R6bE15WUQySnFzcFFYeDBzSVlmcGtu?= =?utf-8?B?NzhrVDlsR3FmdG9SdTlydndPOGNRbmtWWW0rbkMzbjAyU2dVcm5aZUlaWVVT?= =?utf-8?B?OWpyM05kamNXWmRBdllWY0dmdTR1cUFtNERoMDE3a2FKcFd3emhLYlhQQUhD?= =?utf-8?B?RWQ4L013M2NLaTFONkpEMDlEV1JIY29lYjZTdU1MZXlsUWlOL3NIVmNWdzBW?= =?utf-8?B?RlpFbzdPNzNPQVkrcnRDM1VmaEp6Ti96TXFzU2dGNDY5R2t4YmxaaHNsbDkr?= =?utf-8?B?S29JODhES2dUWDBMb3NrVDAxUENtN0hjeUNIODN3ZXdudkw5c2l2MkJDcFN6?= =?utf-8?B?L3cxaXg0WEhUSHpodVVxVEtVOVE1Z3dGUWJlNUM3eFh0cU5xalB4VVJZRFF6?= =?utf-8?B?MnBhdzhVMmFpajFnZTJoK1lkZHZjb29ZU0NYL3RZa3lCNEVueFRmeHArVGZr?= =?utf-8?B?Ry9ValZVWHQ1cU9oanFDb2QwbVFOa25IcHN1N2JUdFNSSEE1TlB4THg1L01o?= =?utf-8?B?NUdHNC9GQVNOMi9HdDNXcTUzTkdDOUYxdWhOMDBFTkVtRCtjY2k5NTl3U3Jm?= =?utf-8?B?Q0ZVUDc1L2kveGd5V0lUK28wOEJKdFd2ZTZrZGpVS0FLbGhHNTFLbG9udHdC?= =?utf-8?B?V2pCVGowY3lOVlZPWWlvZ1l6TzM4YzM1OGVtWHRnVjJWY0RMdDE1Rm1zSElp?= =?utf-8?B?M1ZOWk55THFkTTlDZTlMbGxwUUZ0VVhoVmZWMzVHSGtNUnhPOEZFTDgxMUFj?= =?utf-8?B?QVNpd3JkZmhNUWRUZHZ5d3FlODNudE5scUduZnRZTDM0a09wTHgvRE03Yit1?= =?utf-8?B?ekVYdG9KcHE0SlBNbzNVeC9wV2U0M1BEcGpjTWpLYU1NN0lxQ2ZQV3BaRU1T?= =?utf-8?B?dzA0VXlITjhFZUxRZUxpOFFXOGw4ZjV4S2UzS2I3bkNHUmt0Znl6M0h6U0lv?= =?utf-8?B?amkzUWdwdDNzMjhsaTZaQWRWdjdiQmtEUU1OendNVlBOZFhSMEp5QnpHclMx?= =?utf-8?B?NnMvdzNURnB1Njk5dVBDeEpoRGxUcC9BTHBWMEY0S2tUSm5teTUyV3VIMUox?= =?utf-8?B?YU5yT2ozRTBaU0JZOWZ0RUdJRzFRa2lqV0I3UG5jSkFYQW5HaXhYcndrc2RU?= =?utf-8?B?Ym1BeXpnMjVNSUY0N3pSWTROQWdCQzZ1ZDgwd09VNE1IYldYRkdhUVBqTGxN?= =?utf-8?B?R2R5NWR4c0FjY3BXcEdBM2NDdTRpNDZHQVR5MGI0NE5zTUdFM1pEaDNWa1hh?= =?utf-8?B?Nks3VW1OM1RObERCWUF6aDVZY05tdWxsQmRFVFllOGhuYjJSamhoY0ZnVGVs?= =?utf-8?B?R2NKaW1YeWNJeWcybmZlVjR1ZllnditGSGJGQU1wQVRFU0V5RTFhVU42dHoy?= =?utf-8?B?RG8wVVloSUxZZVlEc2tMS1BOUTEzdSt1ODZuWHY4OXR3bHcrZ1J4bGpvMUdC?= =?utf-8?B?Tm5SSmxpNHFGN1RpZXhFMHNYcEx6OEJFZTdXZ2NpT2thWVFHK1lmZEFTLzN4?= =?utf-8?B?K04rSWpsZVFzeDBRcW9wZz09?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f16b04fd-2439-4551-3791-08dd9ab34882 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2025 11:08:16.5216 (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: DB4P250MB0901 Subject: Re: [FFmpeg-devel] [PATCH 1/3] avcodec/cbs: add a new init function 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: James Almer: > And rename the existing one to ff_cbs_alloc(). > This will allow for more versatility when setting options in a module, allowing > them to be taken into account when calling module specific init functions. > > Signed-off-by: James Almer > --- > libavcodec/apv_decode.c | 6 +++++- > libavcodec/apv_parser.c | 6 +++++- > libavcodec/av1_parser.c | 6 +++++- > libavcodec/av1dec.c | 14 +++++++++++--- > libavcodec/bsf/av1_frame_merge.c | 16 ++++++++++++++-- > libavcodec/bsf/av1_frame_split.c | 6 +++++- > libavcodec/bsf/dts2pts.c | 6 +++++- > libavcodec/bsf/filter_units.c | 6 +++++- > libavcodec/bsf/trace_headers.c | 2 +- > libavcodec/cbs.c | 28 +++++++++++++++++++++++++++- > libavcodec/cbs.h | 10 ++++++++-- > libavcodec/cbs_bsf.c | 12 ++++++++++-- > libavcodec/cbs_internal.h | 3 +++ > libavcodec/d3d12va_encode_hevc.c | 6 +++++- > libavcodec/vaapi_encode_av1.c | 6 +++++- > libavcodec/vaapi_encode_h264.c | 6 +++++- > libavcodec/vaapi_encode_h265.c | 6 +++++- > libavcodec/vaapi_encode_mjpeg.c | 6 +++++- > libavcodec/vaapi_encode_mpeg2.c | 6 +++++- > libavcodec/vulkan_encode_h264.c | 12 ++++++++++-- > libavcodec/vulkan_encode_h265.c | 12 ++++++++++-- > libavcodec/vvc/dec.c | 6 +++++- > libavcodec/vvc_parser.c | 5 ++++- > libavformat/movenccenc.c | 6 +++++- > 24 files changed, 168 insertions(+), 30 deletions(-) > > diff --git a/libavcodec/apv_decode.c b/libavcodec/apv_decode.c > index eb47298e2e..3667933df6 100644 > --- a/libavcodec/apv_decode.c > +++ b/libavcodec/apv_decode.c > @@ -119,7 +119,11 @@ static av_cold int apv_decode_init(AVCodecContext *avctx) > > ff_thread_once(&apv_entropy_once, apv_entropy_build_decode_lut); > > - err = ff_cbs_init(&apv->cbc, AV_CODEC_ID_APV, avctx); > + err = ff_cbs_alloc(&apv->cbc, AV_CODEC_ID_APV, avctx); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(apv->cbc, NULL); > if (err < 0) > return err; > > diff --git a/libavcodec/apv_parser.c b/libavcodec/apv_parser.c > index fdd575339b..e0aa152ca8 100644 > --- a/libavcodec/apv_parser.c > +++ b/libavcodec/apv_parser.c > @@ -122,7 +122,11 @@ static av_cold int init(AVCodecParserContext *s) > APVParseContext *p = s->priv_data; > int ret; > > - ret = ff_cbs_init(&p->cbc, AV_CODEC_ID_APV, NULL); > + ret = ff_cbs_alloc(&p->cbc, AV_CODEC_ID_APV, NULL); > + if (ret < 0) > + return ret; > + > + ret = ff_cbs_init(p->cbc, NULL); > if (ret < 0) > return ret; > > diff --git a/libavcodec/av1_parser.c b/libavcodec/av1_parser.c > index 1792e813f4..77906d0c91 100644 > --- a/libavcodec/av1_parser.c > +++ b/libavcodec/av1_parser.c > @@ -190,13 +190,17 @@ static av_cold int av1_parser_init(AVCodecParserContext *ctx) > AV1ParseContext *s = ctx->priv_data; > int ret; > > - ret = ff_cbs_init(&s->cbc, AV_CODEC_ID_AV1, NULL); > + ret = ff_cbs_alloc(&s->cbc, AV_CODEC_ID_AV1, NULL); > if (ret < 0) > return ret; > > s->cbc->decompose_unit_types = decompose_unit_types; > s->cbc->nb_decompose_unit_types = FF_ARRAY_ELEMS(decompose_unit_types); > > + ret = ff_cbs_init(s->cbc, NULL); > + if (ret < 0) > + return ret; > + > return 0; > } > > diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c > index 8ff1bf394c..3130364534 100644 > --- a/libavcodec/av1dec.c > +++ b/libavcodec/av1dec.c > @@ -858,6 +858,7 @@ static av_cold int av1_decode_init(AVCodecContext *avctx) > { > AV1DecContext *s = avctx->priv_data; > AV1RawSequenceHeader *seq; > + AVDictionary *options = NULL; > const AVPacketSideData *sd; > int ret; > > @@ -865,20 +866,27 @@ static av_cold int av1_decode_init(AVCodecContext *avctx) > s->pkt = avctx->internal->in_pkt; > s->pix_fmt = AV_PIX_FMT_NONE; > > - ret = ff_cbs_init(&s->cbc, AV_CODEC_ID_AV1, avctx); > + ret = ff_cbs_alloc(&s->cbc, AV_CODEC_ID_AV1, avctx); > if (ret < 0) > return ret; > > s->cbc->decompose_unit_types = decompose_unit_types; > s->cbc->nb_decompose_unit_types = FF_ARRAY_ELEMS(decompose_unit_types); > > + ret = av_dict_set_int(&options, "operating_point", s->operating_point, 0); > + if (ret < 0) > + return ret; > + > + ret = ff_cbs_init(s->cbc, &options); > + av_dict_free(&options); > + if (ret < 0) > + return ret; > + > s->itut_t35_fifo = av_fifo_alloc2(1, sizeof(AV1RawMetadataITUTT35), > AV_FIFO_FLAG_AUTO_GROW); > if (!s->itut_t35_fifo) > return AVERROR(ENOMEM); > > - av_opt_set_int(s->cbc->priv_data, "operating_point", s->operating_point, 0); > - > if (avctx->extradata && avctx->extradata_size) { > ret = ff_cbs_read_extradata_from_codec(s->cbc, > &s->current_obu, > diff --git a/libavcodec/bsf/av1_frame_merge.c b/libavcodec/bsf/av1_frame_merge.c > index 4c54f2167e..530688be49 100644 > --- a/libavcodec/bsf/av1_frame_merge.c > +++ b/libavcodec/bsf/av1_frame_merge.c > @@ -133,11 +133,23 @@ static int av1_frame_merge_init(AVBSFContext *bsf) > if (!ctx->in || !ctx->pkt) > return AVERROR(ENOMEM); > > - err = ff_cbs_init(&ctx->input, AV_CODEC_ID_AV1, bsf); > + err = ff_cbs_alloc(&ctx->input, AV_CODEC_ID_AV1, bsf); > if (err < 0) > return err; > > - return ff_cbs_init(&ctx->output, AV_CODEC_ID_AV1, bsf); > + err = ff_cbs_alloc(&ctx->output, AV_CODEC_ID_AV1, bsf); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(ctx->input, NULL); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(ctx->output, NULL); > + if (err < 0) > + return err; > + > + return 0; > } > > static void av1_frame_merge_close(AVBSFContext *bsf) > diff --git a/libavcodec/bsf/av1_frame_split.c b/libavcodec/bsf/av1_frame_split.c > index 5f6a40316c..a64e9178e7 100644 > --- a/libavcodec/bsf/av1_frame_split.c > +++ b/libavcodec/bsf/av1_frame_split.c > @@ -210,7 +210,11 @@ static int av1_frame_split_init(AVBSFContext *ctx) > if (!s->buffer_pkt) > return AVERROR(ENOMEM); > > - ret = ff_cbs_init(&s->cbc, AV_CODEC_ID_AV1, ctx); > + ret = ff_cbs_alloc(&s->cbc, AV_CODEC_ID_AV1, ctx); > + if (ret < 0) > + return ret; > + > + ret = ff_cbs_init(s->cbc, NULL); > if (ret < 0) > return ret; > > diff --git a/libavcodec/bsf/dts2pts.c b/libavcodec/bsf/dts2pts.c > index 9d31d7dc08..189a9f9678 100644 > --- a/libavcodec/bsf/dts2pts.c > +++ b/libavcodec/bsf/dts2pts.c > @@ -402,7 +402,11 @@ static int dts2pts_init(AVBSFContext *ctx) > if (!s->node_pool) > return AVERROR(ENOMEM); > > - ret = ff_cbs_init(&s->cbc, ctx->par_in->codec_id, ctx); > + ret = ff_cbs_alloc(&s->cbc, ctx->par_in->codec_id, ctx); > + if (ret < 0) > + return ret; > + > + ret = ff_cbs_init(s->cbc, NULL); > if (ret < 0) > return ret; > > diff --git a/libavcodec/bsf/filter_units.c b/libavcodec/bsf/filter_units.c > index 336331733f..0edf2fa472 100644 > --- a/libavcodec/bsf/filter_units.c > +++ b/libavcodec/bsf/filter_units.c > @@ -187,7 +187,11 @@ static int filter_units_init(AVBSFContext *bsf) > return 0; > } > > - err = ff_cbs_init(&ctx->cbc, bsf->par_in->codec_id, bsf); > + err = ff_cbs_alloc(&ctx->cbc, bsf->par_in->codec_id, bsf); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(ctx->cbc, NULL); > if (err < 0) > return err; > > diff --git a/libavcodec/bsf/trace_headers.c b/libavcodec/bsf/trace_headers.c > index 8781f5f100..e885f7a73f 100644 > --- a/libavcodec/bsf/trace_headers.c > +++ b/libavcodec/bsf/trace_headers.c > @@ -38,7 +38,7 @@ static int trace_headers_init(AVBSFContext *bsf) > TraceHeadersContext *ctx = bsf->priv_data; > int err; > > - err = ff_cbs_init(&ctx->cbc, bsf->par_in->codec_id, bsf); > + err = ff_cbs_alloc(&ctx->cbc, bsf->par_in->codec_id, bsf); > if (err < 0) > return err; > > diff --git a/libavcodec/cbs.c b/libavcodec/cbs.c > index 6b2ebe597d..8c0659f7af 100644 > --- a/libavcodec/cbs.c > +++ b/libavcodec/cbs.c > @@ -21,6 +21,7 @@ > #include "libavutil/avassert.h" > #include "libavutil/buffer.h" > #include "libavutil/common.h" > +#include "libavutil/dict.h" > #include "libavutil/mem.h" > #include "libavutil/opt.h" > > @@ -91,7 +92,7 @@ const enum AVCodecID CBS_FUNC(all_codec_ids)[] = { > AV_CODEC_ID_NONE > }; > > -av_cold int CBS_FUNC(init)(CodedBitstreamContext **ctx_ptr, > +av_cold int CBS_FUNC(alloc)(CodedBitstreamContext **ctx_ptr, > enum AVCodecID codec_id, void *log_ctx) > { > CodedBitstreamContext *ctx; > @@ -137,6 +138,31 @@ av_cold int CBS_FUNC(init)(CodedBitstreamContext **ctx_ptr, > return 0; > } > > +av_cold int CBS_FUNC(init)(CodedBitstreamContext *ctx, AVDictionary **options) > +{ > + int err; > + > + if (!ctx->codec) > + return AVERROR(EINVAL); > + > + if (ctx->codec->priv_data_size) { > + if (!ctx->priv_data) > + return AVERROR(EINVAL); > + > + err = av_opt_set_dict2(ctx->priv_data, options, 0); > + if (err < 0) > + return err; > + } > + > + if (ctx->codec->init) { > + err = ctx->codec->init(ctx); > + if (err < 0) > + return err; > + } > + > + return 0; > +} > + > av_cold void CBS_FUNC(flush)(CodedBitstreamContext *ctx) > { > if (ctx->codec->flush) > diff --git a/libavcodec/cbs.h b/libavcodec/cbs.h > index 67f2ec9e50..5b0e1f5c6b 100644 > --- a/libavcodec/cbs.h > +++ b/libavcodec/cbs.h > @@ -176,6 +176,7 @@ typedef struct CodedBitstreamFragment { > } CodedBitstreamFragment; > > > +struct AVDictionary; > struct CodedBitstreamContext; > struct GetBitContext; > struct PutBitContext; > @@ -305,11 +306,16 @@ extern const enum AVCodecID CBS_FUNC(all_codec_ids)[]; > > > /** > - * Create and initialise a new context for the given codec. > + * Create a new context for the given codec. > */ > -int CBS_FUNC(init)(CodedBitstreamContext **ctx, > +int CBS_FUNC(alloc)(CodedBitstreamContext **ctx, > enum AVCodecID codec_id, void *log_ctx); > > +/** > + * Initialise a context. > + */ > +int CBS_FUNC(init)(CodedBitstreamContext *ctx, struct AVDictionary **options); > + > /** > * Reset all internal state in a context. > */ > diff --git a/libavcodec/cbs_bsf.c b/libavcodec/cbs_bsf.c > index b25285483b..25b9e730d8 100644 > --- a/libavcodec/cbs_bsf.c > +++ b/libavcodec/cbs_bsf.c > @@ -115,11 +115,19 @@ int ff_cbs_bsf_generic_init(AVBSFContext *bsf, const CBSBSFType *type) > > ctx->type = type; > > - err = ff_cbs_init(&ctx->input, type->codec_id, bsf); > + err = ff_cbs_alloc(&ctx->input, type->codec_id, bsf); > if (err < 0) > return err; > > - err = ff_cbs_init(&ctx->output, type->codec_id, bsf); > + err = ff_cbs_alloc(&ctx->output, type->codec_id, bsf); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(ctx->input, NULL); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(ctx->output, NULL); > if (err < 0) > return err; > > diff --git a/libavcodec/cbs_internal.h b/libavcodec/cbs_internal.h > index c3265924ba..734269d368 100644 > --- a/libavcodec/cbs_internal.h > +++ b/libavcodec/cbs_internal.h > @@ -184,6 +184,9 @@ typedef struct CodedBitstreamType { > int (*assemble_fragment)(CodedBitstreamContext *ctx, > CodedBitstreamFragment *frag); > > + // Initialize the codec internal state. > + int (*init)(CodedBitstreamContext *ctx); > + > // Reset the codec internal state. > void (*flush)(CodedBitstreamContext *ctx); > > diff --git a/libavcodec/d3d12va_encode_hevc.c b/libavcodec/d3d12va_encode_hevc.c > index 938ba01f54..5317e2f850 100644 > --- a/libavcodec/d3d12va_encode_hevc.c > +++ b/libavcodec/d3d12va_encode_hevc.c > @@ -442,7 +442,11 @@ static int d3d12va_encode_hevc_configure(AVCodecContext *avctx) > int fixed_qp_idr, fixed_qp_p, fixed_qp_b; > int err; > > - err = ff_cbs_init(&priv->cbc, AV_CODEC_ID_HEVC, avctx); > + err = ff_cbs_alloc(&priv->cbc, AV_CODEC_ID_HEVC, avctx); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(priv->cbc, NULL); > if (err < 0) > return err; > > diff --git a/libavcodec/vaapi_encode_av1.c b/libavcodec/vaapi_encode_av1.c > index f3df5baddc..f80efd006e 100644 > --- a/libavcodec/vaapi_encode_av1.c > +++ b/libavcodec/vaapi_encode_av1.c > @@ -128,7 +128,7 @@ static av_cold int vaapi_encode_av1_configure(AVCodecContext *avctx) > VAAPIEncodeAV1Context *priv = avctx->priv_data; > int ret; > > - ret = ff_cbs_init(&priv->cbc, AV_CODEC_ID_AV1, avctx); > + ret = ff_cbs_alloc(&priv->cbc, AV_CODEC_ID_AV1, avctx); > if (ret < 0) > return ret; > priv->cbc->trace_enable = 1; > @@ -136,6 +136,10 @@ static av_cold int vaapi_encode_av1_configure(AVCodecContext *avctx) > priv->cbc->trace_context = ctx; > priv->cbc->trace_write_callback = vaapi_encode_av1_trace_write_log; > > + ret = ff_cbs_init(priv->cbc, NULL); > + if (ret < 0) > + return ret; > + > if (ctx->rc_mode->quality) { > priv->q_idx_p = av_clip(ctx->rc_quality, 0, AV1_MAX_QUANT); > if (fabs(avctx->i_quant_factor) > 0.0) > diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c > index 0cd5b0ac50..7c98833944 100644 > --- a/libavcodec/vaapi_encode_h264.c > +++ b/libavcodec/vaapi_encode_h264.c > @@ -874,7 +874,11 @@ static av_cold int vaapi_encode_h264_configure(AVCodecContext *avctx) > VAAPIEncodeH264Context *priv = avctx->priv_data; > int err; > > - err = ff_cbs_init(&priv->cbc, AV_CODEC_ID_H264, avctx); > + err = ff_cbs_alloc(&priv->cbc, AV_CODEC_ID_H264, avctx); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(priv->cbc, NULL); > if (err < 0) > return err; > > diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c > index 2acde2296b..0cfe67735b 100644 > --- a/libavcodec/vaapi_encode_h265.c > +++ b/libavcodec/vaapi_encode_h265.c > @@ -967,7 +967,11 @@ static av_cold int vaapi_encode_h265_configure(AVCodecContext *avctx) > VAAPIEncodeH265Context *priv = avctx->priv_data; > int err; > > - err = ff_cbs_init(&priv->cbc, AV_CODEC_ID_HEVC, avctx); > + err = ff_cbs_alloc(&priv->cbc, AV_CODEC_ID_HEVC, avctx); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(priv->cbc, NULL); > if (err < 0) > return err; > > diff --git a/libavcodec/vaapi_encode_mjpeg.c b/libavcodec/vaapi_encode_mjpeg.c > index 2eef5bf090..5a7915cec4 100644 > --- a/libavcodec/vaapi_encode_mjpeg.c > +++ b/libavcodec/vaapi_encode_mjpeg.c > @@ -474,7 +474,11 @@ static av_cold int vaapi_encode_mjpeg_configure(AVCodecContext *avctx) > ctx->va_packed_headers |= VA_ENC_PACKED_HEADER_SLICE; > } > > - err = ff_cbs_init(&priv->cbc, AV_CODEC_ID_MJPEG, avctx); > + err = ff_cbs_alloc(&priv->cbc, AV_CODEC_ID_MJPEG, avctx); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(priv->cbc, NULL); > if (err < 0) > return err; > > diff --git a/libavcodec/vaapi_encode_mpeg2.c b/libavcodec/vaapi_encode_mpeg2.c > index 94cb3d4fb6..3e0b7f9ed9 100644 > --- a/libavcodec/vaapi_encode_mpeg2.c > +++ b/libavcodec/vaapi_encode_mpeg2.c > @@ -519,7 +519,11 @@ static av_cold int vaapi_encode_mpeg2_configure(AVCodecContext *avctx) > VAAPIEncodeMPEG2Context *priv = avctx->priv_data; > int err; > > - err = ff_cbs_init(&priv->cbc, AV_CODEC_ID_MPEG2VIDEO, avctx); > + err = ff_cbs_alloc(&priv->cbc, AV_CODEC_ID_MPEG2VIDEO, avctx); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(priv->cbc, NULL); > if (err < 0) > return err; > > diff --git a/libavcodec/vulkan_encode_h264.c b/libavcodec/vulkan_encode_h264.c > index f31b6d4069..be3edfe0d7 100644 > --- a/libavcodec/vulkan_encode_h264.c > +++ b/libavcodec/vulkan_encode_h264.c > @@ -1057,10 +1057,14 @@ static int parse_feedback_units(AVCodecContext *avctx, > CodedBitstreamContext *cbs; > CodedBitstreamFragment au = { 0 }; > > - err = ff_cbs_init(&cbs, AV_CODEC_ID_H264, avctx); > + err = ff_cbs_alloc(&cbs, AV_CODEC_ID_H264, avctx); > if (err < 0) > return err; > > + err = ff_cbs_init(cbs, NULL); > + if (err < 0) > + goto fail; > + > err = ff_cbs_read(cbs, &au, NULL, data, size); > if (err < 0) { > av_log(avctx, AV_LOG_ERROR, "Unable to parse feedback units, bad drivers: %s\n", > @@ -1540,7 +1544,11 @@ static av_cold int vulkan_encode_h264_init(AVCodecContext *avctx) > } > > /* Init CBS */ > - err = ff_cbs_init(&enc->cbs, AV_CODEC_ID_H264, avctx); > + err = ff_cbs_alloc(&enc->cbs, AV_CODEC_ID_H264, avctx); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(enc->cbs, NULL); > if (err < 0) > return err; > > diff --git a/libavcodec/vulkan_encode_h265.c b/libavcodec/vulkan_encode_h265.c > index d81d2de95a..af13edeec4 100644 > --- a/libavcodec/vulkan_encode_h265.c > +++ b/libavcodec/vulkan_encode_h265.c > @@ -1210,10 +1210,14 @@ static int parse_feedback_units(AVCodecContext *avctx, > CodedBitstreamContext *cbs; > CodedBitstreamFragment au = { 0 }; > > - err = ff_cbs_init(&cbs, AV_CODEC_ID_HEVC, avctx); > + err = ff_cbs_alloc(&cbs, AV_CODEC_ID_HEVC, avctx); > if (err < 0) > return err; > > + err = ff_cbs_init(cbs, NULL); > + if (err < 0) > + goto fail; > + > err = ff_cbs_read(cbs, &au, NULL, data, size); > if (err < 0) { > av_log(avctx, AV_LOG_ERROR, "Unable to parse feedback units, bad drivers: %s\n", > @@ -1677,7 +1681,11 @@ static av_cold int vulkan_encode_h265_init(AVCodecContext *avctx) > base_ctx->decode_delay = base_ctx->max_b_depth; > > /* Init CBS */ > - err = ff_cbs_init(&enc->cbs, AV_CODEC_ID_HEVC, avctx); > + err = ff_cbs_alloc(&enc->cbs, AV_CODEC_ID_HEVC, avctx); > + if (err < 0) > + return err; > + > + err = ff_cbs_init(enc->cbs, NULL); > if (err < 0) > return err; > > diff --git a/libavcodec/vvc/dec.c b/libavcodec/vvc/dec.c > index 49ba47d5d4..662e5edc60 100644 > --- a/libavcodec/vvc/dec.c > +++ b/libavcodec/vvc/dec.c > @@ -1120,10 +1120,14 @@ static av_cold int vvc_decode_init(AVCodecContext *avctx) > > s->avctx = avctx; > > - ret = ff_cbs_init(&s->cbc, AV_CODEC_ID_VVC, avctx); > + ret = ff_cbs_alloc(&s->cbc, AV_CODEC_ID_VVC, avctx); > if (ret) > return ret; > > + ret = ff_cbs_init(s->cbc, NULL); > + if (ret < 0) > + return ret; > + > if (avctx->extradata_size > 0 && avctx->extradata) { > ret = ff_cbs_read_extradata_from_codec(s->cbc, &s->current_frame, avctx); > if (ret < 0) > diff --git a/libavcodec/vvc_parser.c b/libavcodec/vvc_parser.c > index c9c3a3949f..8b3c794dbe 100644 > --- a/libavcodec/vvc_parser.c > +++ b/libavcodec/vvc_parser.c > @@ -482,7 +482,10 @@ static av_cold int vvc_parser_init(AVCodecParserContext *s) > VVCParserContext *ctx = s->priv_data; > int ret; > > - ret = ff_cbs_init(&ctx->cbc, AV_CODEC_ID_VVC, NULL); > + ret = ff_cbs_alloc(&ctx->cbc, AV_CODEC_ID_VVC, NULL); > + if (ret < 0) > + return ret; > + ret = ff_cbs_init(ctx->cbc, NULL); > if (ret < 0) > return ret; > au_detector_init(&ctx->au_detector); > diff --git a/libavformat/movenccenc.c b/libavformat/movenccenc.c > index 32094ebd7b..7966a978a8 100644 > --- a/libavformat/movenccenc.c > +++ b/libavformat/movenccenc.c > @@ -618,7 +618,11 @@ int ff_mov_cenc_init(MOVMuxCencContext* ctx, uint8_t* encryption_key, > ctx->use_subsamples = use_subsamples; > > if (codec_id == AV_CODEC_ID_AV1) { > - ret = ff_lavf_cbs_init(&ctx->cbc, codec_id, NULL); > + ret = ff_lavf_cbs_alloc(&ctx->cbc, codec_id, NULL); > + if (ret < 0) > + return ret; > + > + ret = ff_lavf_cbs_init(ctx->cbc, NULL); > if (ret < 0) > return ret; > If something like this were ever needed, it should not be implemented like this; instead ff_cbs_init() should be like avformat_open_input() and allocate a context if none was provided. - 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".