aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/riscv/sbrdsp_init.c
diff options
context:
space:
mode:
authorRémi Denis-Courmont <remi@remlab.net>2023-11-10 18:21:27 +0200
committerRémi Denis-Courmont <remi@remlab.net>2023-11-13 18:34:29 +0200
commitc536e9220702dec7fbccd6a03f043cc142d68c79 (patch)
tree48c5e5e379e8d1bc9f736b2f7d27cf5fa08a6978 /libavcodec/riscv/sbrdsp_init.c
parent20e6195c54106203e79cb0aa148561b4d469b115 (diff)
downloadffmpeg-c536e9220702dec7fbccd6a03f043cc142d68c79.tar.gz
lavc/sbrdsp: R-V V hf_apply_noise functions
This is restricted to 128-bit vectors as larger vector sizes could read past the end of the noise array. Support for future hardware with larger vector sizes is left for some other time. hf_apply_noise_0_c: 2319.7 hf_apply_noise_0_rvv_f32: 1229.0 hf_apply_noise_1_c: 2539.0 hf_apply_noise_1_rvv_f32: 1244.7 hf_apply_noise_2_c: 2319.7 hf_apply_noise_2_rvv_f32: 1232.7 hf_apply_noise_3_c: 2541.2 hf_apply_noise_3_rvv_f32: 1244.2
Diffstat (limited to 'libavcodec/riscv/sbrdsp_init.c')
-rw-r--r--libavcodec/riscv/sbrdsp_init.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/libavcodec/riscv/sbrdsp_init.c b/libavcodec/riscv/sbrdsp_init.c
index e5736452ec..2ed46153ea 100644
--- a/libavcodec/riscv/sbrdsp_init.c
+++ b/libavcodec/riscv/sbrdsp_init.c
@@ -21,6 +21,7 @@
#include "config.h"
#include "libavutil/attributes.h"
#include "libavutil/cpu.h"
+#include "libavutil/riscv/cpu.h"
#include "libavcodec/sbrdsp.h"
void ff_sbr_sum64x5_rvv(float *z);
@@ -32,6 +33,14 @@ void ff_sbr_hf_gen_rvv(float (*X_high)[2], const float (*X_low)[2],
float bw, int start, int end);
void ff_sbr_hf_g_filt_rvv(float (*Y)[2], const float (*X_high)[40][2],
const float *g_filt, int m_max, intptr_t ixh);
+void ff_sbr_hf_apply_noise_0_rvv(float (*Y)[2], const float *s,
+ const float *f, int n, int kx, int max);
+void ff_sbr_hf_apply_noise_1_rvv(float (*Y)[2], const float *s,
+ const float *f, int n, int kx, int max);
+void ff_sbr_hf_apply_noise_2_rvv(float (*Y)[2], const float *s,
+ const float *f, int n, int kx, int max);
+void ff_sbr_hf_apply_noise_3_rvv(float (*Y)[2], const float *s,
+ const float *f, int n, int kx, int max);
av_cold void ff_sbrdsp_init_riscv(SBRDSPContext *c)
{
@@ -44,6 +53,14 @@ av_cold void ff_sbrdsp_init_riscv(SBRDSPContext *c)
c->sum_square = ff_sbr_sum_square_rvv;
c->hf_gen = ff_sbr_hf_gen_rvv;
c->hf_g_filt = ff_sbr_hf_g_filt_rvv;
+ if (ff_get_rv_vlenb() <= 16) {
+ c->hf_apply_noise[0] = ff_sbr_hf_apply_noise_0_rvv;
+ c->hf_apply_noise[2] = ff_sbr_hf_apply_noise_2_rvv;
+ if (flags & AV_CPU_FLAG_RVB_BASIC) {
+ c->hf_apply_noise[1] = ff_sbr_hf_apply_noise_1_rvv;
+ c->hf_apply_noise[3] = ff_sbr_hf_apply_noise_3_rvv;
+ }
+ }
}
c->autocorrelate = ff_sbr_autocorrelate_rvv;
}