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 2260D49284 for ; Tue, 6 Feb 2024 22:12:28 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 802D668D0ED; Wed, 7 Feb 2024 00:12:25 +0200 (EET) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04olkn2074.outbound.protection.outlook.com [40.92.73.74]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7CE7468CC5B for ; Wed, 7 Feb 2024 00:12:18 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=T6ZrEwux7iUIlixduDL7e+WYYIA/3yCovPFaI9+PoRrfC+XYY+wSwVLgGarqgsxo5ZWp6e0m/jFn01AAUqiMxkseiW48WEMZ08Q8RltSBrW2LMQBkE1dTE+Uf/ZxDCcTLBinL3iQ+MpEJopQrLDe1XIu0LEHjbpdTr/fJEXA++GXzB6ba1vkvUQ61tgS9PZplH4aeBF345G0EaPX5m9sE9Vb0qoYkMVhzv7+Wua6SKs9PCrrIT6fEUuVrxXL2zCRMOZigLjq1koDWXEFCDMskJUdwEUQXNzHdx0l5+c77JWH3VIiiY9250Zexvt4ATCtpHOVo4ECOIksmSeASsHwoQ== 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=TjN5HJIEeeFZ3qAiUjlObDF7le96uUhGSRKa9jp9hPo=; b=ezhwQmae3wrpi7DsPA/eTCXR2GGcj4pg0nltCzTiAaC3Q8q2NQJcWMMAQGBLVktJeS6HciVdDCTa5oZ5suonbfaSDr17gxuW2KbmAbKPvHr8H4F9t2vXBYS/5Ifulw6GtODFjVBArq6sRpYxu1/oy/wMz/Lyd1P7eu0EftpnKUsTRcjt+EHfyzGGrNrFZVqeXPxBr+ASt7oy9GzOWj8UFbQRKRW/IL7UDgd7IddCmXzmlTohh7whHal3ZYas1Bf1us1wwyivywTmTGhtaEhlbEIuazNE1uOsORiIcJksCbIAu7yyfo2UJR7yii2hMZlTTLPe/CxiUK21ec2Ss4QpKw== 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=TjN5HJIEeeFZ3qAiUjlObDF7le96uUhGSRKa9jp9hPo=; b=ZUs0EBv9d8jw6vLIp+HP9jaG55aatXiVR/01IKV587w2fiDuJWZvkrebQCHwXXPBTXCDwIS0qiLg6uRwOy77ajXvMygMjnOnf8ol88swMCX+/1JYtEmxTn5R4kU14DJEd2/K/ia2LDVb4Ams/wUPkid7t8pmY7xwDgf4IDzHnyL6P8ZXeqEQAZkmVIC1hlMwEin/RHh1iMKL9az6rWmUKjbwdEcy495NkJH/LOIY1bJ0GEesTNfB3Cc13khuZg0E0EFAsAd3xSzHoZCZagudm9CeFZGfDso7SjTWfobSmCD2PX35LB6Ov750WXTiTFB8AYpC3hGmqKhCUKw4696XLw== Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16) by AM8P250MB0058.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:3d9::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7249.36; Tue, 6 Feb 2024 22:12:16 +0000 Received: from DU0P250MB0747.EURP250.PROD.OUTLOOK.COM ([fe80::db07:87f6:7c75:38cc]) by DU0P250MB0747.EURP250.PROD.OUTLOOK.COM ([fe80::db07:87f6:7c75:38cc%3]) with mapi id 15.20.7249.032; Tue, 6 Feb 2024 22:12:16 +0000 Message-ID: Date: Tue, 6 Feb 2024 23:14:09 +0100 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20240206212640.9193-1-jamrial@gmail.com> Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: <20240206212640.9193-1-jamrial@gmail.com> X-TMN: [pAQv3dUQ39nzgfOmZUOycHqbGYlnd0Fvlw564MiCjmc=] X-ClientProxiedBy: ZR2P278CA0057.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:53::14) To DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU0P250MB0747:EE_|AM8P250MB0058:EE_ X-MS-Office365-Filtering-Correlation-Id: a9a35786-d25e-4f5e-4e07-08dc2760ad41 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: yu60pU0svG5EXrknMUEc0Oe69rMzQPbFu2Vo+rbNIN9mZ60Ku7era5uVamj/hqEusRakNCh7EimdlAp5XO7nHVLS08pnjpw0Pxwr2wJ8J8mbKbcAhvbZEi+gF5+QeJMUFKekPuVJLnKQWUwteosBVgadzNV2KKOtVa0dAOs9VVqaAAbFBgX+g0sSnJs20uh4S3r3V4i3egOYKzeVWhAYNh5cwvP3M47rY7ihG3uWWTmQipje9OHC0HnKkJf6XYIp82IfnS6yaR0cI3OM35rXMScA8VEqwHilFGUObslZO75guKJkqmrZTYmshaCYM/Tx/EcCm+YJ1jYeImSDNqMjrM4p7L2fcSd1SzB1GT9UMeQMqy+NaeKm/jU6GgCBvfjC582nFWBuGGrb3mc9h+Rd52JwntRcNZyHiy/oVx2JBh2xh7JGGmUZpsjuLoJtZp8AYPqTmXSdcLEbD+BRR2hcqQgZwd4IJcZwXqRC8hk22PXp77AZC4i7CZQDbcJ16SoPper+ZKP7wSWUZ/IG+FtbmrddXnOrqOsTCgoBoV0GaOBzjcw20nX63EuC2N9oxCua X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dkVpQURTWVpLRHlWbDlRY2ZicGFyMU5BUmEyR2hsRFFSd3BjUk5vTllNYS8r?= =?utf-8?B?WVIvV2JnYnhRTEVHTVA3SmVBbzBVR2ZwSFV1UFl6eVFHeGYwcFdYbG9aMVIr?= =?utf-8?B?VmkxQ2c0SlhSemVQRklDYkVROU9oMzlSWTROOWcrbzlmem54S3VSeGF1VHRK?= =?utf-8?B?QW5saVZjSGNHV0F2ZlB0R0ZvRHltTU5JK3F5L2lFZGJic2NYTldyZlZEZUdF?= =?utf-8?B?Y0Q1SHJkQmJEb3dtelBBaXdNaUdEdmorL1I3aFhneStXMnBSVzloMnIvM1l5?= =?utf-8?B?ZHE1VE83c3ErVUpEemoxOWY3VGt2NDQvamlPNlVhdy9kWVMzaGdsc08zL2Rs?= =?utf-8?B?RFdIVU9CdG9jY2hobEp3R29UVmp1QjJHOXJRY3RlS2xCY29ocVRQQ3F3aTVw?= =?utf-8?B?bUZxUmZLVEs3M0orZkYxdGJ1OUpxWkRlTU1RVW55ZTQvUXdtQ044YjZ4UXA0?= =?utf-8?B?SmhvdGZUdlpkVWtrRW9KdUp6Z0dUUXZRUEJyNWtRNXdLbWtnaVhod005b04x?= =?utf-8?B?OTR4U25oSXFEbStjL3QxTUl1b3I4OFI2WWZOakU0Y2NPQUxaTlMyMHNVT0V6?= =?utf-8?B?K0xPdEVSWWlRajZTN2F3bWM4L1JWNytoSHl4Mm9HWDV6QS9oNC8wdURRQkYx?= =?utf-8?B?Skg0THltbHZCUGRhSU5ueWtUL3dRaW8xeVlIK3VyUzg0QTdscFJlOEVuWFFS?= =?utf-8?B?QmJueTdTUHpIVDh2ZkJTN3dHUHkxWVBlRlBCZGtBaHczVnY4RVhWWWt0MnhG?= =?utf-8?B?NURiZk1LNG5UU2tnN3VraG5mRExHUFlsdGgyQnJIVkdiRG9sdjZEMSt5Nnls?= =?utf-8?B?VEVhR3d2WXRYbzZpbFJGdlJaa3lPa2luSGRLamNpVDUwSXdUb0ZNTFBMamdN?= =?utf-8?B?d0RXV20xS2IrUTkvWTFRSDFXSGh6bFhEODRRN2tkbUJRdDJTbGtLS2VpWnhW?= =?utf-8?B?MnVwQzd5NmxDZHpoeTNybEUybDBUSlh1R05wR1B6c2p0WmtIKzFDQzlUa2FM?= =?utf-8?B?aU1PUEMrZit0NWVRc2sxT1lnUFN6WFBsV1JGb2ppWXdGK29nYldyVmRIWUxt?= =?utf-8?B?R2RrbWtUaFBNZnoxZjJJbEdWekxQZVg3cWdoakUwaFk5OXpJenlNZkVMNmdI?= =?utf-8?B?QjZQOHBTS2w5blhJTVN4SmJ5WU1ZcWtZaWl1RVFUUDZQSk5ZbnZmTlA2VEw1?= =?utf-8?B?WkVNeVJjeW5XZjBKTjZrT3R5VThHUlNTV003TkoweXpOdk9MQTEybVdUK3Vh?= =?utf-8?B?dTNBUE9QZ2JiSmR5MVY3YUlvY0poYXFzYktBZS9FdkxwWVM0WnNYQUVLOFFI?= =?utf-8?B?YUJad2JPdy8yT1o2T05iSElxK1RVWWw4SFV5VjhHUnVPTWkwZ202akNYRW5u?= =?utf-8?B?QmEyM2Q2dUErMXBDV1JxNHJSdTRxT2FMempWMVNPY0NIM1RpVzc4U0dwUUxY?= =?utf-8?B?VTRESHo2bURxMkZVaFVCTjRtSm1FczVTNER2eWRKajRlRVJ2bFp6bDc3SVRI?= =?utf-8?B?aWw5Y1NxUkFFWU96ZlliUVZnL3ZGOHRPSHUyenFETXQrL0YvS3IrR2svTVE1?= =?utf-8?B?WlR2L1lobDVKRGw3OUt0T2dwa1pxTWRaTlJUS1psY1RMM3lqdmpZU2xteDg0?= =?utf-8?B?MG9UNGdidE9yeHliMnQ3MG9mMHZucjZFelNnQ3E0M043QzVhbnBTM2VsZlRB?= =?utf-8?Q?9Q6hFN46/Vj0LbO0IyTI?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9a35786-d25e-4f5e-4e07-08dc2760ad41 X-MS-Exchange-CrossTenant-AuthSource: DU0P250MB0747.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2024 22:12:15.9645 (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: AM8P250MB0058 Subject: Re: [FFmpeg-devel] [PATCH] avcodec/nvdec: don't attempt to free NVDECContext->bitstream on simple decode_slice hwaccels 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: > If FFHWAccel->end_frame() isn't called before FFHWAccel->uninit(), an attempt > to free a stale pointer could take place. > > Signed-off-by: James Almer > --- > libavcodec/nvdec.c | 9 +++++++++ > libavcodec/nvdec.h | 1 + > libavcodec/nvdec_mjpeg.c | 2 +- > libavcodec/nvdec_mpeg12.c | 4 ++-- > libavcodec/nvdec_mpeg4.c | 2 +- > libavcodec/nvdec_vc1.c | 4 ++-- > libavcodec/nvdec_vp8.c | 2 +- > libavcodec/nvdec_vp9.c | 2 +- > 8 files changed, 18 insertions(+), 8 deletions(-) > > diff --git a/libavcodec/nvdec.c b/libavcodec/nvdec.c > index 27be644356..8a7f5c0dac 100644 > --- a/libavcodec/nvdec.c > +++ b/libavcodec/nvdec.c > @@ -274,6 +274,15 @@ int ff_nvdec_decode_uninit(AVCodecContext *avctx) > return 0; > } > > +int ff_nvdec_simple_decode_uninit(AVCodecContext *avctx) > +{ > + NVDECContext *ctx = avctx->internal->hwaccel_priv_data; > + > + ctx->bitstream = NULL; > + > + return ff_nvdec_decode_uninit(avctx); > +} > + > static void nvdec_free_dummy(struct AVHWFramesContext *ctx) > { > av_buffer_pool_uninit(&ctx->pool); > diff --git a/libavcodec/nvdec.h b/libavcodec/nvdec.h > index 353e95bf42..83bc1de84c 100644 > --- a/libavcodec/nvdec.h > +++ b/libavcodec/nvdec.h > @@ -73,6 +73,7 @@ int ff_nvdec_decode_uninit(AVCodecContext *avctx); > int ff_nvdec_start_frame(AVCodecContext *avctx, AVFrame *frame); > int ff_nvdec_start_frame_sep_ref(AVCodecContext *avctx, AVFrame *frame, int has_sep_ref); > int ff_nvdec_end_frame(AVCodecContext *avctx); > +int ff_nvdec_simple_decode_uninit(AVCodecContext *avctx); > int ff_nvdec_simple_end_frame(AVCodecContext *avctx); > int ff_nvdec_simple_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, > uint32_t size); > diff --git a/libavcodec/nvdec_mjpeg.c b/libavcodec/nvdec_mjpeg.c > index 850634bf1a..adef21b0f7 100644 > --- a/libavcodec/nvdec_mjpeg.c > +++ b/libavcodec/nvdec_mjpeg.c > @@ -80,6 +80,6 @@ const FFHWAccel ff_mjpeg_nvdec_hwaccel = { > .decode_slice = nvdec_mjpeg_decode_slice, > .frame_params = nvdec_mjpeg_frame_params, > .init = ff_nvdec_decode_init, > - .uninit = ff_nvdec_decode_uninit, > + .uninit = ff_nvdec_simple_decode_uninit, > .priv_data_size = sizeof(NVDECContext), > }; > diff --git a/libavcodec/nvdec_mpeg12.c b/libavcodec/nvdec_mpeg12.c > index a4603c7ea7..5d100a46ba 100644 > --- a/libavcodec/nvdec_mpeg12.c > +++ b/libavcodec/nvdec_mpeg12.c > @@ -110,7 +110,7 @@ const FFHWAccel ff_mpeg2_nvdec_hwaccel = { > .decode_slice = ff_nvdec_simple_decode_slice, > .frame_params = nvdec_mpeg12_frame_params, > .init = ff_nvdec_decode_init, > - .uninit = ff_nvdec_decode_uninit, > + .uninit = ff_nvdec_simple_decode_uninit, > .priv_data_size = sizeof(NVDECContext), > }; > #endif > @@ -126,7 +126,7 @@ const FFHWAccel ff_mpeg1_nvdec_hwaccel = { > .decode_slice = ff_nvdec_simple_decode_slice, > .frame_params = nvdec_mpeg12_frame_params, > .init = ff_nvdec_decode_init, > - .uninit = ff_nvdec_decode_uninit, > + .uninit = ff_nvdec_simple_decode_uninit, > .priv_data_size = sizeof(NVDECContext), > }; > #endif > diff --git a/libavcodec/nvdec_mpeg4.c b/libavcodec/nvdec_mpeg4.c > index 20a0499437..5a50f7d77f 100644 > --- a/libavcodec/nvdec_mpeg4.c > +++ b/libavcodec/nvdec_mpeg4.c > @@ -120,6 +120,6 @@ const FFHWAccel ff_mpeg4_nvdec_hwaccel = { > .decode_slice = nvdec_mpeg4_decode_slice, > .frame_params = nvdec_mpeg4_frame_params, > .init = ff_nvdec_decode_init, > - .uninit = ff_nvdec_decode_uninit, > + .uninit = ff_nvdec_simple_decode_uninit, > .priv_data_size = sizeof(NVDECContext), > }; > diff --git a/libavcodec/nvdec_vc1.c b/libavcodec/nvdec_vc1.c > index 5096d784df..e9ab16c63d 100644 > --- a/libavcodec/nvdec_vc1.c > +++ b/libavcodec/nvdec_vc1.c > @@ -124,7 +124,7 @@ const FFHWAccel ff_vc1_nvdec_hwaccel = { > .decode_slice = ff_nvdec_simple_decode_slice, > .frame_params = nvdec_vc1_frame_params, > .init = ff_nvdec_decode_init, > - .uninit = ff_nvdec_decode_uninit, > + .uninit = ff_nvdec_simple_decode_uninit, > .priv_data_size = sizeof(NVDECContext), > }; > > @@ -139,7 +139,7 @@ const FFHWAccel ff_wmv3_nvdec_hwaccel = { > .decode_slice = ff_nvdec_simple_decode_slice, > .frame_params = nvdec_vc1_frame_params, > .init = ff_nvdec_decode_init, > - .uninit = ff_nvdec_decode_uninit, > + .uninit = ff_nvdec_simple_decode_uninit, > .priv_data_size = sizeof(NVDECContext), > }; > #endif > diff --git a/libavcodec/nvdec_vp8.c b/libavcodec/nvdec_vp8.c > index ff3b3f259c..bbea6f1577 100644 > --- a/libavcodec/nvdec_vp8.c > +++ b/libavcodec/nvdec_vp8.c > @@ -101,6 +101,6 @@ const FFHWAccel ff_vp8_nvdec_hwaccel = { > .decode_slice = ff_nvdec_simple_decode_slice, > .frame_params = nvdec_vp8_frame_params, > .init = ff_nvdec_decode_init, > - .uninit = ff_nvdec_decode_uninit, > + .uninit = ff_nvdec_simple_decode_uninit, > .priv_data_size = sizeof(NVDECContext), > }; > diff --git a/libavcodec/nvdec_vp9.c b/libavcodec/nvdec_vp9.c > index e196391c6d..69b12657b6 100644 > --- a/libavcodec/nvdec_vp9.c > +++ b/libavcodec/nvdec_vp9.c > @@ -180,6 +180,6 @@ const FFHWAccel ff_vp9_nvdec_hwaccel = { > .decode_slice = ff_nvdec_simple_decode_slice, > .frame_params = nvdec_vp9_frame_params, > .init = ff_nvdec_decode_init, > - .uninit = ff_nvdec_decode_uninit, > + .uninit = ff_nvdec_simple_decode_uninit, > .priv_data_size = sizeof(NVDECContext), > }; Using a field for both an ownership pointer and as a pure data pointer is bad and confusing. IMO there should be different pointers for this; or rather: bitstream is always set and used as data pointer and the another pointer for ownership which may alias bitstream. In fact, it looks like this is exactly what bitstream_internal is, it is just not used by H.264 and HEVC in this manner (they use bitstream for allocated stuff). With the approach outlined above, ff_nvdec_simple_end_frame() might become obsolete. - 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".