From patchwork Wed May 22 08:59:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 49139 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:542:0:b0:460:55fa:d5ed with SMTP id 63csp215587vqf; Wed, 22 May 2024 01:59:42 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVY6l9jAhgiJQeXAQihxF+4LFccLPPVXo/NB6ogtkc9Re8WlnXGfAtt9LMGvgzpGXAVNwAV4XKC2+0adVNCLyd9RnbB2IRR+kddzQ== X-Google-Smtp-Source: AGHT+IH/t9oEkCwQcVG5GyXDzzmZossEWwp+FeINo0rM1jtiKfa/KX9vqQoaL0ZEbvtNlh4CIANV X-Received: by 2002:a17:907:3a45:b0:a59:da00:5acf with SMTP id a640c23a62f3a-a622802bb53mr78888566b.2.1716368381670; Wed, 22 May 2024 01:59:41 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a5a5221e104si1279569666b.566.2024.05.22.01.59.41; Wed, 22 May 2024 01:59:41 -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=@outlook.com header.s=selector1 header.b=m8ir90dL; arc=fail (body hash mismatch); 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1968168D3FA; Wed, 22 May 2024 11:59:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04olkn2097.outbound.protection.outlook.com [40.92.75.97]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4EE3468D3D7 for ; Wed, 22 May 2024 11:59:32 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RCbTPw+B80Awd0TnbKresCcGkJxDA5TLbdSGcnBpKxka5Qht5EmNx2Kl/TFv3jEubtDTxplnb/kRCemZSpPECmbsLJEXM7rti0VBDNzB+MQX2GT/5qltWi2TgI1XRSlZ29kA3LudWNPtQiXWe/uyL1z4hlGTKT2qm3xiUYqH752UjyVgxQS21qBlXnod3ZX7RfIYEpr75VpsyDGJzue+F3g3CwgBYDuAgrXVXfJd+A1LzzBghT/ezjcNTFJcCLIh85s4AGrD9dA6rDS01kJVPYGHowLFTmJD2Gt3EvMjhyRZublHyvATUQw/rxFUUC0V5vDWuHNHeD3BhJqYnDSwUA== 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=z7NKWSo8tMKX2FeqZJ4jJ22FI2pXo3GULgnUEdjULhI=; b=XtVdkM4gteWQSwkrwmaEReEKkzNwwbGEmO7jAN96P28lAvdq7U/NZ9O/ALgAcCoqgwkzAKSP7FQ30kJunHcmRF6BKjcnVvciQ6pM0bulOGq3CTkvSNc6vzeevkZk+p0xNbKaRlujEG2Dpw38G7XsmlvrkVHYHixkWIecymlxgjaL/YvCb0bPGueJeQ2rIjs1K79hKSud5q5O/JGXfLfOLnOam7bonrxzWCIdLwTUsmYBlaJtbj+5fqLLlldDsPognknNHkBZyCgFYg1mRZnc4KrPvw+gyY+a2SKHslE7NCsiUkTeaVeGWhRwbBEkjqidn+hszRCaAYFjP3tf20Vz9Q== 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=z7NKWSo8tMKX2FeqZJ4jJ22FI2pXo3GULgnUEdjULhI=; b=m8ir90dLBxuP6s/R0nSA+00mFaPsEXNzy0QtIiDfuLm0Y1lkvLa8o4uA4Qe6pvqclHsbvS4iABUe1DNHyDhREOMACyVgwmJLmWyTuSNAKFJAHSQ+fO5HkpOa7eCuElMDc+YpTzZvDwvOp6jPSvwLvfFpnsCVMJ6W04fEnqpN5yayKZeUcnh8wM1O3rc4IWxA8VvCfFYhRsTox2CZhOuyB1x0JClNl7tOXdTWHkGnG3ygWZyngxZ++y6MTVhrmNFVtRaiK5wSx/n1QjnL67IFkA/vbHT5Ijx5ejpWytHaZWqAgfOEGv4zYEfeUGqAd1A11l/7vPxdk9UNk3UUY55jrA== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AM8P250MB0391.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:32a::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7611.19; Wed, 22 May 2024 08:59:30 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%3]) with mapi id 15.20.7587.030; Wed, 22 May 2024 08:59:30 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 May 2024 10:59:20 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [uUkvV4sY6+btMhqSNhAeKnYm6aPDvweRMtYTb+tSjzQ=] X-ClientProxiedBy: ZR0P278CA0183.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::13) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240522085923.3697837-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AM8P250MB0391:EE_ X-MS-Office365-Filtering-Correlation-Id: 78e08558-4823-4f8b-f5dc-08dc7a3d7df3 X-Microsoft-Antispam: BCL:0; ARA:14566002|461199019|3412199016|440099019|1710799017; X-Microsoft-Antispam-Message-Info: PKE2HCJq9inm1GILo9tbXenNkyZQdOO6c9YHifSyBFPBrjJKoFUWvr6mVjADdEOd6Ac0U7nTbdWE2TblI3zsmV9E4hNiYtR1jgfQXMtLyHYQEmT/euWxey0XcXVfmdMq1SBJOJsIyvYxdTdtnRnBKWa/CYjDS9YwPcmtyjQy1AkWskQTUx+fsp7X5f3YS1W/jQXZnaOzaUyAuUbf19DpCpJQYO6IvGJZa/MiTzkriqc/v/HqgNWOMhxDB5wMZCHVfV0eQrm7jjHWBEHvauFFJt/GY4Lqyrov8tpbEkUl/goco0rpbikthJ7RZxEuk1YiW8A9SoAmC2l4LCs5Mfagl6SEK614dHiPJK3YsYeDrRMgiWN+Pcy6qeGRZGC7+lJKkOUPqz+izuWoOM593qq5DDGgcfmtv5yRqyfKSZBCtF1n23zA4w+56bFHYa6M3lm2CFUS4YPuvzsUnphPRQEFutadAGyBV/qH4YcvY3/BE/LRnYhzfbLRP5GHZFMAuGsyf5hdm/aun9G8BH7VuX9u+YfdvPNSkWvcp343kmThyp9U+bD4Sg8X5TCw+R09LQ34UzA+IK/JkFRx1F5K45K24WHj3f3/s+0GYflu9Kx3oqSM8NDMVtcmZLX+aBDGRxPi X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dh4/Ixe0qacJmtK7M4tem4Re2OIc6DWI2Z6K9/M7Xf2X+XZx7rGk8XvyVzN/rGtmJcJZ7/pLY8apdya1TMQZvVDWdWH4UxMZVPfxLKWCSFrqvcDaD9yMuSbcVic0uI/sQc813GrqEM87kI4EUe28hOGqplhUCen9dGsvcNgnIW3RA6aMibdteKDQdtDZgpq2rkOkE24jasmKpzqjqqW/7Wk7cMV+aa4ESKKjYGXiW0OH+iReIxeA/3Z1fIQj+YCgK/fguslnxAOUyQojkb9+kVZX9rzFqLoqePL/bkxpCtgQSldvgjzUPxYXY1v7aljffXa6Z8bAbYqYC92NdCqcoT/08ZjJR7Qy5TmSUYGpI2MxsT5ylLpK2vOGDNxEKdx5H14FJHzQomO+G2XcNv2A6QCKeKlob/N5LTUFT5f0hYmnsbFis4YCiaomKGDf/i94qewlceWHUoLwFhEUQSuivoK5bUIQ27cWp6+xziUqJjdJ6R8qI+C+2nbMhmOZ2qflIhJQWom6INfhV1LcoY5P/j7f3t1YYs2Z0BaGabl9ySYLuKvfSggAMBXwdk1SKDDYff/Mz7xs1ojvcxaaPCnZUIfiIjbnZMBm6hL6GZbEOetC4kfAVIbNke9n5AkJHA9DGbqDVmxJJTI550TJVNv99FPd7bLQfZe0czrp4QMVbbjUPVLBehVOxKjVtugcx6+eJ4c0HcTPUMo9v7JhLUxWJNVv0dKUL52iYg2NFc0v5u4yPHdJBjFmx8wcBJN2t2hKtNLWMoVXJjOVG5d1mThy7oQQ6O9ZpslsJ/nB8ElAurIPbDqYS7ug1r4CfNOQ+hyDfkCwh+NOxDNDJcyLBLqoYcqFz2d1qcCkkvNpOCnT0i1NoQTFHR2kgAjfDtctzaHIYzWl8687SXx6iAqWRXmbhi9xExwq9ZuFlYx8jwph5lAqcgcJvOMyImVqPlYCtCN7O5Pqgtk6Ukgk8pPuPcXQGiXTPSH5JzxRfYwGAzGg0X7h8cOUNZlpeqQcygdbc/IUoAHWGQUyxxRPF1kfGxOeFIVphiqjC52YJopGtNQ3lwZ/nyzVQYWkWE2flOdI5jPTJ6d3YPxfJO20tpG4Yyr0XNgLivD45wAV41bDk8XS//3P/g5/vE7Nw4M5dJmTnE9w6LijKRBdpL5cRzTGvlc9qzBIe3WKR3sAaUNh/+3jl9orf5s/4nHfE7e/2AY9KSTm9dpJQ3AMjgKAUY06s9E8vGt0ejOQyl1NzEQPuyjHNRWDemXEj7MbKbtNz3c9mEBFcV+uyU6c9fP3ILdGUBA22Q== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 78e08558-4823-4f8b-f5dc-08dc7a3d7df3 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 May 2024 08:59:30.6486 (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: AM8P250MB0391 Subject: [FFmpeg-devel] [PATCH 2/5] avfilter/af_atempo: Simplify resetting 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: rq7HRktoVbsV The earlier code distinguished between a partial reset (yae_clear()) and a complete reset (yae_release_buffers() which also releases the buffers); this separation existed to avoid allocations, as buffers were reallocated on reconfigs. Yet it is pointless since a5704659e3e41b7698812b89f67d9a7467a74d20, so simply use yae_release_buffers() everywhere. Signed-off-by: Andreas Rheinhardt --- libavfilter/af_atempo.c | 69 +++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/libavfilter/af_atempo.c b/libavfilter/af_atempo.c index 1aedb82060..110f792eec 100644 --- a/libavfilter/af_atempo.c +++ b/libavfilter/af_atempo.c @@ -244,18 +244,6 @@ static void yae_release_buffers(ATempoContext *atempo) av_tx_uninit(&atempo->complex_to_real); } -/* av_realloc is not aligned enough; fortunately, the data does not need to - * be preserved */ -#define RE_MALLOC_OR_FAIL(field, field_size, element_size) \ - do { \ - av_freep(&field); \ - field = av_calloc(field_size, element_size); \ - if (!field) { \ - yae_release_buffers(atempo); \ - return AVERROR(ENOMEM); \ - } \ - } while (0) - /** * Prepare filter for processing audio data of given format, * sample rate and number of channels. @@ -289,40 +277,51 @@ static int yae_reset(ATempoContext *atempo, nlevels++; } + /* av_realloc is not aligned enough, so simply discard all the old buffers + * (fortunately, their data does not need to be preserved) */ + yae_release_buffers(atempo); + // initialize audio fragment buffers: - RE_MALLOC_OR_FAIL(atempo->frag[0].data, atempo->window, atempo->stride); - RE_MALLOC_OR_FAIL(atempo->frag[1].data, atempo->window, atempo->stride); - RE_MALLOC_OR_FAIL(atempo->frag[0].xdat_in, (atempo->window + 1), sizeof(AVComplexFloat)); - RE_MALLOC_OR_FAIL(atempo->frag[1].xdat_in, (atempo->window + 1), sizeof(AVComplexFloat)); - RE_MALLOC_OR_FAIL(atempo->frag[0].xdat, (atempo->window + 1), sizeof(AVComplexFloat)); - RE_MALLOC_OR_FAIL(atempo->frag[1].xdat, (atempo->window + 1), sizeof(AVComplexFloat)); + if (!(atempo->frag[0].data = av_calloc(atempo->window, atempo->stride)) || + !(atempo->frag[1].data = av_calloc(atempo->window, atempo->stride)) || + !(atempo->frag[0].xdat_in = av_calloc(atempo->window + 1, sizeof(AVComplexFloat))) || + !(atempo->frag[1].xdat_in = av_calloc(atempo->window + 1, sizeof(AVComplexFloat))) || + !(atempo->frag[0].xdat = av_calloc(atempo->window + 1, sizeof(AVComplexFloat))) || + !(atempo->frag[1].xdat = av_calloc(atempo->window + 1, sizeof(AVComplexFloat)))) { + ret = AVERROR(ENOMEM); + goto fail; + } // initialize rDFT contexts: - av_tx_uninit(&atempo->real_to_complex); - av_tx_uninit(&atempo->complex_to_real); - ret = av_tx_init(&atempo->real_to_complex, &atempo->r2c_fn, AV_TX_FLOAT_RDFT, 0, 1 << (nlevels + 1), &scale, 0); - if (ret < 0) { - yae_release_buffers(atempo); - return ret; - } + if (ret < 0) + goto fail; ret = av_tx_init(&atempo->complex_to_real, &atempo->c2r_fn, AV_TX_FLOAT_RDFT, 1, 1 << (nlevels + 1), &iscale, 0); - if (ret < 0) { - yae_release_buffers(atempo); - return ret; - } + if (ret < 0) + goto fail; - RE_MALLOC_OR_FAIL(atempo->correlation_in, (atempo->window + 1), sizeof(AVComplexFloat)); - RE_MALLOC_OR_FAIL(atempo->correlation, atempo->window, sizeof(AVComplexFloat)); + if (!(atempo->correlation_in = av_calloc(atempo->window + 1, sizeof(AVComplexFloat))) || + !(atempo->correlation = av_calloc(atempo->window, sizeof(AVComplexFloat)))) { + ret = AVERROR(ENOMEM); + goto fail; + } atempo->ring = atempo->window * 3; - RE_MALLOC_OR_FAIL(atempo->buffer, atempo->ring, atempo->stride); + atempo->buffer = av_calloc(atempo->ring, atempo->stride); + if (!atempo->buffer) { + ret = AVERROR(ENOMEM); + goto fail; + } // initialize the Hann window function: - RE_MALLOC_OR_FAIL(atempo->hann, atempo->window, sizeof(float)); + atempo->hann = av_malloc_array(atempo->window, sizeof(float)); + if (!atempo->hann) { + ret = AVERROR(ENOMEM); + goto fail; + } for (i = 0; i < atempo->window; i++) { double t = (double)i / (double)(atempo->window - 1); @@ -330,8 +329,10 @@ static int yae_reset(ATempoContext *atempo, atempo->hann[i] = (float)h; } - yae_clear(atempo); return 0; +fail: + yae_release_buffers(atempo); + return ret; } static int yae_update(AVFilterContext *ctx)