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 159D14A1A1 for ; Sat, 23 Mar 2024 14:12:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id CEEA368D592; Sat, 23 Mar 2024 16:12:08 +0200 (EET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2076.outbound.protection.outlook.com [40.92.90.76]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6CD0C68D57E for ; Sat, 23 Mar 2024 16:12:02 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kSCuL5JgVryjyKMYq6GrT1TyoW3QwywVaEYIlXHN+4bsREDHdXPu/XSZA74wh/UiScmBQU3yHBnxndJfn4is4WUkg+CkWIRZTQxGffUuFOmMWr92bPsMAHbbag6qvwhZJT+6wZ6YURUcwSTqTNvfs5QIk8NxrInDm/HEF9WofY6pkTrFkKhsBitrJinWzLeIquLqgWMELDX7YheE+S++jJnJXNXUDKtcpNSoNvgn8nZ5ABjlvgQijKv4qxYFlW3+zahyiEQAtQYie25JDrF/z7lfeWHejmTi0fLoqld3dVvafye460PG4lSmVsG+uGGDcJuJHEylFVMgoMova5NCBg== 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=pF9Mj9VuXzc65mgLHHZP/+wvwlAoV6dlAsZp04rjrrA=; b=h2rVm9zDERdbFJSC9GCwksGnQbRmgzC9itAJZYF3ANcle18/HrzYxS1dZIoV5MzvDmZ+yZJqzQbNOW0ydxOae7YAMtSVLn4tjJyQpouJBm+uSSl2bTAG7gRwT+XSk+g+sWs1wIIepzbKtId8jj8eRiZktfFVQnOqCkA85rDNHhwO+oo2ZJineCjFGIEn0kuFMeZnVjIpfBcrm4mrBYn9vpfycD8r2/3fBP6JxCRtj6kqk8Lbvca9zp3ER2H7WjcBxz6WdSA8ayASckGf48BNy51cPZBLpS7we6+ySvYb9BsgDJO2v1OHP0flFOLG0dG32BNi/iMatD2fw/me07gVNg== 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=pF9Mj9VuXzc65mgLHHZP/+wvwlAoV6dlAsZp04rjrrA=; b=BtSojmKzgkuuhkIdHp9jA1J0llllILeEWTN6Aam0pawxe7LXiLUqETikLj31EnEleMWziE/+ueD4r4308g5TNL3QI9YdlXVy6poD+T4ExPLLJPqWYHQ6ijitTkPuO8H1zvdmOq66rO8aUxlElo9QAVHCSk0Bztyxvbyp+V0HwswXcpv5+squ+kUZYWZxoY145okmUkHnN1pLl97w32zduBbeZWz6Tk5GoSyn2RFCJ+Xufk+PAXFG7+yZCuDaD5VLo1ue/vSot5LbDV2eidzw6I3vD6+nWKNDFecybS6yT7jCQrj5+mprHj6m0DjQv0IaCAzXY7tx/bYgjUOi4gTC/Q== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DB9P250MB0474.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:33d::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.24; Sat, 23 Mar 2024 14:12:00 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::1f29:8206:b8c3:45bb]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::1f29:8206:b8c3:45bb%3]) with mapi id 15.20.7409.023; Sat, 23 Mar 2024 14:12:00 +0000 Message-ID: Date: Sat, 23 Mar 2024 15:11:59 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20240323140054.4222-1-anton@khirnov.net> From: Andreas Rheinhardt In-Reply-To: <20240323140054.4222-1-anton@khirnov.net> X-TMN: [Ht4LSUIMKc7UbOzX8I1K7RZUD4S/YeS6PohnS8ZhpFY=] X-ClientProxiedBy: FR5P281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f2::8) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DB9P250MB0474:EE_ X-MS-Office365-Filtering-Correlation-Id: d043aa76-bfe3-4833-2c8c-08dc4b4334e8 X-MS-Exchange-SLBlob-MailProps: Cq7lScuPrnqkjmXb1vlddM5aSa/Epk3A8r7xaVqrW5WC7xaejU6FUh0HACBXKBivNAZ026qtot/w/hojK7Icz3OadvaxNBb5nXxo/+SViYs9Z4KbpFXmRHnJvdy/wSH8gb/dMyQkrwMIS67esPTaEq7EOqRZygqwIt9HDL9BNYVkaDMzsOvStX+Lyn3lVAhRor1tDCW+LM6ylDD+orHCmq8f74JEQfP7ir6qqREKYs+0O92oSyXAibpYlmm4Ny+HAdeRNv7v48p5mQZJyPyivIwahGTeSHj+X7aJ5hptPC43F1haeisrvLFasUSY2txVjbL/orD+YFW+llMCHZ8b7WlMTk8ySSK+j0xrbNPDe34+jE2bTA7I7S5y6WY235UYjYNFbDfWbCYlhfzqgvqHjLVdf/aA+RiOZ5gX5BtBTf0gPxglnOPWzLFo7yvBwaK3Sguu0029Dm+DCOzO3OANnad/pq6eY7OldugQ4QFIRdOsLrkqfgkot0cf82K9qLrbzDfmhxdG2QJY4xOdKVYEusdieP1DJAsb94XVAYDTXAUspr1pi/lhIN/8MMT+OzAWXFAEJ7g6VAMN9+dyHRziNE/OuGFInardajdKz6d1bPtahWvMSLPOi6laPSmhJeqMfAihqd5j56wIc5jCM13Ucx/jb4Ii3m4yraYcVnYp2rt4AwBH/sqF59lEjh5ky++j/+xvp83CfRuudhhnjlVjfSby89pulpzuexxuP7TkcVlK4cVY4WVeoNX3M33jL/kVDxx957OkYwI= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ozngp+EMLlB3VbvO/p9Gx8Rt4ZDdk5+TvI07MTWWG+tOWjN4GJ40d+d4vKRrCWUIKnC0dqPXx+VuFzmOvMbOZ4rYMw9Xc+M9g5Dpro/sD2UpbexiPxKyGA0tFbd6H/qXH8yWJs3aYjkjxd9FsA5vz/yElqgqTPfFF0uFcbXiquHjuBCWKwMux8gtHK456lnxDSZr1w8nxXuStEom9Usf3/Pw14bsBMlbfNRNRA2Y9S8/Lh8QUwwYPtYz4iGI8CstTxOc0mtj8EShSOkNnkD4Ygt/nHZbHaX7gv9wqPJiKEBtohZ8WgUX51tGyHZrqJUONmNbxvI2AZsE6dzKbXqx5LScJlkSBn6Rv+cloYl2sbJs6UYYbQIiXsE7k7QHXyebMENdr9i5uOZt8HmaOGTSOlADXt8G3GTSky8ah7jSjHdzTd5hg6IWESspF7CjtIZBwf6Z3kBnwLkQWcVuxfUBV8fItqlKwbk25qAwRBizLRoIFRdYrORcELz9P4N+pnRMmB4rVKRoiSfTpm9jJSdTKYx1uJsld4Hwi1C6/tJUxp/99I45qQgxMYIeisTsfAmb X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?KzFLQ0tISU9hVVIrVkw4Qy9aYVczQ1p6Z0lxczE1YTVTcVhxcEhJalYraTcr?= =?utf-8?B?bUdqUDN3WmcwRmNwUy9UQ0ZjcXg5OVpiOWdrVGZERld1a2ptM25uVnJsaC9Z?= =?utf-8?B?MnNuU2FyZHY2UjlRN1hoK1R5Q1hsWnBseXVId1YxWE1HMEY4T1JuR0gxQ1R6?= =?utf-8?B?U0hrU1dNbksvQWxuYkVmWmdYVHFJd2pSUCtQbjV3TlgvQ0hKQVZUNlZWK2U4?= =?utf-8?B?cWIrV3preWUySXMrT2VTL2NENmVoY2ZFenc0Z3I1OVF4VWtiMzRzOC83aXJK?= =?utf-8?B?d2FzdmgzbndETHJyMWJ5UXlWUTVxVEszbWNlc0RXVTExcXlpRW9OMUVUWlZ5?= =?utf-8?B?L3p6TnRFSjJ5NFQxT3hVUVg4VnA5eTVZQW0vRHp1MlJxNHR2UkFyaElFTHRP?= =?utf-8?B?NFY1eVhneHBoRWNPbUw5Z211WXR2OHZ0cE5adEV5b2pVMHF4dnZTVEw4ck14?= =?utf-8?B?ckVRMnNVOTAzQWRrTlpRVE9LenJTWWRHK25XSUhFWWt0ZkU5b3BqdVpXcVJl?= =?utf-8?B?MzBJUmV3aVlZSkdwSUVZU2xmSEF0L3M0S09qY1lYM3hFNlBzcWxqZnppNUxB?= =?utf-8?B?aDIxM0ZZbmt3VlpzdG1LMVJjZlhGbHprSjN6bkFsM0JtcXJYT2U1NG1NYmtC?= =?utf-8?B?bHJ4TUE1bHNoZFpuall5Ymg3dGJhU093dnRRTWJNUjA4NHJHRTJmZjVFR0VR?= =?utf-8?B?L2VJd1RWRkFGczZLK1UzWlJ1bkxncE85QnFZZVFOOEpOSEdVU296R1E3alU4?= =?utf-8?B?YkJLTE5iaUxubmliN0F6TlFNUXB0UU50aW1xbzVjSis2cGYvWEo1c2lIZnE2?= =?utf-8?B?a1d0ZDh0WG40Smo5empPOXlHelRjZXBqTTFiNUJ3aGJaL29tSTZwRjcwcVNX?= =?utf-8?B?SlFPWUJjNlZTTTdBeFJzbHJ6cE9QeWFKNDBaN1ZhNjVmSWVNa0RSaHJGdDEy?= =?utf-8?B?QUNTZ2k4aWtua2UwZU8wbmpzS1Erb3oyZFdsR0d3N1kvc2JQU1pnVUZQZVZm?= =?utf-8?B?dTJqdzRpYUJVNzdNcEdEWWtiQWZtc0czZTRURTZVWlk1MHYrN1NtSGJINDI3?= =?utf-8?B?UUkxZ3VVQ2Q1MERJbGxBV0c5S1JDeC9SWm5FRXZMYllrNGw2cFpKeVhTdEsr?= =?utf-8?B?elRRM1h2MncvTXNaQ2NuZnNaTWdFZDhIcEdQS0M4b0NZMWtFcDlBdUtWZjNO?= =?utf-8?B?MFd1M2FKZjVTcWFVUnJlWFpzeWQ2QWlFMHQ2b2l3RG5JZmY0OEtjemcxdU1F?= =?utf-8?B?TEtnbllyTUkvOHBhanpPb2krZVdFa2FFMmNxeXJ5Zi9kaUlROU5RNmF0NzVK?= =?utf-8?B?dlJnRG00OVhEMzdFRmN2bm1uc2Ira2pFanR1dW55a3VhUTZuTUo3aDd4YWYx?= =?utf-8?B?SHVmeHVEdUYzY1B4amVHemJpTXg1MGExYXRoVCswVTZ2Z29GNlVnQjUwdlJK?= =?utf-8?B?aHlSeDVMekhDcktNdkRPaDhRVi9ySitrOXBEOUVrWFpaUEJScUE1eUtzRWN4?= =?utf-8?B?NHNxVTRqa0tYeTNROFFsNStBM0Zsdmp4ajhDQnRpMi8vMy83SHhFbVBDRTc3?= =?utf-8?B?MVZJajgwRHQ2SUhoOU9lTExxRkwrLzFvMmdvTGJIcUxaUVpvV2QrbWxWZ0lr?= =?utf-8?B?ZmxTRlB4akpUaW8wWjRrVERjd3gxOFRORGdBMi9sdld6RGVYOFlUWTBGdVhH?= =?utf-8?B?YkxNVmo0Vnppa21oamoyVkxueFRWVGU4WmRsOVJlRldSZnpyeFlwR2ZnPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d043aa76-bfe3-4833-2c8c-08dc4b4334e8 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Mar 2024 14:12:00.4268 (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: DB9P250MB0474 Subject: Re: [FFmpeg-devel] [PATCH v2 08/12] lavc/frame_thread_encoder: avoid assigning a whole AVCodecContext 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: Anton Khirnov: > It is highly unsafe, as AVCodecContext contains many allocated fields. > Everything needed by worked threads should be covered by > * routing through AVCodecParameters > * av_opt_copy() > * copying quantisation matrices manually > > avcodec_free_context() can now be used for per-thread contexts. > --- > libavcodec/frame_thread_encoder.c | 44 ++++++++++++++++++++++++------- > 1 file changed, 34 insertions(+), 10 deletions(-) > > diff --git a/libavcodec/frame_thread_encoder.c b/libavcodec/frame_thread_encoder.c > index cda5158117..5ea6386dfb 100644 > --- a/libavcodec/frame_thread_encoder.c > +++ b/libavcodec/frame_thread_encoder.c > @@ -28,6 +28,7 @@ > #include "libavutil/thread.h" > #include "avcodec.h" > #include "avcodec_internal.h" > +#include "codec_par.h" > #include "encode.h" > #include "internal.h" > #include "pthread_internal.h" > @@ -111,8 +112,7 @@ static void * attribute_align_arg worker(void *v){ > pthread_mutex_unlock(&c->finished_task_mutex); > } > end: > - ff_codec_close(avctx); > - av_freep(&avctx); > + avcodec_free_context(&avctx); > return NULL; > } > > @@ -121,6 +121,7 @@ av_cold int ff_frame_thread_encoder_init(AVCodecContext *avctx) > int i=0; > ThreadContext *c; > AVCodecContext *thread_avctx = NULL; > + AVCodecParameters *par = NULL; > int ret; > > if( !(avctx->thread_type & FF_THREAD_FRAME) > @@ -194,18 +195,27 @@ av_cold int ff_frame_thread_encoder_init(AVCodecContext *avctx) > } > } > > + par = avcodec_parameters_alloc(); > + if (!par) { > + ret = AVERROR(ENOMEM); > + goto fail; > + } > + > + ret = avcodec_parameters_from_context(par, avctx); > + if (ret < 0) > + goto fail; > + > for(i=0; ithread_count ; i++){ > - void *tmpv; > thread_avctx = avcodec_alloc_context3(avctx->codec); > if (!thread_avctx) { > ret = AVERROR(ENOMEM); > goto fail; > } > - tmpv = thread_avctx->priv_data; > - *thread_avctx = *avctx; > - thread_avctx->priv_data = tmpv; > - thread_avctx->internal = NULL; > - thread_avctx->hw_frames_ctx = NULL; > + > + ret = avcodec_parameters_to_context(thread_avctx, par); > + if (ret < 0) > + goto fail; > + > ret = av_opt_copy(thread_avctx, avctx); > if (ret < 0) > goto fail; > @@ -217,6 +227,18 @@ av_cold int ff_frame_thread_encoder_init(AVCodecContext *avctx) > thread_avctx->thread_count = 1; > thread_avctx->active_thread_type &= ~FF_THREAD_FRAME; > > +#define DUP_MATRIX(m) \ > + if (avctx->m) { \ > + thread_avctx->m = av_memdup(avctx->m, 64 * sizeof(avctx->m)); \ > + if (!thread_avctx->m) { \ > + ret = AVERROR(ENOMEM); \ > + goto fail; \ > + } \ > + } > + DUP_MATRIX(intra_matrix); > + DUP_MATRIX(chroma_intra_matrix); > + DUP_MATRIX(inter_matrix); > + > if ((ret = avcodec_open2(thread_avctx, avctx->codec, NULL)) < 0) > goto fail; > av_assert0(!thread_avctx->internal->frame_thread_encoder); > @@ -227,12 +249,14 @@ av_cold int ff_frame_thread_encoder_init(AVCodecContext *avctx) > } > } > > + avcodec_parameters_free(&par); > + > avctx->active_thread_type = FF_THREAD_FRAME; > > return 0; > fail: > - ff_codec_close(thread_avctx); > - av_freep(&thread_avctx); > + avcodec_parameters_free(&par); > + avcodec_free_context(&thread_avctx); > avctx->thread_count = i; > av_log(avctx, AV_LOG_ERROR, "ff_frame_thread_encoder_init failed\n"); > ff_frame_thread_encoder_free(avctx); 1. The earlier code would just work in case the user used a smaller number of elements for the matrices if these matrices were not used at all (which happens for the majority of encoders). This is no longer true with this patch. 2. Did you test this? Did it work? "av_memdup(avctx->m, 64 * sizeof(avctx->m))" uses sizeof a pointer and therefore leads to a buffer overflow. - 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".