From patchwork Fri Mar 22 20:28:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 47328 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1014:b0:1a3:ac71:9534 with SMTP id nk20csp163290pzb; Fri, 22 Mar 2024 13:29:43 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXsUNrpfVYmP8kTMt0zhBSPJYCYWPdTp/KHH3EsHSxAepoLqWShdinEauzRM6PcaddCnsSTUvdbiJmmx7vVUj4+8GiSe/Nh6zwjqA== X-Google-Smtp-Source: AGHT+IGWm5SoSEmO5T7WsFxJAOdz+tBSY/CNryaVG0v+tmsB7Qybc89HC3rLSf/66EsrUscMy9K2 X-Received: by 2002:a17:906:3c01:b0:a46:b79e:d8d with SMTP id h1-20020a1709063c0100b00a46b79e0d8dmr514253ejg.29.1711139382891; Fri, 22 Mar 2024 13:29:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1711139382; cv=none; d=google.com; s=arc-20160816; b=YiGvRZWMSCSvAMHLf7aDr8UkrHzT6AevuhfpdhHwMgfrAKx9fJI7PVIbDdLG/LrjY5 rkfokUfAz+lQ32T3Hd268Afq3VJl2VDHl9/UYx0ORVciHlQfj8QyMtMOwgIORiHL/Mm2 r0uc/o1gN0P05TGwOIUd/TfFQ1YYRrB+2j1Mf4hm/2y3ZmYuIJIRhiEtA7+XfHOZURnn XakudB3PNGjpEWmOW1vUBA1TMC6QJsoQEDK4dM5hoIKIRvlOaPeBrVXZVSK4lPY1NuBC eq3mo8isSBuZzsAN9K0YLUvf8hqzQyQ4qDjhQacQpg3flrl5xbUOaHZAchDaIhApU7aK y93w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=/OCG1RIipI3ogpPcUOgXmr/ouXFTZQ49bXXpWYI3PwU=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=ZdZLeDp6RtrywjknzPy07MG5ZrHHBQ5vlpIhAjHq1eGdIzrudXAtUR6/Z67srO1T3G T2PQqAdUoAmm/GH07bP+SC+WiQHm5q8un4tG2b8YhyiOnQbXWf18JUG5kwELWeAWuN3E KeSSXEKJsZ7GHxHtanMS+IpWnlr22efIoQNn8g7t3++UWJImp8OD4udy2gRBp/bhV3PD KI656u2j9ick+D4VKh1Pa5zb/r7L7pAzG6By4Bz1pGz4whGcyKEed+8XGRZq7SNCtYPg AYqdnpjzH/nVqdgJInge5gJqEkf9otTBZZVefhSrgah2oCAeMzN7EKPvvuYbuam06eqQ To2w==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=FokwoanO; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id gr20-20020a170906e2d400b00a46d2e3fdcdsi143806ejb.721.2024.03.22.13.29.42; Fri, 22 Mar 2024 13:29:42 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=FokwoanO; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 730B868D5CB; Fri, 22 Mar 2024 22:29:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8CCD968D2E4 for ; Fri, 22 Mar 2024 22:28:56 +0200 (EET) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=FokwoanO; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 211194D5C for ; Fri, 22 Mar 2024 21:28:56 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id MrymBsTPyN8R for ; Fri, 22 Mar 2024 21:28:55 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1711139334; bh=m/4lB+stHg00YezoLOn2Wb5aAp1R52+gOmT/7yYedZs=; h=From:To:Subject:Date:In-Reply-To:References:From; b=FokwoanOyVSpSn6hH22km/rMctFmeInrCmVeaW2wRPLc27XNqu0MtKptYK5H2DMYs +YaE4O02H9qtQzrBcIYJDLEWUP2Wgaeesi5zK5AcnaQAsjZ1UlESBeX2D8WdM2JaEi qw8WsMP/+2o2LzCiwQPyGNAaEKGzLOG/kEn159vbxFMk3ao/D7wUyZdyAEgzWSJWB5 6kXHHCXZM+W/LKegek0pYyHPbr5E+alaxT+nWLzXUdlotWi1kyykbd+0VzB0qSeZWp XKCwSvUyXc9s7lg8SxQr0RxAa1t9Ifc+XLUrbE2owa9BHS+878rQWeVnvxev0D61/+ qzV1PnplggJoA== Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail1.khirnov.net (Postfix) with ESMTPS id 718924D5D for ; Fri, 22 Mar 2024 21:28:54 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 7A9033A0DA6 for ; Fri, 22 Mar 2024 21:28:45 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 22 Mar 2024 21:28:37 +0100 Message-ID: <20240322202841.31730-8-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240322202841.31730-1-anton@khirnov.net> References: <20240322202841.31730-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: mHishgZosR2i It is highly unsafe, as AVCodecContext contains many allocated fields. Copying information via AVCodecParameters and with av_opt_copy() should handle everything needed by thread workers. --- libavcodec/frame_thread_encoder.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/libavcodec/frame_thread_encoder.c b/libavcodec/frame_thread_encoder.c index cda5158117..744062b776 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" @@ -121,6 +122,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 +196,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; @@ -227,10 +238,13 @@ av_cold int ff_frame_thread_encoder_init(AVCodecContext *avctx) } } + avcodec_parameters_free(&par); + avctx->active_thread_type = FF_THREAD_FRAME; return 0; fail: + avcodec_parameters_free(&par); ff_codec_close(thread_avctx); av_freep(&thread_avctx); avctx->thread_count = i;