This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 280fd609164a3137c53d760a52fa78bbaf37d5d0
Author:     Jeongkeun Kim <[email protected]>
AuthorDate: Thu Aug 6 00:43:34 2026 +0900
Commit:     Martin Storsjö <[email protected]>
CommitDate: Sun Aug 9 00:18:08 2026 +0300

    avcodec/aarch64: add NEON lfe_x96_fixed for DCA DSP
    
    Implement the fixed-point LFE x96 interpolation filter in AArch64
    NEON. Four input samples are processed per iteration. The history
    sample is kept in a vector lane, and ext constructs the delayed input.
    
    Benchmarks by Martin Storsjö using checkasm:
                   a53     a55    a520     a72     a76    a720
                  1.86x   1.88x   1.24x   1.99x   1.62x   2.30x
    
    Author's measurement on Neoverse-N1 (Oracle Cloud, clang 14): 1.29x.
    
    Signed-off-by: Jeongkeun Kim <[email protected]>
---
 libavcodec/aarch64/dcadsp_init_aarch64.c |  3 +++
 libavcodec/aarch64/dcadsp_neon.S         | 38 ++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/libavcodec/aarch64/dcadsp_init_aarch64.c 
b/libavcodec/aarch64/dcadsp_init_aarch64.c
index 1fc6ec7a32..acb4194e9d 100644
--- a/libavcodec/aarch64/dcadsp_init_aarch64.c
+++ b/libavcodec/aarch64/dcadsp_init_aarch64.c
@@ -30,6 +30,8 @@ void ff_lfe_fir0_float_neon(float *pcm_samples, const int32_t 
*lfe_samples,
                             const float *filter_coeff, ptrdiff_t npcmblocks);
 void ff_lfe_fir1_float_neon(float *pcm_samples, const int32_t *lfe_samples,
                             const float *filter_coeff, ptrdiff_t npcmblocks);
+void ff_lfe_x96_fixed_neon(int32_t *dst, const int32_t *src,
+                           int32_t *hist, ptrdiff_t len);
 
 av_cold void ff_dcadsp_init_aarch64(DCADSPContext *s)
 {
@@ -38,5 +40,6 @@ av_cold void ff_dcadsp_init_aarch64(DCADSPContext *s)
     if (have_neon(cpu_flags)) {
         s->lfe_fir_float[0] = ff_lfe_fir0_float_neon;
         s->lfe_fir_float[1] = ff_lfe_fir1_float_neon;
+        s->lfe_x96_fixed    = ff_lfe_x96_fixed_neon;
     }
 }
diff --git a/libavcodec/aarch64/dcadsp_neon.S b/libavcodec/aarch64/dcadsp_neon.S
index 2aee95f241..bc7e35f993 100644
--- a/libavcodec/aarch64/dcadsp_neon.S
+++ b/libavcodec/aarch64/dcadsp_neon.S
@@ -111,3 +111,41 @@ function ff_lfe_fir1_float_neon, export=1
         b.gt            .Louter1
         ret
 endfunc
+
+function ff_lfe_x96_fixed_neon, export=1
+        ldr             w4, [x2]
+        dup             v2.4s, w4
+        mov             w4, #0x013F
+        movk            w4, #0x0020, lsl #16
+        dup             v3.4s, w4
+        mov             w4, #0xFEC1
+        movk            w4, #0x005F, lsl #16
+        dup             v4.4s, w4
+.Lx96d_loop:
+        ld1             {v0.4s}, [x1], #16
+        subs            x3, x3, #4
+        ext             v1.16b, v2.16b, v0.16b, #12
+        smull           v5.2d, v0.2s, v3.2s
+        smull2          v6.2d, v0.4s, v3.4s
+        smlal           v5.2d, v1.2s, v4.2s
+        smlal2          v6.2d, v1.4s, v4.4s
+        smull           v7.2d,  v0.2s, v4.2s
+        smull2          v16.2d, v0.4s, v4.4s
+        smlal           v7.2d,  v1.2s, v3.2s
+        smlal2          v16.2d, v1.4s, v3.4s
+        mov             v2.16b, v0.16b
+        sqrshrn         v17.2s, v5.2d, #23
+        sqrshrn2        v17.4s, v6.2d, #23
+        sqrshrn         v18.2s, v7.2d, #23
+        sqrshrn2        v18.4s, v16.2d, #23
+        sqshl           v17.4s, v17.4s, #8
+        sqshl           v18.4s, v18.4s, #8
+        sshr            v17.4s, v17.4s, #8
+        sshr            v18.4s, v18.4s, #8
+        zip1            v19.4s, v17.4s, v18.4s
+        zip2            v20.4s, v17.4s, v18.4s
+        st1             {v19.4s, v20.4s}, [x0], #32
+        b.gt            .Lx96d_loop
+        st1             {v2.s}[3], [x2]
+        ret
+endfunc

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to