[FFmpeg-cvslog] ac3enc: NEON optimised shift functions

Mans Rullgard git at videolan.org
Fri Mar 25 03:13:36 CET 2011


ffmpeg | branch: master | Mans Rullgard <mans at mansr.com> | Sat Mar 12 23:16:06 2011 +0000| [245c78313fac79d3336f139fbca88c8d799f866a] | committer: Mans Rullgard

ac3enc: NEON optimised shift functions

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=245c78313fac79d3336f139fbca88c8d799f866a
---

 libavcodec/arm/ac3dsp_init_arm.c |    4 ++++
 libavcodec/arm/ac3dsp_neon.S     |   21 +++++++++++++++++++++
 2 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/libavcodec/arm/ac3dsp_init_arm.c b/libavcodec/arm/ac3dsp_init_arm.c
index a0fc977..6874546 100644
--- a/libavcodec/arm/ac3dsp_init_arm.c
+++ b/libavcodec/arm/ac3dsp_init_arm.c
@@ -25,11 +25,15 @@
 
 void ff_ac3_exponent_min_neon(uint8_t *exp, int num_reuse_blocks, int nb_coefs);
 int ff_ac3_max_msb_abs_int16_neon(const int16_t *src, int len);
+void ff_ac3_lshift_int16_neon(int16_t *src, unsigned len, unsigned shift);
+void ff_ac3_rshift_int32_neon(int32_t *src, unsigned len, unsigned shift);
 
 av_cold void ff_ac3dsp_init_arm(AC3DSPContext *c, int bit_exact)
 {
     if (HAVE_NEON) {
         c->ac3_exponent_min      = ff_ac3_exponent_min_neon;
         c->ac3_max_msb_abs_int16 = ff_ac3_max_msb_abs_int16_neon;
+        c->ac3_lshift_int16      = ff_ac3_lshift_int16_neon;
+        c->ac3_rshift_int32      = ff_ac3_rshift_int32_neon;
     }
 }
diff --git a/libavcodec/arm/ac3dsp_neon.S b/libavcodec/arm/ac3dsp_neon.S
index e69a3c2..43d4e61 100644
--- a/libavcodec/arm/ac3dsp_neon.S
+++ b/libavcodec/arm/ac3dsp_neon.S
@@ -57,3 +57,24 @@ function ff_ac3_exponent_min_neon, export=1
         bgt             1b
         pop             {pc}
 endfunc
+
+function ff_ac3_lshift_int16_neon, export=1
+        vdup.16         q0,  r2
+1:      vld1.16         {q1},     [r0,:128]
+        vshl.s16        q1,  q1,  q0
+        vst1.16         {q1},     [r0,:128]!
+        subs            r1,  r1,  #8
+        bgt             1b
+        bx              lr
+endfunc
+
+function ff_ac3_rshift_int32_neon, export=1
+        rsb             r2,  r2,  #0
+        vdup.32         q0,  r2
+1:      vld1.32         {q1},     [r0,:128]
+        vshl.s32        q1,  q1,  q0
+        vst1.32         {q1},     [r0,:128]!
+        subs            r1,  r1,  #4
+        bgt             1b
+        bx              lr
+endfunc




More information about the ffmpeg-cvslog mailing list