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 0FC3749907 for ; Sun, 24 Mar 2024 11:26:05 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 84DCE68D336; Sun, 24 Mar 2024 13:26:03 +0200 (EET) Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02olkn2078.outbound.protection.outlook.com [40.92.49.78]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F2AE368D16C for ; Sun, 24 Mar 2024 13:25:56 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CiJ1W5XYPMLClyzG+Mxi8hCumMS9jyfVr6cppKo9K4zz9zNDuBYKAVifoy9VlREPQ9NrJuDGKqWKG152NkT68Sf2YLWSpIpJcPksoka1yYUUzc7iqZvidoQ98KglOxWx0YQbJj/Amw+YzaG7QnCjapIgnWxHpRVJwLlO3kzpMs3/K3JRUjgBerXMcg3RJctrNhjcjD6xOohO007rJEM8xNjBfbaGipCYk15f/qZlURHeWPpNuttUyH6V7uUE76ILGvdrWgHOkosAQregqkhDxqDciurxd2PESkDBQj1SOIjwOATkAt8pZjIvgMF6ziMnJpGgJC1D/jkqNv11cR8Nvg== 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=x8XRvVheG8z2wEtRof3fGeI4zBS65PN8v6qkqM+/SWo=; b=K8wDGe5nyqnbXNLDQN6sxupvMYqiT8S9LmTSDq0gxASFJl+mTEY3v4Mn9jk9XnMHOv+yxftAilGwMz1cm0PwIgH0mVf9WjJsmNTayfpv2+AUIltkPRwTx+mioZ4+YdekkIUzmaBic/X+QxDoqae4hbTsixmJUizCHNSx1Kc+M0t6TeSxymPfoUSoAV7lbfCWKQPAWvWuqMA/R/su7kI9CjF08NN33AouR+w2qg7xTYFhy6CFnRCHV7fAzP8mdUJvgm4cGvR0N/3W92Smy+aNOmewc4cLEzBXOLqm9a7OreKXoZHfpebgCZ7v0AVIAnrHEUaniXhlpCUVkrBU0VCzEw== 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=x8XRvVheG8z2wEtRof3fGeI4zBS65PN8v6qkqM+/SWo=; b=bksQ+EjvV726n1lgPQBPQh+EjMgGcq1TLGveBQpKeF+8icSJ4cdzz4tC9z1jX7Yl21mKdlN+TL4n92E1IkAzo0u6KP39YXxRg+944zhYysEkX4kKZL+Mw2WD2rIgVnESzfqAHt6WZLREg2Bqzr9WiepQf87UG4E7bqFaCZCxlyzVy6OOvNaikugy+qJd8uzthkke8hRXw/y2fK+dxVVwsI6yaGS2v8QiLh7ZOkn2C+OyoTyvPA9KkYnAkPPuoF4tRzUmvlgTQBUlo3HELWY34sBGlIOgGFz85uU/j4IQjGuZ3E2vFhj7KOZtpX4rI7U5ETdiS9GVZGjw3DyT7U40+g== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AM8P250MB0076.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:36f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.31; Sun, 24 Mar 2024 11:25:55 +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.026; Sun, 24 Mar 2024 11:25:55 +0000 Message-ID: Date: Sun, 24 Mar 2024 12:25:53 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20240324001100.GF6420@pb2> <20240324092917.12874-2-anton@khirnov.net> From: Andreas Rheinhardt In-Reply-To: <20240324092917.12874-2-anton@khirnov.net> X-TMN: [kmu791cedAfY2JJUTSEQENLI1IL64A9U+96x8k3cWxs=] X-ClientProxiedBy: ZR0P278CA0194.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::21) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <51f31c34-751d-420e-b677-bf4479718baa@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AM8P250MB0076:EE_ X-MS-Office365-Filtering-Correlation-Id: db8f9551-5440-4c38-aeca-08dc4bf52bd2 X-MS-Exchange-SLBlob-MailProps: Cq7lScuPrnqkjmXb1vlddM5aSa/Epk3A8r7xaVqrW5WC7xaejU6FUh0HACBXKBivNAZ026qtot/w/hojK7Icz3OadvaxNBb5nXxo/+SViYu1JkDakv/g71u+5c32OTadBj3Rvdl8Dwpt2BT/cZmGYnKAjqqOvz3mX5hvLck8gHe/zplUgAOeI1KQKbp39F0NnkBcRIAFLVWhRbMGYXwYNwYB4KwZ/C/dOB47bkqLFqRUuGWz9Cl1ACMF8cIHrnsHTP4QsQJMTHE2TysE8iH0JpZrKAbUbcR6cdzsjKi/+tt/Y4m2bt9oi9mo5faZcMTDgGqB9oZaEzJI3itmFxoRpKlfO6UTf3/BAQtZ9PdcIKgABx6KQbhFEzEo9saJJ22XcT49ptTr+OxNpSjbs9ofbCoXf8s6nfjdCxc0kY0xkgv05k4DlR3cFdvKtiMID/oJDQWwam+nsVr71Tm30KrtCta6anRVRd7AVIjwKkOObdzVsRDIUlHsZexT5PkjKGiWmFgElCDwLXWQiCYLGoKEqqlz1ONGsg9OjrY/IR95kYHt/rn7sd+63byFNF8Ps0vC6bpxFJUeEJQnjdcoG+NYIz+plHFQQ/mn7O9DXIaM2LZcUXTs6XgI2f0AaGHBjXMRhNt62EB9dgJuzXOoVSWI7V8OjW+jgmtnaKsBt9HcYadWfxoLNCLfc1Dirq5yK0XtI/yUQEdXjGiyGhQGfnv7UX/7QioSLIje79VxFKnEPPfFir8jDErfl57m0dOsKLZpNDyizawPYtc= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HjSZuGHcGlZhnncDptqUY7EPbSArQFH3cUJMSfiXBGvs4hs2MZNm7ihXSvUpfMay+/TZFMNjnEFG36OHevMhaHZww8+4twHx/EoPosoLPuiLXEB8+b9MEL10EERRrzMaP+E1FNuKSt+pKRPUaWCyYZkBvS06cMsB9mJeEI3rRrcfv53LRcSt7ozrmiypuK09cjyBy7Qe8FNmVrK3nBj0LdkxSZgjHFu3eo3EbwrCNSMvgFg6nTcXFVyb0ftITeuV67ZFGxjlvVwczWD5DuoOYpLYJD2PEhNL/vwo36fCH9+0nrsxj8HQFkBBjF/RTRdopvkbF79YmyGL1zR0FLrBXzFGFdWtmwLIvhWkrDQebMbVbCQM9zzSQ9lSrSQOVkIR2yYjdFaJjSdEo5KpVg5UTyi1ufLYPE4PAvjAI1It2AjOdH/f9Lm332rB9syW48p+UPi7+vT0khRWhPzsxMQqmRWp98w4aW7e4uw8rpAq93CNlEHMHfo9BxSQz4Nq4wWy+JCgbcfqKV2MwwCWIpceTPik+9OBUxQyAWT/nbC6fWSISPpsE384cQisUJTzoQPe X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aEgzc0ZYbkxDTkJjNjFRR3d6cWdpL0syWTk5WmZYamZuR3lpNEVxaHNEemgv?= =?utf-8?B?ckFyUUNCckpzV3ZuUzJraDdvS3NEaUJiUUo2dnlPRFVXUnlXR2RTWlBVSlVr?= =?utf-8?B?TFpvQkhHdHBaLzhyYkM0cEg3UEhPNzd3VytHWjZEQUg4UTh1ZmgrTkVkNlZ0?= =?utf-8?B?MmJJQ0x4V0tyRm00R2YxcDFLUGd0dE5rdUJ1YkZMcU1vWFpvTHdmVTUyaXBJ?= =?utf-8?B?UXF4bjNGZDJWTUdtUUdKb3F5c2RqdWp5UEQxdUFzdkxOZCtkdE5sa1N3eFdo?= =?utf-8?B?WlhJbzllUkVTWUZPbEJpVjExOFEvaERzVkNCbEkyUmJKV1l0STBBa3VMN3lM?= =?utf-8?B?dVlxTUU4bCt6b1N6Q3ZjU3pjZmVrVTVEWEM3aWdHSjQxZ01oUWpuZnByekkr?= =?utf-8?B?Y29PT2w0YkhPMi81TDI4V1FsVjZPb1ZSMjBObFFNVTFpVDkraXF1Y0xHWkds?= =?utf-8?B?L29ESG52RmxqcGF6eXR0TmJCelprb2todXA2N2M4ek1qVjR1U0syRkNGaG1R?= =?utf-8?B?OXBjS1VOSy9WenlaVkN4bWNBQUNRNlV1MkRVRWlYWGJ2Y1B2cFRaNE9ZRjhO?= =?utf-8?B?S2FGbXQ3U3pXU1Z4RUY1VFJmWTZLbTVXQXRRdG9ieEVrdDhWMEdnYUhYYmhu?= =?utf-8?B?bTVwTVFMVTMwcEtZdDJKRnNKYmNWL0gwdkFBam56Z000bWlCb2ZJcjNoWHNC?= =?utf-8?B?bHNraWRVL0RtMG9oMWlkSi9qbnliQTlmV3ZnalhoMFo3SWdGUUFCcGpHT0Uz?= =?utf-8?B?SmVuc1UyUXh6T1VETGhxbUFuR1R4OWtvZ2pHdFZ0ZDhjTFFGUDBEaGhvdi96?= =?utf-8?B?RjhoUkMvMmtGbXNJWmxOUUpsRVJLamc1ZW1ub1l5YW9QSVF6VEpzZGNVNjB5?= =?utf-8?B?cHlUZDRseEFWU3grZ3g3OGJaZ3EzTnIwSy9wRDl2WDhqT2hKS2IxellYd04r?= =?utf-8?B?WUwrd0pSOERyYmt4bzdJMHVObzFKRW82RVcrTUhxRDRzbHYyUWRmeHZOUHVJ?= =?utf-8?B?ZFJVYWxuclo0YXRlUjFNclE3bk1TdkpvV0RGeXFRK2RHNTVKZ0srWk9UazJ2?= =?utf-8?B?cXVva0JIcDcyVlZ0Ump1c3dVOFdoUjc5d05LUGNWUlJHWG5nZmJPbDUyZzJV?= =?utf-8?B?dzYvYXhudVBXRW5XckVzeEVudkhJbmJibFhyUzU0SjJNMEV4NVAyQlN4RXBZ?= =?utf-8?B?U0xGMmV2U0tXWDQ5Qm43UG9sdFZXRVUvZkNMTmZxVm4rZHA5bGZRVFpQdFFo?= =?utf-8?B?YWgxVkRkSkVNVi9RdHpxOVo0UzdmclZ3ZkFHanN2Q1VXMG5lYWJEZFczMG1l?= =?utf-8?B?R1hYQlZFMEN5VGVDbm04ZXY5L1E0RUN3UWxHMFo4MzVEUmphUk5GeStGZ0JS?= =?utf-8?B?SDZ2UzI0a245ZXRwZFBwMGtQZC9LRlZkc3FFZXhsc3hzbENxaS9TNC9wOTFq?= =?utf-8?B?d2lyZHYxSlNyRXpTNUJaUmVGSUpvcnQybTdhSFllak1xWlBQa3MwL0dhbzdw?= =?utf-8?B?ZGwrU2g0M0RBUVNyNGVOTW5QS0htMk5qWUEvbUV2V2plN3drZi9WZDcyNmpn?= =?utf-8?B?eUl6eFkxWWtyc3RpekwxQ0lLZGRFbytQUy85R041SHF3dUJmY0wxa3BmWDRs?= =?utf-8?B?bEttbTh0aGNDaU9wSGVEVzdnOEgvUXlOa3VxREhsSG5xbE9CTUNWWitWeFAr?= =?utf-8?B?bnAweVRDeGZMMnlpaVJaUTJReURxOFJ6LzBpb3NCVUVhTW9pcXd3WU53PT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: db8f9551-5440-4c38-aeca-08dc4bf52bd2 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2024 11:25:55.5767 (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: AM8P250MB0076 Subject: Re: [FFmpeg-devel] [PATCH v3 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. So now we have to maintain a list of stuff to be copied just to avoid this "unsafe" copying. Sounds worse to me. There is another usecase you are breaking: The execute-callbacks. The user may have used custom ones that use a thread pool which would allow using both slice- and frame-threading together. And you also forgot to copy get_encode_buffer. > --- > libavcodec/frame_thread_encoder.c | 48 ++++++++++++++++++++++++------- > 1 file changed, 38 insertions(+), 10 deletions(-) > > diff --git a/libavcodec/frame_thread_encoder.c b/libavcodec/frame_thread_encoder.c > index cda5158117..d34fe022a5 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,22 @@ 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); > + > +#undef DUP_MATRIX > + > + thread_avctx->stats_in = avctx->stats_in; > + > if ((ret = avcodec_open2(thread_avctx, avctx->codec, NULL)) < 0) > goto fail; > av_assert0(!thread_avctx->internal->frame_thread_encoder); > @@ -227,12 +253,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); _______________________________________________ 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".