Revision 5f2e6c0f
libavcodec/arm/ac3dsp_init_arm.c | ||
---|---|---|
28 | 28 |
void ff_ac3_lshift_int16_neon(int16_t *src, unsigned len, unsigned shift); |
29 | 29 |
void ff_ac3_rshift_int32_neon(int32_t *src, unsigned len, unsigned shift); |
30 | 30 |
void ff_float_to_fixed24_neon(int32_t *dst, const float *src, unsigned int len); |
31 |
void ff_ac3_extract_exponents_neon(uint8_t *exp, int32_t *coef, int nb_coefs); |
|
31 | 32 |
|
32 | 33 |
void ff_ac3_bit_alloc_calc_bap_armv6(int16_t *mask, int16_t *psd, |
33 | 34 |
int start, int end, |
... | ... | |
50 | 51 |
c->ac3_lshift_int16 = ff_ac3_lshift_int16_neon; |
51 | 52 |
c->ac3_rshift_int32 = ff_ac3_rshift_int32_neon; |
52 | 53 |
c->float_to_fixed24 = ff_float_to_fixed24_neon; |
54 |
c->extract_exponents = ff_ac3_extract_exponents_neon; |
|
53 | 55 |
} |
54 | 56 |
} |
libavcodec/arm/ac3dsp_neon.S | ||
---|---|---|
92 | 92 |
bgt 1b |
93 | 93 |
bx lr |
94 | 94 |
endfunc |
95 |
|
|
96 |
function ff_ac3_extract_exponents_neon, export=1 |
|
97 |
vmov.i32 q14, #24 |
|
98 |
vmov.i32 q15, #8 |
|
99 |
1: |
|
100 |
vld1.32 {q0}, [r1,:128] |
|
101 |
vabs.s32 q1, q0 |
|
102 |
vclz.i32 q3, q1 |
|
103 |
vsub.i32 q3, q3, q15 |
|
104 |
vcge.s32 q2, q3, q14 |
|
105 |
vbit q3, q14, q2 |
|
106 |
vbic q0, q0, q2 |
|
107 |
vmovn.i32 d6, q3 |
|
108 |
vmovn.i16 d6, q3 |
|
109 |
vst1.32 {q0}, [r1,:128]! |
|
110 |
vst1.32 {d6[0]}, [r0,:32]! |
|
111 |
subs r2, r2, #4 |
|
112 |
bgt 1b |
|
113 |
bx lr |
|
114 |
endfunc |
Also available in: Unified diff