From patchwork Fri Feb 9 17:27:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 46140 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:a586:b0:19e:8a94:b663 with SMTP id gd6csp1083032pzc; Fri, 9 Feb 2024 09:28:02 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCUPIh15OBbzqtPBxS/6DBJxBBTQ3EUp4Rq0l++TJ7aOD4e1xIDS9+PAP6sKJ0rOIz5wvE/PlbWh7JBvHTbvF5+lLWMRr3hpudgQxA== X-Google-Smtp-Source: AGHT+IFLn3AmktCSzC5U0Wg8Nbhgtq3Tls8wUefGp5Cg3PlWCmGbynfBk3rs3lysU/A65/r80E6l X-Received: by 2002:a50:9fe7:0:b0:561:1d7d:2320 with SMTP id c94-20020a509fe7000000b005611d7d2320mr1842241edf.1.1707499681553; Fri, 09 Feb 2024 09:28:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1707499681; cv=none; d=google.com; s=arc-20160816; b=Edoh+6x+bhJzfKF9NSAae8xuHT9SjTkUd8DtaSPp7n1QlxzBeNkt2lIheSQ3ggiQv/ Pc5OSbXpilhU8gCxROX8KtHT6TFfxTc/k+UZTR6DsiDIOg/I31SHIi+fr0Q4mSCj3q6m D2DLZGM4ywq9jtOmmtSAPE8hRaJ2HqiN8Bignn1QrthYxX9N74NiMyAoS+eSi6UmLQm2 tbRHrWSD0mYgxdsgBcHdOvPe82ryzqg8Hyj1X2L+LxejqjSyaMYI09rr116JOEWC/9bV 8dTTMKHyIYUujKIfgYLeoM3uA1+xmJp35xW9ddFv1c0tioSz880Qh0YlZwH+gXTwA5uR ZLjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :mime-version:message-id:to:from:date:dkim-signature:delivered-to; bh=YnasM5N1UhY5gXKEa6P+Zh3nLedAxpV76/2RmeZs7IU=; fh=OHWX79cq3Sd6J7qQtDD3S8AiJu+thoDaBqzzpElieXw=; b=MAmD3DSld57BRBXR4DFxVj4q6CNMOFWCG6ObRFWUwWBoJUfe0WEXTwBpRewAex3OCu H0JSKQJFlbZuWyVgI/i4Xj9A2CLq9W2Q/yd5xvi0grSIt8G+s6T/BKlKMM0uhWFV+ma1 hvdw9VMKy3N8dlVP5FUtF2lYMcF0yEryetQ32ZwEQY/GaDjwQQP2ppPHyO+BpM0HzGWI TYLLR1/SiUa+pcjnXf4eGYC66PNrEG2pV21ahVaZakpQ70NA04vFkk3ejKpq2M2+ef4s uzv7tmqIUvItk57CH0uaMYGpMwodOKU9cP8VoZVCYQfAKCEzb1eQRhOvMKBMAXM8BuTk BUbw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@lynne.ee header.s=s1 header.b=pW+w8INC; 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=NONE dis=NONE) header.from=lynne.ee X-Forwarded-Encrypted: i=1; AJvYcCXGwJ1CjHkJX5TEWtJKoH3bH260ZWqakm4s1dAA/FRM+70NjUIcgokMmihEaIV1MCJAbsZJpb05zObUQPQeh/BfiJ1YUPIkHRWsXxYo5Sbr3ne2VqkY33KfiDH+6R5NQgQtGNAqy1uLePlajtt+zYhz2Gh/PEKpK5X8BuyZcEajxkBfVVKT/DPP1iSs33MB12kOiclXOCI54EpYd4PslTBaTIIPQ02zvGsp2vHevPjkSOV2P7muNTBsBnWg2XpZEL6p4EjYdqpFyVj/SqMTZS7yjhen1dRVAuqY68zwAlgWoRL6YkgWVr3boElAqsIC8YPG0fBVeTqpa3LruwCVjj5suuohYuqzh+lUHunhzKNXP5q3z8gdcROmsswbnmbU8G4cXw9PEkjFKiBGf/w9ax1/H2Jj+HtWMutgzE/DPE57iwcPsf4n8/1h90432d2OxX4RD+diecdCP0vcYIZQulreGP3dMAZmX63nYPTXrNXZbOMQWFKKdgx1tCk5SAvb5105qOAXNPbQMe/X+FYWsXtFB81LlWKi5yx//bQTs2QKsUBLrtY08fohQNPxIpZApXk4KD5hfVwNMZcecXdCGxp/LZTjF6VKEWfyXJ97g/n0f8/GhAMtfpErEiOrl2Ft+BnIfOApYXt6682IJNVtEp36257UNk/O7fn/UUcl86h4J7OWk5oxX6IDHxIli8Iq9Icrmrvq71ux6KbXBbWLbs/zEaN9GPjmiOrZcE91DEYbXnJGkJzvUYZVaNbw83rNJYvzENY4JCuQ2Y71CyNiAtB3q5xawNqiGACCmkg+6JzVGmKshPpWXTyf7d58omJXOU4h2R08YTRZTbi5bBGkr+3acVRlZs3WoVZilRB4G2fPTL1fXDjgAQCmoq64+r5qgwk5FpUhoANp+RlG0ieoMXtI/upqpVV5j2ilkMi+R2nQ//tv4JKEC3W1pB7ZYw+hL56z2B n1DbUb+zrO5lfVQUDq6q9KalqrSaJZYjoMXc3q1InJIp4naoMEEVTkwTrwXq3Eej+OKhBBgYrTciBtwcBDtRiyA/a/zEMvo7MzHFXAvUkkr4G92PdV9bZbOzY6FUFz2XzkveA0VMgi+Y70+dYzCtqOhv2GOtJw2vTbtFXD13vNxwrrCIYpOVOSN1V7cWpzbqcSebYwShNXCUhnf1hU58BjPR34EZwVcV0E/iO7s4Wgp4b43jBp6s+DlOrR/Y8QEvMqgguQYNBCgzc0l9O3hEl3T7UBOss3N4ZbIipb9SXzjOx+p/9q/E+puhBB1VGzXfRm5gRb7N3JdWgi/DfjWGEWX2bm3QLCDldtVJtOBw65US/oS96HBnKbi2xPWZJ7opsksYaVmuDqqiSgJr/xs61x0AE33HRCjgAokQ0xdoPOXXHshNOMeSLo/rFRSTLbuvJo9x5hEQ4j3Z8bj74MQwf08YsJ7OMhIQOUF3DgjwhbBWZzYWxkDjH8eeyI2OGEiqYoCI42CDm1i2NMkx6Hg/ogLGjzzp706+OABmsj9jO4ttOH4k+8HqcniQlAtZX5vUmbndqXX2vRjXObelN46Jti5fz8itU= Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id x21-20020aa7d6d5000000b00560d6e9cd4esi1014790edr.335.2024.02.09.09.28.01; Fri, 09 Feb 2024 09:28:01 -0800 (PST) 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=@lynne.ee header.s=s1 header.b=pW+w8INC; 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=NONE dis=NONE) header.from=lynne.ee Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BAC6E68D05A; Fri, 9 Feb 2024 19:27:57 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from w4.tutanota.de (w4.tutanota.de [81.3.6.165]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1493568AB9C for ; Fri, 9 Feb 2024 19:27:51 +0200 (EET) Received: from tutadb.w10.tutanota.de (unknown [192.168.1.10]) by w4.tutanota.de (Postfix) with ESMTP id AB2311060166 for ; Fri, 9 Feb 2024 17:27:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1707499670; s=s1; d=lynne.ee; h=From:From:To:To:Subject:Subject:Content-Description:Content-ID:Content-Type:Content-Type:Content-Transfer-Encoding:Cc:Date:Date:In-Reply-To:MIME-Version:MIME-Version:Message-ID:Message-ID:Reply-To:References:Sender; bh=xWmxYHX4bNnuGV68Wr2ylGYrUJRPVV1ZVf2fnyrKqes=; b=pW+w8INCSDtjiqwwH7WCEjB04MH7f+9B8ltWPWStuSUXpMYzjb4YG4QGSZbghYu7 lqHR5DfJ0ZtVGIQ4qktcxHznRkrgzyj6sXLF+8kaQi3GalbZFEGncOH2XEpjClm0nQ2 KHbrc77ltyCtsT7ndoaItcUu2wS1e5PLKsya8cSVvPildfZo5qoV3i/BHgbJsZLLrzR AUA34MG3oOnAfxy65v25e9GuBJFl+VPKdsJ+jgGUlMddxoa5mKQRkinC72gytwUeEAB itwpHLE1PoqFX4lhC7/cX1UttqXPVpf9U5FU1L4FpJ5JkwKdzWbD0KmTJV5IpjGYjEt PPniNBSPmQ== Date: Fri, 9 Feb 2024 18:27:50 +0100 (CET) From: Lynne To: Ffmpeg Devel Message-ID: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avfft: avoid overreads with RDFT API users 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: YW6Nh2ttUSfM The new API requires an extra array member at the very end, which old API users did not do. This disables in-place RDFT transforms and instead does the transform out of place by copying once, there shouldn't be a significant loss of speed as our in-place FFT requires a reorder which is likely more expensive in the majority of cases to do. Patch attached. From 763f2e8941dc3dd4282ad42574bd8d451a256a53 Mon Sep 17 00:00:00 2001 From: Lynne Date: Fri, 9 Feb 2024 18:17:54 +0100 Subject: [PATCH] avfft: avoid overreads with RDFT API users The new API requires an extra array member at the very end, which old API users did not do. This disables in-place RDFT transforms and instead does the transform out of place by copying once, there shouldn't be a significant loss of speed as our in-place FFT requires a reorder which is likely more expensive in the majority of cases to do. --- libavcodec/avfft.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/libavcodec/avfft.c b/libavcodec/avfft.c index 999b5ed79a..485f216427 100644 --- a/libavcodec/avfft.c +++ b/libavcodec/avfft.c @@ -152,7 +152,7 @@ RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans) return NULL; ret = av_tx_init(&s->ctx, &s->fn, AV_TX_FLOAT_RDFT, trans == IDFT_C2R, - 1 << nbits, &scale, AV_TX_INPLACE); + 1 << nbits, &scale, 0x0); if (ret < 0) { av_free(s); return NULL; @@ -162,17 +162,35 @@ RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans) s->len = 1 << nbits; s->inv = trans == IDFT_C2R; + s->tmp = av_malloc((s->len + 2)*sizeof(float)); + if (!s->tmp) { + av_tx_uninit(&s->ctx); + av_free(s); + return NULL; + } + return (RDFTContext *)s; } void av_rdft_calc(RDFTContext *s, FFTSample *data) { AVTXWrapper *w = (AVTXWrapper *)s; - if (w->inv) - FFSWAP(float, data[1], data[w->len]); - w->fn(w->ctx, data, (void *)data, w->stride); - if (!w->inv) - FFSWAP(float, data[1], data[w->len]); + float *src = w->inv ? w->tmp : (float *)data; + float *dst = w->inv ? (float *)data : w->tmp; + + if (w->inv) { + memcpy(src, data, w->len*sizeof(float)); + + src[w->len] = src[1]; + src[1] = 0.0f; + } + + w->fn(w->ctx, dst, (void *)src, w->stride); + + if (!w->inv) { + dst[1] = dst[w->len]; + memcpy(data, dst, w->len*sizeof(float)); + } } av_cold void av_rdft_end(RDFTContext *s) @@ -180,6 +198,7 @@ av_cold void av_rdft_end(RDFTContext *s) if (s) { AVTXWrapper *w = (AVTXWrapper *)s; av_tx_uninit(&w->ctx); + av_free(&w->tmp); av_free(w); } } -- 2.43.0.381.gb435a96ce8