From 163e3939aad645ad212ef82dfde9a8976ecd4637 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Sun, 12 Dec 2010 17:06:19 +0100 Subject: [PATCH] optimize speex fixed point --- submodules/externals/build/speex/Android.mk | 37 ++++++++++++------- .../build/speex/speex/speex_config_types.h | 6 +++ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/submodules/externals/build/speex/Android.mk b/submodules/externals/build/speex/Android.mk index 0e9652909..1836b4f36 100644 --- a/submodules/externals/build/speex/Android.mk +++ b/submodules/externals/build/speex/Android.mk @@ -67,22 +67,31 @@ LOCAL_SRC_FILES := \ # -DARM4_ASM -ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) -ARMV7_USE_FLOAT=1 -endif + +USE_FLOAT=0 + +FIXED_POINT_FLAGS=\ + -DARM5E_ASM\ + -DDISABLE_FLOAT_API \ + -DFIXED_POINT=1 ifeq ($(TARGET_ARCH),arm) - ifeq ($(ARMV7_USE_FLOAT),1) - LOCAL_CFLAGS += -DFLOATING_POINT=1 - LOCAL_CFLAGS += -DOVERRIDE_INTERPOLATE_PRODUCT_SINGLE - ifeq ($(LINPHONE_VIDEO),1) - LOCAL_CFLAGS += -DOVERRIDE_INNER_PRODUCT_SINGLE -Dinner_product_single=ff_scalarproduct_float_neon - endif - else - LOCAL_CFLAGS +=\ - -DARM5E_ASM\ - -DDISABLE_FLOAT_API \ - -DFIXED_POINT=1 + ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) + ifeq ($(USE_FLOAT),1) + LOCAL_CFLAGS += -DFLOATING_POINT=1 + LOCAL_CFLAGS += -DOVERRIDE_INTERPOLATE_PRODUCT_SINGLE + ifeq ($(LINPHONE_VIDEO),1) + LOCAL_CFLAGS += -DOVERRIDE_INNER_PRODUCT_SINGLE -Dinner_product_single=ff_scalarproduct_float_neon + endif + else + LOCAL_CFLAGS += $(FIXED_POINT_FLAGS) + LOCAL_CFLAGS += -DOVERRIDE_INTERPOLATE_PRODUCT_SINGLE -Dinterpolate_product_single=interpolate_product_single_int + ifeq ($(LINPHONE_VIDEO),1) + LOCAL_CFLAGS += -DOVERRIDE_INNER_PRODUCT_SINGLE -Dinner_product_single=ff_scalarproduct_int16_neon + endif + endif + else + LOCAL_CFLAGS += $(FIXED_POINT_FLAGS) endif else LOCAL_CFLAGS += \ diff --git a/submodules/externals/build/speex/speex/speex_config_types.h b/submodules/externals/build/speex/speex/speex_config_types.h index 71802ecfa..0c9eed695 100644 --- a/submodules/externals/build/speex/speex/speex_config_types.h +++ b/submodules/externals/build/speex/speex/speex_config_types.h @@ -8,6 +8,12 @@ typedef int spx_int32_t; typedef unsigned int spx_uint32_t; extern float ff_scalarproduct_float_neon (const float *v1, const float *v2, int len); + +#ifndef FIXED_POINT extern float interpolate_product_single(const float *a, const float *b, unsigned int len, const spx_uint32_t oversample, float *frac); +#else +extern int interpolate_product_single_int(const spx_int16_t *a, const spx_int16_t *b, unsigned int len, const spx_uint32_t oversample, spx_int16_t *frac); +#endif + #endif