From patchwork Wed Mar 10 21:54:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 26327 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id F0E5B44B799 for ; Wed, 10 Mar 2021 23:55:50 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DA92968AB40; Wed, 10 Mar 2021 23:55:50 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E12F368AB03 for ; Wed, 10 Mar 2021 23:55:38 +0200 (EET) Received: by mail-ej1-f42.google.com with SMTP id ox4so26222842ejb.11 for ; Wed, 10 Mar 2021 13:55:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references:reply-to :mime-version:content-transfer-encoding; bh=qPKvmu1GHnSR81mXwxSxkTLaH3qQI3fyaI54jJoBy9I=; b=Lm1XI6n/Tz7m2Xbvby2gFyPLSq9sEJmrq9yKO4dCeQysLHfXtqtl0u9DTL8kGId0kg dyT1f8BMNYcrSjGrtUjHZDkpNKZu723HLD20Apo23mhsqD2CSg0RLOd1NXtgIdwZgIXH uHIG4pA7AZO5EnS14PuXMqTyLYs9oMoQycWu3ULXGBCigsuijGyXtPTT154ZvYKYyEi/ es90fctF+JHXYoXvWmAqtRYgNf6gBVRwOAZE/PnHPyaE8ta+L3T8pCyyVVX3KyUX9zGA kV8SktOfG7t2BjCMMyUSY1RC0wSLZn91Lp65rMPPjaeD1vbwz5YtWr0gu43nJuIj0/jo jP8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:reply-to:mime-version:content-transfer-encoding; bh=qPKvmu1GHnSR81mXwxSxkTLaH3qQI3fyaI54jJoBy9I=; b=odQzjftn8uBFNrw6kY2qEEWQikBDZ+LqElmiRFvwPiFBCPDhMVxcK13RdgrlSbd7XP QpOgw2URduA5L9ahbse00AuDCrjahJnb6/AacyNKqf0KggqkI+Mx1oQCOGuOSFWaMvoM UXbTO1LUfuwHf29arHkttUVXjysiSMDTGdSivZNDGxFVy6cBDnR2XaYrfuYN+jqORbrA QO/zYPOYWINGvoAQYPt5nkqvjwT9x81Oq+HEyTOoUK08sE42eO/zVYq/OIs2X+GLUgHo robEZ/nsYEe6FthdAH+WHQyiIrisAe47XrInogakVEzYlU8T7/IlezUouhQVsJV9AKKk XygA== X-Gm-Message-State: AOAM530EyNb5AlDbXybuRuHNaZe2Vvym2RU6+RulyPgCSRGcHhI/4QZZ 8MxtTCUeDJD0k0HA3IRzXOUenSkAFDw= X-Google-Smtp-Source: ABdhPJxMfZPDC5W22/JGBSeB4ULERwUAYRn6b641IXQ/QyfDa4rlPbJBb2yikruEN3NxSL7XR3viTg== X-Received: by 2002:a17:907:7745:: with SMTP id kx5mr18615ejc.3.1615413338259; Wed, 10 Mar 2021 13:55:38 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id m10sm351993ejx.10.2021.03.10.13.55.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Mar 2021 13:55:37 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 10 Mar 2021 22:54:39 +0100 Message-Id: <20210310215446.1396386-7-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210310010601.1142819-1-andreas.rheinhardt@gmail.com> References: <20210310010601.1142819-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 16/23] dnn/dnn_backend_native_layer_conv2d: Avoid allocation when single-threaded X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Also fixes a memleak in single-threaded mode when an error happens in preparing the output data buffer; and also removes an unchecked allocation. Signed-off-by: Andreas Rheinhardt --- .../dnn/dnn_backend_native_layer_conv2d.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libavfilter/dnn/dnn_backend_native_layer_conv2d.c b/libavfilter/dnn/dnn_backend_native_layer_conv2d.c index 2e5aacdc2b..cdf65974b6 100644 --- a/libavfilter/dnn/dnn_backend_native_layer_conv2d.c +++ b/libavfilter/dnn/dnn_backend_native_layer_conv2d.c @@ -187,12 +187,14 @@ static void * dnn_execute_layer_conv2d_thread(void *threadarg) int ff_dnn_execute_layer_conv2d(DnnOperand *operands, const int32_t *input_operand_indexes, int32_t output_operand_index, const void *parameters, NativeContext *ctx) { +#if HAVE_PTHREAD_CANCEL int thread_num = (ctx->options.conv2d_threads <= 0 || ctx->options.conv2d_threads > av_cpu_count()) ? (av_cpu_count() + 1) : (ctx->options.conv2d_threads); -#if HAVE_PTHREAD_CANCEL int thread_stride; -#endif ThreadParam **thread_param = av_malloc_array(thread_num, sizeof(*thread_param)); +#else + ThreadParam thread_param = { 0 }; +#endif ThreadCommonParam thread_common_param; const ConvolutionalParams *conv_params = parameters; int height = operands[input_operand_indexes[0]].dims[1]; @@ -244,15 +246,13 @@ int ff_dnn_execute_layer_conv2d(DnnOperand *operands, const int32_t *input_opera for (int i = 0; i < thread_num; i++){ av_freep(&thread_param[i]); } + av_free(thread_param); #else - thread_param[0] = av_malloc(sizeof(*thread_param[0])); - thread_param[0]->thread_common_param = &thread_common_param; - thread_param[0]->thread_start = pad_size; - thread_param[0]->thread_end = height - pad_size; - dnn_execute_layer_conv2d_thread((void *)thread_param[0]); - av_freep(&thread_param[0]); + thread_param.thread_common_param = &thread_common_param; + thread_param.thread_start = pad_size; + thread_param.thread_end = height - pad_size; + dnn_execute_layer_conv2d_thread(&thread_param); #endif - av_freep(&thread_param); return DNN_SUCCESS; }