summaryrefslogtreecommitdiff
path: root/libavcodec/arm/fmtconvert_init_arm.c
diff options
context:
space:
mode:
authorJanne Grunau <janne-libav@jannau.net>2015-12-03 16:17:32 +0100
committerJanne Grunau <janne-libav@jannau.net>2015-12-14 16:45:02 +0100
commit90b1b9350c0a97c4065ae9054b83e57f48a0de1f (patch)
tree96a67450ae3b647de6c9da7de87f9724d8b834b3 /libavcodec/arm/fmtconvert_init_arm.c
parenta0fc780a2093784e8664f88205ee1b215e109cee (diff)
arm: add ff_int32_to_float_fmul_array8_neon
Quite a bit faster than int32_to_float_fmul_array8_c calling ff_int32_to_float_fmul_scalar_neon through FmtConvertContext. Number of cycles per int32_to_float_fmul_array8 call while decoding padded.dts on exynos5422: before after change cortex-a7: 1270 951 -25% cortex-a15: 434 285 -34% checkasm --bench cycle counts: cortex-a15 cortex-a7 int32_to_float_fmul_array8_c: 1730.4 4384.5 int32_to_float_fmul_array8_neon_c: 571.5 1694.3 int32_to_float_fmul_array8_neon: 374.0 1448.8 Interesting are the differences between int32_to_float_fmul_array8_neon_c and int32_to_float_fmul_array8_neon. The former is current behaviour of calling ff_int32_to_float_fmul_scalar_neon repeatedly from the c function, The raw numbers differ since checkasm uses different lengths than the dca decoder.
Diffstat (limited to 'libavcodec/arm/fmtconvert_init_arm.c')
-rw-r--r--libavcodec/arm/fmtconvert_init_arm.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libavcodec/arm/fmtconvert_init_arm.c b/libavcodec/arm/fmtconvert_init_arm.c
index 6a80bfb6b3..11396e898c 100644
--- a/libavcodec/arm/fmtconvert_init_arm.c
+++ b/libavcodec/arm/fmtconvert_init_arm.c
@@ -25,6 +25,9 @@
#include "libavcodec/avcodec.h"
#include "libavcodec/fmtconvert.h"
+void ff_int32_to_float_fmul_array8_neon(FmtConvertContext *c, float *dst,
+ const int32_t *src, const float *mul,
+ int len);
void ff_int32_to_float_fmul_scalar_neon(float *dst, const int32_t *src,
float mul, int len);
@@ -46,6 +49,7 @@ av_cold void ff_fmt_convert_init_arm(FmtConvertContext *c, AVCodecContext *avctx
}
if (have_neon(cpu_flags)) {
+ c->int32_to_float_fmul_array8 = ff_int32_to_float_fmul_array8_neon;
c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_neon;
}
}