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:
		@@ -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 += \
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user