Added run time detection of Neon architecture in iSAC-fix.

Review URL: https://webrtc-codereview.appspot.com/715004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@2563 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
kma@webrtc.org
2012-08-06 21:04:34 +00:00
parent 8fe5f32ccc
commit 715509890c
3 changed files with 30 additions and 10 deletions

View File

@@ -64,6 +64,8 @@ LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/../../../../../.. \
$(LOCAL_PATH)/../../../../../../common_audio/signal_processing/include
LOCAL_STATIC_LIBRARIES += libwebrtc_system_wrappers
LOCAL_SHARED_LIBRARIES := \
libcutils \
libdl \
@@ -127,7 +129,8 @@ LOCAL_C_INCLUDES := \
LOCAL_STATIC_LIBRARIES := \
libwebrtc_isacfix \
libwebrtc_spl
libwebrtc_spl \
libwebrtc_system_wrappers
ifeq ($(WEBRTC_BUILD_NEON_LIBS),true)
LOCAL_STATIC_LIBRARIES += \

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -144,7 +144,7 @@ void WebRtcIsacfix_FilterMaLoopC(int16_t input0,
int32_t* ptr2);
// Functions for ARM-Neon platforms, in place of the above two generic C ones.
#if (defined(WEBRTC_ANDROID) && defined(WEBRTC_ARCH_ARM_NEON))
#if (defined WEBRTC_DETECT_ARM_NEON) || (defined WEBRTC_ARCH_ARM_NEON)
int WebRtcIsacfix_AutocorrNeon(WebRtc_Word32* __restrict r,
const WebRtc_Word16* __restrict x,
WebRtc_Word16 N,

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -15,12 +15,13 @@
*
*/
#include <stdlib.h>
#include <string.h>
#include "isacfix.h"
#include <stdlib.h>
#include "bandwidth_estimator.h"
#include "codec.h"
#include "system_wrappers/interface/cpu_features_wrapper.h"
#include "entropy_coding.h"
#include "structs.h"
@@ -168,6 +169,19 @@ WebRtc_Word16 WebRtcIsacfix_FreeInternal(ISACFIX_MainStruct *ISAC_main_inst)
return(0);
}
/****************************************************************************
* WebRtcAecm_InitNeon(...)
*
* This function initializes function pointers for ARM Neon platform.
*/
#if (defined WEBRTC_DETECT_ARM_NEON || defined WEBRTC_ARCH_ARM_NEON)
static void WebRtcIsacfix_InitNeon(void) {
WebRtcIsacfix_AutocorrFix = WebRtcIsacfix_AutocorrNeon;
WebRtcIsacfix_FilterMaLoopFix = WebRtcIsacfix_FilterMaLoopNeon;
}
#endif
/****************************************************************************
* WebRtcIsacfix_EncoderInit(...)
*
@@ -250,9 +264,12 @@ WebRtc_Word16 WebRtcIsacfix_EncoderInit(ISACFIX_MainStruct *ISAC_main_inst,
WebRtcIsacfix_AutocorrFix = WebRtcIsacfix_AutocorrC;
WebRtcIsacfix_FilterMaLoopFix = WebRtcIsacfix_FilterMaLoopC;
#ifdef WEBRTC_ARCH_ARM_NEON
WebRtcIsacfix_AutocorrFix = WebRtcIsacfix_AutocorrNeon;
WebRtcIsacfix_FilterMaLoopFix = WebRtcIsacfix_FilterMaLoopNeon;
#ifdef WEBRTC_DETECT_ARM_NEON
if ((WebRtc_GetCPUFeaturesARM() & kCPUFeatureNEON) != 0) {
WebRtcIsacfix_InitNeon();
}
#elif defined(WEBRTC_ARCH_ARM_NEON)
WebRtcIsacfix_InitNeon();
#endif
return statusInit;