[FFmpeg-cvslog] ac3enc: NEON optimised extract_exponents

Mans Rullgard git at videolan.org
Wed Apr 6 03:04:07 CEST 2011


ffmpeg | branch: master | Mans Rullgard <mans at mansr.com> | Sat Mar 12 22:17:14 2011 +0000| [5f2e6c0fd11f34ba7cd013a0b22d7bd0d60613b8] | committer: Mans Rullgard

ac3enc: NEON optimised extract_exponents

Signed-off-by: Mans Rullgard <mans at mansr.com>

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

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

diff --git a/libavcodec/arm/ac3dsp_init_arm.c b/libavcodec/arm/ac3dsp_init_arm.c
index 92e4a4f..fd78e1e 100644
--- a/libavcodec/arm/ac3dsp_init_arm.c
+++ b/libavcodec/arm/ac3dsp_init_arm.c
@@ -28,6 +28,7 @@ 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);
 void ff_float_to_fixed24_neon(int32_t *dst, const float *src, unsigned int len);
+void ff_ac3_extract_exponents_neon(uint8_t *exp, int32_t *coef, int nb_coefs);
 
 void ff_ac3_bit_alloc_calc_bap_armv6(int16_t *mask, int16_t *psd,
                                      int start, int end,
@@ -50,5 +51,6 @@ av_cold void ff_ac3dsp_init_arm(AC3DSPContext *c, int bit_exact)
         c->ac3_lshift_int16      = ff_ac3_lshift_int16_neon;
         c->ac3_rshift_int32      = ff_ac3_rshift_int32_neon;
         c->float_to_fixed24      = ff_float_to_fixed24_neon;
+        c->extract_exponents     = ff_ac3_extract_exponents_neon;
     }
 }
diff --git a/libavcodec/arm/ac3dsp_neon.S b/libavcodec/arm/ac3dsp_neon.S
index d33d978..946b39f 100644
--- a/libavcodec/arm/ac3dsp_neon.S
+++ b/libavcodec/arm/ac3dsp_neon.S
@@ -92,3 +92,23 @@ function ff_float_to_fixed24_neon, export=1
         bgt             1b
         bx              lr
 endfunc
+
+function ff_ac3_extract_exponents_neon, export=1
+        vmov.i32        q14, #24
+        vmov.i32        q15, #8
+1:
+        vld1.32         {q0},     [r1,:128]
+        vabs.s32        q1,  q0
+        vclz.i32        q3,  q1
+        vsub.i32        q3,  q3,  q15
+        vcge.s32        q2,  q3,  q14
+        vbit            q3,  q14, q2
+        vbic            q0,  q0,  q2
+        vmovn.i32       d6,  q3
+        vmovn.i16       d6,  q3
+        vst1.32         {q0},     [r1,:128]!
+        vst1.32         {d6[0]},  [r0,:32]!
+        subs            r2,  r2,  #4
+        bgt             1b
+        bx              lr
+endfunc



More information about the ffmpeg-cvslog mailing list