diff options
author | Rémi Denis-Courmont <remi@remlab.net> | 2023-11-10 18:21:27 +0200 |
---|---|---|
committer | Rémi Denis-Courmont <remi@remlab.net> | 2023-11-13 18:34:29 +0200 |
commit | c536e9220702dec7fbccd6a03f043cc142d68c79 (patch) | |
tree | 48c5e5e379e8d1bc9f736b2f7d27cf5fa08a6978 /libavcodec/riscv/sbrdsp_init.c | |
parent | 20e6195c54106203e79cb0aa148561b4d469b115 (diff) | |
download | ffmpeg-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.c | 17 |
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; } |