Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: "Rémi Denis-Courmont" <remi@remlab.net>
To: ffmpeg-devel@ffmpeg.org
Subject: [FFmpeg-devel] [PATCH 4/4] lavc/opusdsp: RISC-V V (512-bit) postfilter
Date: Wed,  5 Oct 2022 19:12:56 +0300
Message-ID: <20221005161256.27612-4-remi@remlab.net> (raw)
In-Reply-To: <12083658.O9o76ZdvQC@basile.remlab.net>

This adds a variant of the postfilter for use with 512-bit vectors.
Half a vector is enough to perform the scalar product. Normally a whole
vector would be used anyhow. Indeed fractional multiplers are no faster
than the unit multipler.

But in this particular function, a full vector makes up 16 samples,
which would be loaded at each iteration of the outer loop. The minimum
guaranteed CELT postfilter period is only 15. Accounting for the edges,
we can only safely preload up to 13 samples.

The fractional multipler is thus used to cap the selected vector length
to a safe value of 8 elements or 256 bits.

Likewise, we have the 1024-bit variant with the quarter multipler. In
theory, a 2048-bit one would be possible with the eigth multipler, but
that length is not even defined in the specifications as of yet, nor is
it supported by any emulator - forget actual hardware.
---
 libavcodec/riscv/opusdsp_init.c |  8 ++++++++
 libavcodec/riscv/opusdsp_rvv.S  | 10 ++++++++++
 2 files changed, 18 insertions(+)

diff --git a/libavcodec/riscv/opusdsp_init.c b/libavcodec/riscv/opusdsp_init.c
index e6f9505f77..d564cca50c 100644
--- a/libavcodec/riscv/opusdsp_init.c
+++ b/libavcodec/riscv/opusdsp_init.c
@@ -27,6 +27,8 @@
 
 void ff_opus_postfilter_rvv_128(float *data, int period, float *g, int len);
 void ff_opus_postfilter_rvv_256(float *data, int period, float *g, int len);
+void ff_opus_postfilter_rvv_512(float *data, int period, float *g, int len);
+void ff_opus_postfilter_rvv_1024(float *data, int period, float *g, int len);
 
 av_cold void ff_opus_dsp_init_riscv(OpusDSP *d)
 {
@@ -41,6 +43,12 @@ av_cold void ff_opus_dsp_init_riscv(OpusDSP *d)
             case 32:
                 d->postfilter = ff_opus_postfilter_rvv_256;
                 break;
+            case 64:
+                d->postfilter = ff_opus_postfilter_rvv_512;
+                break;
+            case 128:
+                d->postfilter = ff_opus_postfilter_rvv_512;
+                break;
         }
 #endif
 }
diff --git a/libavcodec/riscv/opusdsp_rvv.S b/libavcodec/riscv/opusdsp_rvv.S
index 243c9a5e52..b3d23a9de5 100644
--- a/libavcodec/riscv/opusdsp_rvv.S
+++ b/libavcodec/riscv/opusdsp_rvv.S
@@ -25,6 +25,16 @@ func ff_opus_postfilter_rvv_128, zve32f
         j       1f
 endfunc
 
+func ff_opus_postfilter_rvv_512, zve32f
+        lvtypei a5, e32, mf2, ta, ma
+        j       1f
+endfunc
+
+func ff_opus_postfilter_rvv_1024, zve32f
+        lvtypei a5, e32, mf4, ta, ma
+        j       1f
+endfunc
+
 func ff_opus_postfilter_rvv_256, zve32f
         lvtypei a5, e32, m1, ta, ma
 1:
-- 
2.37.2

_______________________________________________
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".

      parent reply	other threads:[~2022-10-05 16:13 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-05 16:12 [FFmpeg-devel] [PATCHv2 0/4] RISC-V V Opus postfilter Rémi Denis-Courmont
2022-10-05 16:12 ` [FFmpeg-devel] [PATCH 1/4] lavc/opusdsp: RISC-V V (128-bit) postfilter Rémi Denis-Courmont
2022-10-05 16:12 ` [FFmpeg-devel] [PATCH 2/4] lavu/riscv: helper macro for VTYPE encoding Rémi Denis-Courmont
2022-10-05 16:12 ` [FFmpeg-devel] [PATCH 3/4] lavc/opusdsp: RISC-V V (256-bit) postfilter Rémi Denis-Courmont
2022-10-05 16:12 ` Rémi Denis-Courmont [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221005161256.27612-4-remi@remlab.net \
    --to=remi@remlab.net \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git