From 14c7b800eaa23e9da7c92c7c4df397d0c191f097 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Sat, 10 Sep 2016 20:15:44 +0200 Subject: Remove FDK-AAC --- libFDK/include/FDK_archdef.h | 245 ---- libFDK/include/FDK_bitbuffer.h | 166 --- libFDK/include/FDK_bitstream.h | 618 --------- libFDK/include/FDK_core.h | 109 -- libFDK/include/FDK_crc.h | 231 ---- libFDK/include/FDK_hybrid.h | 273 ---- libFDK/include/FDK_tools_rom.h | 270 ---- libFDK/include/FDK_trigFcts.h | 229 ---- libFDK/include/abs.h | 121 -- libFDK/include/arm/clz_arm.h | 122 -- libFDK/include/arm/cplx_mul.h | 214 --- libFDK/include/arm/fixmadd_arm.h | 160 --- libFDK/include/arm/fixmul_arm.h | 142 -- libFDK/include/arm/scale.h | 152 -- libFDK/include/arm/scramble.h | 158 --- libFDK/include/autocorr2nd.h | 128 -- libFDK/include/clz.h | 192 --- libFDK/include/common_fix.h | 378 ----- libFDK/include/cplx_mul.h | 269 ---- libFDK/include/dct.h | 147 -- libFDK/include/fft.h | 253 ---- libFDK/include/fft_rad2.h | 134 -- libFDK/include/fixmadd.h | 306 ----- libFDK/include/fixminmax.h | 120 -- libFDK/include/fixmul.h | 286 ---- libFDK/include/fixpoint_math.h | 466 ------- libFDK/include/mdct.h | 243 ---- libFDK/include/mips/abs_mips.h | 107 -- libFDK/include/mips/clz_mips.h | 118 -- libFDK/include/mips/cplx_mul.h | 162 --- libFDK/include/mips/fixmadd_mips.h | 95 -- libFDK/include/mips/fixmul_mips.h | 113 -- libFDK/include/mips/scale.h | 110 -- libFDK/include/mips/scramble.h | 121 -- libFDK/include/qmf.h | 248 ---- libFDK/include/scale.h | 250 ---- libFDK/include/scramble.h | 165 --- libFDK/include/x86/abs_x86.h | 106 -- libFDK/include/x86/clz_x86.h | 154 --- libFDK/include/x86/fixmul_x86.h | 178 --- libFDK/src/FDK_bitbuffer.cpp | 480 ------- libFDK/src/FDK_core.cpp | 128 -- libFDK/src/FDK_crc.cpp | 543 -------- libFDK/src/FDK_hybrid.cpp | 709 ---------- libFDK/src/FDK_tools_rom.cpp | 2440 --------------------------------- libFDK/src/FDK_trigFcts.cpp | 330 ----- libFDK/src/arm/autocorr2nd.cpp | 90 -- libFDK/src/arm/dct_arm.cpp | 456 ------ libFDK/src/arm/fft_rad2_arm.cpp | 321 ----- libFDK/src/arm/qmf_arm.cpp | 766 ----------- libFDK/src/arm/scale_arm.cpp | 173 --- libFDK/src/autocorr2nd.cpp | 278 ---- libFDK/src/dct.cpp | 540 -------- libFDK/src/fft.cpp | 1404 ------------------- libFDK/src/fft_rad2.cpp | 512 ------- libFDK/src/fixpoint_math.cpp | 895 ------------ libFDK/src/mdct.cpp | 388 ------ libFDK/src/mips/fft_rad2_mips.cpp | 134 -- libFDK/src/mips/mips_fft_twiddles.cpp | 579 -------- libFDK/src/mips/scale.cpp | 119 -- libFDK/src/qmf.cpp | 1196 ---------------- libFDK/src/scale.cpp | 461 ------- 62 files changed, 21001 deletions(-) delete mode 100644 libFDK/include/FDK_archdef.h delete mode 100644 libFDK/include/FDK_bitbuffer.h delete mode 100644 libFDK/include/FDK_bitstream.h delete mode 100644 libFDK/include/FDK_core.h delete mode 100644 libFDK/include/FDK_crc.h delete mode 100644 libFDK/include/FDK_hybrid.h delete mode 100644 libFDK/include/FDK_tools_rom.h delete mode 100644 libFDK/include/FDK_trigFcts.h delete mode 100644 libFDK/include/abs.h delete mode 100644 libFDK/include/arm/clz_arm.h delete mode 100644 libFDK/include/arm/cplx_mul.h delete mode 100644 libFDK/include/arm/fixmadd_arm.h delete mode 100644 libFDK/include/arm/fixmul_arm.h delete mode 100644 libFDK/include/arm/scale.h delete mode 100644 libFDK/include/arm/scramble.h delete mode 100644 libFDK/include/autocorr2nd.h delete mode 100644 libFDK/include/clz.h delete mode 100644 libFDK/include/common_fix.h delete mode 100644 libFDK/include/cplx_mul.h delete mode 100644 libFDK/include/dct.h delete mode 100644 libFDK/include/fft.h delete mode 100644 libFDK/include/fft_rad2.h delete mode 100644 libFDK/include/fixmadd.h delete mode 100644 libFDK/include/fixminmax.h delete mode 100644 libFDK/include/fixmul.h delete mode 100644 libFDK/include/fixpoint_math.h delete mode 100644 libFDK/include/mdct.h delete mode 100644 libFDK/include/mips/abs_mips.h delete mode 100644 libFDK/include/mips/clz_mips.h delete mode 100644 libFDK/include/mips/cplx_mul.h delete mode 100644 libFDK/include/mips/fixmadd_mips.h delete mode 100644 libFDK/include/mips/fixmul_mips.h delete mode 100644 libFDK/include/mips/scale.h delete mode 100644 libFDK/include/mips/scramble.h delete mode 100644 libFDK/include/qmf.h delete mode 100644 libFDK/include/scale.h delete mode 100644 libFDK/include/scramble.h delete mode 100644 libFDK/include/x86/abs_x86.h delete mode 100644 libFDK/include/x86/clz_x86.h delete mode 100644 libFDK/include/x86/fixmul_x86.h delete mode 100644 libFDK/src/FDK_bitbuffer.cpp delete mode 100644 libFDK/src/FDK_core.cpp delete mode 100644 libFDK/src/FDK_crc.cpp delete mode 100644 libFDK/src/FDK_hybrid.cpp delete mode 100644 libFDK/src/FDK_tools_rom.cpp delete mode 100644 libFDK/src/FDK_trigFcts.cpp delete mode 100644 libFDK/src/arm/autocorr2nd.cpp delete mode 100644 libFDK/src/arm/dct_arm.cpp delete mode 100644 libFDK/src/arm/fft_rad2_arm.cpp delete mode 100644 libFDK/src/arm/qmf_arm.cpp delete mode 100644 libFDK/src/arm/scale_arm.cpp delete mode 100644 libFDK/src/autocorr2nd.cpp delete mode 100644 libFDK/src/dct.cpp delete mode 100644 libFDK/src/fft.cpp delete mode 100644 libFDK/src/fft_rad2.cpp delete mode 100644 libFDK/src/fixpoint_math.cpp delete mode 100644 libFDK/src/mdct.cpp delete mode 100644 libFDK/src/mips/fft_rad2_mips.cpp delete mode 100644 libFDK/src/mips/mips_fft_twiddles.cpp delete mode 100644 libFDK/src/mips/scale.cpp delete mode 100644 libFDK/src/qmf.cpp delete mode 100644 libFDK/src/scale.cpp (limited to 'libFDK') diff --git a/libFDK/include/FDK_archdef.h b/libFDK/include/FDK_archdef.h deleted file mode 100644 index da63aee..0000000 --- a/libFDK/include/FDK_archdef.h +++ /dev/null @@ -1,245 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools *********************** - - Author(s): - Description: - -******************************************************************************/ - -#ifndef __ARCH_H__ -#define __ARCH_H__ - -/* Performance / Quality profile selector */ - #define FDK_HIGH_PERFORMANCE - -/* Unify some few toolchain specific defines to avoid having large "or" macro contraptions all over the source code. */ - -/* Take action against VisualStudio 2005 crosscompile problems. */ - -/* Use single macro (the GCC built in macro) for architecture identification independent of the particular toolchain */ -#if defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || (defined(_MSC_VER) && defined(_M_IX86)) || defined (__x86_64__) -#define __x86__ -#endif - -#if (defined(_M_ARM) || defined(__CC_ARM)) && !defined(__arm__) || defined(__TI_TMS470_V5__) && !defined(__arm__) -#define __arm__ -#endif - - - -/* Define __ARM_ARCH_5TE__ if armv5te features are supported */ -#if (__TARGET_ARCH_ARM == 5) || defined(__TARGET_FEATURE_DSPMUL) || (_M_ARM == 5) || defined(__ARM_ARCH_5TEJ__) || defined(__TI_TMS470_V5__) || defined(__ARM_ARCH_7EM__) -#define __ARM_ARCH_5TE__ -#endif - -/* Define __ARM_ARCH_6__ if the armv6 intructions are being supported. */ -#if (__TARGET_ARCH_ARM == 6) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6ZK__) -#define __ARM_ARCH_5TE__ -#define __ARM_ARCH_6__ -#endif - -/* Define __ARM_ARCH_7_A__ if the armv7 intructions are being supported. */ -#if defined(__TARGET_ARCH_7_R) || defined(__ARM_ARCH_7R__) -#define __ARM_ARCH_5TE__ -#define __ARM_ARCH_6__ -#define __ARM_ARCH_7_R__ -#endif - -/* Define __ARM_ARCH_7_A__ if the armv7 intructions are being supported. */ -#if defined(__TARGET_ARCH_7_A) || defined(__ARM_ARCH_7A__) -#define __ARM_ARCH_5TE__ -#define __ARM_ARCH_6__ -#define __ARM_ARCH_7_A__ -#endif - -/* Define __ARM_ARCH_7M__ if the ARMv7-M instructions are being supported, e.g. Cortex-M3. */ -#if defined(__TARGET_ARCH_7_M) || defined(__ARM_ARCH_7_M__) -#define __ARM_ARCH_7M__ -#endif - -/* Define __ARM_ARCH_7EM__ if the ARMv7-ME instructions are being supported, e.g. Cortex-M4. */ -#if defined(__TARGET_ARCH_7E_M) || defined(__ARM_ARCH_7E_M__) -#define __ARM_ARCH_7EM__ -#endif - -/* Detect and unify macros for neon feature. */ -#if defined(__TARGET_FEATURE_NEON) && !defined(__ARM_NEON__) -#define __ARM_NEON__ -#endif - -#ifdef _M_ARM -#include "cmnintrin.h" -#include "armintr.h" -#endif - - -/* Define preferred Multiplication type */ -#if defined(FDK_HIGH_PERFORMANCE) && !defined(FDK_HIGH_QUALITY) /* FDK_HIGH_PERFORMANCE */ - -#if defined(__mips__) || defined(__powerpc__) || defined(__sh__) -#define ARCH_PREFER_MULT_16x16 -#undef SINETABLE_16BIT -#undef POW2COEFF_16BIT -#undef LDCOEFF_16BIT -#undef WINDOWTABLE_16BIT - -#elif defined(__arm__) && defined(__ARM_ARCH_5TE__) /* cppp replaced: elif */ /* cppp replaced: elif */ -#define ARCH_PREFER_MULT_32x16 -#define SINETABLE_16BIT -#define POW2COEFF_16BIT -#define LDCOEFF_16BIT -#define WINDOWTABLE_16BIT - -#elif defined(__arm__) && defined(__ARM_ARCH_7M__) -#define ARCH_PREFER_MULT_32x16 -#define SINETABLE_16BIT -#define POW2COEFF_16BIT -#define LDCOEFF_16BIT -#define WINDOWTABLE_16BIT - -#elif defined(__arm__) && defined(__ARM_ARCH_7EM__) -#define ARCH_PREFER_MULT_32x32 -#define ARCH_PREFER_MULT_32x16 -#define SINETABLE_16BIT -#define POW2COEFF_16BIT -#define LDCOEFF_16BIT -#define WINDOWTABLE_16BIT - -#elif defined(__arm__) && !defined(__ARM_ARCH_5TE__) -#define ARCH_PREFER_MULT_16x16 -#undef SINETABLE_16BIT -#undef WINDOWTABLE_16BIT -#undef POW2COEFF_16BIT -#undef LDCOEFF_16BIT - -#elif defined(__x86__) /* cppp replaced: elif */ -#define ARCH_PREFER_MULT_32x16 -#define SINETABLE_16BIT -#define WINDOWTABLE_16BIT -#define POW2COEFF_16BIT -#define LDCOEFF_16BIT - -#else - - #error >>>> Please set architecture characterization defines for your platform (FDK_HIGH_PERFORMANCE)! <<<< - -#endif /* Architecture switches */ - -#else /* neither FDK_HIGH_QUALITY or FDK_HIGH_PERFORMANCE */ - -#error Either set FDK_HIGH_QUALITY or FDK_HIGH_PERFORMANCE, but not both nor none of them. - -#endif /* End of quality/complexity tradeoff */ - -#define FDKTOOLS_PACKED_TABLES - - -#ifdef SINETABLE_16BIT - #define FIXP_STB FIXP_SGL /* STB sinus Tab used in transformation */ - #define FIXP_STP FIXP_SPK - #define STC(a) (FX_DBL2FXCONST_SGL(a)) -#else - #define FIXP_STB FIXP_DBL - #define FIXP_STP FIXP_DPK - #define STC(a) ((FIXP_DBL)(LONG)(a)) -#endif /* defined(SINETABLE_16BIT) */ - -#define STCP(cos,sin) { { STC(cos), STC(sin) } } - - -#ifdef WINDOWTABLE_16BIT - #define FIXP_WTB FIXP_SGL /* single FIXP_SGL values */ - #define FIXP_WTP FIXP_SPK /* packed FIXP_SGL values */ - #define WTC(a) FX_DBL2FXCONST_SGL(a) -#else /* SINETABLE_16BIT */ - #define FIXP_WTB FIXP_DBL - #define FIXP_WTP FIXP_DPK - #define WTC(a) (FIXP_DBL)(a) -#endif /* SINETABLE_16BIT */ - -#define WTCP(a,b) { { WTC(a), WTC(b) } } - - -#endif /* __ARCH_H__ */ diff --git a/libFDK/include/FDK_bitbuffer.h b/libFDK/include/FDK_bitbuffer.h deleted file mode 100644 index 65fa04b..0000000 --- a/libFDK/include/FDK_bitbuffer.h +++ /dev/null @@ -1,166 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools *********************** - - Author(s): M. Lohwasser - Description: common bitbuffer read/write routines - -******************************************************************************/ - -#ifndef __FDK_BITBUFFER_H__ -#define __FDK_BITBUFFER_H__ - - - -#include "machine_type.h" - -typedef struct -{ - UINT ValidBits; - UINT ReadOffset; - UINT WriteOffset; - UINT BitCnt; - UINT BitNdx; - - UCHAR *Buffer; - UINT bufSize; - UINT bufBits; -} FDK_BITBUF; - -typedef FDK_BITBUF *HANDLE_FDK_BITBUF; - -#ifdef __cplusplus -extern "C" -{ -#endif - -extern const UINT BitMask [32+1]; - -/** The BitBuffer Functions are called straight from FDK_bitstream Interface. - For Functions functional survey look there. -*/ - -void FDK_CreateBitBuffer (HANDLE_FDK_BITBUF *hBitBuffer, UCHAR *pBuffer, UINT bufSize) ; - -void FDK_InitBitBuffer (HANDLE_FDK_BITBUF hBitBuffer, UCHAR *pBuffer, - UINT bufSize, UINT validBits) ; - -void FDK_ResetBitBuffer (HANDLE_FDK_BITBUF hBitBuffer) ; - -void FDK_DeleteBitBuffer (HANDLE_FDK_BITBUF hBitBuffer) ; - -INT FDK_get (HANDLE_FDK_BITBUF hBitBuffer, const UINT numberOfBits) ; - -INT FDK_get32 (HANDLE_FDK_BITBUF hBitBuffer) ; - -void FDK_put (HANDLE_FDK_BITBUF hBitBuffer, UINT value, const UINT numberOfBits) ; - -INT FDK_getBwd (HANDLE_FDK_BITBUF hBitBuffer, const UINT numberOfBits); -void FDK_putBwd (HANDLE_FDK_BITBUF hBitBuffer, UINT value, const UINT numberOfBits) ; - -void FDK_pushBack (HANDLE_FDK_BITBUF hBitBuffer, const UINT numberOfBits, UCHAR config) ; -void FDK_pushForward (HANDLE_FDK_BITBUF hBitBuffer, const UINT numberOfBits, UCHAR config) ; - -void FDK_byteAlign (HANDLE_FDK_BITBUF hBitBuffer, UCHAR config) ; - -UINT FDK_getValidBits (HANDLE_FDK_BITBUF hBitBuffer) ; -INT FDK_getFreeBits (HANDLE_FDK_BITBUF hBitBuffer) ; - -void FDK_setBitCnt (HANDLE_FDK_BITBUF hBitBuffer, const UINT value) ; -INT FDK_getBitCnt (HANDLE_FDK_BITBUF hBitBuffer) ; - -void FDK_Feed (HANDLE_FDK_BITBUF hBitBuffer, UCHAR inputBuffer [], - const UINT bufferSize, UINT *bytesValid) ; - -void FDK_Copy (HANDLE_FDK_BITBUF hBitBufDst, HANDLE_FDK_BITBUF hBitBufSrc, UINT *bytesValid) ; - -void FDK_Fetch (HANDLE_FDK_BITBUF hBitBuffer, UCHAR outBuf[], UINT *writeBytes); - - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/libFDK/include/FDK_bitstream.h b/libFDK/include/FDK_bitstream.h deleted file mode 100644 index fc8d7de..0000000 --- a/libFDK/include/FDK_bitstream.h +++ /dev/null @@ -1,618 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools *********************** - - Author(s): M. Lohwasser - Description: bitstream interface to bitbuffer routines - -******************************************************************************/ - -#ifndef __FDK_BITSTREAM_H__ -#define __FDK_BITSTREAM_H__ - - - -#include "FDK_bitbuffer.h" -#include "machine_type.h" - -#include "genericStds.h" - -#define CACHE_BITS 32 - -typedef enum { - BS_READER, - BS_WRITER -} FDK_BS_CFG; - - -typedef struct -{ - UINT CacheWord ; - UINT BitsInCache ; - FDK_BITBUF hBitBuf; - UINT ConfigCache ; -} FDK_BITSTREAM; - -typedef FDK_BITSTREAM* HANDLE_FDK_BITSTREAM; - -/** - * \brief CreateBitStream Function. - * - * Create and initialize bitstream with extern allocated buffer. - * - * \param pBuffer Pointer to BitBuffer array. - * \param bufSize Length of BitBuffer array. (awaits size 2^n) - * \param config Initialize BitStream as Reader or Writer. - */ -FDK_INLINE -HANDLE_FDK_BITSTREAM FDKcreateBitStream (UCHAR *pBuffer, - UINT bufSize, - FDK_BS_CFG config = BS_READER) -{ - HANDLE_FDK_BITSTREAM hBitStream = (HANDLE_FDK_BITSTREAM) FDKcalloc(1, sizeof(FDK_BITSTREAM)); - FDK_InitBitBuffer(&hBitStream->hBitBuf, pBuffer, bufSize, 0) ; - - /* init cache */ - hBitStream->CacheWord = hBitStream->BitsInCache = 0 ; - hBitStream->ConfigCache = config ; - - return hBitStream ; -} - - -/** - * \brief Initialize BistreamBuffer. BitBuffer can point to filled BitBuffer array . - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param pBuffer Pointer to BitBuffer array. - * \param bufSize Length of BitBuffer array. (awaits size 2^n) - * \param validBits Number of valid BitBuffer filled Bits. - * \param config Initialize BitStream as Reader or Writer. - * \return void - */ -FDK_INLINE -void FDKinitBitStream (HANDLE_FDK_BITSTREAM hBitStream, - UCHAR *pBuffer, - UINT bufSize, - UINT validBits, - FDK_BS_CFG config = BS_READER) -{ - FDK_InitBitBuffer(&hBitStream->hBitBuf, pBuffer, bufSize, validBits) ; - - /* init cache */ - hBitStream->CacheWord = hBitStream->BitsInCache = 0 ; - hBitStream->ConfigCache = config ; -} - - -/** - * \brief ResetBitbuffer Function. Reset states in BitBuffer and Cache. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param config Initialize BitStream as Reader or Writer. - * \return void - */ -FDK_INLINE void FDKresetBitbuffer( HANDLE_FDK_BITSTREAM hBitStream, FDK_BS_CFG config = BS_READER) -{ - FDK_ResetBitBuffer( &hBitStream->hBitBuf ) ; - - /* init cache */ - hBitStream->CacheWord = hBitStream->BitsInCache = 0 ; - hBitStream->ConfigCache = config ; -} - - -/** DeleteBitStream. - - Deletes the in Create Bitstream allocated BitStream and BitBuffer. -*/ -FDK_INLINE void FDKdeleteBitStream (HANDLE_FDK_BITSTREAM hBitStream) -{ - FDK_DeleteBitBuffer(&hBitStream->hBitBuf) ; - FDKfree(hBitStream) ; -} - - -/** - * \brief ReadBits Function (forward). This function returns a number of sequential - * bits from the input bitstream. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param numberOfBits The number of bits to be retrieved. - * \return the requested bits, right aligned - * \return - */ -#define OPTIMIZE_FDKREADBITS - -FDK_INLINE UINT FDKreadBits(HANDLE_FDK_BITSTREAM hBitStream, - const UINT numberOfBits) -{ -#ifdef noOPTIMIZE_FDKREADBITS - INT missingBits = numberOfBits - hBitStream->BitsInCache; - if (missingBits > 0) - { - UINT bits = hBitStream->CacheWord << missingBits; - hBitStream->CacheWord = FDK_get32 (&hBitStream->hBitBuf) ; - hBitStream->BitsInCache = CACHE_BITS - missingBits; - return ( bits | (hBitStream->CacheWord >> hBitStream->BitsInCache)) & BitMask[numberOfBits]; - } - - hBitStream->BitsInCache -= numberOfBits; - return ( hBitStream->CacheWord >> hBitStream->BitsInCache) & BitMask[numberOfBits]; - -#else - const UINT validMask = BitMask [numberOfBits] ; - - if (hBitStream->BitsInCache <= numberOfBits) - { - const INT freeBits = (CACHE_BITS-1) - hBitStream->BitsInCache ; - - hBitStream->CacheWord = (hBitStream->CacheWord << freeBits) | FDK_get (&hBitStream->hBitBuf,freeBits) ; - hBitStream->BitsInCache += freeBits ; - } - - hBitStream->BitsInCache -= numberOfBits ; - - return (hBitStream->CacheWord >> hBitStream->BitsInCache) & validMask ; -#endif -} - -FDK_INLINE UINT FDKreadBit(HANDLE_FDK_BITSTREAM hBitStream) -{ -#ifdef OPTIMIZE_FDKREADBITS - if (!hBitStream->BitsInCache) - { - hBitStream->CacheWord = FDK_get32 (&hBitStream->hBitBuf); - hBitStream->BitsInCache = CACHE_BITS; - } - hBitStream->BitsInCache--; - - return (hBitStream->CacheWord >> hBitStream->BitsInCache) & 1; -#else - return FDKreadBits(hBitStream,1); -#endif -} - -/** - * \brief Read2Bits Function (forward). This function 2 sequential - * bits from the input bitstream. It is the optimized version - of FDKreadBits() for readign 2 bits. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \return the requested bits, right aligned - * \return - */ -inline UINT FDKread2Bits(HANDLE_FDK_BITSTREAM hBitStream) -{ - UINT BitsInCache = hBitStream->BitsInCache; - if (BitsInCache < 2) /* Comparison changed from 'less-equal' to 'less' */ - { - const INT freeBits = (CACHE_BITS-1) - BitsInCache ; - - hBitStream->CacheWord = (hBitStream->CacheWord << freeBits) | FDK_get (&hBitStream->hBitBuf,freeBits) ; - BitsInCache += freeBits; - } - hBitStream->BitsInCache = BitsInCache - 2; - return (hBitStream->CacheWord >> hBitStream->BitsInCache) & 0x3; -} - -/** - * \brief ReadBits Function (backward). This function returns a number of sequential bits - * from the input bitstream. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param numberOfBits The number of bits to be retrieved. - * \return the requested bits, right aligned - */ -FDK_INLINE UINT FDKreadBitsBwd(HANDLE_FDK_BITSTREAM hBitStream, - const UINT numberOfBits) -{ - const UINT validMask = BitMask [numberOfBits] ; - - if (hBitStream->BitsInCache <= numberOfBits) - { - const INT freeBits = (CACHE_BITS-1) - hBitStream->BitsInCache ; - - hBitStream->CacheWord = (hBitStream->CacheWord << freeBits) | FDK_getBwd (&hBitStream->hBitBuf,freeBits) ; - hBitStream->BitsInCache += freeBits ; - } - - hBitStream->BitsInCache -= numberOfBits ; - - return (hBitStream->CacheWord >> hBitStream->BitsInCache) & validMask ; -} - - -/** - * \brief return a number of bits from the bitBuffer. - * You have to know what you do! Cache has to be synchronized before using this - * function. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param numBits The number of bits to be retrieved. - * \return the requested bits, right aligned - */ -FDK_INLINE UINT FDKgetBits (HANDLE_FDK_BITSTREAM hBitStream, UINT numBits) -{ - return FDK_get (&hBitStream->hBitBuf, numBits) ; -} - - -/** - * \brief WriteBits Function. This function writes numberOfBits of value into bitstream. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param value Variable holds data to be written. - * \param numberOfBits The number of bits to be written. - * \return number of bits written - */ -FDK_INLINE UCHAR FDKwriteBits(HANDLE_FDK_BITSTREAM hBitStream, UINT value, - const UINT numberOfBits) -{ - const UINT validMask = BitMask [numberOfBits] ; - - if ((hBitStream->BitsInCache+numberOfBits) < CACHE_BITS) - { - hBitStream->BitsInCache += numberOfBits ; - hBitStream->CacheWord = (hBitStream->CacheWord << numberOfBits) | (value & validMask); - } - else - { - FDK_put(&hBitStream->hBitBuf, hBitStream->CacheWord, hBitStream->BitsInCache) ; - hBitStream->BitsInCache = numberOfBits ; - hBitStream->CacheWord = (value & validMask) ; - } - - return numberOfBits; -} - - -/** - * \brief WriteBits Function (backward). This function writes numberOfBits of value into bitstream. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param value Variable holds data to be written. - * \param numberOfBits The number of bits to be written. - * \return number of bits written - */ -FDK_INLINE UCHAR FDKwriteBitsBwd(HANDLE_FDK_BITSTREAM hBitStream, UINT value, - const UINT numberOfBits) -{ - const UINT validMask = BitMask [numberOfBits] ; - - if ((hBitStream->BitsInCache+numberOfBits) <= CACHE_BITS) - { - hBitStream->BitsInCache += numberOfBits ; - hBitStream->CacheWord = (hBitStream->CacheWord << numberOfBits) | (value & validMask); - } - else - { - FDK_putBwd(&hBitStream->hBitBuf, hBitStream->CacheWord, hBitStream->BitsInCache) ; - hBitStream->BitsInCache = numberOfBits ; - hBitStream->CacheWord = (value & validMask) ; - } - - return numberOfBits; -} - - -/** - * \brief SyncCache Function. Clear cache after read forward. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \return void - */ -FDK_INLINE void FDKsyncCache (HANDLE_FDK_BITSTREAM hBitStream) -{ - if (hBitStream->ConfigCache == BS_READER) - FDK_pushBack (&hBitStream->hBitBuf,hBitStream->BitsInCache,hBitStream->ConfigCache) ; - else /* BS_WRITER */ - FDK_put(&hBitStream->hBitBuf, hBitStream->CacheWord, hBitStream->BitsInCache) ; - - hBitStream->BitsInCache = 0 ; - hBitStream->CacheWord = 0 ; -} - - -/** - * \brief SyncCache Function. Clear cache after read backwards. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \return void - */ -FDK_INLINE void FDKsyncCacheBwd (HANDLE_FDK_BITSTREAM hBitStream) -{ - if (hBitStream->ConfigCache == BS_READER) { - FDK_pushForward (&hBitStream->hBitBuf,hBitStream->BitsInCache,hBitStream->ConfigCache) ; - } else { /* BS_WRITER */ - FDK_putBwd (&hBitStream->hBitBuf, hBitStream->CacheWord, hBitStream->BitsInCache) ; - } - - hBitStream->BitsInCache = 0 ; - hBitStream->CacheWord = 0 ; -} - - -/** - * \brief Byte Alignment Function. - * This function performs the byte_alignment() syntactic function on the input stream, - * i.e. some bits will be discarded/padded so that the next bits to be read/written will - * be aligned on a byte boundary with respect to the bit position 0. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \return void - */ -FDK_INLINE void FDKbyteAlign (HANDLE_FDK_BITSTREAM hBitStream) -{ - FDKsyncCache (hBitStream) ; - FDK_byteAlign (&hBitStream->hBitBuf, (UCHAR)hBitStream->ConfigCache) ; -} - - -/** - * \brief Byte Alignment Function with anchor - * This function performs the byte_alignment() syntactic function on the input stream, - * i.e. some bits will be discarded so that the next bits to be read/written would be aligned - * on a byte boundary with respect to the given alignment anchor. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param alignmentAnchor bit position to be considered as origin for byte alignment - * \return void - */ -FDK_INLINE void FDKbyteAlign (HANDLE_FDK_BITSTREAM hBitStream, UINT alignmentAnchor) -{ - FDKsyncCache (hBitStream) ; - if (hBitStream->ConfigCache == BS_READER) { - FDK_pushForward (&hBitStream->hBitBuf, - (8 - ((alignmentAnchor - FDK_getValidBits(&hBitStream->hBitBuf)) & 0x07)) & 0x07, - hBitStream->ConfigCache) ; - } - else { - FDK_put (&hBitStream->hBitBuf, - 0, - (8 - ((FDK_getValidBits(&hBitStream->hBitBuf)-alignmentAnchor) & 0x07)) & 0x07 ); - } -} - - -/** - * \brief Push Back(Cache) / For / BiDirectional Function. - * PushBackCache function ungets a number of bits erroneously read/written by the last Get() call. - * NB: The number of bits to be stuffed back into the stream may never exceed the - * number of bits returned by the immediately preceding Get() call. - * - * PushBack function ungets a number of bits (combines cache and bitbuffer indices) - * PushFor function gets a number of bits (combines cache and bitbuffer indices) - * PushBiDirectional gets/ungets number of bits as defined in PusBack/For function - * NB: The sign of bits is not known, so the function checks direction and calls - * appropriate function. (positive sign pushFor, negative sign pushBack ) - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param numberOfBits The number of bits to be pushed back/for. - * \return void - */ -FDK_INLINE void FDKpushBackCache (HANDLE_FDK_BITSTREAM hBitStream, const UINT numberOfBits) -{ - FDK_ASSERT ((hBitStream->BitsInCache+numberOfBits)<=CACHE_BITS); - hBitStream->BitsInCache += numberOfBits ; -} - -FDK_INLINE void FDKpushBack (HANDLE_FDK_BITSTREAM hBitStream, const UINT numberOfBits) -{ - if ((hBitStream->BitsInCache+numberOfBits)ConfigCache == BS_READER) ) { - hBitStream->BitsInCache += numberOfBits ; - FDKsyncCache(hBitStream) ; /* sync cache to avoid invalid cache */ - } - else { - FDKsyncCache(hBitStream) ; - FDK_pushBack(&hBitStream->hBitBuf,numberOfBits,hBitStream->ConfigCache); - } -} - -FDK_INLINE void FDKpushFor (HANDLE_FDK_BITSTREAM hBitStream, const UINT numberOfBits) -{ - if ( (hBitStream->BitsInCache>numberOfBits) && (hBitStream->ConfigCache == BS_READER) ) { - hBitStream->BitsInCache -= numberOfBits; - } - else { - FDKsyncCache(hBitStream) ; - FDK_pushForward(&hBitStream->hBitBuf,numberOfBits,hBitStream->ConfigCache); - } -} - -FDK_INLINE void FDKpushBiDirectional (HANDLE_FDK_BITSTREAM hBitStream, const INT numberOfBits) -{ - if(numberOfBits>=0) FDKpushFor(hBitStream, numberOfBits) ; - else FDKpushBack(hBitStream, -numberOfBits) ; -} - - -/** - * \brief GetValidBits Function. Clear cache and return valid Bits from Bitbuffer. - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \return amount of valid bits that still can be read or were already written. - * - */ -FDK_INLINE UINT FDKgetValidBits (HANDLE_FDK_BITSTREAM hBitStream) -{ - FDKsyncCache(hBitStream) ; - return FDK_getValidBits(&hBitStream->hBitBuf) ; -} - - -/** - * \brief return amount of unused Bits from Bitbuffer. - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \return amount of free bits that still can be written into the bitstream - */ -FDK_INLINE INT FDKgetFreeBits (HANDLE_FDK_BITSTREAM hBitStream) -{ - return FDK_getFreeBits (&hBitStream->hBitBuf) ; -} - -/** - * \brief reset bitcounter in bitBuffer to zero. - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \return void - */ -FDK_INLINE void FDKresetBitCnt (HANDLE_FDK_BITSTREAM hBitStream) -{ - FDKsyncCache (hBitStream) ; - FDK_setBitCnt (&hBitStream->hBitBuf, 0) ; -} - -/** - * \brief set bitcoutner in bitBuffer to given value. - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param value new value to be assigned to the bit counter - * \return void - */ -FDK_INLINE void FDKsetBitCnt (HANDLE_FDK_BITSTREAM hBitStream, UINT value) -{ - FDKsyncCache (hBitStream) ; - FDK_setBitCnt (&hBitStream->hBitBuf, value) ; -} - -/** - * \brief get bitcounter state from bitBuffer. - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \return current bit counter value - */ -FDK_INLINE INT FDKgetBitCnt (HANDLE_FDK_BITSTREAM hBitStream) -{ - FDKsyncCache(hBitStream) ; - return FDK_getBitCnt(&hBitStream->hBitBuf) ; -} - - -/** - * \brief Fill the BitBuffer with a number of input bytes from external source. - * The bytesValid variable returns the number of ramaining valid bytes in extern inputBuffer. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param inputBuffer Pointer to input buffer with bitstream data. - * \param bufferSize Total size of inputBuffer array. - * \param bytesValid Input: number of valid bytes in inputBuffer. Output: bytes still left unread in inputBuffer. - * \return void - */ -FDK_INLINE void FDKfeedBuffer (HANDLE_FDK_BITSTREAM hBitStream, const UCHAR inputBuffer [], const UINT bufferSize, UINT *bytesValid) -{ - FDKsyncCache (hBitStream) ; - FDK_Feed(&hBitStream->hBitBuf, (UCHAR*)inputBuffer, bufferSize, bytesValid ) ; -} - - -/** - * \brief fill destination BitBuffer with a number of bytes from source BitBuffer. The - * bytesValid variable returns the number of ramaining valid bytes in source BitBuffer. - * - * \param hBSDst HANDLE_FDK_BITSTREAM handle to write data into - * \param hBSSrc HANDLE_FDK_BITSTREAM handle to read data from - * \param bytesValid Input: number of valid bytes in inputBuffer. Output: bytes still left unread in inputBuffer. - * \return void - */ -FDK_INLINE void FDKcopyBuffer (HANDLE_FDK_BITSTREAM hBSDst, HANDLE_FDK_BITSTREAM hBSSrc, UINT *bytesValid) -{ - FDKsyncCache (hBSSrc) ; - FDK_Copy (&hBSDst->hBitBuf, &hBSSrc->hBitBuf, bytesValid) ; -} - - -/** - * \brief fill the outputBuffer with all valid bytes hold in BitBuffer. The WriteBytes - * variable returns the number of written Bytes. - * - * \param hBitStream HANDLE_FDK_BITSTREAM handle - * \param outputBuffer Pointer to output buffer. - * \param writeBytes Number of bytes write to output buffer. - * \return void - */ -FDK_INLINE void FDKfetchBuffer(HANDLE_FDK_BITSTREAM hBitStream, UCHAR *outputBuffer, UINT *writeBytes) -{ - FDKsyncCache (hBitStream) ; - FDK_Fetch(&hBitStream->hBitBuf, outputBuffer, writeBytes); -} - - -#endif diff --git a/libFDK/include/FDK_core.h b/libFDK/include/FDK_core.h deleted file mode 100644 index 10a6a8e..0000000 --- a/libFDK/include/FDK_core.h +++ /dev/null @@ -1,109 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools *********************** - - Author(s): Manuel Jander - Description: FDK tools versioning support - -******************************************************************************/ - -#ifndef FDK_CORE_H -#define FDK_CORE_H - -#include "FDK_audio.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** @brief Get FDK_tools library information. - * @return Return 0 on success and a negative errorcode on failure (see errorcodes.h). - */ -int FDK_toolsGetLibInfo(LIB_INFO *info); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libFDK/include/FDK_crc.h b/libFDK/include/FDK_crc.h deleted file mode 100644 index b1fed88..0000000 --- a/libFDK/include/FDK_crc.h +++ /dev/null @@ -1,231 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/******************************** MPEG Audio Encoder ************************** - - Initial author: - contents/description: CRC calculation - -******************************************************************************/ - -#ifndef FDK_CRC_H -#define FDK_CRC_H - - - -#include "FDK_bitstream.h" - - -#define MAX_CRC_REGS 3 /*!< Maximal number of overlapping crc region in ADTS channel pair element is two. - Select three independent regions preventively. */ - -/** - * This structure describes single crc region used for crc calculation. - */ -typedef struct -{ - UCHAR isActive; - INT maxBits; - UINT bitBufCntBits; - UINT validBits; - -} CCrcRegData; - -/** - * CRC info structure. - */ -typedef struct -{ - CCrcRegData crcRegData[MAX_CRC_REGS]; /*!< Multiple crc region description. */ - const USHORT *pCrcLookup; /*!< Pointer to lookup table filled in FDK_crcInit(). */ - - USHORT crcPoly; /*!< CRC generator polynom. */ - USHORT crcMask; /*!< CRC mask. */ - USHORT startValue; /*!< CRC start value. */ - UCHAR crcLen; /*!< CRC length. */ - - UINT regStart; /*!< Start region marker for synchronization. */ - UINT regStop; /*!< Stop region marker for synchronization. */ - - USHORT crcValue; /*!< Crc value to be calculated. */ - -} FDK_CRCINFO; - -/** - * CRC info handle. - */ -typedef FDK_CRCINFO* HANDLE_FDK_CRCINFO; - - -/** - * \brief Initialize CRC structure. - * - * The function initializes existing crc info structure with denoted configuration. - * - * \param hCrcInfo Pointer to an outlying allocated crc info structure. - * \param crcPoly Configure crc polynom. - * \param crcStartValue Configure crc start value. - * \param crcLen Configure crc length. - * - * \return none - */ -void FDKcrcInit( - HANDLE_FDK_CRCINFO hCrcInfo, - const UINT crcPoly, - const UINT crcStartValue, - const UINT crcLen - ); - -/** - * \brief Reset CRC info structure. - * - * This function clears all intern states of the crc structure. - * - * \param hCrcInfo Pointer to crc info stucture. - * - * \return none - */ -void FDKcrcReset( - HANDLE_FDK_CRCINFO hCrcInfo - ); - - -/** - * \brief Start CRC region with maximum number of bits. - * - * This function marks position in bitstream to be used as start point for crc calculation. - * Bitstream range for crc calculation can be limited or kept dynamic depending on mBits parameter. - * The crc region has to be terminated with FDKcrcEndReg() in each case. - * - * \param hCrcInfo Pointer to crc info stucture. - * \param hBs Pointer to current bit buffer structure. - * \param mBits Number of bits in crc region to be calculated. - * - mBits > 0: Zero padding will be used for CRC calculation, if there - * are less than mBits bits available. - * - mBits < 0: No zero padding is done. - * - mBits = 0: The number of bits used in crc calculation is dynamically, - * depending on bitstream position between FDKcrcStartReg() and - * FDKcrcEndReg() call. - * - * \return ID for the created region, -1 in case of an error - */ -INT FDKcrcStartReg( - HANDLE_FDK_CRCINFO hCrcInfo, - const HANDLE_FDK_BITSTREAM hBs, - const INT mBits - ); - - -/** - * \brief Ends CRC region. - * - * This function terminates crc region specified with FDKcrcStartReg(). The number of bits in crc region depends - * on mBits parameter of FDKcrcStartReg(). - * This function calculates and updates crc in info structure. - * - * \param hCrcInfo Pointer to crc info stucture. - * \param hBs Pointer to current bit buffer structure. - * \param reg Crc region ID created in FDKcrcStartReg(). - * - * \return 0 on success - */ -INT FDKcrcEndReg( - HANDLE_FDK_CRCINFO hCrcInfo, - const HANDLE_FDK_BITSTREAM hBs, - const INT reg - ); - - -/** - * \brief This function returns crc value from info struct. - * - * \param hCrcInfo Pointer to crc info stucture. - * - * \return CRC value masked with crc length. - */ -USHORT FDKcrcGetCRC( - const HANDLE_FDK_CRCINFO hCrcInfo - ); - - -#endif /* FDK_CRC_H */ diff --git a/libFDK/include/FDK_hybrid.h b/libFDK/include/FDK_hybrid.h deleted file mode 100644 index 63f2d70..0000000 --- a/libFDK/include/FDK_hybrid.h +++ /dev/null @@ -1,273 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): Markus Lohwasser - Description: FDK Tools Hybrid Filterbank - -******************************************************************************/ - -#ifndef __FDK_HYBRID_H -#define __FDK_HYBRID_H - - - -#include "common_fix.h" - -/*--------------- enums -------------------------------*/ - -/** - * Hybrid Filterband modes. - */ -typedef enum { - THREE_TO_TEN, - THREE_TO_TWELVE, - THREE_TO_SIXTEEN - -} FDK_HYBRID_MODE; - - -/*--------------- structure definitions ---------------*/ -typedef struct FDK_HYBRID_SETUP *HANDLE_FDK_HYBRID_SETUP; - -typedef struct -{ - FIXP_DBL *bufferLFReal[3]; /*!< LF real filter states. */ - FIXP_DBL *bufferLFImag[3]; /*!< LF imag filter states. */ - FIXP_DBL *bufferHFReal[13]; /*!< HF real delay lines. */ - FIXP_DBL *bufferHFImag[13]; /*!< HF imag delay lines. */ - - INT bufferLFpos; /*!< Position to write incoming data into ringbuffer. */ - INT bufferHFpos; /*!< Delay line positioning. */ - INT nrBands; /*!< Number of QMF bands. */ - INT cplxBands; /*!< Number of complex QMF bands.*/ - UCHAR hfMode; /*!< Flag signalizes treatment of HF bands. */ - - FIXP_DBL *pLFmemory; /*!< Pointer to LF states buffer. */ - FIXP_DBL *pHFmemory; /*!< Pointer to HF states buffer. */ - - UINT LFmemorySize; /*!< Size of LF states buffer. */ - UINT HFmemorySize; /*!< Size of HF states buffer. */ - - HANDLE_FDK_HYBRID_SETUP pSetup; /*!< Pointer to filter setup. */ - -} FDK_ANA_HYB_FILTER; - - -typedef struct -{ - INT nrBands; /*!< Number of QMF bands. */ - INT cplxBands; /*!< Number of complex QMF bands.*/ - - HANDLE_FDK_HYBRID_SETUP pSetup; /*!< Pointer to filter setup. */ - -} FDK_SYN_HYB_FILTER; - -typedef FDK_ANA_HYB_FILTER *HANDLE_FDK_ANA_HYB_FILTER; -typedef FDK_SYN_HYB_FILTER *HANDLE_FDK_SYN_HYB_FILTER; - - -/** - * \brief Create one instance of Hybrid Analyis Filterbank. - * - * \param hAnalysisHybFilter Pointer to an outlying allocated Hybrid Analysis Filterbank structure. - * \param pLFmemory Pointer to outlying buffer used LF filtering. - * \param LFmemorySize Size of pLFmemory in bytes. - * \param pHFmemory Pointer to outlying buffer used HF delay line. - * \param HFmemorySize Size of pLFmemory in bytes. - * - * \return 0 on success. - */ -INT FDKhybridAnalysisOpen( - HANDLE_FDK_ANA_HYB_FILTER hAnalysisHybFilter, - FIXP_DBL *const pLFmemory, - const UINT LFmemorySize, - FIXP_DBL *const pHFmemory, - const UINT HFmemorySize - ); - - -/** - * \brief Initialize and configure Hybrdid Analysis Filterbank instance. - * - * \param hAnalysisHybFilter A Hybrid Analysis Filterbank handle. - * \param mode Select hybrid filter configuration. - * \param qmfBands Number of qmf bands to be processed. - * \param cplxBands Number of complex qmf bands to be processed. - * \param initStatesFlag Indicates whether the states buffer has to be cleared. - * - * \return 0 on success. - */ -INT FDKhybridAnalysisInit( - HANDLE_FDK_ANA_HYB_FILTER hAnalysisHybFilter, - const FDK_HYBRID_MODE mode, - const INT qmfBands, - const INT cplxBands, - const INT initStatesFlag - ); - - -/** - * \brief Adjust Hybrdid Analysis Filterbank states. - * - * \param hAnalysisHybFilter A Hybrid Analysis Filterbank handle. - * \param scalingValue Scaling value to be applied on filter states. - * - * \return 0 on success. - */ -INT FDKhybridAnalysisScaleStates( - HANDLE_FDK_ANA_HYB_FILTER hAnalysisHybFilter, - const INT scalingValue - ); - - -/** - * \brief Apply Hybrid Analysis Filterbank on Qmf input data. - * - * \param hAnalysisHybFilter A Hybrid Analysis Filterbank handle. - * \param pQmfReal Qmf input data. - * \param pQmfImag Qmf input data. - * \param pHybridReal Hybrid output data. - * \param pHybridImag Hybrid output data. - * - * \return 0 on success. - */ -INT FDKhybridAnalysisApply( - HANDLE_FDK_ANA_HYB_FILTER hAnalysisHybFilter, - const FIXP_DBL *const pQmfReal, - const FIXP_DBL *const pQmfImag, - FIXP_DBL *const pHybridReal, - FIXP_DBL *const pHybridImag - ); - - -/** - * \brief Close a Hybrid Analysis Filterbank instance. - * - * \param hAnalysisHybFilter Pointer to a Hybrid Analysis Filterbank instance. - * - * \return 0 on success. - */ -INT FDKhybridAnalysisClose( - HANDLE_FDK_ANA_HYB_FILTER hAnalysisHybFilter - ); - -/** - * \brief Initialize and configure Hybrdid Synthesis Filterbank instance. - * - * \param hSynthesisHybFilter A Hybrid Synthesis Filterbank handle. - * \param mode Select hybrid filter configuration. - * \param qmfBands Number of qmf bands to be processed. - * \param cplxBands Number of complex qmf bands to be processed. - * - * \return 0 on success. - */ -INT FDKhybridSynthesisInit( - HANDLE_FDK_SYN_HYB_FILTER hSynthesisHybFilter, - const FDK_HYBRID_MODE mode, - const INT qmfBands, - const INT cplxBands - ); - -/** - * \brief Apply Hybrid Analysis Filterbank on Hybrid data. - * - * \param hSynthesisHybFilter A Hybrid Analysis Filterbandk handle. - * \param pHybridReal Hybrid input data. - * \param pHybridImag Hybrid input data. - * \param pQmfReal Qmf output data. - * \param pQmfImag Qmf output data. - * - * \return 0 on success. - */ -INT FDKhybridSynthesisApply( - HANDLE_FDK_SYN_HYB_FILTER hSynthesisHybFilter, - const FIXP_DBL *const pHybridReal, - const FIXP_DBL *const pHybridImag, - FIXP_DBL *const pQmfReal, - FIXP_DBL *const pQmfImag - ); - - -#endif /* __FDK_HYBRID_H */ diff --git a/libFDK/include/FDK_tools_rom.h b/libFDK/include/FDK_tools_rom.h deleted file mode 100644 index 9361c81..0000000 --- a/libFDK/include/FDK_tools_rom.h +++ /dev/null @@ -1,270 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools *********************** - - Author(s): Oliver Moser - Description: ROM tables used by FDK tools - -******************************************************************************/ - -#ifndef __FDK_TOOLS_ROM_H__ -#define __FDK_TOOLS_ROM_H__ - -#include "common_fix.h" -#include "FDK_audio.h" - - -/* None radix2 rotation vectors */ -extern const FIXP_STB RotVectorReal60[60]; -extern const FIXP_STB RotVectorImag60[60]; -extern const FIXP_STB RotVectorReal240[240]; -extern const FIXP_STB RotVectorImag240[240]; -extern const FIXP_STB RotVectorReal480[480]; -extern const FIXP_STB RotVectorImag480[480]; - - -/* Regular sine tables */ -extern const FIXP_STP SineTable512[]; -extern const FIXP_STP SineTable480[]; - -/* AAC-LC windows */ -extern const FIXP_WTP SineWindow1024[]; -extern const FIXP_WTP KBDWindow1024[]; -extern const FIXP_WTP SineWindow128[]; -extern const FIXP_WTP KBDWindow128[]; - -extern const FIXP_WTP SineWindow960[]; -extern const FIXP_WTP KBDWindow960[]; -extern const FIXP_WTP SineWindow120[]; -extern const FIXP_WTP KBDWindow120[]; - -/* AAC-LD windows */ -extern const FIXP_WTP SineWindow512[]; -#define LowOverlapWindow512 SineWindow128 -extern const FIXP_WTP SineWindow480[]; -#define LowOverlapWindow480 SineWindow120 - - - -extern const FIXP_WTP SineWindow64[]; -extern const FIXP_WTP SineWindow32[]; - -/** - * \brief Helper table for window slope mapping. You should prefer the usage of the - * function FDKgetWindowSlope(), this table is only made public for some optimized - * access inside dct.cpp. - */ -extern const FIXP_WTP *const windowSlopes[2][3][9]; - -/** - * \brief Window slope access helper. Obtain a window of given length and shape. - * \param length Length of the window slope. - * \param shape Shape index of the window slope. 0: sine window, 1: Kaiser-Bessel. Any other - * value is applied a mask of 1 to, mapping it to either 0 or 1. - * \param Pointer to window slope or NULL if the requested window slope is not available. - */ -const FIXP_WTP * FDKgetWindowSlope(int length, int shape); - -extern const FIXP_WTP sin_twiddle_L64[]; - -/* - * Filter coefficient type definition - */ - -#if defined(ARCH_PREFER_MULT_16x16) || defined(ARCH_PREFER_MULT_32x16) - #define QMF_COEFF_16BIT -#endif - -#define QMF_FILTER_PROTOTYPE_SIZE 640 -#define QMF_NO_POLY 5 - -#ifdef QMF_COEFF_16BIT - #define FIXP_PFT FIXP_SGL - #define FIXP_QTW FIXP_SGL -#else - #define FIXP_PFT FIXP_DBL - #define FIXP_QTW FIXP_DBL -#endif - -#define QMF640_PFT_TABLE_SIZE (640/2 + QMF_NO_POLY) - -extern const FIXP_QTW qmf_phaseshift_cos32[32]; -extern const FIXP_QTW qmf_phaseshift_sin32[32]; -/* Adapted analysis post-twiddles for down-sampled HQ SBR */ -extern const FIXP_QTW qmf_phaseshift_cos_downsamp32[32]; -extern const FIXP_QTW qmf_phaseshift_sin_downsamp32[32]; -extern const FIXP_QTW qmf_phaseshift_cos64[64]; -extern const FIXP_QTW qmf_phaseshift_sin64[64]; - -extern const FIXP_PFT qmf_64[QMF640_PFT_TABLE_SIZE+QMF_NO_POLY]; - - - - - -#define QMF640_CLDFB_PFT_TABLE_SIZE (640) -#define QMF320_CLDFB_PFT_TABLE_SIZE (320) -#define QMF_CLDFB_PFT_SCALE 1 - -extern const FIXP_QTW qmf_phaseshift_cos32_cldfb[32]; -extern const FIXP_QTW qmf_phaseshift_sin32_cldfb[32]; -extern const FIXP_QTW qmf_phaseshift_cos64_cldfb[64]; -extern const FIXP_QTW qmf_phaseshift_sin64_cldfb[64]; - -extern const FIXP_PFT qmf_cldfb_640[QMF640_CLDFB_PFT_TABLE_SIZE]; -extern const FIXP_PFT qmf_cldfb_320[QMF320_CLDFB_PFT_TABLE_SIZE]; - - - - - -/* - * Raw Data Block list stuff. - */ -typedef enum { - element_instance_tag, - common_window, - global_gain, - ics_info, /* ics_reserved_bit, window_sequence, window_shape, max_sfb, scale_factor_grouping, predictor_data_present, ltp_data_present, ltp_data */ - max_sfb, - ms, /* ms_mask_present, ms_used */ - /*predictor_data_present,*/ /* part of ics_info */ - ltp_data_present, - ltp_data, - section_data, - scale_factor_data, - pulse, /* pulse_data_present, pulse_data */ - tns_data_present, - tns_data, - gain_control_data_present, - gain_control_data, - esc1_hcr, - esc2_rvlc, - spectral_data, - - scale_factor_data_usac, - core_mode, - common_tw, - lpd_channel_stream, - tw_data, - noise, - ac_spectral_data, - fac_data, - tns_active, /* introduced in MPEG-D usac CD */ - tns_data_present_usac, - common_max_sfb, - - - /* Non data list items */ - adtscrc_start_reg1, - adtscrc_start_reg2, - adtscrc_end_reg1, - adtscrc_end_reg2, - drmcrc_start_reg, - drmcrc_end_reg, - next_channel, - next_channel_loop, - link_sequence, - end_of_sequence -} rbd_id_t; - -struct element_list { - const rbd_id_t *id; - const struct element_list *next[2]; -}; - -typedef struct element_list element_list_t; -/** - * \brief get elementary stream pieces list for given parameters. - * \param aot audio object type - * \param epConfig the epConfig value from the current Audio Specific Config - * \param nChannels amount of channels contained in the current element. - * \param layer the layer of the current element. - * \return element_list_t parser guidance structure. - */ -const element_list_t * getBitstreamElementList(AUDIO_OBJECT_TYPE aot, SCHAR epConfig, UCHAR nChannels, UCHAR layer); - - -#endif - diff --git a/libFDK/include/FDK_trigFcts.h b/libFDK/include/FDK_trigFcts.h deleted file mode 100644 index c32c0f2..0000000 --- a/libFDK/include/FDK_trigFcts.h +++ /dev/null @@ -1,229 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): Haricharan Lakshman, Manuel Jander - Description: Trigonometric functions fixed point fractional implementation. - -******************************************************************************/ - - - -#include "common_fix.h" - -#include "FDK_tools_rom.h" - -/* Fixed point precision definitions */ -#define Q(format) ((FIXP_DBL)(((LONG)1) << (format))) - -#ifndef M_PI -#define M_PI (3.14159265358979323846f) -#endif - -/*! - * Inverse tangent function. - */ - -// --- fixp_atan() ---- -#define Q_ATANINP (25) // Input in q25, Output in q30 -#define Q_ATANOUT (30) -#define ATI_SF ((DFRACT_BITS-1)-Q_ATANINP) // 6 -#define ATI_SCALE ((float)(1<> shift; - - residual &= ( (1< (1< (1<<(LD-1))) { - FIXP_STP tmp; - /* Cosine/Sine simetry for angles greater than PI/4 */ - s = (1< (FIXP_DBL)(0)) ? (x) : -(x) ; } -#endif - -#if !defined(FUNCTION_fixabs_I) -inline INT fixabs_I(INT x) { return ((x) > (INT)(0)) ? (x) : -(x) ; } -#endif - -#if !defined(FUNCTION_fixabs_S) -inline FIXP_SGL fixabs_S(FIXP_SGL x) { return ((x) > (FIXP_SGL)(0)) ? (x) : -(x) ; } -#endif - -#endif /* __ABS_H__ */ diff --git a/libFDK/include/arm/clz_arm.h b/libFDK/include/arm/clz_arm.h deleted file mode 100644 index f43a7b1..0000000 --- a/libFDK/include/arm/clz_arm.h +++ /dev/null @@ -1,122 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - -#if defined(__arm__) - -#if defined(__GNUC__) && defined(__ARM_ARCH_5TE__) /* cppp replaced: elif */ - /* ARM gcc*/ - - #define FUNCTION_fixnormz_D - #define FUNCTION_fixnorm_D - - inline INT fixnormz_D(LONG value) - { - INT result; - asm("clz %0, %1 ": "=r"(result) : "r"(value) ); - return result; - } - - inline INT fixnorm_D(LONG value) - { - INT result; - if (value == 0) { - return 0; - } - if (value < 0) { - value = ~value; - } - result = fixnormz_D(value); - return result - 1; - } - -#endif /* arm toolchain */ - -#endif /* __arm__ */ - diff --git a/libFDK/include/arm/cplx_mul.h b/libFDK/include/arm/cplx_mul.h deleted file mode 100644 index 8b48031..0000000 --- a/libFDK/include/arm/cplx_mul.h +++ /dev/null @@ -1,214 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - -#if defined(__arm__) && defined(__GNUC__) /* cppp replaced: elif */ - -#if defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_6__) - #define FUNCTION_cplxMultDiv2_32x16 - #define FUNCTION_cplxMultDiv2_32x16X2 - //#define FUNCTION_cplxMult_32x16 - //#define FUNCTION_cplxMult_32x16X2 -#endif - -#define FUNCTION_cplxMultDiv2_32x32X2 -//#define FUNCTION_cplxMult_32x32X2 - -#ifdef FUNCTION_cplxMultDiv2_32x16 -inline void cplxMultDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_SPK wpk ) -{ - LONG tmp1,tmp2; - const LONG w = wpk.w; - - asm("smulwt %0, %3, %4;\n" - "rsb %1,%0,#0;\n" - "smlawb %0, %2, %4, %1;\n" - "smulwt %1, %2, %4;\n" - "smlawb %1, %3, %4, %1;\n" - : "=&r"(tmp1), "=&r"(tmp2) - : "r"(a_Re), "r"(a_Im), "r"(w) - ); - - *c_Re = tmp1; - *c_Im = tmp2; -} -#endif /* FUNCTION_cplxMultDiv2_32x16 */ - -#ifdef FUNCTION_cplxMultDiv2_32x16X2 -inline void cplxMultDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_SGL b_Re, - const FIXP_SGL b_Im) -{ - LONG tmp1, tmp2; - - asm("smulwb %0, %3, %5;\n" /* %7 = -a_Im * b_Im */ - "rsb %1,%0,#0;\n" - "smlawb %0, %2, %4, %1;\n" /* tmp1 = a_Re * b_Re - a_Im * b_Im */ - "smulwb %1, %2, %5;\n" /* %7 = a_Re * b_Im */ - "smlawb %1, %3, %4, %1;\n" /* tmp2 = a_Im * b_Re + a_Re * b_Im */ - : "=&r"(tmp1), "=&r"(tmp2) - : "r"(a_Re), "r"(a_Im), "r"(b_Re), "r"(b_Im) - ); - - *c_Re = tmp1; - *c_Im = tmp2; -} -#endif /* FUNCTION_cplxMultDiv2_32x16X2 */ - -#ifdef FUNCTION_cplxMultAddDiv2_32x16X2 -inline void cplxMultAddDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_SGL b_Re, - const FIXP_SGL b_Im) -{ - LONG tmp1, tmp2; - - asm("smulwb %0, %3, %5;\n" - "rsb %1,%0,#0;\n" - "smlawb %0, %2, %4, %1;\n" - "smulwb %1, %2, %5;\n" - "smlawb %1, %3, %4, %1;\n" - : "=&r"(tmp1), "=&r"(tmp2) - : "r"(a_Re), "r"(a_Im), "r"(b_Re), "r"(b_Im) - ); - - *c_Re += tmp1; - *c_Im += tmp2; -} -#endif /* FUNCTION_cplxMultAddDiv2_32x16X2 */ - - -#ifdef FUNCTION_cplxMultDiv2_32x32X2 -inline void cplxMultDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_DBL b_Re, - const FIXP_DBL b_Im) -{ - LONG tmp1, tmp2; - -#ifdef __ARM_ARCH_6__ - asm( - "smmul %0, %2, %4;\n" /* tmp1 = a_Re * b_Re */ - "smmls %0, %3, %5, %0;\n" /* tmp1 -= a_Im * b_Im */ - "smmul %1, %2, %5;\n" /* tmp2 = a_Re * b_Im */ - "smmla %1, %3, %4, %1;\n" /* tmp2 += a_Im * b_Re */ - : "=&r"(tmp1), "=&r"(tmp2) - : "r"(a_Re), "r"(a_Im), "r"(b_Re), "r"(b_Im) - : "r0" - ); -#else - LONG discard; - asm( - "smull %2, %0, %7, %6;\n" /* tmp1 = -a_Im * b_Im */ - "smlal %2, %0, %3, %5;\n" /* tmp1 += a_Re * b_Re */ - "smull %2, %1, %3, %6;\n" /* tmp2 = a_Re * b_Im */ - "smlal %2, %1, %4, %5;\n" /* tmp2 += a_Im * b_Re */ - : "=&r"(tmp1), "=&r"(tmp2), "=&r"(discard) - : "r"(a_Re), "r"(a_Im), "r"(b_Re), "r"(b_Im), "r"(-a_Im) - ); - #endif - *c_Re = tmp1; - *c_Im = tmp2; -} -#endif /* FUNCTION_cplxMultDiv2_32x32X2 */ - - -#endif - diff --git a/libFDK/include/arm/fixmadd_arm.h b/libFDK/include/arm/fixmadd_arm.h deleted file mode 100644 index 111147b..0000000 --- a/libFDK/include/arm/fixmadd_arm.h +++ /dev/null @@ -1,160 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - -#if defined(__arm__) - - /* ############################################################################# */ - #if defined(__GNUC__) && defined(__arm__) && !defined(__SYMBIAN32__) /* cppp replaced: elif */ - /* ############################################################################# */ - /* ARM GNU GCC */ - - #define FUNCTION_fixmadddiv2_DD - - #ifdef __ARM_ARCH_6__ - inline FIXP_DBL fixmadddiv2_DD (FIXP_DBL x, const FIXP_DBL a, const FIXP_DBL b) { - INT result; - asm ("smmla %0, %1, %2, %3;\n" - : "=r" (result) - : "r" (a), "r" (b), "r"(x) ); - return result ; - } - #define FUNCTION_fixmsubdiv2_DD - inline FIXP_DBL fixmsubdiv2_DD (FIXP_DBL x, const FIXP_DBL a, const FIXP_DBL b) { - INT result; - asm ("smmls %0, %1, %2, %3;\n" - : "=r" (result) - : "r" (a), "r" (b), "r"(x) ); - return result ; - } - #else /* __ARM_ARCH_6__ */ - inline FIXP_DBL fixmadddiv2_DD (FIXP_DBL x, const FIXP_DBL a, const FIXP_DBL b) { - INT discard, result = x; - asm ("smlal %0, %1, %2, %3;\n" - : "=r" (discard), "+r" (result) - : "r" (a), "r" (b) ); - return result ; - } - #endif /* __ARM_ARCH_6__ */ - - #if defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_6__) - - #define FUNCTION_fixmadddiv2_DS - - inline FIXP_DBL fixmadddiv2_DS (FIXP_DBL x, const FIXP_DBL a, const FIXP_SGL b) { - INT result; - asm("smlawb %0, %1, %2, %3 " - : "=r" (result) - : "r" (a), "r" (b), "r" (x) ); - return result ; - } - - #endif /* defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_6__) */ - - #define FUNCTION_fixmadddiv2BitExact_DD - #define fixmadddiv2BitExact_DD(a, b, c) fixmadddiv2_DD(a, b, c) - - #define FUNCTION_fixmsubdiv2BitExact_DD - inline FIXP_DBL fixmsubdiv2BitExact_DD (FIXP_DBL x, const FIXP_DBL a, const FIXP_DBL b) { - return x - fixmuldiv2BitExact_DD(a, b); - } - - #define FUNCTION_fixmadddiv2BitExact_DS - #define fixmadddiv2BitExact_DS(a, b, c) fixmadddiv2_DS(a, b, c) - - #define FUNCTION_fixmsubdiv2BitExact_DS - inline FIXP_DBL fixmsubdiv2BitExact_DS (FIXP_DBL x, const FIXP_DBL a, const FIXP_SGL b) { - return x - fixmuldiv2BitExact_DS(a, b); - } - /* ############################################################################# */ - #endif /* toolchain */ - /* ############################################################################# */ - -#endif /* __arm__ */ - diff --git a/libFDK/include/arm/fixmul_arm.h b/libFDK/include/arm/fixmul_arm.h deleted file mode 100644 index 2f04705..0000000 --- a/libFDK/include/arm/fixmul_arm.h +++ /dev/null @@ -1,142 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - -#if defined(__arm__) - -#if defined(__GNUC__) && defined(__arm__) /* cppp replaced: elif */ -/* ARM with GNU compiler */ - -#define FUNCTION_fixmuldiv2_DD - -#define FUNCTION_fixmuldiv2BitExact_DD -#define fixmuldiv2BitExact_DD(a,b) fixmuldiv2_DD(a,b) -#define FUNCTION_fixmulBitExact_DD -#define fixmulBitExact_DD(a,b) fixmul_DD(a,b) - -#define FUNCTION_fixmuldiv2BitExact_DS -#define fixmuldiv2BitExact_DS(a,b) fixmuldiv2_DS(a,b) - -#define FUNCTION_fixmulBitExact_DS -#define fixmulBitExact_DS(a,b) fixmul_DS(a,b) - -#if defined(__ARM_ARCH_6__) || defined(__TARGET_ARCH_7E_M) -inline INT fixmuldiv2_DD (const INT a, const INT b) -{ - INT result ; - __asm__ ("smmul %0, %1, %2" : "=r" (result) - : "r" (a), "r" (b)) ; - return result ; -} -#else -inline INT fixmuldiv2_DD (const INT a, const INT b) -{ - INT discard, result ; - __asm__ ("smull %0, %1, %2, %3" : "=&r" (discard), "=r" (result) - : "r" (a), "r" (b)) ; - return result ; -} -#endif - -#if defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_6__) -#define FUNCTION_fixmuldiv2_SD -inline INT fixmuldiv2_SD (const SHORT a, const INT b) -{ - INT result ; - __asm__ ("smulwb %0, %1, %2" - : "=r" (result) - : "r" (b), "r" (a)) ; - return result ; -} -#endif - -#endif /* defined(__GNUC__) && defined(__arm__) */ - -#endif /* __arm__ */ - diff --git a/libFDK/include/arm/scale.h b/libFDK/include/arm/scale.h deleted file mode 100644 index cbb81dc..0000000 --- a/libFDK/include/arm/scale.h +++ /dev/null @@ -1,152 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/******************************** Fraunhofer IIS *************************** - - Author(s): - Description: ARM scaling operations - -******************************************************************************/ - -#if defined(__GNUC__) /* GCC Compiler */ /* cppp replaced: elif */ - -#if defined(__ARM_ARCH_6__) - -inline static INT shiftRightSat(INT src, int scale) -{ - INT result; - asm( - "ssat %0,%2,%0;\n" - - : "=&r"(result) - : "r"(src>>scale), "M"(SAMPLE_BITS) - ); - - return result; -} - - #define SATURATE_INT_PCM_RIGHT_SHIFT(src, scale) shiftRightSat(src, scale) - -inline static INT shiftLeftSat(INT src, int scale) -{ - INT result; - asm( - "ssat %0,%2,%0;\n" - - : "=&r"(result) - : "r"(src<= 0) - *value <<= newscale; - else - *value >>= -newscale; -} - - - #define SATURATE_RIGHT_SHIFT(src, scale, dBits) \ - ( (((LONG)(src) ^ ((LONG)(src) >> (DFRACT_BITS-1)))>>(scale)) > (LONG)(((1U)<<((dBits)-1))-1)) \ - ? ((LONG)(src) >> (DFRACT_BITS-1)) ^ (LONG)(((1U)<<((dBits)-1))-1) \ - : ((LONG)(src) >> (scale)) - - #define SATURATE_LEFT_SHIFT(src, scale, dBits) \ - ( ((LONG)(src) ^ ((LONG)(src) >> (DFRACT_BITS-1))) > ((LONG)(((1U)<<((dBits)-1))-1) >> (scale)) ) \ - ? ((LONG)(src) >> (DFRACT_BITS-1)) ^ (LONG)(((1U)<<((dBits)-1))-1) \ - : ((LONG)(src) << (scale)) - diff --git a/libFDK/include/arm/scramble.h b/libFDK/include/arm/scramble.h deleted file mode 100644 index 82d0338..0000000 --- a/libFDK/include/arm/scramble.h +++ /dev/null @@ -1,158 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: bitreversal of input data - -******************************************************************************/ - -#if defined(FUNCTION_scramble) -#if defined(__GNUC__) /* cppp replaced: elif */ - -#define FUNCTION_scramble - -#if defined(__ARM_ARCH_5TE__) -#define USE_LDRD_STRD /* LDRD requires 8 byte data alignment. */ -#endif - -inline void scramble(FIXP_DBL x [], INT n) { - FDK_ASSERT(!(((INT)x)&(ALIGNMENT_DEFAULT-1))); - asm("mov r2, #1;\n" /* r2(m) = 1; */ - "sub r3, %1, #1;\n" /* r3 = n-1; */ - "mov r4, #0;\n" /* r4(j) = 0; */ - -"scramble_m_loop%=:\n" /* { */ - "mov r5, %1;\n" /* r5(k) = 1; */ - -"scramble_k_loop%=:\n" /* { */ - "mov r5, r5, lsr #1;\n" /* k >>= 1; */ - "eor r4, r4, r5;\n" /* j ^=k; */ - "ands r10, r4, r5;\n" /* r10 = r4 & r5; */ - "beq scramble_k_loop%=;\n" /* } while (r10 == 0); */ - - "cmp r4, r2;\n" /* if (r4 < r2) break; */ - "bcc scramble_m_loop_end%=;\n" - -#ifdef USE_LDRD_STRD - "mov r5, r2, lsl #3;\n" /* m(r5) = r2*4*2 */ - "ldrd r10, [%0, r5];\n" /* r10 = x[r5], x7 = x[r5+1] */ - "mov r6, r4, lsl #3;\n" /* j(r6) = r4*4*2 */ - "ldrd r8, [%0, r6];\n" /* r8 = x[r6], r9 = x[r6+1]; */ - "strd r10, [%0, r6];\n" /* x[r6,r6+1] = r10,r11; */ - "strd r8, [%0, r5];\n" /* x[r5,r5+1] = r8,r9; */ -#else - "mov r5, r2, lsl #3;\n" /* m(r5) = r2*4*2 */ - "ldr r10, [%0, r5];\n" - "mov r6, r4, lsl #3;\n" /* j(r6) = r4*4*2 */ - "ldr r11, [%0, r6];\n" - - "str r10, [%0, r6];\n" - "str r11, [%0, r5];\n" - - "add r5, r5, #4;" - "ldr r10, [%0, r5];\n" - "add r6, r6, #4;" - "ldr r11, [%0, r6];\n" - "str r10, [%0, r6];\n" - "str r11, [%0, r5];\n" -#endif -"scramble_m_loop_end%=:\n" - "add r2, r2, #1;\n" /* r2++; */ - "cmp r2, r3;\n" - "bcc scramble_m_loop%=;\n" /* } while (r2(m) < r3(n-1)); */ - : - : "r"(x), "r"(n) -#ifdef USE_LDRD_STRD - : "r2","r3", "r4","r5", "r10","r11", "r8","r9", "r6" ); -#else - : "r2","r3", "r4","r5", "r10","r11", "r6" ); -#endif -} -#else -/* Force C implementation if no assembler version available. */ -#undef FUNCTION_scramble -#endif /* Toolchain selection. */ - -#endif /* defined(FUNCTION_scramble) */ diff --git a/libFDK/include/autocorr2nd.h b/libFDK/include/autocorr2nd.h deleted file mode 100644 index c2e9595..0000000 --- a/libFDK/include/autocorr2nd.h +++ /dev/null @@ -1,128 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools *********************** - - Author(s): M. Lohwasser - Description: fixed point abs definitions - -******************************************************************************/ - -#ifndef _AUTOCORR_2ND_H -#define _AUTOCORR_2ND_H - - - -#include "common_fix.h" - -typedef struct { - FIXP_DBL r00r; - FIXP_DBL r11r; - FIXP_DBL r22r; - FIXP_DBL r01r; - FIXP_DBL r02r; - FIXP_DBL r12r; - FIXP_DBL r01i; - FIXP_DBL r02i; - FIXP_DBL r12i; - FIXP_DBL det; - int det_scale; -} ACORR_COEFS; - -#define LPC_ORDER 2 - - -INT -autoCorr2nd_real (ACORR_COEFS *ac, /*!< Pointer to autocorrelation coeffs */ - const FIXP_DBL *reBuffer, /*!< Pointer to to real part of spectrum */ - const int len /*!< Number of qmf slots */ - ); -INT -autoCorr2nd_cplx (ACORR_COEFS *ac, /*!< Pointer to autocorrelation coeffs */ - const FIXP_DBL *reBuffer, /*!< Pointer to to real part of spectrum */ - const FIXP_DBL *imBuffer, /*!< Pointer to imag part of spectrum */ - const int len /*!< Number of qmf slots */ - ); - - -#endif /* _AUTOCORR_2ND_H */ diff --git a/libFDK/include/clz.h b/libFDK/include/clz.h deleted file mode 100644 index fc612e1..0000000 --- a/libFDK/include/clz.h +++ /dev/null @@ -1,192 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): Marc Gayer - Description: fixed point intrinsics - -******************************************************************************/ - -#if !defined(__CLZ_H__) -#define __CLZ_H__ - -#include "FDK_archdef.h" -#include "machine_type.h" - -#if defined(__arm__) -#include "arm/clz_arm.h" - -#elif defined(__mips__) /* cppp replaced: elif */ -#include "mips/clz_mips.h" - -#elif defined(__x86__) /* cppp replaced: elif */ -#include "x86/clz_x86.h" - -#endif /* all cores */ - - -/************************************************************************* - ************************************************************************* - Software fallbacks for missing functions. -************************************************************************** -**************************************************************************/ - -#if !defined(FUNCTION_fixnormz_S) -#ifdef FUNCTION_fixnormz_D -inline INT fixnormz_S (SHORT a) -{ - return fixnormz_D((INT)(a)); -} -#else -inline INT fixnormz_S (SHORT a) -{ - int leadingBits = 0; - a = ~a; - while(a & 0x8000) { - leadingBits++; - a <<= 1; - } - - return (leadingBits); -} -#endif -#endif - -#if !defined(FUNCTION_fixnormz_D) -inline INT fixnormz_D (LONG a) -{ - INT leadingBits = 0; - a = ~a; - while(a & 0x80000000) { - leadingBits++; - a <<= 1; - } - - return (leadingBits); -} -#endif - - -/***************************************************************************** - - functionname: fixnorm_D - description: Count leading ones or zeros of operand val for dfract/LONG INT values. - Return this value minus 1. Return 0 if operand==0. -*****************************************************************************/ -#if !defined(FUNCTION_fixnorm_S) -#ifdef FUNCTION_fixnorm_D -inline INT fixnorm_S(FIXP_SGL val) -{ - return fixnorm_D((INT)(val)); -} -#else -inline INT fixnorm_S(FIXP_SGL val) -{ - INT leadingBits = 0; - if ( val != (FIXP_SGL)0 ) { - if ( val < (FIXP_SGL)0 ) { - val = ~val; - } - leadingBits = fixnormz_S(val) - 1; - } - return (leadingBits); -} -#endif -#endif - -#if !defined(FUNCTION_fixnorm_D) -inline INT fixnorm_D(FIXP_DBL val) -{ - INT leadingBits = 0; - if ( val != (FIXP_DBL)0 ) { - if ( val < (FIXP_DBL)0 ) { - val = ~val; - } - leadingBits = fixnormz_D(val) - 1; - } - return (leadingBits); -} -#endif - -#endif /* __CLZ_H__ */ diff --git a/libFDK/include/common_fix.h b/libFDK/include/common_fix.h deleted file mode 100644 index 79c87ac..0000000 --- a/libFDK/include/common_fix.h +++ /dev/null @@ -1,378 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): M. Lohwasser, M. Gayer - Description: Flexible fixpoint library configuration - -******************************************************************************/ - -#ifndef _COMMON_FIX_H -#define _COMMON_FIX_H - -#include "FDK_archdef.h" -#include "machine_type.h" - -/* ***** Start of former fix.h ****** */ - -/* Configure fractional or integer arithmetic */ - #define FIX_FRACT 0 /* Define this to "1" to use fractional arithmetic simulation in class fract instead of integer arithmetic */ - /* 1 for debug with extra runtime overflow checking. */ - -/* Define bit sizes of integer fixpoint fractional data types */ -#define FRACT_BITS 16 /* single precision */ -#define DFRACT_BITS 32 /* double precision */ -#define ACCU_BITS 40 /* double precision plus overflow */ - -/* Fixpoint equivalent type fot PCM audio time domain data. */ -#if defined(SAMPLE_BITS) -#if (SAMPLE_BITS == DFRACT_BITS) - #define FIXP_PCM FIXP_DBL - #define FX_PCM2FX_DBL(x) ((FIXP_DBL)(x)) - #define FX_DBL2FX_PCM(x) ((INT_PCM)(x)) -#elif (SAMPLE_BITS == FRACT_BITS) - #define FIXP_PCM FIXP_SGL - #define FX_PCM2FX_DBL(x) FX_SGL2FX_DBL((FIXP_SGL)(x)) - #define FX_DBL2FX_PCM(x) FX_DBL2FX_SGL(x) -#else - #error SAMPLE_BITS different from FRACT_BITS or DFRACT_BITS not implemented! -#endif -#endif - -/* ****** End of former fix.h ****** */ - -#define SGL_MASK ((1UL<> (DFRACT_BITS-FRACT_BITS-1)) + 1) > (((LONG)1< 0) ) ? \ - (FIXP_SGL)(SHORT)(((LONG)1<<(FRACT_BITS-1))-1):(FIXP_SGL)(SHORT)((((val) >> (DFRACT_BITS-FRACT_BITS-1)) + 1) >> 1) ) - - - -#define shouldBeUnion union /* unions are possible */ - - typedef SHORT FIXP_SGL; - typedef LONG FIXP_DBL; - -/* macros for compile-time conversion of constant float values to fixedpoint */ -#define FL2FXCONST_SPC FL2FXCONST_DBL - -#define MINVAL_DBL_CONST MINVAL_DBL -#define MINVAL_SGL_CONST MINVAL_SGL - -#define FL2FXCONST_SGL(val) \ -(FIXP_SGL)( ( (val) >= 0) ? \ -((( (double)(val) * (FRACT_FIX_SCALE) + 0.5 ) >= (double)(MAXVAL_SGL) ) ? (SHORT)(MAXVAL_SGL) : (SHORT)( (double)(val) * (double)(FRACT_FIX_SCALE) + 0.5)) : \ -((( (double)(val) * (FRACT_FIX_SCALE) - 0.5) <= (double)(MINVAL_SGL_CONST) ) ? (SHORT)(MINVAL_SGL_CONST) : (SHORT)( (double)(val) * (double)(FRACT_FIX_SCALE) - 0.5)) ) - -#define FL2FXCONST_DBL(val) \ -(FIXP_DBL)( ( (val) >= 0) ? \ -((( (double)(val) * (DFRACT_FIX_SCALE) + 0.5 ) >= (double)(MAXVAL_DBL) ) ? (LONG)(MAXVAL_DBL) : (LONG)( (double)(val) * (double)(DFRACT_FIX_SCALE) + 0.5)) : \ -((( (double)(val) * (DFRACT_FIX_SCALE) - 0.5) <= (double)(MINVAL_DBL_CONST) ) ? (LONG)(MINVAL_DBL_CONST) : (LONG)( (double)(val) * (double)(DFRACT_FIX_SCALE) - 0.5)) ) - -/* macros for runtime conversion of float values to integer fixedpoint. NO OVERFLOW CHECK!!! */ -#define FL2FX_SPC FL2FX_DBL -#define FL2FX_SGL(val) ( (val)>0.0f ? (SHORT)( (val)*(float)(FRACT_FIX_SCALE)+0.5f ) : (SHORT)( (val)*(float)(FRACT_FIX_SCALE)-0.5f ) ) -#define FL2FX_DBL(val) ( (val)>0.0f ? (LONG)( (val)*(float)(DFRACT_FIX_SCALE)+0.5f ) : (LONG)( (val)*(float)(DFRACT_FIX_SCALE)-0.5f ) ) - -/* macros for runtime conversion of fixedpoint values to other fixedpoint. NO ROUNDING!!! */ -#define FX_ACC2FX_SGL(val) ((FIXP_SGL)((val)>>(ACCU_BITS-FRACT_BITS))) -#define FX_ACC2FX_DBL(val) ((FIXP_DBL)((val)>>(ACCU_BITS-DFRACT_BITS))) -#define FX_SGL2FX_ACC(val) ((FIXP_ACC)((LONG)(val)<<(ACCU_BITS-FRACT_BITS))) -#define FX_SGL2FX_DBL(val) ((FIXP_DBL)((LONG)(val)<<(DFRACT_BITS-FRACT_BITS))) -#define FX_DBL2FX_SGL(val) ((FIXP_SGL)((val)>>(DFRACT_BITS-FRACT_BITS))) - -/* ############################################################# */ - -/* macros for runtime conversion of integer fixedpoint values to float. */ -/* This is just for temporary use and should not be required in a final version! */ - -/* #define FX_DBL2FL(val) ((float)(pow(2.,-31.)*(float)val)) */ /* version #1 */ -#define FX_DBL2FL(val) ((float)((double)(val)/(double)DFRACT_FIX_SCALE)) /* version #2 - identical to class dfract cast from dfract to float */ - -/* ############################################################# */ -#include "fixmul.h" - -FDK_INLINE LONG fMult(SHORT a, SHORT b) { return fixmul_SS(a, b); } -FDK_INLINE LONG fMult(SHORT a, LONG b) { return fixmul_SD(a, b); } -FDK_INLINE LONG fMult(LONG a, SHORT b) { return fixmul_DS(a, b); } -FDK_INLINE LONG fMult(LONG a, LONG b) { return fixmul_DD(a, b); } -FDK_INLINE LONG fPow2(LONG a) { return fixpow2_D(a); } -FDK_INLINE LONG fPow2(SHORT a) { return fixpow2_S(a); } - -FDK_INLINE INT fMultI(LONG a, SHORT b) { return ( (INT)(((1<<(FRACT_BITS-2)) + - fixmuldiv2_DD(a,((INT)b<>(FRACT_BITS-1)) ); } - -FDK_INLINE INT fMultIfloor(LONG a, INT b) { return ( (INT)((1 + - fixmuldiv2_DD(a,(b<> (FRACT_BITS-1)) ); } - -FDK_INLINE INT fMultIceil(LONG a, INT b) { return ( (INT)(((INT)0x7fff + - fixmuldiv2_DD(a,(b<> (FRACT_BITS-1)) ); } - -FDK_INLINE LONG fMultDiv2(SHORT a, SHORT b) { return fixmuldiv2_SS(a, b); } -FDK_INLINE LONG fMultDiv2(SHORT a, LONG b) { return fixmuldiv2_SD(a, b); } -FDK_INLINE LONG fMultDiv2(LONG a, SHORT b) { return fixmuldiv2_DS(a, b); } -FDK_INLINE LONG fMultDiv2(LONG a, LONG b) { return fixmuldiv2_DD(a, b); } -FDK_INLINE LONG fPow2Div2(LONG a) { return fixpow2div2_D(a); } -FDK_INLINE LONG fPow2Div2(SHORT a) { return fixpow2div2_S(a); } - -FDK_INLINE LONG fMultDiv2BitExact(LONG a, LONG b) { return fixmuldiv2BitExact_DD(a, b); } -FDK_INLINE LONG fMultDiv2BitExact(SHORT a, LONG b) { return fixmuldiv2BitExact_SD(a, b); } -FDK_INLINE LONG fMultDiv2BitExact(LONG a, SHORT b) { return fixmuldiv2BitExact_DS(a, b); } -FDK_INLINE LONG fMultBitExact(LONG a, LONG b) { return fixmulBitExact_DD(a, b); } -FDK_INLINE LONG fMultBitExact(SHORT a, LONG b) { return fixmulBitExact_SD(a, b); } -FDK_INLINE LONG fMultBitExact(LONG a, SHORT b) { return fixmulBitExact_DS(a, b); } - -/* ******************************************************************************** */ -#include "abs.h" - -FDK_INLINE FIXP_DBL fAbs(FIXP_DBL x) - { return fixabs_D(x); } -FDK_INLINE FIXP_SGL fAbs(FIXP_SGL x) - { return fixabs_S(x); } - -/* workaround for TI C6x compiler but not for TI ARM9E compiler */ -#if (!defined(__TI_COMPILER_VERSION__) || defined(__TI_TMS470_V5__)) && !defined(__x86_64__) -FDK_INLINE INT fAbs(INT x) - { return fixabs_I(x); } -#endif - -/* ******************************************************************************** */ - -#include "clz.h" - -FDK_INLINE INT fNormz(FIXP_DBL x) - { return fixnormz_D(x); } -FDK_INLINE INT fNormz(FIXP_SGL x) - { return fixnormz_S(x); } -FDK_INLINE INT fNorm(FIXP_DBL x) - { return fixnorm_D(x); } -FDK_INLINE INT fNorm(FIXP_SGL x) - { return fixnorm_S(x); } - - -/* ******************************************************************************** */ -/* ******************************************************************************** */ -/* ******************************************************************************** */ - -#include "clz.h" -#define fixp_abs(x) fAbs(x) -#define fixMin(a,b) fMin(a,b) -#define fixMax(a,b) fMax(a,b) -#define CntLeadingZeros(x) fixnormz_D(x) -#define CountLeadingBits(x) fixnorm_D(x) - -#include "fixmadd.h" - -/* y = (x+0.5*a*b) */ -FDK_INLINE FIXP_DBL fMultAddDiv2(FIXP_DBL x, FIXP_DBL a, FIXP_DBL b) - { return fixmadddiv2_DD(x, a, b); } -FDK_INLINE FIXP_DBL fMultAddDiv2(FIXP_DBL x, FIXP_SGL a, FIXP_DBL b) - { return fixmadddiv2_SD(x, a, b); } -FDK_INLINE FIXP_DBL fMultAddDiv2(FIXP_DBL x, FIXP_DBL a, FIXP_SGL b) - { return fixmadddiv2_DS(x, a, b); } -FDK_INLINE FIXP_DBL fMultAddDiv2(FIXP_DBL x, FIXP_SGL a, FIXP_SGL b) - { return fixmadddiv2_SS(x, a, b); } - -FDK_INLINE FIXP_DBL fPow2AddDiv2(FIXP_DBL x, FIXP_DBL a) - { return fixpadddiv2_D(x, a); } -FDK_INLINE FIXP_DBL fPow2AddDiv2(FIXP_DBL x, FIXP_SGL a) - { return fixpadddiv2_S(x, a); } - - -/* y = 2*(x+0.5*a*b) = (2x+a*b) */ -FDK_INLINE FIXP_DBL fMultAdd(FIXP_DBL x, FIXP_DBL a, FIXP_DBL b) - { return fixmadd_DD(x, a, b); } -inline FIXP_DBL fMultAdd(FIXP_DBL x, FIXP_SGL a, FIXP_DBL b) - { return fixmadd_SD(x, a, b); } -inline FIXP_DBL fMultAdd(FIXP_DBL x, FIXP_DBL a, FIXP_SGL b) - { return fixmadd_DS(x, a, b); } -inline FIXP_DBL fMultAdd(FIXP_DBL x, FIXP_SGL a, FIXP_SGL b) - { return fixmadd_SS(x, a, b); } - -inline FIXP_DBL fPow2Add(FIXP_DBL x, FIXP_DBL a) - { return fixpadd_D(x, a); } -inline FIXP_DBL fPow2Add(FIXP_DBL x, FIXP_SGL a) - { return fixpadd_S(x, a); } - - -/* y = (x-0.5*a*b) */ -inline FIXP_DBL fMultSubDiv2(FIXP_DBL x, FIXP_DBL a, FIXP_DBL b) - { return fixmsubdiv2_DD(x, a, b); } -inline FIXP_DBL fMultSubDiv2(FIXP_DBL x, FIXP_SGL a, FIXP_DBL b) - { return fixmsubdiv2_SD(x, a, b); } -inline FIXP_DBL fMultSubDiv2(FIXP_DBL x, FIXP_DBL a, FIXP_SGL b) - { return fixmsubdiv2_DS(x, a, b); } -inline FIXP_DBL fMultSubDiv2(FIXP_DBL x, FIXP_SGL a, FIXP_SGL b) - { return fixmsubdiv2_SS(x, a, b); } - -/* y = 2*(x-0.5*a*b) = (2*x-a*b) */ -FDK_INLINE FIXP_DBL fMultSub(FIXP_DBL x, FIXP_DBL a, FIXP_DBL b) - { return fixmsub_DD(x, a, b); } -inline FIXP_DBL fMultSub(FIXP_DBL x, FIXP_SGL a, FIXP_DBL b) - { return fixmsub_SD(x, a, b); } -inline FIXP_DBL fMultSub(FIXP_DBL x, FIXP_DBL a, FIXP_SGL b) - { return fixmsub_DS(x, a, b); } -inline FIXP_DBL fMultSub(FIXP_DBL x, FIXP_SGL a, FIXP_SGL b) - { return fixmsub_SS(x, a, b); } - -FDK_INLINE FIXP_DBL fMultAddDiv2BitExact(FIXP_DBL x, FIXP_DBL a, FIXP_DBL b) - { return fixmadddiv2BitExact_DD(x, a, b); } -FDK_INLINE FIXP_DBL fMultAddDiv2BitExact(FIXP_DBL x, FIXP_SGL a, FIXP_DBL b) - { return fixmadddiv2BitExact_SD(x, a, b); } -FDK_INLINE FIXP_DBL fMultAddDiv2BitExact(FIXP_DBL x, FIXP_DBL a, FIXP_SGL b) - { return fixmadddiv2BitExact_DS(x, a, b); } -FDK_INLINE FIXP_DBL fMultSubDiv2BitExact(FIXP_DBL x, FIXP_DBL a, FIXP_DBL b) - { return fixmsubdiv2BitExact_DD(x, a, b); } -FDK_INLINE FIXP_DBL fMultSubDiv2BitExact(FIXP_DBL x, FIXP_SGL a, FIXP_DBL b) - { return fixmsubdiv2BitExact_SD(x, a, b); } -FDK_INLINE FIXP_DBL fMultSubDiv2BitExact(FIXP_DBL x, FIXP_DBL a, FIXP_SGL b) - { return fixmsubdiv2BitExact_DS(x, a, b); } - -#include "fixminmax.h" - -FDK_INLINE FIXP_DBL fMin(FIXP_DBL a, FIXP_DBL b) - { return fixmin_D(a,b); } -FDK_INLINE FIXP_DBL fMax(FIXP_DBL a, FIXP_DBL b) - { return fixmax_D(a,b); } - -FDK_INLINE FIXP_SGL fMin(FIXP_SGL a, FIXP_SGL b) - { return fixmin_S(a,b); } -FDK_INLINE FIXP_SGL fMax(FIXP_SGL a, FIXP_SGL b) - { return fixmax_S(a,b); } - -/* workaround for TI C6x compiler but not for TI ARM9E */ -#if ((!defined(__TI_COMPILER_VERSION__) || defined(__TI_TMS470_V5__)) && !defined(__x86_64__)) || (FIX_FRACT == 1) -FDK_INLINE INT fMax(INT a, INT b) - { return fixmax_I(a,b); } -FDK_INLINE INT fMin(INT a, INT b) - { return fixmin_I(a,b); } -#endif - -inline UINT fMax(UINT a, UINT b) - { return fixmax_UI(a,b); } -inline UINT fMin(UINT a, UINT b) - { return fixmin_UI(a,b); } - -/* Complex data types */ -typedef shouldBeUnion { - /* vector representation for arithmetic */ - struct { - FIXP_SGL re; - FIXP_SGL im; - } v; - /* word representation for memory move */ - LONG w; -} FIXP_SPK; - -typedef shouldBeUnion { - /* vector representation for arithmetic */ - struct { - FIXP_DBL re; - FIXP_DBL im; - } v; - /* word representation for memory move */ - INT64 w; -} FIXP_DPK; - -#include "fixmul.h" -#include "fixmadd.h" -#include "cplx_mul.h" -#include "scale.h" -#include "fixpoint_math.h" - -#endif diff --git a/libFDK/include/cplx_mul.h b/libFDK/include/cplx_mul.h deleted file mode 100644 index 093ffa6..0000000 --- a/libFDK/include/cplx_mul.h +++ /dev/null @@ -1,269 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - -#include "common_fix.h" - -#if !defined(__CPLX_Mult_H__) -#define __CPLX_Mult_H__ - -#if defined(__CC_ARM) || defined(__arm__) || defined(_M_ARM) /* cppp replaced: elif */ -#include "arm/cplx_mul.h" - -#elif defined(__GNUC__) && defined(__mips__) /* cppp replaced: elif */ -#include "mips/cplx_mul.h" - -#endif /* #if defined all cores: bfin, arm, etc. */ - -/* ############################################################################# */ - -/* Fallback generic implementations */ - -#if !defined(FUNCTION_cplxMultDiv2_32x16X2) -#define FUNCTION_cplxMultDiv2_32x16X2 - -inline void cplxMultDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_SGL b_Re, - const FIXP_SGL b_Im) -{ - *c_Re = fMultDiv2(a_Re,b_Re) - fMultDiv2(a_Im,b_Im); - *c_Im = fMultDiv2(a_Re,b_Im) + fMultDiv2(a_Im,b_Re); -} -#endif - -#if !defined(FUNCTION_cplxMultDiv2_32x16) -#define FUNCTION_cplxMultDiv2_32x16 - -inline void cplxMultDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_SPK w ) -{ - cplxMultDiv2(c_Re, c_Im, a_Re, a_Im, w.v.re, w.v.im); -} -#endif - -#if !defined(FUNCTION_cplxMultAddDiv2_32x16X2) -#define FUNCTION_cplxMultAddDiv2_32x16X2 - -inline void cplxMultAddDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_SGL b_Re, - const FIXP_SGL b_Im) -{ - *c_Re += fMultDiv2(a_Re,b_Re) - fMultDiv2(a_Im,b_Im); - *c_Im += fMultDiv2(a_Re,b_Im) + fMultDiv2(a_Im,b_Re); -} -#endif - -#if !defined(FUNCTION_cplxMultSubDiv2_32x16X2) -#define FUNCTION_cplxMultSubDiv2_32x16X2 - -inline void cplxMultSubDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_SGL b_Re, - const FIXP_SGL b_Im) -{ - *c_Re -= fMultDiv2(a_Re,b_Re) - fMultDiv2(a_Im,b_Im); - *c_Im -= fMultDiv2(a_Re,b_Im) + fMultDiv2(a_Im,b_Re); -} -#endif - -#if !defined(FUNCTION_cplxMultDiv2_32x32X2) -#define FUNCTION_cplxMultDiv2_32x32X2 - -inline void cplxMultDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_DBL b_Re, - const FIXP_DBL b_Im) -{ - *c_Re = fMultDiv2(a_Re,b_Re) - fMultDiv2(a_Im,b_Im); - *c_Im = fMultDiv2(a_Re,b_Im) + fMultDiv2(a_Im,b_Re); -} -#endif - -#if !defined(FUNCTION_cplxMultDiv2_32x32) -#define FUNCTION_cplxMultDiv2_32x32 - -inline void cplxMultDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_DPK w) -{ - cplxMultDiv2(c_Re, c_Im, a_Re, a_Im, w.v.re, w.v.im); -} -#endif - -#if !defined(FUNCTION_cplxMultSubDiv2_32x32X2) -#define FUNCTION_cplxMultSubDiv2_32x32X2 - -inline void cplxMultSubDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_DBL b_Re, - const FIXP_DBL b_Im) -{ - *c_Re -= fMultDiv2(a_Re,b_Re) - fMultDiv2(a_Im,b_Im); - *c_Im -= fMultDiv2(a_Re,b_Im) + fMultDiv2(a_Im,b_Re); -} -#endif - -/* ############################################################################# */ - -#if !defined(FUNCTION_cplxMult_32x16X2) -#define FUNCTION_cplxMult_32x16X2 - -inline void cplxMult( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_SGL b_Re, - const FIXP_SGL b_Im) -{ - *c_Re = fMult(a_Re,b_Re) - fMult(a_Im,b_Im); - *c_Im = fMult(a_Re,b_Im) + fMult(a_Im,b_Re); -} -#endif - -#if !defined(FUNCTION_cplxMult_32x16) -#define FUNCTION_cplxMult_32x16 - -inline void cplxMult( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_SPK w ) -{ - cplxMult(c_Re, c_Im, a_Re, a_Im, w.v.re, w.v.im); -} -#endif - -#if !defined(FUNCTION_cplxMult_32x32X2) -#define FUNCTION_cplxMult_32x32X2 - -inline void cplxMult( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_DBL b_Re, - const FIXP_DBL b_Im) -{ - *c_Re = fMult(a_Re,b_Re) - fMult(a_Im,b_Im); - *c_Im = fMult(a_Re,b_Im) + fMult(a_Im,b_Re); -} -#endif - -#if !defined(FUNCTION_cplxMult_32x32) -#define FUNCTION_cplxMult_32x32 -inline void cplxMult( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - const FIXP_DBL a_Re, - const FIXP_DBL a_Im, - const FIXP_DPK w) -{ - cplxMult(c_Re, c_Im, a_Re, a_Im, w.v.re, w.v.im); -} -#endif - -/* ############################################################################# */ - -#endif /* __CPLX_Mult_H__ */ - diff --git a/libFDK/include/dct.h b/libFDK/include/dct.h deleted file mode 100644 index af1edd3..0000000 --- a/libFDK/include/dct.h +++ /dev/null @@ -1,147 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: Library functions to calculate standard DCTs. This will most - likely be replaced by hand-optimized functions for the specific - target processor. - -******************************************************************************/ - -#ifndef __dct_H -#define __dct_H - - - -#include "common_fix.h" - -/** - * \brief Calculate DCT type II of given length. The DCT IV is - * calculated by a complex FFT, with some pre and post twiddeling. - * A factor of sqrt(2/(N-1)) is NOT applied. - * \param pDat pointer to input/output data (in place processing). - * \param size size of pDat. - * \param pDat_e pointer to an integer containing the exponent of the data - * referenced by pDat. The exponent is updated accordingly. - */ -void dct_II(FIXP_DBL *pDat, FIXP_DBL *tmp, int size, int *pDat_e); - -/** - * \brief Calculate DCT type III of given length. The DCT IV is - * calculated by a complex FFT, with some pre and post twiddeling. - * Note that the factor 0.5 for the sum term x[0] is 1.0 instead of 0.5. - * A factor of sqrt(2/N) is NOT applied. - * \param pDat pointer to input/output data (in place processing). - * \param size size of pDat. - * \param pDat_e pointer to an integer containing the exponent of the data - * referenced by pDat. The exponent is updated accordingly. - */ -void dct_III(FIXP_DBL *pDat, FIXP_DBL *tmp, int size, int *pDat_e); - -/** - * \brief Calculate DCT type IV of given length. The DCT IV is - * calculated by a complex FFT, with some pre and post twiddeling. - * A factor of sqrt(2/N) is NOT applied. - * \param pDat pointer to input/output data (in place processing). - * \param size size of pDat. - * \param pDat_e pointer to an integer containing the exponent of the data - * referenced by pDat. The exponent is updated accordingly. - */ -void dct_IV(FIXP_DBL *pDat,int size, int *pDat_e); - -/** - * \brief Calculate DST type IV of given length. The DST IV is - * calculated by a complex FFT, with some pre and post twiddeling. - * A factor of sqrt(2/N) is NOT applied. - * \param pDat pointer to input/output data (in place processing). - * \param size size of pDat. - * \param pDat_e pointer to an integer containing the exponent of the data - * referenced by pDat. The exponent is updated accordingly. - */ -void dst_IV(FIXP_DBL *pDat,int size, int *pDat_e); - - - -#endif diff --git a/libFDK/include/fft.h b/libFDK/include/fft.h deleted file mode 100644 index 616f350..0000000 --- a/libFDK/include/fft.h +++ /dev/null @@ -1,253 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): Josef Hoepfl, DSP Solutions - Description: Fix point FFT - -******************************************************************************/ - -#ifndef __FFT_H__ -#define __FFT_H__ - -#include "common_fix.h" - -/** - * \brief Perform an inplace complex valued FFT of length 2^n - * - * \param length Length of the FFT to be calculated. - * \param pInput Input/Output data buffer. The input data must have at least 1 bit scale headroom. - * The values are interleaved, real/imag pairs. - * \param scalefactor Pointer to an INT, which contains the current scale of the input data, - * which is updated according to the FFT scale. - */ -void fft(int length, FIXP_DBL *pInput, INT *scalefactor); - -/** - * \brief Perform an inplace complex valued IFFT of length 2^n - * - * \param length Length of the FFT to be calculated. - * \param pInput Input/Output data buffer. The input data must have at least 1 bit scale headroom. - * The values are interleaved, real/imag pairs. - * \param scalefactor Pointer to an INT, which contains the current scale of the input data, - * which is updated according to the IFFT scale. - */ -void ifft(int length, FIXP_DBL *pInput, INT *scalefactor); - - -/* - * Frequently used and fixed short length FFTs. - */ - -LNK_SECTION_CODE_L1 -static void FORCEINLINE fft_4(FIXP_DBL *x) -{ - FIXP_DBL a00, a10, a20, a30, tmp0, tmp1; - - a00 = (x[0] + x[4])>>1; /* Re A + Re B */ - a10 = (x[2] + x[6])>>1; /* Re C + Re D */ - a20 = (x[1] + x[5])>>1; /* Im A + Im B */ - a30 = (x[3] + x[7])>>1; /* Im C + Im D */ - - x[0] = a00 + a10; /* Re A' = Re A + Re B + Re C + Re D */ - x[1] = a20 + a30; /* Im A' = Im A + Im B + Im C + Im D */ - - tmp0 = a00 - x[4]; /* Re A - Re B */ - tmp1 = a20 - x[5]; /* Im A - Im B */ - - x[4] = a00 - a10; /* Re C' = Re A + Re B - Re C - Re D */ - x[5] = a20 - a30; /* Im C' = Im A + Im B - Im C - Im D */ - - a10 = a10 - x[6]; /* Re C - Re D */ - a30 = a30 - x[7]; /* Im C - Im D */ - - x[2] = tmp0 + a30; /* Re B' = Re A - Re B + Im C - Im D */ - x[6] = tmp0 - a30; /* Re D' = Re A - Re B - Im C + Im D */ - x[3] = tmp1 - a10; /* Im B' = Im A - Im B - Re C + Re D */ - x[7] = tmp1 + a10; /* Im D' = Im A - Im B + Re C - Re D */ -} - -LNK_SECTION_CODE_L1 -static void FORCEINLINE fft_8(FIXP_DBL *x) -{ - #define W_PiFOURTH STC(0x5a82799a) - - FIXP_DBL a00, a10, a20, a30; - FIXP_DBL y[16]; - - a00 = (x[0] + x[8])>>1; - a10 = x[4] + x[12]; - a20 = (x[1] + x[9])>>1; - a30 = x[5] + x[13]; - - y[0] = a00 + (a10>>1); - y[4] = a00 - (a10>>1); - y[1] = a20 + (a30>>1); - y[5] = a20 - (a30>>1); - - a00 = a00 - x[8]; - a10 = (a10>>1) - x[12]; - a20 = a20 - x[9]; - a30 = (a30>>1) - x[13]; - - y[2] = a00 + a30; - y[6] = a00 - a30; - y[3] = a20 - a10; - y[7] = a20 + a10; - - a00 = (x[2] + x[10])>>1; - a10 = x[6] + x[14]; - a20 = (x[3] + x[11])>>1; - a30 = x[7] + x[15]; - - y[8] = a00 + (a10>>1); - y[12] = a00 - (a10>>1); - y[9] = a20 + (a30>>1); - y[13] = a20 - (a30>>1); - - a00 = a00 - x[10]; - a10 = (a10>>1) - x[14]; - a20 = a20 - x[11]; - a30 = (a30>>1) - x[15]; - - y[10] = a00 + a30; - y[14] = a00 - a30; - y[11] = a20 - a10; - y[15] = a20 + a10; - - FIXP_DBL vr, vi, ur, ui; - - ur = y[0]>>1; - ui = y[1]>>1; - vr = y[8]; - vi = y[9]; - x[0] = ur + (vr>>1); - x[1] = ui + (vi>>1); - x[8] = ur - (vr>>1); - x[9] = ui - (vi>>1); - - ur = y[4]>>1; - ui = y[5]>>1; - vi = y[12]; - vr = y[13]; - x[4] = ur + (vr>>1); - x[5] = ui - (vi>>1); - x[12] = ur - (vr>>1); - x[13] = ui + (vi>>1); - - ur = y[10]; - ui = y[11]; - vr = fMultDiv2(ui+ur,W_PiFOURTH); - vi = fMultDiv2(ui-ur,W_PiFOURTH); - ur = y[2]; - ui = y[3]; - x[2] = (ur>>1) + vr; - x[3] = (ui>>1) + vi; - x[10] = (ur>>1) - vr; - x[11] = (ui>>1) - vi; - - ur = y[14]; - ui = y[15]; - vr = fMultDiv2(ui-ur,W_PiFOURTH); - vi = fMultDiv2(ui+ur,W_PiFOURTH); - ur = y[6]; - ui = y[7]; - x[6] = (ur>>1) + vr; - x[7] = (ui>>1) - vi; - x[14] = (ur>>1) - vr; - x[15] = (ui>>1) + vi; -} - -/** - * \brief FFT of fixed length 16 - */ -inline void fft_16(FIXP_DBL *x); - -/** - * \brief FFT of fixed length 32 - */ -inline void fft_32(FIXP_DBL *x); - - -#endif diff --git a/libFDK/include/fft_rad2.h b/libFDK/include/fft_rad2.h deleted file mode 100644 index 90d14da..0000000 --- a/libFDK/include/fft_rad2.h +++ /dev/null @@ -1,134 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): M. Lohwasser, M. Gayer - Description: - -******************************************************************************/ - -#ifndef _FFT_RAD2_H -#define _FFT_RAD2_H - - -#include "common_fix.h" - -/** - * \brief Performe an inplace complex valued FFT of 2^n length - * - * \param x Input/Output data buffer. The input data must have at least 1 bit scale headroom. - * The values are interleaved, real/imag pairs. - * \param ldn log2 of FFT length - * \param trigdata Pointer to a sinetable of a length of at least (2^ldn)/2 sine values. - * \param trigDataSize length of the sinetable "trigdata". - */ -void dit_fft(FIXP_DBL *x, const INT ldn, const FIXP_STP *trigdata, const INT trigDataSize) ; - -/** - * \brief Performe an inplace complex valued inverse FFT of 2^n length - * - * \param x Input/Output data buffer. The input data must have at least 1 bit scale headroom. - * The values are interleaved, real/imag pairs. - * \param ldn log2 of FFT length - * \param trigdata Pointer to a sinetable of a length of at least (2^ldn)/2 sine values. - * \param trigDataSize length of the sinetable "trigdata". - */ -void dit_ifft(FIXP_DBL *x, const INT ldn, const FIXP_STP *trigdata, const INT trigDataSize) ; - -/* Rest of the world. */ - -#define SCALEFACTOR2048 10 -#define SCALEFACTOR1024 9 -#define SCALEFACTOR512 8 -#define SCALEFACTOR256 7 -#define SCALEFACTOR128 6 -#define SCALEFACTOR64 5 -#define SCALEFACTOR32 4 -#define SCALEFACTOR16 3 -#define SCALEFACTOR8 2 -#define SCALEFACTOR4 1 -#define SCALEFACTOR2 1 - -#endif /* _FFT_RAD2_H */ - diff --git a/libFDK/include/fixmadd.h b/libFDK/include/fixmadd.h deleted file mode 100644 index 851b7a2..0000000 --- a/libFDK/include/fixmadd.h +++ /dev/null @@ -1,306 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): M. Lohwasser, M. Gayer - Description: fixed point intrinsics - -******************************************************************************/ - -#if !defined(__FIXMADD_H__) -#define __FIXMADD_H__ - -#include "FDK_archdef.h" -#include "machine_type.h" -#include "fixmul.h" - -#if defined(__arm__) -#include "arm/fixmadd_arm.h" - -#elif defined(__mips__) /* cppp replaced: elif */ -#include "mips/fixmadd_mips.h" - -#endif /* all cores */ - -/************************************************************************* - ************************************************************************* - Software fallbacks for missing functions. -************************************************************************** -**************************************************************************/ - -/* Divide by two versions. */ - -#if !defined(FUNCTION_fixmadddiv2_DD) -inline FIXP_DBL fixmadddiv2_DD (FIXP_DBL x, const FIXP_DBL a, const FIXP_DBL b) - { return (x + fMultDiv2 (a, b)); } -#endif - -#if !defined(FUNCTION_fixmadddiv2_SD) -inline FIXP_DBL fixmadddiv2_SD (FIXP_DBL x, const FIXP_SGL a, const FIXP_DBL b) { -#ifdef FUNCTION_fixmadddiv2_DS - return fixmadddiv2_DS(x, b, a); -#else - return fixmadddiv2_DD(x, FX_SGL2FX_DBL(a), b); -#endif -} -#endif - -#if !defined(FUNCTION_fixmadddiv2_DS) -inline FIXP_DBL fixmadddiv2_DS (FIXP_DBL x, const FIXP_DBL a, const FIXP_SGL b) { -#ifdef FUNCTION_fixmadddiv2_SD - return fixmadddiv2_SD(x, b, a); -#else - return fixmadddiv2_DD(x, a, FX_SGL2FX_DBL(b)); -#endif -} -#endif - -#if !defined(FUNCTION_fixmadddiv2_SS) -inline FIXP_DBL fixmadddiv2_SS (FIXP_DBL x, const FIXP_SGL a, const FIXP_SGL b) - { return x + fMultDiv2(a,b); } -#endif - -#if !defined(FUNCTION_fixmsubdiv2_DD) -inline FIXP_DBL fixmsubdiv2_DD (FIXP_DBL x, const FIXP_DBL a, const FIXP_DBL b) - { return (x - fMultDiv2 (a, b)); } -#endif - -#if !defined(FUNCTION_fixmsubdiv2_SD) -inline FIXP_DBL fixmsubdiv2_SD (FIXP_DBL x, const FIXP_SGL a, const FIXP_DBL b) { -#ifdef FUNCTION_fixmsubdiv2_DS - return fixmsubdiv2_DS(x, b, a); -#else - return fixmsubdiv2_DD(x, FX_SGL2FX_DBL(a), b); -#endif -} -#endif - -#if !defined(FUNCTION_fixmsubdiv2_DS) -inline FIXP_DBL fixmsubdiv2_DS (FIXP_DBL x, const FIXP_DBL a, const FIXP_SGL b) { -#ifdef FUNCTION_fixmsubdiv2_SD - return fixmsubdiv2_SD(x, b, a); -#else - return fixmsubdiv2_DD(x, a, FX_SGL2FX_DBL(b)); -#endif -} -#endif - -#if !defined(FUNCTION_fixmsubdiv2_SS) -inline FIXP_DBL fixmsubdiv2_SS (FIXP_DBL x, const FIXP_SGL a, const FIXP_SGL b) - { return x - fMultDiv2(a,b); } -#endif - - -#if !defined(FUNCTION_fixmadddiv2BitExact_DD) -#define FUNCTION_fixmadddiv2BitExact_DD -inline FIXP_DBL fixmadddiv2BitExact_DD (FIXP_DBL x, const FIXP_DBL a, const FIXP_DBL b) { - return x + fMultDiv2BitExact(a, b); -} -#endif -#if !defined(FUNCTION_fixmadddiv2BitExact_SD) -#define FUNCTION_fixmadddiv2BitExact_SD -inline FIXP_DBL fixmadddiv2BitExact_SD (FIXP_DBL x, const FIXP_SGL a, const FIXP_DBL b) { -#ifdef FUNCTION_fixmadddiv2BitExact_DS - return fixmadddiv2BitExact_DS(x, b, a); -#else - return x + fMultDiv2BitExact(a, b); -#endif -} -#endif -#if !defined(FUNCTION_fixmadddiv2BitExact_DS) -#define FUNCTION_fixmadddiv2BitExact_DS -inline FIXP_DBL fixmadddiv2BitExact_DS (FIXP_DBL x, const FIXP_DBL a, const FIXP_SGL b) { -#ifdef FUNCTION_fixmadddiv2BitExact_SD - return fixmadddiv2BitExact_SD(x, b, a); -#else - return x + fMultDiv2BitExact(a, b); -#endif -} -#endif - -#if !defined(FUNCTION_fixmsubdiv2BitExact_DD) -#define FUNCTION_fixmsubdiv2BitExact_DD -inline FIXP_DBL fixmsubdiv2BitExact_DD (FIXP_DBL x, const FIXP_DBL a, const FIXP_DBL b) { - return x - fMultDiv2BitExact(a, b); -} -#endif -#if !defined(FUNCTION_fixmsubdiv2BitExact_SD) -#define FUNCTION_fixmsubdiv2BitExact_SD -inline FIXP_DBL fixmsubdiv2BitExact_SD (FIXP_DBL x, const FIXP_SGL a, const FIXP_DBL b) { -#ifdef FUNCTION_fixmsubdiv2BitExact_DS - return fixmsubdiv2BitExact_DS(x, b, a); -#else - return x - fMultDiv2BitExact(a, b); -#endif -} -#endif -#if !defined(FUNCTION_fixmsubdiv2BitExact_DS) -#define FUNCTION_fixmsubdiv2BitExact_DS -inline FIXP_DBL fixmsubdiv2BitExact_DS (FIXP_DBL x, const FIXP_DBL a, const FIXP_SGL b) { -#ifdef FUNCTION_fixmsubdiv2BitExact_SD - return fixmsubdiv2BitExact_SD(x, b, a); -#else - return x - fMultDiv2BitExact(a, b); -#endif -} -#endif - -/* Normal versions */ - -#if !defined(FUNCTION_fixmadd_DD) -inline FIXP_DBL fixmadd_DD (FIXP_DBL x, const FIXP_DBL a, const FIXP_DBL b) - { return fixmadddiv2_DD(x,a,b)<<1; } -#endif -#if !defined(FUNCTION_fixmadd_SD) -inline FIXP_DBL fixmadd_SD (FIXP_DBL x, const FIXP_SGL a, const FIXP_DBL b) { -#ifdef FUNCTION_fixmadd_DS - return fixmadd_DS(x, b, a); -#else - return fixmadd_DD(x, FX_SGL2FX_DBL(a), b); -#endif -} -#endif -#if !defined(FUNCTION_fixmadd_DS) -inline FIXP_DBL fixmadd_DS (FIXP_DBL x, const FIXP_DBL a, const FIXP_SGL b) { -#ifdef FUNCTION_fixmadd_SD - return fixmadd_SD(x, b, a); -#else - return fixmadd_DD(x, a, FX_SGL2FX_DBL(b)); -#endif -} -#endif -#if !defined(FUNCTION_fixmadd_SS) -inline FIXP_DBL fixmadd_SS (FIXP_DBL x, const FIXP_SGL a, const FIXP_SGL b) - { return (x + fMultDiv2(a,b))<<1; } -#endif - -#if !defined(FUNCTION_fixmsub_DD) -inline FIXP_DBL fixmsub_DD (FIXP_DBL x, const FIXP_DBL a, const FIXP_DBL b) - { return fixmsubdiv2_DD(x,a,b)<<1; } -#endif -#if !defined(FUNCTION_fixmsub_SD) -inline FIXP_DBL fixmsub_SD (FIXP_DBL x, const FIXP_SGL a, const FIXP_DBL b) { -#ifdef FUNCTION_fixmsub_DS - return fixmsub_DS(x, b, a); -#else - return fixmsub_DD(x, FX_SGL2FX_DBL(a), b); -#endif -} -#endif -#if !defined(FUNCTION_fixmsub_DS) -inline FIXP_DBL fixmsub_DS (FIXP_DBL x, const FIXP_DBL a, const FIXP_SGL b) { -#ifdef FUNCTION_fixmsub_SD - return fixmsub_SD(x, b, a); -#else - return fixmsub_DD(x, a, FX_SGL2FX_DBL(b)); -#endif -} -#endif -#if !defined(FUNCTION_fixmsub_SS) -inline FIXP_DBL fixmsub_SS (FIXP_DBL x, const FIXP_SGL a, const FIXP_SGL b) - { return (x - fMultDiv2(a,b))<<1; } -#endif - -#if !defined(FUNCTION_fixpow2adddiv2_D) -inline INT fixpadddiv2_D (FIXP_DBL x, const FIXP_DBL a) - { return (x + fPow2Div2(a)); } -#endif -#if !defined(FUNCTION_fixpow2add_D) -inline INT fixpadd_D (FIXP_DBL x, const FIXP_DBL a) - { return (x + fPow2(a)); } -#endif - -#if !defined(FUNCTION_fixpow2adddiv2_S) -inline INT fixpadddiv2_S (FIXP_DBL x, const FIXP_SGL a) - { return (x + fPow2Div2(a)); } -#endif -#if !defined(FUNCTION_fixpow2add_S) -inline INT fixpadd_S (FIXP_DBL x, const FIXP_SGL a) - { return (x + fPow2(a)); } -#endif - - - -#endif // __FIXMADD_H__ - diff --git a/libFDK/include/fixminmax.h b/libFDK/include/fixminmax.h deleted file mode 100644 index 5a52824..0000000 --- a/libFDK/include/fixminmax.h +++ /dev/null @@ -1,120 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): M. Lohwasser, M. Gayer - Description: min/max inline functions and defines - -******************************************************************************/ - -#ifndef FIXMINMAX__H -#define FIXMINMAX__H - -#include "FDK_archdef.h" -#include "machine_type.h" - -/* Inline Function to determine the smaller/bigger value of two values with same type. */ - - -template inline T fixmin (T a, T b) -{ - return (a < b ? a : b); -} - -template inline T fixmax (T a, T b) -{ - return (a > b ? a : b); -} - -#define fixmax_D(a,b) fixmax(a,b) -#define fixmin_D(a,b) fixmin(a,b) -#define fixmax_S(a,b) fixmax(a,b) -#define fixmin_S(a,b) fixmin(a,b) -#define fixmax_I(a,b) fixmax(a,b) -#define fixmin_I(a,b) fixmin(a,b) -#define fixmax_UI(a,b) fixmax(a,b) -#define fixmin_UI(a,b) fixmin(a,b) - - -#endif diff --git a/libFDK/include/fixmul.h b/libFDK/include/fixmul.h deleted file mode 100644 index ea4bc6c..0000000 --- a/libFDK/include/fixmul.h +++ /dev/null @@ -1,286 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): Stefan Gewinner - Description: fixed point multiplication - -******************************************************************************/ - -#if !defined(__FIXMUL_H__) -#define __FIXMUL_H__ - -#include "FDK_archdef.h" -#include "machine_type.h" - - -#if defined(__arm__) -#include "arm/fixmul_arm.h" - -#elif defined(__mips__) /* cppp replaced: elif */ -#include "mips/fixmul_mips.h" - -#elif defined(__x86__) /* cppp replaced: elif */ -#include "x86/fixmul_x86.h" - -#endif /* all cores */ - -/************************************************************************* - ************************************************************************* - Software fallbacks for missing functions -************************************************************************** -**************************************************************************/ - -#if !defined(FUNCTION_fixmuldiv2_DD) -#define FUNCTION_fixmuldiv2_DD -#if defined(_MSC_VER) || defined(__CC_ARM) || defined(__ANALOG_EXTENSIONS__) || defined(__TI_COMPILER_VERSION__) -#pragma message ("Extremely slow implementation of fixmuldiv2_DD !!") -#else -#warning Extremely slow implementation of fixmuldiv2_DD !! -#endif -inline LONG fixmuldiv2_DD (const LONG a, const LONG b) -{ - return (LONG) ((((INT64)a) * b) >> 32) ; -} -#endif - -#if !defined(FUNCTION_fixmuldiv2BitExact_DD) -#define FUNCTION_fixmuldiv2BitExact_DD -#if defined(_MSC_VER) || defined(__CC_ARM) || defined(__ANALOG_EXTENSIONS__) || defined(__TI_COMPILER_VERSION__) -#pragma message ("Extremely slow implementation of fixmuldiv2BitExact_DD !!") -#else -#warning Extremely slow implementation of fixmuldiv2BitExact_DD !! -#endif -inline LONG fixmuldiv2BitExact_DD (const LONG a, const LONG b) -{ - return (LONG) ((((INT64)a) * b) >> 32) ; -} -#endif - -#if !defined(FUNCTION_fixmul_DD) -#define FUNCTION_fixmul_DD -inline LONG fixmul_DD (const LONG a, const LONG b) - { return fixmuldiv2_DD (a, b) << 1 ; } -#endif - -#if !defined(FUNCTION_fixmulBitExact_DD) -#define FUNCTION_fixmulBitExact_DD -#if defined(_MSC_VER) || defined(__CC_ARM) || defined(__ANALOG_EXTENSIONS__) || defined(__TI_COMPILER_VERSION__) || defined(__XTENSA__) -#pragma message ("Extremely slow implementation of fixmulBitExact_DD !!") -#else -#warning Extremely slow implementation of fixmulBitExact_DD !! -#endif -inline LONG fixmulBitExact_DD (const LONG a, const LONG b) -{ - return ( (LONG) ((((INT64)a) * b) >> 32) ) << 1; -} -#endif - -#if !defined(FUNCTION_fixmuldiv2_SS) -#define FUNCTION_fixmuldiv2_SS -inline LONG fixmuldiv2_SS (const SHORT a, const SHORT b) - { return ((LONG)a*b); } -#endif - -#if !defined(FUNCTION_fixmul_SS) -#define FUNCTION_fixmul_SS -inline LONG fixmul_SS (const SHORT a, const SHORT b) - { return (a*b) <<1; } -#endif - -#if !defined(FUNCTION_fixmuldiv2_SD) -#define FUNCTION_fixmuldiv2_SD -inline LONG fixmuldiv2_SD (const SHORT a, const LONG b) -#ifdef FUNCTION_fixmuldiv2_DS - { return fixmuldiv2_DS(b, a); } -#else - { return fixmuldiv2_DD(FX_SGL2FX_DBL(a), b); } -#endif -#endif - -#if !defined(FUNCTION_fixmuldiv2_DS) -#define FUNCTION_fixmuldiv2_DS -inline LONG fixmuldiv2_DS (const LONG a, const SHORT b) -#ifdef FUNCTION_fixmuldiv2_SD - { return fixmuldiv2_SD(b, a); } -#else - { return fixmuldiv2_DD(a, FX_SGL2FX_DBL(b)); } -#endif -#endif - -#if !defined(FUNCTION_fixmuldiv2BitExact_SD) -#define FUNCTION_fixmuldiv2BitExact_SD -inline LONG fixmuldiv2BitExact_SD (const SHORT a, const LONG b) -#ifdef FUNCTION_fixmuldiv2BitExact_DS - { return fixmuldiv2BitExact_DS(b, a); } -#else - { return (LONG) ((((INT64)a) * b) >> 16) ; } -#endif -#endif - -#if !defined(FUNCTION_fixmuldiv2BitExact_DS) -#define FUNCTION_fixmuldiv2BitExact_DS -inline LONG fixmuldiv2BitExact_DS (const LONG a, const SHORT b) -#ifdef FUNCTION_fixmuldiv2BitExact_SD - { return fixmuldiv2BitExact_SD(b, a); } -#else - { return (LONG) ((((INT64)a) * b) >> 16) ; } -#endif -#endif - -#if !defined(FUNCTION_fixmul_SD) -#define FUNCTION_fixmul_SD -inline LONG fixmul_SD (const SHORT a, const LONG b) { -#ifdef FUNCTION_fixmul_DS - return fixmul_SD(b, a); -#else - return fixmuldiv2_SD (a, b) << 1 ; -#endif -} -#endif - -#if !defined(FUNCTION_fixmul_DS) -#define FUNCTION_fixmul_DS -inline LONG fixmul_DS (const LONG a, const SHORT b) { -#ifdef FUNCTION_fixmul_SD - return fixmul_SD(b, a); -#else - return fixmuldiv2_DS(a, b) << 1 ; -#endif -} -#endif - -#if !defined(FUNCTION_fixmulBitExact_SD) -#define FUNCTION_fixmulBitExact_SD -inline LONG fixmulBitExact_SD (const SHORT a, const LONG b) -#ifdef FUNCTION_fixmulBitExact_DS - { return fixmulBitExact_DS(b, a); } -#else - { return (LONG) (((((INT64)a) * b) >> 16) << 1); } -#endif -#endif - -#if !defined(FUNCTION_fixmulBitExact_DS) -#define FUNCTION_fixmulBitExact_DS -inline LONG fixmulBitExact_DS (const LONG a, const SHORT b) -#ifdef FUNCTION_fixmulBitExact_SD - { return fixmulBitExact_SD(b, a); } -#else - { return (LONG) (((((INT64)a) * b) >> 16) << 1); } -#endif -#endif - - -#if !defined(FUNCTION_fixpow2div2_D) -#ifdef ARCH_WA_16BITMULT -#error Fallback for fixpow2div2_D is not 16 bit safe ! -#endif -#define FUNCTION_fixpow2div2_D -inline LONG fixpow2div2_D (const LONG a) - { return fixmuldiv2_DD(a, a); } -#endif - -#if !defined(FUNCTION_fixpow2_D) -#ifdef ARCH_WA_16BITMULT -#error Fallback for fixpow2_D is not 16 bit safe ! -#endif -#define FUNCTION_fixpow2_D -inline LONG fixpow2_D (const LONG a) - { return fixpow2div2_D(a)<<1; } -#endif - -#if !defined(FUNCTION_fixpow2div2_S) -#define FUNCTION_fixpow2div2_S -inline LONG fixpow2div2_S (const SHORT a) - { return fixmuldiv2_SS(a, a); } -#endif - -#if !defined(FUNCTION_fixpow2_S) -#define FUNCTION_fixpow2_S -inline LONG fixpow2_S (const SHORT a) - { return fixpow2div2_S(a)<<1; } -#endif - - -#endif /* __FIXMUL_H__ */ diff --git a/libFDK/include/fixpoint_math.h b/libFDK/include/fixpoint_math.h deleted file mode 100644 index df141d3..0000000 --- a/libFDK/include/fixpoint_math.h +++ /dev/null @@ -1,466 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): M. Gayer - Description: Fixed point specific mathematical functions - -******************************************************************************/ - -#ifndef __fixpoint_math_H -#define __fixpoint_math_H - - -#include "common_fix.h" - - -#define LD_DATA_SCALING (64.0f) -#define LD_DATA_SHIFT 6 /* pow(2, LD_DATA_SHIFT) = LD_DATA_SCALING */ - -/** - * \brief deprecated. Use fLog2() instead. - */ -FIXP_DBL CalcLdData(FIXP_DBL op); - -void LdDataVector(FIXP_DBL *srcVector, FIXP_DBL *destVector, INT number); - -FIXP_DBL CalcInvLdData(FIXP_DBL op); - - -void InitLdInt(); -FIXP_DBL CalcLdInt(INT i); - -extern const USHORT sqrt_tab[49]; - -inline FIXP_DBL sqrtFixp_lookup(FIXP_DBL x) -{ - UINT y = (INT)x; - UCHAR is_zero=(y==0); - INT zeros=fixnormz_D(y) & 0x1e; - y<<=zeros; - UINT idx=(y>>26)-16; - USHORT frac=(y>>10)&0xffff; - USHORT nfrac=0xffff^frac; - UINT t=nfrac*sqrt_tab[idx]+frac*sqrt_tab[idx+1]; - t=t>>(zeros>>1); - return(is_zero ? 0 : t); -} - -inline FIXP_DBL sqrtFixp_lookup(FIXP_DBL x, INT *x_e) -{ - UINT y = (INT)x; - INT e; - - if (x == (FIXP_DBL)0) { - return x; - } - - /* Normalize */ - e=fixnormz_D(y); - y<<=e; - e = *x_e - e + 2; - - /* Correct odd exponent. */ - if (e & 1) { - y >>= 1; - e ++; - } - /* Get square root */ - UINT idx=(y>>26)-16; - USHORT frac=(y>>10)&0xffff; - USHORT nfrac=0xffff^frac; - UINT t=nfrac*sqrt_tab[idx]+frac*sqrt_tab[idx+1]; - - /* Write back exponent */ - *x_e = e >> 1; - return (FIXP_DBL)(LONG)(t>>1); -} - - - -FIXP_DBL sqrtFixp(FIXP_DBL op); - -void InitInvSqrtTab(); - -FIXP_DBL invSqrtNorm2(FIXP_DBL op, INT *shift); - -/***************************************************************************** - - functionname: invFixp - description: delivers 1/(op) - -*****************************************************************************/ -inline FIXP_DBL invFixp(FIXP_DBL op) -{ - INT tmp_exp ; - FIXP_DBL tmp_inv = invSqrtNorm2(op, &tmp_exp) ; - FDK_ASSERT((31-(2*tmp_exp+1))>=0) ; - return ( fPow2Div2( (FIXP_DBL)tmp_inv ) >> (31-(2*tmp_exp+1)) ) ; -} - - - -#if defined(__mips__) && (__GNUC__==2) - -#define FUNCTION_schur_div -inline FIXP_DBL schur_div(FIXP_DBL num,FIXP_DBL denum, INT count) -{ - INT result, tmp ; - __asm__ ("srl %1, %2, 15\n" - "div %3, %1\n" : "=lo" (result) - : "%d" (tmp), "d" (denum) , "d" (num) - : "hi" ) ; - return result<<16 ; -} - -/*###########################################################################################*/ -#elif defined(__mips__) && (__GNUC__==3) - -#define FUNCTION_schur_div -inline FIXP_DBL schur_div(FIXP_DBL num,FIXP_DBL denum, INT count) -{ - INT result, tmp; - - __asm__ ("srl %[tmp], %[denum], 15\n" - "div %[result], %[num], %[tmp]\n" - : [tmp] "+r" (tmp), [result]"=r"(result) - : [denum]"r"(denum), [num]"r"(num) - : "hi", "lo"); - return result << (DFRACT_BITS-16); -} - -/*###########################################################################################*/ -#elif defined(SIMULATE_MIPS_DIV) - -#define FUNCTION_schur_div -inline FIXP_DBL schur_div(FIXP_DBL num, FIXP_DBL denum, INT count) -{ - FDK_ASSERT (count<=DFRACT_BITS-1); - FDK_ASSERT (num>=(FIXP_DBL)0); - FDK_ASSERT (denum>(FIXP_DBL)0); - FDK_ASSERT (num <= denum); - - INT tmp = denum >> (count-1); - INT result = 0; - - while (num > tmp) - { - num -= tmp; - result++; - } - - return result << (DFRACT_BITS-count); -} - -/*###########################################################################################*/ -#endif /* target architecture selector */ - -#if !defined(FUNCTION_schur_div) -/** - * \brief Divide two FIXP_DBL values with given precision. - * \param num dividend - * \param denum divisor - * \param count amount of significant bits of the result (starting to the MSB) - * \return num/divisor - */ -FIXP_DBL schur_div(FIXP_DBL num,FIXP_DBL denum, INT count); -#endif - - - -FIXP_DBL mul_dbl_sgl_rnd (const FIXP_DBL op1, - const FIXP_SGL op2); - -/** - * \brief multiply two values with normalization, thus max precision. - * Author: Robert Weidner - * - * \param f1 first factor - * \param f2 secod factor - * \param result_e pointer to an INT where the exponent of the result is stored into - * \return mantissa of the product f1*f2 - */ -FIXP_DBL fMultNorm( - FIXP_DBL f1, - FIXP_DBL f2, - INT *result_e - ); - -inline FIXP_DBL fMultNorm(FIXP_DBL f1, FIXP_DBL f2) -{ - FIXP_DBL m; - INT e; - - m = fMultNorm(f1, f2, &e); - - m = scaleValueSaturate(m, e); - - return m; -} - -/** - * \brief Divide 2 FIXP_DBL values with normalization of input values. - * \param num numerator - * \param denum denomintator - * \return num/denum with exponent = 0 - */ -FIXP_DBL fDivNorm(FIXP_DBL num, FIXP_DBL denom, INT *result_e); - -/** - * \brief Divide 2 FIXP_DBL values with normalization of input values. - * \param num numerator - * \param denum denomintator - * \param result_e pointer to an INT where the exponent of the result is stored into - * \return num/denum with exponent = *result_e - */ -FIXP_DBL fDivNorm(FIXP_DBL num, FIXP_DBL denom); - -/** - * \brief Divide 2 FIXP_DBL values with normalization of input values. - * \param num numerator - * \param denum denomintator - * \return num/denum with exponent = 0 - */ -FIXP_DBL fDivNormHighPrec(FIXP_DBL L_num, FIXP_DBL L_denum, INT *result_e); - -/** - * \brief Calculate log(argument)/log(2) (logarithm with base 2). deprecated. Use fLog2() instead. - * \param arg mantissa of the argument - * \param arg_e exponent of the argument - * \param result_e pointer to an INT to store the exponent of the result - * \return the mantissa of the result. - * \param - */ -FIXP_DBL CalcLog2(FIXP_DBL arg, INT arg_e, INT *result_e); - -/** - * \brief return 2 ^ (exp * 2^exp_e) - * \param exp_m mantissa of the exponent to 2.0f - * \param exp_e exponent of the exponent to 2.0f - * \param result_e pointer to a INT where the exponent of the result will be stored into - * \return mantissa of the result - */ -FIXP_DBL f2Pow(const FIXP_DBL exp_m, const INT exp_e, INT *result_e); - -/** - * \brief return 2 ^ (exp_m * 2^exp_e). This version returns only the mantissa with implicit exponent of zero. - * \param exp_m mantissa of the exponent to 2.0f - * \param exp_e exponent of the exponent to 2.0f - * \return mantissa of the result - */ -FIXP_DBL f2Pow(const FIXP_DBL exp_m, const INT exp_e); - -/** - * \brief return x ^ (exp * 2^exp_e), where log2(x) = baseLd_m * 2^(baseLd_e). This saves - * the need to compute log2() of constant values (when x is a constant). - * \param ldx_m mantissa of log2() of x. - * \param ldx_e exponent of log2() of x. - * \param exp_m mantissa of the exponent to 2.0f - * \param exp_e exponent of the exponent to 2.0f - * \param result_e pointer to a INT where the exponent of the result will be stored into - * \return mantissa of the result - */ -FIXP_DBL fLdPow( - FIXP_DBL baseLd_m, - INT baseLd_e, - FIXP_DBL exp_m, INT exp_e, - INT *result_e - ); - -/** - * \brief return x ^ (exp * 2^exp_e), where log2(x) = baseLd_m * 2^(baseLd_e). This saves - * the need to compute log2() of constant values (when x is a constant). This version - * does not return an exponent, which is implicitly 0. - * \param ldx_m mantissa of log2() of x. - * \param ldx_e exponent of log2() of x. - * \param exp_m mantissa of the exponent to 2.0f - * \param exp_e exponent of the exponent to 2.0f - * \return mantissa of the result - */ -FIXP_DBL fLdPow( - FIXP_DBL baseLd_m, INT baseLd_e, - FIXP_DBL exp_m, INT exp_e - ); - -/** - * \brief return (base * 2^base_e) ^ (exp * 2^exp_e). Use fLdPow() instead whenever possible. - * \param base_m mantissa of the base. - * \param base_e exponent of the base. - * \param exp_m mantissa of power to be calculated of the base. - * \param exp_e exponent of power to be calculated of the base. - * \param result_e pointer to a INT where the exponent of the result will be stored into. - * \return mantissa of the result. - */ -FIXP_DBL fPow(FIXP_DBL base_m, INT base_e, FIXP_DBL exp_m, INT exp_e, INT *result_e); - -/** - * \brief return (base * 2^base_e) ^ N - * \param base mantissa of the base - * \param base_e exponent of the base - * \param power to be calculated of the base - * \param result_e pointer to a INT where the exponent of the result will be stored into - * \return mantissa of the result - */ -FIXP_DBL fPowInt(FIXP_DBL base_m, INT base_e, INT N, INT *result_e); - -/** - * \brief calculate logarithm of base 2 of x_m * 2^(x_e) - * \param x_m mantissa of the input value. - * \param x_e exponent of the input value. - * \param pointer to an INT where the exponent of the result is returned into. - * \return mantissa of the result. - */ -FIXP_DBL fLog2(FIXP_DBL x_m, INT x_e, INT *result_e); - -/** - * \brief calculate logarithm of base 2 of x_m * 2^(x_e) - * \param x_m mantissa of the input value. - * \param x_e exponent of the input value. - * \return mantissa of the result with implicit exponent of LD_DATA_SHIFT. - */ -FIXP_DBL fLog2(FIXP_DBL x_m, INT x_e); - -/** - * \brief Add with saturation of the result. - * \param a first summand - * \param b second summand - * \return saturated sum of a and b. - */ -inline FIXP_SGL fAddSaturate(const FIXP_SGL a, const FIXP_SGL b) -{ - LONG sum; - - sum = (LONG)(SHORT)a + (LONG)(SHORT)b; - sum = fMax(fMin((INT)sum, (INT)MAXVAL_SGL), (INT)MINVAL_SGL); - return (FIXP_SGL)(SHORT)sum; -} - -/** - * \brief Add with saturation of the result. - * \param a first summand - * \param b second summand - * \return saturated sum of a and b. - */ -inline FIXP_DBL fAddSaturate(const FIXP_DBL a, const FIXP_DBL b) -{ - LONG sum; - - sum = (LONG)(a>>1) + (LONG)(b>>1); - sum = fMax(fMin((INT)sum, (INT)(MAXVAL_DBL>>1)), (INT)(MINVAL_DBL>>1)); - return (FIXP_DBL)(LONG)(sum<<1); -} - -//#define TEST_ROUNDING - - - - -/***************************************************************************** - - array for 1/n, n=1..50 - -****************************************************************************/ - - extern const FIXP_DBL invCount[50]; - - LNK_SECTION_INITCODE - inline void InitInvInt(void) {} - - -/** - * \brief Calculate the value of 1/i where i is a integer value. It supports - * input values from 1 upto 50. - * \param intValue Integer input value. - * \param FIXP_DBL representation of 1/intValue - */ -inline FIXP_DBL GetInvInt(int intValue) -{ - FDK_ASSERT((intValue > 0) && (intValue < 50)); - FDK_ASSERT(intValue<50); - return invCount[intValue]; -} - - -#endif - diff --git a/libFDK/include/mdct.h b/libFDK/include/mdct.h deleted file mode 100644 index e1c2d74..0000000 --- a/libFDK/include/mdct.h +++ /dev/null @@ -1,243 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): Manuel Jander, Josef Hoepfl - Description: MDCT routines - -******************************************************************************/ - -#ifndef __MDCT_H__ -#define __MDCT_H__ - - - -#include "common_fix.h" - -#define MDCT_OUT_HEADROOM 2 /* Output additional headroom */ -#define MDCT_OUTPUT_SCALE (DFRACT_BITS-SAMPLE_BITS-MDCT_OUT_HEADROOM) -/* Refer to "Output word length" in ISO/IEC 14496-3:2008(E) 23.2.3.6 */ -#define MDCT_OUTPUT_GAIN 16 - -#if (SAMPLE_BITS == DFRACT_BITS) -#define IMDCT_SCALE(x) (INT_PCM)SATURATE_LEFT_SHIFT(x, -MDCT_OUTPUT_SCALE, SAMPLE_BITS) -#else -#define IMDCT_SCALE(x) (INT_PCM)SATURATE_RIGHT_SHIFT(x, MDCT_OUTPUT_SCALE, SAMPLE_BITS) -#endif -#define IMDCT_SCALE_DBL(x) (FIXP_DBL)(x) - -/** - * \brief MDCT persistent data - */ -typedef struct { - union { - FIXP_DBL *freq; - FIXP_DBL *time; - } overlap; /**< Pointer to overlap memory */ - - const FIXP_WTP *prev_wrs; /**< pointer to previous right window slope */ - int prev_tl; /**< previous tranform length */ - int prev_nr; /**< previous right window offset */ - int prev_fr; /**< previous right window slope length */ - int ov_offset; /**< overlap time data fill level */ - int ov_size; /**< Overlap buffer size in words */ - -} mdct_t; - -typedef mdct_t* H_MDCT; - -/** - * \brief Initialize as valid MDCT handle - * - * \param hMdct handle of an allocated MDCT handle. - * \param overlap pointer to FIXP_DBL overlap buffer. - * \param overlapBufferSize size in FIXP_DBLs of the given overlap buffer. - * \return void - */ -void mdct_init( H_MDCT hMdct, - FIXP_DBL *overlap, - INT overlapBufferSize ); - -/** - * \brief perform MDCT transform (time domain to frequency domain) with given parameters. - * - * \param hMdct handle of an allocated MDCT handle. - * \param spectrum pointer to where the resulting MDCT spectrum will be stored into. - * \param scalefactor pointer to the input scale shift value. Updated accordingly on return. - * \param input pointer to input time domain signal - * \param tl transformation length. - * \param nr right window slope offset (amount of window coefficients assumed to be 1.0) - * \param fr right overlap window slope length - * \param wrs pointer to the right side overlap window coefficients. - * \return number of input samples processed. - */ -INT mdct_block( - H_MDCT hMdct, - FIXP_DBL *spectrum, - INT *scalefactor, - INT_PCM *input, - INT tl, - INT nr, - INT fr, - const FIXP_WTB *wrs ); - - -/** - * \brief add/multiply 2/N transform gain and MPEG4 part 3 defined output gain (see definition - * of MDCT_OUTPUT_GAIN) to given mantissa factor and exponent. - * \param pGain pointer to the mantissa of a gain factor to be applied to IMDCT data. - * \param pExponent pointer to the exponent of a gain factor to be applied to IMDCT data. - * \param tl length of the IMDCT where the gain *pGain * (2 ^ *pExponent) will be applied to. - */ -void imdct_gain( - FIXP_DBL *pGain, - int *pExponent, - int tl - ); - -/** - * \brief drain buffered output samples into given buffer. Changes the MDCT state. - */ -INT imdct_drain( - H_MDCT hMdct, - FIXP_DBL * pTimeData, - INT nrSamplesRoom - ); - - -/** - * \brief Copy overlap time domain data to given buffer. Does not change the MDCT state. - * \return number of actually copied samples (ov + nr). - */ -INT imdct_copy_ov_and_nr( - H_MDCT hMdct, - FIXP_DBL * pTimeData, - INT nrSamples - ); - -/** - * \brief Adapt MDCT parameters for non-matching window slopes. - * \param hMdct handle of an allocated MDCT handle. - * \param pfl pointer to left overlap window side length. - * \param pnl pointer to length of the left n part of the window. - * \param tl transform length. - * \param wls pointer to the left side overlap window coefficients. - * \param noOutSamples desired number of output samples. - */ -void imdct_adapt_parameters(H_MDCT hMdct, int *pfl, int *pnl, int tl, const FIXP_WTP *wls, int noOutSamples); - -/** - * \brief perform several inverse MDCT transforms (frequency domain to time domain) with given parameters. - * - * \param hMdct handle of an allocated MDCT handle. - * \param output pointer to where the output time domain signal will be stored into. - * \param stride the stride factor for accessing time domain samples in output. - * \param spectrum pointer to the input MDCT spectra. - * \param scalefactors scale shift values of the input spectrum. - * \param nSpec number of MDCT spectrums. - * \param noOutSamples desired number of output samples. - * \param tl transform length. - * \param wls pointer to the left side overlap window coefficients. - * \param fl left overlap window side length. - * \param wrs pointer to the right side overlap window coefficients of all individual IMDCTs. - * \param fr right overlap window side length of all individual IMDCTs. - * \param gain factor to apply to output samples (if != 0). - * \return number of output samples returned. - */ -INT imdct_block( - H_MDCT hMdct, - FIXP_DBL *output, - FIXP_DBL *spectrum, - const SHORT scalefactor[], - const INT nSpec, - const INT noOutSamples, - const INT tl, - const FIXP_WTP *wls, - INT fl, - const FIXP_WTP *wrs, - const INT fr, - FIXP_DBL gain ); - - -#endif /* __MDCT_H__ */ diff --git a/libFDK/include/mips/abs_mips.h b/libFDK/include/mips/abs_mips.h deleted file mode 100644 index 3b9f876..0000000 --- a/libFDK/include/mips/abs_mips.h +++ /dev/null @@ -1,107 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - -#if defined(__mips__) - -#if defined(__GNUC__) && defined(__mips__) - - #if defined(__mips_dsp) - #define FUNCTION_fixabs_D - #define FUNCTION_fixabs_I - #define FUNCTION_fixabs_S - inline FIXP_DBL fixabs_D(FIXP_DBL x) { return __builtin_mips_absq_s_w(x); } - inline FIXP_SGL fixabs_S(FIXP_SGL x) { return ((x) > (FIXP_SGL)(0)) ? (x) : -(x) ; } - inline INT fixabs_I(INT x) { return __builtin_mips_absq_s_w(x); } - #endif /* __mips_dsp */ - -#endif /* defined(__GNUC__) && defined(__mips__) */ - -#endif /*__mips__ */ - diff --git a/libFDK/include/mips/clz_mips.h b/libFDK/include/mips/clz_mips.h deleted file mode 100644 index ff40a09..0000000 --- a/libFDK/include/mips/clz_mips.h +++ /dev/null @@ -1,118 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - -#if defined(__mips__) - -#if defined(__mips__) && (__GNUC__==2) && (mips>=32) - - #define FUNCTION_fixnormz_D - inline INT fixnormz_D(LONG value) - { - INT result; - __asm__ ("clz %0,%1" : "=d" (result) : "d" (value)); - - return result; - } - -#elif defined(__mips__) && (__GNUC__==3) && (__mips>=32) - - #define FUNCTION_fixnormz_D - INT inline fixnormz_D(LONG value) - { - INT result; - __asm__ ("clz %[result], %[value]" : [result] "=r" (result) : [value] "r" (value)) ; - - return result; - } - -#endif - -#endif /* __mips__ */ - diff --git a/libFDK/include/mips/cplx_mul.h b/libFDK/include/mips/cplx_mul.h deleted file mode 100644 index e05d2b6..0000000 --- a/libFDK/include/mips/cplx_mul.h +++ /dev/null @@ -1,162 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - - -#if defined(__GNUC__) && defined(__mips__) - - -//#define FUNCTION_cplxMultDiv2_32x16 -//#define FUNCTION_cplxMultDiv2_32x16X2 -#define FUNCTION_cplxMultDiv2_32x32X2 -//#define FUNCTION_cplxMult_32x16 -//#define FUNCTION_cplxMult_32x16X2 -#define FUNCTION_cplxMult_32x32X2 - -#if defined(FUNCTION_cplxMultDiv2_32x32X2) -inline void cplxMultDiv2( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - FIXP_DBL a_Re, - FIXP_DBL a_Im, - FIXP_DBL b_Re, - FIXP_DBL b_Im) -{ - INT result; - - __asm__ ("mult %[a_Re], %[b_Re];\n" - "msub %[a_Im], %[b_Im];\n" - "mfhi %[result];\n" - : [result]"=r"(result) - : [a_Re]"d"(a_Re), [b_Re]"d"(b_Re), [a_Im]"d"(a_Im), [b_Im]"d"(b_Im) - : "lo"); - - *c_Re = result; - - __asm__ ("mult %[a_Re], %[b_Im];\n" - "madd %[a_Im], %[b_Re];\n" - "mfhi %[result];\n" - : [result]"=r"(result) - : [a_Re]"r"(a_Re), [b_Im]"r"(b_Im), [a_Im]"r"(a_Im), [b_Re]"r"(b_Re) - : "lo"); - *c_Im = result; -} -#endif - -#if defined(FUNCTION_cplxMult_32x32X2) -inline void cplxMult( FIXP_DBL *c_Re, - FIXP_DBL *c_Im, - FIXP_DBL a_Re, - FIXP_DBL a_Im, - FIXP_DBL b_Re, - FIXP_DBL b_Im) -{ - INT result; - - __asm__ ("mult %[a_Re], %[b_Re];\n" - "msub %[a_Im], %[b_Im];\n" - "mfhi %[result];\n" - //"extr_w %[result], 31;\n" - : [result]"=r"(result) - : [a_Re]"r"(a_Re), [b_Re]"r"(b_Re), [a_Im]"r"(a_Im), [b_Im]"r"(b_Im) - : "lo"); - *c_Re = result<<1; - - __asm__ ("mult %[a_Re], %[b_Im];\n" - "madd %[a_Im], %[b_Re];\n" - "mfhi %[result];\n" - //"extr_w %[result], 31;\n" - : [result]"=r"(result) - : [a_Re]"r"(a_Re), [b_Im]"r"(b_Im), [a_Im]"r"(a_Im), [b_Re]"r"(b_Re) - : "lo"); - *c_Im = result<<1; -} -#endif - -#endif /* defined(__GNUC__) && defined(__mips__) */ - diff --git a/libFDK/include/mips/fixmadd_mips.h b/libFDK/include/mips/fixmadd_mips.h deleted file mode 100644 index a9575fb..0000000 --- a/libFDK/include/mips/fixmadd_mips.h +++ /dev/null @@ -1,95 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - -#if defined(__mips__) - - -#endif /* __mips__ */ - diff --git a/libFDK/include/mips/fixmul_mips.h b/libFDK/include/mips/fixmul_mips.h deleted file mode 100644 index 73693e2..0000000 --- a/libFDK/include/mips/fixmul_mips.h +++ /dev/null @@ -1,113 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - -#if defined(__mips__) - -#if (__GNUC__) && defined(__mips__) /* cppp replaced: elif */ -/* MIPS GCC based compiler */ - -#define FUNCTION_fixmuldiv2_DD - -#define FUNCTION_fixmuldiv2BitExact_DD -#define fixmuldiv2BitExact_DD(a,b) fixmuldiv2_DD(a,b) - -inline INT fixmuldiv2_DD (const INT a, const INT b) -{ - INT result ; - result = ((long long)a * b)>>32; - return result ; -} - -#endif /* (__GNUC__) && defined(__mips__) */ - -#endif /* __mips__ */ - -#define FUNCTION_fixmulBitExact_DD -#define fixmulBitExact_DD fixmul_DD diff --git a/libFDK/include/mips/scale.h b/libFDK/include/mips/scale.h deleted file mode 100644 index edf29da..0000000 --- a/libFDK/include/mips/scale.h +++ /dev/null @@ -1,110 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: - -******************************************************************************/ - -#ifndef MIPS_SCALE_H -#define MIPS_SCALE_H - -#if defined(__mips_dsp) - -/*! -* -* \brief Scale input value by 2^{scale} and saturate output to 2^{dBits-1} -* \return scaled and saturated value -* -* This macro scales src value right or left and applies saturation to (2^dBits)-1 -* maxima output. -*/ -#define SATURATE_RIGHT_SHIFT(src, scale, dBits) \ - (__builtin_mips_shll_s_w((src)>>scale,(DFRACT_BITS-(dBits)))>>(DFRACT_BITS-(dBits))) - - -#endif /*__mips_dsp */ - -#endif /* MIPS_SCALE_H */ diff --git a/libFDK/include/mips/scramble.h b/libFDK/include/mips/scramble.h deleted file mode 100644 index 3f2fe6e..0000000 --- a/libFDK/include/mips/scramble.h +++ /dev/null @@ -1,121 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: - -******************************************************************************/ - -#ifndef MIPS_SCRAMBLE_H -#define MIPS_SCRAMBLE_H - -#define FUNCTION_scramble - -#if defined(FUNCTION_scramble) -inline void scramble(FIXP_DBL *x, INT n) { - INT m,j; - int ldn=1; - do {ldn++;} while((1<> (16-ldn); - - if (j>m) - { - FIXP_DBL tmp; - tmp=x[2*m]; - x[2*m]=x[2*j]; - x[2*j]=tmp; - - tmp=x[2*m+1]; - x[2*m+1]=x[2*j+1]; - x[2*j+1]=tmp; - } - } -} -#endif - -#endif /* MIPS_SCRAMBLE_H */ diff --git a/libFDK/include/qmf.h b/libFDK/include/qmf.h deleted file mode 100644 index be69477..0000000 --- a/libFDK/include/qmf.h +++ /dev/null @@ -1,248 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*! - \file qmf.h - \brief Complex qmf analysis/synthesis - \author Markus Werner - -*/ -#ifndef __QMF_H -#define __QMF_H - - - -#include "common_fix.h" -#include "FDK_tools_rom.h" -#include "dct.h" - -/* - * Filter coefficient type definition - */ -#ifdef QMF_DATA_16BIT -#define FIXP_QMF FIXP_SGL -#define FX_DBL2FX_QMF FX_DBL2FX_SGL -#define FX_QMF2FX_DBL FX_SGL2FX_DBL -#define QFRACT_BITS FRACT_BITS -#else -#define FIXP_QMF FIXP_DBL -#define FX_DBL2FX_QMF -#define FX_QMF2FX_DBL -#define QFRACT_BITS DFRACT_BITS -#endif - -/* ARM neon optimized QMF analysis filter requires 32 bit input. - Implemented for RVCT only, currently disabled. See src/arm/qmf_arm.cpp:45 */ -#define FIXP_QAS FIXP_PCM -#define QAS_BITS SAMPLE_BITS - -#ifdef QMFSYN_STATES_16BIT -#define FIXP_QSS FIXP_SGL -#define QSS_BITS FRACT_BITS -#else -#define FIXP_QSS FIXP_DBL -#define QSS_BITS DFRACT_BITS -#endif - -/* Flags for QMF intialization */ -/* Low Power mode flag */ -#define QMF_FLAG_LP 1 -/* Filter is not symetric. This flag is set internally in the QMF initialization as required. */ -#define QMF_FLAG_NONSYMMETRIC 2 -/* Complex Low Delay Filter Bank (or std symmetric filter bank) */ -#define QMF_FLAG_CLDFB 4 -/* Flag indicating that the states should be kept. */ -#define QMF_FLAG_KEEP_STATES 8 -/* Complex Low Delay Filter Bank used in MPEG Surround Encoder */ -#define QMF_FLAG_MPSLDFB 16 -/* Complex Low Delay Filter Bank used in MPEG Surround Encoder allows a optimized calculation of the modulation in qmfForwardModulationHQ() */ -#define QMF_FLAG_MPSLDFB_OPTIMIZE_MODULATION 32 -/* Flag to indicate HE-AAC down-sampled SBR mode (decoder) -> adapt analysis post twiddling */ -#define QMF_FLAG_DOWNSAMPLED 64 - - -typedef struct -{ - int lb_scale; /*!< Scale of low band area */ - int ov_lb_scale; /*!< Scale of adjusted overlap low band area */ - int hb_scale; /*!< Scale of high band area */ - int ov_hb_scale; /*!< Scale of adjusted overlap high band area */ -} QMF_SCALE_FACTOR; - -struct QMF_FILTER_BANK -{ - const FIXP_PFT *p_filter; /*!< Pointer to filter coefficients */ - - void *FilterStates; /*!< Pointer to buffer of filter states - FIXP_PCM in analyse and - FIXP_DBL in synthesis filter */ - int FilterSize; /*!< Size of prototype filter. */ - const FIXP_QTW *t_cos; /*!< Modulation tables. */ - const FIXP_QTW *t_sin; - int filterScale; /*!< filter scale */ - - int no_channels; /*!< Total number of channels (subbands) */ - int no_col; /*!< Number of time slots */ - int lsb; /*!< Top of low subbands */ - int usb; /*!< Top of high subbands */ - - int outScalefactor; /*!< Scale factor of output data (syn only) */ - FIXP_DBL outGain; /*!< Gain output data (syn only) (init with 0x80000000 to ignore) */ - - UINT flags; /*!< flags */ - UCHAR p_stride; /*!< Stride Factor of polyphase filters */ - -}; - -typedef struct QMF_FILTER_BANK *HANDLE_QMF_FILTER_BANK; - -void -qmfAnalysisFiltering( HANDLE_QMF_FILTER_BANK anaQmf, /*!< Handle of Qmf Analysis Bank */ - FIXP_QMF **qmfReal, /*!< Pointer to real subband slots */ - FIXP_QMF **qmfImag, /*!< Pointer to imag subband slots */ - QMF_SCALE_FACTOR *scaleFactor, /*!< Scale factors of QMF data */ - const INT_PCM *timeIn, /*!< Time signal */ - const int stride, /*!< Stride factor of audio data */ - FIXP_QMF *pWorkBuffer /*!< pointer to temporal working buffer */ - ); - -void -qmfSynthesisFiltering( HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Synthesis Bank */ - FIXP_QMF **QmfBufferReal, /*!< Pointer to real subband slots */ - FIXP_QMF **QmfBufferImag, /*!< Pointer to imag subband slots */ - const QMF_SCALE_FACTOR *scaleFactor, /*!< Scale factors of QMF data */ - const int ov_len, /*!< Length of band overlap */ - INT_PCM *timeOut, /*!< Time signal */ - const int stride, /*!< Stride factor of audio data */ - FIXP_QMF *pWorkBuffer /*!< pointer to temporal working buffer */ - ); - -int -qmfInitAnalysisFilterBank( HANDLE_QMF_FILTER_BANK h_Qmf, /*!< QMF Handle */ - FIXP_QAS *pFilterStates, /*!< Pointer to filter state buffer */ - int noCols, /*!< Number of time slots */ - int lsb, /*!< Number of lower bands */ - int usb, /*!< Number of upper bands */ - int no_channels, /*!< Number of critically sampled bands */ - int flags); /*!< Flags */ - -void -qmfAnalysisFilteringSlot( HANDLE_QMF_FILTER_BANK anaQmf, /*!< Handle of Qmf Synthesis Bank */ - FIXP_QMF *qmfReal, /*!< Low and High band, real */ - FIXP_QMF *qmfImag, /*!< Low and High band, imag */ - const INT_PCM *timeIn, /*!< Pointer to input */ - const int stride, /*!< stride factor of input */ - FIXP_QMF *pWorkBuffer /*!< pointer to temporal working buffer */ - ); - -int -qmfInitSynthesisFilterBank( HANDLE_QMF_FILTER_BANK h_Qmf, /*!< QMF Handle */ - FIXP_QSS *pFilterStates, /*!< Pointer to filter state buffer */ - int noCols, /*!< Number of time slots */ - int lsb, /*!< Number of lower bands */ - int usb, /*!< Number of upper bands */ - int no_channels, /*!< Number of critically sampled bands */ - int flags); /*!< Flags */ - -void qmfSynthesisFilteringSlot( HANDLE_QMF_FILTER_BANK synQmf, - const FIXP_QMF *realSlot, - const FIXP_QMF *imagSlot, - const int scaleFactorLowBand, - const int scaleFactorHighBand, - INT_PCM *timeOut, - const int stride, - FIXP_QMF *pWorkBuffer); - -void -qmfChangeOutScalefactor (HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Synthesis Bank */ - int outScalefactor /*!< New scaling factor for output data */ - ); - -void -qmfChangeOutGain (HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Synthesis Bank */ - FIXP_DBL outputGain /*!< New gain for output data */ - ); - - - -#endif /* __QMF_H */ diff --git a/libFDK/include/scale.h b/libFDK/include/scale.h deleted file mode 100644 index 1587f9f..0000000 --- a/libFDK/include/scale.h +++ /dev/null @@ -1,250 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: Scaling operations - -******************************************************************************/ - -#ifndef SCALE_H -#define SCALE_H - -#include "common_fix.h" -#include "genericStds.h" -#include "fixminmax.h" - - #define SCALE_INLINE inline - - -#if defined(__arm__) /* cppp replaced: elif */ -#include "arm/scale.h" - -#elif defined(__mips__) /* cppp replaced: elif */ -#include "mips/scale.h" - -#endif - - -#include "../src/scale.cpp" - -#ifndef FUNCTION_scaleValue -/*! - * - * \brief Multiply input by \f$ 2^{scalefactor} \f$ - * - * \return Scaled input - * - */ -#define FUNCTION_scaleValue -inline -FIXP_DBL scaleValue(const FIXP_DBL value, /*!< Value */ - INT scalefactor /*!< Scalefactor */ - ) -{ - if(scalefactor > 0) - return (value<>(-scalefactor)); -} -#endif - -#ifndef FUNCTION_scaleValueSaturate -/*! - * - * \brief Multiply input by \f$ 2^{scalefactor} \f$ - * \param value The value to be scaled. - * \param the shift amount - * \return \f$ value * 2^scalefactor \f$ - * - */ -#define FUNCTION_scaleValueSaturate -inline -FIXP_DBL scaleValueSaturate( - const FIXP_DBL value, - INT scalefactor - ) -{ - if(scalefactor > 0) { - if (fNorm(value) < scalefactor && value != (FIXP_DBL)0) { - if (value > (FIXP_DBL)0) { - return (FIXP_DBL)MAXVAL_DBL; - } else { - return (FIXP_DBL)MINVAL_DBL; - } - } else { - return (value< scalefactor) { - return (FIXP_DBL)0; - } else { - return (value>>(-scalefactor)); - } - } -} -#endif - -#ifndef FUNCTION_scaleValueInPlace -/*! - * - * \brief Multiply input by \f$ 2^{scalefactor} \f$ in place - * - * \return void - * - */ -#define FUNCTION_scaleValueInPlace -inline -void scaleValueInPlace( - FIXP_DBL *value, /*!< Value */ - INT scalefactor /*!< Scalefactor */ - ) -{ - INT newscale; - /* Note: The assignment inside the if conditional allows combining a load with the compare to zero (on ARM and maybe others) */ - if ((newscale = (scalefactor)) >= 0) { - *(value) <<= newscale; - } else { - *(value) >>= -newscale; - } -} -#endif - -/*! - * - * \brief Scale input value by 2^{scale} and saturate output to 2^{dBits-1} - * \return scaled and saturated value - * - * This macro scales src value right or left and applies saturation to (2^dBits)-1 - * maxima output. - */ - -#ifndef SATURATE_RIGHT_SHIFT - #define SATURATE_RIGHT_SHIFT(src, scale, dBits) \ - ( (((LONG)(src)>>(scale)) > (LONG)(((1U)<<((dBits)-1))-1)) ? (LONG)(((1U)<<((dBits)-1))-1) \ - : (((LONG)(src)>>(scale)) < ~((LONG)(((1U)<<((dBits)-1))-1))) ? ~((LONG)(((1U)<<((dBits)-1))-1)) \ - : ((LONG)(src) >> (scale)) ) -#endif - -#ifndef SATURATE_LEFT_SHIFT - #define SATURATE_LEFT_SHIFT(src, scale, dBits) \ - ( ((LONG)(src) > ((LONG)(((1U)<<((dBits)-1))-1)>>(scale))) ? (LONG)(((1U)<<((dBits)-1))-1) \ - : ((LONG)(src) < ~((LONG)(((1U)<<((dBits)-1))-1)>>(scale))) ? ~((LONG)(((1U)<<((dBits)-1))-1)) \ - : ((LONG)(src) << (scale)) ) -#endif - -#ifndef SATURATE_SHIFT -#define SATURATE_SHIFT(src, scale, dBits) \ - ( ((scale) < 0) \ - ? SATURATE_LEFT_SHIFT((src), -(scale), (dBits)) \ - : SATURATE_RIGHT_SHIFT((src), (scale), (dBits)) ) -#endif - -/* - * Alternative shift and saturate left, saturates to -0.99999 instead of -1.0000 - * to avoid problems when inverting the sign of the result. - */ -#ifndef SATURATE_LEFT_SHIFT_ALT -#define SATURATE_LEFT_SHIFT_ALT(src, scale, dBits) \ - ( ((LONG)(src) > ((LONG)(((1U)<<((dBits)-1))-1)>>(scale))) ? (LONG)(((1U)<<((dBits)-1))-1) \ - : ((LONG)(src) < ~((LONG)(((1U)<<((dBits)-1))-2)>>(scale))) ? ~((LONG)(((1U)<<((dBits)-1))-2)) \ - : ((LONG)(src) << (scale)) ) -#endif - -#ifndef SATURATE_RIGHT_SHIFT_ALT - #define SATURATE_RIGHT_SHIFT_ALT(src, scale, dBits) \ - ( (((LONG)(src)>>(scale)) > (LONG)(((1U)<<((dBits)-1))-1)) ? (LONG)(((1U)<<((dBits)-1))-1) \ - : (((LONG)(src)>>(scale)) < ~((LONG)(((1U)<<((dBits)-1))-2))) ? ~((LONG)(((1U)<<((dBits)-1))-2)) \ - : ((LONG)(src) >> (scale)) ) -#endif - -#ifndef SATURATE_INT_PCM_RIGHT_SHIFT -#define SATURATE_INT_PCM_RIGHT_SHIFT(src, scale) SATURATE_RIGHT_SHIFT(src, scale, SAMPLE_BITS) -#endif - -#ifndef SATURATE_INT_PCM_LEFT_SHIFT -#define SATURATE_INT_PCM_LEFT_SHIFT(src, scale) SATURATE_LEFT_SHIFT(src, scale, SAMPLE_BITS) -#endif - -#endif /* #ifndef SCALE_H */ diff --git a/libFDK/include/scramble.h b/libFDK/include/scramble.h deleted file mode 100644 index ceaf527..0000000 --- a/libFDK/include/scramble.h +++ /dev/null @@ -1,165 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: - -******************************************************************************/ - -#ifndef SCRAMBLE_H -#define SCRAMBLE_H - -#include "common_fix.h" - -#if defined(__arm__) -#include "arm/scramble.h" - -#elif defined(__mips__) && defined(__mips_dsp) /* cppp replaced: elif */ -#include "mips/scramble.h" - -#endif - -/***************************************************************************** - - functionname: scramble - description: bitreversal of input data - returns: - input: - output: - -*****************************************************************************/ -#if !defined(FUNCTION_scramble_sgl) - -inline void scramble_sgl(FIXP_SGL *x, INT n) -{ - INT m,k,j; - - for (m=1,j=0; m>1; (!((j^=k)&k)); k>>=1);} - - if (j>m) - { - FIXP_SGL tmp; - tmp=x[2*m]; - x[2*m]=x[2*j]; - x[2*j]=tmp; - - tmp=x[2*m+1]; - x[2*m+1]=x[2*j+1]; - x[2*j+1]=tmp; - } - } -} -#endif - -#if !defined(FUNCTION_scramble) - -/* default scramble functionality */ -inline void scramble(FIXP_DBL *x, INT n) -{ - INT m,k,j; - FDK_ASSERT(!(((UINT64)x)&(ALIGNMENT_DEFAULT-1))); - - for (m=1,j=0; m>1; (!((j^=k)&k)); k>>=1);} - - if (j>m) - { - FIXP_DBL tmp; - tmp=x[2*m]; - x[2*m]=x[2*j]; - x[2*j]=tmp; - - tmp=x[2*m+1]; - x[2*m+1]=x[2*j+1]; - x[2*j+1]=tmp; - } - } -} -#endif /* !defined(FUNCTION_scramble) */ - -#endif /* SCRAMBLE_H */ diff --git a/libFDK/include/x86/abs_x86.h b/libFDK/include/x86/abs_x86.h deleted file mode 100644 index 96374ec..0000000 --- a/libFDK/include/x86/abs_x86.h +++ /dev/null @@ -1,106 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ -#if defined(__x86__) - - #if defined(__x86_64__) - - inline INT fixabs_D(INT x) { return ((x) > (INT)(0)) ? (x) : -(x) ; } - inline INT fixabs_S(INT x) { return ((x) > (INT)(0)) ? (x) : -(x) ; } - - #define fixabs_I(x) fixabs_D(x) - - #define FUNCTION_fixabs_S - #define FUNCTION_fixabs_D - #define FUNCTION_fixabs_I - - #endif /* __x86_64__ */ - -#endif /*__x86__ */ - diff --git a/libFDK/include/x86/clz_x86.h b/libFDK/include/x86/clz_x86.h deleted file mode 100644 index 1bc43e5..0000000 --- a/libFDK/include/x86/clz_x86.h +++ /dev/null @@ -1,154 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - -#if defined(__GNUC__) && (defined(__x86__) || defined(__x86_64__)) - - #define FUNCTION_fixnormz_D - #define FUNCTION_fixnorm_D - - inline INT fixnormz_D(LONG value) - { - INT result; - - if (value != 0) { - result = __builtin_clz(value); - } else { - result = 32; - } - return result; - } - - inline INT fixnorm_D(LONG value) - { - INT result; - if (value == 0) { - return 0; - } - if (value < 0) { - value = ~value; - } - result = fixnormz_D(value); - return result - 1; - } - - -#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) - -#include - - #define FUNCTION_fixnormz_D - #define FUNCTION_fixnorm_D - - inline INT fixnormz_D(LONG value) - { - unsigned long result = 0; - unsigned char err; - err = _BitScanReverse(&result, value); - if (err) { - return 31 - result; - } else { - return 32; - } - } - - inline INT fixnorm_D(LONG value) - { - INT result; - if (value == 0) { - return 0; - } - if (value < 0) { - value = ~value; - } - result = fixnormz_D(value); - return result - 1; - } - -#endif /* toolchain */ diff --git a/libFDK/include/x86/fixmul_x86.h b/libFDK/include/x86/fixmul_x86.h deleted file mode 100644 index 7b74cc7..0000000 --- a/libFDK/include/x86/fixmul_x86.h +++ /dev/null @@ -1,178 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: fixed point intrinsics - -******************************************************************************/ - -#if defined(__x86__) - -#if defined(_MSC_VER) && defined(_M_IX86) -/* Intel x86 */ - -#define FUNCTION_fixmul_DD -#define FUNCTION_fixmuldiv2_DD -#define FUNCTION_fixmuldiv2BitExact_DD -#define fixmuldiv2BitExact_DD(a,b) fixmuldiv2_DD(a,b) -#define FUNCTION_fixmulBitExact_DD -#define fixmulBitExact_DD(a,b) fixmul_DD(a,b) - -#define FUNCTION_fixmuldiv2BitExact_DS -#define fixmuldiv2BitExact_DS(a,b) fixmuldiv2_DS(a,b) - -#define FUNCTION_fixmulBitExact_DS -#define fixmulBitExact_DS(a,b) fixmul_DS(a,b) - -inline INT fixmul_DD (INT a, const INT b) -{ - __asm - { - mov eax, a - imul b - shl edx, 1 - mov a, edx - } - return a ; -} - - -inline INT fixmuldiv2_DD (INT a, const INT b) -{ - __asm - { - mov eax, a - imul b - mov a, edx - } - return a ; -} - -/* ############################################################################# */ -#elif (defined(__GNUC__)||defined(__gnu_linux__)) && defined(__x86__) - -#define FUNCTION_fixmul_DD -#define FUNCTION_fixmuldiv2_DD - -#define FUNCTION_fixmuldiv2BitExact_DD -#define fixmuldiv2BitExact_DD(a,b) fixmuldiv2_DD(a,b) - -#define FUNCTION_fixmulBitExact_DD -#define fixmulBitExact_DD(a,b) fixmul_DD(a,b) - -#define FUNCTION_fixmuldiv2BitExact_DS -#define fixmuldiv2BitExact_DS(a,b) fixmuldiv2_DS(a,b) - -#define FUNCTION_fixmulBitExact_DS -#define fixmulBitExact_DS(a,b) fixmul_DS(a,b) - -inline INT fixmul_DD (INT a, const INT b) -{ - INT result; - - asm( "imul %2;\n" - "shl $1, %0;\n" - : "=d"(result), "+a"(a) - : "r"(b) ); - - return result; -} - - -inline INT fixmuldiv2_DD (INT a, const INT b) -{ - INT result; - - asm ( "imul %2;" - : "=d"(result), "+a"(a) - : "r"(b) ); - - return result; -} - -#endif /* (defined(__GNUC__)||defined(__gnu_linux__)) && defined(__x86__) */ - -#endif /* __x86__ */ - diff --git a/libFDK/src/FDK_bitbuffer.cpp b/libFDK/src/FDK_bitbuffer.cpp deleted file mode 100644 index 680ceae..0000000 --- a/libFDK/src/FDK_bitbuffer.cpp +++ /dev/null @@ -1,480 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools *********************** - - Author(s): M. Lohwasser - Description: common bitbuffer read/write routines - -******************************************************************************/ - -#include "FDK_bitbuffer.h" - - - - -#include "genericStds.h" -#include "common_fix.h" -#include "fixminmax.h" - -const UINT BitMask [32+1] = -{ - 0x0, 0x1, 0x3, 0x7, - 0xf, 0x1f, 0x3f, 0x7f, - 0xff, 0x1ff, 0x3ff, 0x7ff, - 0xfff, 0x1fff, 0x3fff, 0x7fff, - 0xffff, 0x1ffff, 0x3ffff, 0x7ffff, - 0xfffff, 0x1fffff, 0x3fffff, 0x7fffff, - 0xffffff, 0x1ffffff, 0x3ffffff, 0x7ffffff, - 0xfffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, - 0xffffffff -}; - -const UINT *const RESTRICT pBitMask = BitMask; - -void FDK_CreateBitBuffer (HANDLE_FDK_BITBUF *hBitBuf, UCHAR *pBuffer, - UINT bufSize) -{ - FDK_InitBitBuffer (*hBitBuf, pBuffer, bufSize, 0); - - FDKmemclear((*hBitBuf)->Buffer, bufSize*sizeof(UCHAR)); -} - -void FDK_DeleteBitBuffer (HANDLE_FDK_BITBUF hBitBuf) { ; } - -void FDK_InitBitBuffer (HANDLE_FDK_BITBUF hBitBuf, UCHAR *pBuffer, - UINT bufSize, UINT validBits) -{ - hBitBuf->ValidBits = validBits ; - hBitBuf->ReadOffset = 0 ; - hBitBuf->WriteOffset = 0 ; - hBitBuf->BitCnt = 0 ; - hBitBuf->BitNdx = 0 ; - - hBitBuf->Buffer = pBuffer ; - hBitBuf->bufSize = bufSize ; - hBitBuf->bufBits = (bufSize << 3) ; -#if defined(FDK_DEBUG) || defined(DEBUG) - /*assure bufsize (2^n) */ - if (bufSize!=0) { - UINT x = 0, n=bufSize; - for (x=0; n>0; x++,n>>=1) {} - if ( bufSize != (1<<(x-1)) ) { - FDKprintfErr("Error: bufSizein FDK_InitBitBuffer() != (2^n), %d\n", bufSize); - } - } -#endif -} - -void FDK_ResetBitBuffer ( HANDLE_FDK_BITBUF hBitBuf ) -{ - hBitBuf->ValidBits = 0 ; - hBitBuf->ReadOffset = 0 ; - hBitBuf->WriteOffset = 0 ; - hBitBuf->BitCnt = 0 ; - hBitBuf->BitNdx = 0 ; -} - -INT FDK_get (HANDLE_FDK_BITBUF hBitBuf, const UINT numberOfBits) -{ - UINT byteOffset = hBitBuf->BitNdx >> 3 ; - UINT bitOffset = hBitBuf->BitNdx & 0x07 ; - - hBitBuf->BitNdx = (hBitBuf->BitNdx + numberOfBits) & (hBitBuf->bufBits - 1) ; - hBitBuf->BitCnt += numberOfBits ; - hBitBuf->ValidBits -= numberOfBits ; - - UINT byteMask = hBitBuf->bufSize - 1 ; - - UINT tx = (hBitBuf->Buffer [ byteOffset & byteMask] << 24) | - (hBitBuf->Buffer [(byteOffset+1) & byteMask] << 16) | - (hBitBuf->Buffer [(byteOffset+2) & byteMask] << 8) | - hBitBuf->Buffer [(byteOffset+3) & byteMask]; - - if (bitOffset) - { - tx <<= bitOffset; - tx |= hBitBuf->Buffer [(byteOffset+4) & byteMask] >> (8-bitOffset); - } - - return (tx >> (32 - numberOfBits)) ; -} - -INT FDK_get32 (HANDLE_FDK_BITBUF hBitBuf) -{ - UINT BitNdx = hBitBuf->BitNdx + 32; - if (BitNdx <= hBitBuf->bufBits) - { - hBitBuf->BitNdx = BitNdx; - hBitBuf->BitCnt += 32; - hBitBuf->ValidBits -= 32; - - UINT byteOffset = (BitNdx-1) >> 3; - UINT cache = (hBitBuf->Buffer[(byteOffset-3)] << 24) | - (hBitBuf->Buffer[(byteOffset-2)] << 16) | - (hBitBuf->Buffer[(byteOffset-1)] << 8) | - hBitBuf->Buffer[(byteOffset-0)]; - - if ( (BitNdx = (BitNdx&7)) != 0 ) { - cache = (cache >> (8-BitNdx)) | ((UINT)hBitBuf->Buffer [byteOffset-4] << (24+BitNdx)); - } - return (cache) ; - } - else - { - /* exotic path, used only at the end of the buffer, when wrapping around */ - int nBits = (INT)hBitBuf->bufBits-(INT)hBitBuf->BitNdx; - - UINT cache = FDK_get (hBitBuf,nBits)<< (32-nBits); - cache |= (FDK_get (hBitBuf,32-nBits)); - return (cache); - } -} - -INT FDK_getBwd (HANDLE_FDK_BITBUF hBitBuf, const UINT numberOfBits) -{ - UINT byteOffset = hBitBuf->BitNdx >> 3 ; - UINT bitOffset = hBitBuf->BitNdx & 0x07 ; - UINT byteMask = hBitBuf->bufSize - 1 ; - int i; - - hBitBuf->BitNdx = (hBitBuf->BitNdx - numberOfBits) & (hBitBuf->bufBits - 1) ; - hBitBuf->BitCnt -= numberOfBits ; - hBitBuf->ValidBits += numberOfBits ; - - UINT tx = hBitBuf->Buffer [(byteOffset-3) & byteMask] << 24 | - hBitBuf->Buffer [(byteOffset-2) & byteMask] << 16 | - hBitBuf->Buffer [(byteOffset-1) & byteMask] << 8 | - hBitBuf->Buffer [ byteOffset & byteMask] ; - UINT txa = 0x0; - - tx >>= (8 - bitOffset) ; - - if (bitOffset && numberOfBits > 24) - { - tx |= hBitBuf->Buffer [(byteOffset-4) & byteMask] << (24 + bitOffset) ; - } - - /* in place turn around */ - for (i = 0; i < 16; i++) { - UINT bitMaskR = 0x00000001 << i; - UINT bitMaskL = 0x80000000 >> i; - - txa |= (tx & bitMaskR) << (31 - (i<<1)); - txa |= (tx & bitMaskL) >> (31 - (i<<1)); - } - - return (txa >> (32 - numberOfBits)) ; -} - -void FDK_put (HANDLE_FDK_BITBUF hBitBuf, UINT value, const UINT numberOfBits) -{ - UINT byteOffset = hBitBuf->BitNdx >> 3 ; - UINT bitOffset = hBitBuf->BitNdx & 0x07 ; - - hBitBuf->BitNdx = (hBitBuf->BitNdx + numberOfBits) & (hBitBuf->bufBits - 1) ; - hBitBuf->BitCnt += numberOfBits ; - hBitBuf->ValidBits += numberOfBits ; - - UINT byteMask = hBitBuf->bufSize - 1 ; - - UINT tmp = value<<(32-numberOfBits)>>bitOffset; - UINT mask = ~BitMask[(32-bitOffset)] | (BitMask [(32-numberOfBits)] >> bitOffset) ; - - hBitBuf->Buffer [ byteOffset & byteMask] = (hBitBuf->Buffer [ byteOffset & byteMask]&(mask>>24)) | (UCHAR)(tmp>>24); - hBitBuf->Buffer [(byteOffset+1) & byteMask] = (hBitBuf->Buffer [(byteOffset+1) & byteMask]&(mask>>16)) | (UCHAR)(tmp>>16); - hBitBuf->Buffer [(byteOffset+2) & byteMask] = (hBitBuf->Buffer [(byteOffset+2) & byteMask]&(mask>>8)) | (UCHAR)(tmp>>8); - hBitBuf->Buffer [(byteOffset+3) & byteMask] = (hBitBuf->Buffer [(byteOffset+3) & byteMask]&(mask)) | (UCHAR)(tmp); - - if (bitOffset && numberOfBits > 24) - { - hBitBuf->Buffer [(byteOffset+4) & byteMask] = (UCHAR)(value<<(40-numberOfBits)>>bitOffset) | - ( hBitBuf->Buffer [(byteOffset+4) & byteMask] & BitMask[(40-numberOfBits-bitOffset)] ) ; - } -} - -void FDK_putBwd (HANDLE_FDK_BITBUF hBitBuf, UINT value, const UINT numberOfBits) -{ - UINT byteOffset = hBitBuf->BitNdx >> 3 ; - UINT bitOffset = 7 - (hBitBuf->BitNdx & 0x07) ; - UINT byteMask = hBitBuf->bufSize - 1 ; - - UINT mask = ~(BitMask[numberOfBits] << bitOffset) ; - UINT tmp = 0x0000; - int i; - - hBitBuf->BitNdx = (hBitBuf->BitNdx - numberOfBits) & (hBitBuf->bufBits - 1) ; - hBitBuf->BitCnt -= numberOfBits ; - hBitBuf->ValidBits -= numberOfBits ; - - /* in place turn around */ - for (i = 0; i < 16; i++) { - UINT bitMaskR = 0x00000001 << i; - UINT bitMaskL = 0x80000000 >> i; - - tmp |= (value & bitMaskR) << (31 - (i<<1)); - tmp |= (value & bitMaskL) >> (31 - (i<<1)); - } - value = tmp; - tmp = value>>(32-numberOfBits)<Buffer [ byteOffset & byteMask] = (hBitBuf->Buffer [ byteOffset & byteMask]&(mask)) | (UCHAR)(tmp); - hBitBuf->Buffer [(byteOffset-1) & byteMask] = (hBitBuf->Buffer [(byteOffset-1) & byteMask]&(mask>>8)) | (UCHAR)(tmp>>8); - hBitBuf->Buffer [(byteOffset-2) & byteMask] = (hBitBuf->Buffer [(byteOffset-2) & byteMask]&(mask>>16)) | (UCHAR)(tmp>>16); - hBitBuf->Buffer [(byteOffset-3) & byteMask] = (hBitBuf->Buffer [(byteOffset-3) & byteMask]&(mask>>24)) | (UCHAR)(tmp>>24); - - if ((bitOffset + numberOfBits) > 32) - { - hBitBuf->Buffer [(byteOffset-4) & byteMask] = (UCHAR)(value>>(64-numberOfBits-bitOffset)) | - ( hBitBuf->Buffer [(byteOffset-4) & byteMask] & ~(BitMask[bitOffset] >> (32-numberOfBits)) ) ; - } -} - - -void FDK_pushBack (HANDLE_FDK_BITBUF hBitBuf, const UINT numberOfBits, UCHAR config) -{ - hBitBuf->BitCnt -= numberOfBits ; - hBitBuf->ValidBits += (config==0) ? numberOfBits : (-(INT)numberOfBits) ; - hBitBuf->BitNdx = (hBitBuf->BitNdx - numberOfBits) & (hBitBuf->bufBits - 1) ; -} - -void FDK_pushForward (HANDLE_FDK_BITBUF hBitBuf, const UINT numberOfBits, UCHAR config) -{ - hBitBuf->BitCnt += numberOfBits ; - hBitBuf->ValidBits -= (config==0) ? numberOfBits : (-(INT)numberOfBits) ; - hBitBuf->BitNdx = (hBitBuf->BitNdx + numberOfBits) & (hBitBuf->bufBits - 1) ; -} - - -void FDK_byteAlign (HANDLE_FDK_BITBUF hBitBuf, UCHAR config) -{ - INT alignment = hBitBuf->BitCnt & 0x07 ; - - if (alignment) - { - if (config==0) - FDK_pushForward (hBitBuf, 8 - alignment, config) ; /* BS_READER */ - else - FDK_put (hBitBuf,0 , 8 - alignment) ; /* BS_WRITER */ - } - - hBitBuf->BitCnt = 0 ; -} - -UINT FDK_getValidBits (HANDLE_FDK_BITBUF hBitBuf) -{ - return hBitBuf->ValidBits; -} - -INT FDK_getFreeBits (HANDLE_FDK_BITBUF hBitBuf) -{ - return (hBitBuf->bufBits - hBitBuf->ValidBits) ; -} - -void FDK_setBitCnt (HANDLE_FDK_BITBUF hBitBuf, const UINT value) -{ - hBitBuf->BitCnt = value ; -} - -INT FDK_getBitCnt (HANDLE_FDK_BITBUF hBitBuf) -{ - return hBitBuf->BitCnt ; -} - -void FDK_Feed(HANDLE_FDK_BITBUF hBitBuf, - UCHAR *RESTRICT inputBuffer, - const UINT bufferSize, - UINT *bytesValid) -{ - inputBuffer = &inputBuffer [bufferSize - *bytesValid] ; - - UINT bTotal = 0 ; - - UINT bToRead = (hBitBuf->bufBits - hBitBuf->ValidBits) >> 3 ; - UINT noOfBytes = fMin(bToRead, *bytesValid); //(bToRead < *bytesValid) ? bToRead : *bytesValid ; - - while (noOfBytes > 0) - { - /* split read to buffer size */ - bToRead = hBitBuf->bufSize - hBitBuf->ReadOffset ; - bToRead = fMin(bToRead, noOfBytes); //(bToRead < noOfBytes) ? bToRead : noOfBytes ; - - /* copy 'bToRead' bytes from 'ptr' to inputbuffer */ - FDKmemcpy(&hBitBuf->Buffer[hBitBuf->ReadOffset], inputBuffer, bToRead*sizeof(UCHAR)); - - /* add noOfBits to number of valid bits in buffer */ - hBitBuf->ValidBits += bToRead << 3 ; - bTotal += bToRead ; - inputBuffer += bToRead ; - - hBitBuf->ReadOffset = (hBitBuf->ReadOffset + bToRead) & (hBitBuf->bufSize - 1) ; - noOfBytes -= bToRead ; - } - - *bytesValid -= bTotal ; -} - -void CopyAlignedBlock (HANDLE_FDK_BITBUF h_BitBufSrc, UCHAR *RESTRICT dstBuffer, UINT bToRead) -{ - UINT byteOffset = h_BitBufSrc->BitNdx >> 3 ; - const UINT byteMask = h_BitBufSrc->bufSize - 1 ; - - UCHAR *RESTRICT pBBB = h_BitBufSrc->Buffer; - for (UINT i = 0 ; i < bToRead ; i++) - { - dstBuffer[i] = pBBB[(byteOffset+i) & byteMask] ; - } - - bToRead <<= 3 ; - - h_BitBufSrc->BitNdx = (h_BitBufSrc->BitNdx + bToRead) & (h_BitBufSrc->bufBits - 1) ; - h_BitBufSrc->BitCnt += bToRead ; - h_BitBufSrc->ValidBits -= bToRead ; -} - -void FDK_Copy (HANDLE_FDK_BITBUF h_BitBufDst, HANDLE_FDK_BITBUF h_BitBufSrc, UINT *bytesValid) -{ - INT bTotal = 0; - - /* limit noOfBytes to valid bytes in src buffer and available bytes in dst buffer */ - UINT bToRead = h_BitBufSrc->ValidBits >> 3 ; - UINT noOfBytes = fMin(bToRead, *bytesValid); //(*bytesValid < bToRead) ? *bytesValid : bToRead ; - bToRead = FDK_getFreeBits(h_BitBufDst); - noOfBytes = fMin(bToRead, noOfBytes); //(bToRead < noOfBytes) ? bToRead : noOfBytes; - - while (noOfBytes > 0) - { - /* Split Read to buffer size */ - bToRead = h_BitBufDst->bufSize - h_BitBufDst->ReadOffset ; - bToRead = fMin(noOfBytes, bToRead); //(noOfBytes < bToRead) ? noOfBytes : bToRead ; - - /* copy 'bToRead' bytes from buffer to buffer */ - if (!(h_BitBufSrc->BitNdx & 0x07)) { - CopyAlignedBlock (h_BitBufSrc, h_BitBufDst->Buffer + h_BitBufDst->ReadOffset, bToRead) ; - } else { - for (UINT i = 0; i < bToRead; i++) - { - h_BitBufDst->Buffer [h_BitBufDst->ReadOffset + i] = (UCHAR)FDK_get(h_BitBufSrc,8); - } - } - - /* add noOfBits to number of valid bits in buffer */ - h_BitBufDst->ValidBits += bToRead << 3 ; - bTotal += bToRead; - - h_BitBufDst->ReadOffset = (h_BitBufDst->ReadOffset + bToRead) & (h_BitBufDst->bufSize-1); - noOfBytes -= bToRead; - } - - *bytesValid -=bTotal; -} - -void FDK_Fetch (HANDLE_FDK_BITBUF hBitBuf, UCHAR *outBuf, UINT *writeBytes) -{ - UCHAR *RESTRICT outputBuffer = outBuf; - UINT bTotal = 0 ; - - UINT bToWrite = (hBitBuf->ValidBits) >> 3 ; - UINT noOfBytes = fMin(bToWrite, *writeBytes); //(bToWrite < *writeBytes) ? bToWrite : *writeBytes ; - - while (noOfBytes > 0) - { - /* split write to buffer size */ - bToWrite = hBitBuf->bufSize - hBitBuf->WriteOffset ; - bToWrite = fMin(bToWrite, noOfBytes); //(bToWrite < noOfBytes) ? bToWrite : noOfBytes ; - - /* copy 'bToWrite' bytes from bitbuffer to outputbuffer */ - FDKmemcpy(outputBuffer, &hBitBuf->Buffer[hBitBuf->WriteOffset], bToWrite*sizeof(UCHAR)); - - /* sub noOfBits from number of valid bits in buffer */ - hBitBuf->ValidBits -= bToWrite << 3 ; - bTotal += bToWrite ; - outputBuffer += bToWrite ; - - hBitBuf->WriteOffset = (hBitBuf->WriteOffset + bToWrite) & (hBitBuf->bufSize - 1) ; - noOfBytes -= bToWrite ; - } - - *writeBytes = bTotal ; -} - diff --git a/libFDK/src/FDK_core.cpp b/libFDK/src/FDK_core.cpp deleted file mode 100644 index 6db648d..0000000 --- a/libFDK/src/FDK_core.cpp +++ /dev/null @@ -1,128 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools *********************** - - Author(s): Manuel Jander - Description: FDK tools versioning support - -******************************************************************************/ - -#include "FDK_core.h" - -/* FDK tools library info */ -#define FDK_TOOLS_LIB_VL0 2 -#define FDK_TOOLS_LIB_VL1 3 -#define FDK_TOOLS_LIB_VL2 2 -#define FDK_TOOLS_LIB_TITLE "FDK Tools" -#define FDK_TOOLS_LIB_BUILD_DATE __DATE__ -#define FDK_TOOLS_LIB_BUILD_TIME __TIME__ - -int FDK_toolsGetLibInfo(LIB_INFO *info) -{ - UINT v; - int i; - - if (info == NULL) { - return -1; - } - - /* search for next free tab */ - i = FDKlibInfo_lookup(info, FDK_TOOLS); - if (i<0) return -1; - - info += i; - - v = LIB_VERSION(FDK_TOOLS_LIB_VL0, FDK_TOOLS_LIB_VL1, FDK_TOOLS_LIB_VL2); - - FDKsprintf(info->versionStr, "%d.%d.%d", ((v >> 24) & 0xff), ((v >> 16) & 0xff), ((v >> 8 ) & 0xff)); - - info->module_id = FDK_TOOLS; - info->version = v; - info->build_date = (char *)FDK_TOOLS_LIB_BUILD_DATE; - info->build_time = (char *)FDK_TOOLS_LIB_BUILD_TIME; - info->title = (char *)FDK_TOOLS_LIB_TITLE; - info->flags = 0; - - return 0; -} diff --git a/libFDK/src/FDK_crc.cpp b/libFDK/src/FDK_crc.cpp deleted file mode 100644 index a4c6900..0000000 --- a/libFDK/src/FDK_crc.cpp +++ /dev/null @@ -1,543 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/******************************** MPEG Audio Encoder ************************** - - Initial author: - contents/description: CRC calculation - -******************************************************************************/ -#include -#include "FDK_crc.h" - - - -/*---------------- constants -----------------------*/ - -/** - * \brief This table defines precalculated lookup tables for crc polynom x^16 + x^15 + x^2 + x^0. - */ -static const USHORT crcLookup_16_15_2_0[256] = -{ - 0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011, - 0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022, - 0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072, - 0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041, - 0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2, - 0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1, - 0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1, - 0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082, - 0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192, - 0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1, - 0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1, - 0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2, - 0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151, - 0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162, - 0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132, - 0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101, - 0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312, - 0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321, - 0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371, - 0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342, - 0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1, - 0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2, - 0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2, - 0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381, - 0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291, - 0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2, - 0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2, - 0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1, - 0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252, - 0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261, - 0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231, - 0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202 -}; -#if 1 -/** - * \brief This table defines precalculated lookup tables for crc polynom x^16 + x^12 + x^5 + x^0. - */ -static const USHORT crcLookup_16_12_5_0[256] = -{ - 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, - 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, - 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, - 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, - 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, - 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, - 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, - 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, - 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, - 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, - 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, - 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, - 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, - 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, - 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, - 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, - 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, - 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, - 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, - 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, - 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, - 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, - 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, - 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, - 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, - 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, - 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, - 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, - 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, - 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, - 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, - 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 -}; -#else -static const USHORT crcLookup_16_12_5_0[256] = -{ - 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, - 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, - 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, - 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, - 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, - 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, - 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, - 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, - 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, - 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, - 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, - 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, - 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, - 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, - 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, - 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, - 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, - 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, - 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, - 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, - 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, - 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, - 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, - 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, - 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, - 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, - 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, - 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, - 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, - 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, - 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, - 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 -}; -#endif - - -/** - * \brief This table defines precalculated lookup tables for crc polynom x^16 + x^14 + x^13 + x^12 + x^11 + x^5 + x^3 + x^2 + x^0. - */ -static const USHORT crcLookup_16_14_13_12_11_5_3_2_0[256] = -{ - 0x0000, 0x782f, 0xf05e, 0x8871, 0x9893, 0xe0bc, 0x68cd, 0x10e2, - 0x4909, 0x3126, 0xb957, 0xc178, 0xd19a, 0xa9b5, 0x21c4, 0x59eb, - 0x9212, 0xea3d, 0x624c, 0x1a63, 0x0a81, 0x72ae, 0xfadf, 0x82f0, - 0xdb1b, 0xa334, 0x2b45, 0x536a, 0x4388, 0x3ba7, 0xb3d6, 0xcbf9, - 0x5c0b, 0x2424, 0xac55, 0xd47a, 0xc498, 0xbcb7, 0x34c6, 0x4ce9, - 0x1502, 0x6d2d, 0xe55c, 0x9d73, 0x8d91, 0xf5be, 0x7dcf, 0x05e0, - 0xce19, 0xb636, 0x3e47, 0x4668, 0x568a, 0x2ea5, 0xa6d4, 0xdefb, - 0x8710, 0xff3f, 0x774e, 0x0f61, 0x1f83, 0x67ac, 0xefdd, 0x97f2, - 0xb816, 0xc039, 0x4848, 0x3067, 0x2085, 0x58aa, 0xd0db, 0xa8f4, - 0xf11f, 0x8930, 0x0141, 0x796e, 0x698c, 0x11a3, 0x99d2, 0xe1fd, - 0x2a04, 0x522b, 0xda5a, 0xa275, 0xb297, 0xcab8, 0x42c9, 0x3ae6, - 0x630d, 0x1b22, 0x9353, 0xeb7c, 0xfb9e, 0x83b1, 0x0bc0, 0x73ef, - 0xe41d, 0x9c32, 0x1443, 0x6c6c, 0x7c8e, 0x04a1, 0x8cd0, 0xf4ff, - 0xad14, 0xd53b, 0x5d4a, 0x2565, 0x3587, 0x4da8, 0xc5d9, 0xbdf6, - 0x760f, 0x0e20, 0x8651, 0xfe7e, 0xee9c, 0x96b3, 0x1ec2, 0x66ed, - 0x3f06, 0x4729, 0xcf58, 0xb777, 0xa795, 0xdfba, 0x57cb, 0x2fe4, - 0x0803, 0x702c, 0xf85d, 0x8072, 0x9090, 0xe8bf, 0x60ce, 0x18e1, - 0x410a, 0x3925, 0xb154, 0xc97b, 0xd999, 0xa1b6, 0x29c7, 0x51e8, - 0x9a11, 0xe23e, 0x6a4f, 0x1260, 0x0282, 0x7aad, 0xf2dc, 0x8af3, - 0xd318, 0xab37, 0x2346, 0x5b69, 0x4b8b, 0x33a4, 0xbbd5, 0xc3fa, - 0x5408, 0x2c27, 0xa456, 0xdc79, 0xcc9b, 0xb4b4, 0x3cc5, 0x44ea, - 0x1d01, 0x652e, 0xed5f, 0x9570, 0x8592, 0xfdbd, 0x75cc, 0x0de3, - 0xc61a, 0xbe35, 0x3644, 0x4e6b, 0x5e89, 0x26a6, 0xaed7, 0xd6f8, - 0x8f13, 0xf73c, 0x7f4d, 0x0762, 0x1780, 0x6faf, 0xe7de, 0x9ff1, - 0xb015, 0xc83a, 0x404b, 0x3864, 0x2886, 0x50a9, 0xd8d8, 0xa0f7, - 0xf91c, 0x8133, 0x0942, 0x716d, 0x618f, 0x19a0, 0x91d1, 0xe9fe, - 0x2207, 0x5a28, 0xd259, 0xaa76, 0xba94, 0xc2bb, 0x4aca, 0x32e5, - 0x6b0e, 0x1321, 0x9b50, 0xe37f, 0xf39d, 0x8bb2, 0x03c3, 0x7bec, - 0xec1e, 0x9431, 0x1c40, 0x646f, 0x748d, 0x0ca2, 0x84d3, 0xfcfc, - 0xa517, 0xdd38, 0x5549, 0x2d66, 0x3d84, 0x45ab, 0xcdda, 0xb5f5, - 0x7e0c, 0x0623, 0x8e52, 0xf67d, 0xe69f, 0x9eb0, 0x16c1, 0x6eee, - 0x3705, 0x4f2a, 0xc75b, 0xbf74, 0xaf96, 0xd7b9, 0x5fc8, 0x27e7, -}; - -/*--------------- function declarations --------------------*/ - -static inline INT calcCrc_Bits( - USHORT * const pCrc, - USHORT crcMask, - USHORT crcPoly, - HANDLE_FDK_BITSTREAM hBs, - INT nBits - ); - -static inline INT calcCrc_Bytes( - USHORT * const pCrc, - const USHORT * pCrcLookup, - HANDLE_FDK_BITSTREAM hBs, - INT nBytes - ); - -static void crcCalc( - HANDLE_FDK_CRCINFO hCrcInfo, - HANDLE_FDK_BITSTREAM hBs, - const INT reg - ); - - -/*------------- function definitions ----------------*/ - -void FDKcrcInit( - HANDLE_FDK_CRCINFO hCrcInfo, - const UINT crcPoly, - const UINT crcStartValue, - const UINT crcLen - ) -{ - /* crc polynom example: - DAB+ FireCode: - x^16 + x^14 + x^13 + x^12 + x^11 + x^5 + x^3 + x^2 + x^0 - (1) 0111 1000 0010 1101 -> 0x782d - - x^16 + x^15 + x^2 + x^0 (1) 1000 0000 0000 0101 -> 0x8005 - x^16 + x^12 + x^5 + x^0 (1) 0001 0000 0010 0001 -> 0x1021 - x^8 + x^4 + x^3 + x^2 + x^0 (1) 0001 1101 -> 0x001d */ - - hCrcInfo->crcLen = crcLen; - hCrcInfo->crcPoly = crcPoly; - hCrcInfo->startValue = crcStartValue; - hCrcInfo->crcMask = (crcLen) ? (1<<(crcLen-1)) : 0; - - FDKcrcReset(hCrcInfo); - - hCrcInfo->pCrcLookup = 0; - - if (hCrcInfo->crcLen==16) { - switch ( crcPoly ) { - case 0x8005: - hCrcInfo->pCrcLookup = crcLookup_16_15_2_0; - break; - case 0x1021: - hCrcInfo->pCrcLookup = crcLookup_16_12_5_0; - break; - case 0x782d: - hCrcInfo->pCrcLookup = crcLookup_16_14_13_12_11_5_3_2_0; - break; - case 0x001d: - default: - /* no lookup table */ - hCrcInfo->pCrcLookup = 0; - } - } - - -} - -void FDKcrcReset(HANDLE_FDK_CRCINFO hCrcInfo) -{ - int i; - - hCrcInfo->crcValue = hCrcInfo->startValue; - - for(i=0;icrcRegData[i].isActive = 0; - } - hCrcInfo->regStart = 0; - hCrcInfo->regStop = 0; -} - -INT FDKcrcStartReg( - HANDLE_FDK_CRCINFO hCrcInfo, - const HANDLE_FDK_BITSTREAM hBs, - const INT mBits - ) -{ - int reg = hCrcInfo->regStart; - - FDK_ASSERT(hCrcInfo->crcRegData[reg].isActive==0); - hCrcInfo->crcRegData[reg].isActive = 1; - hCrcInfo->crcRegData[reg].maxBits = mBits; - hCrcInfo->crcRegData[reg].validBits = FDKgetValidBits(hBs) ; - hCrcInfo->crcRegData[reg].bitBufCntBits = 0; - - hCrcInfo->regStart = (hCrcInfo->regStart+1)%MAX_CRC_REGS; - - return (reg); -} - -INT FDKcrcEndReg( - HANDLE_FDK_CRCINFO hCrcInfo, - const HANDLE_FDK_BITSTREAM hBs, - const INT reg - ) -{ - FDK_ASSERT((reg==(INT)hCrcInfo->regStop)&&(hCrcInfo->crcRegData[reg].isActive==1)); - - if (hBs->ConfigCache==BS_WRITER) { - hCrcInfo->crcRegData[reg].bitBufCntBits = FDKgetValidBits(hBs) - hCrcInfo->crcRegData[reg].validBits; - } - else { - hCrcInfo->crcRegData[reg].bitBufCntBits = hCrcInfo->crcRegData[reg].validBits - FDKgetValidBits(hBs); - } - - if (hCrcInfo->crcRegData[reg].maxBits == 0) { - hCrcInfo->crcRegData[reg].maxBits = hCrcInfo->crcRegData[reg].bitBufCntBits; - } - - crcCalc( hCrcInfo, hBs, reg); - - hCrcInfo->crcRegData[reg].isActive = 0; - hCrcInfo->regStop = (hCrcInfo->regStop+1)%MAX_CRC_REGS; - - return 0; -} - -USHORT FDKcrcGetCRC( - const HANDLE_FDK_CRCINFO hCrcInfo - ) -{ - return ( hCrcInfo->crcValue & (((hCrcInfo->crcMask-1)<<1)+1) ); -} - -/** - * \brief Calculate crc bits. - * - * Calculate crc starting at current bitstream postion over nBits. - * - * \param pCrc Pointer to an outlying allocated crc info structure. - * \param crcMask CrcMask in use. - * \param crcPoly Crc polynom in use. - * \param hBs Handle to current bit buffer structure. - * \param nBits Number of processing bits. - * - * \return Number of processed bits. - */ -static inline INT calcCrc_Bits( - USHORT * const pCrc, - USHORT crcMask, - USHORT crcPoly, - HANDLE_FDK_BITSTREAM hBs, - INT nBits - ) -{ - int i; - USHORT crc = *pCrc; /* get crc value */ - - if (hBs!=NULL) { - for (i = 0; (i < nBits); i++) { - USHORT tmp = FDKreadBits(hBs,1); // process single bit - tmp ^= ( (crc & crcMask) ? 1 : 0 ); - tmp *= crcPoly; - crc <<= 1; - crc ^= tmp; - } - } - else { - for (i = 0; (i < nBits); i++) { - USHORT tmp = 0; // process single bit - tmp ^= ( (crc & crcMask) ? 1 : 0 ); - tmp *= crcPoly; - crc <<= 1; - crc ^= tmp; - } - } - *pCrc = crc; /* update crc value */ - - return nBits; -} - -/** - * \brief Calculate crc bytes. - * - * Calculate crc starting at current bitstream postion over nBytes. - * - * \param pCrc Pointer to an outlying allocated crc info structure. - * \param pCrcLookup Pointer to lookup table used for fast crc calculation. - * \param hBs Handle to current bit buffer structure. - * \param nBits Number of processing bytes. - * - * \return Number of processed bits. - */ -static inline INT calcCrc_Bytes( - USHORT * const pCrc, - const USHORT * pCrcLookup, - HANDLE_FDK_BITSTREAM hBs, - INT nBytes - ) -{ - int i; - USHORT crc = *pCrc; /* get crc value */ - if (hBs!=NULL) { - for (i=0; i>8)^(FDKreadBits(hBs,8)))&0xFF]; - } - } - else { - for (i=0; i>8)^((UCHAR)0))&0xFF]; - } - } - - *pCrc = crc; /* update crc value */ - //fprintf(stderr, "\n\n crc[%d]=%04x\n", i, crc); - - return (i); -} - -/** - * \brief Calculate crc. - * - * Calculate crc. Lenght depends on mBits parameter in FDKcrcStartReg() configuration. - * - * \param hCrcInfo Pointer to an outlying allocated crc info structure. - * \param hBs Pointer to current bit buffer structure. - * \param reg Crc region ID. - * - * \return Number of processed bits. - */ -static void crcCalc( - HANDLE_FDK_CRCINFO hCrcInfo, - HANDLE_FDK_BITSTREAM hBs, - const INT reg - ) -{ - USHORT crc = hCrcInfo->crcValue; - CCrcRegData *rD = &hCrcInfo->crcRegData[reg]; - FDK_BITSTREAM bsReader; - - if (hBs->ConfigCache==BS_READER) { - bsReader = *hBs; - FDKpushBiDirectional(&bsReader, -(INT)(rD->validBits-FDKgetValidBits(&bsReader))); - } - else { - FDKinitBitStream(&bsReader, hBs->hBitBuf.Buffer, hBs->hBitBuf.bufSize, hBs->hBitBuf.ValidBits, BS_READER); - FDKpushBiDirectional(&bsReader, rD->validBits); - } - - int bits, rBits; - rBits = (rD->maxBits>=0) ? rD->maxBits : -rD->maxBits; /* remaining bits */ - if ((rD->maxBits>0) && (((INT)rD->bitBufCntBits>>3<<3)bitBufCntBits; - } - else { - bits = rBits; - } - - int words = bits >> 3; /* processing bytes */ - int mBits = bits & 0x7; /* modulo bits */ - - if(hCrcInfo->pCrcLookup) { - rBits -= (calcCrc_Bytes(&crc, hCrcInfo->pCrcLookup, &bsReader, words)<<3); - } - else { - rBits -= calcCrc_Bits(&crc, hCrcInfo->crcMask, hCrcInfo->crcPoly, &bsReader, words<<3 ); - } - - /* remaining valid bits*/ - if(mBits!=0) { - rBits -= calcCrc_Bits(&crc, hCrcInfo->crcMask, hCrcInfo->crcPoly, &bsReader, mBits ); - } - - if (rBits!=0) { - /* zero bytes */ - if ( (hCrcInfo->pCrcLookup) && (rBits>8) ) { - rBits -= (calcCrc_Bytes(&crc, hCrcInfo->pCrcLookup, NULL, rBits>>3)<<3); - } - /* remaining zero bits */ - if (rBits!=0) { - rBits -= calcCrc_Bits(&crc, hCrcInfo->crcMask, hCrcInfo->crcPoly, NULL, rBits ); - } - } - - //fprintf(stderr, "\n\n crc=%04x\n", crc); - hCrcInfo->crcValue = crc; -} - diff --git a/libFDK/src/FDK_hybrid.cpp b/libFDK/src/FDK_hybrid.cpp deleted file mode 100644 index 20816f5..0000000 --- a/libFDK/src/FDK_hybrid.cpp +++ /dev/null @@ -1,709 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): Markus Lohwasser - Description: FDK Tools Hybrid Filterbank - -******************************************************************************/ - -#include "FDK_hybrid.h" - - -#include "fft.h" - -/*--------------- defines -----------------------------*/ -#define FFT_IDX_R(a) (2*a) -#define FFT_IDX_I(a) (2*a+1) - -#define HYB_COEF8_0 ( 0.00746082949812f ) -#define HYB_COEF8_1 ( 0.02270420949825f ) -#define HYB_COEF8_2 ( 0.04546865930473f ) -#define HYB_COEF8_3 ( 0.07266113929591f ) -#define HYB_COEF8_4 ( 0.09885108575264f ) -#define HYB_COEF8_5 ( 0.11793710567217f ) -#define HYB_COEF8_6 ( 0.12500000000000f ) -#define HYB_COEF8_7 ( HYB_COEF8_5 ) -#define HYB_COEF8_8 ( HYB_COEF8_4 ) -#define HYB_COEF8_9 ( HYB_COEF8_3 ) -#define HYB_COEF8_10 ( HYB_COEF8_2 ) -#define HYB_COEF8_11 ( HYB_COEF8_1 ) -#define HYB_COEF8_12 ( HYB_COEF8_0 ) - - -/*--------------- structure definitions ---------------*/ - -#if defined(ARCH_PREFER_MULT_32x16) - #define FIXP_HTB FIXP_SGL /* SGL data type. */ - #define FIXP_HTP FIXP_SPK /* Packed SGL data type. */ - #define HTC(a) (FX_DBL2FXCONST_SGL(a)) /* Cast to SGL */ - #define FL2FXCONST_HTB FL2FXCONST_SGL -#else - #define FIXP_HTB FIXP_DBL /* SGL data type. */ - #define FIXP_HTP FIXP_DPK /* Packed DBL data type. */ - #define HTC(a) ((FIXP_DBL)(LONG)(a)) /* Cast to DBL */ - #define FL2FXCONST_HTB FL2FXCONST_DBL -#endif - -#define HTCP(real,imag) { { HTC(real), HTC(imag) } } /* How to arrange the packed values. */ - - -struct FDK_HYBRID_SETUP -{ - UCHAR nrQmfBands; /*!< Number of QMF bands to be converted to hybrid. */ - UCHAR nHybBands[3]; /*!< Number of Hybrid bands generated by nrQmfBands. */ - SCHAR kHybrid[3]; /*!< Filter configuration of each QMF band. */ - UCHAR protoLen; /*!< Prototype filter length. */ - UCHAR filterDelay; /*!< Delay caused by hybrid filter. */ - const INT *pReadIdxTable; /*!< Helper table to access input data ringbuffer. */ - -}; - -/*--------------- constants ---------------------------*/ -static const INT ringbuffIdxTab[2*13] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; - -static const FDK_HYBRID_SETUP setup_3_16 = { 3, { 8, 4, 4}, { 8, 4, 4}, 13, (13-1)/2, ringbuffIdxTab}; -static const FDK_HYBRID_SETUP setup_3_12 = { 3, { 8, 2, 2}, { 8, 2, 2}, 13, (13-1)/2, ringbuffIdxTab}; -static const FDK_HYBRID_SETUP setup_3_10 = { 3, { 6, 2, 2}, { -8, -2, 2}, 13, (13-1)/2, ringbuffIdxTab}; - - -static const FIXP_HTP HybFilterCoef8[] = { - HTCP(0x10000000, 0x00000000), HTCP(0x0df26407, 0xfa391882), HTCP(0xff532109, 0x00acdef7), HTCP(0x08f26d36, 0xf70d92ca), - HTCP(0xfee34b5f, 0x02af570f), HTCP(0x038f276e, 0xf7684793), HTCP(0x00000000, 0x05d1eac2), HTCP(0x00000000, 0x05d1eac2), - HTCP(0x038f276e, 0x0897b86d), HTCP(0xfee34b5f, 0xfd50a8f1), HTCP(0x08f26d36, 0x08f26d36), HTCP(0xff532109, 0xff532109), - HTCP(0x0df26407, 0x05c6e77e) -}; - -static const FIXP_HTB HybFilterCoef2[13] = { - FL2FXCONST_HTB( 0.00000000000000f), FL2FXCONST_HTB( 0.01899487526049f), FL2FXCONST_HTB( 0.00000000000000f), FL2FXCONST_HTB(-0.07293139167538f), FL2FXCONST_HTB( 0.00000000000000f), FL2FXCONST_HTB( 0.30596630545168f), - FL2FXCONST_HTB( 0.50000000000000f), FL2FXCONST_HTB( 0.30596630545168f), FL2FXCONST_HTB( 0.00000000000000f), FL2FXCONST_HTB(-0.07293139167538f), FL2FXCONST_HTB( 0.00000000000000f), FL2FXCONST_HTB( 0.01899487526049f), - FL2FXCONST_HTB( 0.00000000000000f) -}; - -static const FIXP_HTB HybFilterCoef4[13] = { - FL2FXCONST_HTB(-0.00305151927305f), FL2FXCONST_HTB(-0.00794862316203f), FL2FXCONST_HTB( 0.0f), FL2FXCONST_HTB( 0.04318924038756f), FL2FXCONST_HTB( 0.12542448210445f), FL2FXCONST_HTB( 0.21227807049160f), - FL2FXCONST_HTB( 0.25f), FL2FXCONST_HTB( 0.21227807049160f), FL2FXCONST_HTB( 0.12542448210445f), FL2FXCONST_HTB( 0.04318924038756f), FL2FXCONST_HTB( 0.0f), FL2FXCONST_HTB(-0.00794862316203f), - FL2FXCONST_HTB(-0.00305151927305f) -}; - -/*--------------- function declarations ---------------*/ -static INT kChannelFiltering( - const FIXP_DBL *const pQmfReal, - const FIXP_DBL *const pQmfImag, - const INT *const pReadIdx, - FIXP_DBL *const mHybridReal, - FIXP_DBL *const mHybridImag, - const SCHAR hybridConfig - ); - - -/*--------------- function definitions ----------------*/ - -INT FDKhybridAnalysisOpen( - HANDLE_FDK_ANA_HYB_FILTER hAnalysisHybFilter, - FIXP_DBL *const pLFmemory, - const UINT LFmemorySize, - FIXP_DBL *const pHFmemory, - const UINT HFmemorySize - ) -{ - INT err = 0; - - /* Save pointer to extern memory. */ - hAnalysisHybFilter->pLFmemory = pLFmemory; - hAnalysisHybFilter->LFmemorySize = LFmemorySize; - - hAnalysisHybFilter->pHFmemory = pHFmemory; - hAnalysisHybFilter->HFmemorySize = HFmemorySize; - - return err; -} - -INT FDKhybridAnalysisInit( - HANDLE_FDK_ANA_HYB_FILTER hAnalysisHybFilter, - const FDK_HYBRID_MODE mode, - const INT qmfBands, - const INT cplxBands, - const INT initStatesFlag - ) -{ - int k; - INT err = 0; - FIXP_DBL *pMem = NULL; - HANDLE_FDK_HYBRID_SETUP setup = NULL; - - switch (mode) { - case THREE_TO_TEN: setup = (HANDLE_FDK_HYBRID_SETUP)&setup_3_10; break; - case THREE_TO_TWELVE: setup = (HANDLE_FDK_HYBRID_SETUP)&setup_3_12; break; - case THREE_TO_SIXTEEN: setup = (HANDLE_FDK_HYBRID_SETUP)&setup_3_16; break; - default: err = -1; goto bail; - } - - /* Initialize handle. */ - hAnalysisHybFilter->pSetup = setup; - hAnalysisHybFilter->bufferLFpos = setup->protoLen-1; - hAnalysisHybFilter->bufferHFpos = 0; - hAnalysisHybFilter->nrBands = qmfBands; - hAnalysisHybFilter->cplxBands = cplxBands; - hAnalysisHybFilter->hfMode = 0; - - /* Check available memory. */ - if ( ((2*setup->nrQmfBands*setup->protoLen*sizeof(FIXP_DBL)) > hAnalysisHybFilter->LFmemorySize) - || ((setup->filterDelay*((qmfBands-setup->nrQmfBands)+(cplxBands-setup->nrQmfBands))*sizeof(FIXP_DBL)) > hAnalysisHybFilter->HFmemorySize) ) - { - err = -2; - goto bail; - } - - /* Distribut LF memory. */ - pMem = hAnalysisHybFilter->pLFmemory; - for (k=0; knrQmfBands; k++) { - hAnalysisHybFilter->bufferLFReal[k] = pMem; pMem += setup->protoLen; - hAnalysisHybFilter->bufferLFImag[k] = pMem; pMem += setup->protoLen; - } - - /* Distribut HF memory. */ - pMem = hAnalysisHybFilter->pHFmemory; - for (k=0; kfilterDelay; k++) { - hAnalysisHybFilter->bufferHFReal[k] = pMem; pMem += (qmfBands-setup->nrQmfBands); - hAnalysisHybFilter->bufferHFImag[k] = pMem; pMem += (cplxBands-setup->nrQmfBands); - } - - if (initStatesFlag) { - /* Clear LF buffer */ - for (k=0; knrQmfBands; k++) { - FDKmemclear(hAnalysisHybFilter->bufferLFReal[k], setup->protoLen*sizeof(FIXP_DBL)); - FDKmemclear(hAnalysisHybFilter->bufferLFImag[k], setup->protoLen*sizeof(FIXP_DBL)); - } - - if (qmfBands > setup->nrQmfBands) { - /* Clear HF buffer */ - for (k=0; kfilterDelay; k++) { - FDKmemclear(hAnalysisHybFilter->bufferHFReal[k], (qmfBands-setup->nrQmfBands)*sizeof(FIXP_DBL)); - FDKmemclear(hAnalysisHybFilter->bufferHFImag[k], (cplxBands-setup->nrQmfBands)*sizeof(FIXP_DBL)); - } - } - } - -bail: - return err; -} - -INT FDKhybridAnalysisScaleStates( - HANDLE_FDK_ANA_HYB_FILTER hAnalysisHybFilter, - const INT scalingValue - ) -{ - INT err = 0; - - if (hAnalysisHybFilter==NULL) { - err = 1; /* invalid handle */ - } - else { - int k; - HANDLE_FDK_HYBRID_SETUP setup = hAnalysisHybFilter->pSetup; - - /* Scale LF buffer */ - for (k=0; knrQmfBands; k++) { - scaleValues(hAnalysisHybFilter->bufferLFReal[k], setup->protoLen, scalingValue); - scaleValues(hAnalysisHybFilter->bufferLFImag[k], setup->protoLen, scalingValue); - } - if (hAnalysisHybFilter->nrBands > setup->nrQmfBands) { - /* Scale HF buffer */ - for (k=0; kfilterDelay; k++) { - scaleValues(hAnalysisHybFilter->bufferHFReal[k], (hAnalysisHybFilter->nrBands-setup->nrQmfBands), scalingValue); - scaleValues(hAnalysisHybFilter->bufferHFImag[k], (hAnalysisHybFilter->cplxBands-setup->nrQmfBands), scalingValue); - } - } - } - return err; -} - -INT FDKhybridAnalysisApply( - HANDLE_FDK_ANA_HYB_FILTER hAnalysisHybFilter, - const FIXP_DBL *const pQmfReal, - const FIXP_DBL *const pQmfImag, - FIXP_DBL *const pHybridReal, - FIXP_DBL *const pHybridImag) -{ - int k, hybOffset = 0; - INT err = 0; - const int nrQmfBandsLF = hAnalysisHybFilter->pSetup->nrQmfBands; /* number of QMF bands to be converted to hybrid */ - - const int writIndex = hAnalysisHybFilter->bufferLFpos; - int readIndex = hAnalysisHybFilter->bufferLFpos; - - if (++readIndex>=hAnalysisHybFilter->pSetup->protoLen) readIndex = 0; - const INT* pBufferLFreadIdx = &hAnalysisHybFilter->pSetup->pReadIdxTable[readIndex]; - - /* - * LF buffer. - */ - for (k=0; kbufferLFReal[k][writIndex] = pQmfReal[k]; - hAnalysisHybFilter->bufferLFImag[k][writIndex] = pQmfImag[k]; - - /* Perform hybrid filtering. */ - kChannelFiltering( - hAnalysisHybFilter->bufferLFReal[k], - hAnalysisHybFilter->bufferLFImag[k], - pBufferLFreadIdx, - pHybridReal+hybOffset, - pHybridImag+hybOffset, - hAnalysisHybFilter->pSetup->kHybrid[k]); - - hybOffset += hAnalysisHybFilter->pSetup->nHybBands[k]; - } - - hAnalysisHybFilter->bufferLFpos = readIndex; /* Index where to write next input sample. */ - - if (hAnalysisHybFilter->nrBands > nrQmfBandsLF) { - /* - * HF buffer. - */ - if (hAnalysisHybFilter->hfMode!=0) { - /* HF delay compensation was applied outside. */ - FDKmemcpy(pHybridReal+hybOffset, &pQmfReal[nrQmfBandsLF], (hAnalysisHybFilter->nrBands-nrQmfBandsLF)*sizeof(FIXP_DBL)); - FDKmemcpy(pHybridImag+hybOffset, &pQmfImag[nrQmfBandsLF], (hAnalysisHybFilter->cplxBands-nrQmfBandsLF)*sizeof(FIXP_DBL)); - } - else { - /* HF delay compensation, filterlength/2. */ - FDKmemcpy(pHybridReal+hybOffset, hAnalysisHybFilter->bufferHFReal[hAnalysisHybFilter->bufferHFpos], (hAnalysisHybFilter->nrBands-nrQmfBandsLF)*sizeof(FIXP_DBL)); - FDKmemcpy(pHybridImag+hybOffset, hAnalysisHybFilter->bufferHFImag[hAnalysisHybFilter->bufferHFpos], (hAnalysisHybFilter->cplxBands-nrQmfBandsLF)*sizeof(FIXP_DBL)); - - FDKmemcpy(hAnalysisHybFilter->bufferHFReal[hAnalysisHybFilter->bufferHFpos], &pQmfReal[nrQmfBandsLF], (hAnalysisHybFilter->nrBands-nrQmfBandsLF)*sizeof(FIXP_DBL)); - FDKmemcpy(hAnalysisHybFilter->bufferHFImag[hAnalysisHybFilter->bufferHFpos], &pQmfImag[nrQmfBandsLF], (hAnalysisHybFilter->cplxBands-nrQmfBandsLF)*sizeof(FIXP_DBL)); - - if (++hAnalysisHybFilter->bufferHFpos>=hAnalysisHybFilter->pSetup->filterDelay) hAnalysisHybFilter->bufferHFpos = 0; - } - } /* process HF part*/ - - return err; -} - -INT FDKhybridAnalysisClose( - HANDLE_FDK_ANA_HYB_FILTER hAnalysisHybFilter - ) -{ - INT err = 0; - - if (hAnalysisHybFilter != NULL) { - hAnalysisHybFilter->pLFmemory = NULL; - hAnalysisHybFilter->pHFmemory = NULL; - hAnalysisHybFilter->LFmemorySize = 0; - hAnalysisHybFilter->HFmemorySize = 0; - } - - return err; -} - -INT FDKhybridSynthesisInit( - HANDLE_FDK_SYN_HYB_FILTER hSynthesisHybFilter, - const FDK_HYBRID_MODE mode, - const INT qmfBands, - const INT cplxBands - ) -{ - INT err = 0; - HANDLE_FDK_HYBRID_SETUP setup = NULL; - - switch (mode) { - case THREE_TO_TEN: setup = (HANDLE_FDK_HYBRID_SETUP)&setup_3_10; break; - case THREE_TO_TWELVE: setup = (HANDLE_FDK_HYBRID_SETUP)&setup_3_12; break; - case THREE_TO_SIXTEEN: setup = (HANDLE_FDK_HYBRID_SETUP)&setup_3_16; break; - default: err = -1; goto bail; - } - - hSynthesisHybFilter->pSetup = setup; - hSynthesisHybFilter->nrBands = qmfBands; - hSynthesisHybFilter->cplxBands = cplxBands; - -bail: - return err; -} - - -INT FDKhybridSynthesisApply( - HANDLE_FDK_SYN_HYB_FILTER hSynthesisHybFilter, - const FIXP_DBL *const pHybridReal, - const FIXP_DBL *const pHybridImag, - FIXP_DBL *const pQmfReal, - FIXP_DBL *const pQmfImag - ) -{ - int k, n, hybOffset=0; - INT err = 0; - const INT nrQmfBandsLF = hSynthesisHybFilter->pSetup->nrQmfBands; - - /* - * LF buffer. - */ - for (k=0; kpSetup->nHybBands[k]; - - FIXP_DBL accu1 = FL2FXCONST_DBL(0.f); - FIXP_DBL accu2 = FL2FXCONST_DBL(0.f); - - /* Perform hybrid filtering. */ - for (n=0; nnrBands > nrQmfBandsLF) { - /* - * HF buffer. - */ - FDKmemcpy(&pQmfReal[nrQmfBandsLF], &pHybridReal[hybOffset], (hSynthesisHybFilter->nrBands-nrQmfBandsLF)*sizeof(FIXP_DBL)); - FDKmemcpy(&pQmfImag[nrQmfBandsLF], &pHybridImag[hybOffset], (hSynthesisHybFilter->cplxBands-nrQmfBandsLF)*sizeof(FIXP_DBL)); - } - - return err; -} - -static void dualChannelFiltering( - const FIXP_DBL *const pQmfReal, - const FIXP_DBL *const pQmfImag, - const INT *const pReadIdx, - FIXP_DBL *const mHybridReal, - FIXP_DBL *const mHybridImag, - const INT invert - ) -{ - const FIXP_HTB *p = HybFilterCoef2; - - FIXP_DBL r1, r6; - FIXP_DBL i1, i6; - - /* symmetric filter coefficients */ - r1 = fMultDiv2(p[1], pQmfReal[pReadIdx[1]]) + fMultDiv2(p[1], pQmfReal[pReadIdx[11]]) ; - i1 = fMultDiv2(p[1], pQmfImag[pReadIdx[1]]) + fMultDiv2(p[1], pQmfImag[pReadIdx[11]]) ; - r1 += fMultDiv2(p[3], pQmfReal[pReadIdx[3]]) + fMultDiv2(p[3], pQmfReal[pReadIdx[ 9]]) ; - i1 += fMultDiv2(p[3], pQmfImag[pReadIdx[3]]) + fMultDiv2(p[3], pQmfImag[pReadIdx[ 9]]) ; - r1 += fMultDiv2(p[5], pQmfReal[pReadIdx[5]]) + fMultDiv2(p[5], pQmfReal[pReadIdx[ 7]]) ; - i1 += fMultDiv2(p[5], pQmfImag[pReadIdx[5]]) + fMultDiv2(p[5], pQmfImag[pReadIdx[ 7]]) ; - r6 = fMultDiv2(p[6], pQmfReal[pReadIdx[6]]) ; - i6 = fMultDiv2(p[6], pQmfImag[pReadIdx[6]]) ; - - if (invert) { - mHybridReal[1] = (r1 + r6) << 1; - mHybridImag[1] = (i1 + i6) << 1; - - mHybridReal[0] = (r6 - r1) << 1; - mHybridImag[0] = (i6 - i1) << 1; - } - else { - mHybridReal[0] = (r1 + r6) << 1; - mHybridImag[0] = (i1 + i6) << 1; - - mHybridReal[1] = (r6 - r1) << 1; - mHybridImag[1] = (i6 - i1) << 1; - } -} - -static void fourChannelFiltering( - const FIXP_DBL *const pQmfReal, - const FIXP_DBL *const pQmfImag, - const INT *const pReadIdx, - FIXP_DBL *const mHybridReal, - FIXP_DBL *const mHybridImag, - const INT invert - ) -{ - const FIXP_HTB *p = HybFilterCoef4; - - FIXP_DBL fft[8]; - - static const FIXP_DBL cr[13] = { - FL2FXCONST_DBL( 0.f), FL2FXCONST_DBL(-0.70710678118655f), FL2FXCONST_DBL( -1.f), - FL2FXCONST_DBL(-0.70710678118655f), FL2FXCONST_DBL( 0.f), FL2FXCONST_DBL( 0.70710678118655f), - FL2FXCONST_DBL( 1.f), - FL2FXCONST_DBL( 0.70710678118655f), FL2FXCONST_DBL( 0.f), FL2FXCONST_DBL(-0.70710678118655f), - FL2FXCONST_DBL( -1.f), FL2FXCONST_DBL(-0.70710678118655f), FL2FXCONST_DBL( 0.f) - }; - static const FIXP_DBL ci[13] = { - FL2FXCONST_DBL( -1.f), FL2FXCONST_DBL(-0.70710678118655f), FL2FXCONST_DBL( 0.f), - FL2FXCONST_DBL( 0.70710678118655f), FL2FXCONST_DBL( 1.f), FL2FXCONST_DBL( 0.70710678118655f), - FL2FXCONST_DBL( 0.f), - FL2FXCONST_DBL(-0.70710678118655f), FL2FXCONST_DBL( -1.f), FL2FXCONST_DBL(-0.70710678118655f), - FL2FXCONST_DBL( 0.f), FL2FXCONST_DBL( 0.70710678118655f), FL2FXCONST_DBL( 1.f) - }; - - - /* FIR filter. */ - /* pre twiddeling with pre-twiddling coefficients c[n] */ - /* multiplication with filter coefficients p[n] */ - /* hint: (a + ib)*(c + id) = (a*c - b*d) + i(a*d + b*c) */ - /* write to fft coefficient n' */ - fft[FFT_IDX_R(0)] = ( fMult(p[10], ( fMultSub(fMultDiv2(cr[ 2], pQmfReal[pReadIdx[ 2]]), ci[ 2], pQmfImag[pReadIdx[ 2]]))) + - fMult(p[ 6], ( fMultSub(fMultDiv2(cr[ 6], pQmfReal[pReadIdx[ 6]]), ci[ 6], pQmfImag[pReadIdx[ 6]]))) + - fMult(p[ 2], ( fMultSub(fMultDiv2(cr[10], pQmfReal[pReadIdx[10]]), ci[10], pQmfImag[pReadIdx[10]]))) ); - fft[FFT_IDX_I(0)] = ( fMult(p[10], ( fMultAdd(fMultDiv2(ci[ 2], pQmfReal[pReadIdx[ 2]]), cr[ 2], pQmfImag[pReadIdx[ 2]]))) + - fMult(p[ 6], ( fMultAdd(fMultDiv2(ci[ 6], pQmfReal[pReadIdx[ 6]]), cr[ 6], pQmfImag[pReadIdx[ 6]]))) + - fMult(p[ 2], ( fMultAdd(fMultDiv2(ci[10], pQmfReal[pReadIdx[10]]), cr[10], pQmfImag[pReadIdx[10]]))) ); - - /* twiddle dee dum */ - fft[FFT_IDX_R(1)] = ( fMult(p[ 9], ( fMultSub(fMultDiv2(cr[ 3], pQmfReal[pReadIdx[ 3]]), ci[ 3], pQmfImag[pReadIdx[ 3]]))) + - fMult(p[ 5], ( fMultSub(fMultDiv2(cr[ 7], pQmfReal[pReadIdx[ 7]]), ci[ 7], pQmfImag[pReadIdx[ 7]]))) + - fMult(p[ 1], ( fMultSub(fMultDiv2(cr[11], pQmfReal[pReadIdx[11]]), ci[11], pQmfImag[pReadIdx[11]]))) ); - fft[FFT_IDX_I(1)] = ( fMult(p[ 9], ( fMultAdd(fMultDiv2(ci[ 3], pQmfReal[pReadIdx[ 3]]), cr[ 3], pQmfImag[pReadIdx[ 3]]))) + - fMult(p[ 5], ( fMultAdd(fMultDiv2(ci[ 7], pQmfReal[pReadIdx[ 7]]), cr[ 7], pQmfImag[pReadIdx[ 7]]))) + - fMult(p[ 1], ( fMultAdd(fMultDiv2(ci[11], pQmfReal[pReadIdx[11]]), cr[11], pQmfImag[pReadIdx[11]]))) ); - - /* twiddle dee dee */ - fft[FFT_IDX_R(2)] = ( fMult(p[12], ( fMultSub(fMultDiv2(cr[ 0], pQmfReal[pReadIdx[ 0]]), ci[ 0], pQmfImag[pReadIdx[ 0]]))) + - fMult(p[ 8], ( fMultSub(fMultDiv2(cr[ 4], pQmfReal[pReadIdx[ 4]]), ci[ 4], pQmfImag[pReadIdx[ 4]]))) + - fMult(p[ 4], ( fMultSub(fMultDiv2(cr[ 8], pQmfReal[pReadIdx[ 8]]), ci[ 8], pQmfImag[pReadIdx[ 8]]))) + - fMult(p[ 0], ( fMultSub(fMultDiv2(cr[12], pQmfReal[pReadIdx[12]]), ci[12], pQmfImag[pReadIdx[12]]))) ); - fft[FFT_IDX_I(2)] = ( fMult(p[12], ( fMultAdd(fMultDiv2(ci[ 0], pQmfReal[pReadIdx[ 0]]), cr[ 0], pQmfImag[pReadIdx[ 0]]))) + - fMult(p[ 8], ( fMultAdd(fMultDiv2(ci[ 4], pQmfReal[pReadIdx[ 4]]), cr[ 4], pQmfImag[pReadIdx[ 4]]))) + - fMult(p[ 4], ( fMultAdd(fMultDiv2(ci[ 8], pQmfReal[pReadIdx[ 8]]), cr[ 8], pQmfImag[pReadIdx[ 8]]))) + - fMult(p[ 0], ( fMultAdd(fMultDiv2(ci[12], pQmfReal[pReadIdx[12]]), cr[12], pQmfImag[pReadIdx[12]]))) ); - - fft[FFT_IDX_R(3)] = ( fMult(p[11], ( fMultSub(fMultDiv2(cr[ 1], pQmfReal[pReadIdx[ 1]]), ci[ 1], pQmfImag[pReadIdx[ 1]]))) + - fMult(p[ 7], ( fMultSub(fMultDiv2(cr[ 5], pQmfReal[pReadIdx[ 5]]), ci[ 5], pQmfImag[pReadIdx[ 5]]))) + - fMult(p[ 3], ( fMultSub(fMultDiv2(cr[ 9], pQmfReal[pReadIdx[ 9]]), ci[ 9], pQmfImag[pReadIdx[ 9]]))) ); - fft[FFT_IDX_I(3)] = ( fMult(p[11], ( fMultAdd(fMultDiv2(ci[ 1], pQmfReal[pReadIdx[ 1]]), cr[ 1], pQmfImag[pReadIdx[ 1]]))) + - fMult(p[ 7], ( fMultAdd(fMultDiv2(ci[ 5], pQmfReal[pReadIdx[ 5]]), cr[ 5], pQmfImag[pReadIdx[ 5]]))) + - fMult(p[ 3], ( fMultAdd(fMultDiv2(ci[ 9], pQmfReal[pReadIdx[ 9]]), cr[ 9], pQmfImag[pReadIdx[ 9]]))) ); - - /* fft modulation */ - /* here: fast manual fft modulation for a fft of length M=4 */ - /* fft_4{x[n]} = x[0]*exp(-i*2*pi/4*m*0) + x[1]*exp(-i*2*pi/4*m*1) + - x[2]*exp(-i*2*pi/4*m*2) + x[3]*exp(-i*2*pi/4*m*3) */ - - /* - fft bin m=0: - X[0, n] = x[0] + x[1] + x[2] + x[3] - */ - mHybridReal[0] = fft[FFT_IDX_R(0)] + fft[FFT_IDX_R(1)] + fft[FFT_IDX_R(2)] + fft[FFT_IDX_R(3)]; - mHybridImag[0] = fft[FFT_IDX_I(0)] + fft[FFT_IDX_I(1)] + fft[FFT_IDX_I(2)] + fft[FFT_IDX_I(3)]; - - /* - fft bin m=1: - X[1, n] = x[0] - i*x[1] - x[2] + i*x[3] - */ - mHybridReal[1] = fft[FFT_IDX_R(0)] + fft[FFT_IDX_I(1)] - fft[FFT_IDX_R(2)] - fft[FFT_IDX_I(3)]; - mHybridImag[1] = fft[FFT_IDX_I(0)] - fft[FFT_IDX_R(1)] - fft[FFT_IDX_I(2)] + fft[FFT_IDX_R(3)]; - - /* - fft bin m=2: - X[2, n] = x[0] - x[1] + x[2] - x[3] - */ - mHybridReal[2] = fft[FFT_IDX_R(0)] - fft[FFT_IDX_R(1)] + fft[FFT_IDX_R(2)] - fft[FFT_IDX_R(3)]; - mHybridImag[2] = fft[FFT_IDX_I(0)] - fft[FFT_IDX_I(1)] + fft[FFT_IDX_I(2)] - fft[FFT_IDX_I(3)]; - - /* - fft bin m=3: - X[3, n] = x[0] + j*x[1] - x[2] - j*x[3] - */ - mHybridReal[3] = fft[FFT_IDX_R(0)] - fft[FFT_IDX_I(1)] - fft[FFT_IDX_R(2)] + fft[FFT_IDX_I(3)]; - mHybridImag[3] = fft[FFT_IDX_I(0)] + fft[FFT_IDX_R(1)] - fft[FFT_IDX_I(2)] - fft[FFT_IDX_R(3)]; -} - - -static void eightChannelFiltering( - const FIXP_DBL *const pQmfReal, - const FIXP_DBL *const pQmfImag, - const INT *const pReadIdx, - FIXP_DBL *const mHybridReal, - FIXP_DBL *const mHybridImag, - const INT invert - ) -{ - const FIXP_HTP *p = HybFilterCoef8; - INT k, sc; - - FIXP_DBL mfft[16+ALIGNMENT_DEFAULT]; - FIXP_DBL *pfft = (FIXP_DBL*)ALIGN_PTR(mfft); - - FIXP_DBL accu1, accu2, accu3, accu4; - - /* pre twiddeling */ - pfft[FFT_IDX_R(0)] = fMultDiv2(p[0].v.re, pQmfReal[pReadIdx[6]]); - pfft[FFT_IDX_I(0)] = fMultDiv2(p[0].v.re, pQmfImag[pReadIdx[6]]); - - cplxMultDiv2(&accu1, &accu2, pQmfReal[pReadIdx[7]], pQmfImag[pReadIdx[7]], p[1]); - pfft[FFT_IDX_R(1)] = accu1; - pfft[FFT_IDX_I(1)] = accu2; - - cplxMultDiv2(&accu1, &accu2, pQmfReal[pReadIdx[0]], pQmfImag[pReadIdx[0]], p[2]); - cplxMultDiv2(&accu3, &accu4, pQmfReal[pReadIdx[8]], pQmfImag[pReadIdx[8]], p[3]); - pfft[FFT_IDX_R(2)] = accu1 + accu3; - pfft[FFT_IDX_I(2)] = accu2 + accu4; - - cplxMultDiv2(&accu1, &accu2, pQmfReal[pReadIdx[1]], pQmfImag[pReadIdx[1]], p[4]); - cplxMultDiv2(&accu3, &accu4, pQmfReal[pReadIdx[9]], pQmfImag[pReadIdx[9]], p[5]); - pfft[FFT_IDX_R(3)] = accu1 + accu3; - pfft[FFT_IDX_I(3)] = accu2 + accu4; - - pfft[FFT_IDX_R(4)] = fMultDiv2(pQmfImag[pReadIdx[10]], p[7].v.im) - fMultDiv2(pQmfImag[pReadIdx[ 2]], p[6].v.im); - pfft[FFT_IDX_I(4)] = fMultDiv2(pQmfReal[pReadIdx[ 2]], p[6].v.im) - fMultDiv2(pQmfReal[pReadIdx[10]], p[7].v.im); - - cplxMultDiv2(&accu1, &accu2, pQmfReal[pReadIdx[ 3]], pQmfImag[pReadIdx[ 3]], p[8]); - cplxMultDiv2(&accu3, &accu4, pQmfReal[pReadIdx[11]], pQmfImag[pReadIdx[11]], p[9]); - pfft[FFT_IDX_R(5)] = accu1 + accu3; - pfft[FFT_IDX_I(5)] = accu2 + accu4; - - cplxMultDiv2(&accu1, &accu2, pQmfReal[pReadIdx[ 4]], pQmfImag[pReadIdx[ 4]], p[10]); - cplxMultDiv2(&accu3, &accu4, pQmfReal[pReadIdx[12]], pQmfImag[pReadIdx[12]], p[11]); - pfft[FFT_IDX_R(6)] = accu1 + accu3; - pfft[FFT_IDX_I(6)] = accu2 + accu4; - - cplxMultDiv2(&accu1, &accu2, pQmfReal[pReadIdx[ 5]], pQmfImag[pReadIdx[ 5]], p[12]); - pfft[FFT_IDX_R(7)] = accu1; - pfft[FFT_IDX_I(7)] = accu2; - - /* fft modulation */ - fft_8 (pfft); - sc = 1 + 2; - - if (invert) { - mHybridReal[0] = pfft[FFT_IDX_R(7)] << sc; - mHybridImag[0] = pfft[FFT_IDX_I(7)] << sc; - mHybridReal[1] = pfft[FFT_IDX_R(0)] << sc; - mHybridImag[1] = pfft[FFT_IDX_I(0)] << sc; - - mHybridReal[2] = pfft[FFT_IDX_R(6)] << sc; - mHybridImag[2] = pfft[FFT_IDX_I(6)] << sc; - mHybridReal[3] = pfft[FFT_IDX_R(1)] << sc; - mHybridImag[3] = pfft[FFT_IDX_I(1)] << sc; - - mHybridReal[4] = pfft[FFT_IDX_R(2)] << sc; - mHybridReal[4] += pfft[FFT_IDX_R(5)] << sc; - mHybridImag[4] = pfft[FFT_IDX_I(2)] << sc; - mHybridImag[4] += pfft[FFT_IDX_I(5)] << sc; - - mHybridReal[5] = pfft[FFT_IDX_R(3)] << sc; - mHybridReal[5] += pfft[FFT_IDX_R(4)] << sc; - mHybridImag[5] = pfft[FFT_IDX_I(3)] << sc; - mHybridImag[5] += pfft[FFT_IDX_I(4)] << sc; - } - else { - for(k=0; k<8;k++ ) { - mHybridReal[k] = pfft[FFT_IDX_R(k)] << sc; - mHybridImag[k] = pfft[FFT_IDX_I(k)] << sc; - } - } -} - -static INT kChannelFiltering( - const FIXP_DBL *const pQmfReal, - const FIXP_DBL *const pQmfImag, - const INT *const pReadIdx, - FIXP_DBL *const mHybridReal, - FIXP_DBL *const mHybridImag, - const SCHAR hybridConfig - ) -{ - INT err = 0; - - switch (hybridConfig) { - case 2: - case -2: - dualChannelFiltering(pQmfReal, pQmfImag, pReadIdx, mHybridReal, mHybridImag, (hybridConfig<0) ? 1 : 0 ); - break; - case 4: - case -4: - fourChannelFiltering(pQmfReal, pQmfImag, pReadIdx, mHybridReal, mHybridImag, (hybridConfig<0) ? 1 : 0 ); - break; - case 8: - case -8: - eightChannelFiltering(pQmfReal, pQmfImag, pReadIdx, mHybridReal, mHybridImag, (hybridConfig<0) ? 1 : 0 ); - break; - default: - err = -1; - } - - return err; -} - - - diff --git a/libFDK/src/FDK_tools_rom.cpp b/libFDK/src/FDK_tools_rom.cpp deleted file mode 100644 index c6e517e..0000000 --- a/libFDK/src/FDK_tools_rom.cpp +++ /dev/null @@ -1,2440 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools *********************** - - Author(s): Oliver Moser - Description: ROM tables used by FDK tools - -******************************************************************************/ - -#include "FDK_tools_rom.h" - - - - - - - - - - - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_STP SineTable480[] = -{ - STCP(0x7fffffff, 0x00000000), STCP(0x7fffd315, 0x006b3b9b), STCP(0x7fff4c54, 0x00d676eb), STCP(0x7ffe6bbf, 0x0141b1a5), - STCP(0x7ffd3154, 0x01aceb7c), STCP(0x7ffb9d15, 0x02182427), STCP(0x7ff9af04, 0x02835b5a), STCP(0x7ff76721, 0x02ee90c8), - STCP(0x7ff4c56f, 0x0359c428), STCP(0x7ff1c9ef, 0x03c4f52f), STCP(0x7fee74a2, 0x0430238f), STCP(0x7feac58d, 0x049b4f00), - STCP(0x7fe6bcb0, 0x05067734), STCP(0x7fe25a0f, 0x05719be2), STCP(0x7fdd9dad, 0x05dcbcbe), STCP(0x7fd8878e, 0x0647d97c), - STCP(0x7fd317b4, 0x06b2f1d2), STCP(0x7fcd4e24, 0x071e0575), STCP(0x7fc72ae2, 0x07891418), STCP(0x7fc0adf2, 0x07f41d72), - STCP(0x7fb9d759, 0x085f2137), STCP(0x7fb2a71b, 0x08ca1f1b), STCP(0x7fab1d3d, 0x093516d4), STCP(0x7fa339c5, 0x09a00817), - STCP(0x7f9afcb9, 0x0a0af299), STCP(0x7f92661d, 0x0a75d60e), STCP(0x7f8975f9, 0x0ae0b22c), STCP(0x7f802c52, 0x0b4b86a8), - STCP(0x7f76892f, 0x0bb65336), STCP(0x7f6c8c96, 0x0c21178c), STCP(0x7f62368f, 0x0c8bd35e), STCP(0x7f578721, 0x0cf68662), - STCP(0x7f4c7e54, 0x0d61304e), STCP(0x7f411c2f, 0x0dcbd0d5), STCP(0x7f3560b9, 0x0e3667ad), STCP(0x7f294bfd, 0x0ea0f48c), - STCP(0x7f1cde01, 0x0f0b7727), STCP(0x7f1016ce, 0x0f75ef33), STCP(0x7f02f66f, 0x0fe05c64), STCP(0x7ef57cea, 0x104abe71), - STCP(0x7ee7aa4c, 0x10b5150f), STCP(0x7ed97e9c, 0x111f5ff4), STCP(0x7ecaf9e5, 0x11899ed3), STCP(0x7ebc1c31, 0x11f3d164), - STCP(0x7eace58a, 0x125df75b), STCP(0x7e9d55fc, 0x12c8106f), STCP(0x7e8d6d91, 0x13321c53), STCP(0x7e7d2c54, 0x139c1abf), - STCP(0x7e6c9251, 0x14060b68), STCP(0x7e5b9f93, 0x146fee03), STCP(0x7e4a5426, 0x14d9c245), STCP(0x7e38b017, 0x154387e6), - STCP(0x7e26b371, 0x15ad3e9a), STCP(0x7e145e42, 0x1616e618), STCP(0x7e01b096, 0x16807e15), STCP(0x7deeaa7a, 0x16ea0646), - STCP(0x7ddb4bfc, 0x17537e63), STCP(0x7dc79529, 0x17bce621), STCP(0x7db3860f, 0x18263d36), STCP(0x7d9f1ebd, 0x188f8357), - STCP(0x7d8a5f40, 0x18f8b83c), STCP(0x7d7547a7, 0x1961db9b), STCP(0x7d5fd801, 0x19caed29), STCP(0x7d4a105d, 0x1a33ec9c), - STCP(0x7d33f0ca, 0x1a9cd9ac), STCP(0x7d1d7958, 0x1b05b40f), STCP(0x7d06aa16, 0x1b6e7b7a), STCP(0x7cef8315, 0x1bd72fa4), - STCP(0x7cd80464, 0x1c3fd045), STCP(0x7cc02e15, 0x1ca85d12), STCP(0x7ca80038, 0x1d10d5c2), STCP(0x7c8f7ade, 0x1d793a0b), - STCP(0x7c769e18, 0x1de189a6), STCP(0x7c5d69f7, 0x1e49c447), STCP(0x7c43de8e, 0x1eb1e9a7), STCP(0x7c29fbee, 0x1f19f97b), - STCP(0x7c0fc22a, 0x1f81f37c), STCP(0x7bf53153, 0x1fe9d75f), STCP(0x7bda497d, 0x2051a4dd), STCP(0x7bbf0aba, 0x20b95bac), - STCP(0x7ba3751d, 0x2120fb83), STCP(0x7b8788ba, 0x2188841a), STCP(0x7b6b45a5, 0x21eff528), STCP(0x7b4eabf1, 0x22574e65), - STCP(0x7b31bbb2, 0x22be8f87), STCP(0x7b1474fd, 0x2325b847), STCP(0x7af6d7e6, 0x238cc85d), STCP(0x7ad8e482, 0x23f3bf7e), - STCP(0x7aba9ae6, 0x245a9d65), STCP(0x7a9bfb27, 0x24c161c7), STCP(0x7a7d055b, 0x25280c5e), STCP(0x7a5db997, 0x258e9ce0), - STCP(0x7a3e17f2, 0x25f51307), STCP(0x7a1e2082, 0x265b6e8a), STCP(0x79fdd35c, 0x26c1af22), STCP(0x79dd3098, 0x2727d486), - STCP(0x79bc384d, 0x278dde6e), STCP(0x799aea92, 0x27f3cc94), STCP(0x7979477d, 0x28599eb0), STCP(0x79574f28, 0x28bf547b), - STCP(0x793501a9, 0x2924edac), STCP(0x79125f19, 0x298a69fc), STCP(0x78ef678f, 0x29efc925), STCP(0x78cc1b26, 0x2a550adf), - STCP(0x78a879f4, 0x2aba2ee4), STCP(0x78848414, 0x2b1f34eb), STCP(0x7860399e, 0x2b841caf), STCP(0x783b9aad, 0x2be8e5e8), - STCP(0x7816a759, 0x2c4d9050), STCP(0x77f15fbc, 0x2cb21ba0), STCP(0x77cbc3f2, 0x2d168792), STCP(0x77a5d413, 0x2d7ad3de), - STCP(0x777f903c, 0x2ddf0040), STCP(0x7758f886, 0x2e430c6f), STCP(0x77320d0d, 0x2ea6f827), STCP(0x770acdec, 0x2f0ac320), - STCP(0x76e33b3f, 0x2f6e6d16), STCP(0x76bb5521, 0x2fd1f5c1), STCP(0x76931bae, 0x30355cdd), STCP(0x766a8f04, 0x3098a223), - STCP(0x7641af3d, 0x30fbc54d), STCP(0x76187c77, 0x315ec617), STCP(0x75eef6ce, 0x31c1a43b), STCP(0x75c51e61, 0x32245f72), - STCP(0x759af34c, 0x3286f779), STCP(0x757075ac, 0x32e96c09), STCP(0x7545a5a0, 0x334bbcde), STCP(0x751a8346, 0x33ade9b3), - STCP(0x74ef0ebc, 0x340ff242), STCP(0x74c34820, 0x3471d647), STCP(0x74972f92, 0x34d3957e), STCP(0x746ac52f, 0x35352fa1), - STCP(0x743e0918, 0x3596a46c), STCP(0x7410fb6b, 0x35f7f39c), STCP(0x73e39c49, 0x36591cea), STCP(0x73b5ebd1, 0x36ba2014), - STCP(0x7387ea23, 0x371afcd5), STCP(0x73599760, 0x377bb2e9), STCP(0x732af3a7, 0x37dc420c), STCP(0x72fbff1b, 0x383ca9fb), - STCP(0x72ccb9db, 0x389cea72), STCP(0x729d2409, 0x38fd032d), STCP(0x726d3dc6, 0x395cf3e9), STCP(0x723d0734, 0x39bcbc63), - STCP(0x720c8075, 0x3a1c5c57), STCP(0x71dba9ab, 0x3a7bd382), STCP(0x71aa82f7, 0x3adb21a1), STCP(0x71790c7e, 0x3b3a4672), - STCP(0x71474660, 0x3b9941b1), STCP(0x711530c2, 0x3bf8131c), STCP(0x70e2cbc6, 0x3c56ba70), STCP(0x70b01790, 0x3cb5376b), - STCP(0x707d1443, 0x3d1389cb), STCP(0x7049c203, 0x3d71b14d), STCP(0x701620f5, 0x3dcfadb0), STCP(0x6fe2313c, 0x3e2d7eb1), - STCP(0x6fadf2fc, 0x3e8b240e), STCP(0x6f79665b, 0x3ee89d86), STCP(0x6f448b7e, 0x3f45ead8), STCP(0x6f0f6289, 0x3fa30bc1), - STCP(0x6ed9eba1, 0x40000000), STCP(0x6ea426ed, 0x405cc754), STCP(0x6e6e1492, 0x40b9617d), STCP(0x6e37b4b6, 0x4115ce38), - STCP(0x6e010780, 0x41720d46), STCP(0x6dca0d14, 0x41ce1e65), STCP(0x6d92c59b, 0x422a0154), STCP(0x6d5b313b, 0x4285b5d4), - STCP(0x6d23501b, 0x42e13ba4), STCP(0x6ceb2261, 0x433c9283), STCP(0x6cb2a837, 0x4397ba32), STCP(0x6c79e1c2, 0x43f2b271), - STCP(0x6c40cf2c, 0x444d7aff), STCP(0x6c07709b, 0x44a8139e), STCP(0x6bcdc639, 0x45027c0c), STCP(0x6b93d02e, 0x455cb40c), - STCP(0x6b598ea3, 0x45b6bb5e), STCP(0x6b1f01c0, 0x461091c2), STCP(0x6ae429ae, 0x466a36f9), STCP(0x6aa90697, 0x46c3aac5), - STCP(0x6a6d98a4, 0x471cece7), STCP(0x6a31e000, 0x4775fd1f), STCP(0x69f5dcd3, 0x47cedb31), STCP(0x69b98f48, 0x482786dc), - STCP(0x697cf78a, 0x487fffe4), STCP(0x694015c3, 0x48d84609), STCP(0x6902ea1d, 0x4930590f), STCP(0x68c574c4, 0x498838b6), - STCP(0x6887b5e2, 0x49dfe4c2), STCP(0x6849ada3, 0x4a375cf5), STCP(0x680b5c33, 0x4a8ea111), STCP(0x67ccc1be, 0x4ae5b0da), - STCP(0x678dde6e, 0x4b3c8c12), STCP(0x674eb271, 0x4b93327c), STCP(0x670f3df3, 0x4be9a3db), STCP(0x66cf8120, 0x4c3fdff4), - STCP(0x668f7c25, 0x4c95e688), STCP(0x664f2f2e, 0x4cebb75c), STCP(0x660e9a6a, 0x4d415234), STCP(0x65cdbe05, 0x4d96b6d3), - STCP(0x658c9a2d, 0x4debe4fe), STCP(0x654b2f10, 0x4e40dc79), STCP(0x65097cdb, 0x4e959d08), STCP(0x64c783bd, 0x4eea2670), - STCP(0x648543e4, 0x4f3e7875), STCP(0x6442bd7e, 0x4f9292dc), STCP(0x63fff0ba, 0x4fe6756a), STCP(0x63bcddc7, 0x503a1fe5), - STCP(0x637984d4, 0x508d9211), STCP(0x6335e611, 0x50e0cbb4), STCP(0x62f201ac, 0x5133cc94), STCP(0x62add7d6, 0x51869476), - STCP(0x626968be, 0x51d92321), STCP(0x6224b495, 0x522b7859), STCP(0x61dfbb8a, 0x527d93e6), STCP(0x619a7dce, 0x52cf758f), - STCP(0x6154fb91, 0x53211d18), STCP(0x610f3505, 0x53728a4a), STCP(0x60c92a5a, 0x53c3bcea), STCP(0x6082dbc1, 0x5414b4c1), - STCP(0x603c496c, 0x54657194), STCP(0x5ff5738d, 0x54b5f32c), STCP(0x5fae5a55, 0x55063951), STCP(0x5f66fdf5, 0x555643c8), - STCP(0x5f1f5ea1, 0x55a6125c), STCP(0x5ed77c8a, 0x55f5a4d2), STCP(0x5e8f57e2, 0x5644faf4), STCP(0x5e46f0dd, 0x5694148b), - STCP(0x5dfe47ad, 0x56e2f15d), STCP(0x5db55c86, 0x57319135), STCP(0x5d6c2f99, 0x577ff3da), STCP(0x5d22c11c, 0x57ce1917), - STCP(0x5cd91140, 0x581c00b3), STCP(0x5c8f203b, 0x5869aa79), STCP(0x5c44ee40, 0x58b71632), STCP(0x5bfa7b82, 0x590443a7), - STCP(0x5bafc837, 0x595132a2), STCP(0x5b64d492, 0x599de2ee), STCP(0x5b19a0c8, 0x59ea5454), STCP(0x5ace2d0f, 0x5a36869f), - STCP(0x5a82799a, 0x5a82799a) -}; - - -RAM_ALIGN -LNK_SECTION_CONSTDATA -LNK_SECTION_CONSTDATA_L1 -const FIXP_STP SineTable512[] = -{ - STCP(0x7fffffff, 0x00000000), STCP(0x7fffd886, 0x006487e3), STCP(0x7fff6216, 0x00c90f88), STCP(0x7ffe9cb2, 0x012d96b1), - STCP(0x7ffd885a, 0x01921d20), STCP(0x7ffc250f, 0x01f6a297), STCP(0x7ffa72d1, 0x025b26d7), STCP(0x7ff871a2, 0x02bfa9a4), - STCP(0x7ff62182, 0x03242abf), STCP(0x7ff38274, 0x0388a9ea), STCP(0x7ff09478, 0x03ed26e6), STCP(0x7fed5791, 0x0451a177), - STCP(0x7fe9cbc0, 0x04b6195d), STCP(0x7fe5f108, 0x051a8e5c), STCP(0x7fe1c76b, 0x057f0035), STCP(0x7fdd4eec, 0x05e36ea9), - STCP(0x7fd8878e, 0x0647d97c), STCP(0x7fd37153, 0x06ac406f), STCP(0x7fce0c3e, 0x0710a345), STCP(0x7fc85854, 0x077501be), - STCP(0x7fc25596, 0x07d95b9e), STCP(0x7fbc040a, 0x083db0a7), STCP(0x7fb563b3, 0x08a2009a), STCP(0x7fae7495, 0x09064b3a), - STCP(0x7fa736b4, 0x096a9049), STCP(0x7f9faa15, 0x09cecf89), STCP(0x7f97cebd, 0x0a3308bd), STCP(0x7f8fa4b0, 0x0a973ba5), - STCP(0x7f872bf3, 0x0afb6805), STCP(0x7f7e648c, 0x0b5f8d9f), STCP(0x7f754e80, 0x0bc3ac35), STCP(0x7f6be9d4, 0x0c27c389), - STCP(0x7f62368f, 0x0c8bd35e), STCP(0x7f5834b7, 0x0cefdb76), STCP(0x7f4de451, 0x0d53db92), STCP(0x7f434563, 0x0db7d376), - STCP(0x7f3857f6, 0x0e1bc2e4), STCP(0x7f2d1c0e, 0x0e7fa99e), STCP(0x7f2191b4, 0x0ee38766), STCP(0x7f15b8ee, 0x0f475bff), - STCP(0x7f0991c4, 0x0fab272b), STCP(0x7efd1c3c, 0x100ee8ad), STCP(0x7ef05860, 0x1072a048), STCP(0x7ee34636, 0x10d64dbd), - STCP(0x7ed5e5c6, 0x1139f0cf), STCP(0x7ec8371a, 0x119d8941), STCP(0x7eba3a39, 0x120116d5), STCP(0x7eabef2c, 0x1264994e), - STCP(0x7e9d55fc, 0x12c8106f), STCP(0x7e8e6eb2, 0x132b7bf9), STCP(0x7e7f3957, 0x138edbb1), STCP(0x7e6fb5f4, 0x13f22f58), - STCP(0x7e5fe493, 0x145576b1), STCP(0x7e4fc53e, 0x14b8b17f), STCP(0x7e3f57ff, 0x151bdf86), STCP(0x7e2e9cdf, 0x157f0086), - STCP(0x7e1d93ea, 0x15e21445), STCP(0x7e0c3d29, 0x16451a83), STCP(0x7dfa98a8, 0x16a81305), STCP(0x7de8a670, 0x170afd8d), - STCP(0x7dd6668f, 0x176dd9de), STCP(0x7dc3d90d, 0x17d0a7bc), STCP(0x7db0fdf8, 0x183366e9), STCP(0x7d9dd55a, 0x18961728), - STCP(0x7d8a5f40, 0x18f8b83c), STCP(0x7d769bb5, 0x195b49ea), STCP(0x7d628ac6, 0x19bdcbf3), STCP(0x7d4e2c7f, 0x1a203e1b), - STCP(0x7d3980ec, 0x1a82a026), STCP(0x7d24881b, 0x1ae4f1d6), STCP(0x7d0f4218, 0x1b4732ef), STCP(0x7cf9aef0, 0x1ba96335), - STCP(0x7ce3ceb2, 0x1c0b826a), STCP(0x7ccda169, 0x1c6d9053), STCP(0x7cb72724, 0x1ccf8cb3), STCP(0x7ca05ff1, 0x1d31774d), - STCP(0x7c894bde, 0x1d934fe5), STCP(0x7c71eaf9, 0x1df5163f), STCP(0x7c5a3d50, 0x1e56ca1e), STCP(0x7c4242f2, 0x1eb86b46), - STCP(0x7c29fbee, 0x1f19f97b), STCP(0x7c116853, 0x1f7b7481), STCP(0x7bf88830, 0x1fdcdc1b), STCP(0x7bdf5b94, 0x203e300d), - STCP(0x7bc5e290, 0x209f701c), STCP(0x7bac1d31, 0x21009c0c), STCP(0x7b920b89, 0x2161b3a0), STCP(0x7b77ada8, 0x21c2b69c), - STCP(0x7b5d039e, 0x2223a4c5), STCP(0x7b420d7a, 0x22847de0), STCP(0x7b26cb4f, 0x22e541af), STCP(0x7b0b3d2c, 0x2345eff8), - STCP(0x7aef6323, 0x23a6887f), STCP(0x7ad33d45, 0x24070b08), STCP(0x7ab6cba4, 0x24677758), STCP(0x7a9a0e50, 0x24c7cd33), - STCP(0x7a7d055b, 0x25280c5e), STCP(0x7a5fb0d8, 0x2588349d), STCP(0x7a4210d8, 0x25e845b6), STCP(0x7a24256f, 0x26483f6c), - STCP(0x7a05eead, 0x26a82186), STCP(0x79e76ca7, 0x2707ebc7), STCP(0x79c89f6e, 0x27679df4), STCP(0x79a98715, 0x27c737d3), - STCP(0x798a23b1, 0x2826b928), STCP(0x796a7554, 0x288621b9), STCP(0x794a7c12, 0x28e5714b), STCP(0x792a37fe, 0x2944a7a2), - STCP(0x7909a92d, 0x29a3c485), STCP(0x78e8cfb2, 0x2a02c7b8), STCP(0x78c7aba2, 0x2a61b101), STCP(0x78a63d11, 0x2ac08026), - STCP(0x78848414, 0x2b1f34eb), STCP(0x786280bf, 0x2b7dcf17), STCP(0x78403329, 0x2bdc4e6f), STCP(0x781d9b65, 0x2c3ab2b9), - STCP(0x77fab989, 0x2c98fbba), STCP(0x77d78daa, 0x2cf72939), STCP(0x77b417df, 0x2d553afc), STCP(0x7790583e, 0x2db330c7), - STCP(0x776c4edb, 0x2e110a62), STCP(0x7747fbce, 0x2e6ec792), STCP(0x77235f2d, 0x2ecc681e), STCP(0x76fe790e, 0x2f29ebcc), - STCP(0x76d94989, 0x2f875262), STCP(0x76b3d0b4, 0x2fe49ba7), STCP(0x768e0ea6, 0x3041c761), STCP(0x76680376, 0x309ed556), - STCP(0x7641af3d, 0x30fbc54d), STCP(0x761b1211, 0x3158970e), STCP(0x75f42c0b, 0x31b54a5e), STCP(0x75ccfd42, 0x3211df04), - STCP(0x75a585cf, 0x326e54c7), STCP(0x757dc5ca, 0x32caab6f), STCP(0x7555bd4c, 0x3326e2c3), STCP(0x752d6c6c, 0x3382fa88), - STCP(0x7504d345, 0x33def287), STCP(0x74dbf1ef, 0x343aca87), STCP(0x74b2c884, 0x34968250), STCP(0x7489571c, 0x34f219a8), - STCP(0x745f9dd1, 0x354d9057), STCP(0x74359cbd, 0x35a8e625), STCP(0x740b53fb, 0x36041ad9), STCP(0x73e0c3a3, 0x365f2e3b), - STCP(0x73b5ebd1, 0x36ba2014), STCP(0x738acc9e, 0x3714f02a), STCP(0x735f6626, 0x376f9e46), STCP(0x7333b883, 0x37ca2a30), - STCP(0x7307c3d0, 0x382493b0), STCP(0x72db8828, 0x387eda8e), STCP(0x72af05a7, 0x38d8fe93), STCP(0x72823c67, 0x3932ff87), - STCP(0x72552c85, 0x398cdd32), STCP(0x7227d61c, 0x39e6975e), STCP(0x71fa3949, 0x3a402dd2), STCP(0x71cc5626, 0x3a99a057), - STCP(0x719e2cd2, 0x3af2eeb7), STCP(0x716fbd68, 0x3b4c18ba), STCP(0x71410805, 0x3ba51e29), STCP(0x71120cc5, 0x3bfdfecd), - STCP(0x70e2cbc6, 0x3c56ba70), STCP(0x70b34525, 0x3caf50da), STCP(0x708378ff, 0x3d07c1d6), STCP(0x70536771, 0x3d600d2c), - STCP(0x7023109a, 0x3db832a6), STCP(0x6ff27497, 0x3e10320d), STCP(0x6fc19385, 0x3e680b2c), STCP(0x6f906d84, 0x3ebfbdcd), - STCP(0x6f5f02b2, 0x3f1749b8), STCP(0x6f2d532c, 0x3f6eaeb8), STCP(0x6efb5f12, 0x3fc5ec98), STCP(0x6ec92683, 0x401d0321), - STCP(0x6e96a99d, 0x4073f21d), STCP(0x6e63e87f, 0x40cab958), STCP(0x6e30e34a, 0x4121589b), STCP(0x6dfd9a1c, 0x4177cfb1), - STCP(0x6dca0d14, 0x41ce1e65), STCP(0x6d963c54, 0x42244481), STCP(0x6d6227fa, 0x427a41d0), STCP(0x6d2dd027, 0x42d0161e), - STCP(0x6cf934fc, 0x4325c135), STCP(0x6cc45698, 0x437b42e1), STCP(0x6c8f351c, 0x43d09aed), STCP(0x6c59d0a9, 0x4425c923), - STCP(0x6c242960, 0x447acd50), STCP(0x6bee3f62, 0x44cfa740), STCP(0x6bb812d1, 0x452456bd), STCP(0x6b81a3cd, 0x4578db93), - STCP(0x6b4af279, 0x45cd358f), STCP(0x6b13fef5, 0x4621647d), STCP(0x6adcc964, 0x46756828), STCP(0x6aa551e9, 0x46c9405c), - STCP(0x6a6d98a4, 0x471cece7), STCP(0x6a359db9, 0x47706d93), STCP(0x69fd614a, 0x47c3c22f), STCP(0x69c4e37a, 0x4816ea86), - STCP(0x698c246c, 0x4869e665), STCP(0x69532442, 0x48bcb599), STCP(0x6919e320, 0x490f57ee), STCP(0x68e06129, 0x4961cd33), - STCP(0x68a69e81, 0x49b41533), STCP(0x686c9b4b, 0x4a062fbd), STCP(0x683257ab, 0x4a581c9e), STCP(0x67f7d3c5, 0x4aa9dba2), - STCP(0x67bd0fbd, 0x4afb6c98), STCP(0x67820bb7, 0x4b4ccf4d), STCP(0x6746c7d8, 0x4b9e0390), STCP(0x670b4444, 0x4bef092d), - STCP(0x66cf8120, 0x4c3fdff4), STCP(0x66937e91, 0x4c9087b1), STCP(0x66573cbb, 0x4ce10034), STCP(0x661abbc5, 0x4d31494b), - STCP(0x65ddfbd3, 0x4d8162c4), STCP(0x65a0fd0b, 0x4dd14c6e), STCP(0x6563bf92, 0x4e210617), STCP(0x6526438f, 0x4e708f8f), - STCP(0x64e88926, 0x4ebfe8a5), STCP(0x64aa907f, 0x4f0f1126), STCP(0x646c59bf, 0x4f5e08e3), STCP(0x642de50d, 0x4faccfab), - STCP(0x63ef3290, 0x4ffb654d), STCP(0x63b0426d, 0x5049c999), STCP(0x637114cc, 0x5097fc5e), STCP(0x6331a9d4, 0x50e5fd6d), - STCP(0x62f201ac, 0x5133cc94), STCP(0x62b21c7b, 0x518169a5), STCP(0x6271fa69, 0x51ced46e), STCP(0x62319b9d, 0x521c0cc2), - STCP(0x61f1003f, 0x5269126e), STCP(0x61b02876, 0x52b5e546), STCP(0x616f146c, 0x53028518), STCP(0x612dc447, 0x534ef1b5), - STCP(0x60ec3830, 0x539b2af0), STCP(0x60aa7050, 0x53e73097), STCP(0x60686ccf, 0x5433027d), STCP(0x60262dd6, 0x547ea073), - STCP(0x5fe3b38d, 0x54ca0a4b), STCP(0x5fa0fe1f, 0x55153fd4), STCP(0x5f5e0db3, 0x556040e2), STCP(0x5f1ae274, 0x55ab0d46), - STCP(0x5ed77c8a, 0x55f5a4d2), STCP(0x5e93dc1f, 0x56400758), STCP(0x5e50015d, 0x568a34a9), STCP(0x5e0bec6e, 0x56d42c99), - STCP(0x5dc79d7c, 0x571deefa), STCP(0x5d8314b1, 0x57677b9d), STCP(0x5d3e5237, 0x57b0d256), STCP(0x5cf95638, 0x57f9f2f8), - STCP(0x5cb420e0, 0x5842dd54), STCP(0x5c6eb258, 0x588b9140), STCP(0x5c290acc, 0x58d40e8c), STCP(0x5be32a67, 0x591c550e), - STCP(0x5b9d1154, 0x59646498), STCP(0x5b56bfbd, 0x59ac3cfd), STCP(0x5b1035cf, 0x59f3de12), STCP(0x5ac973b5, 0x5a3b47ab), - STCP(0x5a82799a, 0x5a82799a) -}; - - - - - - - - - - - - - - - - - - - - - -/* generate_fft_tables.m 4 15 */ -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_STB RotVectorReal60[] = -{ - STC(0x7f4c7e54), STC(0x7d33f0ca), STC(0x79bc384d), - STC(0x7d33f0ca), STC(0x74ef0ebc), STC(0x678dde6e), - STC(0x79bc384d), STC(0x678dde6e), STC(0x4b3c8c12), - STC(0x74ef0ebc), STC(0x55a6125c), STC(0x278dde6e), - STC(0x6ed9eba1), STC(0x40000000), STC(0x00000000), - STC(0x678dde6e), STC(0x278dde6e), STC(0xd8722191), - STC(0x5f1f5ea1), STC(0x0d61304e), STC(0xb4c373ed), - STC(0x55a6125c), STC(0xf29ecfb1), STC(0x98722191), - STC(0x4b3c8c12), STC(0xd8722191), STC(0x8643c7b2), - STC(0x40000000), STC(0xbfffffff), STC(0x80000000), - STC(0x340ff242), STC(0xaa59eda3), STC(0x8643c7b2), - STC(0x278dde6e), STC(0x98722191), STC(0x98722191), - STC(0x1a9cd9ac), STC(0x8b10f143), STC(0xb4c373ed), - STC(0x0d61304e), STC(0x82cc0f35), STC(0xd8722191), -}; -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_STB RotVectorImag60[] = -{ - STC(0x0d61304e), STC(0x1a9cd9ac), STC(0x278dde6e), - STC(0x1a9cd9ac), STC(0x340ff242), STC(0x4b3c8c12), - STC(0x278dde6e), STC(0x4b3c8c12), STC(0x678dde6e), - STC(0x340ff242), STC(0x5f1f5ea1), STC(0x79bc384d), - STC(0x40000000), STC(0x6ed9eba1), STC(0x7fffffff), - STC(0x4b3c8c12), STC(0x79bc384d), STC(0x79bc384d), - STC(0x55a6125c), STC(0x7f4c7e54), STC(0x678dde6e), - STC(0x5f1f5ea1), STC(0x7f4c7e54), STC(0x4b3c8c12), - STC(0x678dde6e), STC(0x79bc384d), STC(0x278dde6e), - STC(0x6ed9eba1), STC(0x6ed9eba1), STC(0x00000000), - STC(0x74ef0ebc), STC(0x5f1f5ea1), STC(0xd8722191), - STC(0x79bc384d), STC(0x4b3c8c12), STC(0xb4c373ed), - STC(0x7d33f0ca), STC(0x340ff242), STC(0x98722191), - STC(0x7f4c7e54), STC(0x1a9cd9ac), STC(0x8643c7b2), -}; - - - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_STB RotVectorReal240[] = -{ - STC(0x7ff4c56f), STC(0x7fd317b4), STC(0x7f9afcb9), STC(0x7f4c7e54), STC(0x7ee7aa4c), STC(0x7e6c9251), STC(0x7ddb4bfc), STC(0x7d33f0ca), STC(0x7c769e18), STC(0x7ba3751d), STC(0x7aba9ae6), STC(0x79bc384d), STC(0x78a879f4), STC(0x777f903c), STC(0x7641af3d), - STC(0x7fd317b4), STC(0x7f4c7e54), STC(0x7e6c9251), STC(0x7d33f0ca), STC(0x7ba3751d), STC(0x79bc384d), STC(0x777f903c), STC(0x74ef0ebc), STC(0x720c8075), STC(0x6ed9eba1), STC(0x6b598ea3), STC(0x678dde6e), STC(0x637984d4), STC(0x5f1f5ea1), STC(0x5a82799a), - STC(0x7f9afcb9), STC(0x7e6c9251), STC(0x7c769e18), STC(0x79bc384d), STC(0x7641af3d), STC(0x720c8075), STC(0x6d23501b), STC(0x678dde6e), STC(0x6154fb91), STC(0x5a82799a), STC(0x53211d18), STC(0x4b3c8c12), STC(0x42e13ba4), STC(0x3a1c5c57), STC(0x30fbc54d), - STC(0x7f4c7e54), STC(0x7d33f0ca), STC(0x79bc384d), STC(0x74ef0ebc), STC(0x6ed9eba1), STC(0x678dde6e), STC(0x5f1f5ea1), STC(0x55a6125c), STC(0x4b3c8c12), STC(0x40000000), STC(0x340ff242), STC(0x278dde6e), STC(0x1a9cd9ac), STC(0x0d61304e), STC(0x00000000), - STC(0x7ee7aa4c), STC(0x7ba3751d), STC(0x7641af3d), STC(0x6ed9eba1), STC(0x658c9a2d), STC(0x5a82799a), STC(0x4debe4fe), STC(0x40000000), STC(0x30fbc54d), STC(0x2120fb83), STC(0x10b5150f), STC(0x00000000), STC(0xef4aeaf0), STC(0xdedf047c), STC(0xcf043ab2), - STC(0x7e6c9251), STC(0x79bc384d), STC(0x720c8075), STC(0x678dde6e), STC(0x5a82799a), STC(0x4b3c8c12), STC(0x3a1c5c57), STC(0x278dde6e), STC(0x14060b68), STC(0x00000000), STC(0xebf9f497), STC(0xd8722191), STC(0xc5e3a3a8), STC(0xb4c373ed), STC(0xa57d8665), - STC(0x7ddb4bfc), STC(0x777f903c), STC(0x6d23501b), STC(0x5f1f5ea1), STC(0x4debe4fe), STC(0x3a1c5c57), STC(0x245a9d65), STC(0x0d61304e), STC(0xf5f50d66), STC(0xdedf047c), STC(0xc8e5032a), STC(0xb4c373ed), STC(0xa326eebf), STC(0x94a6715c), STC(0x89be50c2), - STC(0x7d33f0ca), STC(0x74ef0ebc), STC(0x678dde6e), STC(0x55a6125c), STC(0x40000000), STC(0x278dde6e), STC(0x0d61304e), STC(0xf29ecfb1), STC(0xd8722191), STC(0xbfffffff), STC(0xaa59eda3), STC(0x98722191), STC(0x8b10f143), STC(0x82cc0f35), STC(0x80000000), - STC(0x7c769e18), STC(0x720c8075), STC(0x6154fb91), STC(0x4b3c8c12), STC(0x30fbc54d), STC(0x14060b68), STC(0xf5f50d66), STC(0xd8722191), STC(0xbd1ec45b), STC(0xa57d8665), STC(0x92dcafe4), STC(0x8643c7b2), STC(0x80650346), STC(0x81936dae), STC(0x89be50c2), - STC(0x7ba3751d), STC(0x6ed9eba1), STC(0x5a82799a), STC(0x40000000), STC(0x2120fb83), STC(0x00000000), STC(0xdedf047c), STC(0xbfffffff), STC(0xa57d8665), STC(0x9126145e), STC(0x845c8ae2), STC(0x80000000), STC(0x845c8ae2), STC(0x9126145e), STC(0xa57d8665), - STC(0x7aba9ae6), STC(0x6b598ea3), STC(0x53211d18), STC(0x340ff242), STC(0x10b5150f), STC(0xebf9f497), STC(0xc8e5032a), STC(0xaa59eda3), STC(0x92dcafe4), STC(0x845c8ae2), STC(0x800b3a90), STC(0x8643c7b2), STC(0x96830875), STC(0xaf726dee), STC(0xcf043ab2), - STC(0x79bc384d), STC(0x678dde6e), STC(0x4b3c8c12), STC(0x278dde6e), STC(0x00000000), STC(0xd8722191), STC(0xb4c373ed), STC(0x98722191), STC(0x8643c7b2), STC(0x80000000), STC(0x8643c7b2), STC(0x98722191), STC(0xb4c373ed), STC(0xd8722191), STC(0xffffffff), - STC(0x78a879f4), STC(0x637984d4), STC(0x42e13ba4), STC(0x1a9cd9ac), STC(0xef4aeaf0), STC(0xc5e3a3a8), STC(0xa326eebf), STC(0x8b10f143), STC(0x80650346), STC(0x845c8ae2), STC(0x96830875), STC(0xb4c373ed), STC(0xdba5629a), STC(0x06b2f1d2), STC(0x30fbc54d), - STC(0x777f903c), STC(0x5f1f5ea1), STC(0x3a1c5c57), STC(0x0d61304e), STC(0xdedf047c), STC(0xb4c373ed), STC(0x94a6715c), STC(0x82cc0f35), STC(0x81936dae), STC(0x9126145e), STC(0xaf726dee), STC(0xd8722191), STC(0x06b2f1d2), STC(0x340ff242), STC(0x5a82799a), -}; -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_STB RotVectorImag240[] = -{ - STC(0x0359c428), STC(0x06b2f1d2), STC(0x0a0af299), STC(0x0d61304e), STC(0x10b5150f), STC(0x14060b68), STC(0x17537e63), STC(0x1a9cd9ac), STC(0x1de189a6), STC(0x2120fb83), STC(0x245a9d65), STC(0x278dde6e), STC(0x2aba2ee4), STC(0x2ddf0040), STC(0x30fbc54d), - STC(0x06b2f1d2), STC(0x0d61304e), STC(0x14060b68), STC(0x1a9cd9ac), STC(0x2120fb83), STC(0x278dde6e), STC(0x2ddf0040), STC(0x340ff242), STC(0x3a1c5c57), STC(0x40000000), STC(0x45b6bb5e), STC(0x4b3c8c12), STC(0x508d9211), STC(0x55a6125c), STC(0x5a82799a), - STC(0x0a0af299), STC(0x14060b68), STC(0x1de189a6), STC(0x278dde6e), STC(0x30fbc54d), STC(0x3a1c5c57), STC(0x42e13ba4), STC(0x4b3c8c12), STC(0x53211d18), STC(0x5a82799a), STC(0x6154fb91), STC(0x678dde6e), STC(0x6d23501b), STC(0x720c8075), STC(0x7641af3d), - STC(0x0d61304e), STC(0x1a9cd9ac), STC(0x278dde6e), STC(0x340ff242), STC(0x40000000), STC(0x4b3c8c12), STC(0x55a6125c), STC(0x5f1f5ea1), STC(0x678dde6e), STC(0x6ed9eba1), STC(0x74ef0ebc), STC(0x79bc384d), STC(0x7d33f0ca), STC(0x7f4c7e54), STC(0x7fffffff), - STC(0x10b5150f), STC(0x2120fb83), STC(0x30fbc54d), STC(0x40000000), STC(0x4debe4fe), STC(0x5a82799a), STC(0x658c9a2d), STC(0x6ed9eba1), STC(0x7641af3d), STC(0x7ba3751d), STC(0x7ee7aa4c), STC(0x7fffffff), STC(0x7ee7aa4c), STC(0x7ba3751d), STC(0x7641af3d), - STC(0x14060b68), STC(0x278dde6e), STC(0x3a1c5c57), STC(0x4b3c8c12), STC(0x5a82799a), STC(0x678dde6e), STC(0x720c8075), STC(0x79bc384d), STC(0x7e6c9251), STC(0x7fffffff), STC(0x7e6c9251), STC(0x79bc384d), STC(0x720c8075), STC(0x678dde6e), STC(0x5a82799a), - STC(0x17537e63), STC(0x2ddf0040), STC(0x42e13ba4), STC(0x55a6125c), STC(0x658c9a2d), STC(0x720c8075), STC(0x7aba9ae6), STC(0x7f4c7e54), STC(0x7f9afcb9), STC(0x7ba3751d), STC(0x7387ea23), STC(0x678dde6e), STC(0x581c00b3), STC(0x45b6bb5e), STC(0x30fbc54d), - STC(0x1a9cd9ac), STC(0x340ff242), STC(0x4b3c8c12), STC(0x5f1f5ea1), STC(0x6ed9eba1), STC(0x79bc384d), STC(0x7f4c7e54), STC(0x7f4c7e54), STC(0x79bc384d), STC(0x6ed9eba1), STC(0x5f1f5ea1), STC(0x4b3c8c12), STC(0x340ff242), STC(0x1a9cd9ac), STC(0x00000000), - STC(0x1de189a6), STC(0x3a1c5c57), STC(0x53211d18), STC(0x678dde6e), STC(0x7641af3d), STC(0x7e6c9251), STC(0x7f9afcb9), STC(0x79bc384d), STC(0x6d23501b), STC(0x5a82799a), STC(0x42e13ba4), STC(0x278dde6e), STC(0x0a0af299), STC(0xebf9f497), STC(0xcf043ab2), - STC(0x2120fb83), STC(0x40000000), STC(0x5a82799a), STC(0x6ed9eba1), STC(0x7ba3751d), STC(0x7fffffff), STC(0x7ba3751d), STC(0x6ed9eba1), STC(0x5a82799a), STC(0x40000000), STC(0x2120fb83), STC(0x00000000), STC(0xdedf047c), STC(0xbfffffff), STC(0xa57d8665), - STC(0x245a9d65), STC(0x45b6bb5e), STC(0x6154fb91), STC(0x74ef0ebc), STC(0x7ee7aa4c), STC(0x7e6c9251), STC(0x7387ea23), STC(0x5f1f5ea1), STC(0x42e13ba4), STC(0x2120fb83), STC(0xfca63bd7), STC(0xd8722191), STC(0xb780001b), STC(0x9c867b2b), STC(0x89be50c2), - STC(0x278dde6e), STC(0x4b3c8c12), STC(0x678dde6e), STC(0x79bc384d), STC(0x7fffffff), STC(0x79bc384d), STC(0x678dde6e), STC(0x4b3c8c12), STC(0x278dde6e), STC(0x00000000), STC(0xd8722191), STC(0xb4c373ed), STC(0x98722191), STC(0x8643c7b2), STC(0x80000000), - STC(0x2aba2ee4), STC(0x508d9211), STC(0x6d23501b), STC(0x7d33f0ca), STC(0x7ee7aa4c), STC(0x720c8075), STC(0x581c00b3), STC(0x340ff242), STC(0x0a0af299), STC(0xdedf047c), STC(0xb780001b), STC(0x98722191), STC(0x85456519), STC(0x802ce84b), STC(0x89be50c2), - STC(0x2ddf0040), STC(0x55a6125c), STC(0x720c8075), STC(0x7f4c7e54), STC(0x7ba3751d), STC(0x678dde6e), STC(0x45b6bb5e), STC(0x1a9cd9ac), STC(0xebf9f497), STC(0xbfffffff), STC(0x9c867b2b), STC(0x8643c7b2), STC(0x802ce84b), STC(0x8b10f143), STC(0xa57d8665), -}; - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_STB RotVectorReal480[] = -{ - STC(0x7ffd3154), STC(0x7ff4c56f), STC(0x7fe6bcb0), STC(0x7fd317b4), STC(0x7fb9d759), STC(0x7f9afcb9), STC(0x7f76892f), STC(0x7f4c7e54), STC(0x7f1cde01), STC(0x7ee7aa4c), STC(0x7eace58a), STC(0x7e6c9251), STC(0x7e26b371), STC(0x7ddb4bfc), STC(0x7d8a5f40), STC(0x7d33f0ca), STC(0x7cd80464), STC(0x7c769e18), STC(0x7c0fc22a), STC(0x7ba3751d), STC(0x7b31bbb2), STC(0x7aba9ae6), STC(0x7a3e17f2), STC(0x79bc384d), STC(0x793501a9), STC(0x78a879f4), STC(0x7816a759), STC(0x777f903c), STC(0x76e33b3f), STC(0x7641af3d), STC(0x759af34c), - STC(0x7ff4c56f), STC(0x7fd317b4), STC(0x7f9afcb9), STC(0x7f4c7e54), STC(0x7ee7aa4c), STC(0x7e6c9251), STC(0x7ddb4bfc), STC(0x7d33f0ca), STC(0x7c769e18), STC(0x7ba3751d), STC(0x7aba9ae6), STC(0x79bc384d), STC(0x78a879f4), STC(0x777f903c), STC(0x7641af3d), STC(0x74ef0ebc), STC(0x7387ea23), STC(0x720c8075), STC(0x707d1443), STC(0x6ed9eba1), STC(0x6d23501b), STC(0x6b598ea3), STC(0x697cf78a), STC(0x678dde6e), STC(0x658c9a2d), STC(0x637984d4), STC(0x6154fb91), STC(0x5f1f5ea1), STC(0x5cd91140), STC(0x5a82799a), STC(0x581c00b3), - STC(0x7fe6bcb0), STC(0x7f9afcb9), STC(0x7f1cde01), STC(0x7e6c9251), STC(0x7d8a5f40), STC(0x7c769e18), STC(0x7b31bbb2), STC(0x79bc384d), STC(0x7816a759), STC(0x7641af3d), STC(0x743e0918), STC(0x720c8075), STC(0x6fadf2fc), STC(0x6d23501b), STC(0x6a6d98a4), STC(0x678dde6e), STC(0x648543e4), STC(0x6154fb91), STC(0x5dfe47ad), STC(0x5a82799a), STC(0x56e2f15d), STC(0x53211d18), STC(0x4f3e7875), STC(0x4b3c8c12), STC(0x471cece7), STC(0x42e13ba4), STC(0x3e8b240e), STC(0x3a1c5c57), STC(0x3596a46c), STC(0x30fbc54d), STC(0x2c4d9050), - STC(0x7fd317b4), STC(0x7f4c7e54), STC(0x7e6c9251), STC(0x7d33f0ca), STC(0x7ba3751d), STC(0x79bc384d), STC(0x777f903c), STC(0x74ef0ebc), STC(0x720c8075), STC(0x6ed9eba1), STC(0x6b598ea3), STC(0x678dde6e), STC(0x637984d4), STC(0x5f1f5ea1), STC(0x5a82799a), STC(0x55a6125c), STC(0x508d9211), STC(0x4b3c8c12), STC(0x45b6bb5e), STC(0x40000000), STC(0x3a1c5c57), STC(0x340ff242), STC(0x2ddf0040), STC(0x278dde6e), STC(0x2120fb83), STC(0x1a9cd9ac), STC(0x14060b68), STC(0x0d61304e), STC(0x06b2f1d2), STC(0x00000000), STC(0xf94d0e2d), - STC(0x7fb9d759), STC(0x7ee7aa4c), STC(0x7d8a5f40), STC(0x7ba3751d), STC(0x793501a9), STC(0x7641af3d), STC(0x72ccb9db), STC(0x6ed9eba1), STC(0x6a6d98a4), STC(0x658c9a2d), STC(0x603c496c), STC(0x5a82799a), STC(0x54657194), STC(0x4debe4fe), STC(0x471cece7), STC(0x40000000), STC(0x389cea72), STC(0x30fbc54d), STC(0x2924edac), STC(0x2120fb83), STC(0x18f8b83c), STC(0x10b5150f), STC(0x085f2137), STC(0x00000000), STC(0xf7a0dec8), STC(0xef4aeaf0), STC(0xe70747c3), STC(0xdedf047c), STC(0xd6db1253), STC(0xcf043ab2), STC(0xc763158d), - STC(0x7f9afcb9), STC(0x7e6c9251), STC(0x7c769e18), STC(0x79bc384d), STC(0x7641af3d), STC(0x720c8075), STC(0x6d23501b), STC(0x678dde6e), STC(0x6154fb91), STC(0x5a82799a), STC(0x53211d18), STC(0x4b3c8c12), STC(0x42e13ba4), STC(0x3a1c5c57), STC(0x30fbc54d), STC(0x278dde6e), STC(0x1de189a6), STC(0x14060b68), STC(0x0a0af299), STC(0x00000000), STC(0xf5f50d66), STC(0xebf9f497), STC(0xe21e7659), STC(0xd8722191), STC(0xcf043ab2), STC(0xc5e3a3a8), STC(0xbd1ec45b), STC(0xb4c373ed), STC(0xacdee2e7), STC(0xa57d8665), STC(0x9eab046e), - STC(0x7f76892f), STC(0x7ddb4bfc), STC(0x7b31bbb2), STC(0x777f903c), STC(0x72ccb9db), STC(0x6d23501b), STC(0x668f7c25), STC(0x5f1f5ea1), STC(0x56e2f15d), STC(0x4debe4fe), STC(0x444d7aff), STC(0x3a1c5c57), STC(0x2f6e6d16), STC(0x245a9d65), STC(0x18f8b83c), STC(0x0d61304e), STC(0x01aceb7c), STC(0xf5f50d66), STC(0xea52c165), STC(0xdedf047c), STC(0xd3b26faf), STC(0xc8e5032a), STC(0xbe8df2b9), STC(0xb4c373ed), STC(0xab9a8e6b), STC(0xa326eebf), STC(0x9b7abc1b), STC(0x94a6715c), STC(0x8eb8b99f), STC(0x89be50c2), STC(0x85c1e80d), - STC(0x7f4c7e54), STC(0x7d33f0ca), STC(0x79bc384d), STC(0x74ef0ebc), STC(0x6ed9eba1), STC(0x678dde6e), STC(0x5f1f5ea1), STC(0x55a6125c), STC(0x4b3c8c12), STC(0x40000000), STC(0x340ff242), STC(0x278dde6e), STC(0x1a9cd9ac), STC(0x0d61304e), STC(0x00000000), STC(0xf29ecfb1), STC(0xe5632653), STC(0xd8722191), STC(0xcbf00dbd), STC(0xbfffffff), STC(0xb4c373ed), STC(0xaa59eda3), STC(0xa0e0a15e), STC(0x98722191), STC(0x9126145e), STC(0x8b10f143), STC(0x8643c7b2), STC(0x82cc0f35), STC(0x80b381ab), STC(0x80000000), STC(0x80b381ab), - STC(0x7f1cde01), STC(0x7c769e18), STC(0x7816a759), STC(0x720c8075), STC(0x6a6d98a4), STC(0x6154fb91), STC(0x56e2f15d), STC(0x4b3c8c12), STC(0x3e8b240e), STC(0x30fbc54d), STC(0x22be8f87), STC(0x14060b68), STC(0x05067734), STC(0xf5f50d66), STC(0xe70747c3), STC(0xd8722191), STC(0xca695b93), STC(0xbd1ec45b), STC(0xb0c1878a), STC(0xa57d8665), STC(0x9b7abc1b), STC(0x92dcafe4), STC(0x8bc1f6e7), STC(0x8643c7b2), STC(0x8275a0bf), STC(0x80650346), STC(0x8019434f), STC(0x81936dae), STC(0x84ce444d), STC(0x89be50c2), STC(0x90520d03), - STC(0x7ee7aa4c), STC(0x7ba3751d), STC(0x7641af3d), STC(0x6ed9eba1), STC(0x658c9a2d), STC(0x5a82799a), STC(0x4debe4fe), STC(0x40000000), STC(0x30fbc54d), STC(0x2120fb83), STC(0x10b5150f), STC(0x00000000), STC(0xef4aeaf0), STC(0xdedf047c), STC(0xcf043ab2), STC(0xbfffffff), STC(0xb2141b01), STC(0xa57d8665), STC(0x9a7365d2), STC(0x9126145e), STC(0x89be50c2), STC(0x845c8ae2), STC(0x811855b3), STC(0x80000000), STC(0x811855b3), STC(0x845c8ae2), STC(0x89be50c2), STC(0x9126145e), STC(0x9a7365d2), STC(0xa57d8665), STC(0xb2141b01), - STC(0x7eace58a), STC(0x7aba9ae6), STC(0x743e0918), STC(0x6b598ea3), STC(0x603c496c), STC(0x53211d18), STC(0x444d7aff), STC(0x340ff242), STC(0x22be8f87), STC(0x10b5150f), STC(0xfe531483), STC(0xebf9f497), STC(0xda0aecf8), STC(0xc8e5032a), STC(0xb8e31318), STC(0xaa59eda3), STC(0x9d969741), STC(0x92dcafe4), STC(0x8a650cb3), STC(0x845c8ae2), STC(0x80e321fe), STC(0x800b3a90), STC(0x81d94c8e), STC(0x8643c7b2), STC(0x8d334624), STC(0x96830875), STC(0xa201b852), STC(0xaf726dee), STC(0xbe8df2b9), STC(0xcf043ab2), STC(0xe07e0c83), - STC(0x7e6c9251), STC(0x79bc384d), STC(0x720c8075), STC(0x678dde6e), STC(0x5a82799a), STC(0x4b3c8c12), STC(0x3a1c5c57), STC(0x278dde6e), STC(0x14060b68), STC(0x00000000), STC(0xebf9f497), STC(0xd8722191), STC(0xc5e3a3a8), STC(0xb4c373ed), STC(0xa57d8665), STC(0x98722191), STC(0x8df37f8a), STC(0x8643c7b2), STC(0x81936dae), STC(0x80000000), STC(0x81936dae), STC(0x8643c7b2), STC(0x8df37f8a), STC(0x98722191), STC(0xa57d8665), STC(0xb4c373ed), STC(0xc5e3a3a8), STC(0xd8722191), STC(0xebf9f497), STC(0xffffffff), STC(0x14060b68), - STC(0x7e26b371), STC(0x78a879f4), STC(0x6fadf2fc), STC(0x637984d4), STC(0x54657194), STC(0x42e13ba4), STC(0x2f6e6d16), STC(0x1a9cd9ac), STC(0x05067734), STC(0xef4aeaf0), STC(0xda0aecf8), STC(0xc5e3a3a8), STC(0xb36a1977), STC(0xa326eebf), STC(0x9592675b), STC(0x8b10f143), STC(0x83f03dd5), STC(0x80650346), STC(0x808976d0), STC(0x845c8ae2), STC(0x8bc1f6e7), STC(0x96830875), STC(0xa45037c8), STC(0xb4c373ed), STC(0xc763158d), STC(0xdba5629a), STC(0xf0f488d8), STC(0x06b2f1d2), STC(0x1c3fd045), STC(0x30fbc54d), STC(0x444d7aff), - STC(0x7ddb4bfc), STC(0x777f903c), STC(0x6d23501b), STC(0x5f1f5ea1), STC(0x4debe4fe), STC(0x3a1c5c57), STC(0x245a9d65), STC(0x0d61304e), STC(0xf5f50d66), STC(0xdedf047c), STC(0xc8e5032a), STC(0xb4c373ed), STC(0xa326eebf), STC(0x94a6715c), STC(0x89be50c2), STC(0x82cc0f35), STC(0x800b3a90), STC(0x81936dae), STC(0x8757860b), STC(0x9126145e), STC(0x9eab046e), STC(0xaf726dee), STC(0xc2ec7634), STC(0xd8722191), STC(0xef4aeaf0), STC(0x06b2f1d2), STC(0x1de189a6), STC(0x340ff242), STC(0x487fffe4), STC(0x5a82799a), STC(0x697cf78a), -}; -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_STB RotVectorImag480[] = -{ - STC(0x01aceb7c), STC(0x0359c428), STC(0x05067734), STC(0x06b2f1d2), STC(0x085f2137), STC(0x0a0af299), STC(0x0bb65336), STC(0x0d61304e), STC(0x0f0b7727), STC(0x10b5150f), STC(0x125df75b), STC(0x14060b68), STC(0x15ad3e9a), STC(0x17537e63), STC(0x18f8b83c), STC(0x1a9cd9ac), STC(0x1c3fd045), STC(0x1de189a6), STC(0x1f81f37c), STC(0x2120fb83), STC(0x22be8f87), STC(0x245a9d65), STC(0x25f51307), STC(0x278dde6e), STC(0x2924edac), STC(0x2aba2ee4), STC(0x2c4d9050), STC(0x2ddf0040), STC(0x2f6e6d16), STC(0x30fbc54d), STC(0x3286f779), - STC(0x0359c428), STC(0x06b2f1d2), STC(0x0a0af299), STC(0x0d61304e), STC(0x10b5150f), STC(0x14060b68), STC(0x17537e63), STC(0x1a9cd9ac), STC(0x1de189a6), STC(0x2120fb83), STC(0x245a9d65), STC(0x278dde6e), STC(0x2aba2ee4), STC(0x2ddf0040), STC(0x30fbc54d), STC(0x340ff242), STC(0x371afcd5), STC(0x3a1c5c57), STC(0x3d1389cb), STC(0x40000000), STC(0x42e13ba4), STC(0x45b6bb5e), STC(0x487fffe4), STC(0x4b3c8c12), STC(0x4debe4fe), STC(0x508d9211), STC(0x53211d18), STC(0x55a6125c), STC(0x581c00b3), STC(0x5a82799a), STC(0x5cd91140), - STC(0x05067734), STC(0x0a0af299), STC(0x0f0b7727), STC(0x14060b68), STC(0x18f8b83c), STC(0x1de189a6), STC(0x22be8f87), STC(0x278dde6e), STC(0x2c4d9050), STC(0x30fbc54d), STC(0x3596a46c), STC(0x3a1c5c57), STC(0x3e8b240e), STC(0x42e13ba4), STC(0x471cece7), STC(0x4b3c8c12), STC(0x4f3e7875), STC(0x53211d18), STC(0x56e2f15d), STC(0x5a82799a), STC(0x5dfe47ad), STC(0x6154fb91), STC(0x648543e4), STC(0x678dde6e), STC(0x6a6d98a4), STC(0x6d23501b), STC(0x6fadf2fc), STC(0x720c8075), STC(0x743e0918), STC(0x7641af3d), STC(0x7816a759), - STC(0x06b2f1d2), STC(0x0d61304e), STC(0x14060b68), STC(0x1a9cd9ac), STC(0x2120fb83), STC(0x278dde6e), STC(0x2ddf0040), STC(0x340ff242), STC(0x3a1c5c57), STC(0x40000000), STC(0x45b6bb5e), STC(0x4b3c8c12), STC(0x508d9211), STC(0x55a6125c), STC(0x5a82799a), STC(0x5f1f5ea1), STC(0x637984d4), STC(0x678dde6e), STC(0x6b598ea3), STC(0x6ed9eba1), STC(0x720c8075), STC(0x74ef0ebc), STC(0x777f903c), STC(0x79bc384d), STC(0x7ba3751d), STC(0x7d33f0ca), STC(0x7e6c9251), STC(0x7f4c7e54), STC(0x7fd317b4), STC(0x7fffffff), STC(0x7fd317b4), - STC(0x085f2137), STC(0x10b5150f), STC(0x18f8b83c), STC(0x2120fb83), STC(0x2924edac), STC(0x30fbc54d), STC(0x389cea72), STC(0x40000000), STC(0x471cece7), STC(0x4debe4fe), STC(0x54657194), STC(0x5a82799a), STC(0x603c496c), STC(0x658c9a2d), STC(0x6a6d98a4), STC(0x6ed9eba1), STC(0x72ccb9db), STC(0x7641af3d), STC(0x793501a9), STC(0x7ba3751d), STC(0x7d8a5f40), STC(0x7ee7aa4c), STC(0x7fb9d759), STC(0x7fffffff), STC(0x7fb9d759), STC(0x7ee7aa4c), STC(0x7d8a5f40), STC(0x7ba3751d), STC(0x793501a9), STC(0x7641af3d), STC(0x72ccb9db), - STC(0x0a0af299), STC(0x14060b68), STC(0x1de189a6), STC(0x278dde6e), STC(0x30fbc54d), STC(0x3a1c5c57), STC(0x42e13ba4), STC(0x4b3c8c12), STC(0x53211d18), STC(0x5a82799a), STC(0x6154fb91), STC(0x678dde6e), STC(0x6d23501b), STC(0x720c8075), STC(0x7641af3d), STC(0x79bc384d), STC(0x7c769e18), STC(0x7e6c9251), STC(0x7f9afcb9), STC(0x7fffffff), STC(0x7f9afcb9), STC(0x7e6c9251), STC(0x7c769e18), STC(0x79bc384d), STC(0x7641af3d), STC(0x720c8075), STC(0x6d23501b), STC(0x678dde6e), STC(0x6154fb91), STC(0x5a82799a), STC(0x53211d18), - STC(0x0bb65336), STC(0x17537e63), STC(0x22be8f87), STC(0x2ddf0040), STC(0x389cea72), STC(0x42e13ba4), STC(0x4c95e688), STC(0x55a6125c), STC(0x5dfe47ad), STC(0x658c9a2d), STC(0x6c40cf2c), STC(0x720c8075), STC(0x76e33b3f), STC(0x7aba9ae6), STC(0x7d8a5f40), STC(0x7f4c7e54), STC(0x7ffd3154), STC(0x7f9afcb9), STC(0x7e26b371), STC(0x7ba3751d), STC(0x7816a759), STC(0x7387ea23), STC(0x6e010780), STC(0x678dde6e), STC(0x603c496c), STC(0x581c00b3), STC(0x4f3e7875), STC(0x45b6bb5e), STC(0x3b9941b1), STC(0x30fbc54d), STC(0x25f51307), - STC(0x0d61304e), STC(0x1a9cd9ac), STC(0x278dde6e), STC(0x340ff242), STC(0x40000000), STC(0x4b3c8c12), STC(0x55a6125c), STC(0x5f1f5ea1), STC(0x678dde6e), STC(0x6ed9eba1), STC(0x74ef0ebc), STC(0x79bc384d), STC(0x7d33f0ca), STC(0x7f4c7e54), STC(0x7fffffff), STC(0x7f4c7e54), STC(0x7d33f0ca), STC(0x79bc384d), STC(0x74ef0ebc), STC(0x6ed9eba1), STC(0x678dde6e), STC(0x5f1f5ea1), STC(0x55a6125c), STC(0x4b3c8c12), STC(0x40000000), STC(0x340ff242), STC(0x278dde6e), STC(0x1a9cd9ac), STC(0x0d61304e), STC(0x00000000), STC(0xf29ecfb1), - STC(0x0f0b7727), STC(0x1de189a6), STC(0x2c4d9050), STC(0x3a1c5c57), STC(0x471cece7), STC(0x53211d18), STC(0x5dfe47ad), STC(0x678dde6e), STC(0x6fadf2fc), STC(0x7641af3d), STC(0x7b31bbb2), STC(0x7e6c9251), STC(0x7fe6bcb0), STC(0x7f9afcb9), STC(0x7d8a5f40), STC(0x79bc384d), STC(0x743e0918), STC(0x6d23501b), STC(0x648543e4), STC(0x5a82799a), STC(0x4f3e7875), STC(0x42e13ba4), STC(0x3596a46c), STC(0x278dde6e), STC(0x18f8b83c), STC(0x0a0af299), STC(0xfaf988cb), STC(0xebf9f497), STC(0xdd417078), STC(0xcf043ab2), STC(0xc174dbf1), - STC(0x10b5150f), STC(0x2120fb83), STC(0x30fbc54d), STC(0x40000000), STC(0x4debe4fe), STC(0x5a82799a), STC(0x658c9a2d), STC(0x6ed9eba1), STC(0x7641af3d), STC(0x7ba3751d), STC(0x7ee7aa4c), STC(0x7fffffff), STC(0x7ee7aa4c), STC(0x7ba3751d), STC(0x7641af3d), STC(0x6ed9eba1), STC(0x658c9a2d), STC(0x5a82799a), STC(0x4debe4fe), STC(0x40000000), STC(0x30fbc54d), STC(0x2120fb83), STC(0x10b5150f), STC(0x00000000), STC(0xef4aeaf0), STC(0xdedf047c), STC(0xcf043ab2), STC(0xbfffffff), STC(0xb2141b01), STC(0xa57d8665), STC(0x9a7365d2), - STC(0x125df75b), STC(0x245a9d65), STC(0x3596a46c), STC(0x45b6bb5e), STC(0x54657194), STC(0x6154fb91), STC(0x6c40cf2c), STC(0x74ef0ebc), STC(0x7b31bbb2), STC(0x7ee7aa4c), STC(0x7ffd3154), STC(0x7e6c9251), STC(0x7a3e17f2), STC(0x7387ea23), STC(0x6a6d98a4), STC(0x5f1f5ea1), STC(0x51d92321), STC(0x42e13ba4), STC(0x3286f779), STC(0x2120fb83), STC(0x0f0b7727), STC(0xfca63bd7), STC(0xea52c165), STC(0xd8722191), STC(0xc763158d), STC(0xb780001b), STC(0xa91d0ea2), STC(0x9c867b2b), STC(0x91fef87f), STC(0x89be50c2), STC(0x83f03dd5), - STC(0x14060b68), STC(0x278dde6e), STC(0x3a1c5c57), STC(0x4b3c8c12), STC(0x5a82799a), STC(0x678dde6e), STC(0x720c8075), STC(0x79bc384d), STC(0x7e6c9251), STC(0x7fffffff), STC(0x7e6c9251), STC(0x79bc384d), STC(0x720c8075), STC(0x678dde6e), STC(0x5a82799a), STC(0x4b3c8c12), STC(0x3a1c5c57), STC(0x278dde6e), STC(0x14060b68), STC(0x00000000), STC(0xebf9f497), STC(0xd8722191), STC(0xc5e3a3a8), STC(0xb4c373ed), STC(0xa57d8665), STC(0x98722191), STC(0x8df37f8a), STC(0x8643c7b2), STC(0x81936dae), STC(0x80000000), STC(0x81936dae), - STC(0x15ad3e9a), STC(0x2aba2ee4), STC(0x3e8b240e), STC(0x508d9211), STC(0x603c496c), STC(0x6d23501b), STC(0x76e33b3f), STC(0x7d33f0ca), STC(0x7fe6bcb0), STC(0x7ee7aa4c), STC(0x7a3e17f2), STC(0x720c8075), STC(0x668f7c25), STC(0x581c00b3), STC(0x471cece7), STC(0x340ff242), STC(0x1f81f37c), STC(0x0a0af299), STC(0xf449acc9), STC(0xdedf047c), STC(0xca695b93), STC(0xb780001b), STC(0xa6aecd5d), STC(0x98722191), STC(0x8d334624), STC(0x85456519), STC(0x80e321fe), STC(0x802ce84b), STC(0x8327fb9b), STC(0x89be50c2), STC(0x93bf30d3), - STC(0x17537e63), STC(0x2ddf0040), STC(0x42e13ba4), STC(0x55a6125c), STC(0x658c9a2d), STC(0x720c8075), STC(0x7aba9ae6), STC(0x7f4c7e54), STC(0x7f9afcb9), STC(0x7ba3751d), STC(0x7387ea23), STC(0x678dde6e), STC(0x581c00b3), STC(0x45b6bb5e), STC(0x30fbc54d), STC(0x1a9cd9ac), STC(0x0359c428), STC(0xebf9f497), STC(0xd545d11b), STC(0xbfffffff), STC(0xacdee2e7), STC(0x9c867b2b), STC(0x8f82ebbc), STC(0x8643c7b2), STC(0x811855b3), STC(0x802ce84b), STC(0x838961e7), STC(0x8b10f143), STC(0x96830875), STC(0xa57d8665), STC(0xb780001b), -}; - - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_WTP SineWindow1024[] = -{ - WTCP(0x7ffffd88, 0x001921fb), WTCP(0x7fffe9cb, 0x004b65ee), WTCP(0x7fffc251, 0x007da9d4), WTCP(0x7fff8719, 0x00afeda8), - WTCP(0x7fff3824, 0x00e23160), WTCP(0x7ffed572, 0x011474f6), WTCP(0x7ffe5f03, 0x0146b860), WTCP(0x7ffdd4d7, 0x0178fb99), - WTCP(0x7ffd36ee, 0x01ab3e97), WTCP(0x7ffc8549, 0x01dd8154), WTCP(0x7ffbbfe6, 0x020fc3c6), WTCP(0x7ffae6c7, 0x024205e8), - WTCP(0x7ff9f9ec, 0x027447b0), WTCP(0x7ff8f954, 0x02a68917), WTCP(0x7ff7e500, 0x02d8ca16), WTCP(0x7ff6bcf0, 0x030b0aa4), - WTCP(0x7ff58125, 0x033d4abb), WTCP(0x7ff4319d, 0x036f8a51), WTCP(0x7ff2ce5b, 0x03a1c960), WTCP(0x7ff1575d, 0x03d407df), - WTCP(0x7fefcca4, 0x040645c7), WTCP(0x7fee2e30, 0x04388310), WTCP(0x7fec7c02, 0x046abfb3), WTCP(0x7feab61a, 0x049cfba7), - WTCP(0x7fe8dc78, 0x04cf36e5), WTCP(0x7fe6ef1c, 0x05017165), WTCP(0x7fe4ee06, 0x0533ab20), WTCP(0x7fe2d938, 0x0565e40d), - WTCP(0x7fe0b0b1, 0x05981c26), WTCP(0x7fde7471, 0x05ca5361), WTCP(0x7fdc247a, 0x05fc89b8), WTCP(0x7fd9c0ca, 0x062ebf22), - WTCP(0x7fd74964, 0x0660f398), WTCP(0x7fd4be46, 0x06932713), WTCP(0x7fd21f72, 0x06c5598a), WTCP(0x7fcf6ce8, 0x06f78af6), - WTCP(0x7fcca6a7, 0x0729bb4e), WTCP(0x7fc9ccb2, 0x075bea8c), WTCP(0x7fc6df08, 0x078e18a7), WTCP(0x7fc3dda9, 0x07c04598), - WTCP(0x7fc0c896, 0x07f27157), WTCP(0x7fbd9fd0, 0x08249bdd), WTCP(0x7fba6357, 0x0856c520), WTCP(0x7fb7132b, 0x0888ed1b), - WTCP(0x7fb3af4e, 0x08bb13c5), WTCP(0x7fb037bf, 0x08ed3916), WTCP(0x7facac7f, 0x091f5d06), WTCP(0x7fa90d8e, 0x09517f8f), - WTCP(0x7fa55aee, 0x0983a0a7), WTCP(0x7fa1949e, 0x09b5c048), WTCP(0x7f9dbaa0, 0x09e7de6a), WTCP(0x7f99ccf4, 0x0a19fb04), - WTCP(0x7f95cb9a, 0x0a4c1610), WTCP(0x7f91b694, 0x0a7e2f85), WTCP(0x7f8d8de1, 0x0ab0475c), WTCP(0x7f895182, 0x0ae25d8d), - WTCP(0x7f850179, 0x0b147211), WTCP(0x7f809dc5, 0x0b4684df), WTCP(0x7f7c2668, 0x0b7895f0), WTCP(0x7f779b62, 0x0baaa53b), - WTCP(0x7f72fcb4, 0x0bdcb2bb), WTCP(0x7f6e4a5e, 0x0c0ebe66), WTCP(0x7f698461, 0x0c40c835), WTCP(0x7f64aabf, 0x0c72d020), - WTCP(0x7f5fbd77, 0x0ca4d620), WTCP(0x7f5abc8a, 0x0cd6da2d), WTCP(0x7f55a7fa, 0x0d08dc3f), WTCP(0x7f507fc7, 0x0d3adc4e), - WTCP(0x7f4b43f2, 0x0d6cda53), WTCP(0x7f45f47b, 0x0d9ed646), WTCP(0x7f409164, 0x0dd0d01f), WTCP(0x7f3b1aad, 0x0e02c7d7), - WTCP(0x7f359057, 0x0e34bd66), WTCP(0x7f2ff263, 0x0e66b0c3), WTCP(0x7f2a40d2, 0x0e98a1e9), WTCP(0x7f247ba5, 0x0eca90ce), - WTCP(0x7f1ea2dc, 0x0efc7d6b), WTCP(0x7f18b679, 0x0f2e67b8), WTCP(0x7f12b67c, 0x0f604faf), WTCP(0x7f0ca2e7, 0x0f923546), - WTCP(0x7f067bba, 0x0fc41876), WTCP(0x7f0040f6, 0x0ff5f938), WTCP(0x7ef9f29d, 0x1027d784), WTCP(0x7ef390ae, 0x1059b352), - WTCP(0x7eed1b2c, 0x108b8c9b), WTCP(0x7ee69217, 0x10bd6356), WTCP(0x7edff570, 0x10ef377d), WTCP(0x7ed94538, 0x11210907), - WTCP(0x7ed28171, 0x1152d7ed), WTCP(0x7ecbaa1a, 0x1184a427), WTCP(0x7ec4bf36, 0x11b66dad), WTCP(0x7ebdc0c6, 0x11e83478), - WTCP(0x7eb6aeca, 0x1219f880), WTCP(0x7eaf8943, 0x124bb9be), WTCP(0x7ea85033, 0x127d7829), WTCP(0x7ea1039b, 0x12af33ba), - WTCP(0x7e99a37c, 0x12e0ec6a), WTCP(0x7e922fd6, 0x1312a230), WTCP(0x7e8aa8ac, 0x13445505), WTCP(0x7e830dff, 0x137604e2), - WTCP(0x7e7b5fce, 0x13a7b1bf), WTCP(0x7e739e1d, 0x13d95b93), WTCP(0x7e6bc8eb, 0x140b0258), WTCP(0x7e63e03b, 0x143ca605), - WTCP(0x7e5be40c, 0x146e4694), WTCP(0x7e53d462, 0x149fe3fc), WTCP(0x7e4bb13c, 0x14d17e36), WTCP(0x7e437a9c, 0x1503153a), - WTCP(0x7e3b3083, 0x1534a901), WTCP(0x7e32d2f4, 0x15663982), WTCP(0x7e2a61ed, 0x1597c6b7), WTCP(0x7e21dd73, 0x15c95097), - WTCP(0x7e194584, 0x15fad71b), WTCP(0x7e109a24, 0x162c5a3b), WTCP(0x7e07db52, 0x165dd9f0), WTCP(0x7dff0911, 0x168f5632), - WTCP(0x7df62362, 0x16c0cef9), WTCP(0x7ded2a47, 0x16f2443e), WTCP(0x7de41dc0, 0x1723b5f9), WTCP(0x7ddafdce, 0x17552422), - WTCP(0x7dd1ca75, 0x17868eb3), WTCP(0x7dc883b4, 0x17b7f5a3), WTCP(0x7dbf298d, 0x17e958ea), WTCP(0x7db5bc02, 0x181ab881), - WTCP(0x7dac3b15, 0x184c1461), WTCP(0x7da2a6c6, 0x187d6c82), WTCP(0x7d98ff17, 0x18aec0db), WTCP(0x7d8f4409, 0x18e01167), - WTCP(0x7d85759f, 0x19115e1c), WTCP(0x7d7b93da, 0x1942a6f3), WTCP(0x7d719eba, 0x1973ebe6), WTCP(0x7d679642, 0x19a52ceb), - WTCP(0x7d5d7a74, 0x19d669fc), WTCP(0x7d534b50, 0x1a07a311), WTCP(0x7d4908d9, 0x1a38d823), WTCP(0x7d3eb30f, 0x1a6a0929), - WTCP(0x7d3449f5, 0x1a9b361d), WTCP(0x7d29cd8c, 0x1acc5ef6), WTCP(0x7d1f3dd6, 0x1afd83ad), WTCP(0x7d149ad5, 0x1b2ea43a), - WTCP(0x7d09e489, 0x1b5fc097), WTCP(0x7cff1af5, 0x1b90d8bb), WTCP(0x7cf43e1a, 0x1bc1ec9e), WTCP(0x7ce94dfb, 0x1bf2fc3a), - WTCP(0x7cde4a98, 0x1c240786), WTCP(0x7cd333f3, 0x1c550e7c), WTCP(0x7cc80a0f, 0x1c861113), WTCP(0x7cbcccec, 0x1cb70f43), - WTCP(0x7cb17c8d, 0x1ce80906), WTCP(0x7ca618f3, 0x1d18fe54), WTCP(0x7c9aa221, 0x1d49ef26), WTCP(0x7c8f1817, 0x1d7adb73), - WTCP(0x7c837ad8, 0x1dabc334), WTCP(0x7c77ca65, 0x1ddca662), WTCP(0x7c6c06c0, 0x1e0d84f5), WTCP(0x7c602fec, 0x1e3e5ee5), - WTCP(0x7c5445e9, 0x1e6f342c), WTCP(0x7c4848ba, 0x1ea004c1), WTCP(0x7c3c3860, 0x1ed0d09d), WTCP(0x7c3014de, 0x1f0197b8), - WTCP(0x7c23de35, 0x1f325a0b), WTCP(0x7c179467, 0x1f63178f), WTCP(0x7c0b3777, 0x1f93d03c), WTCP(0x7bfec765, 0x1fc4840a), - WTCP(0x7bf24434, 0x1ff532f2), WTCP(0x7be5ade6, 0x2025dcec), WTCP(0x7bd9047c, 0x205681f1), WTCP(0x7bcc47fa, 0x208721f9), - WTCP(0x7bbf7860, 0x20b7bcfe), WTCP(0x7bb295b0, 0x20e852f6), WTCP(0x7ba59fee, 0x2118e3dc), WTCP(0x7b989719, 0x21496fa7), - WTCP(0x7b8b7b36, 0x2179f64f), WTCP(0x7b7e4c45, 0x21aa77cf), WTCP(0x7b710a49, 0x21daf41d), WTCP(0x7b63b543, 0x220b6b32), - WTCP(0x7b564d36, 0x223bdd08), WTCP(0x7b48d225, 0x226c4996), WTCP(0x7b3b4410, 0x229cb0d5), WTCP(0x7b2da2fa, 0x22cd12bd), - WTCP(0x7b1feee5, 0x22fd6f48), WTCP(0x7b1227d3, 0x232dc66d), WTCP(0x7b044dc7, 0x235e1826), WTCP(0x7af660c2, 0x238e646a), - WTCP(0x7ae860c7, 0x23beab33), WTCP(0x7ada4dd8, 0x23eeec78), WTCP(0x7acc27f7, 0x241f2833), WTCP(0x7abdef25, 0x244f5e5c), - WTCP(0x7aafa367, 0x247f8eec), WTCP(0x7aa144bc, 0x24afb9da), WTCP(0x7a92d329, 0x24dfdf20), WTCP(0x7a844eae, 0x250ffeb7), - WTCP(0x7a75b74f, 0x25401896), WTCP(0x7a670d0d, 0x25702cb7), WTCP(0x7a584feb, 0x25a03b11), WTCP(0x7a497feb, 0x25d0439f), - WTCP(0x7a3a9d0f, 0x26004657), WTCP(0x7a2ba75a, 0x26304333), WTCP(0x7a1c9ece, 0x26603a2c), WTCP(0x7a0d836d, 0x26902b39), - WTCP(0x79fe5539, 0x26c01655), WTCP(0x79ef1436, 0x26effb76), WTCP(0x79dfc064, 0x271fda96), WTCP(0x79d059c8, 0x274fb3ae), - WTCP(0x79c0e062, 0x277f86b5), WTCP(0x79b15435, 0x27af53a6), WTCP(0x79a1b545, 0x27df1a77), WTCP(0x79920392, 0x280edb23), - WTCP(0x79823f20, 0x283e95a1), WTCP(0x797267f2, 0x286e49ea), WTCP(0x79627e08, 0x289df7f8), WTCP(0x79528167, 0x28cd9fc1), - WTCP(0x79427210, 0x28fd4140), WTCP(0x79325006, 0x292cdc6d), WTCP(0x79221b4b, 0x295c7140), WTCP(0x7911d3e2, 0x298bffb2), - WTCP(0x790179cd, 0x29bb87bc), WTCP(0x78f10d0f, 0x29eb0957), WTCP(0x78e08dab, 0x2a1a847b), WTCP(0x78cffba3, 0x2a49f920), - WTCP(0x78bf56f9, 0x2a796740), WTCP(0x78ae9fb0, 0x2aa8ced3), WTCP(0x789dd5cb, 0x2ad82fd2), WTCP(0x788cf94c, 0x2b078a36), - WTCP(0x787c0a36, 0x2b36ddf7), WTCP(0x786b088c, 0x2b662b0e), WTCP(0x7859f44f, 0x2b957173), WTCP(0x7848cd83, 0x2bc4b120), - WTCP(0x7837942b, 0x2bf3ea0d), WTCP(0x78264849, 0x2c231c33), WTCP(0x7814e9df, 0x2c52478a), WTCP(0x780378f1, 0x2c816c0c), - WTCP(0x77f1f581, 0x2cb089b1), WTCP(0x77e05f91, 0x2cdfa071), WTCP(0x77ceb725, 0x2d0eb046), WTCP(0x77bcfc3f, 0x2d3db928), - WTCP(0x77ab2ee2, 0x2d6cbb10), WTCP(0x77994f11, 0x2d9bb5f6), WTCP(0x77875cce, 0x2dcaa9d5), WTCP(0x7775581d, 0x2df996a3), - WTCP(0x776340ff, 0x2e287c5a), WTCP(0x77511778, 0x2e575af3), WTCP(0x773edb8b, 0x2e863267), WTCP(0x772c8d3a, 0x2eb502ae), - WTCP(0x771a2c88, 0x2ee3cbc1), WTCP(0x7707b979, 0x2f128d99), WTCP(0x76f5340e, 0x2f41482e), WTCP(0x76e29c4b, 0x2f6ffb7a), - WTCP(0x76cff232, 0x2f9ea775), WTCP(0x76bd35c7, 0x2fcd4c19), WTCP(0x76aa670d, 0x2ffbe95d), WTCP(0x76978605, 0x302a7f3a), - WTCP(0x768492b4, 0x30590dab), WTCP(0x76718d1c, 0x308794a6), WTCP(0x765e7540, 0x30b61426), WTCP(0x764b4b23, 0x30e48c22), - WTCP(0x76380ec8, 0x3112fc95), WTCP(0x7624c031, 0x31416576), WTCP(0x76115f63, 0x316fc6be), WTCP(0x75fdec60, 0x319e2067), - WTCP(0x75ea672a, 0x31cc7269), WTCP(0x75d6cfc5, 0x31fabcbd), WTCP(0x75c32634, 0x3228ff5c), WTCP(0x75af6a7b, 0x32573a3f), - WTCP(0x759b9c9b, 0x32856d5e), WTCP(0x7587bc98, 0x32b398b3), WTCP(0x7573ca75, 0x32e1bc36), WTCP(0x755fc635, 0x330fd7e1), - WTCP(0x754bafdc, 0x333debab), WTCP(0x7537876c, 0x336bf78f), WTCP(0x75234ce8, 0x3399fb85), WTCP(0x750f0054, 0x33c7f785), - WTCP(0x74faa1b3, 0x33f5eb89), WTCP(0x74e63108, 0x3423d78a), WTCP(0x74d1ae55, 0x3451bb81), WTCP(0x74bd199f, 0x347f9766), - WTCP(0x74a872e8, 0x34ad6b32), WTCP(0x7493ba34, 0x34db36df), WTCP(0x747eef85, 0x3508fa66), WTCP(0x746a12df, 0x3536b5be), - WTCP(0x74552446, 0x356468e2), WTCP(0x744023bc, 0x359213c9), WTCP(0x742b1144, 0x35bfb66e), WTCP(0x7415ece2, 0x35ed50c9), - WTCP(0x7400b69a, 0x361ae2d3), WTCP(0x73eb6e6e, 0x36486c86), WTCP(0x73d61461, 0x3675edd9), WTCP(0x73c0a878, 0x36a366c6), - WTCP(0x73ab2ab4, 0x36d0d746), WTCP(0x73959b1b, 0x36fe3f52), WTCP(0x737ff9ae, 0x372b9ee3), WTCP(0x736a4671, 0x3758f5f2), - WTCP(0x73548168, 0x37864477), WTCP(0x733eaa96, 0x37b38a6d), WTCP(0x7328c1ff, 0x37e0c7cc), WTCP(0x7312c7a5, 0x380dfc8d), - WTCP(0x72fcbb8c, 0x383b28a9), WTCP(0x72e69db7, 0x38684c19), WTCP(0x72d06e2b, 0x389566d6), WTCP(0x72ba2cea, 0x38c278d9), - WTCP(0x72a3d9f7, 0x38ef821c), WTCP(0x728d7557, 0x391c8297), WTCP(0x7276ff0d, 0x39497a43), WTCP(0x7260771b, 0x39766919), - WTCP(0x7249dd86, 0x39a34f13), WTCP(0x72333251, 0x39d02c2a), WTCP(0x721c7580, 0x39fd0056), WTCP(0x7205a716, 0x3a29cb91), - WTCP(0x71eec716, 0x3a568dd4), WTCP(0x71d7d585, 0x3a834717), WTCP(0x71c0d265, 0x3aaff755), WTCP(0x71a9bdba, 0x3adc9e86), - WTCP(0x71929789, 0x3b093ca3), WTCP(0x717b5fd3, 0x3b35d1a5), WTCP(0x7164169d, 0x3b625d86), WTCP(0x714cbbeb, 0x3b8ee03e), - WTCP(0x71354fc0, 0x3bbb59c7), WTCP(0x711dd220, 0x3be7ca1a), WTCP(0x7106430e, 0x3c143130), WTCP(0x70eea28e, 0x3c408f03), - WTCP(0x70d6f0a4, 0x3c6ce38a), WTCP(0x70bf2d53, 0x3c992ec0), WTCP(0x70a7589f, 0x3cc5709e), WTCP(0x708f728b, 0x3cf1a91c), - WTCP(0x70777b1c, 0x3d1dd835), WTCP(0x705f7255, 0x3d49fde1), WTCP(0x70475839, 0x3d761a19), WTCP(0x702f2ccd, 0x3da22cd7), - WTCP(0x7016f014, 0x3dce3614), WTCP(0x6ffea212, 0x3dfa35c8), WTCP(0x6fe642ca, 0x3e262bee), WTCP(0x6fcdd241, 0x3e52187f), - WTCP(0x6fb5507a, 0x3e7dfb73), WTCP(0x6f9cbd79, 0x3ea9d4c3), WTCP(0x6f841942, 0x3ed5a46b), WTCP(0x6f6b63d8, 0x3f016a61), - WTCP(0x6f529d40, 0x3f2d26a0), WTCP(0x6f39c57d, 0x3f58d921), WTCP(0x6f20dc92, 0x3f8481dd), WTCP(0x6f07e285, 0x3fb020ce), - WTCP(0x6eeed758, 0x3fdbb5ec), WTCP(0x6ed5bb10, 0x40074132), WTCP(0x6ebc8db0, 0x4032c297), WTCP(0x6ea34f3d, 0x405e3a16), - WTCP(0x6e89ffb9, 0x4089a7a8), WTCP(0x6e709f2a, 0x40b50b46), WTCP(0x6e572d93, 0x40e064ea), WTCP(0x6e3daaf8, 0x410bb48c), - WTCP(0x6e24175c, 0x4136fa27), WTCP(0x6e0a72c5, 0x416235b2), WTCP(0x6df0bd35, 0x418d6729), WTCP(0x6dd6f6b1, 0x41b88e84), - WTCP(0x6dbd1f3c, 0x41e3abbc), WTCP(0x6da336dc, 0x420ebecb), WTCP(0x6d893d93, 0x4239c7aa), WTCP(0x6d6f3365, 0x4264c653), - WTCP(0x6d551858, 0x428fbabe), WTCP(0x6d3aec6e, 0x42baa4e6), WTCP(0x6d20afac, 0x42e584c3), WTCP(0x6d066215, 0x43105a50), - WTCP(0x6cec03af, 0x433b2585), WTCP(0x6cd1947c, 0x4365e65b), WTCP(0x6cb71482, 0x43909ccd), WTCP(0x6c9c83c3, 0x43bb48d4), - WTCP(0x6c81e245, 0x43e5ea68), WTCP(0x6c67300b, 0x44108184), WTCP(0x6c4c6d1a, 0x443b0e21), WTCP(0x6c319975, 0x44659039), - WTCP(0x6c16b521, 0x449007c4), WTCP(0x6bfbc021, 0x44ba74bd), WTCP(0x6be0ba7b, 0x44e4d71c), WTCP(0x6bc5a431, 0x450f2edb), - WTCP(0x6baa7d49, 0x45397bf4), WTCP(0x6b8f45c7, 0x4563be60), WTCP(0x6b73fdae, 0x458df619), WTCP(0x6b58a503, 0x45b82318), - WTCP(0x6b3d3bcb, 0x45e24556), WTCP(0x6b21c208, 0x460c5cce), WTCP(0x6b0637c1, 0x46366978), WTCP(0x6aea9cf8, 0x46606b4e), - WTCP(0x6acef1b2, 0x468a624a), WTCP(0x6ab335f4, 0x46b44e65), WTCP(0x6a9769c1, 0x46de2f99), WTCP(0x6a7b8d1e, 0x470805df), - WTCP(0x6a5fa010, 0x4731d131), WTCP(0x6a43a29a, 0x475b9188), WTCP(0x6a2794c1, 0x478546de), WTCP(0x6a0b7689, 0x47aef12c), - WTCP(0x69ef47f6, 0x47d8906d), WTCP(0x69d3090e, 0x48022499), WTCP(0x69b6b9d3, 0x482badab), WTCP(0x699a5a4c, 0x48552b9b), - WTCP(0x697dea7b, 0x487e9e64), WTCP(0x69616a65, 0x48a805ff), WTCP(0x6944da10, 0x48d16265), WTCP(0x6928397e, 0x48fab391), - WTCP(0x690b88b5, 0x4923f97b), WTCP(0x68eec7b9, 0x494d341e), WTCP(0x68d1f68f, 0x49766373), WTCP(0x68b5153a, 0x499f8774), - WTCP(0x689823bf, 0x49c8a01b), WTCP(0x687b2224, 0x49f1ad61), WTCP(0x685e106c, 0x4a1aaf3f), WTCP(0x6840ee9b, 0x4a43a5b0), - WTCP(0x6823bcb7, 0x4a6c90ad), WTCP(0x68067ac3, 0x4a957030), WTCP(0x67e928c5, 0x4abe4433), WTCP(0x67cbc6c0, 0x4ae70caf), - WTCP(0x67ae54ba, 0x4b0fc99d), WTCP(0x6790d2b6, 0x4b387af9), WTCP(0x677340ba, 0x4b6120bb), WTCP(0x67559eca, 0x4b89badd), - WTCP(0x6737ecea, 0x4bb24958), WTCP(0x671a2b20, 0x4bdacc28), WTCP(0x66fc596f, 0x4c034345), WTCP(0x66de77dc, 0x4c2baea9), - WTCP(0x66c0866d, 0x4c540e4e), WTCP(0x66a28524, 0x4c7c622d), WTCP(0x66847408, 0x4ca4aa41), WTCP(0x6666531d, 0x4ccce684), - WTCP(0x66482267, 0x4cf516ee), WTCP(0x6629e1ec, 0x4d1d3b7a), WTCP(0x660b91af, 0x4d455422), WTCP(0x65ed31b5, 0x4d6d60df), - WTCP(0x65cec204, 0x4d9561ac), WTCP(0x65b0429f, 0x4dbd5682), WTCP(0x6591b38c, 0x4de53f5a), WTCP(0x657314cf, 0x4e0d1c30), - WTCP(0x6554666d, 0x4e34ecfc), WTCP(0x6535a86b, 0x4e5cb1b9), WTCP(0x6516dacd, 0x4e846a60), WTCP(0x64f7fd98, 0x4eac16eb), - WTCP(0x64d910d1, 0x4ed3b755), WTCP(0x64ba147d, 0x4efb4b96), WTCP(0x649b08a0, 0x4f22d3aa), WTCP(0x647bed3f, 0x4f4a4f89), - WTCP(0x645cc260, 0x4f71bf2e), WTCP(0x643d8806, 0x4f992293), WTCP(0x641e3e38, 0x4fc079b1), WTCP(0x63fee4f8, 0x4fe7c483), - WTCP(0x63df7c4d, 0x500f0302), WTCP(0x63c0043b, 0x50363529), WTCP(0x63a07cc7, 0x505d5af1), WTCP(0x6380e5f6, 0x50847454), - WTCP(0x63613fcd, 0x50ab814d), WTCP(0x63418a50, 0x50d281d5), WTCP(0x6321c585, 0x50f975e6), WTCP(0x6301f171, 0x51205d7b), - WTCP(0x62e20e17, 0x5147388c), WTCP(0x62c21b7e, 0x516e0715), WTCP(0x62a219aa, 0x5194c910), WTCP(0x628208a1, 0x51bb7e75), - WTCP(0x6261e866, 0x51e22740), WTCP(0x6241b8ff, 0x5208c36a), WTCP(0x62217a72, 0x522f52ee), WTCP(0x62012cc2, 0x5255d5c5), - WTCP(0x61e0cff5, 0x527c4bea), WTCP(0x61c06410, 0x52a2b556), WTCP(0x619fe918, 0x52c91204), WTCP(0x617f5f12, 0x52ef61ee), - WTCP(0x615ec603, 0x5315a50e), WTCP(0x613e1df0, 0x533bdb5d), WTCP(0x611d66de, 0x536204d7), WTCP(0x60fca0d2, 0x53882175), - WTCP(0x60dbcbd1, 0x53ae3131), WTCP(0x60bae7e1, 0x53d43406), WTCP(0x6099f505, 0x53fa29ed), WTCP(0x6078f344, 0x542012e1), - WTCP(0x6057e2a2, 0x5445eedb), WTCP(0x6036c325, 0x546bbdd7), WTCP(0x601594d1, 0x54917fce), WTCP(0x5ff457ad, 0x54b734ba), - WTCP(0x5fd30bbc, 0x54dcdc96), WTCP(0x5fb1b104, 0x5502775c), WTCP(0x5f90478a, 0x55280505), WTCP(0x5f6ecf53, 0x554d858d), - WTCP(0x5f4d4865, 0x5572f8ed), WTCP(0x5f2bb2c5, 0x55985f20), WTCP(0x5f0a0e77, 0x55bdb81f), WTCP(0x5ee85b82, 0x55e303e6), - WTCP(0x5ec699e9, 0x5608426e), WTCP(0x5ea4c9b3, 0x562d73b2), WTCP(0x5e82eae5, 0x565297ab), WTCP(0x5e60fd84, 0x5677ae54), - WTCP(0x5e3f0194, 0x569cb7a8), WTCP(0x5e1cf71c, 0x56c1b3a1), WTCP(0x5dfade20, 0x56e6a239), WTCP(0x5dd8b6a7, 0x570b8369), - WTCP(0x5db680b4, 0x5730572e), WTCP(0x5d943c4e, 0x57551d80), WTCP(0x5d71e979, 0x5779d65b), WTCP(0x5d4f883b, 0x579e81b8), - WTCP(0x5d2d189a, 0x57c31f92), WTCP(0x5d0a9a9a, 0x57e7afe4), WTCP(0x5ce80e41, 0x580c32a7), WTCP(0x5cc57394, 0x5830a7d6), - WTCP(0x5ca2ca99, 0x58550f6c), WTCP(0x5c801354, 0x58796962), WTCP(0x5c5d4dcc, 0x589db5b3), WTCP(0x5c3a7a05, 0x58c1f45b), - WTCP(0x5c179806, 0x58e62552), WTCP(0x5bf4a7d2, 0x590a4893), WTCP(0x5bd1a971, 0x592e5e19), WTCP(0x5bae9ce7, 0x595265df), - WTCP(0x5b8b8239, 0x59765fde), WTCP(0x5b68596d, 0x599a4c12), WTCP(0x5b452288, 0x59be2a74), WTCP(0x5b21dd90, 0x59e1faff), - WTCP(0x5afe8a8b, 0x5a05bdae), WTCP(0x5adb297d, 0x5a29727b), WTCP(0x5ab7ba6c, 0x5a4d1960), WTCP(0x5a943d5e, 0x5a70b258), -}; - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_WTP KBDWindow1024[] = -{ - WTCP(0x7fffffa4, 0x0009962f), WTCP(0x7fffff39, 0x000e16fb), WTCP(0x7ffffebf, 0x0011ea65), WTCP(0x7ffffe34, 0x0015750e), - WTCP(0x7ffffd96, 0x0018dc74), WTCP(0x7ffffce5, 0x001c332e), WTCP(0x7ffffc1f, 0x001f83f5), WTCP(0x7ffffb43, 0x0022d59a), - WTCP(0x7ffffa4f, 0x00262cc2), WTCP(0x7ffff942, 0x00298cc4), WTCP(0x7ffff81a, 0x002cf81f), WTCP(0x7ffff6d6, 0x003070c4), - WTCP(0x7ffff573, 0x0033f840), WTCP(0x7ffff3f1, 0x00378fd9), WTCP(0x7ffff24d, 0x003b38a1), WTCP(0x7ffff085, 0x003ef381), - WTCP(0x7fffee98, 0x0042c147), WTCP(0x7fffec83, 0x0046a2a8), WTCP(0x7fffea44, 0x004a9847), WTCP(0x7fffe7d8, 0x004ea2b7), - WTCP(0x7fffe53f, 0x0052c283), WTCP(0x7fffe274, 0x0056f829), WTCP(0x7fffdf76, 0x005b4422), WTCP(0x7fffdc43, 0x005fa6dd), - WTCP(0x7fffd8d6, 0x006420c8), WTCP(0x7fffd52f, 0x0068b249), WTCP(0x7fffd149, 0x006d5bc4), WTCP(0x7fffcd22, 0x00721d9a), - WTCP(0x7fffc8b6, 0x0076f828), WTCP(0x7fffc404, 0x007bebca), WTCP(0x7fffbf06, 0x0080f8d9), WTCP(0x7fffb9bb, 0x00861fae), - WTCP(0x7fffb41e, 0x008b609e), WTCP(0x7fffae2c, 0x0090bbff), WTCP(0x7fffa7e1, 0x00963224), WTCP(0x7fffa13a, 0x009bc362), - WTCP(0x7fff9a32, 0x00a17009), WTCP(0x7fff92c5, 0x00a7386c), WTCP(0x7fff8af0, 0x00ad1cdc), WTCP(0x7fff82ad, 0x00b31da8), - WTCP(0x7fff79f9, 0x00b93b21), WTCP(0x7fff70cf, 0x00bf7596), WTCP(0x7fff672a, 0x00c5cd57), WTCP(0x7fff5d05, 0x00cc42b1), - WTCP(0x7fff525c, 0x00d2d5f3), WTCP(0x7fff4729, 0x00d9876c), WTCP(0x7fff3b66, 0x00e05769), WTCP(0x7fff2f10, 0x00e74638), - WTCP(0x7fff221f, 0x00ee5426), WTCP(0x7fff148e, 0x00f58182), WTCP(0x7fff0658, 0x00fcce97), WTCP(0x7ffef776, 0x01043bb3), - WTCP(0x7ffee7e2, 0x010bc923), WTCP(0x7ffed795, 0x01137733), WTCP(0x7ffec68a, 0x011b4631), WTCP(0x7ffeb4ba, 0x01233669), - WTCP(0x7ffea21d, 0x012b4827), WTCP(0x7ffe8eac, 0x01337bb8), WTCP(0x7ffe7a61, 0x013bd167), WTCP(0x7ffe6533, 0x01444982), - WTCP(0x7ffe4f1c, 0x014ce454), WTCP(0x7ffe3813, 0x0155a229), WTCP(0x7ffe2011, 0x015e834d), WTCP(0x7ffe070d, 0x0167880c), - WTCP(0x7ffdecff, 0x0170b0b2), WTCP(0x7ffdd1df, 0x0179fd8b), WTCP(0x7ffdb5a2, 0x01836ee1), WTCP(0x7ffd9842, 0x018d0500), - WTCP(0x7ffd79b3, 0x0196c035), WTCP(0x7ffd59ee, 0x01a0a0ca), WTCP(0x7ffd38e8, 0x01aaa70a), WTCP(0x7ffd1697, 0x01b4d341), - WTCP(0x7ffcf2f2, 0x01bf25b9), WTCP(0x7ffccdee, 0x01c99ebd), WTCP(0x7ffca780, 0x01d43e99), WTCP(0x7ffc7f9e, 0x01df0597), - WTCP(0x7ffc563d, 0x01e9f401), WTCP(0x7ffc2b51, 0x01f50a22), WTCP(0x7ffbfecf, 0x02004844), WTCP(0x7ffbd0ab, 0x020baeb1), - WTCP(0x7ffba0da, 0x02173db4), WTCP(0x7ffb6f4f, 0x0222f596), WTCP(0x7ffb3bfd, 0x022ed6a1), WTCP(0x7ffb06d8, 0x023ae11f), - WTCP(0x7ffacfd3, 0x02471558), WTCP(0x7ffa96e0, 0x02537397), WTCP(0x7ffa5bf2, 0x025ffc25), WTCP(0x7ffa1efc, 0x026caf4a), - WTCP(0x7ff9dfee, 0x02798d4f), WTCP(0x7ff99ebb, 0x0286967c), WTCP(0x7ff95b55, 0x0293cb1b), WTCP(0x7ff915ab, 0x02a12b72), - WTCP(0x7ff8cdaf, 0x02aeb7cb), WTCP(0x7ff88351, 0x02bc706d), WTCP(0x7ff83682, 0x02ca559f), WTCP(0x7ff7e731, 0x02d867a9), - WTCP(0x7ff7954e, 0x02e6a6d2), WTCP(0x7ff740c8, 0x02f51361), WTCP(0x7ff6e98e, 0x0303ad9c), WTCP(0x7ff68f8f, 0x031275ca), - WTCP(0x7ff632ba, 0x03216c30), WTCP(0x7ff5d2fb, 0x03309116), WTCP(0x7ff57042, 0x033fe4bf), WTCP(0x7ff50a7a, 0x034f6773), - WTCP(0x7ff4a192, 0x035f1975), WTCP(0x7ff43576, 0x036efb0a), WTCP(0x7ff3c612, 0x037f0c78), WTCP(0x7ff35353, 0x038f4e02), - WTCP(0x7ff2dd24, 0x039fbfeb), WTCP(0x7ff26370, 0x03b06279), WTCP(0x7ff1e623, 0x03c135ed), WTCP(0x7ff16527, 0x03d23a8b), - WTCP(0x7ff0e067, 0x03e37095), WTCP(0x7ff057cc, 0x03f4d84e), WTCP(0x7fefcb40, 0x040671f7), WTCP(0x7fef3aad, 0x04183dd3), - WTCP(0x7feea5fa, 0x042a3c22), WTCP(0x7fee0d11, 0x043c6d25), WTCP(0x7fed6fda, 0x044ed11d), WTCP(0x7fecce3d, 0x04616849), - WTCP(0x7fec2821, 0x047432eb), WTCP(0x7feb7d6c, 0x04873140), WTCP(0x7feace07, 0x049a6388), WTCP(0x7fea19d6, 0x04adca01), - WTCP(0x7fe960c0, 0x04c164ea), WTCP(0x7fe8a2aa, 0x04d53481), WTCP(0x7fe7df79, 0x04e93902), WTCP(0x7fe71712, 0x04fd72aa), - WTCP(0x7fe6495a, 0x0511e1b6), WTCP(0x7fe57634, 0x05268663), WTCP(0x7fe49d83, 0x053b60eb), WTCP(0x7fe3bf2b, 0x05507189), - WTCP(0x7fe2db0f, 0x0565b879), WTCP(0x7fe1f110, 0x057b35f4), WTCP(0x7fe10111, 0x0590ea35), WTCP(0x7fe00af3, 0x05a6d574), - WTCP(0x7fdf0e97, 0x05bcf7ea), WTCP(0x7fde0bdd, 0x05d351cf), WTCP(0x7fdd02a6, 0x05e9e35c), WTCP(0x7fdbf2d2, 0x0600acc8), - WTCP(0x7fdadc40, 0x0617ae48), WTCP(0x7fd9becf, 0x062ee814), WTCP(0x7fd89a5e, 0x06465a62), WTCP(0x7fd76eca, 0x065e0565), - WTCP(0x7fd63bf1, 0x0675e954), WTCP(0x7fd501b0, 0x068e0662), WTCP(0x7fd3bfe4, 0x06a65cc3), WTCP(0x7fd2766a, 0x06beecaa), - WTCP(0x7fd1251e, 0x06d7b648), WTCP(0x7fcfcbda, 0x06f0b9d1), WTCP(0x7fce6a7a, 0x0709f775), WTCP(0x7fcd00d8, 0x07236f65), - WTCP(0x7fcb8ecf, 0x073d21d2), WTCP(0x7fca1439, 0x07570eea), WTCP(0x7fc890ed, 0x077136dd), WTCP(0x7fc704c7, 0x078b99da), - WTCP(0x7fc56f9d, 0x07a6380d), WTCP(0x7fc3d147, 0x07c111a4), WTCP(0x7fc2299e, 0x07dc26cc), WTCP(0x7fc07878, 0x07f777b1), - WTCP(0x7fbebdac, 0x0813047d), WTCP(0x7fbcf90f, 0x082ecd5b), WTCP(0x7fbb2a78, 0x084ad276), WTCP(0x7fb951bc, 0x086713f7), - WTCP(0x7fb76eaf, 0x08839206), WTCP(0x7fb58126, 0x08a04ccb), WTCP(0x7fb388f4, 0x08bd446e), WTCP(0x7fb185ee, 0x08da7915), - WTCP(0x7faf77e5, 0x08f7eae7), WTCP(0x7fad5ead, 0x09159a09), WTCP(0x7fab3a17, 0x0933869f), WTCP(0x7fa909f6, 0x0951b0cd), - WTCP(0x7fa6ce1a, 0x097018b7), WTCP(0x7fa48653, 0x098ebe7f), WTCP(0x7fa23273, 0x09ada248), WTCP(0x7f9fd249, 0x09ccc431), - WTCP(0x7f9d65a4, 0x09ec245b), WTCP(0x7f9aec53, 0x0a0bc2e7), WTCP(0x7f986625, 0x0a2b9ff3), WTCP(0x7f95d2e7, 0x0a4bbb9e), - WTCP(0x7f933267, 0x0a6c1604), WTCP(0x7f908472, 0x0a8caf43), WTCP(0x7f8dc8d5, 0x0aad8776), WTCP(0x7f8aff5c, 0x0ace9eb9), - WTCP(0x7f8827d3, 0x0aeff526), WTCP(0x7f854204, 0x0b118ad8), WTCP(0x7f824dbb, 0x0b335fe6), WTCP(0x7f7f4ac3, 0x0b557469), - WTCP(0x7f7c38e4, 0x0b77c879), WTCP(0x7f7917e9, 0x0b9a5c2b), WTCP(0x7f75e79b, 0x0bbd2f97), WTCP(0x7f72a7c3, 0x0be042d0), - WTCP(0x7f6f5828, 0x0c0395ec), WTCP(0x7f6bf892, 0x0c2728fd), WTCP(0x7f6888c9, 0x0c4afc16), WTCP(0x7f650894, 0x0c6f0f4a), - WTCP(0x7f6177b9, 0x0c9362a8), WTCP(0x7f5dd5ff, 0x0cb7f642), WTCP(0x7f5a232a, 0x0cdcca26), WTCP(0x7f565f00, 0x0d01de63), - WTCP(0x7f528947, 0x0d273307), WTCP(0x7f4ea1c2, 0x0d4cc81f), WTCP(0x7f4aa835, 0x0d729db7), WTCP(0x7f469c65, 0x0d98b3da), - WTCP(0x7f427e13, 0x0dbf0a92), WTCP(0x7f3e4d04, 0x0de5a1e9), WTCP(0x7f3a08f9, 0x0e0c79e7), WTCP(0x7f35b1b4, 0x0e339295), - WTCP(0x7f3146f8, 0x0e5aebfa), WTCP(0x7f2cc884, 0x0e82861a), WTCP(0x7f28361b, 0x0eaa60fd), WTCP(0x7f238f7c, 0x0ed27ca5), - WTCP(0x7f1ed467, 0x0efad917), WTCP(0x7f1a049d, 0x0f237656), WTCP(0x7f151fdc, 0x0f4c5462), WTCP(0x7f1025e3, 0x0f75733d), - WTCP(0x7f0b1672, 0x0f9ed2e6), WTCP(0x7f05f146, 0x0fc8735e), WTCP(0x7f00b61d, 0x0ff254a1), WTCP(0x7efb64b4, 0x101c76ae), - WTCP(0x7ef5fcca, 0x1046d981), WTCP(0x7ef07e19, 0x10717d15), WTCP(0x7eeae860, 0x109c6165), WTCP(0x7ee53b5b, 0x10c7866a), - WTCP(0x7edf76c4, 0x10f2ec1e), WTCP(0x7ed99a58, 0x111e9279), WTCP(0x7ed3a5d1, 0x114a7971), WTCP(0x7ecd98eb, 0x1176a0fc), - WTCP(0x7ec77360, 0x11a30910), WTCP(0x7ec134eb, 0x11cfb1a1), WTCP(0x7ebadd44, 0x11fc9aa2), WTCP(0x7eb46c27, 0x1229c406), - WTCP(0x7eade14c, 0x12572dbf), WTCP(0x7ea73c6c, 0x1284d7bc), WTCP(0x7ea07d41, 0x12b2c1ed), WTCP(0x7e99a382, 0x12e0ec42), - WTCP(0x7e92aee7, 0x130f56a8), WTCP(0x7e8b9f2a, 0x133e010b), WTCP(0x7e847402, 0x136ceb59), WTCP(0x7e7d2d25, 0x139c157b), - WTCP(0x7e75ca4c, 0x13cb7f5d), WTCP(0x7e6e4b2d, 0x13fb28e6), WTCP(0x7e66af7f, 0x142b1200), WTCP(0x7e5ef6f8, 0x145b3a92), - WTCP(0x7e572150, 0x148ba281), WTCP(0x7e4f2e3b, 0x14bc49b4), WTCP(0x7e471d70, 0x14ed300f), WTCP(0x7e3eeea5, 0x151e5575), - WTCP(0x7e36a18e, 0x154fb9c9), WTCP(0x7e2e35e2, 0x15815ced), WTCP(0x7e25ab56, 0x15b33ec1), WTCP(0x7e1d019e, 0x15e55f25), - WTCP(0x7e14386e, 0x1617bdf9), WTCP(0x7e0b4f7d, 0x164a5b19), WTCP(0x7e02467e, 0x167d3662), WTCP(0x7df91d25, 0x16b04fb2), - WTCP(0x7defd327, 0x16e3a6e2), WTCP(0x7de66837, 0x17173bce), WTCP(0x7ddcdc0a, 0x174b0e4d), WTCP(0x7dd32e53, 0x177f1e39), - WTCP(0x7dc95ec6, 0x17b36b69), WTCP(0x7dbf6d17, 0x17e7f5b3), WTCP(0x7db558f9, 0x181cbcec), WTCP(0x7dab221f, 0x1851c0e9), - WTCP(0x7da0c83c, 0x1887017d), WTCP(0x7d964b05, 0x18bc7e7c), WTCP(0x7d8baa2b, 0x18f237b6), WTCP(0x7d80e563, 0x19282cfd), - WTCP(0x7d75fc5e, 0x195e5e20), WTCP(0x7d6aeed0, 0x1994caee), WTCP(0x7d5fbc6d, 0x19cb7335), WTCP(0x7d5464e6, 0x1a0256c2), - WTCP(0x7d48e7ef, 0x1a397561), WTCP(0x7d3d453b, 0x1a70cede), WTCP(0x7d317c7c, 0x1aa86301), WTCP(0x7d258d65, 0x1ae03195), - WTCP(0x7d1977aa, 0x1b183a63), WTCP(0x7d0d3afc, 0x1b507d30), WTCP(0x7d00d710, 0x1b88f9c5), WTCP(0x7cf44b97, 0x1bc1afe6), - WTCP(0x7ce79846, 0x1bfa9f58), WTCP(0x7cdabcce, 0x1c33c7e0), WTCP(0x7ccdb8e4, 0x1c6d293f), WTCP(0x7cc08c39, 0x1ca6c337), - WTCP(0x7cb33682, 0x1ce0958a), WTCP(0x7ca5b772, 0x1d1a9ff8), WTCP(0x7c980ebd, 0x1d54e240), WTCP(0x7c8a3c14, 0x1d8f5c21), - WTCP(0x7c7c3f2e, 0x1dca0d56), WTCP(0x7c6e17bc, 0x1e04f59f), WTCP(0x7c5fc573, 0x1e4014b4), WTCP(0x7c514807, 0x1e7b6a53), - WTCP(0x7c429f2c, 0x1eb6f633), WTCP(0x7c33ca96, 0x1ef2b80f), WTCP(0x7c24c9fa, 0x1f2eaf9e), WTCP(0x7c159d0d, 0x1f6adc98), - WTCP(0x7c064383, 0x1fa73eb2), WTCP(0x7bf6bd11, 0x1fe3d5a3), WTCP(0x7be7096c, 0x2020a11e), WTCP(0x7bd7284a, 0x205da0d8), - WTCP(0x7bc71960, 0x209ad483), WTCP(0x7bb6dc65, 0x20d83bd1), WTCP(0x7ba6710d, 0x2115d674), WTCP(0x7b95d710, 0x2153a41b), - WTCP(0x7b850e24, 0x2191a476), WTCP(0x7b7415ff, 0x21cfd734), WTCP(0x7b62ee59, 0x220e3c02), WTCP(0x7b5196e9, 0x224cd28d), - WTCP(0x7b400f67, 0x228b9a82), WTCP(0x7b2e578a, 0x22ca938a), WTCP(0x7b1c6f0b, 0x2309bd52), WTCP(0x7b0a55a1, 0x23491783), - WTCP(0x7af80b07, 0x2388a1c4), WTCP(0x7ae58ef5, 0x23c85bbf), WTCP(0x7ad2e124, 0x2408451a), WTCP(0x7ac0014e, 0x24485d7c), - WTCP(0x7aacef2e, 0x2488a48a), WTCP(0x7a99aa7e, 0x24c919e9), WTCP(0x7a8632f8, 0x2509bd3d), WTCP(0x7a728858, 0x254a8e29), - WTCP(0x7a5eaa5a, 0x258b8c50), WTCP(0x7a4a98b9, 0x25ccb753), WTCP(0x7a365333, 0x260e0ed3), WTCP(0x7a21d983, 0x264f9271), - WTCP(0x7a0d2b68, 0x269141cb), WTCP(0x79f8489e, 0x26d31c80), WTCP(0x79e330e4, 0x2715222f), WTCP(0x79cde3f8, 0x27575273), - WTCP(0x79b8619a, 0x2799acea), WTCP(0x79a2a989, 0x27dc3130), WTCP(0x798cbb85, 0x281ededf), WTCP(0x7976974e, 0x2861b591), - WTCP(0x79603ca5, 0x28a4b4e0), WTCP(0x7949ab4c, 0x28e7dc65), WTCP(0x7932e304, 0x292b2bb8), WTCP(0x791be390, 0x296ea270), - WTCP(0x7904acb3, 0x29b24024), WTCP(0x78ed3e30, 0x29f6046b), WTCP(0x78d597cc, 0x2a39eed8), WTCP(0x78bdb94a, 0x2a7dff02), - WTCP(0x78a5a270, 0x2ac2347c), WTCP(0x788d5304, 0x2b068eda), WTCP(0x7874cacb, 0x2b4b0dae), WTCP(0x785c098d, 0x2b8fb08a), - WTCP(0x78430f11, 0x2bd47700), WTCP(0x7829db1f, 0x2c1960a1), WTCP(0x78106d7f, 0x2c5e6cfd), WTCP(0x77f6c5fb, 0x2ca39ba3), - WTCP(0x77dce45c, 0x2ce8ec23), WTCP(0x77c2c86e, 0x2d2e5e0b), WTCP(0x77a871fa, 0x2d73f0e8), WTCP(0x778de0cd, 0x2db9a449), - WTCP(0x777314b2, 0x2dff77b8), WTCP(0x77580d78, 0x2e456ac4), WTCP(0x773ccaeb, 0x2e8b7cf6), WTCP(0x77214cdb, 0x2ed1addb), - WTCP(0x77059315, 0x2f17fcfb), WTCP(0x76e99d69, 0x2f5e69e2), WTCP(0x76cd6ba9, 0x2fa4f419), WTCP(0x76b0fda4, 0x2feb9b27), - WTCP(0x7694532e, 0x30325e96), WTCP(0x76776c17, 0x30793dee), WTCP(0x765a4834, 0x30c038b5), WTCP(0x763ce759, 0x31074e72), - WTCP(0x761f4959, 0x314e7eab), WTCP(0x76016e0b, 0x3195c8e6), WTCP(0x75e35545, 0x31dd2ca9), WTCP(0x75c4fedc, 0x3224a979), - WTCP(0x75a66aab, 0x326c3ed8), WTCP(0x75879887, 0x32b3ec4d), WTCP(0x7568884b, 0x32fbb159), WTCP(0x754939d1, 0x33438d81), - WTCP(0x7529acf4, 0x338b8045), WTCP(0x7509e18e, 0x33d3892a), WTCP(0x74e9d77d, 0x341ba7b1), WTCP(0x74c98e9e, 0x3463db5a), - WTCP(0x74a906cd, 0x34ac23a7), WTCP(0x74883fec, 0x34f48019), WTCP(0x746739d8, 0x353cf02f), WTCP(0x7445f472, 0x3585736a), - WTCP(0x74246f9c, 0x35ce0949), WTCP(0x7402ab37, 0x3616b14c), WTCP(0x73e0a727, 0x365f6af0), WTCP(0x73be6350, 0x36a835b5), - WTCP(0x739bdf95, 0x36f11118), WTCP(0x73791bdd, 0x3739fc98), WTCP(0x7356180e, 0x3782f7b2), WTCP(0x7332d410, 0x37cc01e3), - WTCP(0x730f4fc9, 0x38151aa8), WTCP(0x72eb8b24, 0x385e417e), WTCP(0x72c7860a, 0x38a775e1), WTCP(0x72a34066, 0x38f0b74d), - WTCP(0x727eba24, 0x393a053e), WTCP(0x7259f331, 0x39835f30), WTCP(0x7234eb79, 0x39ccc49e), WTCP(0x720fa2eb, 0x3a163503), - WTCP(0x71ea1977, 0x3a5fafda), WTCP(0x71c44f0c, 0x3aa9349e), WTCP(0x719e439d, 0x3af2c2ca), WTCP(0x7177f71a, 0x3b3c59d7), - WTCP(0x71516978, 0x3b85f940), WTCP(0x712a9aaa, 0x3bcfa07e), WTCP(0x71038aa4, 0x3c194f0d), WTCP(0x70dc395e, 0x3c630464), - WTCP(0x70b4a6cd, 0x3cacbfff), WTCP(0x708cd2e9, 0x3cf68155), WTCP(0x7064bdab, 0x3d4047e1), WTCP(0x703c670d, 0x3d8a131c), - WTCP(0x7013cf0a, 0x3dd3e27e), WTCP(0x6feaf59c, 0x3e1db580), WTCP(0x6fc1dac1, 0x3e678b9b), WTCP(0x6f987e76, 0x3eb16449), - WTCP(0x6f6ee0b9, 0x3efb3f01), WTCP(0x6f45018b, 0x3f451b3d), WTCP(0x6f1ae0eb, 0x3f8ef874), WTCP(0x6ef07edb, 0x3fd8d620), - WTCP(0x6ec5db5d, 0x4022b3b9), WTCP(0x6e9af675, 0x406c90b7), WTCP(0x6e6fd027, 0x40b66c93), WTCP(0x6e446879, 0x410046c5), - WTCP(0x6e18bf71, 0x414a1ec6), WTCP(0x6decd517, 0x4193f40d), WTCP(0x6dc0a972, 0x41ddc615), WTCP(0x6d943c8d, 0x42279455), - WTCP(0x6d678e71, 0x42715e45), WTCP(0x6d3a9f2a, 0x42bb235f), WTCP(0x6d0d6ec5, 0x4304e31a), WTCP(0x6cdffd4f, 0x434e9cf1), - WTCP(0x6cb24ad6, 0x4398505b), WTCP(0x6c84576b, 0x43e1fcd1), WTCP(0x6c56231c, 0x442ba1cd), WTCP(0x6c27adfd, 0x44753ec7), - WTCP(0x6bf8f81e, 0x44bed33a), WTCP(0x6bca0195, 0x45085e9d), WTCP(0x6b9aca75, 0x4551e06b), WTCP(0x6b6b52d5, 0x459b581e), - WTCP(0x6b3b9ac9, 0x45e4c52f), WTCP(0x6b0ba26b, 0x462e2717), WTCP(0x6adb69d3, 0x46777d52), WTCP(0x6aaaf11b, 0x46c0c75a), - WTCP(0x6a7a385c, 0x470a04a9), WTCP(0x6a493fb3, 0x475334b9), WTCP(0x6a18073d, 0x479c5707), WTCP(0x69e68f17, 0x47e56b0c), - WTCP(0x69b4d761, 0x482e7045), WTCP(0x6982e039, 0x4877662c), WTCP(0x6950a9c0, 0x48c04c3f), WTCP(0x691e341a, 0x490921f8), - WTCP(0x68eb7f67, 0x4951e6d5), WTCP(0x68b88bcd, 0x499a9a51), WTCP(0x68855970, 0x49e33beb), WTCP(0x6851e875, 0x4a2bcb1f), - WTCP(0x681e3905, 0x4a74476b), WTCP(0x67ea4b47, 0x4abcb04c), WTCP(0x67b61f63, 0x4b050541), WTCP(0x6781b585, 0x4b4d45c9), - WTCP(0x674d0dd6, 0x4b957162), WTCP(0x67182883, 0x4bdd878c), WTCP(0x66e305b8, 0x4c2587c6), WTCP(0x66ada5a5, 0x4c6d7190), - WTCP(0x66780878, 0x4cb5446a), WTCP(0x66422e60, 0x4cfcffd5), WTCP(0x660c1790, 0x4d44a353), WTCP(0x65d5c439, 0x4d8c2e64), - WTCP(0x659f348e, 0x4dd3a08c), WTCP(0x656868c3, 0x4e1af94b), WTCP(0x6531610d, 0x4e623825), WTCP(0x64fa1da3, 0x4ea95c9d), - WTCP(0x64c29ebb, 0x4ef06637), WTCP(0x648ae48d, 0x4f375477), WTCP(0x6452ef53, 0x4f7e26e1), WTCP(0x641abf46, 0x4fc4dcfb), - WTCP(0x63e254a2, 0x500b7649), WTCP(0x63a9afa2, 0x5051f253), WTCP(0x6370d083, 0x5098509f), WTCP(0x6337b784, 0x50de90b3), - WTCP(0x62fe64e3, 0x5124b218), WTCP(0x62c4d8e0, 0x516ab455), WTCP(0x628b13bc, 0x51b096f3), WTCP(0x625115b8, 0x51f6597b), - WTCP(0x6216df18, 0x523bfb78), WTCP(0x61dc701f, 0x52817c72), WTCP(0x61a1c912, 0x52c6dbf5), WTCP(0x6166ea36, 0x530c198d), - WTCP(0x612bd3d2, 0x535134c5), WTCP(0x60f0862d, 0x53962d2a), WTCP(0x60b50190, 0x53db024a), WTCP(0x60794644, 0x541fb3b1), - WTCP(0x603d5494, 0x546440ef), WTCP(0x60012cca, 0x54a8a992), WTCP(0x5fc4cf33, 0x54eced2b), WTCP(0x5f883c1c, 0x55310b48), - WTCP(0x5f4b73d2, 0x5575037c), WTCP(0x5f0e76a5, 0x55b8d558), WTCP(0x5ed144e5, 0x55fc806f), WTCP(0x5e93dee1, 0x56400452), - WTCP(0x5e5644ec, 0x56836096), WTCP(0x5e187757, 0x56c694cf), WTCP(0x5dda7677, 0x5709a092), WTCP(0x5d9c429f, 0x574c8374), - WTCP(0x5d5ddc24, 0x578f3d0d), WTCP(0x5d1f435d, 0x57d1ccf2), WTCP(0x5ce078a0, 0x581432bd), WTCP(0x5ca17c45, 0x58566e04), - WTCP(0x5c624ea4, 0x58987e63), WTCP(0x5c22f016, 0x58da6372), WTCP(0x5be360f6, 0x591c1ccc), WTCP(0x5ba3a19f, 0x595daa0d), - WTCP(0x5b63b26c, 0x599f0ad1), WTCP(0x5b2393ba, 0x59e03eb6), WTCP(0x5ae345e7, 0x5a214558), WTCP(0x5aa2c951, 0x5a621e56), -}; - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_WTP SineWindow128[] = -{ - WTCP(0x7fff6216, 0x00c90f88), WTCP(0x7ffa72d1, 0x025b26d7), WTCP(0x7ff09478, 0x03ed26e6), WTCP(0x7fe1c76b, 0x057f0035), - WTCP(0x7fce0c3e, 0x0710a345), WTCP(0x7fb563b3, 0x08a2009a), WTCP(0x7f97cebd, 0x0a3308bd), WTCP(0x7f754e80, 0x0bc3ac35), - WTCP(0x7f4de451, 0x0d53db92), WTCP(0x7f2191b4, 0x0ee38766), WTCP(0x7ef05860, 0x1072a048), WTCP(0x7eba3a39, 0x120116d5), - WTCP(0x7e7f3957, 0x138edbb1), WTCP(0x7e3f57ff, 0x151bdf86), WTCP(0x7dfa98a8, 0x16a81305), WTCP(0x7db0fdf8, 0x183366e9), - WTCP(0x7d628ac6, 0x19bdcbf3), WTCP(0x7d0f4218, 0x1b4732ef), WTCP(0x7cb72724, 0x1ccf8cb3), WTCP(0x7c5a3d50, 0x1e56ca1e), - WTCP(0x7bf88830, 0x1fdcdc1b), WTCP(0x7b920b89, 0x2161b3a0), WTCP(0x7b26cb4f, 0x22e541af), WTCP(0x7ab6cba4, 0x24677758), - WTCP(0x7a4210d8, 0x25e845b6), WTCP(0x79c89f6e, 0x27679df4), WTCP(0x794a7c12, 0x28e5714b), WTCP(0x78c7aba2, 0x2a61b101), - WTCP(0x78403329, 0x2bdc4e6f), WTCP(0x77b417df, 0x2d553afc), WTCP(0x77235f2d, 0x2ecc681e), WTCP(0x768e0ea6, 0x3041c761), - WTCP(0x75f42c0b, 0x31b54a5e), WTCP(0x7555bd4c, 0x3326e2c3), WTCP(0x74b2c884, 0x34968250), WTCP(0x740b53fb, 0x36041ad9), - WTCP(0x735f6626, 0x376f9e46), WTCP(0x72af05a7, 0x38d8fe93), WTCP(0x71fa3949, 0x3a402dd2), WTCP(0x71410805, 0x3ba51e29), - WTCP(0x708378ff, 0x3d07c1d6), WTCP(0x6fc19385, 0x3e680b2c), WTCP(0x6efb5f12, 0x3fc5ec98), WTCP(0x6e30e34a, 0x4121589b), - WTCP(0x6d6227fa, 0x427a41d0), WTCP(0x6c8f351c, 0x43d09aed), WTCP(0x6bb812d1, 0x452456bd), WTCP(0x6adcc964, 0x46756828), - WTCP(0x69fd614a, 0x47c3c22f), WTCP(0x6919e320, 0x490f57ee), WTCP(0x683257ab, 0x4a581c9e), WTCP(0x6746c7d8, 0x4b9e0390), - WTCP(0x66573cbb, 0x4ce10034), WTCP(0x6563bf92, 0x4e210617), WTCP(0x646c59bf, 0x4f5e08e3), WTCP(0x637114cc, 0x5097fc5e), - WTCP(0x6271fa69, 0x51ced46e), WTCP(0x616f146c, 0x53028518), WTCP(0x60686ccf, 0x5433027d), WTCP(0x5f5e0db3, 0x556040e2), - WTCP(0x5e50015d, 0x568a34a9), WTCP(0x5d3e5237, 0x57b0d256), WTCP(0x5c290acc, 0x58d40e8c), WTCP(0x5b1035cf, 0x59f3de12), -}; - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_WTP KBDWindow128[] = -{ - WTCP(0x7ffffffe, 0x00016f63), WTCP(0x7ffffff1, 0x0003e382), WTCP(0x7fffffc7, 0x00078f64), WTCP(0x7fffff5d, 0x000cc323), - WTCP(0x7ffffe76, 0x0013d9ed), WTCP(0x7ffffcaa, 0x001d3a9d), WTCP(0x7ffff953, 0x0029581f), WTCP(0x7ffff372, 0x0038b1bd), - WTCP(0x7fffe98b, 0x004bd34d), WTCP(0x7fffd975, 0x00635538), WTCP(0x7fffc024, 0x007fdc64), WTCP(0x7fff995b, 0x00a219f1), - WTCP(0x7fff5f5b, 0x00cacad0), WTCP(0x7fff0a75, 0x00fab72d), WTCP(0x7ffe9091, 0x0132b1af), WTCP(0x7ffde49e, 0x01739689), - WTCP(0x7ffcf5ef, 0x01be4a63), WTCP(0x7ffbaf84, 0x0213b910), WTCP(0x7ff9f73a, 0x0274d41e), WTCP(0x7ff7acf1, 0x02e2913a), - WTCP(0x7ff4a99a, 0x035de86c), WTCP(0x7ff0be3d, 0x03e7d233), WTCP(0x7febb2f1, 0x0481457c), WTCP(0x7fe545d4, 0x052b357c), - WTCP(0x7fdd2a02, 0x05e68f77), WTCP(0x7fd30695, 0x06b4386f), WTCP(0x7fc675b4, 0x07950acb), WTCP(0x7fb703be, 0x0889d3ef), - WTCP(0x7fa42e89, 0x099351e0), WTCP(0x7f8d64d8, 0x0ab230e0), WTCP(0x7f7205f8, 0x0be70923), WTCP(0x7f516195, 0x0d325c93), - WTCP(0x7f2ab7d0, 0x0e9494ae), WTCP(0x7efd3997, 0x100e0085), WTCP(0x7ec8094a, 0x119ed2ef), WTCP(0x7e8a3ba7, 0x134720d8), - WTCP(0x7e42d906, 0x1506dfdc), WTCP(0x7df0dee4, 0x16dde50b), WTCP(0x7d9341b4, 0x18cbe3f7), WTCP(0x7d28ef02, 0x1ad06e07), - WTCP(0x7cb0cfcc, 0x1ceaf215), WTCP(0x7c29cb20, 0x1f1abc4f), WTCP(0x7b92c8eb, 0x215ef677), WTCP(0x7aeab4ec, 0x23b6a867), - WTCP(0x7a3081d0, 0x2620b8ec), WTCP(0x79632c5a, 0x289beef5), WTCP(0x7881be95, 0x2b26f30b), WTCP(0x778b5304, 0x2dc0511f), - WTCP(0x767f17c0, 0x30667aa2), WTCP(0x755c5178, 0x3317c8dd), WTCP(0x74225e50, 0x35d27f98), WTCP(0x72d0b887, 0x3894cff3), - WTCP(0x7166f8e7, 0x3b5cdb7b), WTCP(0x6fe4d8e8, 0x3e28b770), WTCP(0x6e4a3491, 0x40f6702a), WTCP(0x6c970bfc, 0x43c40caa), - WTCP(0x6acb8483, 0x468f9231), WTCP(0x68e7e994, 0x495707f5), WTCP(0x66ecad1c, 0x4c187ac7), WTCP(0x64da6797, 0x4ed200c5), - WTCP(0x62b1d7b7, 0x5181bcea), WTCP(0x6073e1ae, 0x5425e28e), WTCP(0x5e218e16, 0x56bcb8c2), WTCP(0x5bbc0875, 0x59449d76), -}; - - - - - - - - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_WTP SineWindow960[] = -{ - WTCP(0x7ffffd31, 0x001aceea), WTCP(0x7fffe6bc, 0x00506cb9), WTCP(0x7fffb9d1, 0x00860a79), WTCP(0x7fff7671, 0x00bba822), - WTCP(0x7fff1c9b, 0x00f145ab), WTCP(0x7ffeac50, 0x0126e309), WTCP(0x7ffe2590, 0x015c8033), WTCP(0x7ffd885a, 0x01921d20), - WTCP(0x7ffcd4b0, 0x01c7b9c6), WTCP(0x7ffc0a91, 0x01fd561d), WTCP(0x7ffb29fd, 0x0232f21a), WTCP(0x7ffa32f4, 0x02688db4), - WTCP(0x7ff92577, 0x029e28e2), WTCP(0x7ff80186, 0x02d3c39b), WTCP(0x7ff6c720, 0x03095dd5), WTCP(0x7ff57647, 0x033ef786), - WTCP(0x7ff40efa, 0x037490a5), WTCP(0x7ff2913a, 0x03aa292a), WTCP(0x7ff0fd07, 0x03dfc109), WTCP(0x7fef5260, 0x0415583b), - WTCP(0x7fed9148, 0x044aeeb5), WTCP(0x7febb9bd, 0x0480846e), WTCP(0x7fe9cbc0, 0x04b6195d), WTCP(0x7fe7c752, 0x04ebad79), - WTCP(0x7fe5ac72, 0x052140b7), WTCP(0x7fe37b22, 0x0556d30f), WTCP(0x7fe13361, 0x058c6478), WTCP(0x7fded530, 0x05c1f4e7), - WTCP(0x7fdc608f, 0x05f78453), WTCP(0x7fd9d57f, 0x062d12b4), WTCP(0x7fd73401, 0x06629ffe), WTCP(0x7fd47c14, 0x06982c2b), - WTCP(0x7fd1adb9, 0x06cdb72f), WTCP(0x7fcec8f1, 0x07034101), WTCP(0x7fcbcdbc, 0x0738c998), WTCP(0x7fc8bc1b, 0x076e50eb), - WTCP(0x7fc5940e, 0x07a3d6f0), WTCP(0x7fc25596, 0x07d95b9e), WTCP(0x7fbf00b3, 0x080edeec), WTCP(0x7fbb9567, 0x084460cf), - WTCP(0x7fb813b0, 0x0879e140), WTCP(0x7fb47b91, 0x08af6033), WTCP(0x7fb0cd0a, 0x08e4dda0), WTCP(0x7fad081b, 0x091a597e), - WTCP(0x7fa92cc5, 0x094fd3c3), WTCP(0x7fa53b09, 0x09854c66), WTCP(0x7fa132e8, 0x09bac35d), WTCP(0x7f9d1461, 0x09f0389f), - WTCP(0x7f98df77, 0x0a25ac23), WTCP(0x7f949429, 0x0a5b1dde), WTCP(0x7f903279, 0x0a908dc9), WTCP(0x7f8bba66, 0x0ac5fbd9), - WTCP(0x7f872bf3, 0x0afb6805), WTCP(0x7f82871f, 0x0b30d244), WTCP(0x7f7dcbec, 0x0b663a8c), WTCP(0x7f78fa5b, 0x0b9ba0d5), - WTCP(0x7f74126b, 0x0bd10513), WTCP(0x7f6f141f, 0x0c066740), WTCP(0x7f69ff76, 0x0c3bc74f), WTCP(0x7f64d473, 0x0c71253a), - WTCP(0x7f5f9315, 0x0ca680f5), WTCP(0x7f5a3b5e, 0x0cdbda79), WTCP(0x7f54cd4f, 0x0d1131ba), WTCP(0x7f4f48e8, 0x0d4686b1), - WTCP(0x7f49ae2a, 0x0d7bd954), WTCP(0x7f43fd18, 0x0db12999), WTCP(0x7f3e35b0, 0x0de67776), WTCP(0x7f3857f6, 0x0e1bc2e4), - WTCP(0x7f3263e9, 0x0e510bd8), WTCP(0x7f2c598a, 0x0e865248), WTCP(0x7f2638db, 0x0ebb962c), WTCP(0x7f2001dd, 0x0ef0d77b), - WTCP(0x7f19b491, 0x0f26162a), WTCP(0x7f1350f8, 0x0f5b5231), WTCP(0x7f0cd712, 0x0f908b86), WTCP(0x7f0646e2, 0x0fc5c220), - WTCP(0x7effa069, 0x0ffaf5f6), WTCP(0x7ef8e3a6, 0x103026fe), WTCP(0x7ef2109d, 0x1065552e), WTCP(0x7eeb274d, 0x109a807e), - WTCP(0x7ee427b9, 0x10cfa8e5), WTCP(0x7edd11e1, 0x1104ce58), WTCP(0x7ed5e5c6, 0x1139f0cf), WTCP(0x7ecea36b, 0x116f1040), - WTCP(0x7ec74acf, 0x11a42ca2), WTCP(0x7ebfdbf5, 0x11d945eb), WTCP(0x7eb856de, 0x120e5c13), WTCP(0x7eb0bb8a, 0x12436f10), - WTCP(0x7ea909fc, 0x12787ed8), WTCP(0x7ea14235, 0x12ad8b63), WTCP(0x7e996436, 0x12e294a7), WTCP(0x7e917000, 0x13179a9b), - WTCP(0x7e896595, 0x134c9d34), WTCP(0x7e8144f6, 0x13819c6c), WTCP(0x7e790e25, 0x13b69836), WTCP(0x7e70c124, 0x13eb908c), - WTCP(0x7e685df2, 0x14208563), WTCP(0x7e5fe493, 0x145576b1), WTCP(0x7e575508, 0x148a646e), WTCP(0x7e4eaf51, 0x14bf4e91), - WTCP(0x7e45f371, 0x14f43510), WTCP(0x7e3d2169, 0x152917e1), WTCP(0x7e34393b, 0x155df6fc), WTCP(0x7e2b3ae8, 0x1592d257), - WTCP(0x7e222672, 0x15c7a9ea), WTCP(0x7e18fbda, 0x15fc7daa), WTCP(0x7e0fbb22, 0x16314d8e), WTCP(0x7e06644c, 0x1666198d), - WTCP(0x7dfcf759, 0x169ae19f), WTCP(0x7df3744b, 0x16cfa5b9), WTCP(0x7de9db23, 0x170465d2), WTCP(0x7de02be4, 0x173921e2), - WTCP(0x7dd6668f, 0x176dd9de), WTCP(0x7dcc8b25, 0x17a28dbe), WTCP(0x7dc299a9, 0x17d73d79), WTCP(0x7db8921c, 0x180be904), - WTCP(0x7dae747f, 0x18409058), WTCP(0x7da440d6, 0x1875336a), WTCP(0x7d99f721, 0x18a9d231), WTCP(0x7d8f9762, 0x18de6ca5), - WTCP(0x7d85219c, 0x191302bc), WTCP(0x7d7a95cf, 0x1947946c), WTCP(0x7d6ff3fe, 0x197c21ad), WTCP(0x7d653c2b, 0x19b0aa75), - WTCP(0x7d5a6e57, 0x19e52ebb), WTCP(0x7d4f8a85, 0x1a19ae76), WTCP(0x7d4490b6, 0x1a4e299d), WTCP(0x7d3980ec, 0x1a82a026), - WTCP(0x7d2e5b2a, 0x1ab71208), WTCP(0x7d231f70, 0x1aeb7f3a), WTCP(0x7d17cdc2, 0x1b1fe7b3), WTCP(0x7d0c6621, 0x1b544b6a), - WTCP(0x7d00e88f, 0x1b88aa55), WTCP(0x7cf5550e, 0x1bbd046c), WTCP(0x7ce9aba1, 0x1bf159a4), WTCP(0x7cddec48, 0x1c25a9f6), - WTCP(0x7cd21707, 0x1c59f557), WTCP(0x7cc62bdf, 0x1c8e3bbe), WTCP(0x7cba2ad3, 0x1cc27d23), WTCP(0x7cae13e4, 0x1cf6b97c), - WTCP(0x7ca1e715, 0x1d2af0c1), WTCP(0x7c95a467, 0x1d5f22e7), WTCP(0x7c894bde, 0x1d934fe5), WTCP(0x7c7cdd7b, 0x1dc777b3), - WTCP(0x7c705940, 0x1dfb9a48), WTCP(0x7c63bf2f, 0x1e2fb79a), WTCP(0x7c570f4b, 0x1e63cfa0), WTCP(0x7c4a4996, 0x1e97e251), - WTCP(0x7c3d6e13, 0x1ecbefa4), WTCP(0x7c307cc2, 0x1efff78f), WTCP(0x7c2375a8, 0x1f33fa0a), WTCP(0x7c1658c5, 0x1f67f70b), - WTCP(0x7c09261d, 0x1f9bee8a), WTCP(0x7bfbddb1, 0x1fcfe07d), WTCP(0x7bee7f85, 0x2003ccdb), WTCP(0x7be10b99, 0x2037b39b), - WTCP(0x7bd381f1, 0x206b94b4), WTCP(0x7bc5e290, 0x209f701c), WTCP(0x7bb82d76, 0x20d345cc), WTCP(0x7baa62a8, 0x210715b8), - WTCP(0x7b9c8226, 0x213adfda), WTCP(0x7b8e8bf5, 0x216ea426), WTCP(0x7b808015, 0x21a26295), WTCP(0x7b725e8a, 0x21d61b1e), - WTCP(0x7b642756, 0x2209cdb6), WTCP(0x7b55da7c, 0x223d7a55), WTCP(0x7b4777fe, 0x227120f3), WTCP(0x7b38ffde, 0x22a4c185), - WTCP(0x7b2a721f, 0x22d85c04), WTCP(0x7b1bcec4, 0x230bf065), WTCP(0x7b0d15d0, 0x233f7ea0), WTCP(0x7afe4744, 0x237306ab), - WTCP(0x7aef6323, 0x23a6887f), WTCP(0x7ae06971, 0x23da0411), WTCP(0x7ad15a2f, 0x240d7958), WTCP(0x7ac23561, 0x2440e84d), - WTCP(0x7ab2fb09, 0x247450e4), WTCP(0x7aa3ab29, 0x24a7b317), WTCP(0x7a9445c5, 0x24db0edb), WTCP(0x7a84cade, 0x250e6427), - WTCP(0x7a753a79, 0x2541b2f3), WTCP(0x7a659496, 0x2574fb36), WTCP(0x7a55d93a, 0x25a83ce6), WTCP(0x7a460867, 0x25db77fa), - WTCP(0x7a362220, 0x260eac6a), WTCP(0x7a262668, 0x2641da2d), WTCP(0x7a161540, 0x26750139), WTCP(0x7a05eead, 0x26a82186), - WTCP(0x79f5b2b1, 0x26db3b0a), WTCP(0x79e5614f, 0x270e4dbd), WTCP(0x79d4fa89, 0x27415996), WTCP(0x79c47e63, 0x27745e8c), - WTCP(0x79b3ece0, 0x27a75c95), WTCP(0x79a34602, 0x27da53a9), WTCP(0x799289cc, 0x280d43bf), WTCP(0x7981b841, 0x28402cce), - WTCP(0x7970d165, 0x28730ecd), WTCP(0x795fd53a, 0x28a5e9b4), WTCP(0x794ec3c3, 0x28d8bd78), WTCP(0x793d9d03, 0x290b8a12), - WTCP(0x792c60fe, 0x293e4f78), WTCP(0x791b0fb5, 0x29710da1), WTCP(0x7909a92d, 0x29a3c485), WTCP(0x78f82d68, 0x29d6741b), - WTCP(0x78e69c69, 0x2a091c59), WTCP(0x78d4f634, 0x2a3bbd37), WTCP(0x78c33acb, 0x2a6e56ac), WTCP(0x78b16a32, 0x2aa0e8b0), - WTCP(0x789f846b, 0x2ad37338), WTCP(0x788d897b, 0x2b05f63d), WTCP(0x787b7963, 0x2b3871b5), WTCP(0x78695428, 0x2b6ae598), - WTCP(0x785719cc, 0x2b9d51dd), WTCP(0x7844ca53, 0x2bcfb67b), WTCP(0x783265c0, 0x2c021369), WTCP(0x781fec15, 0x2c34689e), - WTCP(0x780d5d57, 0x2c66b611), WTCP(0x77fab989, 0x2c98fbba), WTCP(0x77e800ad, 0x2ccb3990), WTCP(0x77d532c7, 0x2cfd6f8a), - WTCP(0x77c24fdb, 0x2d2f9d9f), WTCP(0x77af57eb, 0x2d61c3c7), WTCP(0x779c4afc, 0x2d93e1f8), WTCP(0x77892910, 0x2dc5f829), - WTCP(0x7775f22a, 0x2df80653), WTCP(0x7762a64f, 0x2e2a0c6c), WTCP(0x774f4581, 0x2e5c0a6b), WTCP(0x773bcfc4, 0x2e8e0048), - WTCP(0x7728451c, 0x2ebfedfa), WTCP(0x7714a58b, 0x2ef1d377), WTCP(0x7700f115, 0x2f23b0b9), WTCP(0x76ed27be, 0x2f5585b5), - WTCP(0x76d94989, 0x2f875262), WTCP(0x76c55679, 0x2fb916b9), WTCP(0x76b14e93, 0x2fead2b0), WTCP(0x769d31d9, 0x301c863f), - WTCP(0x76890050, 0x304e315d), WTCP(0x7674b9fa, 0x307fd401), WTCP(0x76605edb, 0x30b16e23), WTCP(0x764beef8, 0x30e2ffb9), - WTCP(0x76376a52, 0x311488bc), WTCP(0x7622d0ef, 0x31460922), WTCP(0x760e22d1, 0x317780e2), WTCP(0x75f95ffc, 0x31a8eff5), - WTCP(0x75e48874, 0x31da5651), WTCP(0x75cf9c3d, 0x320bb3ee), WTCP(0x75ba9b5a, 0x323d08c3), WTCP(0x75a585cf, 0x326e54c7), - WTCP(0x75905ba0, 0x329f97f3), WTCP(0x757b1ccf, 0x32d0d23c), WTCP(0x7565c962, 0x3302039b), WTCP(0x7550615c, 0x33332c06), - WTCP(0x753ae4c0, 0x33644b76), WTCP(0x75255392, 0x339561e1), WTCP(0x750fadd7, 0x33c66f40), WTCP(0x74f9f391, 0x33f77388), - WTCP(0x74e424c5, 0x34286eb3), WTCP(0x74ce4177, 0x345960b7), WTCP(0x74b849aa, 0x348a498b), WTCP(0x74a23d62, 0x34bb2927), - WTCP(0x748c1ca4, 0x34ebff83), WTCP(0x7475e772, 0x351ccc96), WTCP(0x745f9dd1, 0x354d9057), WTCP(0x74493fc5, 0x357e4abe), - WTCP(0x7432cd51, 0x35aefbc2), WTCP(0x741c467b, 0x35dfa35a), WTCP(0x7405ab45, 0x3610417f), WTCP(0x73eefbb3, 0x3640d627), - WTCP(0x73d837ca, 0x3671614b), WTCP(0x73c15f8d, 0x36a1e2e0), WTCP(0x73aa7301, 0x36d25ae0), WTCP(0x7393722a, 0x3702c942), - WTCP(0x737c5d0b, 0x37332dfd), WTCP(0x736533a9, 0x37638908), WTCP(0x734df607, 0x3793da5b), WTCP(0x7336a42b, 0x37c421ee), - WTCP(0x731f3e17, 0x37f45fb7), WTCP(0x7307c3d0, 0x382493b0), WTCP(0x72f0355a, 0x3854bdcf), WTCP(0x72d892ba, 0x3884de0b), - WTCP(0x72c0dbf3, 0x38b4f45d), WTCP(0x72a91109, 0x38e500bc), WTCP(0x72913201, 0x3915031f), WTCP(0x72793edf, 0x3944fb7e), - WTCP(0x726137a8, 0x3974e9d0), WTCP(0x72491c5e, 0x39a4ce0e), WTCP(0x7230ed07, 0x39d4a82f), WTCP(0x7218a9a7, 0x3a04782a), - WTCP(0x72005242, 0x3a343df7), WTCP(0x71e7e6dc, 0x3a63f98d), WTCP(0x71cf677a, 0x3a93aae5), WTCP(0x71b6d420, 0x3ac351f6), - WTCP(0x719e2cd2, 0x3af2eeb7), WTCP(0x71857195, 0x3b228120), WTCP(0x716ca26c, 0x3b52092a), WTCP(0x7153bf5d, 0x3b8186ca), - WTCP(0x713ac86b, 0x3bb0f9fa), WTCP(0x7121bd9c, 0x3be062b0), WTCP(0x71089ef2, 0x3c0fc0e6), WTCP(0x70ef6c74, 0x3c3f1491), - WTCP(0x70d62625, 0x3c6e5daa), WTCP(0x70bccc09, 0x3c9d9c28), WTCP(0x70a35e25, 0x3cccd004), WTCP(0x7089dc7e, 0x3cfbf935), - WTCP(0x70704718, 0x3d2b17b3), WTCP(0x70569df8, 0x3d5a2b75), WTCP(0x703ce122, 0x3d893474), WTCP(0x7023109a, 0x3db832a6), - WTCP(0x70092c65, 0x3de72604), WTCP(0x6fef3488, 0x3e160e85), WTCP(0x6fd52907, 0x3e44ec22), WTCP(0x6fbb09e7, 0x3e73bed2), - WTCP(0x6fa0d72c, 0x3ea2868c), WTCP(0x6f8690db, 0x3ed14349), WTCP(0x6f6c36f8, 0x3efff501), WTCP(0x6f51c989, 0x3f2e9bab), - WTCP(0x6f374891, 0x3f5d373e), WTCP(0x6f1cb416, 0x3f8bc7b4), WTCP(0x6f020c1c, 0x3fba4d03), WTCP(0x6ee750a8, 0x3fe8c724), - WTCP(0x6ecc81be, 0x4017360e), WTCP(0x6eb19f64, 0x404599b9), WTCP(0x6e96a99d, 0x4073f21d), WTCP(0x6e7ba06f, 0x40a23f32), - WTCP(0x6e6083de, 0x40d080f0), WTCP(0x6e4553ef, 0x40feb74f), WTCP(0x6e2a10a8, 0x412ce246), WTCP(0x6e0eba0c, 0x415b01ce), - WTCP(0x6df35020, 0x418915de), WTCP(0x6dd7d2ea, 0x41b71e6f), WTCP(0x6dbc426e, 0x41e51b77), WTCP(0x6da09eb1, 0x42130cf0), - WTCP(0x6d84e7b7, 0x4240f2d1), WTCP(0x6d691d87, 0x426ecd12), WTCP(0x6d4d4023, 0x429c9bab), WTCP(0x6d314f93, 0x42ca5e94), - WTCP(0x6d154bd9, 0x42f815c5), WTCP(0x6cf934fc, 0x4325c135), WTCP(0x6cdd0b00, 0x435360de), WTCP(0x6cc0cdea, 0x4380f4b7), - WTCP(0x6ca47dbf, 0x43ae7cb7), WTCP(0x6c881a84, 0x43dbf8d7), WTCP(0x6c6ba43e, 0x44096910), WTCP(0x6c4f1af2, 0x4436cd58), - WTCP(0x6c327ea6, 0x446425a8), WTCP(0x6c15cf5d, 0x449171f8), WTCP(0x6bf90d1d, 0x44beb240), WTCP(0x6bdc37eb, 0x44ebe679), - WTCP(0x6bbf4fcd, 0x45190e99), WTCP(0x6ba254c7, 0x45462a9a), WTCP(0x6b8546de, 0x45733a73), WTCP(0x6b682617, 0x45a03e1d), - WTCP(0x6b4af279, 0x45cd358f), WTCP(0x6b2dac06, 0x45fa20c2), WTCP(0x6b1052c6, 0x4626ffae), WTCP(0x6af2e6bc, 0x4653d24b), - WTCP(0x6ad567ef, 0x46809891), WTCP(0x6ab7d663, 0x46ad5278), WTCP(0x6a9a321d, 0x46d9fff8), WTCP(0x6a7c7b23, 0x4706a10a), - WTCP(0x6a5eb17a, 0x473335a5), WTCP(0x6a40d527, 0x475fbdc3), WTCP(0x6a22e630, 0x478c395a), WTCP(0x6a04e499, 0x47b8a864), - WTCP(0x69e6d067, 0x47e50ad8), WTCP(0x69c8a9a1, 0x481160ae), WTCP(0x69aa704c, 0x483da9e0), WTCP(0x698c246c, 0x4869e665), - WTCP(0x696dc607, 0x48961635), WTCP(0x694f5523, 0x48c23949), WTCP(0x6930d1c4, 0x48ee4f98), WTCP(0x69123bf1, 0x491a591c), - WTCP(0x68f393ae, 0x494655cc), WTCP(0x68d4d900, 0x497245a1), WTCP(0x68b60bee, 0x499e2892), WTCP(0x68972c7d, 0x49c9fe99), - WTCP(0x68783ab1, 0x49f5c7ae), WTCP(0x68593691, 0x4a2183c8), WTCP(0x683a2022, 0x4a4d32e1), WTCP(0x681af76a, 0x4a78d4f0), - WTCP(0x67fbbc6d, 0x4aa469ee), WTCP(0x67dc6f31, 0x4acff1d3), WTCP(0x67bd0fbd, 0x4afb6c98), WTCP(0x679d9e14, 0x4b26da35), - WTCP(0x677e1a3e, 0x4b523aa2), WTCP(0x675e843e, 0x4b7d8dd8), WTCP(0x673edc1c, 0x4ba8d3cf), WTCP(0x671f21dc, 0x4bd40c80), - WTCP(0x66ff5584, 0x4bff37e2), WTCP(0x66df771a, 0x4c2a55ef), WTCP(0x66bf86a3, 0x4c55669f), WTCP(0x669f8425, 0x4c8069ea), - WTCP(0x667f6fa5, 0x4cab5fc9), WTCP(0x665f4929, 0x4cd64834), WTCP(0x663f10b7, 0x4d012324), WTCP(0x661ec654, 0x4d2bf091), - WTCP(0x65fe6a06, 0x4d56b073), WTCP(0x65ddfbd3, 0x4d8162c4), WTCP(0x65bd7bc0, 0x4dac077b), WTCP(0x659ce9d4, 0x4dd69e92), - WTCP(0x657c4613, 0x4e012800), WTCP(0x655b9083, 0x4e2ba3be), WTCP(0x653ac92b, 0x4e5611c5), WTCP(0x6519f010, 0x4e80720e), - WTCP(0x64f90538, 0x4eaac490), WTCP(0x64d808a8, 0x4ed50945), WTCP(0x64b6fa66, 0x4eff4025), WTCP(0x6495da79, 0x4f296928), - WTCP(0x6474a8e5, 0x4f538448), WTCP(0x645365b2, 0x4f7d917c), WTCP(0x643210e4, 0x4fa790be), WTCP(0x6410aa81, 0x4fd18206), - WTCP(0x63ef3290, 0x4ffb654d), WTCP(0x63cda916, 0x50253a8b), WTCP(0x63ac0e19, 0x504f01ba), WTCP(0x638a619e, 0x5078bad1), - WTCP(0x6368a3ad, 0x50a265c9), WTCP(0x6346d44b, 0x50cc029c), WTCP(0x6324f37d, 0x50f59141), WTCP(0x6303014a, 0x511f11b2), - WTCP(0x62e0fdb8, 0x514883e7), WTCP(0x62bee8cc, 0x5171e7d9), WTCP(0x629cc28c, 0x519b3d80), WTCP(0x627a8b00, 0x51c484d6), - WTCP(0x6258422c, 0x51edbdd4), WTCP(0x6235e816, 0x5216e871), WTCP(0x62137cc5, 0x524004a7), WTCP(0x61f1003f, 0x5269126e), - WTCP(0x61ce7289, 0x529211c0), WTCP(0x61abd3ab, 0x52bb0295), WTCP(0x618923a9, 0x52e3e4e6), WTCP(0x61666289, 0x530cb8ac), - WTCP(0x61439053, 0x53357ddf), WTCP(0x6120ad0d, 0x535e3479), WTCP(0x60fdb8bb, 0x5386dc72), WTCP(0x60dab365, 0x53af75c3), - WTCP(0x60b79d10, 0x53d80065), WTCP(0x609475c3, 0x54007c51), WTCP(0x60713d84, 0x5428e980), WTCP(0x604df459, 0x545147eb), - WTCP(0x602a9a48, 0x5479978a), WTCP(0x60072f57, 0x54a1d857), WTCP(0x5fe3b38d, 0x54ca0a4b), WTCP(0x5fc026f0, 0x54f22d5d), - WTCP(0x5f9c8987, 0x551a4189), WTCP(0x5f78db56, 0x554246c6), WTCP(0x5f551c65, 0x556a3d0d), WTCP(0x5f314cba, 0x55922457), - WTCP(0x5f0d6c5b, 0x55b9fc9e), WTCP(0x5ee97b4f, 0x55e1c5da), WTCP(0x5ec5799b, 0x56098005), WTCP(0x5ea16747, 0x56312b17), - WTCP(0x5e7d4458, 0x5658c709), WTCP(0x5e5910d4, 0x568053d5), WTCP(0x5e34ccc3, 0x56a7d174), WTCP(0x5e10782b, 0x56cf3fde), - WTCP(0x5dec1311, 0x56f69f0d), WTCP(0x5dc79d7c, 0x571deefa), WTCP(0x5da31773, 0x57452f9d), WTCP(0x5d7e80fc, 0x576c60f1), - WTCP(0x5d59da1e, 0x579382ee), WTCP(0x5d3522de, 0x57ba958d), WTCP(0x5d105b44, 0x57e198c7), WTCP(0x5ceb8355, 0x58088c96), - WTCP(0x5cc69b19, 0x582f70f3), WTCP(0x5ca1a295, 0x585645d7), WTCP(0x5c7c99d1, 0x587d0b3b), WTCP(0x5c5780d3, 0x58a3c118), - WTCP(0x5c3257a0, 0x58ca6767), WTCP(0x5c0d1e41, 0x58f0fe23), WTCP(0x5be7d4ba, 0x59178543), WTCP(0x5bc27b14, 0x593dfcc2), - WTCP(0x5b9d1154, 0x59646498), WTCP(0x5b779780, 0x598abcbe), WTCP(0x5b520da1, 0x59b1052f), WTCP(0x5b2c73bb, 0x59d73de3), - WTCP(0x5b06c9d6, 0x59fd66d4), WTCP(0x5ae10ff9, 0x5a237ffa), WTCP(0x5abb4629, 0x5a498950), WTCP(0x5a956c6e, 0x5a6f82ce), -}; - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_WTP KBDWindow960[] = -{ - WTCP(0x7fffff9e, 0x0009e6ac), WTCP(0x7fffff2b, 0x000e96d5), WTCP(0x7ffffea6, 0x0012987e), WTCP(0x7ffffe0e, 0x001652b6), - WTCP(0x7ffffd60, 0x0019ebce), WTCP(0x7ffffc9c, 0x001d76bf), WTCP(0x7ffffbbf, 0x0020fe79), WTCP(0x7ffffac9, 0x002489ef), - WTCP(0x7ffff9b7, 0x00281de2), WTCP(0x7ffff887, 0x002bbdbb), WTCP(0x7ffff737, 0x002f6c0d), WTCP(0x7ffff5c6, 0x00332ad8), - WTCP(0x7ffff431, 0x0036fbb9), WTCP(0x7ffff276, 0x003ae004), WTCP(0x7ffff092, 0x003ed8d8), WTCP(0x7fffee84, 0x0042e72f), - WTCP(0x7fffec48, 0x00470be3), WTCP(0x7fffe9dd, 0x004b47b8), WTCP(0x7fffe73f, 0x004f9b5f), WTCP(0x7fffe46b, 0x0054077a), - WTCP(0x7fffe15f, 0x00588ca1), WTCP(0x7fffde17, 0x005d2b61), WTCP(0x7fffda91, 0x0061e442), WTCP(0x7fffd6c9, 0x0066b7c2), - WTCP(0x7fffd2bb, 0x006ba65c), WTCP(0x7fffce65, 0x0070b087), WTCP(0x7fffc9c2, 0x0075d6b5), WTCP(0x7fffc4cf, 0x007b1955), - WTCP(0x7fffbf87, 0x008078d5), WTCP(0x7fffb9e7, 0x0085f5a0), WTCP(0x7fffb3ea, 0x008b901d), WTCP(0x7fffad8c, 0x009148b4), - WTCP(0x7fffa6c9, 0x00971fcb), WTCP(0x7fff9f9c, 0x009d15c7), WTCP(0x7fff9800, 0x00a32b0b), WTCP(0x7fff8ff0, 0x00a95ff9), - WTCP(0x7fff8767, 0x00afb4f4), WTCP(0x7fff7e5f, 0x00b62a5c), WTCP(0x7fff74d4, 0x00bcc093), WTCP(0x7fff6ac0, 0x00c377f8), - WTCP(0x7fff601c, 0x00ca50eb), WTCP(0x7fff54e3, 0x00d14bcb), WTCP(0x7fff490e, 0x00d868f7), WTCP(0x7fff3c98, 0x00dfa8ce), - WTCP(0x7fff2f79, 0x00e70bad), WTCP(0x7fff21ac, 0x00ee91f3), WTCP(0x7fff1328, 0x00f63bfe), WTCP(0x7fff03e7, 0x00fe0a2c), - WTCP(0x7ffef3e1, 0x0105fcd9), WTCP(0x7ffee310, 0x010e1462), WTCP(0x7ffed16a, 0x01165126), WTCP(0x7ffebee9, 0x011eb381), - WTCP(0x7ffeab83, 0x01273bd0), WTCP(0x7ffe9731, 0x012fea6f), WTCP(0x7ffe81ea, 0x0138bfbc), WTCP(0x7ffe6ba4, 0x0141bc12), - WTCP(0x7ffe5457, 0x014adfce), WTCP(0x7ffe3bfa, 0x01542b4d), WTCP(0x7ffe2282, 0x015d9ee9), WTCP(0x7ffe07e6, 0x01673b01), - WTCP(0x7ffdec1b, 0x0170ffee), WTCP(0x7ffdcf17, 0x017aee0e), WTCP(0x7ffdb0d0, 0x018505bc), WTCP(0x7ffd913b, 0x018f4754), - WTCP(0x7ffd704b, 0x0199b330), WTCP(0x7ffd4df7, 0x01a449ad), WTCP(0x7ffd2a31, 0x01af0b25), WTCP(0x7ffd04ef, 0x01b9f7f4), - WTCP(0x7ffcde23, 0x01c51074), WTCP(0x7ffcb5c1, 0x01d05501), WTCP(0x7ffc8bbc, 0x01dbc5f5), WTCP(0x7ffc6006, 0x01e763ab), - WTCP(0x7ffc3293, 0x01f32e7d), WTCP(0x7ffc0354, 0x01ff26c5), WTCP(0x7ffbd23b, 0x020b4cde), WTCP(0x7ffb9f3a, 0x0217a120), - WTCP(0x7ffb6a41, 0x022423e6), WTCP(0x7ffb3342, 0x0230d58a), WTCP(0x7ffafa2d, 0x023db664), WTCP(0x7ffabef2, 0x024ac6ce), - WTCP(0x7ffa8180, 0x02580720), WTCP(0x7ffa41c9, 0x026577b3), WTCP(0x7ff9ffb9, 0x027318e0), WTCP(0x7ff9bb41, 0x0280eaff), - WTCP(0x7ff9744e, 0x028eee68), WTCP(0x7ff92acf, 0x029d2371), WTCP(0x7ff8deb1, 0x02ab8a74), WTCP(0x7ff88fe2, 0x02ba23c7), - WTCP(0x7ff83e4d, 0x02c8efc0), WTCP(0x7ff7e9e1, 0x02d7eeb7), WTCP(0x7ff79288, 0x02e72101), WTCP(0x7ff7382f, 0x02f686f5), - WTCP(0x7ff6dac1, 0x030620e9), WTCP(0x7ff67a29, 0x0315ef31), WTCP(0x7ff61651, 0x0325f224), WTCP(0x7ff5af23, 0x03362a14), - WTCP(0x7ff5448a, 0x03469758), WTCP(0x7ff4d66d, 0x03573a42), WTCP(0x7ff464b7, 0x03681327), WTCP(0x7ff3ef4f, 0x0379225a), - WTCP(0x7ff3761d, 0x038a682e), WTCP(0x7ff2f90a, 0x039be4f4), WTCP(0x7ff277fb, 0x03ad9900), WTCP(0x7ff1f2d8, 0x03bf84a3), - WTCP(0x7ff16986, 0x03d1a82e), WTCP(0x7ff0dbec, 0x03e403f3), WTCP(0x7ff049ef, 0x03f69840), WTCP(0x7fefb373, 0x04096568), - WTCP(0x7fef185d, 0x041c6bb8), WTCP(0x7fee7890, 0x042fab81), WTCP(0x7fedd3f1, 0x04432510), WTCP(0x7fed2a61, 0x0456d8b4), - WTCP(0x7fec7bc4, 0x046ac6ba), WTCP(0x7febc7fb, 0x047eef70), WTCP(0x7feb0ee8, 0x04935322), WTCP(0x7fea506b, 0x04a7f21d), - WTCP(0x7fe98c65, 0x04bcccab), WTCP(0x7fe8c2b7, 0x04d1e318), WTCP(0x7fe7f33e, 0x04e735af), WTCP(0x7fe71ddb, 0x04fcc4ba), - WTCP(0x7fe6426c, 0x05129081), WTCP(0x7fe560ce, 0x0528994d), WTCP(0x7fe478df, 0x053edf68), WTCP(0x7fe38a7c, 0x05556318), - WTCP(0x7fe29581, 0x056c24a5), WTCP(0x7fe199ca, 0x05832455), WTCP(0x7fe09733, 0x059a626e), WTCP(0x7fdf8d95, 0x05b1df35), - WTCP(0x7fde7ccb, 0x05c99aef), WTCP(0x7fdd64af, 0x05e195e0), WTCP(0x7fdc451a, 0x05f9d04b), WTCP(0x7fdb1de4, 0x06124a73), - WTCP(0x7fd9eee5, 0x062b0499), WTCP(0x7fd8b7f5, 0x0643ff00), WTCP(0x7fd778ec, 0x065d39e7), WTCP(0x7fd6319e, 0x0676b58f), - WTCP(0x7fd4e1e2, 0x06907237), WTCP(0x7fd3898d, 0x06aa701d), WTCP(0x7fd22873, 0x06c4af80), WTCP(0x7fd0be6a, 0x06df309c), - WTCP(0x7fcf4b44, 0x06f9f3ad), WTCP(0x7fcdced4, 0x0714f8f0), WTCP(0x7fcc48ed, 0x0730409f), WTCP(0x7fcab960, 0x074bcaf5), - WTCP(0x7fc91fff, 0x0767982a), WTCP(0x7fc77c9a, 0x0783a877), WTCP(0x7fc5cf02, 0x079ffc14), WTCP(0x7fc41705, 0x07bc9338), - WTCP(0x7fc25474, 0x07d96e19), WTCP(0x7fc0871b, 0x07f68ced), WTCP(0x7fbeaeca, 0x0813efe7), WTCP(0x7fbccb4c, 0x0831973d), - WTCP(0x7fbadc70, 0x084f8320), WTCP(0x7fb8e200, 0x086db3c3), WTCP(0x7fb6dbc8, 0x088c2957), WTCP(0x7fb4c993, 0x08aae40c), - WTCP(0x7fb2ab2b, 0x08c9e412), WTCP(0x7fb0805a, 0x08e92997), WTCP(0x7fae48e9, 0x0908b4c9), WTCP(0x7fac04a0, 0x092885d6), - WTCP(0x7fa9b347, 0x09489ce8), WTCP(0x7fa754a6, 0x0968fa2c), WTCP(0x7fa4e884, 0x09899dcb), WTCP(0x7fa26ea6, 0x09aa87ee), - WTCP(0x7f9fe6d1, 0x09cbb8be), WTCP(0x7f9d50cc, 0x09ed3062), WTCP(0x7f9aac5a, 0x0a0eef00), WTCP(0x7f97f93f, 0x0a30f4bf), - WTCP(0x7f95373e, 0x0a5341c2), WTCP(0x7f92661b, 0x0a75d62e), WTCP(0x7f8f8596, 0x0a98b224), WTCP(0x7f8c9572, 0x0abbd5c7), - WTCP(0x7f89956f, 0x0adf4137), WTCP(0x7f86854d, 0x0b02f494), WTCP(0x7f8364cd, 0x0b26effd), WTCP(0x7f8033ae, 0x0b4b338f), - WTCP(0x7f7cf1ae, 0x0b6fbf67), WTCP(0x7f799e8b, 0x0b9493a0), WTCP(0x7f763a03, 0x0bb9b056), WTCP(0x7f72c3d2, 0x0bdf15a2), - WTCP(0x7f6f3bb5, 0x0c04c39c), WTCP(0x7f6ba168, 0x0c2aba5d), WTCP(0x7f67f4a6, 0x0c50f9fa), WTCP(0x7f643529, 0x0c77828a), - WTCP(0x7f6062ac, 0x0c9e5420), WTCP(0x7f5c7ce8, 0x0cc56ed1), WTCP(0x7f588397, 0x0cecd2ae), WTCP(0x7f547670, 0x0d147fc8), - WTCP(0x7f50552c, 0x0d3c7630), WTCP(0x7f4c1f83, 0x0d64b5f6), WTCP(0x7f47d52a, 0x0d8d3f26), WTCP(0x7f4375d9, 0x0db611ce), - WTCP(0x7f3f0144, 0x0ddf2dfa), WTCP(0x7f3a7723, 0x0e0893b4), WTCP(0x7f35d729, 0x0e324306), WTCP(0x7f31210a, 0x0e5c3bf9), - WTCP(0x7f2c547b, 0x0e867e94), WTCP(0x7f27712e, 0x0eb10add), WTCP(0x7f2276d8, 0x0edbe0da), WTCP(0x7f1d6529, 0x0f07008e), - WTCP(0x7f183bd3, 0x0f3269fc), WTCP(0x7f12fa89, 0x0f5e1d27), WTCP(0x7f0da0fb, 0x0f8a1a0e), WTCP(0x7f082ed8, 0x0fb660b1), - WTCP(0x7f02a3d2, 0x0fe2f10f), WTCP(0x7efcff98, 0x100fcb25), WTCP(0x7ef741d9, 0x103ceeee), WTCP(0x7ef16a42, 0x106a5c66), - WTCP(0x7eeb7884, 0x10981386), WTCP(0x7ee56c4a, 0x10c61447), WTCP(0x7edf4543, 0x10f45ea0), WTCP(0x7ed9031b, 0x1122f288), - WTCP(0x7ed2a57f, 0x1151cff3), WTCP(0x7ecc2c1a, 0x1180f6d5), WTCP(0x7ec59699, 0x11b06720), WTCP(0x7ebee4a6, 0x11e020c8), - WTCP(0x7eb815ed, 0x121023ba), WTCP(0x7eb12a18, 0x12406fe8), WTCP(0x7eaa20d1, 0x1271053e), WTCP(0x7ea2f9c2, 0x12a1e3a9), - WTCP(0x7e9bb494, 0x12d30b15), WTCP(0x7e9450f0, 0x13047b6c), WTCP(0x7e8cce7f, 0x13363497), WTCP(0x7e852ce9, 0x1368367f), - WTCP(0x7e7d6bd6, 0x139a8109), WTCP(0x7e758aee, 0x13cd141b), WTCP(0x7e6d89d9, 0x13ffef99), WTCP(0x7e65683d, 0x14331368), - WTCP(0x7e5d25c1, 0x14667f67), WTCP(0x7e54c20b, 0x149a3379), WTCP(0x7e4c3cc3, 0x14ce2f7c), WTCP(0x7e43958e, 0x1502734f), - WTCP(0x7e3acc11, 0x1536fece), WTCP(0x7e31dff2, 0x156bd1d6), WTCP(0x7e28d0d7, 0x15a0ec41), WTCP(0x7e1f9e63, 0x15d64de9), - WTCP(0x7e16483d, 0x160bf6a5), WTCP(0x7e0cce08, 0x1641e64c), WTCP(0x7e032f6a, 0x16781cb4), WTCP(0x7df96c05, 0x16ae99b2), - WTCP(0x7def837e, 0x16e55d18), WTCP(0x7de57579, 0x171c66ba), WTCP(0x7ddb419a, 0x1753b667), WTCP(0x7dd0e784, 0x178b4bef), - WTCP(0x7dc666d9, 0x17c32721), WTCP(0x7dbbbf3e, 0x17fb47ca), WTCP(0x7db0f056, 0x1833adb5), WTCP(0x7da5f9c3, 0x186c58ae), - WTCP(0x7d9adb29, 0x18a5487d), WTCP(0x7d8f9429, 0x18de7cec), WTCP(0x7d842467, 0x1917f5c1), WTCP(0x7d788b86, 0x1951b2c2), - WTCP(0x7d6cc927, 0x198bb3b4), WTCP(0x7d60dced, 0x19c5f85a), WTCP(0x7d54c67c, 0x1a008077), WTCP(0x7d488574, 0x1a3b4bcb), - WTCP(0x7d3c1979, 0x1a765a17), WTCP(0x7d2f822d, 0x1ab1ab18), WTCP(0x7d22bf32, 0x1aed3e8d), WTCP(0x7d15d02b, 0x1b291432), - WTCP(0x7d08b4ba, 0x1b652bc1), WTCP(0x7cfb6c82, 0x1ba184f5), WTCP(0x7cedf725, 0x1bde1f86), WTCP(0x7ce05445, 0x1c1afb2c), - WTCP(0x7cd28386, 0x1c58179c), WTCP(0x7cc48489, 0x1c95748d), WTCP(0x7cb656f3, 0x1cd311b1), WTCP(0x7ca7fa65, 0x1d10eebd), - WTCP(0x7c996e83, 0x1d4f0b60), WTCP(0x7c8ab2f0, 0x1d8d674c), WTCP(0x7c7bc74f, 0x1dcc0230), WTCP(0x7c6cab44, 0x1e0adbbb), - WTCP(0x7c5d5e71, 0x1e49f398), WTCP(0x7c4de07c, 0x1e894973), WTCP(0x7c3e3108, 0x1ec8dcf8), WTCP(0x7c2e4fb9, 0x1f08add0), - WTCP(0x7c1e3c34, 0x1f48bba3), WTCP(0x7c0df61d, 0x1f890618), WTCP(0x7bfd7d18, 0x1fc98cd6), WTCP(0x7becd0cc, 0x200a4f80), - WTCP(0x7bdbf0dd, 0x204b4dbc), WTCP(0x7bcadcf1, 0x208c872c), WTCP(0x7bb994ae, 0x20cdfb71), WTCP(0x7ba817b9, 0x210faa2c), - WTCP(0x7b9665bb, 0x215192fc), WTCP(0x7b847e58, 0x2193b57f), WTCP(0x7b726139, 0x21d61153), WTCP(0x7b600e05, 0x2218a614), - WTCP(0x7b4d8463, 0x225b735d), WTCP(0x7b3ac3fc, 0x229e78c7), WTCP(0x7b27cc79, 0x22e1b5eb), WTCP(0x7b149d82, 0x23252a62), - WTCP(0x7b0136c1, 0x2368d5c2), WTCP(0x7aed97df, 0x23acb7a0), WTCP(0x7ad9c087, 0x23f0cf92), WTCP(0x7ac5b063, 0x24351d2a), - WTCP(0x7ab1671e, 0x24799ffc), WTCP(0x7a9ce464, 0x24be5799), WTCP(0x7a8827e1, 0x25034391), WTCP(0x7a733142, 0x25486375), - WTCP(0x7a5e0033, 0x258db6d2), WTCP(0x7a489461, 0x25d33d35), WTCP(0x7a32ed7c, 0x2618f62c), WTCP(0x7a1d0b31, 0x265ee143), - WTCP(0x7a06ed2f, 0x26a4fe02), WTCP(0x79f09327, 0x26eb4bf5), WTCP(0x79d9fcc8, 0x2731caa3), WTCP(0x79c329c2, 0x27787995), - WTCP(0x79ac19c9, 0x27bf5850), WTCP(0x7994cc8d, 0x2806665c), WTCP(0x797d41c1, 0x284da33c), WTCP(0x79657918, 0x28950e74), - WTCP(0x794d7247, 0x28dca788), WTCP(0x79352d01, 0x29246dfa), WTCP(0x791ca8fc, 0x296c614a), WTCP(0x7903e5ee, 0x29b480f9), - WTCP(0x78eae38d, 0x29fccc87), WTCP(0x78d1a191, 0x2a454372), WTCP(0x78b81fb1, 0x2a8de537), WTCP(0x789e5da6, 0x2ad6b155), - WTCP(0x78845b29, 0x2b1fa745), WTCP(0x786a17f5, 0x2b68c684), WTCP(0x784f93c4, 0x2bb20e8c), WTCP(0x7834ce53, 0x2bfb7ed7), - WTCP(0x7819c75c, 0x2c4516dc), WTCP(0x77fe7e9e, 0x2c8ed615), WTCP(0x77e2f3d7, 0x2cd8bbf7), WTCP(0x77c726c5, 0x2d22c7fa), - WTCP(0x77ab1728, 0x2d6cf993), WTCP(0x778ec4c0, 0x2db75037), WTCP(0x77722f4e, 0x2e01cb59), WTCP(0x77555695, 0x2e4c6a6d), - WTCP(0x77383a58, 0x2e972ce6), WTCP(0x771ada5a, 0x2ee21235), WTCP(0x76fd3660, 0x2f2d19cc), WTCP(0x76df4e30, 0x2f78431a), - WTCP(0x76c12190, 0x2fc38d91), WTCP(0x76a2b047, 0x300ef89d), WTCP(0x7683fa1e, 0x305a83af), WTCP(0x7664fede, 0x30a62e34), - WTCP(0x7645be51, 0x30f1f798), WTCP(0x76263842, 0x313ddf49), WTCP(0x76066c7e, 0x3189e4b1), WTCP(0x75e65ad1, 0x31d6073d), - WTCP(0x75c60309, 0x32224657), WTCP(0x75a564f6, 0x326ea168), WTCP(0x75848067, 0x32bb17da), WTCP(0x7563552d, 0x3307a917), - WTCP(0x7541e31a, 0x33545486), WTCP(0x75202a02, 0x33a1198e), WTCP(0x74fe29b8, 0x33edf798), WTCP(0x74dbe211, 0x343aee09), - WTCP(0x74b952e3, 0x3487fc48), WTCP(0x74967c06, 0x34d521bb), WTCP(0x74735d51, 0x35225dc7), WTCP(0x744ff69f, 0x356fafcf), - WTCP(0x742c47c9, 0x35bd173a), WTCP(0x740850ab, 0x360a9369), WTCP(0x73e41121, 0x365823c1), WTCP(0x73bf8909, 0x36a5c7a4), - WTCP(0x739ab842, 0x36f37e75), WTCP(0x73759eab, 0x37414796), WTCP(0x73503c26, 0x378f2268), WTCP(0x732a9095, 0x37dd0e4c), - WTCP(0x73049bda, 0x382b0aa4), WTCP(0x72de5ddb, 0x387916d0), WTCP(0x72b7d67d, 0x38c73230), WTCP(0x729105a6, 0x39155c24), - WTCP(0x7269eb3f, 0x3963940c), WTCP(0x72428730, 0x39b1d946), WTCP(0x721ad964, 0x3a002b31), WTCP(0x71f2e1c5, 0x3a4e892c), - WTCP(0x71caa042, 0x3a9cf296), WTCP(0x71a214c7, 0x3aeb66cc), WTCP(0x71793f43, 0x3b39e52c), WTCP(0x71501fa6, 0x3b886d14), - WTCP(0x7126b5e3, 0x3bd6fde1), WTCP(0x70fd01eb, 0x3c2596f1), WTCP(0x70d303b2, 0x3c74379f), WTCP(0x70a8bb2e, 0x3cc2df49), - WTCP(0x707e2855, 0x3d118d4c), WTCP(0x70534b1e, 0x3d604103), WTCP(0x70282381, 0x3daef9cc), WTCP(0x6ffcb17a, 0x3dfdb702), - WTCP(0x6fd0f504, 0x3e4c7800), WTCP(0x6fa4ee1a, 0x3e9b3c25), WTCP(0x6f789cbb, 0x3eea02ca), WTCP(0x6f4c00e5, 0x3f38cb4b), - WTCP(0x6f1f1a9a, 0x3f879505), WTCP(0x6ef1e9da, 0x3fd65f53), WTCP(0x6ec46ea9, 0x40252990), WTCP(0x6e96a90b, 0x4073f318), - WTCP(0x6e689905, 0x40c2bb46), WTCP(0x6e3a3e9d, 0x41118176), WTCP(0x6e0b99dd, 0x41604504), WTCP(0x6ddcaacc, 0x41af054a), - WTCP(0x6dad7177, 0x41fdc1a5), WTCP(0x6d7dede8, 0x424c7970), WTCP(0x6d4e202e, 0x429b2c06), WTCP(0x6d1e0855, 0x42e9d8c4), - WTCP(0x6ceda66f, 0x43387f05), WTCP(0x6cbcfa8d, 0x43871e26), WTCP(0x6c8c04c0, 0x43d5b581), WTCP(0x6c5ac51d, 0x44244474), - WTCP(0x6c293bb8, 0x4472ca5a), WTCP(0x6bf768a8, 0x44c14690), WTCP(0x6bc54c06, 0x450fb873), WTCP(0x6b92e5e9, 0x455e1f5f), - WTCP(0x6b60366c, 0x45ac7ab2), WTCP(0x6b2d3dab, 0x45fac9c8), WTCP(0x6af9fbc2, 0x46490bff), WTCP(0x6ac670d1, 0x469740b5), - WTCP(0x6a929cf6, 0x46e56747), WTCP(0x6a5e8053, 0x47337f13), WTCP(0x6a2a1b0a, 0x47818779), WTCP(0x69f56d3e, 0x47cf7fd6), - WTCP(0x69c07715, 0x481d678a), WTCP(0x698b38b4, 0x486b3df3), WTCP(0x6955b243, 0x48b90272), WTCP(0x691fe3ec, 0x4906b466), - WTCP(0x68e9cdd8, 0x49545330), WTCP(0x68b37033, 0x49a1de30), WTCP(0x687ccb29, 0x49ef54c8), WTCP(0x6845dee9, 0x4a3cb657), - WTCP(0x680eaba3, 0x4a8a0242), WTCP(0x67d73187, 0x4ad737e9), WTCP(0x679f70c7, 0x4b2456af), WTCP(0x67676997, 0x4b715df7), - WTCP(0x672f1c2b, 0x4bbe4d25), WTCP(0x66f688ba, 0x4c0b239c), WTCP(0x66bdaf7b, 0x4c57e0c2), WTCP(0x668490a6, 0x4ca483fa), - WTCP(0x664b2c76, 0x4cf10cac), WTCP(0x66118326, 0x4d3d7a3b), WTCP(0x65d794f3, 0x4d89cc0f), WTCP(0x659d621a, 0x4dd6018f), - WTCP(0x6562eada, 0x4e221a22), WTCP(0x65282f74, 0x4e6e1530), WTCP(0x64ed302b, 0x4eb9f222), WTCP(0x64b1ed40, 0x4f05b061), - WTCP(0x647666f8, 0x4f514f57), WTCP(0x643a9d99, 0x4f9cce6f), WTCP(0x63fe916a, 0x4fe82d13), WTCP(0x63c242b2, 0x50336aaf), - WTCP(0x6385b1bc, 0x507e86b0), WTCP(0x6348ded1, 0x50c98082), WTCP(0x630bca3f, 0x51145793), WTCP(0x62ce7451, 0x515f0b51), - WTCP(0x6290dd57, 0x51a99b2b), WTCP(0x625305a0, 0x51f40692), WTCP(0x6214ed7d, 0x523e4cf5), WTCP(0x61d69541, 0x52886dc5), - WTCP(0x6197fd3e, 0x52d26875), WTCP(0x615925c9, 0x531c3c77), WTCP(0x611a0f39, 0x5365e93e), WTCP(0x60dab9e3, 0x53af6e3e), - WTCP(0x609b2621, 0x53f8caed), WTCP(0x605b544c, 0x5441fec0), WTCP(0x601b44bf, 0x548b092e), WTCP(0x5fdaf7d5, 0x54d3e9ae), - WTCP(0x5f9a6deb, 0x551c9fb7), WTCP(0x5f59a761, 0x55652ac3), WTCP(0x5f18a494, 0x55ad8a4d), WTCP(0x5ed765e6, 0x55f5bdcd), - WTCP(0x5e95ebb8, 0x563dc4c1), WTCP(0x5e54366d, 0x56859ea3), WTCP(0x5e12466a, 0x56cd4af3), WTCP(0x5dd01c13, 0x5714c92d), - WTCP(0x5d8db7cf, 0x575c18d0), WTCP(0x5d4b1a05, 0x57a3395e), WTCP(0x5d08431e, 0x57ea2a56), WTCP(0x5cc53384, 0x5830eb3a), - WTCP(0x5c81eba0, 0x58777b8e), WTCP(0x5c3e6bdf, 0x58bddad5), WTCP(0x5bfab4af, 0x59040893), WTCP(0x5bb6c67c, 0x594a044f), - WTCP(0x5b72a1b6, 0x598fcd8e), WTCP(0x5b2e46ce, 0x59d563d9), WTCP(0x5ae9b634, 0x5a1ac6b8), WTCP(0x5aa4f05a, 0x5a5ff5b5), -}; - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_WTP SineWindow120[] = -{ - WTCP(0x7fff4c54, 0x00d676eb), WTCP(0x7ff9af04, 0x02835b5a), WTCP(0x7fee74a2, 0x0430238f), WTCP(0x7fdd9dad, 0x05dcbcbe), - WTCP(0x7fc72ae2, 0x07891418), WTCP(0x7fab1d3d, 0x093516d4), WTCP(0x7f8975f9, 0x0ae0b22c), WTCP(0x7f62368f, 0x0c8bd35e), - WTCP(0x7f3560b9, 0x0e3667ad), WTCP(0x7f02f66f, 0x0fe05c64), WTCP(0x7ecaf9e5, 0x11899ed3), WTCP(0x7e8d6d91, 0x13321c53), - WTCP(0x7e4a5426, 0x14d9c245), WTCP(0x7e01b096, 0x16807e15), WTCP(0x7db3860f, 0x18263d36), WTCP(0x7d5fd801, 0x19caed29), - WTCP(0x7d06aa16, 0x1b6e7b7a), WTCP(0x7ca80038, 0x1d10d5c2), WTCP(0x7c43de8e, 0x1eb1e9a7), WTCP(0x7bda497d, 0x2051a4dd), - WTCP(0x7b6b45a5, 0x21eff528), WTCP(0x7af6d7e6, 0x238cc85d), WTCP(0x7a7d055b, 0x25280c5e), WTCP(0x79fdd35c, 0x26c1af22), - WTCP(0x7979477d, 0x28599eb0), WTCP(0x78ef678f, 0x29efc925), WTCP(0x7860399e, 0x2b841caf), WTCP(0x77cbc3f2, 0x2d168792), - WTCP(0x77320d0d, 0x2ea6f827), WTCP(0x76931bae, 0x30355cdd), WTCP(0x75eef6ce, 0x31c1a43b), WTCP(0x7545a5a0, 0x334bbcde), - WTCP(0x74972f92, 0x34d3957e), WTCP(0x73e39c49, 0x36591cea), WTCP(0x732af3a7, 0x37dc420c), WTCP(0x726d3dc6, 0x395cf3e9), - WTCP(0x71aa82f7, 0x3adb21a1), WTCP(0x70e2cbc6, 0x3c56ba70), WTCP(0x701620f5, 0x3dcfadb0), WTCP(0x6f448b7e, 0x3f45ead8), - WTCP(0x6e6e1492, 0x40b9617d), WTCP(0x6d92c59b, 0x422a0154), WTCP(0x6cb2a837, 0x4397ba32), WTCP(0x6bcdc639, 0x45027c0c), - WTCP(0x6ae429ae, 0x466a36f9), WTCP(0x69f5dcd3, 0x47cedb31), WTCP(0x6902ea1d, 0x4930590f), WTCP(0x680b5c33, 0x4a8ea111), - WTCP(0x670f3df3, 0x4be9a3db), WTCP(0x660e9a6a, 0x4d415234), WTCP(0x65097cdb, 0x4e959d08), WTCP(0x63fff0ba, 0x4fe6756a), - WTCP(0x62f201ac, 0x5133cc94), WTCP(0x61dfbb8a, 0x527d93e6), WTCP(0x60c92a5a, 0x53c3bcea), WTCP(0x5fae5a55, 0x55063951), - WTCP(0x5e8f57e2, 0x5644faf4), WTCP(0x5d6c2f99, 0x577ff3da), WTCP(0x5c44ee40, 0x58b71632), WTCP(0x5b19a0c8, 0x59ea5454), -}; - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_WTP KBDWindow120[] = -{ - WTCP(0x7ffffffe, 0x00017b6f), WTCP(0x7fffffef, 0x00042d2f), WTCP(0x7fffffbb, 0x000849d0), WTCP(0x7fffff36, 0x000e3494), - WTCP(0x7ffffe0c, 0x00165efd), WTCP(0x7ffffbac, 0x002149be), WTCP(0x7ffff72e, 0x002f854c), WTCP(0x7fffef24, 0x0041b235), - WTCP(0x7fffe167, 0x0058814f), WTCP(0x7fffcacd, 0x0074b3af), WTCP(0x7fffa6d0, 0x00971a67), WTCP(0x7fff6f1e, 0x00c0960e), - WTCP(0x7fff1b12, 0x00f21602), WTCP(0x7ffe9f0b, 0x012c9775), WTCP(0x7ffdebb2, 0x01712428), WTCP(0x7ffced1b, 0x01c0d0f7), - WTCP(0x7ffb89c2, 0x021cbc12), WTCP(0x7ff9a17c, 0x02860b05), WTCP(0x7ff70c39, 0x02fde875), WTCP(0x7ff398bc, 0x038581b3), - WTCP(0x7fef0b3b, 0x041e040c), WTCP(0x7fe91bf3, 0x04c899f4), WTCP(0x7fe175ba, 0x05866803), WTCP(0x7fd7b493, 0x065889d5), - WTCP(0x7fcb6459, 0x07400ed4), WTCP(0x7fbbff82, 0x083df6e9), WTCP(0x7fa8ee09, 0x09532f37), WTCP(0x7f91849a, 0x0a808ed1), - WTCP(0x7f7503f2, 0x0bc6d381), WTCP(0x7f52989a, 0x0d269eb0), WTCP(0x7f295af4, 0x0ea07270), WTCP(0x7ef84fb6, 0x1034aeb6), - WTCP(0x7ebe68c5, 0x11e38ed2), WTCP(0x7e7a8686, 0x13ad2733), WTCP(0x7e2b79a3, 0x1591636d), WTCP(0x7dd0053c, 0x179004a7), - WTCP(0x7d66e18b, 0x19a8a05f), WTCP(0x7ceebef0, 0x1bda9fa2), WTCP(0x7c664953, 0x1e253ea1), WTCP(0x7bcc2be8, 0x20878cce), - WTCP(0x7b1f1526, 0x23006d5d), WTCP(0x7a5dbb01, 0x258e9848), WTCP(0x7986df3e, 0x28309bc6), WTCP(0x789953e0, 0x2ae4de3e), - WTCP(0x7793ff88, 0x2da9a0a8), WTCP(0x7675e1cc, 0x307d0163), WTCP(0x753e1763, 0x335cff72), WTCP(0x73ebde10, 0x36477e1f), - WTCP(0x727e984e, 0x393a48f1), WTCP(0x70f5d09b, 0x3c3317f9), WTCP(0x6f513c60, 0x3f2f945c), WTCP(0x6d90be61, 0x422d5d18), - WTCP(0x6bb468b1, 0x452a0bf3), WTCP(0x69bc7e1e, 0x48233a81), WTCP(0x67a97317, 0x4b16873e), WTCP(0x657bedfa, 0x4e019a9d), - WTCP(0x6334c6d2, 0x50e22c0b), WTCP(0x60d50689, 0x53b606cb), WTCP(0x5e5de588, 0x567b0ea7), WTCP(0x5bd0c9c6, 0x592f4460), -}; - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_WTP SineWindow512[] = -{ - WTCP(0x7ffff621, 0x003243f5), WTCP(0x7fffa72c, 0x0096cbc1), WTCP(0x7fff0943, 0x00fb5330), WTCP(0x7ffe1c65, 0x015fda03), - WTCP(0x7ffce093, 0x01c45ffe), WTCP(0x7ffb55ce, 0x0228e4e2), WTCP(0x7ff97c18, 0x028d6870), WTCP(0x7ff75370, 0x02f1ea6c), - WTCP(0x7ff4dbd9, 0x03566a96), WTCP(0x7ff21553, 0x03bae8b2), WTCP(0x7feeffe1, 0x041f6480), WTCP(0x7feb9b85, 0x0483ddc3), - WTCP(0x7fe7e841, 0x04e8543e), WTCP(0x7fe3e616, 0x054cc7b1), WTCP(0x7fdf9508, 0x05b137df), WTCP(0x7fdaf519, 0x0615a48b), - WTCP(0x7fd6064c, 0x067a0d76), WTCP(0x7fd0c8a3, 0x06de7262), WTCP(0x7fcb3c23, 0x0742d311), WTCP(0x7fc560cf, 0x07a72f45), - WTCP(0x7fbf36aa, 0x080b86c2), WTCP(0x7fb8bdb8, 0x086fd947), WTCP(0x7fb1f5fc, 0x08d42699), WTCP(0x7faadf7c, 0x09386e78), - WTCP(0x7fa37a3c, 0x099cb0a7), WTCP(0x7f9bc640, 0x0a00ece8), WTCP(0x7f93c38c, 0x0a6522fe), WTCP(0x7f8b7227, 0x0ac952aa), - WTCP(0x7f82d214, 0x0b2d7baf), WTCP(0x7f79e35a, 0x0b919dcf), WTCP(0x7f70a5fe, 0x0bf5b8cb), WTCP(0x7f671a05, 0x0c59cc68), - WTCP(0x7f5d3f75, 0x0cbdd865), WTCP(0x7f531655, 0x0d21dc87), WTCP(0x7f489eaa, 0x0d85d88f), WTCP(0x7f3dd87c, 0x0de9cc40), - WTCP(0x7f32c3d1, 0x0e4db75b), WTCP(0x7f2760af, 0x0eb199a4), WTCP(0x7f1baf1e, 0x0f1572dc), WTCP(0x7f0faf25, 0x0f7942c7), - WTCP(0x7f0360cb, 0x0fdd0926), WTCP(0x7ef6c418, 0x1040c5bb), WTCP(0x7ee9d914, 0x10a4784b), WTCP(0x7edc9fc6, 0x11082096), - WTCP(0x7ecf1837, 0x116bbe60), WTCP(0x7ec14270, 0x11cf516a), WTCP(0x7eb31e78, 0x1232d979), WTCP(0x7ea4ac58, 0x1296564d), - WTCP(0x7e95ec1a, 0x12f9c7aa), WTCP(0x7e86ddc6, 0x135d2d53), WTCP(0x7e778166, 0x13c0870a), WTCP(0x7e67d703, 0x1423d492), - WTCP(0x7e57dea7, 0x148715ae), WTCP(0x7e47985b, 0x14ea4a1f), WTCP(0x7e37042a, 0x154d71aa), WTCP(0x7e26221f, 0x15b08c12), - WTCP(0x7e14f242, 0x16139918), WTCP(0x7e0374a0, 0x1676987f), WTCP(0x7df1a942, 0x16d98a0c), WTCP(0x7ddf9034, 0x173c6d80), - WTCP(0x7dcd2981, 0x179f429f), WTCP(0x7dba7534, 0x1802092c), WTCP(0x7da77359, 0x1864c0ea), WTCP(0x7d9423fc, 0x18c7699b), - WTCP(0x7d808728, 0x192a0304), WTCP(0x7d6c9ce9, 0x198c8ce7), WTCP(0x7d58654d, 0x19ef0707), WTCP(0x7d43e05e, 0x1a517128), - WTCP(0x7d2f0e2b, 0x1ab3cb0d), WTCP(0x7d19eebf, 0x1b161479), WTCP(0x7d048228, 0x1b784d30), WTCP(0x7ceec873, 0x1bda74f6), - WTCP(0x7cd8c1ae, 0x1c3c8b8c), WTCP(0x7cc26de5, 0x1c9e90b8), WTCP(0x7cabcd28, 0x1d00843d), WTCP(0x7c94df83, 0x1d6265dd), - WTCP(0x7c7da505, 0x1dc4355e), WTCP(0x7c661dbc, 0x1e25f282), WTCP(0x7c4e49b7, 0x1e879d0d), WTCP(0x7c362904, 0x1ee934c3), - WTCP(0x7c1dbbb3, 0x1f4ab968), WTCP(0x7c0501d2, 0x1fac2abf), WTCP(0x7bebfb70, 0x200d888d), WTCP(0x7bd2a89e, 0x206ed295), - WTCP(0x7bb9096b, 0x20d0089c), WTCP(0x7b9f1de6, 0x21312a65), WTCP(0x7b84e61f, 0x219237b5), WTCP(0x7b6a6227, 0x21f3304f), - WTCP(0x7b4f920e, 0x225413f8), WTCP(0x7b3475e5, 0x22b4e274), WTCP(0x7b190dbc, 0x23159b88), WTCP(0x7afd59a4, 0x23763ef7), - WTCP(0x7ae159ae, 0x23d6cc87), WTCP(0x7ac50dec, 0x243743fa), WTCP(0x7aa8766f, 0x2497a517), WTCP(0x7a8b9348, 0x24f7efa2), - WTCP(0x7a6e648a, 0x2558235f), WTCP(0x7a50ea47, 0x25b84012), WTCP(0x7a332490, 0x26184581), WTCP(0x7a151378, 0x26783370), - WTCP(0x79f6b711, 0x26d809a5), WTCP(0x79d80f6f, 0x2737c7e3), WTCP(0x79b91ca4, 0x27976df1), WTCP(0x7999dec4, 0x27f6fb92), - WTCP(0x797a55e0, 0x2856708d), WTCP(0x795a820e, 0x28b5cca5), WTCP(0x793a6361, 0x29150fa1), WTCP(0x7919f9ec, 0x29743946), - WTCP(0x78f945c3, 0x29d34958), WTCP(0x78d846fb, 0x2a323f9e), WTCP(0x78b6fda8, 0x2a911bdc), WTCP(0x789569df, 0x2aefddd8), - WTCP(0x78738bb3, 0x2b4e8558), WTCP(0x7851633b, 0x2bad1221), WTCP(0x782ef08b, 0x2c0b83fa), WTCP(0x780c33b8, 0x2c69daa6), - WTCP(0x77e92cd9, 0x2cc815ee), WTCP(0x77c5dc01, 0x2d263596), WTCP(0x77a24148, 0x2d843964), WTCP(0x777e5cc3, 0x2de2211e), - WTCP(0x775a2e89, 0x2e3fec8b), WTCP(0x7735b6af, 0x2e9d9b70), WTCP(0x7710f54c, 0x2efb2d95), WTCP(0x76ebea77, 0x2f58a2be), - WTCP(0x76c69647, 0x2fb5fab2), WTCP(0x76a0f8d2, 0x30133539), WTCP(0x767b1231, 0x30705217), WTCP(0x7654e279, 0x30cd5115), - WTCP(0x762e69c4, 0x312a31f8), WTCP(0x7607a828, 0x3186f487), WTCP(0x75e09dbd, 0x31e39889), WTCP(0x75b94a9c, 0x32401dc6), - WTCP(0x7591aedd, 0x329c8402), WTCP(0x7569ca99, 0x32f8cb07), WTCP(0x75419de7, 0x3354f29b), WTCP(0x751928e0, 0x33b0fa84), - WTCP(0x74f06b9e, 0x340ce28b), WTCP(0x74c7663a, 0x3468aa76), WTCP(0x749e18cd, 0x34c4520d), WTCP(0x74748371, 0x351fd918), - WTCP(0x744aa63f, 0x357b3f5d), WTCP(0x74208150, 0x35d684a6), WTCP(0x73f614c0, 0x3631a8b8), WTCP(0x73cb60a8, 0x368cab5c), - WTCP(0x73a06522, 0x36e78c5b), WTCP(0x73752249, 0x37424b7b), WTCP(0x73499838, 0x379ce885), WTCP(0x731dc70a, 0x37f76341), - WTCP(0x72f1aed9, 0x3851bb77), WTCP(0x72c54fc1, 0x38abf0ef), WTCP(0x7298a9dd, 0x39060373), WTCP(0x726bbd48, 0x395ff2c9), - WTCP(0x723e8a20, 0x39b9bebc), WTCP(0x7211107e, 0x3a136712), WTCP(0x71e35080, 0x3a6ceb96), WTCP(0x71b54a41, 0x3ac64c0f), - WTCP(0x7186fdde, 0x3b1f8848), WTCP(0x71586b74, 0x3b78a007), WTCP(0x7129931f, 0x3bd19318), WTCP(0x70fa74fc, 0x3c2a6142), - WTCP(0x70cb1128, 0x3c830a50), WTCP(0x709b67c0, 0x3cdb8e09), WTCP(0x706b78e3, 0x3d33ec39), WTCP(0x703b44ad, 0x3d8c24a8), - WTCP(0x700acb3c, 0x3de4371f), WTCP(0x6fda0cae, 0x3e3c2369), WTCP(0x6fa90921, 0x3e93e950), WTCP(0x6f77c0b3, 0x3eeb889c), - WTCP(0x6f463383, 0x3f430119), WTCP(0x6f1461b0, 0x3f9a5290), WTCP(0x6ee24b57, 0x3ff17cca), WTCP(0x6eaff099, 0x40487f94), - WTCP(0x6e7d5193, 0x409f5ab6), WTCP(0x6e4a6e66, 0x40f60dfb), WTCP(0x6e174730, 0x414c992f), WTCP(0x6de3dc11, 0x41a2fc1a), - WTCP(0x6db02d29, 0x41f93689), WTCP(0x6d7c3a98, 0x424f4845), WTCP(0x6d48047e, 0x42a5311b), WTCP(0x6d138afb, 0x42faf0d4), - WTCP(0x6cdece2f, 0x4350873c), WTCP(0x6ca9ce3b, 0x43a5f41e), WTCP(0x6c748b3f, 0x43fb3746), WTCP(0x6c3f055d, 0x4450507e), - WTCP(0x6c093cb6, 0x44a53f93), WTCP(0x6bd3316a, 0x44fa0450), WTCP(0x6b9ce39b, 0x454e9e80), WTCP(0x6b66536b, 0x45a30df0), - WTCP(0x6b2f80fb, 0x45f7526b), WTCP(0x6af86c6c, 0x464b6bbe), WTCP(0x6ac115e2, 0x469f59b4), WTCP(0x6a897d7d, 0x46f31c1a), - WTCP(0x6a51a361, 0x4746b2bc), WTCP(0x6a1987b0, 0x479a1d67), WTCP(0x69e12a8c, 0x47ed5be6), WTCP(0x69a88c19, 0x48406e08), - WTCP(0x696fac78, 0x48935397), WTCP(0x69368bce, 0x48e60c62), WTCP(0x68fd2a3d, 0x49389836), WTCP(0x68c387e9, 0x498af6df), - WTCP(0x6889a4f6, 0x49dd282a), WTCP(0x684f8186, 0x4a2f2be6), WTCP(0x68151dbe, 0x4a8101de), WTCP(0x67da79c3, 0x4ad2a9e2), - WTCP(0x679f95b7, 0x4b2423be), WTCP(0x676471c0, 0x4b756f40), WTCP(0x67290e02, 0x4bc68c36), WTCP(0x66ed6aa1, 0x4c177a6e), - WTCP(0x66b187c3, 0x4c6839b7), WTCP(0x6675658c, 0x4cb8c9dd), WTCP(0x66390422, 0x4d092ab0), WTCP(0x65fc63a9, 0x4d595bfe), - WTCP(0x65bf8447, 0x4da95d96), WTCP(0x65826622, 0x4df92f46), WTCP(0x6545095f, 0x4e48d0dd), WTCP(0x65076e25, 0x4e984229), - WTCP(0x64c99498, 0x4ee782fb), WTCP(0x648b7ce0, 0x4f369320), WTCP(0x644d2722, 0x4f857269), WTCP(0x640e9386, 0x4fd420a4), - WTCP(0x63cfc231, 0x50229da1), WTCP(0x6390b34a, 0x5070e92f), WTCP(0x635166f9, 0x50bf031f), WTCP(0x6311dd64, 0x510ceb40), - WTCP(0x62d216b3, 0x515aa162), WTCP(0x6292130c, 0x51a82555), WTCP(0x6251d298, 0x51f576ea), WTCP(0x6211557e, 0x524295f0), - WTCP(0x61d09be5, 0x528f8238), WTCP(0x618fa5f7, 0x52dc3b92), WTCP(0x614e73da, 0x5328c1d0), WTCP(0x610d05b7, 0x537514c2), - WTCP(0x60cb5bb7, 0x53c13439), WTCP(0x60897601, 0x540d2005), WTCP(0x604754bf, 0x5458d7f9), WTCP(0x6004f819, 0x54a45be6), - WTCP(0x5fc26038, 0x54efab9c), WTCP(0x5f7f8d46, 0x553ac6ee), WTCP(0x5f3c7f6b, 0x5585adad), WTCP(0x5ef936d1, 0x55d05faa), - WTCP(0x5eb5b3a2, 0x561adcb9), WTCP(0x5e71f606, 0x566524aa), WTCP(0x5e2dfe29, 0x56af3750), WTCP(0x5de9cc33, 0x56f9147e), - WTCP(0x5da5604f, 0x5742bc06), WTCP(0x5d60baa7, 0x578c2dba), WTCP(0x5d1bdb65, 0x57d5696d), WTCP(0x5cd6c2b5, 0x581e6ef1), - WTCP(0x5c9170bf, 0x58673e1b), WTCP(0x5c4be5b0, 0x58afd6bd), WTCP(0x5c0621b2, 0x58f838a9), WTCP(0x5bc024f0, 0x594063b5), - WTCP(0x5b79ef96, 0x598857b2), WTCP(0x5b3381ce, 0x59d01475), WTCP(0x5aecdbc5, 0x5a1799d1), WTCP(0x5aa5fda5, 0x5a5ee79a), -}; - -/* The window coefficients are calculated according to the formula: - * N=FRAME_LEN_LONG_LD480 - * win[n]=sin(pi*(n+0.5)/(2*N)) for n=0,..,N-1 */ -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_WTP SineWindow480[480] = -{ - WTCP(0x7ffff4c5, 0x00359dd2), WTCP(0x7fff9aef, 0x00a0d951), WTCP(0x7ffee744, 0x010c1460), WTCP(0x7ffdd9c4, 0x01774eb2), - WTCP(0x7ffc726f, 0x01e287fc), WTCP(0x7ffab147, 0x024dbff4), WTCP(0x7ff8964d, 0x02b8f64e), WTCP(0x7ff62182, 0x03242abf), - WTCP(0x7ff352e8, 0x038f5cfb), WTCP(0x7ff02a82, 0x03fa8cb8), WTCP(0x7feca851, 0x0465b9aa), WTCP(0x7fe8cc57, 0x04d0e386), - WTCP(0x7fe49698, 0x053c0a01), WTCP(0x7fe00716, 0x05a72ccf), WTCP(0x7fdb1dd5, 0x06124ba5), WTCP(0x7fd5dad8, 0x067d6639), - WTCP(0x7fd03e23, 0x06e87c3f), WTCP(0x7fca47b9, 0x07538d6b), WTCP(0x7fc3f7a0, 0x07be9973), WTCP(0x7fbd4dda, 0x0829a00c), - WTCP(0x7fb64a6e, 0x0894a0ea), WTCP(0x7faeed5f, 0x08ff9bc2), WTCP(0x7fa736b4, 0x096a9049), WTCP(0x7f9f2671, 0x09d57e35), - WTCP(0x7f96bc9c, 0x0a40653a), WTCP(0x7f8df93c, 0x0aab450d), WTCP(0x7f84dc55, 0x0b161d63), WTCP(0x7f7b65ef, 0x0b80edf1), - WTCP(0x7f719611, 0x0bebb66c), WTCP(0x7f676cc0, 0x0c56768a), WTCP(0x7f5cea05, 0x0cc12dff), WTCP(0x7f520de6, 0x0d2bdc80), - WTCP(0x7f46d86c, 0x0d9681c2), WTCP(0x7f3b499d, 0x0e011d7c), WTCP(0x7f2f6183, 0x0e6baf61), WTCP(0x7f232026, 0x0ed63727), - WTCP(0x7f16858e, 0x0f40b483), WTCP(0x7f0991c4, 0x0fab272b), WTCP(0x7efc44d0, 0x10158ed4), WTCP(0x7eee9ebe, 0x107feb33), - WTCP(0x7ee09f95, 0x10ea3bfd), WTCP(0x7ed24761, 0x115480e9), WTCP(0x7ec3962a, 0x11beb9aa), WTCP(0x7eb48bfb, 0x1228e5f8), - WTCP(0x7ea528e0, 0x12930586), WTCP(0x7e956ce1, 0x12fd180b), WTCP(0x7e85580c, 0x13671d3d), WTCP(0x7e74ea6a, 0x13d114d0), - WTCP(0x7e642408, 0x143afe7b), WTCP(0x7e5304f2, 0x14a4d9f4), WTCP(0x7e418d32, 0x150ea6ef), WTCP(0x7e2fbcd6, 0x15786522), - WTCP(0x7e1d93ea, 0x15e21445), WTCP(0x7e0b127a, 0x164bb40b), WTCP(0x7df83895, 0x16b5442b), WTCP(0x7de50646, 0x171ec45c), - WTCP(0x7dd17b9c, 0x17883452), WTCP(0x7dbd98a4, 0x17f193c5), WTCP(0x7da95d6c, 0x185ae269), WTCP(0x7d94ca03, 0x18c41ff6), - WTCP(0x7d7fde76, 0x192d4c21), WTCP(0x7d6a9ad5, 0x199666a0), WTCP(0x7d54ff2e, 0x19ff6f2a), WTCP(0x7d3f0b90, 0x1a686575), - WTCP(0x7d28c00c, 0x1ad14938), WTCP(0x7d121cb0, 0x1b3a1a28), WTCP(0x7cfb218c, 0x1ba2d7fc), WTCP(0x7ce3ceb2, 0x1c0b826a), - WTCP(0x7ccc2430, 0x1c74192a), WTCP(0x7cb42217, 0x1cdc9bf2), WTCP(0x7c9bc87a, 0x1d450a78), WTCP(0x7c831767, 0x1dad6473), - WTCP(0x7c6a0ef2, 0x1e15a99a), WTCP(0x7c50af2b, 0x1e7dd9a4), WTCP(0x7c36f824, 0x1ee5f447), WTCP(0x7c1ce9ef, 0x1f4df93a), - WTCP(0x7c02849f, 0x1fb5e836), WTCP(0x7be7c847, 0x201dc0ef), WTCP(0x7bccb4f8, 0x2085831f), WTCP(0x7bb14ac5, 0x20ed2e7b), - WTCP(0x7b9589c3, 0x2154c2bb), WTCP(0x7b797205, 0x21bc3f97), WTCP(0x7b5d039e, 0x2223a4c5), WTCP(0x7b403ea2, 0x228af1fe), - WTCP(0x7b232325, 0x22f226f8), WTCP(0x7b05b13d, 0x2359436c), WTCP(0x7ae7e8fc, 0x23c04710), WTCP(0x7ac9ca7a, 0x2427319d), - WTCP(0x7aab55ca, 0x248e02cb), WTCP(0x7a8c8b01, 0x24f4ba50), WTCP(0x7a6d6a37, 0x255b57e6), WTCP(0x7a4df380, 0x25c1db44), - WTCP(0x7a2e26f2, 0x26284422), WTCP(0x7a0e04a4, 0x268e9238), WTCP(0x79ed8cad, 0x26f4c53e), WTCP(0x79ccbf22, 0x275adcee), - WTCP(0x79ab9c1c, 0x27c0d8fe), WTCP(0x798a23b1, 0x2826b928), WTCP(0x796855f9, 0x288c7d24), WTCP(0x7946330c, 0x28f224ab), - WTCP(0x7923bb01, 0x2957af74), WTCP(0x7900edf2, 0x29bd1d3a), WTCP(0x78ddcbf5, 0x2a226db5), WTCP(0x78ba5524, 0x2a87a09d), - WTCP(0x78968998, 0x2aecb5ac), WTCP(0x7872696a, 0x2b51ac9a), WTCP(0x784df4b3, 0x2bb68522), WTCP(0x78292b8d, 0x2c1b3efb), - WTCP(0x78040e12, 0x2c7fd9e0), WTCP(0x77de9c5b, 0x2ce45589), WTCP(0x77b8d683, 0x2d48b1b1), WTCP(0x7792bca5, 0x2dacee11), - WTCP(0x776c4edb, 0x2e110a62), WTCP(0x77458d40, 0x2e75065e), WTCP(0x771e77f0, 0x2ed8e1c0), WTCP(0x76f70f05, 0x2f3c9c40), - WTCP(0x76cf529c, 0x2fa03599), WTCP(0x76a742d1, 0x3003ad85), WTCP(0x767edfbe, 0x306703bf), WTCP(0x76562982, 0x30ca3800), - WTCP(0x762d2038, 0x312d4a03), WTCP(0x7603c3fd, 0x31903982), WTCP(0x75da14ef, 0x31f30638), WTCP(0x75b01329, 0x3255afe0), - WTCP(0x7585becb, 0x32b83634), WTCP(0x755b17f2, 0x331a98ef), WTCP(0x75301ebb, 0x337cd7cd), WTCP(0x7504d345, 0x33def287), - WTCP(0x74d935ae, 0x3440e8da), WTCP(0x74ad4615, 0x34a2ba81), WTCP(0x74810499, 0x35046736), WTCP(0x74547158, 0x3565eeb6), - WTCP(0x74278c72, 0x35c750bc), WTCP(0x73fa5607, 0x36288d03), WTCP(0x73ccce36, 0x3689a348), WTCP(0x739ef51f, 0x36ea9346), - WTCP(0x7370cae2, 0x374b5cb9), WTCP(0x73424fa0, 0x37abff5d), WTCP(0x73138379, 0x380c7aee), WTCP(0x72e4668f, 0x386ccf2a), - WTCP(0x72b4f902, 0x38ccfbcb), WTCP(0x72853af3, 0x392d008f), WTCP(0x72552c85, 0x398cdd32), WTCP(0x7224cdd8, 0x39ec9172), - WTCP(0x71f41f0f, 0x3a4c1d09), WTCP(0x71c3204c, 0x3aab7fb7), WTCP(0x7191d1b1, 0x3b0ab937), WTCP(0x71603361, 0x3b69c947), - WTCP(0x712e457f, 0x3bc8afa5), WTCP(0x70fc082d, 0x3c276c0d), WTCP(0x70c97b90, 0x3c85fe3d), WTCP(0x70969fca, 0x3ce465f3), - WTCP(0x706374ff, 0x3d42a2ec), WTCP(0x702ffb54, 0x3da0b4e7), WTCP(0x6ffc32eb, 0x3dfe9ba1), WTCP(0x6fc81bea, 0x3e5c56d8), - WTCP(0x6f93b676, 0x3eb9e64b), WTCP(0x6f5f02b2, 0x3f1749b8), WTCP(0x6f2a00c4, 0x3f7480dd), WTCP(0x6ef4b0d1, 0x3fd18b7a), - WTCP(0x6ebf12ff, 0x402e694c), WTCP(0x6e892772, 0x408b1a12), WTCP(0x6e52ee52, 0x40e79d8c), WTCP(0x6e1c67c4, 0x4143f379), - WTCP(0x6de593ee, 0x41a01b97), WTCP(0x6dae72f7, 0x41fc15a6), WTCP(0x6d770506, 0x4257e166), WTCP(0x6d3f4a40, 0x42b37e96), - WTCP(0x6d0742cf, 0x430eecf6), WTCP(0x6cceeed8, 0x436a2c45), WTCP(0x6c964e83, 0x43c53c44), WTCP(0x6c5d61f9, 0x44201cb2), - WTCP(0x6c242960, 0x447acd50), WTCP(0x6beaa4e2, 0x44d54ddf), WTCP(0x6bb0d4a7, 0x452f9e1e), WTCP(0x6b76b8d6, 0x4589bdcf), - WTCP(0x6b3c519a, 0x45e3acb1), WTCP(0x6b019f1a, 0x463d6a87), WTCP(0x6ac6a180, 0x4696f710), WTCP(0x6a8b58f6, 0x46f0520f), - WTCP(0x6a4fc5a6, 0x47497b44), WTCP(0x6a13e7b8, 0x47a27271), WTCP(0x69d7bf57, 0x47fb3757), WTCP(0x699b4cad, 0x4853c9b9), - WTCP(0x695e8fe5, 0x48ac2957), WTCP(0x69218929, 0x490455f4), WTCP(0x68e438a4, 0x495c4f52), WTCP(0x68a69e81, 0x49b41533), - WTCP(0x6868baec, 0x4a0ba75b), WTCP(0x682a8e0f, 0x4a63058a), WTCP(0x67ec1817, 0x4aba2f84), WTCP(0x67ad592f, 0x4b11250c), - WTCP(0x676e5183, 0x4b67e5e4), WTCP(0x672f013f, 0x4bbe71d1), WTCP(0x66ef6891, 0x4c14c894), WTCP(0x66af87a4, 0x4c6ae9f2), - WTCP(0x666f5ea6, 0x4cc0d5ae), WTCP(0x662eedc3, 0x4d168b8b), WTCP(0x65ee3529, 0x4d6c0b4e), WTCP(0x65ad3505, 0x4dc154bb), - WTCP(0x656bed84, 0x4e166795), WTCP(0x652a5ed6, 0x4e6b43a2), WTCP(0x64e88926, 0x4ebfe8a5), WTCP(0x64a66ca5, 0x4f145662), - WTCP(0x6464097f, 0x4f688ca0), WTCP(0x64215fe5, 0x4fbc8b22), WTCP(0x63de7003, 0x501051ae), WTCP(0x639b3a0b, 0x5063e008), - WTCP(0x6357be2a, 0x50b735f8), WTCP(0x6313fc90, 0x510a5340), WTCP(0x62cff56c, 0x515d37a9), WTCP(0x628ba8ef, 0x51afe2f6), - WTCP(0x62471749, 0x520254ef), WTCP(0x620240a8, 0x52548d59), WTCP(0x61bd253f, 0x52a68bfb), WTCP(0x6177c53c, 0x52f8509b), - WTCP(0x613220d2, 0x5349daff), WTCP(0x60ec3830, 0x539b2af0), WTCP(0x60a60b88, 0x53ec4032), WTCP(0x605f9b0b, 0x543d1a8e), - WTCP(0x6018e6eb, 0x548db9cb), WTCP(0x5fd1ef59, 0x54de1db1), WTCP(0x5f8ab487, 0x552e4605), WTCP(0x5f4336a7, 0x557e3292), - WTCP(0x5efb75ea, 0x55cde31e), WTCP(0x5eb37285, 0x561d5771), WTCP(0x5e6b2ca8, 0x566c8f55), WTCP(0x5e22a487, 0x56bb8a90), - WTCP(0x5dd9da55, 0x570a48ec), WTCP(0x5d90ce45, 0x5758ca31), WTCP(0x5d47808a, 0x57a70e29), WTCP(0x5cfdf157, 0x57f5149d), - WTCP(0x5cb420e0, 0x5842dd54), WTCP(0x5c6a0f59, 0x5890681a), WTCP(0x5c1fbcf6, 0x58ddb4b8), WTCP(0x5bd529eb, 0x592ac2f7), - WTCP(0x5b8a566c, 0x597792a1), WTCP(0x5b3f42ae, 0x59c42381), WTCP(0x5af3eee6, 0x5a107561), WTCP(0x5aa85b48, 0x5a5c880a), -}; - - - - - - -/** - * \brief Helper table containing the length, rasterand shape mapping to individual window slope tables. - * [0: sine ][0: radix2 raster ][ceil(log2(length)) length 4 .. 1024 ] - * [1: 10ms raster ][ceil(log2(length)) length 3.25 .. 960 ] - * [2: 3/4 of radix 2 raster][ceil(log2(length)) length 3 .. 768 ] - * [1: KBD ][0: radix2 raster ][ceil(log2(length)) length 128 .. 1024 ] - * [1: 10ms raster ][ceil(log2(length)) length 120 .. 960 ] - * [2: 3/4 of radix 2 raster][ceil(log2(length)) length 96 .. 768 ] - */ -const FIXP_WTP *const windowSlopes[2][3][9] = -{ - { /* Sine */ - { /* Radix 2 */ - NULL, - NULL, - NULL, - SineWindow32, - SineWindow64, - SineWindow128, - NULL, - SineWindow512, - SineWindow1024 - }, - { /* 10ms raster */ - NULL, /* 3.25 */ - NULL, /* 7.5 */ - NULL, - NULL, - NULL, - SineWindow120, - NULL, - SineWindow480, - SineWindow960 - }, - { /* 3/4 radix2 raster */ - NULL, /* 3 */ - NULL, /* 6 */ -#ifdef INCLUDE_SineWindow12 - SineWindow12, -#else - NULL, -#endif - NULL, - NULL, - NULL, - NULL, - NULL, - NULL - } - }, - { /* KBD */ - { /* Radix 2 */ - KBDWindow128, - NULL, - SineWindow512, - KBDWindow1024 - }, - { /* 10ms raster */ - KBDWindow120, - NULL, - SineWindow480, - KBDWindow960 - }, - { /* 3/4 radix2 raster */ - NULL, - NULL, - NULL, - NULL - } - } -}; - -const FIXP_WTP * FDKgetWindowSlope(int length, int shape) -{ - const FIXP_WTP * w = NULL; - int raster, ld2_length; - - /* Get ld2 of length - 2 + 1 - -2: because first table entry is window of size 4 - +1: because we already include +1 because of ceil(log2(length)) */ - ld2_length = DFRACT_BITS-1-fNormz((FIXP_DBL)length) - 1; - - /* Extract sort of "eigenvalue" (the 4 left most bits) of length. */ - switch ( (length) >> (ld2_length-2) ) { - case 0x8: /* radix 2 */ - raster = 0; - ld2_length--; /* revert + 1 because of ceil(log2(length)) from above. */ - break; - case 0xf: /* 10 ms */ - raster = 1; - break; - case 0xc: /* 3/4 of radix 2 */ - raster = 2; - break; - default: - raster = 0; - break; - } - - /* The table for sine windows (shape == 0) is 5 entries longer. */ - if (shape == 1) { - ld2_length-=5; - } - - /* Look up table */ - w = windowSlopes[shape&1][raster][ld2_length]; - - FDK_ASSERT(w != NULL); - - return w; -} - - -/* - * QMF filter and twiddle tables - */ - -#ifdef QMF_COEFF_16BIT -#define QFC(x) FX_DBL2FXCONST_SGL(x) -#define QTCFL(x) FL2FXCONST_SGL(x) -#define QTC(x) FX_DBL2FXCONST_SGL(x) -#else -#define QFC(x) (x) -#define QTCFL(x) FL2FXCONST_DBL(x) -#define QTC(x) (x) -#endif /* ARCH_PREFER_MULT_32x16 */ - -#ifndef LOW_POWER_SBR_ONLY -/*! - \name QMF-Twiddle - \brief QMF twiddle factors - - L=32, gain=2.0, angle = 0.75 -*/ - -const FIXP_QTW qmf_phaseshift_cos32[32] = -{ - QTCFL( 0.99932238458835f),QTCFL( 0.99390697000236f),QTCFL( 0.98310548743122f),QTCFL( 0.96697647104485f), - QTCFL( 0.94560732538052f),QTCFL( 0.91911385169006f),QTCFL( 0.88763962040285f),QTCFL( 0.85135519310527f), - QTCFL( 0.81045719825259f),QTCFL( 0.76516726562246f),QTCFL( 0.71573082528382f),QTCFL( 0.66241577759017f), - QTCFL( 0.60551104140433f),QTCFL( 0.54532498842205f),QTCFL( 0.48218377207912f),QTCFL( 0.41642956009764f), - QTCFL( 0.34841868024943f),QTCFL( 0.27851968938505f),QTCFL( 0.20711137619222f),QTCFL( 0.13458070850713f), - QTCFL( 0.06132073630221f),QTCFL(-0.01227153828572f),QTCFL(-0.08579731234444f),QTCFL(-0.15885814333386f), - QTCFL(-0.23105810828067f),QTCFL(-0.30200594931923f),QTCFL(-0.37131719395184f),QTCFL(-0.43861623853853f), - QTCFL(-0.50353838372572f),QTCFL(-0.56573181078361f),QTCFL(-0.62485948814239f),QTCFL(-0.68060099779545f) -}; - -const FIXP_QTW qmf_phaseshift_sin32[32] = -{ - QTCFL( 0.03680722294136f),QTCFL( 0.11022220729388f),QTCFL( 0.18303988795514f),QTCFL( 0.25486565960451f), - QTCFL( 0.32531029216226f),QTCFL( 0.39399204006105f),QTCFL( 0.46053871095824f),QTCFL( 0.52458968267847f), - QTCFL( 0.58579785745644f),QTCFL( 0.64383154288979f),QTCFL( 0.69837624940897f),QTCFL( 0.74913639452346f), - QTCFL( 0.79583690460888f),QTCFL( 0.83822470555484f),QTCFL( 0.87607009419541f),QTCFL( 0.90916798309052f), - QTCFL( 0.93733901191257f),QTCFL( 0.96043051941557f),QTCFL( 0.97831737071963f),QTCFL( 0.99090263542778f), - QTCFL( 0.99811811290015f),QTCFL( 0.99992470183914f),QTCFL( 0.99631261218278f),QTCFL( 0.98730141815786f), - QTCFL( 0.97293995220556f),QTCFL( 0.95330604035419f),QTCFL( 0.92850608047322f),QTCFL( 0.89867446569395f), - QTCFL( 0.86397285612159f),QTCFL( 0.82458930278503f),QTCFL( 0.78073722857209f),QTCFL( 0.73265427167241f) -}; -const FIXP_QTW qmf_phaseshift_cos64[64] = { - QTC(0x7ff62181), QTC(0x7fa736b3), QTC(0x7f0991c3), QTC(0x7e1d93e9), QTC(0x7ce3ceb1), QTC(0x7b5d039d), QTC(0x798a23b0), QTC(0x776c4eda), - QTC(0x7504d344), QTC(0x72552c84), QTC(0x6f5f02b1), QTC(0x6c24295f), QTC(0x68a69e80), QTC(0x64e88925), QTC(0x60ec382f), QTC(0x5cb420df), - QTC(0x5842dd54), QTC(0x539b2aef), QTC(0x4ebfe8a4), QTC(0x49b41533), QTC(0x447acd50), QTC(0x3f1749b7), QTC(0x398cdd32), QTC(0x33def287), - QTC(0x2e110a62), QTC(0x2826b928), QTC(0x2223a4c5), QTC(0x1c0b826a), QTC(0x15e21444), QTC(0x0fab272b), QTC(0x096a9049), QTC(0x03242abf), - QTC(0xfcdbd541), QTC(0xf6956fb7), QTC(0xf054d8d5), QTC(0xea1debbc), QTC(0xe3f47d96), QTC(0xdddc5b3b), QTC(0xd7d946d8), QTC(0xd1eef59e), - QTC(0xcc210d79), QTC(0xc67322ce), QTC(0xc0e8b649), QTC(0xbb8532b0), QTC(0xb64beacd), QTC(0xb140175c), QTC(0xac64d511), QTC(0xa7bd22ac), - QTC(0xa34bdf21), QTC(0x9f13c7d1), QTC(0x9b1776db), QTC(0x97596180), QTC(0x93dbd6a1), QTC(0x90a0fd4f), QTC(0x8daad37c), QTC(0x8afb2cbc), - QTC(0x8893b126), QTC(0x8675dc50), QTC(0x84a2fc63), QTC(0x831c314f), QTC(0x81e26c17), QTC(0x80f66e3d), QTC(0x8058c94d), QTC(0x8009de7f) -}; - -const FIXP_QTW qmf_phaseshift_sin64[64] = { - QTC(0x03242abf), QTC(0x096a9049), QTC(0x0fab272b), QTC(0x15e21444), QTC(0x1c0b826a), QTC(0x2223a4c5), QTC(0x2826b928), QTC(0x2e110a62), - QTC(0x33def287), QTC(0x398cdd32), QTC(0x3f1749b7), QTC(0x447acd50), QTC(0x49b41533), QTC(0x4ebfe8a4), QTC(0x539b2aef), QTC(0x5842dd54), - QTC(0x5cb420df), QTC(0x60ec382f), QTC(0x64e88925), QTC(0x68a69e80), QTC(0x6c24295f), QTC(0x6f5f02b1), QTC(0x72552c84), QTC(0x7504d344), - QTC(0x776c4eda), QTC(0x798a23b0), QTC(0x7b5d039d), QTC(0x7ce3ceb1), QTC(0x7e1d93e9), QTC(0x7f0991c3), QTC(0x7fa736b3), QTC(0x7ff62181), - QTC(0x7ff62181), QTC(0x7fa736b3), QTC(0x7f0991c3), QTC(0x7e1d93e9), QTC(0x7ce3ceb1), QTC(0x7b5d039d), QTC(0x798a23b0), QTC(0x776c4eda), - QTC(0x7504d344), QTC(0x72552c84), QTC(0x6f5f02b1), QTC(0x6c24295f), QTC(0x68a69e80), QTC(0x64e88925), QTC(0x60ec382f), QTC(0x5cb420df), - QTC(0x5842dd54), QTC(0x539b2aef), QTC(0x4ebfe8a4), QTC(0x49b41533), QTC(0x447acd50), QTC(0x3f1749b7), QTC(0x398cdd32), QTC(0x33def287), - QTC(0x2e110a62), QTC(0x2826b928), QTC(0x2223a4c5), QTC(0x1c0b826a), QTC(0x15e21444), QTC(0x0fab272b), QTC(0x096a9049), QTC(0x03242abf) -}; - -//@} - -#endif /* #ifdef LOW_POWER_SBR_ONLY */ - - - -/*! - \name QMF - \brief QMF-Table - 64 channels, N = 640, optimized by PE 010516 - - The coeffs are rearranged compared with the reference in the following - way, exploiting symmetry : - sbr_qmf_64[5] = p_64_640_qmf[0]; - sbr_qmf_64[6] = p_64_640_qmf[128]; - sbr_qmf_64[7] = p_64_640_qmf[256]; - sbr_qmf_64[8] = p_64_640_qmf[384]; - sbr_qmf_64[9] = p_64_640_qmf[512]; - - sbr_qmf_64[10] = p_64_640_qmf[1]; - sbr_qmf_64[11] = p_64_640_qmf[129]; - sbr_qmf_64[12] = p_64_640_qmf[257]; - sbr_qmf_64[13] = p_64_640_qmf[385]; - sbr_qmf_64[14] = p_64_640_qmf[513]; - . - . - . - sbr_qmf_64_640_qmf[315] = p_64_640_qmf[62]; - sbr_qmf_64_640_qmf[316] = p_64_640_qmf[190]; - sbr_qmf_64_640_qmf[317] = p_64_640_qmf[318]; - sbr_qmf_64_640_qmf[318] = p_64_640_qmf[446]; - sbr_qmf_64_640_qmf[319] = p_64_640_qmf[574]; - - sbr_qmf_64_640_qmf[320] = p_64_640_qmf[63]; - sbr_qmf_64_640_qmf[321] = p_64_640_qmf[191]; - sbr_qmf_64_640_qmf[322] = p_64_640_qmf[319]; - sbr_qmf_64_640_qmf[323] = p_64_640_qmf[447]; - sbr_qmf_64_640_qmf[324] = p_64_640_qmf[575]; - - sbr_qmf_64_640_qmf[319] = p_64_640_qmf[64]; - sbr_qmf_64_640_qmf[318] = p_64_640_qmf[192]; - sbr_qmf_64_640_qmf[317] = p_64_640_qmf[320]; - sbr_qmf_64_640_qmf[316] = p_64_640_qmf[448]; - sbr_qmf_64_640_qmf[315] = p_64_640_qmf[576]; - - sbr_qmf_64_640_qmf[314] = p_64_640_qmf[65]; - sbr_qmf_64_640_qmf[313] = p_64_640_qmf[193]; - sbr_qmf_64_640_qmf[312] = p_64_640_qmf[321]; - sbr_qmf_64_640_qmf[311] = p_64_640_qmf[449]; - sbr_qmf_64_640_qmf[310] = p_64_640_qmf[577]; - . - . - . - sbr_qmf_64[9] = p_64_640_qmf[126] - sbr_qmf_64[8] = p_64_640_qmf[254]; - sbr_qmf_64[7] = p_64_640_qmf[382]; - sbr_qmf_64[6] = p_64_640_qmf[510]; - sbr_qmf_64[5] = p_64_640_qmf[638]; - - sbr_qmf_64[4] = p_64_640_qmf[127] - sbr_qmf_64[3] = p_64_640_qmf[255]; - sbr_qmf_64[2] = p_64_640_qmf[383]; - sbr_qmf_64[1] = p_64_640_qmf[511]; - sbr_qmf_64[0] = p_64_640_qmf[639]; - - Max sum of all FIR filter absolute coefficients is: 0x7FF5B201 - thus, the filter output is not required to be scaled. - - \showinitializer -*/ -//@{ -#if QMF_NO_POLY==5 -LNK_SECTION_CONSTDATA_L1 -RAM_ALIGN -const FIXP_PFT qmf_64[QMF640_PFT_TABLE_SIZE+QMF_NO_POLY] = -{ - QFC(0x00000000), QFC(0x01b2e41d), QFC(0x2e3a7532), QFC(0xd1c58ace), QFC(0xfe4d1be3), - QFC(0xffede50e), QFC(0x01d78bfc), QFC(0x2faa221c), QFC(0xd3337b3e), QFC(0xfe70b8d1), - QFC(0xffed978a), QFC(0x01fd3ba0), QFC(0x311af3a4), QFC(0xd49fd55f), QFC(0xfe933dc0), - QFC(0xffefc9b9), QFC(0x02244a24), QFC(0x328cc6f0), QFC(0xd60a46e6), QFC(0xfeb48d0d), - QFC(0xfff0065d), QFC(0x024bf7a1), QFC(0x33ff670e), QFC(0xd7722f04), QFC(0xfed4bec3), - QFC(0xffeff6ca), QFC(0x0274ba43), QFC(0x3572ec70), QFC(0xd8d7f220), QFC(0xfef3f6ab), - QFC(0xffef7b8b), QFC(0x029e35b4), QFC(0x36e69691), QFC(0xda3b176a), QFC(0xff120d70), - QFC(0xffeedfa4), QFC(0x02c89901), QFC(0x385a49c3), QFC(0xdb9b5b12), QFC(0xff2ef725), - QFC(0xffee1650), QFC(0x02f3e48d), QFC(0x39ce0477), QFC(0xdcf898fb), QFC(0xff4aabc8), - QFC(0xffed651d), QFC(0x03201116), QFC(0x3b415115), QFC(0xde529087), QFC(0xff6542d1), - QFC(0xffecc31b), QFC(0x034d01f1), QFC(0x3cb41219), QFC(0xdfa93ab5), QFC(0xff7ee3f1), - QFC(0xffebe77b), QFC(0x037ad438), QFC(0x3e25b17e), QFC(0xe0fc421e), QFC(0xff975c01), - QFC(0xffeb50b2), QFC(0x03a966bb), QFC(0x3f962fb8), QFC(0xe24b8f67), QFC(0xffaea5d6), - QFC(0xffea9192), QFC(0x03d8afe6), QFC(0x41058bc5), QFC(0xe396a45d), QFC(0xffc4e365), - QFC(0xffe9ca76), QFC(0x04083fec), QFC(0x4272a385), QFC(0xe4de0cb0), QFC(0xffda17f2), - QFC(0xffe940f4), QFC(0x043889c6), QFC(0x43de620a), QFC(0xe620c476), QFC(0xffee183b), - QFC(0xffe88ba8), QFC(0x04694101), QFC(0x4547daea), QFC(0xe75f8bb8), QFC(0x0000e790), - QFC(0xffe83a07), QFC(0x049aa82f), QFC(0x46aea856), QFC(0xe89971b7), QFC(0x00131c75), - QFC(0xffe79e16), QFC(0x04cc2fcf), QFC(0x4812f848), QFC(0xe9cea84a), QFC(0x0023b989), - QFC(0xffe7746e), QFC(0x04fe20be), QFC(0x4973fef1), QFC(0xeafee7f1), QFC(0x0033b927), - QFC(0xffe6d466), QFC(0x05303f88), QFC(0x4ad237a2), QFC(0xec2a3f60), QFC(0x00426f36), - QFC(0xffe6afed), QFC(0x05626209), QFC(0x4c2ca3df), QFC(0xed50a31d), QFC(0x00504f41), - QFC(0xffe65416), QFC(0x05950122), QFC(0x4d83976c), QFC(0xee71b2fe), QFC(0x005d36df), - QFC(0xffe681c6), QFC(0x05c76fed), QFC(0x4ed62be2), QFC(0xef8d4d7b), QFC(0x006928a0), - QFC(0xffe66dd0), QFC(0x05f9c051), QFC(0x5024d70e), QFC(0xf0a3959f), QFC(0x007400b8), - QFC(0xffe66fab), QFC(0x062bf5ec), QFC(0x516eefb8), QFC(0xf1b461ab), QFC(0x007e0393), - QFC(0xffe69423), QFC(0x065dd56a), QFC(0x52b449dd), QFC(0xf2bf6ea4), QFC(0x00872c63), - QFC(0xffe6fed4), QFC(0x068f8b44), QFC(0x53f495a9), QFC(0xf3c4e887), QFC(0x008f87aa), - QFC(0xffe75361), QFC(0x06c0f0c0), QFC(0x552f8ff6), QFC(0xf4c473c6), QFC(0x0096dcc2), - QFC(0xffe80414), QFC(0x06f1825d), QFC(0x56654bdc), QFC(0xf5be0fa9), QFC(0x009da526), - QFC(0xffe85b4a), QFC(0x0721bf22), QFC(0x579505f4), QFC(0xf6b1f3c3), QFC(0x00a3508f), - QFC(0xffe954d0), QFC(0x075112a2), QFC(0x58befacc), QFC(0xf79fa13a), QFC(0x00a85e94), - QFC(0xffea353a), QFC(0x077fedb3), QFC(0x59e2f69e), QFC(0xf887507c), QFC(0x00acbd2f), - QFC(0xffeb3849), QFC(0x07ad8c26), QFC(0x5b001db7), QFC(0xf96916f5), QFC(0x00b06b68), - QFC(0xffec8409), QFC(0x07da2b7f), QFC(0x5c16d0ae), QFC(0xfa44a069), QFC(0x00b36acd), - QFC(0xffedc418), QFC(0x08061671), QFC(0x5d26be9b), QFC(0xfb19b7bd), QFC(0x00b58c8d), - QFC(0xffef2395), QFC(0x08303897), QFC(0x5e2f6366), QFC(0xfbe8f5bd), QFC(0x00b73ab0), - QFC(0xfff0e7ef), QFC(0x08594887), QFC(0x5f30ff5e), QFC(0xfcb1d740), QFC(0x00b85f70), - QFC(0xfff294c3), QFC(0x0880ffdd), QFC(0x602b0c7e), QFC(0xfd7475d8), QFC(0x00b8c6b0), - QFC(0xfff48700), QFC(0x08a75da4), QFC(0x611d58a2), QFC(0xfe310657), QFC(0x00b8fe0d), - QFC(0xfff681d6), QFC(0x08cb4e23), QFC(0x6207f21f), QFC(0xfee723c6), QFC(0x00b8394b), - QFC(0xfff91fc9), QFC(0x08edfeaa), QFC(0x62ea6473), QFC(0xff96db8f), QFC(0x00b74c37), - QFC(0xfffb42b0), QFC(0x090ec1fc), QFC(0x63c45243), QFC(0x0040c497), QFC(0x00b5c867), - QFC(0xfffdfa24), QFC(0x092d7970), QFC(0x64964062), QFC(0x00e42fa2), QFC(0x00b3d15c), - QFC(0x00007134), QFC(0x0949eaac), QFC(0x655f63f1), QFC(0x01816e06), QFC(0x00b1978d), - QFC(0x00039609), QFC(0x0963ed46), QFC(0x661fd6b7), QFC(0x02186a92), QFC(0x00af374c), - QFC(0x0006b1cf), QFC(0x097c1ee8), QFC(0x66d76724), QFC(0x02a99097), QFC(0x00abe79e), - QFC(0x0009aa3f), QFC(0x099140a7), QFC(0x6785c24c), QFC(0x03343534), QFC(0x00a8739d), - QFC(0x000d31b5), QFC(0x09a3e163), QFC(0x682b39a3), QFC(0x03b8f8dc), QFC(0x00a520bb), - QFC(0x0010bc63), QFC(0x09b3d77f), QFC(0x68c7269b), QFC(0x0437fb0a), QFC(0x00a1039c), - QFC(0x001471f8), QFC(0x09c0e59f), QFC(0x6959709c), QFC(0x04b0adcb), QFC(0x009d10bf), - QFC(0x0018703f), QFC(0x09cab9f2), QFC(0x69e29783), QFC(0x05237f9d), QFC(0x0098b855), - QFC(0x001c3549), QFC(0x09d19ca9), QFC(0x6a619c5e), QFC(0x0590a67d), QFC(0x009424c6), - QFC(0x002064f8), QFC(0x09d52709), QFC(0x6ad73e8d), QFC(0x05f7fb90), QFC(0x008f4bfd), - QFC(0x0024dd50), QFC(0x09d5560b), QFC(0x6b42a863), QFC(0x06593912), QFC(0x008a7dd7), - QFC(0x00293718), QFC(0x09d1fa23), QFC(0x6ba4629e), QFC(0x06b559c3), QFC(0x0085c217), - QFC(0x002d8e42), QFC(0x09caeb0f), QFC(0x6bfbdd97), QFC(0x070bbf58), QFC(0x00807994), - QFC(0x00329ab6), QFC(0x09c018ce), QFC(0x6c492216), QFC(0x075ca90c), QFC(0x007b3875), - QFC(0x003745f9), QFC(0x09b18a1d), QFC(0x6c8c4c79), QFC(0x07a8127d), QFC(0x0075fded), - QFC(0x003c1fa4), QFC(0x099ec3dc), QFC(0x6cc59baa), QFC(0x07ee507c), QFC(0x0070c8a5), - QFC(0x004103f5), QFC(0x09881dc5), QFC(0x6cf4073d), QFC(0x082f552e), QFC(0x006b47fa), - QFC(0x00465348), QFC(0x096d0e21), QFC(0x6d18520d), QFC(0x086b1eec), QFC(0x0065fde5), - QFC(0x004b6c46), QFC(0x094d7ec2), QFC(0x6d32730e), QFC(0x08a24899), QFC(0x006090c4), - QFC(0x0050b177), QFC(0x09299ead), QFC(0x6d41d963), QFC(0x08d3e41b), QFC(0x005b5371), - QFC(0x0055dba1), QFC(0x09015651), QFC(0x6d474e1d), QFC(0x09015651), QFC(0x0055dba1), - QFC(0xfe4d1be3), QFC(0xd1c58ace), QFC(0x2e3a7532), QFC(0x01b2e41d), QFC(0x00000000), -}; - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_QTW qmf_phaseshift_cos_downsamp32[] = -{ - QTC(0x7fd8878e), QTC(0x7e9d55fc), QTC(0x7c29fbee), QTC(0x78848414), QTC(0x73b5ebd1), QTC(0x6dca0d14), QTC(0x66cf8120), QTC(0x5ed77c8a), - QTC(0x55f5a4d2), QTC(0x4c3fdff4), QTC(0x41ce1e65), QTC(0x36ba2014), QTC(0x2b1f34eb), QTC(0x1f19f97b), QTC(0x12c8106f), QTC(0x0647d97c), - QTC(0xf9b82684), QTC(0xed37ef91), QTC(0xe0e60685), QTC(0xd4e0cb15), QTC(0xc945dfec), QTC(0xbe31e19b), QTC(0xb3c0200c), QTC(0xaa0a5b2e), - QTC(0xa1288376), QTC(0x99307ee0), QTC(0x9235f2ec), QTC(0x8c4a142f), QTC(0x877b7bec), QTC(0x83d60412), QTC(0x8162aa04), QTC(0x80277872), -}; - -RAM_ALIGN -LNK_SECTION_CONSTDATA -const FIXP_QTW qmf_phaseshift_sin_downsamp32[] = -{ - QTC(0x0647d97c), QTC(0x12c8106f), QTC(0x1f19f97b), QTC(0x2b1f34eb), QTC(0x36ba2014), QTC(0x41ce1e65), QTC(0x4c3fdff4), QTC(0x55f5a4d2), - QTC(0x5ed77c8a), QTC(0x66cf8120), QTC(0x6dca0d14), QTC(0x73b5ebd1), QTC(0x78848414), QTC(0x7c29fbee), QTC(0x7e9d55fc), QTC(0x7fd8878e), - QTC(0x7fd8878e), QTC(0x7e9d55fc), QTC(0x7c29fbee), QTC(0x78848414), QTC(0x73b5ebd1), QTC(0x6dca0d14), QTC(0x66cf8120), QTC(0x5ed77c8a), - QTC(0x55f5a4d2), QTC(0x4c3fdff4), QTC(0x41ce1e65), QTC(0x36ba2014), QTC(0x2b1f34eb), QTC(0x1f19f97b), QTC(0x12c8106f), QTC(0x0647d97c), -}; - -#else /* QMF_NO_POLY == 5 */ -#endif /* QMF_NO_POLY==5 */ - - - - - -/* - * Low Delay QMF aka CLDFB - */ - -#if defined(QMF_COEFF_16BIT) -#define QTCFLLD(x) FL2FXCONST_SGL(x/(float)(1< 59 dB SNR 1 --> 65 dB SNR -#define MINSFTAB 7 -#define MAXSFTAB 25 - -#if IMPROVE_ATAN2_ACCURACY -static const FIXP_DBL f_atan_expand_range[MAXSFTAB-(MINSFTAB-1)] = -{ - /***************************************************************************** - * - * Table holds fixp_atan() output values which are outside of input range - * of fixp_atan() to improve SNR of fixp_atan2(). - * - * This Table might also be used in fixp_atan() [todo] so there a wider input - * range can be covered, too. - * - * Matlab (generate table): - * for scl = 7:25 % MINSFTAB .. MAXSFTAB - * at=atan(0.5 *(2^scl)); % 0.5 because get in 'middle' area of current scale level 'scl' - * at/2 % div at by ATO_SCALE - * end - * - * Table divided by 2=ATO_SCALE <-- SF=ATO_SF - *****************************************************************************/ - FL2FXCONST_DBL(7.775862990872099e-001), FL2FXCONST_DBL(7.814919928673978e-001), FL2FXCONST_DBL(7.834450483314648e-001), - FL2FXCONST_DBL(7.844216021392089e-001), FL2FXCONST_DBL(7.849098823026687e-001), FL2FXCONST_DBL(7.851540227918509e-001), - FL2FXCONST_DBL(7.852760930873737e-001), FL2FXCONST_DBL(7.853371282415015e-001), FL2FXCONST_DBL(7.853676458193612e-001), - FL2FXCONST_DBL(7.853829046083906e-001), FL2FXCONST_DBL(7.853905340029177e-001), FL2FXCONST_DBL(7.853943487001828e-001), - FL2FXCONST_DBL(7.853962560488155e-001), FL2FXCONST_DBL(7.853972097231319e-001), FL2FXCONST_DBL(7.853976865602901e-001), - FL2FXCONST_DBL(7.853979249788692e-001), FL2FXCONST_DBL(7.853980441881587e-001), FL2FXCONST_DBL(7.853981037928035e-001), - FL2FXCONST_DBL(7.853981335951259e-001) - // pi/4 = 0.785398163397448 = pi/2/ATO_SCALE -}; -#endif - -FIXP_DBL fixp_atan2(FIXP_DBL y, FIXP_DBL x) -{ - FIXP_DBL q; - FIXP_DBL at; // atan out - FIXP_DBL at2; // atan2 out - FIXP_DBL ret = FL2FXCONST_DBL(-1.0f); - INT sf,sfo,stf; - - // --- division - - if (y > FL2FXCONST_DBL(0.0f)) - { - if (x > FL2FXCONST_DBL(0.0f)) { - q = fDivNormHighPrec( y, x, &sf); // both pos. - } - else if (x < FL2FXCONST_DBL(0.0f)) { - q = -fDivNormHighPrec( y,-x, &sf); // x neg. - } - else {//(x ==FL2FXCONST_DBL(0.0f)) - q = FL2FXCONST_DBL(+1.0f); // y/x = pos/zero = +Inf - sf = 0; - } - } - else if (y < FL2FXCONST_DBL(0.0f)) - { - if (x > FL2FXCONST_DBL(0.0f)) { - q = -fDivNormHighPrec(-y, x, &sf); // y neg. - } - else if (x < FL2FXCONST_DBL(0.0f)) { - q = fDivNormHighPrec(-y,-x, &sf); // both neg. - } - else {//(x ==FL2FXCONST_DBL(0.0f)) - q = FL2FXCONST_DBL(-1.0f); // y/x = neg/zero = -Inf - sf = 0; - } - } - else { // (y ==FL2FXCONST_DBL(0.0f)) - q = FL2FXCONST_DBL(0.0f); - sf = 0; - } - sfo = sf; - - // --- atan() - - if ( sfo > ATI_SF ) { - // --- could not calc fixp_atan() here bec of input data out of range - // ==> therefore give back boundary values - - #if IMPROVE_ATAN2_ACCURACY - if (sfo > MAXSFTAB) sfo = MAXSFTAB; - #endif - - if ( q > FL2FXCONST_DBL(0.0f) ) { - #if IMPROVE_ATAN2_ACCURACY - at = +f_atan_expand_range[sfo-ATI_SF-1]; - #else - at = FL2FXCONST_DBL( +M_PI/2 / ATO_SCALE); - #endif - } - else if ( q < FL2FXCONST_DBL(0.0f) ) { - #if IMPROVE_ATAN2_ACCURACY - at = -f_atan_expand_range[sfo-ATI_SF-1]; - #else - at = FL2FXCONST_DBL( -M_PI/2 / ATO_SCALE); - #endif - } - else { // q== FL2FXCONST_DBL(0.0f) - at = FL2FXCONST_DBL( 0.0f ); - } - }else{ - // --- calc of fixp_atan() is possible; input data within range - // ==> set q on fixed scale level as desired from fixp_atan() - stf = sfo - ATI_SF; - if (stf > 0) q = q << (INT)fMin( stf,DFRACT_BITS-1); - else q = q >> (INT)fMin(-stf,DFRACT_BITS-1); - at = fixp_atan(q); // ATO_SF - } - - // --- atan2() - - at2 = at >> (AT2O_SF - ATO_SF); // now AT2O_SF for atan2 - if ( x > FL2FXCONST_DBL(0.0f) ) { - ret = at2; - } - else if ( x < FL2FXCONST_DBL(0.0f) ) { - if ( y >= FL2FXCONST_DBL(0.0f) ) { - ret = at2 + FL2FXCONST_DBL( M_PI / AT2O_SCALE); - } else { - ret = at2 - FL2FXCONST_DBL( M_PI / AT2O_SCALE); - } - } - else { - // x == 0 - if ( y > FL2FXCONST_DBL(0.0f) ) { - ret = FL2FXCONST_DBL( +M_PI/2 / AT2O_SCALE); - } - else if ( y < FL2FXCONST_DBL(0.0f) ) { - ret = FL2FXCONST_DBL( -M_PI/2 / AT2O_SCALE); - } - else if ( y == FL2FXCONST_DBL(0.0f) ) { - ret = FL2FXCONST_DBL(0.0f); - } - } - return ret; -} - - -FIXP_DBL fixp_atan(FIXP_DBL x) -{ - INT sign; - FIXP_DBL result, temp; - - // SNR of fixp_atan() = 56 dB - FIXP_DBL ONEBY3P56 = (FIXP_DBL)0x26800000; // 1.0/3.56 in q31 - FIXP_DBL P281 = (FIXP_DBL)0x00013000; // 0.281 in q18 - FIXP_DBL ONEP571 = (FIXP_DBL)0x6487ef00; // 1.571 in q30 - - if (x < FIXP_DBL(0)) { - sign = 1; - x = - x ; - } else { - sign = 0; - } - - /* calc of arctan */ - if(x < ( Q(Q_ATANINP)-FL2FXCONST_DBL(0.00395)) ) - { - INT res_e; - - temp = fPow2(x); // q25 * q25 - (DFRACT_BITS-1) = q19 - temp = fMult(temp, ONEBY3P56); // q19 * q31 - (DFRACT_BITS-1) = q19 - temp = temp + Q(19); // q19 + q19 = q19 - result = fDivNorm(x, temp, &res_e); - result = scaleValue(result, (Q_ATANOUT-Q_ATANINP+19-DFRACT_BITS+1) + res_e ); - } - else if( x < FL2FXCONST_DBL(1.28/64.0) ) - { - FIXP_DBL delta_fix; - FIXP_DBL PI_BY_4 = FL2FXCONST_DBL(3.1415926/4.0) >> 1; /* pi/4 in q30 */ - - delta_fix = (x - FL2FXCONST_DBL(1.0/64.0)) << 5; /* q30 */ - result = PI_BY_4 + (delta_fix >> 1) - (fPow2Div2(delta_fix)); - } - else - { - INT res_e; - - temp = fPow2Div2(x); // q25 * q25 - (DFRACT_BITS-1) - 1 = q18 - temp = temp + P281; // q18 + q18 = q18 - result = fDivNorm(x, temp, &res_e); - result = scaleValue(result, (Q_ATANOUT-Q_ATANINP+18-DFRACT_BITS+1) + res_e ); - result = ONEP571 - result; // q30 + q30 = q30 - } - if (sign) { - result = -result; - } - - return(result); -} - - - -#include "FDK_tools_rom.h" - -FIXP_DBL fixp_cos(FIXP_DBL x, int scale) -{ - FIXP_DBL residual, error, sine, cosine; - - residual = fixp_sin_cos_residual_inline(x, scale, &sine, &cosine); - error = fMult(sine, residual); - - return cosine - error; -} - -FIXP_DBL fixp_sin(FIXP_DBL x, int scale) -{ - FIXP_DBL residual, error, sine, cosine; - - residual = fixp_sin_cos_residual_inline(x, scale, &sine, &cosine); - error = fMult(cosine, residual); - - return sine + error; -} - -void fixp_cos_sin (FIXP_DBL x, int scale, FIXP_DBL *cos, FIXP_DBL *sin) -{ - FIXP_DBL residual, error0, error1, sine, cosine; - - residual = fixp_sin_cos_residual_inline(x, scale, &sine, &cosine); - error0 = fMult(sine, residual); - error1 = fMult(cosine, residual); - *cos = cosine - error0; - *sin = sine + error1; -} - - - - - diff --git a/libFDK/src/arm/autocorr2nd.cpp b/libFDK/src/arm/autocorr2nd.cpp deleted file mode 100644 index cc76e30..0000000 --- a/libFDK/src/arm/autocorr2nd.cpp +++ /dev/null @@ -1,90 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*! - * - * \brief Calculate second order autocorrelation - * - */ - - diff --git a/libFDK/src/arm/dct_arm.cpp b/libFDK/src/arm/dct_arm.cpp deleted file mode 100644 index 59b773e..0000000 --- a/libFDK/src/arm/dct_arm.cpp +++ /dev/null @@ -1,456 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - - - -#ifdef FUNCTION_dct_IV_func1 - -/* - Note: This assembler routine is here, because the ARM926 compiler does - not encode the inline assembler with optimal speed. - With this version, we save 2 cycles per loop iteration. -*/ - -__asm void dct_IV_func1( - int i, - const FIXP_SPK *twiddle, - FIXP_DBL *RESTRICT pDat_0, - FIXP_DBL *RESTRICT pDat_1) -{ - /* Register map: - r0 i - r1 twiddle - r2 pDat_0 - r3 pDat_1 - r4 accu1 - r5 accu2 - r6 accu3 - r7 accu4 - r8 val_tw - r9 accuX - */ - PUSH {r4-r9} - - /* 44 cycles for 2 iterations = 22 cycles/iteration */ -dct_IV_loop1_start -/* First iteration */ - LDR r8, [r1], #4 // val_tw = *twiddle++; - LDR r5, [r2, #0] // accu2 = pDat_0[0] - LDR r4, [r3, #0] // accu1 = pDat_1[0] - - SMULWT r9, r5, r8 // accuX = accu2*val_tw.l - SMULWB r5, r5, r8 // accu2 = accu2*val_tw.h - RSB r9, r9, #0 // accuX =-accu2*val_tw.l - SMLAWT r5, r4, r8, r5 // accu2 = accu2*val_tw.h + accu1*val_tw.l - SMLAWB r4, r4, r8, r9 // accu1 = accu1*val_tw.h - accu2*val_tw.l - - LDR r8, [r1], #4 // val_tw = *twiddle++; - LDR r7, [r3, #-4] // accu4 = pDat_1[-1] - LDR r6, [r2, #4] // accu3 = pDat_0[1] - - SMULWB r9, r7, r8 // accuX = accu4*val_tw.h - SMULWT r7, r7, r8 // accu4 = accu4*val_tw.l - RSB r9, r9, #0 // accuX =-accu4*val_tw.h - SMLAWB r7, r6, r8, r7 // accu4 = accu4*val_tw.l+accu3*val_tw.h - SMLAWT r6, r6, r8, r9 // accu3 = accu3*val_tw.l-accu4*val_tw.h - - STR r5, [r2], #4 // *pDat_0++ = accu2 - STR r4, [r2], #4 // *pDat_0++ = accu1 - STR r6, [r3], #-4 // *pDat_1-- = accu3 - STR r7, [r3], #-4 // *pDat_1-- = accu4 - -/* Second iteration */ - LDR r8, [r1], #4 // val_tw = *twiddle++; - LDR r5, [r2, #0] // accu2 = pDat_0[0] - LDR r4, [r3, #0] // accu1 = pDat_1[0] - - SMULWT r9, r5, r8 // accuX = accu2*val_tw.l - SMULWB r5, r5, r8 // accu2 = accu2*val_tw.h - RSB r9, r9, #0 // accuX =-accu2*val_tw.l - SMLAWT r5, r4, r8, r5 // accu2 = accu2*val_tw.h + accu1*val_tw.l - SMLAWB r4, r4, r8, r9 // accu1 = accu1*val_tw.h - accu2*val_tw.l - - LDR r8, [r1], #4 // val_tw = *twiddle++; - LDR r7, [r3, #-4] // accu4 = pDat_1[-1] - LDR r6, [r2, #4] // accu3 = pDat_0[1] - - SMULWB r9, r7, r8 // accuX = accu4*val_tw.h - SMULWT r7, r7, r8 // accu4 = accu4*val_tw.l - RSB r9, r9, #0 // accuX =-accu4*val_tw.h - SMLAWB r7, r6, r8, r7 // accu4 = accu4*val_tw.l+accu3*val_tw.h - SMLAWT r6, r6, r8, r9 // accu3 = accu3*val_tw.l-accu4*val_tw.h - - STR r5, [r2], #4 // *pDat_0++ = accu2 - STR r4, [r2], #4 // *pDat_0++ = accu1 - STR r6, [r3], #-4 // *pDat_1-- = accu3 - STR r7, [r3], #-4 // *pDat_1-- = accu4 - - SUBS r0, r0, #1 - BNE dct_IV_loop1_start - - POP {r4-r9} - - BX lr -} - -#endif /* FUNCTION_dct_IV_func1 */ - - -#ifdef FUNCTION_dct_IV_func2 - -FDK_INLINE -/* __attribute__((noinline)) */ -static void dct_IV_func2( - int i, - const FIXP_SPK *twiddle, - FIXP_DBL *pDat_0, - FIXP_DBL *pDat_1, - int inc) -{ - FIXP_DBL accu1, accu2, accu3, accu4, accuX; - LONG val_tw; - - accu1 = pDat_1[-2]; - accu2 = pDat_1[-1]; - - *--pDat_1 = -(pDat_0[1]>>1); - *pDat_0++ = (pDat_0[0]>>1); - - twiddle += inc; - -__asm - { - LDR val_tw, [twiddle], inc, LSL #2 // val_tw = *twiddle; twiddle += inc - B dct_IV_loop2_2nd_part - - /* 42 cycles for 2 iterations = 21 cycles/iteration */ -dct_IV_loop2: - SMULWT accuX, accu2, val_tw - SMULWB accu2, accu2, val_tw - RSB accuX, accuX, #0 - SMLAWB accuX, accu1, val_tw, accuX - SMLAWT accu2, accu1, val_tw, accu2 - STR accuX, [pDat_0], #4 - STR accu2, [pDat_1, #-4] ! - - LDR accu4, [pDat_0, #4] - LDR accu3, [pDat_0] - SMULWB accuX, accu4, val_tw - SMULWT accu4, accu4, val_tw - RSB accuX, accuX, #0 - SMLAWT accuX, accu3, val_tw, accuX - SMLAWB accu4, accu3, val_tw, accu4 - - LDR accu1, [pDat_1, #-8] - LDR accu2, [pDat_1, #-4] - - LDR val_tw, [twiddle], inc, LSL #2 // val_tw = *twiddle; twiddle += inc - - STR accuX, [pDat_1, #-4] ! - STR accu4, [pDat_0], #4 - -dct_IV_loop2_2nd_part: - SMULWT accuX, accu2, val_tw - SMULWB accu2, accu2, val_tw - RSB accuX, accuX, #0 - SMLAWB accuX, accu1, val_tw, accuX - SMLAWT accu2, accu1, val_tw, accu2 - STR accuX, [pDat_0], #4 - STR accu2, [pDat_1, #-4] ! - - LDR accu4, [pDat_0, #4] - LDR accu3, [pDat_0] - SMULWB accuX, accu4, val_tw - SMULWT accu4, accu4, val_tw - RSB accuX, accuX, #0 - SMLAWT accuX, accu3, val_tw, accuX - SMLAWB accu4, accu3, val_tw, accu4 - - LDR accu1, [pDat_1, #-8] - LDR accu2, [pDat_1, #-4] - - STR accuX, [pDat_1, #-4] ! - STR accu4, [pDat_0], #4 - - LDR val_tw, [twiddle], inc, LSL #2 // val_tw = *twiddle; twiddle += inc - - SUBS i, i, #1 - BNE dct_IV_loop2 - } - - /* Last Sin and Cos value pair are the same */ - accu1 = fMultDiv2(accu1, WTC(0x5a82799a)); - accu2 = fMultDiv2(accu2, WTC(0x5a82799a)); - - *--pDat_1 = accu1 + accu2; - *pDat_0++ = accu1 - accu2; -} -#endif /* FUNCTION_dct_IV_func2 */ - - -#ifdef FUNCTION_dst_IV_func1 - -__asm void dst_IV_func1( - int i, - const FIXP_SPK *twiddle, - FIXP_DBL *pDat_0, - FIXP_DBL *pDat_1) -{ - /* Register map: - r0 i - r1 twiddle - r2 pDat_0 - r3 pDat_1 - r4 accu1 - r5 accu2 - r6 accu3 - r7 accu4 - r8 val_tw - r9 accuX - */ - PUSH {r4-r9} - -dst_IV_loop1 - LDR r8, [r1], #4 // val_tw = *twiddle++ - LDR r5, [r2] // accu2 = pDat_0[0] - LDR r6, [r2, #4] // accu3 = pDat_0[1] - RSB r5, r5, #0 // accu2 = -accu2 - SMULWT r9, r5, r8 // accuX = (-accu2)*val_tw.l - LDR r4, [r3, #-4] // accu1 = pDat_1[-1] - RSB r9, r9, #0 // accuX = -(-accu2)*val_tw.l - SMLAWB r9, r4, r8, r9 // accuX = accu1*val_tw.h-(-accu2)*val_tw.l - SMULWT r4, r4, r8 // accu1 = accu1*val_tw.l - LDR r7, [r3, #-8] // accu4 = pDat_1[-2] - SMLAWB r5, r5, r8, r4 // accu2 = (-accu2)*val_tw.t+accu1*val_tw.l - LDR r8, [r1], #4 // val_tw = *twiddle++ - STR r5, [r2], #4 // *pDat_0++ = accu2 - STR r9, [r2], #4 // *pDat_0++ = accu1 (accuX) - RSB r7, r7, #0 // accu4 = -accu4 - SMULWB r5, r7, r8 // accu2 = (-accu4)*val_tw.h - SMULWB r4, r6, r8 // accu1 = (-accu4)*val_tw.l - RSB r5, r5, #0 // accu2 = -(-accu4)*val_tw.h - SMLAWT r6, r6, r8, r5 // accu3 = (-accu4)*val_tw.l-(-accu3)*val_tw.h - SMLAWT r7, r7, r8, r4 // accu4 = (-accu3)*val_tw.l+(-accu4)*val_tw.h - STR r6, [r3, #-4] ! // *--pDat_1 = accu3 - STR r7, [r3, #-4] ! // *--pDat_1 = accu4 - - LDR r8, [r1], #4 // val_tw = *twiddle++ - LDR r5, [r2] // accu2 = pDat_0[0] - LDR r6, [r2, #4] // accu3 = pDat_0[1] - RSB r5, r5, #0 // accu2 = -accu2 - SMULWT r9, r5, r8 // accuX = (-accu2)*val_tw.l - LDR r4, [r3, #-4] // accu1 = pDat_1[-1] - RSB r9, r9, #0 // accuX = -(-accu2)*val_tw.l - SMLAWB r9, r4, r8, r9 // accuX = accu1*val_tw.h-(-accu2)*val_tw.l - SMULWT r4, r4, r8 // accu1 = accu1*val_tw.l - LDR r7, [r3, #-8] // accu4 = pDat_1[-2] - SMLAWB r5, r5, r8, r4 // accu2 = (-accu2)*val_tw.t+accu1*val_tw.l - LDR r8, [r1], #4 // val_tw = *twiddle++ - STR r5, [r2], #4 // *pDat_0++ = accu2 - STR r9, [r2], #4 // *pDat_0++ = accu1 (accuX) - RSB r7, r7, #0 // accu4 = -accu4 - SMULWB r5, r7, r8 // accu2 = (-accu4)*val_tw.h - SMULWB r4, r6, r8 // accu1 = (-accu4)*val_tw.l - RSB r5, r5, #0 // accu2 = -(-accu4)*val_tw.h - SMLAWT r6, r6, r8, r5 // accu3 = (-accu4)*val_tw.l-(-accu3)*val_tw.h - SMLAWT r7, r7, r8, r4 // accu4 = (-accu3)*val_tw.l+(-accu4)*val_tw.h - STR r6, [r3, #-4] ! // *--pDat_1 = accu3 - STR r7, [r3, #-4] ! // *--pDat_1 = accu4 - - SUBS r0, r0, #4 // i-= 4 - BNE dst_IV_loop1 - - POP {r4-r9} - BX lr -} -#endif /* FUNCTION_dst_IV_func1 */ - -#ifdef FUNCTION_dst_IV_func2 - -FDK_INLINE -/* __attribute__((noinline)) */ -static void dst_IV_func2( - int i, - const FIXP_SPK *twiddle, - FIXP_DBL *RESTRICT pDat_0, - FIXP_DBL *RESTRICT pDat_1, - int inc) -{ - FIXP_DBL accu1,accu2,accu3,accu4; - LONG val_tw; - - accu4 = pDat_0[0]; - accu3 = pDat_0[1]; - accu4 >>= 1; - accu3 >>= 1; - accu4 = -accu4; - - accu1 = pDat_1[-1]; - accu2 = pDat_1[0]; - - *pDat_0++ = accu3; - *pDat_1-- = accu4; - - - __asm - { - B dst_IV_loop2_2nd_part - - /* 50 cycles for 2 iterations = 25 cycles/iteration */ - -dst_IV_loop2: - - LDR val_tw, [twiddle], inc, LSL #2 // val_tw = *twiddle; twiddle += inc - - RSB accu2, accu2, #0 // accu2 = -accu2 - RSB accu1, accu1, #0 // accu1 = -accu1 - SMULWT accu3, accu2, val_tw // accu3 = (-accu2)*val_tw.l - SMULWT accu4, accu1, val_tw // accu4 = (-accu1)*val_tw.l - RSB accu3, accu3, #0 // accu3 = -accu2*val_tw.l - SMLAWB accu1, accu1, val_tw, accu3 // accu1 = -accu1*val_tw.h-(-accu2)*val_tw.l - SMLAWB accu2, accu2, val_tw, accu4 // accu2 = (-accu1)*val_tw.l+(-accu2)*val_tw.h - STR accu1, [pDat_1], #-4 // *pDat_1-- = accu1 - STR accu2, [pDat_0], #4 // *pDat_0++ = accu2 - - LDR accu4, [pDat_0] // accu4 = pDat_0[0] - LDR accu3, [pDat_0, #4] // accu3 = pDat_0[1] - - RSB accu4, accu4, #0 // accu4 = -accu4 - RSB accu3, accu3, #0 // accu3 = -accu3 - - SMULWB accu1, accu3, val_tw // accu1 = (-accu3)*val_tw.h - SMULWT accu2, accu3, val_tw // accu2 = (-accu3)*val_tw.l - RSB accu1, accu1, #0 // accu1 = -(-accu3)*val_tw.h - SMLAWT accu3, accu4, val_tw, accu1 // accu3 = (-accu4)*val_tw.l-(-accu3)*val_tw.h - SMLAWB accu4, accu4, val_tw, accu2 // accu4 = (-accu3)*val_tw.l+(-accu4)*val_tw.h - - LDR accu1, [pDat_1, #-4] // accu1 = pDat_1[-1] - LDR accu2, [pDat_1] // accu2 = pDat_1[0] - - STR accu3, [pDat_0], #4 // *pDat_0++ = accu3 - STR accu4, [pDat_1], #-4 // *pDat_1-- = accu4 - -dst_IV_loop2_2nd_part: - - LDR val_tw, [twiddle], inc, LSL #2 // val_tw = *twiddle; twiddle += inc - - RSB accu2, accu2, #0 // accu2 = -accu2 - RSB accu1, accu1, #0 // accu1 = -accu1 - SMULWT accu3, accu2, val_tw // accu3 = (-accu2)*val_tw.l - SMULWT accu4, accu1, val_tw // accu4 = (-accu1)*val_tw.l - RSB accu3, accu3, #0 // accu3 = -accu2*val_tw.l - SMLAWB accu1, accu1, val_tw, accu3 // accu1 = -accu1*val_tw.h-(-accu2)*val_tw.l - SMLAWB accu2, accu2, val_tw, accu4 // accu2 = (-accu1)*val_tw.l+(-accu2)*val_tw.h - STR accu1, [pDat_1], #-4 // *pDat_1-- = accu1 - STR accu2, [pDat_0], #4 // *pDat_0++ = accu2 - - LDR accu4, [pDat_0] // accu4 = pDat_0[0] - LDR accu3, [pDat_0, #4] // accu3 = pDat_0[1] - - RSB accu4, accu4, #0 // accu4 = -accu4 - RSB accu3, accu3, #0 // accu3 = -accu3 - - SMULWB accu1, accu3, val_tw // accu1 = (-accu3)*val_tw.h - SMULWT accu2, accu3, val_tw // accu2 = (-accu3)*val_tw.l - RSB accu1, accu1, #0 // accu1 = -(-accu3)*val_tw.h - SMLAWT accu3, accu4, val_tw, accu1 // accu3 = (-accu4)*val_tw.l-(-accu3)*val_tw.h - SMLAWB accu4, accu4, val_tw, accu2 // accu4 = (-accu3)*val_tw.l+(-accu4)*val_tw.h - - LDR accu1, [pDat_1, #-4] // accu1 = pDat_1[-1] - LDR accu2, [pDat_1] // accu2 = pDat_1[0] - - STR accu3, [pDat_0], #4 // *pDat_0++ = accu3 - STR accu4, [pDat_1], #-4 // *pDat_1-- = accu4 - - SUBS i, i, #1 - BNE dst_IV_loop2 - } - - /* Last Sin and Cos value pair are the same */ - accu1 = fMultDiv2(-accu1, WTC(0x5a82799a)); - accu2 = fMultDiv2(-accu2, WTC(0x5a82799a)); - - *pDat_0 = accu1 + accu2; - *pDat_1 = accu1 - accu2; -} -#endif /* FUNCTION_dst_IV_func2 */ diff --git a/libFDK/src/arm/fft_rad2_arm.cpp b/libFDK/src/arm/fft_rad2_arm.cpp deleted file mode 100644 index a6e2e42..0000000 --- a/libFDK/src/arm/fft_rad2_arm.cpp +++ /dev/null @@ -1,321 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: dit_fft ARM assembler replacements. - -******************************************************************************/ - -/* NEON optimized FFT currently builds only with RVCT toolchain */ - -#ifndef FUNCTION_dit_fft - -/* If dit_fft was not yet defined by ARM-Cortex ... */ - -#if defined(SINETABLE_16BIT) - -#define FUNCTION_dit_fft - -/***************************************************************************** - - date: 28.07.2005 srl - - Contents/description: dit-tukey-FFT-algorithm - -******************************************************************************/ - -#if defined(FUNCTION_dit_fft) - - -void dit_fft(FIXP_DBL *x, const INT ldn, const FIXP_STP *trigdata, const INT trigDataSize) -{ - const INT n=1<>1; /* Re A + Re B */ - a10 = (x[i + 4] + x[i + 6])>>1; /* Re C + Re D */ - a20 = (x[i + 1] + x[i + 3])>>1; /* Im A + Im B */ - a30 = (x[i + 5] + x[i + 7])>>1; /* Im C + Im D */ - - x[i + 0] = a00 + a10; /* Re A' = Re A + Re B + Re C + Re D */ - x[i + 4] = a00 - a10; /* Re C' = Re A + Re B - Re C - Re D */ - x[i + 1] = a20 + a30; /* Im A' = Im A + Im B + Im C + Im D */ - x[i + 5] = a20 - a30; /* Im C' = Im A + Im B - Im C - Im D */ - - a00 = a00 - x[i + 2]; /* Re A - Re B */ - a10 = a10 - x[i + 6]; /* Re C - Re D */ - a20 = a20 - x[i + 3]; /* Im A - Im B */ - a30 = a30 - x[i + 7]; /* Im C - Im D */ - - x[i + 2] = a00 + a30; /* Re B' = Re A - Re B + Im C - Im D */ - x[i + 6] = a00 - a30; /* Re D' = Re A - Re B - Im C + Im D */ - x[i + 3] = a20 - a10; /* Im B' = Im A - Im B - Re C + Re D */ - x[i + 7] = a20 + a10; /* Im D' = Im A - Im B + Re C - Re D */ - } - - INT mh = 1 << 1; - INT ldm = ldn - 2; - INT trigstep = trigDataSize; - - do - { - const FIXP_STP *pTrigData = trigdata; - INT j; - - mh <<= 1; - trigstep >>= 1; - - FDK_ASSERT(trigstep > 0); - - /* Do first iteration with c=1.0 and s=0.0 separately to avoid loosing to much precision. - Beware: The impact on the overal FFT precision is rather large. */ - { - FIXP_DBL *xt1 = x; - int r = n; - - do { - FIXP_DBL *xt2 = xt1 + (mh<<1); - /* - FIXP_DBL *xt1 = x+ ((r)<<1); - FIXP_DBL *xt2 = xt1 + (mh<<1); - */ - FIXP_DBL vr,vi,ur,ui; - - //cplxMultDiv2(&vi, &vr, x[t2+1], x[t2], (FIXP_SGL)1.0, (FIXP_SGL)0.0); - vi = xt2[1]>>1; - vr = xt2[0]>>1; - - ur = xt1[0]>>1; - ui = xt1[1]>>1; - - xt1[0] = ur+vr; - xt1[1] = ui+vi; - - xt2[0] = ur-vr; - xt2[1] = ui-vi; - - xt1 += mh; - xt2 += mh; - - //cplxMultDiv2(&vr, &vi, x[t2+1], x[t2], (FIXP_SGL)1.0, (FIXP_SGL)0.0); - vr = xt2[1]>>1; - vi = xt2[0]>>1; - - ur = xt1[0]>>1; - ui = xt1[1]>>1; - - xt1[0] = ur+vr; - xt1[1] = ui-vi; - - xt2[0] = ur-vr; - xt2[1] = ui+vi; - - xt1 = xt2 + mh; - } while ((r=r-(mh<<1)) != 0); - } - for(j=4; j>1); - FIXP_SPK cs; - int r = n; - - pTrigData += trigstep; - cs = *pTrigData; - - do - { - FIXP_DBL *xt2 = xt1 + (mh<<1); - FIXP_DBL vr,vi,ur,ui; - - cplxMultDiv2(&vi, &vr, xt2[1], xt2[0], cs); - - ur = xt1[0]>>1; - ui = xt1[1]>>1; - - xt1[0] = ur+vr; - xt1[1] = ui+vi; - - xt2[0] = ur-vr; - xt2[1] = ui-vi; - - xt1 += mh; - xt2 += mh; - - cplxMultDiv2(&vr, &vi, xt2[1], xt2[0], cs); - - ur = xt1[0]>>1; - ui = xt1[1]>>1; - - xt1[0] = ur+vr; - xt1[1] = ui-vi; - - xt2[0] = ur-vr; - xt2[1] = ui+vi; - - /* Same as above but for t1,t2 with j>mh/4 and thus cs swapped */ - xt1 = xt1 - (j); - xt2 = xt1 + (mh<<1); - - cplxMultDiv2(&vi, &vr, xt2[0], xt2[1], cs); - - ur = xt1[0]>>1; - ui = xt1[1]>>1; - - xt1[0] = ur+vr; - xt1[1] = ui-vi; - - xt2[0] = ur-vr; - xt2[1] = ui+vi; - - xt1 += mh; - xt2 += mh; - - cplxMultDiv2(&vr, &vi, xt2[0], xt2[1], cs); - - ur = xt1[0]>>1; - ui = xt1[1]>>1; - - xt1[0] = ur-vr; - xt1[1] = ui-vi; - - xt2[0] = ur+vr; - xt2[1] = ui+vi; - - xt1 = xt2 + (j); - } while ((r=r-(mh<<1)) != 0); - } - { - FIXP_DBL *xt1 = x + (mh>>1); - int r = n; - - do - { - FIXP_DBL *xt2 = xt1 + (mh<<1); - FIXP_DBL vr,vi,ur,ui; - - cplxMultDiv2(&vi, &vr, xt2[1], xt2[0], STC(0x5a82799a), STC(0x5a82799a)); - - ur = xt1[0]>>1; - ui = xt1[1]>>1; - - xt1[0] = ur+vr; - xt1[1] = ui+vi; - - xt2[0] = ur-vr; - xt2[1] = ui-vi; - - xt1 += mh; - xt2 += mh; - - cplxMultDiv2(&vr, &vi, xt2[1], xt2[0], STC(0x5a82799a), STC(0x5a82799a)); - - ur = xt1[0]>>1; - ui = xt1[1]>>1; - - xt1[0] = ur+vr; - xt1[1] = ui-vi; - - xt2[0] = ur-vr; - xt2[1] = ui+vi; - - xt1 = xt2 + mh; - } while ((r=r-(mh<<1)) != 0); - } - } while (--ldm != 0); -} - -#endif /* if defined(FUNCTION_dit_fft) */ - -#endif /* if defined(SINETABLE_16BIT) */ - -#endif /* ifndef FUNCTION_dit_fft */ diff --git a/libFDK/src/arm/qmf_arm.cpp b/libFDK/src/arm/qmf_arm.cpp deleted file mode 100644 index 0c0ce80..0000000 --- a/libFDK/src/arm/qmf_arm.cpp +++ /dev/null @@ -1,766 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -#if (QMF_NO_POLY==5) - -#define FUNCTION_qmfForwardModulationLP_odd - -#ifdef FUNCTION_qmfForwardModulationLP_odd -static void -qmfForwardModulationLP_odd( HANDLE_QMF_FILTER_BANK anaQmf, /*!< Handle of Qmf Analysis Bank */ - const FIXP_QMF *timeIn, /*!< Time Signal */ - FIXP_QMF *rSubband ) /*!< Real Output */ -{ - int i; - int L = anaQmf->no_channels; - int M = L>>1; - int shift = (anaQmf->no_channels>>6) + 1; - int rSubband_e = 0; - - FIXP_QMF *rSubbandPtr0 = &rSubband[M+0]; /* runs with increment */ - FIXP_QMF *rSubbandPtr1 = &rSubband[M-1]; /* runs with decrement */ - FIXP_QMF *timeIn0 = (FIXP_DBL *) &timeIn[0]; /* runs with increment */ - FIXP_QMF *timeIn1 = (FIXP_DBL *) &timeIn[L]; /* runs with increment */ - FIXP_QMF *timeIn2 = (FIXP_DBL *) &timeIn[L-1]; /* runs with decrement */ - FIXP_QMF *timeIn3 = (FIXP_DBL *) &timeIn[2*L-1]; /* runs with decrement */ - - for (i = 0; i < M; i++) - { - *rSubbandPtr0++ = (*timeIn2-- >> 1) - (*timeIn0++ >> shift); - *rSubbandPtr1-- = (*timeIn1++ >> 1) + (*timeIn3-- >> shift); - } - - dct_IV(rSubband,L, &rSubband_e); -} -#endif /* FUNCTION_qmfForwardModulationLP_odd */ - - -/* NEON optimized QMF currently builts only with RVCT toolchain */ - -#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_5TE__) - -#if (SAMPLE_BITS == 16) -#define FUNCTION_qmfAnaPrototypeFirSlot -#endif - -#ifdef FUNCTION_qmfAnaPrototypeFirSlot - -#if defined(__GNUC__) /* cppp replaced: elif */ - -inline INT SMULBB (const SHORT a, const LONG b) -{ - INT result ; - __asm__ ("smulbb %0, %1, %2" - : "=r" (result) - : "r" (a), "r" (b)) ; - return result ; -} -inline INT SMULBT (const SHORT a, const LONG b) -{ - INT result ; - __asm__ ("smulbt %0, %1, %2" - : "=r" (result) - : "r" (a), "r" (b)) ; - return result ; -} - -inline INT SMLABB(const LONG accu, const SHORT a, const LONG b) -{ - INT result ; - __asm__ ("smlabb %0, %1, %2,%3" - : "=r" (result) - : "r" (a), "r" (b), "r" (accu)) ; - return result; -} -inline INT SMLABT(const LONG accu, const SHORT a, const LONG b) -{ - INT result ; - __asm__ ("smlabt %0, %1, %2,%3" - : "=r" (result) - : "r" (a), "r" (b), "r" (accu)) ; - return result; -} -#endif /* compiler selection */ - - -void qmfAnaPrototypeFirSlot( FIXP_QMF *analysisBuffer, - int no_channels, /*!< Number channels of analysis filter */ - const FIXP_PFT *p_filter, - int p_stride, /*!< Stide of analysis filter */ - FIXP_QAS *RESTRICT pFilterStates - ) -{ - LONG *p_flt = (LONG *) p_filter; - LONG flt; - FIXP_QMF *RESTRICT pData_0 = analysisBuffer + 2*no_channels - 1; - FIXP_QMF *RESTRICT pData_1 = analysisBuffer; - - FIXP_QAS *RESTRICT sta_0 = (FIXP_QAS *)pFilterStates; - FIXP_QAS *RESTRICT sta_1 = (FIXP_QAS *)pFilterStates + (2*QMF_NO_POLY*no_channels) - 1; - - FIXP_DBL accu0, accu1; - FIXP_QAS sta0, sta1; - - int staStep1 = no_channels<<1; - int staStep2 = (no_channels<<3) - 1; /* Rewind one less */ - - if (p_stride == 1) - { - /* FIR filter 0 */ - flt = *p_flt++; - sta1 = *sta_1; sta_1 -= staStep1; - accu1 = SMULBB( sta1, flt); - sta1 = *sta_1; sta_1 -= staStep1; - accu1 = SMLABT( accu1, sta1, flt); - - flt = *p_flt++; - sta1 = *sta_1; sta_1 -= staStep1; - accu1 = SMLABB( accu1, sta1, flt); - sta1 = *sta_1; sta_1 -= staStep1; - accu1 = SMLABT( accu1, sta1, flt); - - flt = *p_flt++; - sta1 = *sta_1; sta_1 += staStep2; - accu1 = SMLABB( accu1, sta1, flt); - *pData_1++ = FX_DBL2FX_QMF(accu1<<1); - - /* FIR filters 1..63 127..65 or 1..31 63..33 */ - no_channels >>= 1; - for (; --no_channels; ) - { - sta0 = *sta_0; sta_0 += staStep1; /* 1,3,5, ... 29/61 */ - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMULBT( sta0, flt); - accu1 = SMULBT( sta1, flt); - - flt = *p_flt++; - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABB( accu0, sta0, flt); - accu1 = SMLABB( accu1, sta1, flt); - - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABT( accu0, sta0, flt); - accu1 = SMLABT( accu1, sta1, flt); - - flt = *p_flt++; - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABB( accu0, sta0, flt); - accu1 = SMLABB( accu1, sta1, flt); - - sta0 = *sta_0; sta_0 -= staStep2; - sta1 = *sta_1; sta_1 += staStep2; - accu0 = SMLABT( accu0, sta0, flt); - accu1 = SMLABT( accu1, sta1, flt); - - *pData_0-- = FX_DBL2FX_QMF(accu0<<1); - *pData_1++ = FX_DBL2FX_QMF(accu1<<1); - - /* Same sequence as above, but mix B=bottom with T=Top */ - - flt = *p_flt++; - sta0 = *sta_0; sta_0 += staStep1; /* 2,4,6, ... 30/62 */ - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMULBB( sta0, flt); - accu1 = SMULBB( sta1, flt); - - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABT( accu0, sta0, flt); - accu1 = SMLABT( accu1, sta1, flt); - - flt = *p_flt++; - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABB( accu0, sta0, flt); - accu1 = SMLABB( accu1, sta1, flt); - - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABT( accu0, sta0, flt); - accu1 = SMLABT( accu1, sta1, flt); - - flt = *p_flt++; - sta0 = *sta_0; sta_0 -= staStep2; - sta1 = *sta_1; sta_1 += staStep2; - accu0 = SMLABB( accu0, sta0, flt); - accu1 = SMLABB( accu1, sta1, flt); - - *pData_0-- = FX_DBL2FX_QMF(accu0<<1); - *pData_1++ = FX_DBL2FX_QMF(accu1<<1); - } - - /* FIR filter 31/63 and 33/65 */ - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMULBT( sta0, flt); - accu1 = SMULBT( sta1, flt); - - flt = *p_flt++; - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABB( accu0, sta0, flt); - accu1 = SMLABB( accu1, sta1, flt); - - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABT( accu0, sta0, flt); - accu1 = SMLABT( accu1, sta1, flt); - - flt = *p_flt++; - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABB( accu0, sta0, flt); - accu1 = SMLABB( accu1, sta1, flt); - - sta0 = *sta_0; sta_0 -= staStep2; - sta1 = *sta_1; sta_1 += staStep2; - accu0 = SMLABT( accu0, sta0, flt); - accu1 = SMLABT( accu1, sta1, flt); - - *pData_0-- = FX_DBL2FX_QMF(accu0<<1); - *pData_1++ = FX_DBL2FX_QMF(accu1<<1); - - /* FIR filter 32/64 */ - flt = *p_flt++; - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMULBB( sta0, flt); - accu1 = SMULBB( sta1, flt); - - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABT( accu0, sta0, flt); - accu1 = SMLABT( accu1, sta1, flt); - - flt = *p_flt++; - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABB( accu0, sta0, flt); - accu1 = SMLABB( accu1, sta1, flt); - - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABT( accu0, sta0, flt); - accu1 = SMLABT( accu1, sta1, flt); - - flt = *p_flt; - sta0 = *sta_0; - sta1 = *sta_1; - accu0 = SMLABB( accu0, sta0, flt); - accu1 = SMLABB( accu1, sta1, flt); - - *pData_0-- = FX_DBL2FX_QMF(accu0<<1); - *pData_1++ = FX_DBL2FX_QMF(accu1<<1); - } - else - { - int pfltStep = QMF_NO_POLY * (p_stride-1); - - flt = p_flt[0]; - sta1 = *sta_1; sta_1 -= staStep1; - accu1 = SMULBB( sta1, flt); - sta1 = *sta_1; sta_1 -= staStep1; - accu1 = SMLABT( accu1, sta1, flt); - - flt = p_flt[1]; - sta1 = *sta_1; sta_1 -= staStep1; - accu1 = SMLABB( accu1, sta1, flt); - sta1 = *sta_1; sta_1 -= staStep1; - accu1 = SMLABT( accu1, sta1, flt); - - flt = p_flt[2]; p_flt += pfltStep; - sta1 = *sta_1; sta_1 += staStep2; - accu1 = SMLABB( accu1, sta1, flt); - *pData_1++ = FX_DBL2FX_QMF(accu1<<1); - - /* FIR filters 1..63 127..65 or 1..31 63..33 */ - for (; --no_channels; ) - { - flt = p_flt[0]; - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMULBB( sta0, flt); - accu1 = SMULBB( sta1, flt); - - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABT( accu0, sta0, flt); - accu1 = SMLABT( accu1, sta1, flt); - - flt = p_flt[1]; - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABB( accu0, sta0, flt); - accu1 = SMLABB( accu1, sta1, flt); - - sta0 = *sta_0; sta_0 += staStep1; - sta1 = *sta_1; sta_1 -= staStep1; - accu0 = SMLABT( accu0, sta0, flt); - accu1 = SMLABT( accu1, sta1, flt); - - flt = p_flt[2]; p_flt += pfltStep; - sta0 = *sta_0; sta_0 -= staStep2; - sta1 = *sta_1; sta_1 += staStep2; - accu0 = SMLABB( accu0, sta0, flt); - accu1 = SMLABB( accu1, sta1, flt); - - *pData_0-- = FX_DBL2FX_QMF(accu0<<1); - *pData_1++ = FX_DBL2FX_QMF(accu1<<1); - } - - /* FIR filter 32/64 */ - flt = p_flt[0]; - sta0 = *sta_0; sta_0 += staStep1; - accu0 = SMULBB( sta0, flt); - sta0 = *sta_0; sta_0 += staStep1; - accu0 = SMLABT( accu0, sta0, flt); - - flt = p_flt[1]; - sta0 = *sta_0; sta_0 += staStep1; - accu0 = SMLABB( accu0, sta0, flt); - sta0 = *sta_0; sta_0 += staStep1; - accu0 = SMLABT( accu0, sta0, flt); - - flt = p_flt[2]; - sta0 = *sta_0; - accu0 = SMLABB( accu0, sta0, flt); - *pData_0-- = FX_DBL2FX_QMF(accu0<<1); - } -} -#endif /* FUNCTION_qmfAnaPrototypeFirSlot */ -#endif /* #if defined(__CC_ARM) && defined(__ARM_ARCH_6__) */ - -#if ( defined(__ARM_ARCH_5TE__) && (SAMPLE_BITS == 16) ) && !defined(QMF_TABLE_FULL) - -#define FUNCTION_qmfSynPrototypeFirSlot - -#if defined(FUNCTION_qmfSynPrototypeFirSlot) - -#if defined(__GNUC__) /* cppp replaced: elif */ - -inline INT SMULWB (const LONG a, const LONG b) -{ - INT result ; - __asm__ ("smulwb %0, %1, %2" - : "=r" (result) - : "r" (a), "r" (b)) ; - - return result ; -} -inline INT SMULWT (const LONG a, const LONG b) -{ - INT result ; - __asm__ ("smulwt %0, %1, %2" - : "=r" (result) - : "r" (a), "r" (b)) ; - - return result ; -} - -inline INT SMLAWB(const LONG accu, const LONG a, const LONG b) -{ - INT result; - asm("smlawb %0, %1, %2, %3 " - : "=r" (result) - : "r" (a), "r" (b), "r" (accu) ); - return result ; -} - -inline INT SMLAWT(const LONG accu, const LONG a, const LONG b) -{ - INT result; - asm("smlawt %0, %1, %2, %3 " - : "=r" (result) - : "r" (a), "r" (b), "r" (accu) ); - return result ; -} - -#endif /* ARM compiler selector */ - - -static void qmfSynPrototypeFirSlot1_filter(FIXP_QMF *RESTRICT realSlot, - FIXP_QMF *RESTRICT imagSlot, - const FIXP_DBL *RESTRICT p_flt, - FIXP_QSS *RESTRICT sta, - FIXP_DBL *pMyTimeOut, - int no_channels) -{ - /* This code was the base for the above listed assembler sequence */ - /* It can be used for debugging purpose or further optimizations */ - const FIXP_DBL *RESTRICT p_fltm = p_flt + 155; - - do - { - FIXP_DBL result; - FIXP_DBL A, B, real, imag, sta0; - - real = *--realSlot; - imag = *--imagSlot; - B = p_flt[4]; /* Bottom=[8] Top=[9] */ - A = p_fltm[3]; /* Bottom=[316] Top=[317] */ - sta0 = sta[0]; /* save state[0] */ - *sta++ = SMLAWT( sta[1], imag, B ); /* index=9...........319 */ - *sta++ = SMLAWB( sta[1], real, A ); /* index=316...........6 */ - *sta++ = SMLAWB( sta[1], imag, B ); /* index=8,18, ...318 */ - B = p_flt[3]; /* Bottom=[6] Top=[7] */ - *sta++ = SMLAWT( sta[1], real, A ); /* index=317...........7 */ - A = p_fltm[4]; /* Bottom=[318] Top=[319] */ - *sta++ = SMLAWT( sta[1], imag, B ); /* index=7...........317 */ - *sta++ = SMLAWB( sta[1], real, A ); /* index=318...........8 */ - *sta++ = SMLAWB( sta[1], imag, B ); /* index=6...........316 */ - B = p_flt[2]; /* Bottom=[X] Top=[5] */ - *sta++ = SMLAWT( sta[1], real, A ); /* index=9...........319 */ - A = p_fltm[2]; /* Bottom=[X] Top=[315] */ - *sta++ = SMULWT( imag, B ); /* index=5,15, ... 315 */ - result = SMLAWT( sta0, real, A ); /* index=315...........5 */ - - *pMyTimeOut++ = result; - - real = *--realSlot; - imag = *--imagSlot; - A = p_fltm[0]; /* Bottom=[310] Top=[311] */ - B = p_flt[7]; /* Bottom=[14] Top=[15] */ - result = SMLAWB( sta[0], real, A ); /* index=310...........0 */ - *sta++ = SMLAWB( sta[1], imag, B ); /* index=14..........324 */ - *pMyTimeOut++ = result; - B = p_flt[6]; /* Bottom=[12] Top=[13] */ - *sta++ = SMLAWT( sta[1], real, A ); /* index=311...........1 */ - A = p_fltm[1]; /* Bottom=[312] Top=[313] */ - *sta++ = SMLAWT( sta[1], imag, B ); /* index=13..........323 */ - *sta++ = SMLAWB( sta[1], real, A ); /* index=312...........2 */ - *sta++ = SMLAWB( sta[1], imag, B ); /* index=12..........322 */ - *sta++ = SMLAWT( sta[1], real, A ); /* index=313...........3 */ - A = p_fltm[2]; /* Bottom=[314] Top=[315] */ - B = p_flt[5]; /* Bottom=[10] Top=[11] */ - *sta++ = SMLAWT( sta[1], imag, B ); /* index=11..........321 */ - *sta++ = SMLAWB( sta[1], real, A ); /* index=314...........4 */ - *sta++ = SMULWB( imag, B ); /* index=10..........320 */ - - - p_flt += 5; - p_fltm -= 5; - } - while ((--no_channels) != 0); - -} - - - -INT qmfSynPrototypeFirSlot2( - HANDLE_QMF_FILTER_BANK qmf, - FIXP_QMF *RESTRICT realSlot, /*!< Input: Pointer to real Slot */ - FIXP_QMF *RESTRICT imagSlot, /*!< Input: Pointer to imag Slot */ - INT_PCM *RESTRICT timeOut, /*!< Time domain data */ - INT stride /*!< Time output buffer stride factor*/ - ) -{ - FIXP_QSS *RESTRICT sta = (FIXP_QSS*)qmf->FilterStates; - int no_channels = qmf->no_channels; - int scale = ((DFRACT_BITS-SAMPLE_BITS)-1-qmf->outScalefactor); - - /* We map an arry of 16-bit values upon an array of 2*16-bit values to read 2 values in one shot */ - const FIXP_DBL *RESTRICT p_flt = (FIXP_DBL *) qmf->p_filter; /* low=[0], high=[1] */ - const FIXP_DBL *RESTRICT p_fltm = (FIXP_DBL *) qmf->p_filter + 155; /* low=[310], high=[311] */ - - FDK_ASSERT(SAMPLE_BITS-1-qmf->outScalefactor >= 0); // (DFRACT_BITS-SAMPLE_BITS)-1-qmf->outScalefactor >= 0); - FDK_ASSERT(qmf->p_stride==2 && qmf->no_channels == 32); - - FDK_ASSERT((no_channels&3) == 0); /* should be a multiple of 4 */ - - realSlot += no_channels-1; // ~~"~~ - imagSlot += no_channels-1; // no_channels-1 .. 0 - - FIXP_DBL MyTimeOut[32]; - FIXP_DBL *pMyTimeOut = &MyTimeOut[0]; - - for (no_channels = no_channels; no_channels--;) - { - FIXP_DBL result; - FIXP_DBL A, B, real, imag; - - real = *realSlot--; - imag = *imagSlot--; - A = p_fltm[0]; /* Bottom=[310] Top=[311] */ - B = p_flt[7]; /* Bottom=[14] Top=[15] */ - result = SMLAWB( sta[0], real, A ); /* index=310...........0 */ - *sta++ = SMLAWB( sta[1], imag, B ); /* index=14..........324 */ - B = p_flt[6]; /* Bottom=[12] Top=[13] */ - *sta++ = SMLAWT( sta[1], real, A ); /* index=311...........1 */ - A = p_fltm[1]; /* Bottom=[312] Top=[313] */ - *sta++ = SMLAWT( sta[1], imag, B ); /* index=13..........323 */ - *sta++ = SMLAWB( sta[1], real, A ); /* index=312...........2 */ - *sta++ = SMLAWB( sta[1], imag, B ); /* index=12..........322 */ - *sta++ = SMLAWT( sta[1], real, A ); /* index=313...........3 */ - A = p_fltm[2]; /* Bottom=[314] Top=[315] */ - B = p_flt[5]; /* Bottom=[10] Top=[11] */ - *sta++ = SMLAWT( sta[1], imag, B ); /* index=11..........321 */ - *sta++ = SMLAWB( sta[1], real, A ); /* index=314...........4 */ - *sta++ = SMULWB( imag, B ); /* index=10..........320 */ - - *pMyTimeOut++ = result; - - p_fltm -= 5; - p_flt += 5; - } - - pMyTimeOut = &MyTimeOut[0]; -#if (SAMPLE_BITS == 16) - const FIXP_DBL max_pos = (FIXP_DBL) 0x00007FFF << scale; - const FIXP_DBL max_neg = (FIXP_DBL) 0xFFFF8001 << scale; -#else - scale = -scale; - const FIXP_DBL max_pos = (FIXP_DBL) 0x7FFFFFFF >> scale; - const FIXP_DBL max_neg = (FIXP_DBL) 0x80000001 >> scale; -#endif - const FIXP_DBL add_neg = (1 << scale) - 1; - - no_channels = qmf->no_channels; - - timeOut += no_channels*stride; - - FDK_ASSERT(scale >= 0); - - if (qmf->outGain != 0x80000000) - { - FIXP_DBL gain = qmf->outGain; - for (no_channels>>=2; no_channels--;) - { - FIXP_DBL result1, result2; - - result1 = *pMyTimeOut++; - result2 = *pMyTimeOut++; - - result1 = fMult(result1,gain); - timeOut -= stride; - if (result1 < 0) result1 += add_neg; - if (result1 < max_neg) result1 = max_neg; - if (result1 > max_pos) result1 = max_pos; -#if (SAMPLE_BITS == 16) - timeOut[0] = result1 >> scale; -#else - timeOut[0] = result1 << scale; -#endif - - result2 = fMult(result2,gain); - timeOut -= stride; - if (result2 < 0) result2 += add_neg; - if (result2 < max_neg) result2 = max_neg; - if (result2 > max_pos) result2 = max_pos; -#if (SAMPLE_BITS == 16) - timeOut[0] = result2 >> scale; -#else - timeOut[0] = result2 << scale; -#endif - - result1 = *pMyTimeOut++; - result2 = *pMyTimeOut++; - - result1 = fMult(result1,gain); - timeOut -= stride; - if (result1 < 0) result1 += add_neg; - if (result1 < max_neg) result1 = max_neg; - if (result1 > max_pos) result1 = max_pos; -#if (SAMPLE_BITS == 16) - timeOut[0] = result1 >> scale; -#else - timeOut[0] = result1 << scale; -#endif - - result2 = fMult(result2,gain); - timeOut -= stride; - if (result2 < 0) result2 += add_neg; - if (result2 < max_neg) result2 = max_neg; - if (result2 > max_pos) result2 = max_pos; -#if (SAMPLE_BITS == 16) - timeOut[0] = result2 >> scale; -#else - timeOut[0] = result2 << scale; -#endif - } - } - else - { - for (no_channels>>=2; no_channels--;) - { - FIXP_DBL result1, result2; - result1 = *pMyTimeOut++; - result2 = *pMyTimeOut++; - timeOut -= stride; - if (result1 < 0) result1 += add_neg; - if (result1 < max_neg) result1 = max_neg; - if (result1 > max_pos) result1 = max_pos; -#if (SAMPLE_BITS == 16) - timeOut[0] = result1 >> scale; -#else - timeOut[0] = result1 << scale; -#endif - - timeOut -= stride; - if (result2 < 0) result2 += add_neg; - if (result2 < max_neg) result2 = max_neg; - if (result2 > max_pos) result2 = max_pos; -#if (SAMPLE_BITS == 16) - timeOut[0] = result2 >> scale; -#else - timeOut[0] = result2 << scale; -#endif - - result1 = *pMyTimeOut++; - result2 = *pMyTimeOut++; - timeOut -= stride; - if (result1 < 0) result1 += add_neg; - if (result1 < max_neg) result1 = max_neg; - if (result1 > max_pos) result1 = max_pos; -#if (SAMPLE_BITS == 16) - timeOut[0] = result1 >> scale; -#else - timeOut[0] = result1 << scale; -#endif - - timeOut -= stride; - if (result2 < 0) result2 += add_neg; - if (result2 < max_neg) result2 = max_neg; - if (result2 > max_pos) result2 = max_pos; -#if (SAMPLE_BITS == 16) - timeOut[0] = result2 >> scale; -#else - timeOut[0] = result2 << scale; -#endif - } - } - return 0; -} - -static -void qmfSynPrototypeFirSlot_fallback( HANDLE_QMF_FILTER_BANK qmf, - FIXP_DBL *realSlot, /*!< Input: Pointer to real Slot */ - FIXP_DBL *imagSlot, /*!< Input: Pointer to imag Slot */ - INT_PCM *timeOut, /*!< Time domain data */ - const int stride - ); - -/*! - \brief Perform Synthesis Prototype Filtering on a single slot of input data. - - The filter takes 2 * #MAX_SYNTHESIS_CHANNELS of input data and - generates #MAX_SYNTHESIS_CHANNELS time domain output samples. -*/ - -static -void qmfSynPrototypeFirSlot( HANDLE_QMF_FILTER_BANK qmf, - FIXP_DBL *realSlot, /*!< Input: Pointer to real Slot */ - FIXP_DBL *imagSlot, /*!< Input: Pointer to imag Slot */ - INT_PCM *timeOut, /*!< Time domain data */ - const int stride - ) -{ - INT err = -1; - - switch (qmf->p_stride) { - case 2: - err = qmfSynPrototypeFirSlot2(qmf, realSlot, imagSlot, timeOut, stride); - break; - default: - err = -1; - } - - /* fallback if configuration not available or failed */ - if(err!=0) { - qmfSynPrototypeFirSlot_fallback(qmf, realSlot, imagSlot, timeOut, stride); - } -} -#endif /* FUNCTION_qmfSynPrototypeFirSlot */ - -#endif /* ( defined(__CC_ARM) && defined(__ARM_ARCH_5TE__) && (SAMPLE_BITS == 16) ) && !defined(QMF_TABLE_FULL) */ - - - -/* #####################################################################################*/ - - - -#endif /* (QMF_NO_POLY==5) */ - diff --git a/libFDK/src/arm/scale_arm.cpp b/libFDK/src/arm/scale_arm.cpp deleted file mode 100644 index e2837ef..0000000 --- a/libFDK/src/arm/scale_arm.cpp +++ /dev/null @@ -1,173 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): Arthur Tritthart - Description: Scaling operations for ARM - -******************************************************************************/ - -/* prevent multiple inclusion with re-definitions */ -#ifndef __INCLUDE_SCALE_ARM__ -#define __INCLUDE_SCALE_ARM__ - -#define FUNCTION_scaleValuesWithFactor_DBL - -SCALE_INLINE -void scaleValuesWithFactor( - FIXP_DBL *vector, - FIXP_DBL factor, - INT len, - INT scalefactor - ) -{ - /* This code combines the fMult with the scaling */ - /* It performs a fMultDiv2 and increments shift by 1 */ - int shift = scalefactor + 1; - FIXP_DBL *mySpec = vector; - - shift = fixmin_I(shift,(INT)DFRACT_BITS-1); - - if (shift >= 0) - { - for (int i=0; i<(len>>2); i++) - { - FIXP_DBL tmp0 = mySpec[0]; - FIXP_DBL tmp1 = mySpec[1]; - FIXP_DBL tmp2 = mySpec[2]; - FIXP_DBL tmp3 = mySpec[3]; - tmp0 = fMultDiv2(tmp0, factor); - tmp1 = fMultDiv2(tmp1, factor); - tmp2 = fMultDiv2(tmp2, factor); - tmp3 = fMultDiv2(tmp3, factor); - tmp0 <<= shift; - tmp1 <<= shift; - tmp2 <<= shift; - tmp3 <<= shift; - *mySpec++ = tmp0; - *mySpec++ = tmp1; - *mySpec++ = tmp2; - *mySpec++ = tmp3; - } - for (int i=len&3; i--;) - { - FIXP_DBL tmp0 = mySpec[0]; - tmp0 = fMultDiv2(tmp0, factor); - tmp0 <<= shift; - *mySpec++ = tmp0; - } - } - else - { - shift = -shift; - for (int i=0; i<(len>>2); i++) - { - FIXP_DBL tmp0 = mySpec[0]; - FIXP_DBL tmp1 = mySpec[1]; - FIXP_DBL tmp2 = mySpec[2]; - FIXP_DBL tmp3 = mySpec[3]; - tmp0 = fMultDiv2(tmp0, factor); - tmp1 = fMultDiv2(tmp1, factor); - tmp2 = fMultDiv2(tmp2, factor); - tmp3 = fMultDiv2(tmp3, factor); - tmp0 >>= shift; - tmp1 >>= shift; - tmp2 >>= shift; - tmp3 >>= shift; - *mySpec++ = tmp0; - *mySpec++ = tmp1; - *mySpec++ = tmp2; - *mySpec++ = tmp3; - } - for (int i=len&3; i--;) - { - FIXP_DBL tmp0 = mySpec[0]; - tmp0 = fMultDiv2(tmp0, factor); - tmp0 >>= shift; - *mySpec++ = tmp0; - } - } -} - -#endif /* #ifndef __INCLUDE_SCALE_ARM__ */ diff --git a/libFDK/src/autocorr2nd.cpp b/libFDK/src/autocorr2nd.cpp deleted file mode 100644 index b7eae7c..0000000 --- a/libFDK/src/autocorr2nd.cpp +++ /dev/null @@ -1,278 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools *********************** - - Author(s): M. Lohwasser - Description: auto-correlation functions - -******************************************************************************/ - -#include "autocorr2nd.h" - - - -/* If the accumulator does not provide enough overflow bits, - products have to be shifted down in the autocorrelation below. */ -#define SHIFT_FACTOR (5) -#define SHIFT >> (SHIFT_FACTOR) - - -#if defined(__CC_ARM) || defined(__arm__) -#include "arm/autocorr2nd.cpp" -#endif - - -/*! - * - * \brief Calculate second order autocorrelation using 2 accumulators - * - */ -#if !defined(FUNCTION_autoCorr2nd_real) -INT -autoCorr2nd_real (ACORR_COEFS *ac, /*!< Pointer to autocorrelation coeffs */ - const FIXP_DBL *reBuffer, /*!< Pointer to to real part of input samples */ - const int len /*!< Number input samples */ - ) -{ - int j, autoCorrScaling, mScale; - - FIXP_DBL accu1, accu2, accu3, accu4, accu5; - - const FIXP_DBL *pReBuf; - - const FIXP_DBL *realBuf = reBuffer; - - /* - r11r,r22r - r01r,r12r - r02r - */ - pReBuf = realBuf-2; - accu5 = ( (fMultDiv2(pReBuf[0], pReBuf[2]) + - fMultDiv2(pReBuf[1], pReBuf[3])) SHIFT); - pReBuf++; - - //len must be even - accu1 = fPow2Div2(pReBuf[0]) SHIFT; - accu3 = fMultDiv2(pReBuf[0], pReBuf[1]) SHIFT; - pReBuf++; - - for ( j = (len - 2)>>1; j != 0; j--,pReBuf+=2 ) { - - accu1 += ( (fPow2Div2(pReBuf[0]) + - fPow2Div2(pReBuf[1])) SHIFT); - - accu3 += ( (fMultDiv2(pReBuf[0], pReBuf[1]) + - fMultDiv2(pReBuf[1], pReBuf[2])) SHIFT); - - accu5 += ( (fMultDiv2(pReBuf[0], pReBuf[2]) + - fMultDiv2(pReBuf[1], pReBuf[3])) SHIFT); - - } - - accu2 = (fPow2Div2(realBuf[-2]) SHIFT); - accu2 += accu1; - - accu1 += (fPow2Div2(realBuf[len - 2]) SHIFT); - - accu4 = (fMultDiv2(realBuf[-1],realBuf[-2]) SHIFT); - accu4 += accu3; - - accu3 += (fMultDiv2(realBuf[len - 1],realBuf[len - 2]) SHIFT); - - mScale = CntLeadingZeros( (accu1 | accu2 | fAbs(accu3) | fAbs(accu4) | fAbs(accu5)) ) - 1; - autoCorrScaling = mScale - 1 - SHIFT_FACTOR; /* -1 because of fMultDiv2*/ - - /* Scale to common scale factor */ - ac->r11r = accu1 << mScale; - ac->r22r = accu2 << mScale; - ac->r01r = accu3 << mScale; - ac->r12r = accu4 << mScale; - ac->r02r = accu5 << mScale; - - ac->det = (fMultDiv2(ac->r11r,ac->r22r) - fMultDiv2(ac->r12r,ac->r12r)) ; - mScale = CountLeadingBits(fAbs(ac->det)); - - ac->det <<= mScale; - ac->det_scale = mScale - 1; - - return autoCorrScaling; -} -#endif - -#ifndef LOW_POWER_SBR_ONLY -#if !defined(FUNCTION_autoCorr2nd_cplx) -INT -autoCorr2nd_cplx (ACORR_COEFS *ac, /*!< Pointer to autocorrelation coeffs */ - const FIXP_DBL *reBuffer, /*!< Pointer to real part of input samples */ - const FIXP_DBL *imBuffer, /*!< Pointer to imag part of input samples */ - const int len /*!< Number of input samples */ - ) -{ - - int j, autoCorrScaling, mScale, len_scale; - - FIXP_DBL accu0, accu1,accu2, accu3, accu4, accu5, accu6, accu7, accu8; - - const FIXP_DBL *pReBuf, *pImBuf; - - const FIXP_DBL *realBuf = reBuffer; - const FIXP_DBL *imagBuf = imBuffer; - - (len>64) ? (len_scale = 6) : (len_scale = 5); - /* - r00r, - r11r,r22r - r01r,r12r - r01i,r12i - r02r,r02i - */ - accu1 = accu3 = accu5 = accu7 = accu8 = FL2FXCONST_DBL(0.0f); - - pReBuf = realBuf-2, pImBuf = imagBuf-2; - accu7 += ( (fMultDiv2(pReBuf[2], pReBuf[0]) + fMultDiv2(pImBuf[2], pImBuf[0])) >> len_scale); - accu8 += ( (fMultDiv2(pImBuf[2], pReBuf[0]) - fMultDiv2(pReBuf[2], pImBuf[0])) >> len_scale); - - pReBuf = realBuf-1, pImBuf = imagBuf-1; - for ( j = (len - 1); j != 0; j--,pReBuf++,pImBuf++ ){ - accu1 += ( (fPow2Div2(pReBuf[0] ) + fPow2Div2(pImBuf[0] )) >> len_scale); - accu3 += ( (fMultDiv2(pReBuf[0], pReBuf[1]) + fMultDiv2(pImBuf[0], pImBuf[1])) >> len_scale); - accu5 += ( (fMultDiv2(pImBuf[1], pReBuf[0]) - fMultDiv2(pReBuf[1], pImBuf[0])) >> len_scale); - accu7 += ( (fMultDiv2(pReBuf[2], pReBuf[0]) + fMultDiv2(pImBuf[2], pImBuf[0])) >> len_scale); - accu8 += ( (fMultDiv2(pImBuf[2], pReBuf[0]) - fMultDiv2(pReBuf[2], pImBuf[0])) >> len_scale); - } - - accu2 = ( (fPow2Div2(realBuf[-2]) + fPow2Div2(imagBuf[-2])) >> len_scale); - accu2 += accu1; - - accu1 += ( (fPow2Div2(realBuf[len-2]) + - fPow2Div2(imagBuf[len-2])) >> len_scale); - accu0 = ( (fPow2Div2(realBuf[len-1]) + - fPow2Div2(imagBuf[len-1])) >> len_scale) - - ( (fPow2Div2(realBuf[-1]) + - fPow2Div2(imagBuf[-1])) >> len_scale); - accu0 += accu1; - - accu4 = ( (fMultDiv2(realBuf[-1], realBuf[-2]) + - fMultDiv2(imagBuf[-1], imagBuf[-2])) >> len_scale); - accu4 += accu3; - - accu3 += ( (fMultDiv2(realBuf[len-1], realBuf[len-2]) + - fMultDiv2(imagBuf[len-1], imagBuf[len-2])) >> len_scale); - - accu6 = ( (fMultDiv2(imagBuf[-1], realBuf[-2]) - - fMultDiv2(realBuf[-1], imagBuf[-2])) >> len_scale); - accu6 += accu5; - - accu5 += ( (fMultDiv2(imagBuf[len - 1], realBuf[len - 2]) - - fMultDiv2(realBuf[len - 1], imagBuf[len - 2])) >> len_scale); - - mScale = CntLeadingZeros( (accu0 | accu1 | accu2 | fAbs(accu3) | fAbs(accu4) | fAbs(accu5) | - fAbs(accu6) | fAbs(accu7) | fAbs(accu8)) ) - 1; - autoCorrScaling = mScale - 1 - len_scale; /* -1 because of fMultDiv2*/ - - /* Scale to common scale factor */ - ac->r00r = (FIXP_DBL)accu0 << mScale; - ac->r11r = (FIXP_DBL)accu1 << mScale; - ac->r22r = (FIXP_DBL)accu2 << mScale; - ac->r01r = (FIXP_DBL)accu3 << mScale; - ac->r12r = (FIXP_DBL)accu4 << mScale; - ac->r01i = (FIXP_DBL)accu5 << mScale; - ac->r12i = (FIXP_DBL)accu6 << mScale; - ac->r02r = (FIXP_DBL)accu7 << mScale; - ac->r02i = (FIXP_DBL)accu8 << mScale; - - ac->det = ( fMultDiv2(ac->r11r,ac->r22r) >> 1 ) - - ( (fMultDiv2(ac->r12r,ac->r12r) + fMultDiv2(ac->r12i,ac->r12i)) >> 1 ); - mScale = CountLeadingBits(fAbs(ac->det)); - - ac->det <<= mScale; - ac->det_scale = mScale - 2; - - return autoCorrScaling; -} -#endif /* FUNCTION_autoCorr2nd_cplx */ -#endif /* LOW_POWER_SBR_ONLY */ - - diff --git a/libFDK/src/dct.cpp b/libFDK/src/dct.cpp deleted file mode 100644 index 3c755bd..0000000 --- a/libFDK/src/dct.cpp +++ /dev/null @@ -1,540 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*! - \file dct.cpp - \brief DCT Implementations - Library functions to calculate standard DCTs. This will most likely be replaced by hand-optimized - functions for the specific target processor. - - Three different implementations of the dct type II and the dct type III transforms are provided. - - By default implementations which are based on a single, standard complex FFT-kernel are used (dctII_f() and dctIII_f()). - These are specifically helpful in cases where optimized FFT libraries are already available. The FFT used in these - implementation is FFT rad2 from FDK_tools. - - Of course, one might also use DCT-libraries should they be available. The DCT and DST - type IV implementations are only available in a version based on a complex FFT kernel. -*/ - -#include "dct.h" - - -#include "FDK_tools_rom.h" -#include "fft.h" - - -#if defined(__arm__) -#include "arm/dct_arm.cpp" -#endif - - -#if !defined(FUNCTION_dct_III) -void dct_III(FIXP_DBL *pDat, /*!< pointer to input/output */ - FIXP_DBL *tmp, /*!< pointer to temporal working buffer */ - int L, /*!< lenght of transform */ - int *pDat_e - ) -{ - FDK_ASSERT(L == 64 || L == 32); - int i; - FIXP_DBL xr, accu1, accu2; - int inc; - int M = L>>1; - int ld_M; - - if (L == 64) ld_M = 5; - else ld_M = 4; - - /* This loop performs multiplication for index i (i*inc) */ - inc = (64/2) >> ld_M; /* 64/L */ - - FIXP_DBL *pTmp_0 = &tmp[2]; - FIXP_DBL *pTmp_1 = &tmp[(M-1)*2]; - - for(i=1; i>1; i++,pTmp_0+=2,pTmp_1-=2) { - - FIXP_DBL accu3,accu4,accu5,accu6; - - cplxMultDiv2(&accu2, &accu1, pDat[L - i], pDat[i], sin_twiddle_L64[i*inc]); - cplxMultDiv2(&accu4, &accu3, pDat[M+i], pDat[M-i], sin_twiddle_L64[(M-i)*inc]); - accu3 >>= 1; accu4 >>= 1; - - /* This method is better for ARM926, that uses operand2 shifted right by 1 always */ - cplxMultDiv2(&accu6, &accu5, (accu3 - (accu1>>1)), ((accu2>>1) + accu4), sin_twiddle_L64[(4*i)*inc]); - xr = (accu1>>1) + accu3; - pTmp_0[0] = (xr>>1) - accu5; - pTmp_1[0] = (xr>>1) + accu5; - - xr = (accu2>>1) - accu4; - pTmp_0[1] = (xr>>1) - accu6; - pTmp_1[1] = -((xr>>1) + accu6); - - } - - xr = fMultDiv2(pDat[M], sin_twiddle_L64[64/2].v.re );/* cos((PI/(2*L))*M); */ - tmp[0] = ((pDat[0]>>1) + xr)>>1; - tmp[1] = ((pDat[0]>>1) - xr)>>1; - - cplxMultDiv2(&accu2, &accu1, pDat[L - (M/2)], pDat[M/2], sin_twiddle_L64[64/4]); - tmp[M] = accu1>>1; - tmp[M+1] = accu2>>1; - - /* dit_fft expects 1 bit scaled input values */ - fft(M, tmp, pDat_e); - - /* ARM926: 12 cycles per 2-iteration, no overhead code by compiler */ - pTmp_1 = &tmp[L]; - for (i = M>>1; i--;) - { - FIXP_DBL tmp1, tmp2, tmp3, tmp4; - tmp1 = *tmp++; - tmp2 = *tmp++; - tmp3 = *--pTmp_1; - tmp4 = *--pTmp_1; - *pDat++ = tmp1; - *pDat++ = tmp3; - *pDat++ = tmp2; - *pDat++ = tmp4; - } - - *pDat_e += 2; -} -#endif - -#if !defined(FUNCTION_dct_II) -void dct_II(FIXP_DBL *pDat, /*!< pointer to input/output */ - FIXP_DBL *tmp, /*!< pointer to temporal working buffer */ - int L, /*!< lenght of transform */ - int *pDat_e - ) -{ - FDK_ASSERT(L == 64 || L == 32); - FIXP_DBL accu1,accu2; - FIXP_DBL *pTmp_0, *pTmp_1; - - int i; - int inc; - int M = L>>1; - int ld_M; - - FDK_ASSERT(L == 64 || L == 32); - ld_M = 4 + (L >> 6); /* L=64: 5, L=32: 4 */ - - inc = (64/2) >> ld_M; /* L=64: 1, L=32: 2 */ - - FIXP_DBL *pdat = &pDat[0]; - FIXP_DBL accu3, accu4; - pTmp_0 = &tmp[0]; - pTmp_1 = &tmp[L-1]; - for (i = M>>1; i--; ) - { - accu1 = *pdat++; - accu2 = *pdat++; - accu3 = *pdat++; - accu4 = *pdat++; - accu1 >>= 1; - accu2 >>= 1; - accu3 >>= 1; - accu4 >>= 1; - *pTmp_0++ = accu1; - *pTmp_0++ = accu3; - *pTmp_1-- = accu2; - *pTmp_1-- = accu4; - } - - - fft(M, tmp, pDat_e); - - pTmp_0 = &tmp[2]; - pTmp_1 = &tmp[(M-1)*2]; - - for (i=1; i>1; i++,pTmp_0+=2,pTmp_1-=2) { - - FIXP_DBL a1,a2; - FIXP_DBL accu3, accu4; - - a1 = ((pTmp_0[1]>>1) + (pTmp_1[1]>>1)); - a2 = ((pTmp_1[0]>>1) - (pTmp_0[0]>>1)); - - cplxMultDiv2(&accu1, &accu2, a2, a1, sin_twiddle_L64[(4*i)*inc]); - accu1<<=1; accu2<<=1; - - a1 = ((pTmp_0[0]>>1) + (pTmp_1[0]>>1)); - a2 = ((pTmp_0[1]>>1) - (pTmp_1[1]>>1)); - - cplxMultDiv2(&accu3, &accu4, (a1 + accu2), -(accu1 + a2), sin_twiddle_L64[i*inc]); - pDat[L - i] = accu4; - pDat[i] = accu3; - - cplxMultDiv2(&accu3, &accu4, (a1 - accu2), -(accu1 - a2), sin_twiddle_L64[(M-i)*inc]); - pDat[M + i] = accu4; - pDat[M - i] = accu3; - - } - - cplxMultDiv2(&accu1, &accu2, tmp[M], tmp[M+1], sin_twiddle_L64[(M/2)*inc]); - pDat[L - (M/2)] = accu2; - pDat[M/2] = accu1; - - pDat[0] = (tmp[0]>>1)+(tmp[1]>>1); - pDat[M] = fMult(((tmp[0]>>1)-(tmp[1]>>1)), sin_twiddle_L64[64/2].v.re);/* cos((PI/(2*L))*M); */ - - *pDat_e += 2; -} -#endif - -static -void getTables(const FIXP_WTP **twiddle, const FIXP_STP **sin_twiddle, int *sin_step, int length) -{ - int ld2_length; - - /* Get ld2 of length - 2 + 1 - -2: because first table entry is window of size 4 - +1: because we already include +1 because of ceil(log2(length)) */ - ld2_length = DFRACT_BITS-1-fNormz((FIXP_DBL)length) - 1; - - /* Extract sort of "eigenvalue" (the 4 left most bits) of length. */ - switch ( (length) >> (ld2_length-1) ) { - case 0x4: /* radix 2 */ - *sin_twiddle = SineTable512; - *sin_step = 1<<(9 - ld2_length); - *twiddle = windowSlopes[0][0][ld2_length-1]; - break; - case 0x7: /* 10 ms */ - *sin_twiddle = SineTable480; - *sin_step = 1<<(8 - ld2_length); - *twiddle = windowSlopes[0][1][ld2_length]; - break; - default: - *sin_twiddle = NULL; - *sin_step = 0; - *twiddle = NULL; - break; - } - - FDK_ASSERT(*twiddle != NULL); - - FDK_ASSERT(*sin_step > 0); - -} - -#if !defined(FUNCTION_dct_IV) - -void dct_IV(FIXP_DBL *pDat, - int L, - int *pDat_e) -{ - int sin_step = 0; - int M = L >> 1; - - const FIXP_WTP *twiddle; - const FIXP_STP *sin_twiddle; - - FDK_ASSERT(L >= 4); - - getTables(&twiddle, &sin_twiddle, &sin_step, L); - -#ifdef FUNCTION_dct_IV_func1 - if (M>=4 && (M&3) == 0) { - /* ARM926: 44 cycles for 2 iterations = 22 cycles/iteration */ - dct_IV_func1(M>>2, twiddle, &pDat[0], &pDat[L-1]); - } else -#endif /* FUNCTION_dct_IV_func1 */ - { - FIXP_DBL *RESTRICT pDat_0 = &pDat[0]; - FIXP_DBL *RESTRICT pDat_1 = &pDat[L - 2]; - register int i; - - /* 29 cycles on ARM926 */ - for (i = 0; i < M-1; i+=2,pDat_0+=2,pDat_1-=2) - { - register FIXP_DBL accu1,accu2,accu3,accu4; - - accu1 = pDat_1[1]; accu2 = pDat_0[0]; - accu3 = pDat_0[1]; accu4 = pDat_1[0]; - - cplxMultDiv2(&accu1, &accu2, accu1, accu2, twiddle[i]); - cplxMultDiv2(&accu3, &accu4, accu4, accu3, twiddle[i+1]); - - pDat_0[0] = accu2; pDat_0[1] = accu1; - pDat_1[0] = accu4; pDat_1[1] = -accu3; - } - if (M&1) - { - register FIXP_DBL accu1,accu2; - - accu1 = pDat_1[1]; accu2 = pDat_0[0]; - - cplxMultDiv2(&accu1, &accu2, accu1, accu2, twiddle[i]); - - pDat_0[0] = accu2; pDat_0[1] = accu1; - } - } - - fft(M, pDat, pDat_e); - -#ifdef FUNCTION_dct_IV_func2 - if (M>=4 && (M&3) == 0) { - /* ARM926: 42 cycles for 2 iterations = 21 cycles/iteration */ - dct_IV_func2(M>>2, sin_twiddle, &pDat[0], &pDat[L], sin_step); - } else -#endif /* FUNCTION_dct_IV_func2 */ - { - FIXP_DBL *RESTRICT pDat_0 = &pDat[0]; - FIXP_DBL *RESTRICT pDat_1 = &pDat[L - 2]; - register FIXP_DBL accu1,accu2,accu3,accu4; - int idx, i; - - /* Sin and Cos values are 0.0f and 1.0f */ - accu1 = pDat_1[0]; - accu2 = pDat_1[1]; - - pDat_1[1] = -(pDat_0[1]>>1); - pDat_0[0] = (pDat_0[0]>>1); - - - /* 28 cycles for ARM926 */ - for (idx = sin_step,i=1; i<(M+1)>>1; i++, idx+=sin_step) - { - FIXP_STP twd = sin_twiddle[idx]; - cplxMultDiv2(&accu3, &accu4, accu1, accu2, twd); - pDat_0[1] = accu3; - pDat_1[0] = accu4; - - pDat_0+=2; - pDat_1-=2; - - cplxMultDiv2(&accu3, &accu4, pDat_0[1], pDat_0[0], twd); - - accu1 = pDat_1[0]; - accu2 = pDat_1[1]; - - pDat_1[1] = -accu3; - pDat_0[0] = accu4; - } - - if ( (M&1) == 0 ) - { - /* Last Sin and Cos value pair are the same */ - accu1 = fMultDiv2(accu1, WTC(0x5a82799a)); - accu2 = fMultDiv2(accu2, WTC(0x5a82799a)); - - pDat_1[0] = accu1 + accu2; - pDat_0[1] = accu1 - accu2; - } - } - - /* Add twiddeling scale. */ - *pDat_e += 2; -} -#endif /* defined (FUNCTION_dct_IV) */ - -#if !defined(FUNCTION_dst_IV) -void dst_IV(FIXP_DBL *pDat, - int L, - int *pDat_e ) -{ - int sin_step = 0; - int M = L >> 1; - - const FIXP_WTP *twiddle; - const FIXP_STP *sin_twiddle; - -#ifdef DSTIV2_ENABLE - if (L == 2) { - const FIXP_STP tab = STCP(0x7641AF3D, 0x30FB9452); - FIXP_DBL tmp1, tmp2; - - cplxMultDiv2(&tmp2, &tmp1, pDat[0], pDat[1], tab); - - pDat[0] = tmp1; - pDat[1] = tmp2; - - *pDat_e += 1; - - return; - } -#else - FDK_ASSERT(L >= 4); -#endif - - getTables(&twiddle, &sin_twiddle, &sin_step, L); - -#ifdef FUNCTION_dst_IV_func1 - if ( (M>=4) && ((M&3) == 0) ) { - dst_IV_func1(M, twiddle, &pDat[0], &pDat[L]); - } else -#endif - { - FIXP_DBL *RESTRICT pDat_0 = &pDat[0]; - FIXP_DBL *RESTRICT pDat_1 = &pDat[L - 2]; - - register int i; - - /* 34 cycles on ARM926 */ - for (i = 0; i < M-1; i+=2,pDat_0+=2,pDat_1-=2) - { - register FIXP_DBL accu1,accu2,accu3,accu4; - - accu1 = pDat_1[1]; accu2 = -pDat_0[0]; - accu3 = pDat_0[1]; accu4 = -pDat_1[0]; - - cplxMultDiv2(&accu1, &accu2, accu1, accu2, twiddle[i]); - cplxMultDiv2(&accu3, &accu4, accu4, accu3, twiddle[i+1]); - - pDat_0[0] = accu2; pDat_0[1] = accu1; - pDat_1[0] = accu4; pDat_1[1] = -accu3; - } - if (M&1) - { - register FIXP_DBL accu1,accu2; - - accu1 = pDat_1[1]; accu2 = -pDat_0[0]; - - cplxMultDiv2(&accu1, &accu2, accu1, accu2, twiddle[i]); - - pDat_0[0] = accu2; pDat_0[1] = accu1; - } - } - - fft(M, pDat, pDat_e); - -#ifdef FUNCTION_dst_IV_func2 - if ( (M>=4) && ((M&3) == 0) ) { - dst_IV_func2(M>>2, sin_twiddle + sin_step, &pDat[0], &pDat[L - 1], sin_step); - } else -#endif /* FUNCTION_dst_IV_func2 */ - { - FIXP_DBL *RESTRICT pDat_0; - FIXP_DBL *RESTRICT pDat_1; - register FIXP_DBL accu1,accu2,accu3,accu4; - int idx, i; - - pDat_0 = &pDat[0]; - pDat_1 = &pDat[L - 2]; - - /* Sin and Cos values are 0.0f and 1.0f */ - accu1 = pDat_1[0]; - accu2 = pDat_1[1]; - - pDat_1[1] = -(pDat_0[0]>>1); - pDat_0[0] = (pDat_0[1]>>1); - - for (idx = sin_step,i=1; i<(M+1)>>1; i++, idx+=sin_step) - { - FIXP_STP twd = sin_twiddle[idx]; - - cplxMultDiv2(&accu3, &accu4, accu1, accu2, twd); - pDat_1[0] = -accu3; - pDat_0[1] = -accu4; - - pDat_0+=2; - pDat_1-=2; - - cplxMultDiv2(&accu3, &accu4, pDat_0[1], pDat_0[0], twd); - - accu1 = pDat_1[0]; - accu2 = pDat_1[1]; - - pDat_0[0] = accu3; - pDat_1[1] = -accu4; - } - - if ( (M&1) == 0 ) - { - /* Last Sin and Cos value pair are the same */ - accu1 = fMultDiv2(accu1, WTC(0x5a82799a)); - accu2 = fMultDiv2(accu2, WTC(0x5a82799a)); - - pDat_0[1] = - accu1 - accu2; - pDat_1[0] = accu2 - accu1; - } - } - - /* Add twiddeling scale. */ - *pDat_e += 2; -} -#endif /* !defined(FUNCTION_dst_IV) */ - - diff --git a/libFDK/src/fft.cpp b/libFDK/src/fft.cpp deleted file mode 100644 index ae3c98d..0000000 --- a/libFDK/src/fft.cpp +++ /dev/null @@ -1,1404 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): Josef Hoepfl, DSP Solutions - Description: Fix point FFT - -******************************************************************************/ - -#include "fft.h" - -#include "fft_rad2.h" -#include "FDK_tools_rom.h" - - - - - -#define F3C(x) STC(x) - -#define C31 (F3C(0x91261468)) /* FL2FXCONST_DBL(-0.86602540) */ - -/* Performs the FFT of length 3 according to the algorithm after winograd. - No scaling of the input vector because the scaling is already done in the rotation vector. */ -static FORCEINLINE void fft3(FIXP_DBL *RESTRICT pDat) -{ - FIXP_DBL r1,r2; - FIXP_DBL s1,s2; - /* real part */ - r1 = pDat[2] + pDat[4]; - r2 = fMult((pDat[2] - pDat[4]), C31); - pDat[0] = pDat[0] + r1; - r1 = pDat[0] - r1 - (r1>>1); - - /* imaginary part */ - s1 = pDat[3] + pDat[5]; - s2 = fMult((pDat[3] - pDat[5]), C31); - pDat[1] = pDat[1] + s1; - s1 = pDat[1] - s1 - (s1>>1); - - /* combination */ - pDat[2] = r1 - s2; - pDat[4] = r1 + s2; - pDat[3] = s1 + r2; - pDat[5] = s1 - r2; -} - - -#define F5C(x) STC(x) - -#define C51 (F5C(0x79bc3854)) /* FL2FXCONST_DBL( 0.95105652) */ -#define C52 (F5C(0x9d839db0)) /* FL2FXCONST_DBL(-1.53884180/2) */ -#define C53 (F5C(0xd18053ce)) /* FL2FXCONST_DBL(-0.36327126) */ -#define C54 (F5C(0x478dde64)) /* FL2FXCONST_DBL( 0.55901699) */ -#define C55 (F5C(0xb0000001)) /* FL2FXCONST_DBL(-1.25/2) */ - -/* performs the FFT of length 5 according to the algorithm after winograd */ -static FORCEINLINE void fft5(FIXP_DBL *RESTRICT pDat) -{ - FIXP_DBL r1,r2,r3,r4; - FIXP_DBL s1,s2,s3,s4; - FIXP_DBL t; - - /* real part */ - r1 = pDat[2] + pDat[8]; - r4 = pDat[2] - pDat[8]; - r3 = pDat[4] + pDat[6]; - r2 = pDat[4] - pDat[6]; - t = fMult((r1-r3), C54); - r1 = r1 + r3; - pDat[0] = pDat[0] + r1; - /* Bit shift left because of the constant C55 which was scaled with the factor 0.5 because of the representation of - the values as fracts */ - r1 = pDat[0] + (fMultDiv2(r1, C55) <<(2)); - r3 = r1 - t; - r1 = r1 + t; - t = fMult((r4 + r2), C51); - /* Bit shift left because of the constant C55 which was scaled with the factor 0.5 because of the representation of - the values as fracts */ - r4 = t + (fMultDiv2(r4, C52) <<(2)); - r2 = t + fMult(r2, C53); - - /* imaginary part */ - s1 = pDat[3] + pDat[9]; - s4 = pDat[3] - pDat[9]; - s3 = pDat[5] + pDat[7]; - s2 = pDat[5] - pDat[7]; - t = fMult((s1 - s3), C54); - s1 = s1 + s3; - pDat[1] = pDat[1] + s1; - /* Bit shift left because of the constant C55 which was scaled with the factor 0.5 because of the representation of - the values as fracts */ - s1 = pDat[1] + (fMultDiv2(s1, C55) <<(2)); - s3 = s1 - t; - s1 = s1 + t; - t = fMult((s4 + s2), C51); - /* Bit shift left because of the constant C55 which was scaled with the factor 0.5 because of the representation of - the values as fracts */ - s4 = t + (fMultDiv2(s4, C52) <<(2)); - s2 = t + fMult(s2, C53); - - /* combination */ - pDat[2] = r1 + s2; - pDat[8] = r1 - s2; - pDat[4] = r3 - s4; - pDat[6] = r3 + s4; - - pDat[3] = s1 - r2; - pDat[9] = s1 + r2; - pDat[5] = s3 + r4; - pDat[7] = s3 - r4; -} - - - - -#define N3 3 -#define N5 5 -#define N6 6 -#define N15 15 - -/* Performs the FFT of length 15. It is split into FFTs of length 3 and length 5. */ -static inline void fft15(FIXP_DBL *pInput) -{ - FIXP_DBL aDst[2*N15]; - FIXP_DBL aDst1[2*N15]; - int i,k,l; - - /* Sort input vector for fft's of length 3 - input3(0:2) = [input(0) input(5) input(10)]; - input3(3:5) = [input(3) input(8) input(13)]; - input3(6:8) = [input(6) input(11) input(1)]; - input3(9:11) = [input(9) input(14) input(4)]; - input3(12:14) = [input(12) input(2) input(7)]; */ - { - const FIXP_DBL *pSrc = pInput; - FIXP_DBL *RESTRICT pDst = aDst; - /* Merge 3 loops into one, skip call of fft3 */ - for(i=0,l=0,k=0; i= (2*N15)) - l -= (2*N15); - - pDst[k+2] = pSrc[l]; - pDst[k+3] = pSrc[l+1]; - l += 2*N5; - if (l >= (2*N15)) - l -= (2*N15); - pDst[k+4] = pSrc[l]; - pDst[k+5] = pSrc[l+1]; - l += (2*N5) + (2*N3); - if (l >= (2*N15)) - l -= (2*N15); - - /* fft3 merged with shift right by 2 loop */ - FIXP_DBL r1,r2,r3; - FIXP_DBL s1,s2; - /* real part */ - r1 = pDst[k+2] + pDst[k+4]; - r2 = fMult((pDst[k+2] - pDst[k+4]), C31); - s1 = pDst[k+0]; - pDst[k+0] = (s1 + r1)>>2; - r1 = s1 - (r1>>1); - - /* imaginary part */ - s1 = pDst[k+3] + pDst[k+5]; - s2 = fMult((pDst[k+3] - pDst[k+5]), C31); - r3 = pDst[k+1]; - pDst[k+1] = (r3 + s1)>>2; - s1 = r3 - (s1>>1); - - /* combination */ - pDst[k+2] = (r1 - s2)>>2; - pDst[k+4] = (r1 + s2)>>2; - pDst[k+3] = (s1 + r2)>>2; - pDst[k+5] = (s1 - r2)>>2; - } - } - /* Sort input vector for fft's of length 5 - input5(0:4) = [output3(0) output3(3) output3(6) output3(9) output3(12)]; - input5(5:9) = [output3(1) output3(4) output3(7) output3(10) output3(13)]; - input5(10:14) = [output3(2) output3(5) output3(8) output3(11) output3(14)]; */ - /* Merge 2 loops into one, brings about 10% */ - { - const FIXP_DBL *pSrc = aDst; - FIXP_DBL *RESTRICT pDst = aDst1; - for(i=0,l=0,k=0; i= (2*N15)) - l -= (2*N15); - pDst[k+2] = pSrc[l]; - pDst[k+3] = pSrc[l+1]; - l += (2*N6); - if (l >= (2*N15)) - l -= (2*N15); - pDst[k+4] = pSrc[l]; - pDst[k+5] = pSrc[l+1]; - l += (2*N6); - if (l >= (2*N15)) - l -= (2*N15); - pDst[k+6] = pSrc[l]; - pDst[k+7] = pSrc[l+1]; - l += (2*N6); - if (l >= (2*N15)) - l -= (2*N15); - pDst[k+8] = pSrc[l]; - pDst[k+9] = pSrc[l+1]; - l += 2; /* no modulo check needed, it cannot occur */ - } - } -} - -#define W_PiFOURTH STC(0x5a82799a) -#ifndef SUMDIFF_PIFOURTH -#define SUMDIFF_PIFOURTH(diff,sum,a,b) \ - { \ - FIXP_DBL wa, wb;\ - wa = fMultDiv2(a, W_PiFOURTH);\ - wb = fMultDiv2(b, W_PiFOURTH);\ - diff = wb - wa;\ - sum = wb + wa;\ - } -#endif - -/* This version is more overflow save, but less cycle optimal. */ -#define SUMDIFF_EIGTH(x, y, ix, iy, vr, vi, ur, ui) \ - vr = (x[ 0 + ix]>>1) + (x[16 + ix]>>1); /* Re A + Re B */ \ - vi = (x[ 8 + ix]>>1) + (x[24 + ix]>>1); /* Re C + Re D */ \ - ur = (x[ 1 + ix]>>1) + (x[17 + ix]>>1); /* Im A + Im B */ \ - ui = (x[ 9 + ix]>>1) + (x[25 + ix]>>1); /* Im C + Im D */ \ - y[ 0 + iy] = vr + vi; /* Re A' = ReA + ReB +ReC + ReD */ \ - y[ 4 + iy] = vr - vi; /* Re C' = -(ReC+ReD) + (ReA+ReB) */ \ - y[ 1 + iy] = ur + ui; /* Im A' = sum of imag values */ \ - y[ 5 + iy] = ur - ui; /* Im C' = -Im C -Im D +Im A +Im B */ \ - vr -= x[16 + ix]; /* Re A - Re B */ \ - vi = vi - x[24 + ix]; /* Re C - Re D */ \ - ur -= x[17 + ix]; /* Im A - Im B */ \ - ui = ui - x[25 + ix]; /* Im C - Im D */ \ - y[ 2 + iy] = ui + vr; /* Re B' = Im C - Im D + Re A - Re B */ \ - y[ 6 + iy] = vr - ui; /* Re D' = -Im C + Im D + Re A - Re B */ \ - y[ 3 + iy] = ur - vi; /* Im B'= -Re C + Re D + Im A - Im B */ \ - y[ 7 + iy] = vi + ur; /* Im D'= Re C - Re D + Im A - Im B */ - -static const FIXP_STP fft16_w16[2] = { STCP(0x7641af3d, 0x30fbc54d), STCP(0x30fbc54d, 0x7641af3d) }; - -LNK_SECTION_CODE_L1 -inline void fft_16(FIXP_DBL *RESTRICT x) -{ - FIXP_DBL vr, vi, ur, ui; - FIXP_DBL y[32]; - - SUMDIFF_EIGTH(x, y, 0, 0, vr, vi, ur, ui); - SUMDIFF_EIGTH(x, y, 4, 8, vr, vi, ur, ui); - SUMDIFF_EIGTH(x, y, 2, 16, vr, vi, ur, ui); - SUMDIFF_EIGTH(x, y, 6, 24, vr, vi, ur, ui); - -// xt1 = 0 -// xt2 = 8 - vr = y[ 8]; - vi = y[ 9]; - ur = y[ 0]>>1; - ui = y[ 1]>>1; - x[ 0] = ur + (vr>>1); - x[ 1] = ui + (vi>>1); - x[ 8] = ur - (vr>>1); - x[ 9] = ui - (vi>>1); - -// xt1 = 4 -// xt2 = 12 - vr = y[13]; - vi = y[12]; - ur = y[ 4]>>1; - ui = y[ 5]>>1; - x[ 4] = ur + (vr>>1); - x[ 5] = ui - (vi>>1); - x[12] = ur - (vr>>1); - x[13] = ui + (vi>>1); - -// xt1 = 16 -// xt2 = 24 - vr = y[24]; - vi = y[25]; - ur = y[16]>>1; - ui = y[17]>>1; - x[16] = ur + (vr>>1); - x[17] = ui + (vi>>1); - x[24] = ur - (vr>>1); - x[25] = ui - (vi>>1); - -// xt1 = 20 -// xt2 = 28 - vr = y[29]; - vi = y[28]; - ur = y[20]>>1; - ui = y[21]>>1; - x[20] = ur + (vr>>1); - x[21] = ui - (vi>>1); - x[28] = ur - (vr>>1); - x[29] = ui + (vi>>1); - - // xt1 = 2 -// xt2 = 10 - SUMDIFF_PIFOURTH(vi, vr, y[10], y[11]) - //vr = fMultDiv2((y[11] + y[10]),W_PiFOURTH); - //vi = fMultDiv2((y[11] - y[10]),W_PiFOURTH); - ur = y[ 2]; - ui = y[ 3]; - x[ 2] = (ur>>1) + vr; - x[ 3] = (ui>>1) + vi; - x[10] = (ur>>1) - vr; - x[11] = (ui>>1) - vi; - -// xt1 = 6 -// xt2 = 14 - SUMDIFF_PIFOURTH(vr, vi, y[14], y[15]) - ur = y[ 6]; - ui = y[ 7]; - x[ 6] = (ur>>1) + vr; - x[ 7] = (ui>>1) - vi; - x[14] = (ur>>1) - vr; - x[15] = (ui>>1) + vi; - -// xt1 = 18 -// xt2 = 26 - SUMDIFF_PIFOURTH(vi, vr, y[26], y[27]) - ur = y[18]; - ui = y[19]; - x[18] = (ur>>1) + vr; - x[19] = (ui>>1) + vi; - x[26] = (ur>>1) - vr; - x[27] = (ui>>1) - vi; - -// xt1 = 22 -// xt2 = 30 - SUMDIFF_PIFOURTH(vr, vi, y[30], y[31]) - ur = y[22]; - ui = y[23]; - x[22] = (ur>>1) + vr; - x[23] = (ui>>1) - vi; - x[30] = (ur>>1) - vr; - x[31] = (ui>>1) + vi; - -// xt1 = 0 -// xt2 = 16 - vr = x[16]; - vi = x[17]; - ur = x[ 0]>>1; - ui = x[ 1]>>1; - x[ 0] = ur + (vr>>1); - x[ 1] = ui + (vi>>1); - x[16] = ur - (vr>>1); - x[17] = ui - (vi>>1); - -// xt1 = 8 -// xt2 = 24 - vi = x[24]; - vr = x[25]; - ur = x[ 8]>>1; - ui = x[ 9]>>1; - x[ 8] = ur + (vr>>1); - x[ 9] = ui - (vi>>1); - x[24] = ur - (vr>>1); - x[25] = ui + (vi>>1); - -// xt1 = 2 -// xt2 = 18 - cplxMultDiv2(&vi, &vr, x[19], x[18], fft16_w16[0]); - ur = x[ 2]; - ui = x[ 3]; - x[ 2] = (ur>>1) + vr; - x[ 3] = (ui>>1) + vi; - x[18] = (ur>>1) - vr; - x[19] = (ui>>1) - vi; - -// xt1 = 10 -// xt2 = 26 - cplxMultDiv2(&vr, &vi, x[27], x[26], fft16_w16[0]); - ur = x[10]; - ui = x[11]; - x[10] = (ur>>1) + vr; - x[11] = (ui>>1) - vi; - x[26] = (ur>>1) - vr; - x[27] = (ui>>1) + vi; - -// xt1 = 4 -// xt2 = 20 - SUMDIFF_PIFOURTH(vi, vr, x[20], x[21]) - ur = x[ 4]; - ui = x[ 5]; - x[ 4] = (ur>>1) + vr; - x[ 5] = (ui>>1) + vi; - x[20] = (ur>>1) - vr; - x[21] = (ui>>1) - vi; - -// xt1 = 12 -// xt2 = 28 - SUMDIFF_PIFOURTH(vr, vi, x[28], x[29]) - ur = x[12]; - ui = x[13]; - x[12] = (ur>>1) + vr; - x[13] = (ui>>1) - vi; - x[28] = (ur>>1) - vr; - x[29] = (ui>>1) + vi; - -// xt1 = 6 -// xt2 = 22 - cplxMultDiv2(&vi, &vr, x[23], x[22], fft16_w16[1]); - ur = x[ 6]; - ui = x[ 7]; - x[ 6] = (ur>>1) + vr; - x[ 7] = (ui>>1) + vi; - x[22] = (ur>>1) - vr; - x[23] = (ui>>1) - vi; - -// xt1 = 14 -// xt2 = 30 - cplxMultDiv2(&vr, &vi, x[31], x[30], fft16_w16[1]); - ur = x[14]; - ui = x[15]; - x[14] = (ur>>1) + vr; - x[15] = (ui>>1) - vi; - x[30] = (ur>>1) - vr; - x[31] = (ui>>1) + vi; -} - -#ifndef FUNCTION_fft_32 -static const FIXP_STP fft32_w32[6] = -{ - STCP (0x7641af3d, 0x30fbc54d), STCP(0x30fbc54d, 0x7641af3d), STCP(0x7d8a5f40, 0x18f8b83c), - STCP (0x6a6d98a4, 0x471cece7), STCP(0x471cece7, 0x6a6d98a4), STCP(0x18f8b83c, 0x7d8a5f40) -}; - -LNK_SECTION_CODE_L1 -inline void fft_32(FIXP_DBL *x) -{ - -#define W_PiFOURTH STC(0x5a82799a) - - FIXP_DBL vr,vi,ur,ui; - FIXP_DBL y[64]; - - /* - * 1+2 stage radix 4 - */ - -///////////////////////////////////////////////////////////////////////////////////////// - - // i = 0 - vr = (x[ 0] + x[32])>>1; /* Re A + Re B */ - vi = (x[16] + x[48]); /* Re C + Re D */ - ur = (x[ 1] + x[33])>>1; /* Im A + Im B */ - ui = (x[17] + x[49]); /* Im C + Im D */ - - y[ 0] = vr + (vi>>1); /* Re A' = ReA + ReB +ReC + ReD */ - y[ 4] = vr - (vi>>1); /* Re C' = -(ReC+ReD) + (ReA+ReB) */ - y[ 1] = ur + (ui>>1); /* Im A' = sum of imag values */ - y[ 5] = ur - (ui>>1); /* Im C' = -Im C -Im D +Im A +Im B */ - - vr -= x[32]; /* Re A - Re B */ - vi = (vi>>1) - x[48]; /* Re C - Re D */ - ur -= x[33]; /* Im A - Im B */ - ui = (ui>>1) - x[49]; /* Im C - Im D */ - - y[ 2] = ui + vr; /* Re B' = Im C - Im D + Re A - Re B */ - y[ 6] = vr - ui; /* Re D' = -Im C + Im D + Re A - Re B */ - y[ 3] = ur - vi; /* Im B'= -Re C + Re D + Im A - Im B */ - y[ 7] = vi + ur; /* Im D'= Re C - Re D + Im A - Im B */ - - //i=8 - vr = (x[ 8] + x[40])>>1; /* Re A + Re B */ - vi = (x[24] + x[56]); /* Re C + Re D */ - ur = (x[ 9] + x[41])>>1; /* Im A + Im B */ - ui = (x[25] + x[57]); /* Im C + Im D */ - - y[ 8] = vr + (vi>>1); /* Re A' = ReA + ReB +ReC + ReD */ - y[12] = vr - (vi>>1); /* Re C' = -(ReC+ReD) + (ReA+ReB) */ - y[ 9] = ur + (ui>>1); /* Im A' = sum of imag values */ - y[13] = ur - (ui>>1); /* Im C' = -Im C -Im D +Im A +Im B */ - - vr -= x[40]; /* Re A - Re B */ - vi = (vi>>1) - x[56]; /* Re C - Re D */ - ur -= x[41]; /* Im A - Im B */ - ui = (ui>>1) - x[57]; /* Im C - Im D */ - - y[10] = ui + vr; /* Re B' = Im C - Im D + Re A - Re B */ - y[14] = vr - ui; /* Re D' = -Im C + Im D + Re A - Re B */ - y[11] = ur - vi; /* Im B'= -Re C + Re D + Im A - Im B */ - y[15] = vi + ur; /* Im D'= Re C - Re D + Im A - Im B */ - - //i=16 - vr = (x[ 4] + x[36])>>1; /* Re A + Re B */ - vi = (x[20] + x[52]); /* Re C + Re D */ - ur = (x[ 5] + x[37])>>1; /* Im A + Im B */ - ui = (x[21] + x[53]); /* Im C + Im D */ - - y[16] = vr + (vi>>1); /* Re A' = ReA + ReB +ReC + ReD */ - y[20] = vr - (vi>>1); /* Re C' = -(ReC+ReD) + (ReA+ReB) */ - y[17] = ur + (ui>>1); /* Im A' = sum of imag values */ - y[21] = ur - (ui>>1); /* Im C' = -Im C -Im D +Im A +Im B */ - - vr -= x[36]; /* Re A - Re B */ - vi = (vi>>1) - x[52]; /* Re C - Re D */ - ur -= x[37]; /* Im A - Im B */ - ui = (ui>>1) - x[53]; /* Im C - Im D */ - - y[18] = ui + vr; /* Re B' = Im C - Im D + Re A - Re B */ - y[22] = vr - ui; /* Re D' = -Im C + Im D + Re A - Re B */ - y[19] = ur - vi; /* Im B'= -Re C + Re D + Im A - Im B */ - y[23] = vi + ur; /* Im D'= Re C - Re D + Im A - Im B */ - - //i=24 - vr = (x[12] + x[44])>>1; /* Re A + Re B */ - vi = (x[28] + x[60]); /* Re C + Re D */ - ur = (x[13] + x[45])>>1; /* Im A + Im B */ - ui = (x[29] + x[61]); /* Im C + Im D */ - - y[24] = vr + (vi>>1); /* Re A' = ReA + ReB +ReC + ReD */ - y[28] = vr - (vi>>1); /* Re C' = -(ReC+ReD) + (ReA+ReB) */ - y[25] = ur + (ui>>1); /* Im A' = sum of imag values */ - y[29] = ur - (ui>>1); /* Im C' = -Im C -Im D +Im A +Im B */ - - vr -= x[44]; /* Re A - Re B */ - vi = (vi>>1) - x[60]; /* Re C - Re D */ - ur -= x[45]; /* Im A - Im B */ - ui = (ui>>1) - x[61]; /* Im C - Im D */ - - y[26] = ui + vr; /* Re B' = Im C - Im D + Re A - Re B */ - y[30] = vr - ui; /* Re D' = -Im C + Im D + Re A - Re B */ - y[27] = ur - vi; /* Im B'= -Re C + Re D + Im A - Im B */ - y[31] = vi + ur; /* Im D'= Re C - Re D + Im A - Im B */ - - // i = 32 - vr = (x[ 2] + x[34])>>1; /* Re A + Re B */ - vi = (x[18] + x[50]); /* Re C + Re D */ - ur = (x[ 3] + x[35])>>1; /* Im A + Im B */ - ui = (x[19] + x[51]); /* Im C + Im D */ - - y[32] = vr + (vi>>1); /* Re A' = ReA + ReB +ReC + ReD */ - y[36] = vr - (vi>>1); /* Re C' = -(ReC+ReD) + (ReA+ReB) */ - y[33] = ur + (ui>>1); /* Im A' = sum of imag values */ - y[37] = ur - (ui>>1); /* Im C' = -Im C -Im D +Im A +Im B */ - - vr -= x[34]; /* Re A - Re B */ - vi = (vi>>1) - x[50]; /* Re C - Re D */ - ur -= x[35]; /* Im A - Im B */ - ui = (ui>>1) - x[51]; /* Im C - Im D */ - - y[34] = ui + vr; /* Re B' = Im C - Im D + Re A - Re B */ - y[38] = vr - ui; /* Re D' = -Im C + Im D + Re A - Re B */ - y[35] = ur - vi; /* Im B'= -Re C + Re D + Im A - Im B */ - y[39] = vi + ur; /* Im D'= Re C - Re D + Im A - Im B */ - - //i=40 - vr = (x[10] + x[42])>>1; /* Re A + Re B */ - vi = (x[26] + x[58]); /* Re C + Re D */ - ur = (x[11] + x[43])>>1; /* Im A + Im B */ - ui = (x[27] + x[59]); /* Im C + Im D */ - - y[40] = vr + (vi>>1); /* Re A' = ReA + ReB +ReC + ReD */ - y[44] = vr - (vi>>1); /* Re C' = -(ReC+ReD) + (ReA+ReB) */ - y[41] = ur + (ui>>1); /* Im A' = sum of imag values */ - y[45] = ur - (ui>>1); /* Im C' = -Im C -Im D +Im A +Im B */ - - vr -= x[42]; /* Re A - Re B */ - vi = (vi>>1) - x[58]; /* Re C - Re D */ - ur -= x[43]; /* Im A - Im B */ - ui = (ui>>1) - x[59]; /* Im C - Im D */ - - y[42] = ui + vr; /* Re B' = Im C - Im D + Re A - Re B */ - y[46] = vr - ui; /* Re D' = -Im C + Im D + Re A - Re B */ - y[43] = ur - vi; /* Im B'= -Re C + Re D + Im A - Im B */ - y[47] = vi + ur; /* Im D'= Re C - Re D + Im A - Im B */ - - //i=48 - vr = (x[ 6] + x[38])>>1; /* Re A + Re B */ - vi = (x[22] + x[54]); /* Re C + Re D */ - ur = (x[ 7] + x[39])>>1; /* Im A + Im B */ - ui = (x[23] + x[55]); /* Im C + Im D */ - - y[48] = vr + (vi>>1); /* Re A' = ReA + ReB +ReC + ReD */ - y[52] = vr - (vi>>1); /* Re C' = -(ReC+ReD) + (ReA+ReB) */ - y[49] = ur + (ui>>1); /* Im A' = sum of imag values */ - y[53] = ur - (ui>>1); /* Im C' = -Im C -Im D +Im A +Im B */ - - vr -= x[38]; /* Re A - Re B */ - vi = (vi>>1) - x[54]; /* Re C - Re D */ - ur -= x[39]; /* Im A - Im B */ - ui = (ui>>1) - x[55]; /* Im C - Im D */ - - y[50] = ui + vr; /* Re B' = Im C - Im D + Re A - Re B */ - y[54] = vr - ui; /* Re D' = -Im C + Im D + Re A - Re B */ - y[51] = ur - vi; /* Im B'= -Re C + Re D + Im A - Im B */ - y[55] = vi + ur; /* Im D'= Re C - Re D + Im A - Im B */ - - //i=56 - vr = (x[14] + x[46])>>1; /* Re A + Re B */ - vi = (x[30] + x[62]); /* Re C + Re D */ - ur = (x[15] + x[47])>>1; /* Im A + Im B */ - ui = (x[31] + x[63]); /* Im C + Im D */ - - y[56] = vr + (vi>>1); /* Re A' = ReA + ReB +ReC + ReD */ - y[60] = vr - (vi>>1); /* Re C' = -(ReC+ReD) + (ReA+ReB) */ - y[57] = ur + (ui>>1); /* Im A' = sum of imag values */ - y[61] = ur - (ui>>1); /* Im C' = -Im C -Im D +Im A +Im B */ - - vr -= x[46]; /* Re A - Re B */ - vi = (vi>>1) - x[62]; /* Re C - Re D */ - ur -= x[47]; /* Im A - Im B */ - ui = (ui>>1) - x[63]; /* Im C - Im D */ - - y[58] = ui + vr; /* Re B' = Im C - Im D + Re A - Re B */ - y[62] = vr - ui; /* Re D' = -Im C + Im D + Re A - Re B */ - y[59] = ur - vi; /* Im B'= -Re C + Re D + Im A - Im B */ - y[63] = vi + ur; /* Im D'= Re C - Re D + Im A - Im B */ - - - FIXP_DBL *xt = &x[0]; - FIXP_DBL *yt = &y[0]; - - int j = 4; - do - { - vr = yt[8]; - vi = yt[9]; - ur = yt[0]>>1; - ui = yt[1]>>1; - xt[ 0] = ur + (vr>>1); - xt[ 1] = ui + (vi>>1); - xt[ 8] = ur - (vr>>1); - xt[ 9] = ui - (vi>>1); - - vr = yt[13]; - vi = yt[12]; - ur = yt[4]>>1; - ui = yt[5]>>1; - xt[ 4] = ur + (vr>>1); - xt[ 5] = ui - (vi>>1); - xt[12] = ur - (vr>>1); - xt[13] = ui + (vi>>1); - - SUMDIFF_PIFOURTH(vi, vr, yt[10], yt[11]) - ur = yt[2]; - ui = yt[3]; - xt[ 2] = (ur>>1) + vr; - xt[ 3] = (ui>>1) + vi; - xt[10] = (ur>>1) - vr; - xt[11] = (ui>>1) - vi; - - SUMDIFF_PIFOURTH(vr, vi, yt[14], yt[15]) - ur = yt[6]; - ui = yt[7]; - - xt[ 6] = (ur>>1) + vr; - xt[ 7] = (ui>>1) - vi; - xt[14] = (ur>>1) - vr; - xt[15] = (ui>>1) + vi; - xt += 16; - yt += 16; - } while (--j != 0); - - vr = x[16]; - vi = x[17]; - ur = x[ 0]>>1; - ui = x[ 1]>>1; - x[ 0] = ur + (vr>>1); - x[ 1] = ui + (vi>>1); - x[16] = ur - (vr>>1); - x[17] = ui - (vi>>1); - - vi = x[24]; - vr = x[25]; - ur = x[ 8]>>1; - ui = x[ 9]>>1; - x[ 8] = ur + (vr>>1); - x[ 9] = ui - (vi>>1); - x[24] = ur - (vr>>1); - x[25] = ui + (vi>>1); - - vr = x[48]; - vi = x[49]; - ur = x[32]>>1; - ui = x[33]>>1; - x[32] = ur + (vr>>1); - x[33] = ui + (vi>>1); - x[48] = ur - (vr>>1); - x[49] = ui - (vi>>1); - - vi = x[56]; - vr = x[57]; - ur = x[40]>>1; - ui = x[41]>>1; - x[40] = ur + (vr>>1); - x[41] = ui - (vi>>1); - x[56] = ur - (vr>>1); - x[57] = ui + (vi>>1); - - cplxMultDiv2(&vi, &vr, x[19], x[18], fft32_w32[0]); - ur = x[ 2]; - ui = x[ 3]; - x[ 2] = (ur>>1) + vr; - x[ 3] = (ui>>1) + vi; - x[18] = (ur>>1) - vr; - x[19] = (ui>>1) - vi; - - cplxMultDiv2(&vr, &vi, x[27], x[26], fft32_w32[0]); - ur = x[10]; - ui = x[11]; - x[10] = (ur>>1) + vr; - x[11] = (ui>>1) - vi; - x[26] = (ur>>1) - vr; - x[27] = (ui>>1) + vi; - - cplxMultDiv2(&vi, &vr, x[51], x[50], fft32_w32[0]); - ur = x[34]; - ui = x[35]; - x[34] = (ur>>1) + vr; - x[35] = (ui>>1) + vi; - x[50] = (ur>>1) - vr; - x[51] = (ui>>1) - vi; - - cplxMultDiv2(&vr, &vi, x[59], x[58], fft32_w32[0]); - ur = x[42]; - ui = x[43]; - x[42] = (ur>>1) + vr; - x[43] = (ui>>1) - vi; - x[58] = (ur>>1) - vr; - x[59] = (ui>>1) + vi; - - SUMDIFF_PIFOURTH(vi, vr, x[20], x[21]) - ur = x[ 4]; - ui = x[ 5]; - x[ 4] = (ur>>1) + vr; - x[ 5] = (ui>>1) + vi; - x[20] = (ur>>1) - vr; - x[21] = (ui>>1) - vi; - - SUMDIFF_PIFOURTH(vr, vi, x[28], x[29]) - ur = x[12]; - ui = x[13]; - x[12] = (ur>>1) + vr; - x[13] = (ui>>1) - vi; - x[28] = (ur>>1) - vr; - x[29] = (ui>>1) + vi; - - SUMDIFF_PIFOURTH(vi, vr, x[52], x[53]) - ur = x[36]; - ui = x[37]; - x[36] = (ur>>1) + vr; - x[37] = (ui>>1) + vi; - x[52] = (ur>>1) - vr; - x[53] = (ui>>1) - vi; - - SUMDIFF_PIFOURTH(vr, vi, x[60], x[61]) - ur = x[44]; - ui = x[45]; - x[44] = (ur>>1) + vr; - x[45] = (ui>>1) - vi; - x[60] = (ur>>1) - vr; - x[61] = (ui>>1) + vi; - - - cplxMultDiv2(&vi, &vr, x[23], x[22], fft32_w32[1]); - ur = x[ 6]; - ui = x[ 7]; - x[ 6] = (ur>>1) + vr; - x[ 7] = (ui>>1) + vi; - x[22] = (ur>>1) - vr; - x[23] = (ui>>1) - vi; - - cplxMultDiv2(&vr, &vi, x[31], x[30], fft32_w32[1]); - ur = x[14]; - ui = x[15]; - x[14] = (ur>>1) + vr; - x[15] = (ui>>1) - vi; - x[30] = (ur>>1) - vr; - x[31] = (ui>>1) + vi; - - cplxMultDiv2(&vi, &vr, x[55], x[54], fft32_w32[1]); - ur = x[38]; - ui = x[39]; - x[38] = (ur>>1) + vr; - x[39] = (ui>>1) + vi; - x[54] = (ur>>1) - vr; - x[55] = (ui>>1) - vi; - - cplxMultDiv2(&vr, &vi, x[63], x[62], fft32_w32[1]); - ur = x[46]; - ui = x[47]; - - x[46] = (ur>>1) + vr; - x[47] = (ui>>1) - vi; - x[62] = (ur>>1) - vr; - x[63] = (ui>>1) + vi; - - vr = x[32]; - vi = x[33]; - ur = x[ 0]>>1; - ui = x[ 1]>>1; - x[ 0] = ur + (vr>>1); - x[ 1] = ui + (vi>>1); - x[32] = ur - (vr>>1); - x[33] = ui - (vi>>1); - - vi = x[48]; - vr = x[49]; - ur = x[16]>>1; - ui = x[17]>>1; - x[16] = ur + (vr>>1); - x[17] = ui - (vi>>1); - x[48] = ur - (vr>>1); - x[49] = ui + (vi>>1); - - cplxMultDiv2(&vi, &vr, x[35], x[34], fft32_w32[2]); - ur = x[ 2]; - ui = x[ 3]; - x[ 2] = (ur>>1) + vr; - x[ 3] = (ui>>1) + vi; - x[34] = (ur>>1) - vr; - x[35] = (ui>>1) - vi; - - cplxMultDiv2(&vr, &vi, x[51], x[50], fft32_w32[2]); - ur = x[18]; - ui = x[19]; - x[18] = (ur>>1) + vr; - x[19] = (ui>>1) - vi; - x[50] = (ur>>1) - vr; - x[51] = (ui>>1) + vi; - - cplxMultDiv2(&vi, &vr, x[37], x[36], fft32_w32[0]); - ur = x[ 4]; - ui = x[ 5]; - x[ 4] = (ur>>1) + vr; - x[ 5] = (ui>>1) + vi; - x[36] = (ur>>1) - vr; - x[37] = (ui>>1) - vi; - - cplxMultDiv2(&vr, &vi, x[53], x[52], fft32_w32[0]); - ur = x[20]; - ui = x[21]; - x[20] = (ur>>1) + vr; - x[21] = (ui>>1) - vi; - x[52] = (ur>>1) - vr; - x[53] = (ui>>1) + vi; - - cplxMultDiv2(&vi, &vr, x[39], x[38], fft32_w32[3]); - ur = x[ 6]; - ui = x[ 7]; - x[ 6] = (ur>>1) + vr; - x[ 7] = (ui>>1) + vi; - x[38] = (ur>>1) - vr; - x[39] = (ui>>1) - vi; - - cplxMultDiv2(&vr, &vi, x[55], x[54], fft32_w32[3]); - ur = x[22]; - ui = x[23]; - x[22] = (ur>>1) + vr; - x[23] = (ui>>1) - vi; - x[54] = (ur>>1) - vr; - x[55] = (ui>>1) + vi; - - SUMDIFF_PIFOURTH(vi, vr, x[40], x[41]) - ur = x[ 8]; - ui = x[ 9]; - x[ 8] = (ur>>1) + vr; - x[ 9] = (ui>>1) + vi; - x[40] = (ur>>1) - vr; - x[41] = (ui>>1) - vi; - - SUMDIFF_PIFOURTH(vr, vi, x[56], x[57]) - ur = x[24]; - ui = x[25]; - x[24] = (ur>>1) + vr; - x[25] = (ui>>1) - vi; - x[56] = (ur>>1) - vr; - x[57] = (ui>>1) + vi; - - cplxMultDiv2(&vi, &vr, x[43], x[42], fft32_w32[4]); - ur = x[10]; - ui = x[11]; - - x[10] = (ur>>1) + vr; - x[11] = (ui>>1) + vi; - x[42] = (ur>>1) - vr; - x[43] = (ui>>1) - vi; - - cplxMultDiv2(&vr, &vi, x[59], x[58], fft32_w32[4]); - ur = x[26]; - ui = x[27]; - x[26] = (ur>>1) + vr; - x[27] = (ui>>1) - vi; - x[58] = (ur>>1) - vr; - x[59] = (ui>>1) + vi; - - cplxMultDiv2(&vi, &vr, x[45], x[44], fft32_w32[1]); - ur = x[12]; - ui = x[13]; - x[12] = (ur>>1) + vr; - x[13] = (ui>>1) + vi; - x[44] = (ur>>1) - vr; - x[45] = (ui>>1) - vi; - - cplxMultDiv2(&vr, &vi, x[61], x[60], fft32_w32[1]); - ur = x[28]; - ui = x[29]; - x[28] = (ur>>1) + vr; - x[29] = (ui>>1) - vi; - x[60] = (ur>>1) - vr; - x[61] = (ui>>1) + vi; - - cplxMultDiv2(&vi, &vr, x[47], x[46], fft32_w32[5]); - ur = x[14]; - ui = x[15]; - x[14] = (ur>>1) + vr; - x[15] = (ui>>1) + vi; - x[46] = (ur>>1) - vr; - x[47] = (ui>>1) - vi; - - cplxMultDiv2(&vr, &vi, x[63], x[62], fft32_w32[5]); - ur = x[30]; - ui = x[31]; - x[30] = (ur>>1) + vr; - x[31] = (ui>>1) - vi; - x[62] = (ur>>1) - vr; - x[63] = (ui>>1) + vi; -} -#endif /* #ifndef FUNCTION_fft_32 */ - - -/** - * \brief Apply rotation vectors to a data buffer. - * \param cl length of each row of input data. - * \param l total length of input data. - * \param pVecRe real part of rotation ceofficient vector. - * \param pVecIm imaginary part of rotation ceofficient vector. - */ -static inline void fft_apply_rot_vector(FIXP_DBL *RESTRICT pData, const int cl, const int l, const FIXP_STB *pVecRe, const FIXP_STB *pVecIm) -{ - FIXP_DBL re, im; - FIXP_STB vre, vim; - - int i, c; - - for(i=0; i>2; /* * 0.25 */ - pData[2*i+1] = im>>2; /* * 0.25 */ - } - for(; i>2; /* * 0.25 */ - pData[2*i+1] = im>>2; /* * 0.25 */ - - for (c=i+1; c>1; - im = pData[2*c+1]>>1; - vre = *pVecRe++; - vim = *pVecIm++; - - cplxMultDiv2(&pData[2*c+1], &pData[2*c], im, re, vre, vim); - } - } -} - -//FIXME:buggy for fft480 -//#define FFT_TWO_STAGE_MACRO_ENABLE - - -#ifdef FFT_TWO_STAGE_MACRO_ENABLE - -#define fftN2(pInput, length, dim1, dim2, fft_func1, fft_func2, RotVectorReal, RotVectorImag) \ -{ \ - int i, j; \ - \ - C_ALLOC_SCRATCH_START(aDst, FIXP_DBL, length*2); \ - C_ALLOC_SCRATCH_START(aDst2, FIXP_DBL, dim2*2); \ - \ - FDK_ASSERT(length == dim1*dim2); \ - \ - /* Perform dim2 times the fft of length dim1. The input samples are at the address of pSrc and the \ - output samples are at the address of pDst. The input vector for the fft of length dim1 is built \ - of the interleaved samples in pSrc, the output samples are stored consecutively. \ - */ \ - { \ - const FIXP_DBL* pSrc = pInput; \ - FIXP_DBL *RESTRICT pDst = aDst; \ - \ - for(i=0; i>1; /* Re A + Re B */ - a10 = (x[i + 4] + x[i + 6])>>1; /* Re C + Re D */ - a20 = (x[i + 1] + x[i + 3])>>1; /* Im A + Im B */ - a30 = (x[i + 5] + x[i + 7])>>1; /* Im C + Im D */ - - x[i + 0] = a00 + a10; /* Re A' = Re A + Re B + Re C + Re D */ - x[i + 4] = a00 - a10; /* Re C' = Re A + Re B - Re C - Re D */ - x[i + 1] = a20 + a30; /* Im A' = Im A + Im B + Im C + Im D */ - x[i + 5] = a20 - a30; /* Im C' = Im A + Im B - Im C - Im D */ - - a00 = a00 - x[i + 2]; /* Re A - Re B */ - a10 = a10 - x[i + 6]; /* Re C - Re D */ - a20 = a20 - x[i + 3]; /* Im A - Im B */ - a30 = a30 - x[i + 7]; /* Im C - Im D */ - - x[i + 2] = a00 + a30; /* Re B' = Re A - Re B + Im C - Im D */ - x[i + 6] = a00 - a30; /* Re D' = Re A - Re B - Im C + Im D */ - x[i + 3] = a20 - a10; /* Im B' = Im A - Im B - Re C + Re D */ - x[i + 7] = a20 + a10; /* Im D' = Im A - Im B + Re C - Re D */ - } - - for(ldm=3; ldm<=ldn; ++ldm) - { - INT m=(1<>1); - INT j,r; - - trigstep=((trigDataSize << 2)>>ldm); - - FDK_ASSERT(trigstep > 0); - - /* Do first iteration with c=1.0 and s=0.0 separately to avoid loosing to much precision. - Beware: The impact on the overal FFT precision is rather large. */ - { - j = 0; - - for(r=0; r>1; - vr = x[t2]>>1; - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur+vr; - x[t1+1] = ui+vi; - - x[t2] = ur-vr; - x[t2+1] = ui-vi; - - t1 += mh; - t2 = t1+(mh<<1); - - //cplxMultDiv2(&vr, &vi, x[t2+1], x[t2], (FIXP_SGL)1.0, (FIXP_SGL)0.0); - vr = x[t2+1]>>1; - vi = x[t2]>>1; - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur+vr; - x[t1+1] = ui-vi; - - x[t2] = ur-vr; - x[t2+1] = ui+vi; - } - } - for(j=1; j>1; - ui = x[t1+1]>>1; - - x[t1] = ur+vr; - x[t1+1] = ui+vi; - - x[t2] = ur-vr; - x[t2+1] = ui-vi; - - t1 += mh; - t2 = t1+(mh<<1); - - cplxMultDiv2(&vr, &vi, x[t2+1], x[t2], cs); - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur+vr; - x[t1+1] = ui-vi; - - x[t2] = ur-vr; - x[t2+1] = ui+vi; - - /* Same as above but for t1,t2 with j>mh/4 and thus cs swapped */ - t1 = (r+mh/2-j)<<1; - t2 = t1 + (mh<<1); - - cplxMultDiv2(&vi, &vr, x[t2], x[t2+1], cs); - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur+vr; - x[t1+1] = ui-vi; - - x[t2] = ur-vr; - x[t2+1] = ui+vi; - - t1 += mh; - t2 = t1+(mh<<1); - - cplxMultDiv2(&vr, &vi, x[t2], x[t2+1], cs); - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur-vr; - x[t1+1] = ui-vi; - - x[t2] = ur+vr; - x[t2+1] = ui+vi; - } - } - { - j = mh/4; - - for(r=0; r>1; - ui = x[t1+1]>>1; - - x[t1] = ur+vr; - x[t1+1] = ui+vi; - - x[t2] = ur-vr; - x[t2+1] = ui-vi; - - t1 += mh; - t2 = t1+(mh<<1); - - cplxMultDiv2(&vr, &vi, x[t2+1], x[t2], STC(0x5a82799a), STC(0x5a82799a)); - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur+vr; - x[t1+1] = ui-vi; - - x[t2] = ur-vr; - x[t2+1] = ui+vi; - } - } - } -} -#endif - - -/***************************************************************************** - - functionname: dit_ifft (synthesis) - description: dit-tukey-algorithm - scrambles data at entry - i.e. loop is made with scrambled data - returns: - input: - output: - -*****************************************************************************/ - -#if !defined(FUNCTION_dit_ifft) -void dit_ifft(FIXP_DBL *x, const INT ldn, const FIXP_STP *trigdata, const INT trigDataSize) -{ - const INT n=1<>1; /* Re A + Re B */ - a10 = (x[i + 4] + x[i + 6])>>1; /* Re C + Re D */ - a20 = (x[i + 1] + x[i + 3])>>1; /* Im A + Im B */ - a30 = (x[i + 5] + x[i + 7])>>1; /* Im C + Im D */ - a0 = (x[i + 0] - x[i + 2])>>1; /* Re A - Re B */ - a2 = (x[i + 4] - x[i + 6])>>1; /* Re C - Re D */ - a3 = (x[i + 1] - x[i + 3])>>1; /* Im A - Im B */ - a1 = (x[i + 5] - x[i + 7])>>1; /* Im C - Im D */ - - x[i + 0] = a00 + a10; /* Re A' = Re A + Re B + Re C + Re D */ - x[i + 4] = a00 - a10; /* Re C' = Re A + Re B - Re C - Re D */ - x[i + 1] = a20 + a30; /* Im A' = Im A + Im B + Im C + Im D */ - x[i + 5] = a20 - a30; /* Im C' = Im A + Im B - Im C - Im D */ - x[i + 2] = a0 - a1; /* Re B' = Re A - Re B - Im C + Im D */ - x[i + 6] = a0 + a1; /* Re D' = Re A - Re B + Im C - Im D */ - x[i + 3] = a3 + a2; /* Im B' = Im A - Im B + Re C - Re D */ - x[i + 7] = a3 - a2; /* Im D' = Im A - Im B - Re C + Re D */ - } - - for(ldm=3; ldm<=ldn; ++ldm) - { - const INT m=(1<>1); - - INT j,r; - - trigstep=((trigDataSize << 2)>>ldm); - - { - j = 0; - - for(r=0; r>1; - vr = x[t2]>>1; - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur+vr; - x[t1+1] = ui+vi; - - x[t2] = ur-vr; - x[t2+1] = ui-vi; - - t1 += mh; - t2 = t1+(mh<<1); - - //cplxMultDiv2(&vi, &vr, x[t2], x[t2+1], FL2FXCONST_SGL(1.0), FL2FXCONST_SGL(0.0)); - vr = x[t2+1]>>1; - vi = x[t2]>>1; - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur-vr; - x[t1+1] = ui+vi; - - x[t2] = ur+vr; - x[t2+1] = ui-vi; - } - } - for(j=1; j>1; - ui = x[t1+1]>>1; - - x[t1] = ur+vr; - x[t1+1] = ui+vi; - - x[t2] = ur-vr; - x[t2+1] = ui-vi; - - t1 += mh; - t2 = t1+(mh<<1); - - cplxMultDiv2(&vi, &vr, x[t2], x[t2+1], cs); - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur-vr; - x[t1+1] = ui+vi; - - x[t2] = ur+vr; - x[t2+1] = ui-vi; - - /* Same as above but for t1,t2 with j>mh/4 and thus cs swapped */ - t1 = (r+mh/2-j)<<1; - t2 = t1 + (mh<<1); - - cplxMultDiv2(&vr, &vi, x[t2+1], x[t2], cs); - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur-vr; - x[t1+1] = ui+vi; - - x[t2] = ur+vr; - x[t2+1] = ui-vi; - - t1 += mh; - t2 = t1+(mh<<1); - - cplxMultDiv2(&vi, &vr, x[t2+1], x[t2], cs); - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur-vr; - x[t1+1] = ui-vi; - - x[t2] = ur+vr; - x[t2+1] = ui+vi; - } - } - { - j = mh/4; - for(r=0; r>1; - ui = x[t1+1]>>1; - - x[t1] = ur+vr; - x[t1+1] = ui+vi; - - x[t2] = ur-vr; - x[t2+1] = ui-vi; - - t1 += mh; - t2 = t1+(mh<<1); - - cplxMultDiv2(&vi, &vr, x[t2], x[t2+1], STC(0x5a82799a), STC(0x5a82799a)); - - ur = x[t1]>>1; - ui = x[t1+1]>>1; - - x[t1] = ur-vr; - x[t1+1] = ui+vi; - - x[t2] = ur+vr; - x[t2+1] = ui-vi; - } - } - } -} -#endif - diff --git a/libFDK/src/fixpoint_math.cpp b/libFDK/src/fixpoint_math.cpp deleted file mode 100644 index 30283ff..0000000 --- a/libFDK/src/fixpoint_math.cpp +++ /dev/null @@ -1,895 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): M. Gayer - Description: Fixed point specific mathematical functions - -******************************************************************************/ - -#include "fixpoint_math.h" - - -#define MAX_LD_PRECISION 10 -#define LD_PRECISION 10 - -/* Taylor series coeffcients for ln(1-x), centered at 0 (MacLaurin polinomial). */ -#ifndef LDCOEFF_16BIT -LNK_SECTION_CONSTDATA_L1 -static const FIXP_DBL ldCoeff[MAX_LD_PRECISION] = { - FL2FXCONST_DBL(-1.0), - FL2FXCONST_DBL(-1.0/2.0), - FL2FXCONST_DBL(-1.0/3.0), - FL2FXCONST_DBL(-1.0/4.0), - FL2FXCONST_DBL(-1.0/5.0), - FL2FXCONST_DBL(-1.0/6.0), - FL2FXCONST_DBL(-1.0/7.0), - FL2FXCONST_DBL(-1.0/8.0), - FL2FXCONST_DBL(-1.0/9.0), - FL2FXCONST_DBL(-1.0/10.0) -}; -#else -LNK_SECTION_CONSTDATA_L1 -static const FIXP_SGL ldCoeff[MAX_LD_PRECISION] = { - FL2FXCONST_SGL(-1.0), - FL2FXCONST_SGL(-1.0/2.0), - FL2FXCONST_SGL(-1.0/3.0), - FL2FXCONST_SGL(-1.0/4.0), - FL2FXCONST_SGL(-1.0/5.0), - FL2FXCONST_SGL(-1.0/6.0), - FL2FXCONST_SGL(-1.0/7.0), - FL2FXCONST_SGL(-1.0/8.0), - FL2FXCONST_SGL(-1.0/9.0), - FL2FXCONST_SGL(-1.0/10.0) -}; -#endif - -/***************************************************************************** - - functionname: CalcLdData - description: Delivers the Logarithm Dualis ld(op)/LD_DATA_SCALING with polynomial approximation. - input: Input op is assumed to be double precision fractional 0 < op < 1.0 - This function does not accept negative values. - output: For op == 0, the result is saturated to -1.0 - This function does not return positive values since input values are treated as fractional values. - It does not make sense to input an integer value into this function (and expect a positive output value) - since input values are treated as fractional values. - -*****************************************************************************/ - -LNK_SECTION_CODE_L1 -FIXP_DBL CalcLdData(FIXP_DBL op) -{ - return fLog2(op, 0); -} - - -/***************************************************************************** - functionname: LdDataVector -*****************************************************************************/ -LNK_SECTION_CODE_L1 -void LdDataVector( FIXP_DBL *srcVector, - FIXP_DBL *destVector, - INT n) -{ - INT i; - for ( i=0; i>1)) >> (FRACT_BITS-1); /* round */ - LONG high = u * ((v>>FRACT_BITS)<<1); - - prod = (LONG)(high+low); - - return((FIXP_DBL)prod); -} - - -/***************************************************************************** - - functionname: CalcInvLdData - description: Delivers the inverse of function CalcLdData(). - Delivers 2^(op*LD_DATA_SCALING) - input: Input op is assumed to be fractional -1.0 < op < 1.0 - output: For op == 0, the result is MAXVAL_DBL (almost 1.0). - For negative input values the output should be treated as a positive fractional value. - For positive input values the output should be treated as a positive integer value. - This function does not output negative values. - -*****************************************************************************/ -LNK_SECTION_CODE_L1 -/* This table is used for lookup 2^x with */ -/* x in range [0...1.0[ in steps of 1/32 */ -LNK_SECTION_DATA_L1 static const UINT exp2_tab_long[32]={ -0x40000000,0x4166C34C,0x42D561B4,0x444C0740, -0x45CAE0F2,0x47521CC6,0x48E1E9BA,0x4A7A77D4, -0x4C1BF829,0x4DC69CDD,0x4F7A9930,0x51382182, -0x52FF6B55,0x54D0AD5A,0x56AC1F75,0x5891FAC1, -0x5A82799A,0x5C7DD7A4,0x5E8451D0,0x60962665, -0x62B39509,0x64DCDEC3,0x6712460B,0x69540EC9, -0x6BA27E65,0x6DFDDBCC,0x70666F76,0x72DC8374, -0x75606374,0x77F25CCE,0x7A92BE8B,0x7D41D96E -// 0x80000000 -}; - -/* This table is used for lookup 2^x with */ -/* x in range [0...1/32[ in steps of 1/1024 */ -LNK_SECTION_DATA_L1 static const UINT exp2w_tab_long[32]={ -0x40000000,0x400B1818,0x4016321B,0x40214E0C, -0x402C6BE9,0x40378BB4,0x4042AD6D,0x404DD113, -0x4058F6A8,0x40641E2B,0x406F479E,0x407A7300, -0x4085A051,0x4090CF92,0x409C00C4,0x40A733E6, -0x40B268FA,0x40BD9FFF,0x40C8D8F5,0x40D413DD, -0x40DF50B8,0x40EA8F86,0x40F5D046,0x410112FA, -0x410C57A2,0x41179E3D,0x4122E6CD,0x412E3152, -0x41397DCC,0x4144CC3B,0x41501CA0,0x415B6EFB, -// 0x4166C34C, -}; -/* This table is used for lookup 2^x with */ -/* x in range [0...1/1024[ in steps of 1/32768 */ -LNK_SECTION_DATA_L1 static const UINT exp2x_tab_long[32]={ -0x40000000,0x400058B9,0x4000B173,0x40010A2D, -0x400162E8,0x4001BBA3,0x4002145F,0x40026D1B, -0x4002C5D8,0x40031E95,0x40037752,0x4003D011, -0x400428CF,0x4004818E,0x4004DA4E,0x4005330E, -0x40058BCE,0x4005E48F,0x40063D51,0x40069613, -0x4006EED5,0x40074798,0x4007A05B,0x4007F91F, -0x400851E4,0x4008AAA8,0x4009036E,0x40095C33, -0x4009B4FA,0x400A0DC0,0x400A6688,0x400ABF4F, -//0x400B1818 -}; - -LNK_SECTION_CODE_L1 FIXP_DBL CalcInvLdData(FIXP_DBL x) -{ - int set_zero = (x < FL2FXCONST_DBL(-31.0/64.0))? 0 : 1; - int set_max = (x >= FL2FXCONST_DBL( 31.0/64.0)) | (x == FL2FXCONST_DBL(0.0)); - - FIXP_SGL frac = (FIXP_SGL)(LONG)(x & 0x3FF); - UINT index3 = (UINT)(LONG)(x >> 10) & 0x1F; - UINT index2 = (UINT)(LONG)(x >> 15) & 0x1F; - UINT index1 = (UINT)(LONG)(x >> 20) & 0x1F; - int exp = (x > FL2FXCONST_DBL(0.0f)) ? (31 - (int)(x>>25)) : (int)(-(x>>25)); - - UINT lookup1 = exp2_tab_long[index1]*set_zero; - UINT lookup2 = exp2w_tab_long[index2]; - UINT lookup3 = exp2x_tab_long[index3]; - UINT lookup3f = lookup3 + (UINT)(LONG)fMultDiv2((FIXP_DBL)(0x0016302F),(FIXP_SGL)frac); - - UINT lookup12 = (UINT)(LONG)fMult((FIXP_DBL)lookup1, (FIXP_DBL) lookup2); - UINT lookup = (UINT)(LONG)fMult((FIXP_DBL)lookup12, (FIXP_DBL) lookup3f); - - FIXP_DBL retVal = (lookup<<3) >> exp; - - if (set_max) - retVal=FL2FXCONST_DBL(1.0f); - - return retVal; -} - - - - - -/***************************************************************************** - functionname: InitLdInt and CalcLdInt - description: Create and access table with integer LdData (0 to 193) -*****************************************************************************/ - - - LNK_SECTION_CONSTDATA_L1 - static const FIXP_DBL ldIntCoeff[] = { - 0x80000001, 0x00000000, 0x02000000, 0x032b8034, 0x04000000, 0x04a4d3c2, 0x052b8034, 0x059d5da0, - 0x06000000, 0x06570069, 0x06a4d3c2, 0x06eb3a9f, 0x072b8034, 0x0766a009, 0x079d5da0, 0x07d053f7, - 0x08000000, 0x082cc7ee, 0x08570069, 0x087ef05b, 0x08a4d3c2, 0x08c8ddd4, 0x08eb3a9f, 0x090c1050, - 0x092b8034, 0x0949a785, 0x0966a009, 0x0982809d, 0x099d5da0, 0x09b74949, 0x09d053f7, 0x09e88c6b, - 0x0a000000, 0x0a16bad3, 0x0a2cc7ee, 0x0a423162, 0x0a570069, 0x0a6b3d79, 0x0a7ef05b, 0x0a92203d, - 0x0aa4d3c2, 0x0ab7110e, 0x0ac8ddd4, 0x0ada3f60, 0x0aeb3a9f, 0x0afbd42b, 0x0b0c1050, 0x0b1bf312, - 0x0b2b8034, 0x0b3abb40, 0x0b49a785, 0x0b584822, 0x0b66a009, 0x0b74b1fd, 0x0b82809d, 0x0b900e61, - 0x0b9d5da0, 0x0baa708f, 0x0bb74949, 0x0bc3e9ca, 0x0bd053f7, 0x0bdc899b, 0x0be88c6b, 0x0bf45e09, - 0x0c000000, 0x0c0b73cb, 0x0c16bad3, 0x0c21d671, 0x0c2cc7ee, 0x0c379085, 0x0c423162, 0x0c4caba8, - 0x0c570069, 0x0c6130af, 0x0c6b3d79, 0x0c7527b9, 0x0c7ef05b, 0x0c88983f, 0x0c92203d, 0x0c9b8926, - 0x0ca4d3c2, 0x0cae00d2, 0x0cb7110e, 0x0cc0052b, 0x0cc8ddd4, 0x0cd19bb0, 0x0cda3f60, 0x0ce2c97d, - 0x0ceb3a9f, 0x0cf39355, 0x0cfbd42b, 0x0d03fda9, 0x0d0c1050, 0x0d140ca0, 0x0d1bf312, 0x0d23c41d, - 0x0d2b8034, 0x0d3327c7, 0x0d3abb40, 0x0d423b08, 0x0d49a785, 0x0d510118, 0x0d584822, 0x0d5f7cff, - 0x0d66a009, 0x0d6db197, 0x0d74b1fd, 0x0d7ba190, 0x0d82809d, 0x0d894f75, 0x0d900e61, 0x0d96bdad, - 0x0d9d5da0, 0x0da3ee7f, 0x0daa708f, 0x0db0e412, 0x0db74949, 0x0dbda072, 0x0dc3e9ca, 0x0dca258e, - 0x0dd053f7, 0x0dd6753e, 0x0ddc899b, 0x0de29143, 0x0de88c6b, 0x0dee7b47, 0x0df45e09, 0x0dfa34e1, - 0x0e000000, 0x0e05bf94, 0x0e0b73cb, 0x0e111cd2, 0x0e16bad3, 0x0e1c4dfb, 0x0e21d671, 0x0e275460, - 0x0e2cc7ee, 0x0e323143, 0x0e379085, 0x0e3ce5d8, 0x0e423162, 0x0e477346, 0x0e4caba8, 0x0e51daa8, - 0x0e570069, 0x0e5c1d0b, 0x0e6130af, 0x0e663b74, 0x0e6b3d79, 0x0e7036db, 0x0e7527b9, 0x0e7a1030, - 0x0e7ef05b, 0x0e83c857, 0x0e88983f, 0x0e8d602e, 0x0e92203d, 0x0e96d888, 0x0e9b8926, 0x0ea03232, - 0x0ea4d3c2, 0x0ea96df0, 0x0eae00d2, 0x0eb28c7f, 0x0eb7110e, 0x0ebb8e96, 0x0ec0052b, 0x0ec474e4, - 0x0ec8ddd4, 0x0ecd4012, 0x0ed19bb0, 0x0ed5f0c4, 0x0eda3f60, 0x0ede8797, 0x0ee2c97d, 0x0ee70525, - 0x0eeb3a9f, 0x0eef69ff, 0x0ef39355, 0x0ef7b6b4, 0x0efbd42b, 0x0effebcd, 0x0f03fda9, 0x0f0809cf, - 0x0f0c1050, 0x0f10113b, 0x0f140ca0, 0x0f18028d, 0x0f1bf312, 0x0f1fde3d, 0x0f23c41d, 0x0f27a4c0, - 0x0f2b8034 - }; - - - LNK_SECTION_INITCODE - void InitLdInt() - { - /* nothing to do! Use preinitialized logarithm table */ - } - - - -LNK_SECTION_CODE_L1 -FIXP_DBL CalcLdInt(INT i) -{ - /* calculates ld(op)/LD_DATA_SCALING */ - /* op is assumed to be an integer value between 1 and 193 */ - - FDK_ASSERT((193>0) && ((FIXP_DBL)ldIntCoeff[0]==(FIXP_DBL)0x80000001)); /* tab has to be initialized */ - - if ((i>0)&&(i<193)) - return ldIntCoeff[i]; - else - { - return (0); - } -} - - -/***************************************************************************** - - functionname: invSqrtNorm2 - description: delivers 1/sqrt(op) normalized to .5...1 and the shift value of the OUTPUT - -*****************************************************************************/ -#define SQRT_BITS 7 -#define SQRT_VALUES 128 -#define SQRT_BITS_MASK 0x7f - -LNK_SECTION_CONSTDATA_L1 -static const FIXP_DBL invSqrtTab[SQRT_VALUES] = { - 0x5a827999, 0x5a287e03, 0x59cf8cbb, 0x5977a0ab, 0x5920b4de, 0x58cac480, 0x5875cade, 0x5821c364, - 0x57cea99c, 0x577c792f, 0x572b2ddf, 0x56dac38d, 0x568b3631, 0x563c81df, 0x55eea2c3, 0x55a19521, - 0x55555555, 0x5509dfd0, 0x54bf311a, 0x547545d0, 0x542c1aa3, 0x53e3ac5a, 0x539bf7cc, 0x5354f9e6, - 0x530eafa4, 0x52c91617, 0x52842a5e, 0x523fe9ab, 0x51fc513f, 0x51b95e6b, 0x51770e8e, 0x51355f19, - 0x50f44d88, 0x50b3d768, 0x5073fa4f, 0x5034b3e6, 0x4ff601df, 0x4fb7e1f9, 0x4f7a5201, 0x4f3d4fce, - 0x4f00d943, 0x4ec4ec4e, 0x4e8986e9, 0x4e4ea718, 0x4e144ae8, 0x4dda7072, 0x4da115d9, 0x4d683948, - 0x4d2fd8f4, 0x4cf7f31b, 0x4cc08604, 0x4c898fff, 0x4c530f64, 0x4c1d0293, 0x4be767f5, 0x4bb23df9, - 0x4b7d8317, 0x4b4935ce, 0x4b1554a6, 0x4ae1de2a, 0x4aaed0f0, 0x4a7c2b92, 0x4a49ecb3, 0x4a1812fa, - 0x49e69d16, 0x49b589bb, 0x4984d7a4, 0x49548591, 0x49249249, 0x48f4fc96, 0x48c5c34a, 0x4896e53c, - 0x48686147, 0x483a364c, 0x480c6331, 0x47dee6e0, 0x47b1c049, 0x4784ee5f, 0x4758701c, 0x472c447c, - 0x47006a80, 0x46d4e130, 0x46a9a793, 0x467ebcb9, 0x46541fb3, 0x4629cf98, 0x45ffcb80, 0x45d61289, - 0x45aca3d5, 0x45837e88, 0x455aa1ca, 0x45320cc8, 0x4509beb0, 0x44e1b6b4, 0x44b9f40b, 0x449275ec, - 0x446b3b95, 0x44444444, 0x441d8f3b, 0x43f71bbe, 0x43d0e917, 0x43aaf68e, 0x43854373, 0x435fcf14, - 0x433a98c5, 0x43159fdb, 0x42f0e3ae, 0x42cc6397, 0x42a81ef5, 0x42841527, 0x4260458d, 0x423caf8c, - 0x4219528b, 0x41f62df1, 0x41d3412a, 0x41b08ba1, 0x418e0cc7, 0x416bc40d, 0x4149b0e4, 0x4127d2c3, - 0x41062920, 0x40e4b374, 0x40c3713a, 0x40a261ef, 0x40818511, 0x4060da21, 0x404060a1, 0x40201814 -}; - -LNK_SECTION_INITCODE -void InitInvSqrtTab() -{ - /* nothing to do ! - use preinitialized square root table - */ -} - - - -#if !defined(FUNCTION_invSqrtNorm2) -/***************************************************************************** - delivers 1/sqrt(op) normalized to .5...1 and the shift value of the OUTPUT, - i.e. the denormalized result is 1/sqrt(op) = invSqrtNorm(op) * 2^(shift) - uses Newton-iteration for approximation - Q(n+1) = Q(n) + Q(n) * (0.5 - 2 * V * Q(n)^2) - with Q = 0.5* V ^-0.5; 0.5 <= V < 1.0 -*****************************************************************************/ -FIXP_DBL invSqrtNorm2(FIXP_DBL op, INT *shift) -{ - - FIXP_DBL val = op ; - FIXP_DBL reg1, reg2, regtmp ; - - if (val == FL2FXCONST_DBL(0.0)) { - *shift = 1 ; - return((LONG)1); /* minimum positive value */ - } - - - /* normalize input, calculate shift value */ - FDK_ASSERT(val > FL2FXCONST_DBL(0.0)); - *shift = fNormz(val) - 1; /* CountLeadingBits() is not necessary here since test value is always > 0 */ - val <<=*shift ; /* normalized input V */ - *shift+=2 ; /* bias for exponent */ - - /* Newton iteration of 1/sqrt(V) */ - reg1 = invSqrtTab[ (INT)(val>>(DFRACT_BITS-1-(SQRT_BITS+1))) & SQRT_BITS_MASK ]; - reg2 = FL2FXCONST_DBL(0.0625f); /* 0.5 >> 3 */ - - regtmp= fPow2Div2(reg1); /* a = Q^2 */ - regtmp= reg2 - fMultDiv2(regtmp, val); /* b = 0.5 - 2 * V * Q^2 */ - reg1 += (fMultDiv2(regtmp, reg1)<<4); /* Q = Q + Q*b */ - - /* calculate the output exponent = input exp/2 */ - if (*shift & 0x00000001) { /* odd shift values ? */ - reg2 = FL2FXCONST_DBL(0.707106781186547524400844362104849f); /* 1/sqrt(2); */ - reg1 = fMultDiv2(reg1, reg2) << 2; - } - - *shift = *shift>>1; - - return(reg1); -} -#endif /* !defined(FUNCTION_invSqrtNorm2) */ - -/***************************************************************************** - - functionname: sqrtFixp - description: delivers sqrt(op) - -*****************************************************************************/ -FIXP_DBL sqrtFixp(FIXP_DBL op) -{ - INT tmp_exp = 0; - FIXP_DBL tmp_inv = invSqrtNorm2(op, &tmp_exp); - - FDK_ASSERT(tmp_exp > 0) ; - return( (FIXP_DBL) ( fMultDiv2( (op<<(tmp_exp-1)), tmp_inv ) << 2 )); -} - - -#if !defined(FUNCTION_schur_div) -/***************************************************************************** - - functionname: schur_div - description: delivers op1/op2 with op3-bit accuracy - -*****************************************************************************/ - - -FIXP_DBL schur_div(FIXP_DBL num, FIXP_DBL denum, INT count) -{ - INT L_num = (LONG)num>>1; - INT L_denum = (LONG)denum>>1; - INT div = 0; - INT k = count; - - FDK_ASSERT (num>=(FIXP_DBL)0); - FDK_ASSERT (denum>(FIXP_DBL)0); - FDK_ASSERT (num <= denum); - - if (L_num != 0) - while (--k) - { - div <<= 1; - L_num <<= 1; - if (L_num >= L_denum) - { - L_num -= L_denum; - div++; - } - } - return (FIXP_DBL)(div << (DFRACT_BITS - count)); -} - - -#endif /* !defined(FUNCTION_schur_div) */ - - -#ifndef FUNCTION_fMultNorm -FIXP_DBL fMultNorm(FIXP_DBL f1, FIXP_DBL f2, INT *result_e) -{ - INT product = 0; - INT norm_f1, norm_f2; - - if ( (f1 == (FIXP_DBL)0) || (f2 == (FIXP_DBL)0) ) { - *result_e = 0; - return (FIXP_DBL)0; - } - norm_f1 = CountLeadingBits(f1); - f1 = f1 << norm_f1; - norm_f2 = CountLeadingBits(f2); - f2 = f2 << norm_f2; - - product = fMult(f1, f2); - *result_e = - (norm_f1 + norm_f2); - - return (FIXP_DBL)product; -} -#endif - -#ifndef FUNCTION_fDivNorm -FIXP_DBL fDivNorm(FIXP_DBL L_num, FIXP_DBL L_denum, INT *result_e) -{ - FIXP_DBL div; - INT norm_num, norm_den; - - FDK_ASSERT (L_num >= (FIXP_DBL)0); - FDK_ASSERT (L_denum > (FIXP_DBL)0); - - if(L_num == (FIXP_DBL)0) - { - *result_e = 0; - return ((FIXP_DBL)0); - } - - norm_num = CountLeadingBits(L_num); - L_num = L_num << norm_num; - L_num = L_num >> 1; - *result_e = - norm_num + 1; - - norm_den = CountLeadingBits(L_denum); - L_denum = L_denum << norm_den; - *result_e -= - norm_den; - - div = schur_div(L_num, L_denum, FRACT_BITS); - - return div; -} -#endif /* !FUNCTION_fDivNorm */ - -#ifndef FUNCTION_fDivNorm -FIXP_DBL fDivNorm(FIXP_DBL num, FIXP_DBL denom) -{ - INT e; - FIXP_DBL res; - - FDK_ASSERT (denom >= num); - - res = fDivNorm(num, denom, &e); - - /* Avoid overflow since we must output a value with exponent 0 - there is no other choice than saturating to almost 1.0f */ - if(res == (FIXP_DBL)(1<<(DFRACT_BITS-2)) && e == 1) - { - res = (FIXP_DBL)MAXVAL_DBL; - } - else - { - res = scaleValue(res, e); - } - - return res; -} -#endif /* !FUNCTION_fDivNorm */ - -#ifndef FUNCTION_fDivNormHighPrec -FIXP_DBL fDivNormHighPrec(FIXP_DBL num, FIXP_DBL denom, INT *result_e) -{ - FIXP_DBL div; - INT norm_num, norm_den; - - FDK_ASSERT (num >= (FIXP_DBL)0); - FDK_ASSERT (denom > (FIXP_DBL)0); - - if(num == (FIXP_DBL)0) - { - *result_e = 0; - return ((FIXP_DBL)0); - } - - norm_num = CountLeadingBits(num); - num = num << norm_num; - num = num >> 1; - *result_e = - norm_num + 1; - - norm_den = CountLeadingBits(denom); - denom = denom << norm_den; - *result_e -= - norm_den; - - div = schur_div(num, denom, 31); - return div; -} -#endif /* !FUNCTION_fDivNormHighPrec */ - - - -FIXP_DBL CalcLog2(FIXP_DBL base_m, INT base_e, INT *result_e) -{ - return fLog2(base_m, base_e, result_e); -} - -FIXP_DBL f2Pow( - const FIXP_DBL exp_m, const INT exp_e, - INT *result_e - ) -{ - FIXP_DBL frac_part, result_m; - INT int_part; - - if (exp_e > 0) - { - INT exp_bits = DFRACT_BITS-1 - exp_e; - int_part = exp_m >> exp_bits; - frac_part = exp_m - (FIXP_DBL)(int_part << exp_bits); - frac_part = frac_part << exp_e; - } - else - { - int_part = 0; - frac_part = exp_m >> -exp_e; - } - - /* Best accuracy is around 0, so try to get there with the fractional part. */ - if( frac_part > FL2FXCONST_DBL(0.5f) ) - { - int_part = int_part + 1; - frac_part = frac_part + FL2FXCONST_DBL(-1.0f); - } - if( frac_part < FL2FXCONST_DBL(-0.5f) ) - { - int_part = int_part - 1; - frac_part = -(FL2FXCONST_DBL(-1.0f) - frac_part); - } - - /* Evaluate taylor polynomial which approximates 2^x */ - { - FIXP_DBL p; - - /* result_m ~= 2^frac_part */ - p = frac_part; - /* First taylor series coefficient a_0 = 1.0, scaled by 0.5 due to fMultDiv2(). */ - result_m = FL2FXCONST_DBL(1.0f/2.0f); - for (INT i = 0; i < POW2_PRECISION; i++) { - /* next taylor series term: a_i * x^i, x=0 */ - result_m = fMultAddDiv2(result_m, pow2Coeff[i], p); - p = fMult(p, frac_part); - } - } - - /* "+ 1" compensates fMultAddDiv2() of the polynomial evaluation above. */ - *result_e = int_part + 1; - - return result_m; -} - -FIXP_DBL f2Pow( - const FIXP_DBL exp_m, const INT exp_e - ) -{ - FIXP_DBL result_m; - INT result_e; - - result_m = f2Pow(exp_m, exp_e, &result_e); - result_e = fixMin(DFRACT_BITS-1,fixMax(-(DFRACT_BITS-1),result_e)); - - return scaleValue(result_m, result_e); -} - -FIXP_DBL fPow( - FIXP_DBL base_m, INT base_e, - FIXP_DBL exp_m, INT exp_e, - INT *result_e - ) -{ - INT ans_lg2_e, baselg2_e; - FIXP_DBL base_lg2, ans_lg2, result; - - /* Calc log2 of base */ - base_lg2 = fLog2(base_m, base_e, &baselg2_e); - - /* Prepare exp */ - { - INT leadingBits; - - leadingBits = CountLeadingBits(fAbs(exp_m)); - exp_m = exp_m << leadingBits; - exp_e -= leadingBits; - } - - /* Calc base pow exp */ - ans_lg2 = fMult(base_lg2, exp_m); - ans_lg2_e = exp_e + baselg2_e; - - /* Calc antilog */ - result = f2Pow(ans_lg2, ans_lg2_e, result_e); - - return result; -} - -FIXP_DBL fLdPow( - FIXP_DBL baseLd_m, - INT baseLd_e, - FIXP_DBL exp_m, INT exp_e, - INT *result_e - ) -{ - INT ans_lg2_e; - FIXP_DBL ans_lg2, result; - - /* Prepare exp */ - { - INT leadingBits; - - leadingBits = CountLeadingBits(fAbs(exp_m)); - exp_m = exp_m << leadingBits; - exp_e -= leadingBits; - } - - /* Calc base pow exp */ - ans_lg2 = fMult(baseLd_m, exp_m); - ans_lg2_e = exp_e + baseLd_e; - - /* Calc antilog */ - result = f2Pow(ans_lg2, ans_lg2_e, result_e); - - return result; -} - -FIXP_DBL fLdPow( - FIXP_DBL baseLd_m, INT baseLd_e, - FIXP_DBL exp_m, INT exp_e - ) -{ - FIXP_DBL result_m; - int result_e; - - result_m = fLdPow(baseLd_m, baseLd_e, exp_m, exp_e, &result_e); - - return SATURATE_SHIFT(result_m, -result_e, DFRACT_BITS); -} - -FIXP_DBL fPowInt( - FIXP_DBL base_m, INT base_e, - INT exp, - INT *pResult_e - ) -{ - FIXP_DBL result; - - if (exp != 0) { - INT result_e = 0; - - if (base_m != (FIXP_DBL)0) { - { - INT leadingBits; - leadingBits = CountLeadingBits( base_m ); - base_m <<= leadingBits; - base_e -= leadingBits; - } - - result = base_m; - - { - int i; - for (i = 1; i < fAbs(exp); i++) { - result = fMult(result, base_m); - } - } - - if (exp < 0) { - /* 1.0 / ans */ - result = fDivNorm( FL2FXCONST_DBL(0.5f), result, &result_e ); - result_e++; - } else { - int ansScale = CountLeadingBits( result ); - result <<= ansScale; - result_e -= ansScale; - } - - result_e += exp * base_e; - - } else { - result = (FIXP_DBL)0; - } - *pResult_e = result_e; - } - else { - result = FL2FXCONST_DBL(0.5f); - *pResult_e = 1; - } - - return result; -} - -FIXP_DBL fLog2(FIXP_DBL x_m, INT x_e, INT *result_e) -{ - FIXP_DBL result_m; - - /* Short cut for zero and negative numbers. */ - if ( x_m <= FL2FXCONST_DBL(0.0f) ) { - *result_e = DFRACT_BITS-1; - return FL2FXCONST_DBL(-1.0f); - } - - /* Calculate log2() */ - { - FIXP_DBL px2_m, x2_m; - - /* Move input value x_m * 2^x_e toward 1.0, where the taylor approximation - of the function log(1-x) centered at 0 is most accurate. */ - { - INT b_norm; - - b_norm = fNormz(x_m)-1; - x2_m = x_m << b_norm; - x_e = x_e - b_norm; - } - - /* map x from log(x) domain to log(1-x) domain. */ - x2_m = - (x2_m + FL2FXCONST_DBL(-1.0) ); - - /* Taylor polinomial approximation of ln(1-x) */ - result_m = FL2FXCONST_DBL(0.0); - px2_m = x2_m; - for (int i=0; i> (enorm-1)) + ((FIXP_DBL)x_e << (DFRACT_BITS-1-enorm)); - - *result_e = enorm; - } else { - /* 1 compensates the fMultDiv2() above in the taylor polinomial evaluation loop.*/ - *result_e = 1; - } - } - - return result_m; -} - -FIXP_DBL fLog2(FIXP_DBL x_m, INT x_e) -{ - if ( x_m <= FL2FXCONST_DBL(0.0f) ) { - x_m = FL2FXCONST_DBL(-1.0f); - } - else { - INT result_e; - x_m = fLog2(x_m, x_e, &result_e); - x_m = scaleValue(x_m, result_e-LD_DATA_SHIFT); - } - return x_m; -} - - - - diff --git a/libFDK/src/mdct.cpp b/libFDK/src/mdct.cpp deleted file mode 100644 index 9347a16..0000000 --- a/libFDK/src/mdct.cpp +++ /dev/null @@ -1,388 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): Josef Hoepfl, Manuel Jander - Description: MDCT routines - -******************************************************************************/ - -#include "mdct.h" - - -#include "FDK_tools_rom.h" -#include "dct.h" -#include "fixpoint_math.h" - - -void mdct_init( H_MDCT hMdct, - FIXP_DBL *overlap, - INT overlapBufferSize ) -{ - hMdct->overlap.freq = overlap; - //FDKmemclear(overlap, overlapBufferSize*sizeof(FIXP_DBL)); - hMdct->prev_fr = 0; - hMdct->prev_nr = 0; - hMdct->prev_tl = 0; - hMdct->ov_size = overlapBufferSize; -} - - -void imdct_gain(FIXP_DBL *pGain_m, int *pGain_e, int tl) -{ - FIXP_DBL gain_m = *pGain_m; - int gain_e = *pGain_e; - int log2_tl; - - log2_tl = DFRACT_BITS-1-fNormz((FIXP_DBL)tl); - - gain_e += -MDCT_OUTPUT_GAIN - log2_tl - MDCT_OUT_HEADROOM + 1; - - FDK_ASSERT(log2_tl - 2 >= 0); - FDK_ASSERT(log2_tl - 2 < 8*sizeof(int)); - - /* Detect non-radix 2 transform length and add amplitude compensation factor - which cannot be included into the exponent above */ - switch ( (tl) >> (log2_tl - 2) ) { - case 0x7: /* 10 ms, 1/tl = 1.0/(FDKpow(2.0, -log2_tl) * 0.53333333333333333333) */ - if (gain_m == (FIXP_DBL)0) { - gain_m = FL2FXCONST_DBL(0.53333333333333333333f); - } else { - gain_m = fMult(gain_m, FL2FXCONST_DBL(0.53333333333333333333f)); - } - break; - case 0x6: /* 3/4 of radix 2, 1/tl = 1.0/(FDKpow(2.0, -log2_tl) * 2.0/3.0) */ - if (gain_m == (FIXP_DBL)0) { - gain_m = FL2FXCONST_DBL(2.0/3.0f); - } else { - gain_m = fMult(gain_m, FL2FXCONST_DBL(2.0/3.0f)); - } - break; - case 0x4: - /* radix 2, nothing to do. */ - break; - default: - /* unsupported */ - FDK_ASSERT(0); - break; - } - - *pGain_m = gain_m; - *pGain_e = gain_e; -} - -INT imdct_drain( - H_MDCT hMdct, - FIXP_DBL *output, - INT nrSamplesRoom - ) -{ - int buffered_samples = 0; - - if (nrSamplesRoom > 0) { - buffered_samples = hMdct->ov_offset; - - FDK_ASSERT(buffered_samples <= nrSamplesRoom); - - if (buffered_samples > 0) { - FDKmemcpy(output, hMdct->overlap.time, buffered_samples*sizeof(FIXP_DBL)); - hMdct->ov_offset = 0; - } - } - return buffered_samples; -} - -INT imdct_copy_ov_and_nr( - H_MDCT hMdct, - FIXP_DBL * pTimeData, - INT nrSamples - ) -{ - FIXP_DBL *pOvl; - int nt, nf, i; - - nt = fMin(hMdct->ov_offset, nrSamples); - nrSamples -= nt; - nf = fMin(hMdct->prev_nr, nrSamples); - nrSamples -= nf; - FDKmemcpy(pTimeData, hMdct->overlap.time, nt*sizeof(FIXP_DBL)); - pTimeData += nt; - - pOvl = hMdct->overlap.freq + hMdct->ov_size - 1; - for (i=0; iprev_tl == 0) { - hMdct->prev_wrs = wls; - hMdct->prev_fr = fl; - hMdct->prev_nr = (noOutSamples-fl)>>1; - hMdct->prev_tl = noOutSamples; - hMdct->ov_offset = 0; - use_current = 1; - } - - window_diff = (hMdct->prev_fr - fl)>>1; - - /* check if the previous window slope can be adjusted to match the current window slope */ - if (hMdct->prev_nr + window_diff > 0) { - use_current = 1; - } - /* check if the current window slope can be adjusted to match the previous window slope */ - if (nl - window_diff > 0 ) { - use_previous = 1; - } - - /* if both is possible choose the larger of both window slope lengths */ - if (use_current && use_previous) { - if (fl < hMdct->prev_fr) { - use_current = 0; - } else { - use_previous = 0; - } - } - /* - * If the previous transform block is big enough, enlarge previous window overlap, - * if not, then shrink current window overlap. - */ - if (use_current) { - hMdct->prev_nr += window_diff; - hMdct->prev_fr = fl; - hMdct->prev_wrs = wls; - } else { - nl -= window_diff; - fl = hMdct->prev_fr; - } - - *pfl = fl; - *pnl = nl; -} - -INT imdct_block( - H_MDCT hMdct, - FIXP_DBL *output, - FIXP_DBL *spectrum, - const SHORT scalefactor[], - const INT nSpec, - const INT noOutSamples, - const INT tl, - const FIXP_WTP *wls, - INT fl, - const FIXP_WTP *wrs, - const INT fr, - FIXP_DBL gain - ) -{ - FIXP_DBL *pOvl; - FIXP_DBL *pOut0 = output, *pOut1; - INT nl, nr; - int w, i, nrSamples = 0, specShiftScale, transform_gain_e = 0; - - /* Derive NR and NL */ - nr = (tl - fr)>>1; - nl = (tl - fl)>>1; - - /* Include 2/N IMDCT gain into gain factor and exponent. */ - imdct_gain(&gain, &transform_gain_e, tl); - - /* Detect FRprevious / FL mismatches and override parameters accordingly */ - if (hMdct->prev_fr != fl) { - imdct_adapt_parameters(hMdct, &fl, &nl, tl, wls, noOutSamples); - } - - pOvl = hMdct->overlap.freq + hMdct->ov_size - 1; - - if ( noOutSamples > nrSamples ) { - /* Purge buffered output. */ - for (i=0; iov_offset; i++) { - *pOut0 = hMdct->overlap.time[i]; - pOut0 ++; - } - nrSamples = hMdct->ov_offset; - hMdct->ov_offset = 0; - } - - for (w=0; wprev_wrs; - - /* Current spectrum */ - pSpec = spectrum+w*tl; - - /* DCT IV of current spectrum. */ - dct_IV(pSpec, tl, &specShiftScale); - - /* Optional scaling of time domain - no yet windowed - of current spectrum */ - /* and de-scale current spectrum signal (time domain, no yet windowed) */ - if (gain != (FIXP_DBL)0) { - scaleValuesWithFactor(pSpec, gain, tl, scalefactor[w] + specShiftScale); - } else { - scaleValues(pSpec, tl, scalefactor[w] + specShiftScale); - } - - if ( noOutSamples <= nrSamples ) { - /* Divert output first half to overlap buffer if we already got enough output samples. */ - pOut0 = hMdct->overlap.time + hMdct->ov_offset; - hMdct->ov_offset += hMdct->prev_nr + fl/2; - } else { - /* Account output samples */ - nrSamples += hMdct->prev_nr + fl/2; - } - - /* NR output samples 0 .. NR. -overlap[TL/2..TL/2-NR] */ - for (i=0; iprev_nr; i++) { - FIXP_DBL x = - (*pOvl--); - *pOut0 = IMDCT_SCALE_DBL(x); - pOut0 ++; - } - - if ( noOutSamples <= nrSamples ) { - /* Divert output second half to overlap buffer if we already got enough output samples. */ - pOut1 = hMdct->overlap.time + hMdct->ov_offset + fl/2 - 1; - hMdct->ov_offset += fl/2 + nl; - } else { - pOut1 = pOut0 + (fl - 1); - nrSamples += fl/2 + nl; - } - - /* output samples before window crossing point NR .. TL/2. -overlap[TL/2-NR..TL/2-NR-FL/2] + current[NR..TL/2] */ - /* output samples after window crossing point TL/2 .. TL/2+FL/2. -overlap[0..FL/2] - current[TL/2..FL/2] */ - pCurr = pSpec + tl - fl/2; - for (i=0; iprev_nr = nr; - hMdct->prev_fr = fr; - hMdct->prev_tl = tl; - hMdct->prev_wrs = wrs; - } - - /* Save overlap */ - - pOvl = hMdct->overlap.freq + hMdct->ov_size - tl/2; - FDK_ASSERT(pOvl >= hMdct->overlap.time + hMdct->ov_offset); - FDK_ASSERT(tl/2 <= hMdct->ov_size); - for (i=0; iAbout polyphase filtering - The polyphase implementation of a filterbank requires filtering at the input and output. - This is implemented as part of cplxAnalysisQmfFiltering() and cplxSynthesisQmfFiltering(). - The implementation requires the filter coefficients in a specific structure as described in - #sbr_qmf_64_640_qmf (in sbr_rom.cpp). - - This module comprises the computationally most expensive functions of the SBR decoder. The accuracy of - computations is also important and has a direct impact on the overall sound quality. Therefore a special - test program is available which can be used to only test the filterbank: main_audio.cpp - - This modules also uses scaling of data to provide better SNR on fixed-point processors. See #QMF_SCALE_FACTOR (in sbr_scale.h) for details. - An interesting note: The function getScalefactor() can constitute a significant amount of computational complexity - very much depending on the - bitrate. Since it is a rather small function, effective assembler optimization might be possible. - -*/ - -#include "qmf.h" - - -#include "fixpoint_math.h" -#include "dct.h" - -#ifdef QMFSYN_STATES_16BIT -#define QSSCALE (7) -#define FX_DBL2FX_QSS(x) ((FIXP_QSS) ((x)>>(DFRACT_BITS-QSS_BITS-QSSCALE) )) -#define FX_QSS2FX_DBL(x) ((FIXP_DBL)((LONG)x)<<(DFRACT_BITS-QSS_BITS-QSSCALE)) -#else -#define QSSCALE (0) -#define FX_DBL2FX_QSS(x) (x) -#define FX_QSS2FX_DBL(x) (x) -#endif - - -#if defined(__arm__) -#include "arm/qmf_arm.cpp" - -#endif - -/*! - * \brief Algorithmic scaling in sbrForwardModulation() - * - * The scaling in sbrForwardModulation() is caused by: - * - * \li 1 R_SHIFT in sbrForwardModulation() - * \li 5/6 R_SHIFT in dct3() if using 32/64 Bands - * \li 1 ommited gain of 2.0 in qmfForwardModulation() - */ -#define ALGORITHMIC_SCALING_IN_ANALYSIS_FILTERBANK 7 - -/*! - * \brief Algorithmic scaling in cplxSynthesisQmfFiltering() - * - * The scaling in cplxSynthesisQmfFiltering() is caused by: - * - * \li 5/6 R_SHIFT in dct2() if using 32/64 Bands - * \li 1 ommited gain of 2.0 in qmfInverseModulation() - * \li -6 division by 64 in synthesis filterbank - * \li x bits external influence - */ -#define ALGORITHMIC_SCALING_IN_SYNTHESIS_FILTERBANK 1 - - -/*! - \brief Perform Synthesis Prototype Filtering on a single slot of input data. - - The filter takes 2 * qmf->no_channels of input data and - generates qmf->no_channels time domain output samples. -*/ -static -#ifndef FUNCTION_qmfSynPrototypeFirSlot -void qmfSynPrototypeFirSlot( -#else -void qmfSynPrototypeFirSlot_fallback( -#endif - HANDLE_QMF_FILTER_BANK qmf, - FIXP_QMF *RESTRICT realSlot, /*!< Input: Pointer to real Slot */ - FIXP_QMF *RESTRICT imagSlot, /*!< Input: Pointer to imag Slot */ - INT_PCM *RESTRICT timeOut, /*!< Time domain data */ - int stride - ) -{ - FIXP_QSS* FilterStates = (FIXP_QSS*)qmf->FilterStates; - int no_channels = qmf->no_channels; - const FIXP_PFT *p_Filter = qmf->p_filter; - int p_stride = qmf->p_stride; - int j; - FIXP_QSS *RESTRICT sta = FilterStates; - const FIXP_PFT *RESTRICT p_flt, *RESTRICT p_fltm; - int scale = ((DFRACT_BITS-SAMPLE_BITS)-1-qmf->outScalefactor); - - p_flt = p_Filter+p_stride*QMF_NO_POLY; /* 5-ter von 330 */ - p_fltm = p_Filter+(qmf->FilterSize/2)-p_stride*QMF_NO_POLY; /* 5 + (320 - 2*5) = 315-ter von 330 */ - - FDK_ASSERT(SAMPLE_BITS-1-qmf->outScalefactor >= 0); // (DFRACT_BITS-SAMPLE_BITS)-1-qmf->outScalefactor >= 0); - - for (j = no_channels-1; j >= 0; j--) { /* ---- läuft ueber alle Linien eines Slots ---- */ - FIXP_QMF imag = imagSlot[j]; // no_channels-1 .. 0 - FIXP_QMF real = realSlot[j]; // ~~"~~ - { - INT_PCM tmp; - FIXP_DBL Are = FX_QSS2FX_DBL(sta[0]) + fMultDiv2( p_fltm[0] , real); - - if (qmf->outGain!=(FIXP_DBL)0x80000000) { - Are = fMult(Are,qmf->outGain); - } - - #if SAMPLE_BITS > 16 - tmp = (INT_PCM)(SATURATE_SHIFT(fAbs(Are), scale, SAMPLE_BITS)); - #else - tmp = (INT_PCM)(SATURATE_RIGHT_SHIFT(fAbs(Are), scale, SAMPLE_BITS)); - #endif - if (Are < (FIXP_QMF)0) { - tmp = -tmp; - } - timeOut[ (j)*stride ] = tmp; - } - - sta[0] = sta[1] + FX_DBL2FX_QSS(fMultDiv2( p_flt [4] , imag )); - sta[1] = sta[2] + FX_DBL2FX_QSS(fMultDiv2( p_fltm[1] , real )); - sta[2] = sta[3] + FX_DBL2FX_QSS(fMultDiv2( p_flt [3] , imag )); - sta[3] = sta[4] + FX_DBL2FX_QSS(fMultDiv2( p_fltm[2] , real )); - sta[4] = sta[5] + FX_DBL2FX_QSS(fMultDiv2( p_flt [2] , imag )); - sta[5] = sta[6] + FX_DBL2FX_QSS(fMultDiv2( p_fltm[3] , real )); - sta[6] = sta[7] + FX_DBL2FX_QSS(fMultDiv2( p_flt [1] , imag )); - sta[7] = sta[8] + FX_DBL2FX_QSS(fMultDiv2( p_fltm[4] , real )); - sta[8] = FX_DBL2FX_QSS(fMultDiv2( p_flt [0] , imag )); - - p_flt += (p_stride*QMF_NO_POLY); - p_fltm -= (p_stride*QMF_NO_POLY); - sta += 9; // = (2*QMF_NO_POLY-1); - } -} - -#ifndef FUNCTION_qmfSynPrototypeFirSlot_NonSymmetric -/*! - \brief Perform Synthesis Prototype Filtering on a single slot of input data. - - The filter takes 2 * qmf->no_channels of input data and - generates qmf->no_channels time domain output samples. -*/ -static -void qmfSynPrototypeFirSlot_NonSymmetric( - HANDLE_QMF_FILTER_BANK qmf, - FIXP_QMF *RESTRICT realSlot, /*!< Input: Pointer to real Slot */ - FIXP_QMF *RESTRICT imagSlot, /*!< Input: Pointer to imag Slot */ - INT_PCM *RESTRICT timeOut, /*!< Time domain data */ - int stride - ) -{ - FIXP_QSS* FilterStates = (FIXP_QSS*)qmf->FilterStates; - int no_channels = qmf->no_channels; - const FIXP_PFT *p_Filter = qmf->p_filter; - int p_stride = qmf->p_stride; - int j; - FIXP_QSS *RESTRICT sta = FilterStates; - const FIXP_PFT *RESTRICT p_flt, *RESTRICT p_fltm; - int scale = ((DFRACT_BITS-SAMPLE_BITS)-1-qmf->outScalefactor); - - p_flt = p_Filter; /*!< Pointer to first half of filter coefficients */ - p_fltm = &p_flt[qmf->FilterSize/2]; /* at index 320, overall 640 coefficients */ - - FDK_ASSERT(SAMPLE_BITS-1-qmf->outScalefactor >= 0); // (DFRACT_BITS-SAMPLE_BITS)-1-qmf->outScalefactor >= 0); - - for (j = no_channels-1; j >= 0; j--) { /* ---- läuft ueber alle Linien eines Slots ---- */ - - FIXP_QMF imag = imagSlot[j]; // no_channels-1 .. 0 - FIXP_QMF real = realSlot[j]; // ~~"~~ - { - INT_PCM tmp; - FIXP_QMF Are = sta[0] + FX_DBL2FX_QSS(fMultDiv2( p_fltm[4] , real )); - - #if SAMPLE_BITS > 16 - tmp = (INT_PCM)(SATURATE_SHIFT(fAbs(Are), scale, SAMPLE_BITS)); - #else - tmp = (INT_PCM)(SATURATE_RIGHT_SHIFT(fAbs(Are), scale, SAMPLE_BITS)); - #endif - if (Are < (FIXP_QMF)0) { - tmp = -tmp; - } - timeOut[j*stride] = tmp; - } - - sta[0] = sta[1] + FX_DBL2FX_QSS(fMultDiv2( p_flt [4] , imag )); - sta[1] = sta[2] + FX_DBL2FX_QSS(fMultDiv2( p_fltm[3] , real )); - sta[2] = sta[3] + FX_DBL2FX_QSS(fMultDiv2( p_flt [3] , imag )); - - sta[3] = sta[4] + FX_DBL2FX_QSS(fMultDiv2( p_fltm[2] , real )); - sta[4] = sta[5] + FX_DBL2FX_QSS(fMultDiv2( p_flt [2] , imag )); - sta[5] = sta[6] + FX_DBL2FX_QSS(fMultDiv2( p_fltm[1] , real )); - sta[6] = sta[7] + FX_DBL2FX_QSS(fMultDiv2( p_flt [1] , imag )); - - sta[7] = sta[8] + FX_DBL2FX_QSS(fMultDiv2( p_fltm[0] , real )); - sta[8] = FX_DBL2FX_QSS(fMultDiv2( p_flt [0] , imag )); - - p_flt += (p_stride*QMF_NO_POLY); - p_fltm += (p_stride*QMF_NO_POLY); - sta += 9; // = (2*QMF_NO_POLY-1); - } - -} -#endif /* FUNCTION_qmfSynPrototypeFirSlot_NonSymmetric */ - -#ifndef FUNCTION_qmfAnaPrototypeFirSlot -/*! - \brief Perform Analysis Prototype Filtering on a single slot of input data. -*/ -static -void qmfAnaPrototypeFirSlot( FIXP_QMF *analysisBuffer, - int no_channels, /*!< Number channels of analysis filter */ - const FIXP_PFT *p_filter, - int p_stride, /*!< Stide of analysis filter */ - FIXP_QAS *RESTRICT pFilterStates - ) -{ - int k; - - FIXP_DBL accu; - const FIXP_PFT *RESTRICT p_flt = p_filter; - FIXP_QMF *RESTRICT pData_0 = analysisBuffer + 2*no_channels - 1; - FIXP_QMF *RESTRICT pData_1 = analysisBuffer; - - FIXP_QAS *RESTRICT sta_0 = (FIXP_QAS *)pFilterStates; - FIXP_QAS *RESTRICT sta_1 = (FIXP_QAS *)pFilterStates + (2*QMF_NO_POLY*no_channels) - 1; - int pfltStep = QMF_NO_POLY * (p_stride); - int staStep1 = no_channels<<1; - int staStep2 = (no_channels<<3) - 1; /* Rewind one less */ - - /* FIR filter 0 */ - accu = fMultDiv2( p_flt[0], *sta_1); sta_1 -= staStep1; - accu += fMultDiv2( p_flt[1], *sta_1); sta_1 -= staStep1; - accu += fMultDiv2( p_flt[2], *sta_1); sta_1 -= staStep1; - accu += fMultDiv2( p_flt[3], *sta_1); sta_1 -= staStep1; - accu += fMultDiv2( p_flt[4], *sta_1); - *pData_1++ = FX_DBL2FX_QMF(accu<<1); - sta_1 += staStep2; - - p_flt += pfltStep; - - /* FIR filters 1..63 127..65 */ - for (k=0; kno_channels; - int M = L>>1; - int scale; - FIXP_QMF accu; - - const FIXP_QMF *timeInTmp1 = (FIXP_QMF *) &timeIn[3 * M]; - const FIXP_QMF *timeInTmp2 = timeInTmp1; - FIXP_QMF *rSubbandTmp = rSubband; - - rSubband[0] = timeIn[3 * M] >> 1; - - for (i = M-1; i != 0; i--) { - accu = ((*--timeInTmp1) >> 1) + ((*++timeInTmp2) >> 1); - *++rSubbandTmp = accu; - } - - timeInTmp1 = &timeIn[2 * M]; - timeInTmp2 = &timeIn[0]; - rSubbandTmp = &rSubband[M]; - - for (i = L-M; i != 0; i--) { - accu = ((*timeInTmp1--) >> 1) - ((*timeInTmp2++) >> 1); - *rSubbandTmp++ = accu; - } - - dct_III(rSubband, timeIn, L, &scale); -} - -#if !defined(FUNCTION_qmfForwardModulationLP_odd) -static void -qmfForwardModulationLP_odd( HANDLE_QMF_FILTER_BANK anaQmf, /*!< Handle of Qmf Analysis Bank */ - const FIXP_QMF *timeIn, /*!< Time Signal */ - FIXP_QMF *rSubband ) /*!< Real Output */ -{ - int i; - int L = anaQmf->no_channels; - int M = L>>1; - int shift = (anaQmf->no_channels>>6) + 1; - - for (i = 0; i < M; i++) { - rSubband[M + i] = (timeIn[L - 1 - i]>>1) - (timeIn[i]>>shift); - rSubband[M - 1 - i] = (timeIn[L + i]>>1) + (timeIn[2 * L - 1 - i]>>shift); - } - - dct_IV(rSubband, L, &shift); -} -#endif /* !defined(FUNCTION_qmfForwardModulationLP_odd) */ - - - -/*! - * - * \brief Perform complex-valued forward modulation of the time domain - * data of timeIn and stores the real part of the subband - * samples in rSubband, and the imaginary part in iSubband - * - * Only the lower bands are obtained (upto anaQmf->lsb). For - * a full bandwidth analysis it is required to set both anaQmf->lsb - * and anaQmf->usb to the amount of QMF bands. - * - */ -static void -qmfForwardModulationHQ( HANDLE_QMF_FILTER_BANK anaQmf, /*!< Handle of Qmf Analysis Bank */ - const FIXP_QMF *RESTRICT timeIn, /*!< Time Signal */ - FIXP_QMF *RESTRICT rSubband, /*!< Real Output */ - FIXP_QMF *RESTRICT iSubband /*!< Imaginary Output */ - ) -{ - int i; - int L = anaQmf->no_channels; - int L2 = L<<1; - int shift = 0; - - for (i = 0; i < L; i+=2) { - FIXP_QMF x0, x1, y0, y1; - - x0 = timeIn[i] >> 1; - x1 = timeIn[i+1] >> 1; - y0 = timeIn[L2 - 1 - i] >> 1; - y1 = timeIn[L2 - 2 - i] >> 1; - - rSubband[i] = x0 - y0; - rSubband[i+1] = x1 - y1; - iSubband[i] = x0 + y0; - iSubband[i+1] = x1 + y1; - } - - dct_IV(rSubband, L, &shift); - dst_IV(iSubband, L, &shift); - - { - { - const FIXP_QTW *RESTRICT sbr_t_cos; - const FIXP_QTW *RESTRICT sbr_t_sin; - sbr_t_cos = anaQmf->t_cos; - sbr_t_sin = anaQmf->t_sin; - - for (i = 0; i < anaQmf->lsb; i++) { - cplxMult(&iSubband[i], &rSubband[i], iSubband[i], rSubband[i], sbr_t_cos[i], sbr_t_sin[i]); - } - } - } -} - -/* - * \brief Perform one QMF slot analysis of the time domain data of timeIn - * with specified stride and stores the real part of the subband - * samples in rSubband, and the imaginary part in iSubband - * - * Only the lower bands are obtained (upto anaQmf->lsb). For - * a full bandwidth analysis it is required to set both anaQmf->lsb - * and anaQmf->usb to the amount of QMF bands. - */ -void -qmfAnalysisFilteringSlot( HANDLE_QMF_FILTER_BANK anaQmf, /*!< Handle of Qmf Synthesis Bank */ - FIXP_QMF *qmfReal, /*!< Low and High band, real */ - FIXP_QMF *qmfImag, /*!< Low and High band, imag */ - const INT_PCM *RESTRICT timeIn, /*!< Pointer to input */ - const int stride, /*!< stride factor of input */ - FIXP_QMF *pWorkBuffer /*!< pointer to temporal working buffer */ - ) -{ - int i; - int offset = anaQmf->no_channels*(QMF_NO_POLY*2-1); - /* - Feed time signal into oldest anaQmf->no_channels states - */ - { - FIXP_QAS *RESTRICT FilterStatesAnaTmp = ((FIXP_QAS*)anaQmf->FilterStates)+offset; - - /* Feed and scale actual time in slot */ - for(i=anaQmf->no_channels>>1; i!=0; i--) { - /* Place INT_PCM value left aligned in scaledTimeIn */ -#if (QAS_BITS==SAMPLE_BITS) - *FilterStatesAnaTmp++ = (FIXP_QAS)*timeIn; timeIn += stride; - *FilterStatesAnaTmp++ = (FIXP_QAS)*timeIn; timeIn += stride; -#elif (QAS_BITS>SAMPLE_BITS) - *FilterStatesAnaTmp++ = (FIXP_QAS)((*timeIn)<<(QAS_BITS-SAMPLE_BITS)); timeIn += stride; - *FilterStatesAnaTmp++ = (FIXP_QAS)((*timeIn)<<(QAS_BITS-SAMPLE_BITS)); timeIn += stride; -#else - *FilterStatesAnaTmp++ = (FIXP_QAS)((*timeIn)>>(SAMPLE_BITS-QAS_BITS)); timeIn += stride; - *FilterStatesAnaTmp++ = (FIXP_QAS)((*timeIn)>>(SAMPLE_BITS-QAS_BITS)); timeIn += stride; -#endif - } - } - - if (anaQmf->flags & QMF_FLAG_NONSYMMETRIC) { - qmfAnaPrototypeFirSlot_NonSymmetric( - pWorkBuffer, - anaQmf->no_channels, - anaQmf->p_filter, - anaQmf->p_stride, - (FIXP_QAS*)anaQmf->FilterStates - ); - } else { - qmfAnaPrototypeFirSlot( pWorkBuffer, - anaQmf->no_channels, - anaQmf->p_filter, - anaQmf->p_stride, - (FIXP_QAS*)anaQmf->FilterStates - ); - } - - if (anaQmf->flags & QMF_FLAG_LP) { - if (anaQmf->flags & QMF_FLAG_CLDFB) - qmfForwardModulationLP_odd( anaQmf, - pWorkBuffer, - qmfReal ); - else - qmfForwardModulationLP_even( anaQmf, - pWorkBuffer, - qmfReal ); - - } else { - qmfForwardModulationHQ( anaQmf, - pWorkBuffer, - qmfReal, - qmfImag - ); - } - /* - Shift filter states - - Should be realized with modulo adressing on a DSP instead of a true buffer shift - */ - FDKmemmove ((FIXP_QAS*)anaQmf->FilterStates, (FIXP_QAS*)anaQmf->FilterStates+anaQmf->no_channels, offset*sizeof(FIXP_QAS)); -} - - -/*! - * - * \brief Perform complex-valued subband filtering of the time domain - * data of timeIn and stores the real part of the subband - * samples in rAnalysis, and the imaginary part in iAnalysis - * The qmf coefficient table is symmetric. The symmetry is expoited by - * shrinking the coefficient table to half the size. The addressing mode - * takes care of the symmetries. - * - * Only the lower bands are obtained (upto anaQmf->lsb). For - * a full bandwidth analysis it is required to set both anaQmf->lsb - * and anaQmf->usb to the amount of QMF bands. - * - * \sa PolyphaseFiltering - */ - -void -qmfAnalysisFiltering( HANDLE_QMF_FILTER_BANK anaQmf, /*!< Handle of Qmf Analysis Bank */ - FIXP_QMF **qmfReal, /*!< Pointer to real subband slots */ - FIXP_QMF **qmfImag, /*!< Pointer to imag subband slots */ - QMF_SCALE_FACTOR *scaleFactor, - const INT_PCM *timeIn, /*!< Time signal */ - const int stride, - FIXP_QMF *pWorkBuffer /*!< pointer to temporal working buffer */ - ) -{ - int i; - int no_channels = anaQmf->no_channels; - - scaleFactor->lb_scale = -ALGORITHMIC_SCALING_IN_ANALYSIS_FILTERBANK; - scaleFactor->lb_scale -= anaQmf->filterScale; - - for (i = 0; i < anaQmf->no_col; i++) - { - FIXP_QMF *qmfImagSlot = NULL; - - if (!(anaQmf->flags & QMF_FLAG_LP)) { - qmfImagSlot = qmfImag[i]; - } - - qmfAnalysisFilteringSlot( anaQmf, qmfReal[i], qmfImagSlot, timeIn , stride, pWorkBuffer ); - - timeIn += no_channels*stride; - - } /* no_col loop i */ -} - -/*! - * - * \brief Perform low power inverse modulation of the subband - * samples stored in rSubband (real part) and iSubband (imaginary - * part) and stores the result in pWorkBuffer. - * - */ -inline -static void -qmfInverseModulationLP_even( HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Synthesis Bank */ - const FIXP_QMF *qmfReal, /*!< Pointer to qmf real subband slot (input) */ - const int scaleFactorLowBand, /*!< Scalefactor for Low band */ - const int scaleFactorHighBand, /*!< Scalefactor for High band */ - FIXP_QMF *pTimeOut /*!< Pointer to qmf subband slot (output)*/ - ) -{ - int i; - int L = synQmf->no_channels; - int M = L>>1; - int scale; - FIXP_QMF tmp; - FIXP_QMF *RESTRICT tReal = pTimeOut; - FIXP_QMF *RESTRICT tImag = pTimeOut + L; - - /* Move input to output vector with offset */ - scaleValues(&tReal[0], &qmfReal[0], synQmf->lsb, scaleFactorLowBand); - scaleValues(&tReal[0+synQmf->lsb], &qmfReal[0+synQmf->lsb], synQmf->usb-synQmf->lsb, scaleFactorHighBand); - FDKmemclear(&tReal[0+synQmf->usb], (L-synQmf->usb)*sizeof(FIXP_QMF)); - - /* Dct type-2 transform */ - dct_II(tReal, tImag, L, &scale); - - /* Expand output and replace inplace the output buffers */ - tImag[0] = tReal[M]; - tImag[M] = (FIXP_QMF)0; - tmp = tReal [0]; - tReal [0] = tReal[M]; - tReal [M] = tmp; - - for (i = 1; i < M/2; i++) { - /* Imag */ - tmp = tReal[L - i]; - tImag[M - i] = tmp; - tImag[i + M] = -tmp; - - tmp = tReal[M + i]; - tImag[i] = tmp; - tImag[L - i] = -tmp; - - /* Real */ - tReal [M + i] = tReal[i]; - tReal [L - i] = tReal[M - i]; - tmp = tReal[i]; - tReal[i] = tReal [M - i]; - tReal [M - i] = tmp; - - } - /* Remaining odd terms */ - tmp = tReal[M + M/2]; - tImag[M/2] = tmp; - tImag[M/2 + M] = -tmp; - - tReal [M + M/2] = tReal[M/2]; -} - -inline -static void -qmfInverseModulationLP_odd( HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Synthesis Bank */ - const FIXP_QMF *qmfReal, /*!< Pointer to qmf real subband slot (input) */ - const int scaleFactorLowBand, /*!< Scalefactor for Low band */ - const int scaleFactorHighBand, /*!< Scalefactor for High band */ - FIXP_QMF *pTimeOut /*!< Pointer to qmf subband slot (output)*/ - ) -{ - int i; - int L = synQmf->no_channels; - int M = L>>1; - int shift = 0; - - /* Move input to output vector with offset */ - scaleValues(pTimeOut+M, qmfReal, synQmf->lsb, scaleFactorLowBand); - scaleValues(pTimeOut+M+synQmf->lsb, qmfReal+synQmf->lsb, synQmf->usb-synQmf->lsb, scaleFactorHighBand); - FDKmemclear(pTimeOut+M+synQmf->usb, (L-synQmf->usb)*sizeof(FIXP_QMF)); - - dct_IV(pTimeOut+M, L, &shift); - for (i = 0; i < M; i++) { - pTimeOut[i] = pTimeOut[L - 1 - i]; - pTimeOut[2 * L - 1 - i] = -pTimeOut[L + i]; - } -} - - -/*! - * - * \brief Perform complex-valued inverse modulation of the subband - * samples stored in rSubband (real part) and iSubband (imaginary - * part) and stores the result in pWorkBuffer. - * - */ -inline -static void -qmfInverseModulationHQ( HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Synthesis Bank */ - const FIXP_QMF *qmfReal, /*!< Pointer to qmf real subband slot */ - const FIXP_QMF *qmfImag, /*!< Pointer to qmf imag subband slot */ - const int scaleFactorLowBand, /*!< Scalefactor for Low band */ - const int scaleFactorHighBand,/*!< Scalefactor for High band */ - FIXP_QMF *pWorkBuffer /*!< WorkBuffer (output) */ - ) -{ - int i; - int L = synQmf->no_channels; - int M = L>>1; - int shift = 0; - FIXP_QMF *RESTRICT tReal = pWorkBuffer; - FIXP_QMF *RESTRICT tImag = pWorkBuffer+L; - - if (synQmf->flags & QMF_FLAG_CLDFB){ - for (i = 0; i < synQmf->lsb; i++) { - cplxMult(&tImag[i], &tReal[i], - scaleValue(qmfImag[i],scaleFactorLowBand), scaleValue(qmfReal[i],scaleFactorLowBand), - synQmf->t_cos[i], synQmf->t_sin[i]); - } - for (; i < synQmf->usb; i++) { - cplxMult(&tImag[i], &tReal[i], - scaleValue(qmfImag[i],scaleFactorHighBand), scaleValue(qmfReal[i],scaleFactorHighBand), - synQmf->t_cos[i], synQmf->t_sin[i]); - } - } - - if ( (synQmf->flags & QMF_FLAG_CLDFB) == 0) { - scaleValues(&tReal[0], &qmfReal[0], synQmf->lsb, scaleFactorLowBand); - scaleValues(&tReal[0+synQmf->lsb], &qmfReal[0+synQmf->lsb], synQmf->usb-synQmf->lsb, scaleFactorHighBand); - scaleValues(&tImag[0], &qmfImag[0], synQmf->lsb, scaleFactorLowBand); - scaleValues(&tImag[0+synQmf->lsb], &qmfImag[0+synQmf->lsb], synQmf->usb-synQmf->lsb, scaleFactorHighBand); - } - - FDKmemclear(&tReal[synQmf->usb], (synQmf->no_channels-synQmf->usb)*sizeof(FIXP_QMF)); - FDKmemclear(&tImag[synQmf->usb], (synQmf->no_channels-synQmf->usb)*sizeof(FIXP_QMF)); - - dct_IV(tReal, L, &shift); - dst_IV(tImag, L, &shift); - - if (synQmf->flags & QMF_FLAG_CLDFB){ - for (i = 0; i < M; i++) { - FIXP_QMF r1, i1, r2, i2; - r1 = tReal[i]; - i2 = tImag[L - 1 - i]; - r2 = tReal[L - i - 1]; - i1 = tImag[i]; - - tReal[i] = (r1 - i1)>>1; - tImag[L - 1 - i] = -(r1 + i1)>>1; - tReal[L - i - 1] = (r2 - i2)>>1; - tImag[i] = -(r2 + i2)>>1; - } - } else - { - /* The array accesses are negative to compensate the missing minus sign in the low and hi band gain. */ - /* 26 cycles on ARM926 */ - for (i = 0; i < M; i++) { - FIXP_QMF r1, i1, r2, i2; - r1 = -tReal[i]; - i2 = -tImag[L - 1 - i]; - r2 = -tReal[L - i - 1]; - i1 = -tImag[i]; - - tReal[i] = (r1 - i1)>>1; - tImag[L - 1 - i] = -(r1 + i1)>>1; - tReal[L - i - 1] = (r2 - i2)>>1; - tImag[i] = -(r2 + i2)>>1; - } - } -} - -void qmfSynthesisFilteringSlot( HANDLE_QMF_FILTER_BANK synQmf, - const FIXP_QMF *realSlot, - const FIXP_QMF *imagSlot, - const int scaleFactorLowBand, - const int scaleFactorHighBand, - INT_PCM *timeOut, - const int stride, - FIXP_QMF *pWorkBuffer) -{ - if (!(synQmf->flags & QMF_FLAG_LP)) - qmfInverseModulationHQ ( synQmf, - realSlot, - imagSlot, - scaleFactorLowBand, - scaleFactorHighBand, - pWorkBuffer - ); - else - { - if (synQmf->flags & QMF_FLAG_CLDFB) { - qmfInverseModulationLP_odd ( synQmf, - realSlot, - scaleFactorLowBand, - scaleFactorHighBand, - pWorkBuffer - ); - } else { - qmfInverseModulationLP_even ( synQmf, - realSlot, - scaleFactorLowBand, - scaleFactorHighBand, - pWorkBuffer - ); - } - } - - if (synQmf->flags & QMF_FLAG_NONSYMMETRIC) { - qmfSynPrototypeFirSlot_NonSymmetric ( - synQmf, - pWorkBuffer, - pWorkBuffer+synQmf->no_channels, - timeOut, - stride - ); - } else { - qmfSynPrototypeFirSlot ( synQmf, - pWorkBuffer, - pWorkBuffer+synQmf->no_channels, - timeOut, - stride - ); - } -} - - -/*! - * - * - * \brief Perform complex-valued subband synthesis of the - * low band and the high band and store the - * time domain data in timeOut - * - * First step: Calculate the proper scaling factor of current - * spectral data in qmfReal/qmfImag, old spectral data in the overlap - * range and filter states. - * - * Second step: Perform Frequency-to-Time mapping with inverse - * Modulation slot-wise. - * - * Third step: Perform FIR-filter slot-wise. To save space for filter - * states, the MAC operations are executed directly on the filter states - * instead of accumulating several products in the accumulator. The - * buffer shift at the end of the function should be replaced by a - * modulo operation, which is available on some DSPs. - * - * Last step: Copy the upper part of the spectral data to the overlap buffer. - * - * The qmf coefficient table is symmetric. The symmetry is exploited by - * shrinking the coefficient table to half the size. The addressing mode - * takes care of the symmetries. If the #define #QMFTABLE_FULL is set, - * coefficient addressing works on the full table size. The code will be - * slightly faster and slightly more compact. - * - * Workbuffer requirement: 2 x sizeof(**QmfBufferReal) * synQmf->no_channels - */ -void -qmfSynthesisFiltering( HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Synthesis Bank */ - FIXP_QMF **QmfBufferReal, /*!< Low and High band, real */ - FIXP_QMF **QmfBufferImag, /*!< Low and High band, imag */ - const QMF_SCALE_FACTOR *scaleFactor, - const INT ov_len, /*!< split Slot of overlap and actual slots */ - INT_PCM *timeOut, /*!< Pointer to output */ - const INT stride, /*!< stride factor of output */ - FIXP_QMF *pWorkBuffer /*!< pointer to temporal working buffer */ - ) -{ - int i; - int L = synQmf->no_channels; - SCHAR scaleFactorHighBand; - SCHAR scaleFactorLowBand_ov, scaleFactorLowBand_no_ov; - - /* adapt scaling */ - scaleFactorHighBand = -ALGORITHMIC_SCALING_IN_ANALYSIS_FILTERBANK - scaleFactor->hb_scale; - scaleFactorLowBand_ov = - ALGORITHMIC_SCALING_IN_ANALYSIS_FILTERBANK - scaleFactor->ov_lb_scale; - scaleFactorLowBand_no_ov = - ALGORITHMIC_SCALING_IN_ANALYSIS_FILTERBANK - scaleFactor->lb_scale; - - for (i = 0; i < synQmf->no_col; i++) /* ----- no_col loop ----- */ - { - const FIXP_DBL *QmfBufferImagSlot = NULL; - - SCHAR scaleFactorLowBand = (iflags & QMF_FLAG_LP)) - QmfBufferImagSlot = QmfBufferImag[i]; - - qmfSynthesisFilteringSlot( synQmf, - QmfBufferReal[i], - QmfBufferImagSlot, - scaleFactorLowBand, - scaleFactorHighBand, - timeOut+(i*L*stride), - stride, - pWorkBuffer); - } /* no_col loop i */ - -} - - -/*! - * - * \brief Create QMF filter bank instance - * - * \return 0 if successful - * - */ -static int -qmfInitFilterBank (HANDLE_QMF_FILTER_BANK h_Qmf, /*!< Handle to return */ - void *pFilterStates, /*!< Handle to filter states */ - int noCols, /*!< Number of timeslots per frame */ - int lsb, /*!< Lower end of QMF frequency range */ - int usb, /*!< Upper end of QMF frequency range */ - int no_channels, /*!< Number of channels (bands) */ - UINT flags) /*!< flags */ -{ - FDKmemclear(h_Qmf,sizeof(QMF_FILTER_BANK)); - - if (flags & QMF_FLAG_MPSLDFB) - { - return -1; - } - - if ( !(flags & QMF_FLAG_MPSLDFB) && (flags & QMF_FLAG_CLDFB) ) - { - flags |= QMF_FLAG_NONSYMMETRIC; - h_Qmf->filterScale = QMF_CLDFB_PFT_SCALE; - - h_Qmf->p_stride = 1; - switch (no_channels) { - case 64: - h_Qmf->t_cos = qmf_phaseshift_cos64_cldfb; - h_Qmf->t_sin = qmf_phaseshift_sin64_cldfb; - h_Qmf->p_filter = qmf_cldfb_640; - h_Qmf->FilterSize = 640; - break; - case 32: - h_Qmf->t_cos = qmf_phaseshift_cos32_cldfb; - h_Qmf->t_sin = qmf_phaseshift_sin32_cldfb; - h_Qmf->p_filter = qmf_cldfb_320; - h_Qmf->FilterSize = 320; - break; - default: - return -1; - } - } - - if ( !(flags & QMF_FLAG_MPSLDFB) && ((flags & QMF_FLAG_CLDFB) == 0) ) - { - switch (no_channels) { - case 64: - h_Qmf->p_filter = qmf_64; - h_Qmf->t_cos = qmf_phaseshift_cos64; - h_Qmf->t_sin = qmf_phaseshift_sin64; - h_Qmf->p_stride = 1; - h_Qmf->FilterSize = 640; - h_Qmf->filterScale = 0; - break; - case 32: - h_Qmf->p_filter = qmf_64; - if (flags & QMF_FLAG_DOWNSAMPLED) { - h_Qmf->t_cos = qmf_phaseshift_cos_downsamp32; - h_Qmf->t_sin = qmf_phaseshift_sin_downsamp32; - } - else { - h_Qmf->t_cos = qmf_phaseshift_cos32; - h_Qmf->t_sin = qmf_phaseshift_sin32; - } - h_Qmf->p_stride = 2; - h_Qmf->FilterSize = 640; - h_Qmf->filterScale = 0; - break; - default: - return -1; - } - } - - h_Qmf->flags = flags; - - h_Qmf->no_channels = no_channels; - h_Qmf->no_col = noCols; - - h_Qmf->lsb = lsb; - h_Qmf->usb = fMin(usb, h_Qmf->no_channels); - - h_Qmf->FilterStates = (void*)pFilterStates; - - h_Qmf->outScalefactor = ALGORITHMIC_SCALING_IN_ANALYSIS_FILTERBANK + ALGORITHMIC_SCALING_IN_SYNTHESIS_FILTERBANK + h_Qmf->filterScale; - - if ( (h_Qmf->p_stride == 2) - || ((flags & QMF_FLAG_CLDFB) && (no_channels == 32)) ) { - h_Qmf->outScalefactor -= 1; - } - h_Qmf->outGain = (FIXP_DBL)0x80000000; /* default init value will be not applied */ - - return (0); -} - -/*! - * - * \brief Adjust synthesis qmf filter states - * - * \return void - * - */ -static inline void -qmfAdaptFilterStates (HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Filter Bank */ - int scaleFactorDiff) /*!< Scale factor difference to be applied */ -{ - if (synQmf == NULL || synQmf->FilterStates == NULL) { - return; - } - scaleValues((FIXP_QSS*)synQmf->FilterStates, synQmf->no_channels*(QMF_NO_POLY*2 - 1), scaleFactorDiff); -} - -/*! - * - * \brief Create QMF filter bank instance - * - * Only the lower bands are obtained (upto anaQmf->lsb). For - * a full bandwidth analysis it is required to set both anaQmf->lsb - * and anaQmf->usb to the amount of QMF bands. - * - * \return 0 if succesful - * - */ -int -qmfInitAnalysisFilterBank (HANDLE_QMF_FILTER_BANK h_Qmf, /*!< Returns handle */ - FIXP_QAS *pFilterStates, /*!< Handle to filter states */ - int noCols, /*!< Number of timeslots per frame */ - int lsb, /*!< lower end of QMF */ - int usb, /*!< upper end of QMF */ - int no_channels, /*!< Number of channels (bands) */ - int flags) /*!< Low Power flag */ -{ - int err = qmfInitFilterBank(h_Qmf, pFilterStates, noCols, lsb, usb, no_channels, flags); - if ( !(flags & QMF_FLAG_KEEP_STATES) && (h_Qmf->FilterStates != NULL) ) { - FDKmemclear(h_Qmf->FilterStates, (2*QMF_NO_POLY-1)*h_Qmf->no_channels*sizeof(FIXP_QAS)); - } - - return err; -} - -/*! - * - * \brief Create QMF filter bank instance - * - * Only the lower bands are obtained (upto anaQmf->lsb). For - * a full bandwidth analysis it is required to set both anaQmf->lsb - * and anaQmf->usb to the amount of QMF bands. - * - * \return 0 if succesful - * - */ -int -qmfInitSynthesisFilterBank (HANDLE_QMF_FILTER_BANK h_Qmf, /*!< Returns handle */ - FIXP_QSS *pFilterStates, /*!< Handle to filter states */ - int noCols, /*!< Number of timeslots per frame */ - int lsb, /*!< lower end of QMF */ - int usb, /*!< upper end of QMF */ - int no_channels, /*!< Number of channels (bands) */ - int flags) /*!< Low Power flag */ -{ - int oldOutScale = h_Qmf->outScalefactor; - int err = qmfInitFilterBank(h_Qmf, pFilterStates, noCols, lsb, usb, no_channels, flags); - if ( h_Qmf->FilterStates != NULL ) { - if ( !(flags & QMF_FLAG_KEEP_STATES) ) { - FDKmemclear(h_Qmf->FilterStates, (2*QMF_NO_POLY-1)*h_Qmf->no_channels*sizeof(FIXP_QSS)); - } else { - qmfAdaptFilterStates(h_Qmf, oldOutScale-h_Qmf->outScalefactor); - } - } - return err; -} - - - - -/*! - * - * \brief Change scale factor for output data and adjust qmf filter states - * - * \return void - * - */ -void -qmfChangeOutScalefactor (HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Synthesis Bank */ - int outScalefactor /*!< New scaling factor for output data */ - ) -{ - if (synQmf == NULL || synQmf->FilterStates == NULL) { - return; - } - - /* Add internal filterbank scale */ - outScalefactor += ALGORITHMIC_SCALING_IN_ANALYSIS_FILTERBANK + ALGORITHMIC_SCALING_IN_SYNTHESIS_FILTERBANK + synQmf->filterScale; - - if ( (synQmf->p_stride == 2) - || ((synQmf->flags & QMF_FLAG_CLDFB) && (synQmf->no_channels == 32)) ) { - outScalefactor -= 1; - } - - /* adjust filter states when scale factor has been changed */ - if (synQmf->outScalefactor != outScalefactor) - { - int diff; - - if (outScalefactor > (SAMPLE_BITS - 1)) { - outScalefactor = SAMPLE_BITS - 1; - } else if (outScalefactor < (1 - SAMPLE_BITS)) { - outScalefactor = 1 - SAMPLE_BITS; - } - - diff = synQmf->outScalefactor - outScalefactor; - - qmfAdaptFilterStates(synQmf, diff); - - /* save new scale factor */ - synQmf->outScalefactor = outScalefactor; - } -} - -/*! - * - * \brief Change gain for output data - * - * \return void - * - */ -void -qmfChangeOutGain (HANDLE_QMF_FILTER_BANK synQmf, /*!< Handle of Qmf Synthesis Bank */ - FIXP_DBL outputGain /*!< New gain for output data */ - ) -{ - synQmf->outGain = outputGain; -} - diff --git a/libFDK/src/scale.cpp b/libFDK/src/scale.cpp deleted file mode 100644 index 5829443..0000000 --- a/libFDK/src/scale.cpp +++ /dev/null @@ -1,461 +0,0 @@ - -/* ----------------------------------------------------------------------------------------------------------- -Software License for The Fraunhofer FDK AAC Codec Library for Android - -© Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. - All rights reserved. - - 1. INTRODUCTION -The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements -the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. -This FDK AAC Codec software is intended to be used on a wide variety of Android devices. - -AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual -audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by -independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part -of the MPEG specifications. - -Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) -may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners -individually for the purpose of encoding or decoding bit streams in products that are compliant with -the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license -these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec -software may already be covered under those patent licenses when it is used for those licensed purposes only. - -Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, -are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional -applications information and documentation. - -2. COPYRIGHT LICENSE - -Redistribution and use in source and binary forms, with or without modification, are permitted without -payment of copyright license fees provided that you satisfy the following conditions: - -You must retain the complete text of this software license in redistributions of the FDK AAC Codec or -your modifications thereto in source code form. - -You must retain the complete text of this software license in the documentation and/or other materials -provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. -You must make available free of charge copies of the complete source code of the FDK AAC Codec and your -modifications thereto to recipients of copies in binary form. - -The name of Fraunhofer may not be used to endorse or promote products derived from this library without -prior written permission. - -You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec -software or your modifications thereto. - -Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software -and the date of any change. For modified versions of the FDK AAC Codec, the term -"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term -"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." - -3. NO PATENT LICENSE - -NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, -ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with -respect to this software. - -You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized -by appropriate patent licenses. - -4. DISCLAIMER - -This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors -"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties -of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, -including but not limited to procurement of substitute goods or services; loss of use, data, or profits, -or business interruption, however caused and on any theory of liability, whether in contract, strict -liability, or tort (including negligence), arising in any way out of the use of this software, even if -advised of the possibility of such damage. - -5. CONTACT INFORMATION - -Fraunhofer Institute for Integrated Circuits IIS -Attention: Audio and Multimedia Departments - FDK AAC LL -Am Wolfsmantel 33 -91058 Erlangen, Germany - -www.iis.fraunhofer.de/amm -amm-info@iis.fraunhofer.de ------------------------------------------------------------------------------------------------------------ */ - -/*************************** Fraunhofer IIS FDK Tools ********************** - - Author(s): - Description: Scaling operations - -******************************************************************************/ - -#include "common_fix.h" - -#include "genericStds.h" - -/************************************************** - * Inline definitions - **************************************************/ - -#define SCALE_INLINE inline - - -#if defined(__mips__) /* cppp replaced: elif */ -#include "mips/scale.cpp" - -#elif defined(__arm__) -#include "arm/scale_arm.cpp" - -#endif - -#ifndef FUNCTION_scaleValues_SGL -/*! - * - * \brief Multiply input vector by \f$ 2^{scalefactor} \f$ - * \param len must be larger than 4 - * \return void - * - */ -#define FUNCTION_scaleValues_SGL -SCALE_INLINE -void scaleValues(FIXP_SGL *vector, /*!< Vector */ - INT len, /*!< Length */ - INT scalefactor /*!< Scalefactor */ - ) -{ - INT i; - - /* Return if scalefactor is Zero */ - if (scalefactor==0) return; - - if(scalefactor > 0){ - scalefactor = fixmin_I(scalefactor,(INT)(DFRACT_BITS-1)); - for (i = len&3; i--; ) - { - *(vector++) <<= scalefactor; - } - for (i = len>>2; i--; ) - { - *(vector++) <<= scalefactor; - *(vector++) <<= scalefactor; - *(vector++) <<= scalefactor; - *(vector++) <<= scalefactor; - } - } else { - INT negScalefactor = fixmin_I(-scalefactor,(INT)DFRACT_BITS-1); - for (i = len&3; i--; ) - { - *(vector++) >>= negScalefactor; - } - for (i = len>>2; i--; ) - { - *(vector++) >>= negScalefactor; - *(vector++) >>= negScalefactor; - *(vector++) >>= negScalefactor; - *(vector++) >>= negScalefactor; - } - } -} -#endif - -#ifndef FUNCTION_scaleValues_DBL -/*! - * - * \brief Multiply input vector by \f$ 2^{scalefactor} \f$ - * \param len must be larger than 4 - * \return void - * - */ -#define FUNCTION_scaleValues_DBL -SCALE_INLINE -void scaleValues(FIXP_DBL *vector, /*!< Vector */ - INT len, /*!< Length */ - INT scalefactor /*!< Scalefactor */ - ) -{ - INT i; - - /* Return if scalefactor is Zero */ - if (scalefactor==0) return; - - if(scalefactor > 0){ - scalefactor = fixmin_I(scalefactor,(INT)DFRACT_BITS-1); - for (i = len&3; i--; ) - { - *(vector++) <<= scalefactor; - } - for (i = len>>2; i--; ) - { - *(vector++) <<= scalefactor; - *(vector++) <<= scalefactor; - *(vector++) <<= scalefactor; - *(vector++) <<= scalefactor; - } - } else { - INT negScalefactor = fixmin_I(-scalefactor,(INT)DFRACT_BITS-1); - for (i = len&3; i--; ) - { - *(vector++) >>= negScalefactor; - } - for (i = len>>2; i--; ) - { - *(vector++) >>= negScalefactor; - *(vector++) >>= negScalefactor; - *(vector++) >>= negScalefactor; - *(vector++) >>= negScalefactor; - } - } -} -#endif - -#ifndef FUNCTION_scaleValues_DBLDBL -/*! - * - * \brief Multiply input vector src by \f$ 2^{scalefactor} \f$ - * and place result into dst - * \param dst detination buffer - * \param src source buffer - * \param len must be larger than 4 - * \param scalefactor amount of left shifts to be applied - * \return void - * - */ -#define FUNCTION_scaleValues_DBLDBL -SCALE_INLINE -void scaleValues(FIXP_DBL *dst, /*!< dst Vector */ - const FIXP_DBL *src, /*!< src Vector */ - INT len, /*!< Length */ - INT scalefactor /*!< Scalefactor */ - ) -{ - INT i; - - /* Return if scalefactor is Zero */ - if (scalefactor==0) { - if (dst != src) - FDKmemmove(dst, src, len*sizeof(FIXP_DBL)); - } - else { - - if(scalefactor > 0){ - scalefactor = fixmin_I(scalefactor,(INT)DFRACT_BITS-1); - for (i = len&3; i--; ) - { - *(dst++) = *(src++) << scalefactor; - } - for (i = len>>2; i--; ) - { - *(dst++) = *(src++) << scalefactor; - *(dst++) = *(src++) << scalefactor; - *(dst++) = *(src++) << scalefactor; - *(dst++) = *(src++) << scalefactor; - } - } else { - INT negScalefactor = fixmin_I(-scalefactor,(INT)DFRACT_BITS-1); - for (i = len&3; i--; ) - { - *(dst++) = *(src++) >> negScalefactor; - } - for (i = len>>2; i--; ) - { - *(dst++) = *(src++) >> negScalefactor; - *(dst++) = *(src++) >> negScalefactor; - *(dst++) = *(src++) >> negScalefactor; - *(dst++) = *(src++) >> negScalefactor; - } - } - } -} -#endif - -#ifndef FUNCTION_scaleValuesWithFactor_DBL -/*! - * - * \brief Multiply input vector by \f$ 2^{scalefactor} \f$ - * \param len must be larger than 4 - * \return void - * - */ -#define FUNCTION_scaleValuesWithFactor_DBL -SCALE_INLINE -void scaleValuesWithFactor( - FIXP_DBL *vector, - FIXP_DBL factor, - INT len, - INT scalefactor - ) -{ - INT i; - - /* Compensate fMultDiv2 */ - scalefactor++; - - if(scalefactor > 0){ - scalefactor = fixmin_I(scalefactor,(INT)DFRACT_BITS-1); - for (i = len&3; i--; ) - { - *vector = fMultDiv2(*vector, factor) << scalefactor; - vector++; - } - for (i = len>>2; i--; ) - { - *vector = fMultDiv2(*vector, factor) << scalefactor; vector++; - *vector = fMultDiv2(*vector, factor) << scalefactor; vector++; - *vector = fMultDiv2(*vector, factor) << scalefactor; vector++; - *vector = fMultDiv2(*vector, factor) << scalefactor; vector++; - } - } else { - INT negScalefactor = fixmin_I(-scalefactor,(INT)DFRACT_BITS-1); - for (i = len&3; i--; ) - { - *vector = fMultDiv2(*vector, factor) >> negScalefactor; - vector++; - } - for (i = len>>2; i--; ) - { - *vector = fMultDiv2(*vector, factor) >> negScalefactor; vector++; - *vector = fMultDiv2(*vector, factor) >> negScalefactor; vector++; - *vector = fMultDiv2(*vector, factor) >> negScalefactor; vector++; - *vector = fMultDiv2(*vector, factor) >> negScalefactor; vector++; - } - } -} -#endif /* FUNCTION_scaleValuesWithFactor_DBL */ - - -/******************************************* - -IMPORTANT NOTE for usage of getScalefactor() - -If the input array contains negative values too, then these functions may sometimes return -the actual maximum value minus 1, due to the nature of the applied algorithm. -So be careful with possible fractional -1 values that may lead to overflows when being fPow2()'ed. - -********************************************/ - - - -#ifndef FUNCTION_getScalefactorShort -/*! - * - * \brief Calculate max possible scale factor for input vector of shorts - * - * \return Maximum scale factor / possible left shift - * - */ -#define FUNCTION_getScalefactorShort -SCALE_INLINE -INT getScalefactorShort(const SHORT *vector, /*!< Pointer to input vector */ - INT len /*!< Length of input vector */ - ) -{ - INT i; - SHORT temp, maxVal = 0; - - for(i=len;i!=0;i--){ - temp = (SHORT)(*vector++); - maxVal |= (temp^(temp>>(SHORT_BITS-1))); - } - - return fixmax_I((INT)0,(INT)(fixnormz_D((INT)maxVal) - (INT)1 - (INT)(DFRACT_BITS - SHORT_BITS))); -} -#endif - -#ifndef FUNCTION_getScalefactorPCM -/*! - * - * \brief Calculate max possible scale factor for input vector of shorts - * - * \return Maximum scale factor - * - */ -#define FUNCTION_getScalefactorPCM -SCALE_INLINE -INT getScalefactorPCM(const INT_PCM *vector, /*!< Pointer to input vector */ - INT len, /*!< Length of input vector */ - INT stride - ) -{ - INT i; - INT_PCM temp, maxVal = 0; - - for(i=len;i!=0;i--){ - temp = (INT_PCM)(*vector); vector+=stride; - maxVal |= (temp^(temp>>((sizeof(INT_PCM)*8)-1))); - } - return fixmax_I((INT)0,(INT)(fixnormz_D((INT)maxVal) - (INT)1 - (INT)(DFRACT_BITS - SAMPLE_BITS))); -} -#endif - -#ifndef FUNCTION_getScalefactorShort -/*! - * - * \brief Calculate max possible scale factor for input vector of shorts - * \param stride, item increment between vector members. - * \return Maximum scale factor - * - */ -#define FUNCTION_getScalefactorShort -SCALE_INLINE -INT getScalefactorShort(const SHORT *vector, /*!< Pointer to input vector */ - INT len, /*!< Length of input vector */ - INT stride - ) -{ - INT i; - SHORT temp, maxVal = 0; - - for(i=len;i!=0;i--){ - temp = (SHORT)(*vector); vector+=stride; - maxVal |= (temp^(temp>>(SHORT_BITS-1))); - } - - return fixmax_I((INT)0,(INT)(fixnormz_D((INT)maxVal) - (INT)1 - (INT)(DFRACT_BITS - SHORT_BITS))); -} -#endif - -#ifndef FUNCTION_getScalefactor_DBL -/*! - * - * \brief Calculate max possible scale factor for input vector - * - * \return Maximum scale factor - * - * This function can constitute a significant amount of computational complexity - very much depending on the - * bitrate. Since it is a rather small function, effective assembler optimization might be possible. - * - */ -#define FUNCTION_getScalefactor_DBL -SCALE_INLINE -INT getScalefactor(const FIXP_DBL *vector, /*!< Pointer to input vector */ - INT len) /*!< Length of input vector */ -{ - INT i; - FIXP_DBL temp, maxVal = (FIXP_DBL)0; - - for(i=len;i!=0;i--){ - temp = (LONG)(*vector++); - maxVal |= (FIXP_DBL)((LONG)temp^(LONG)(temp>>(DFRACT_BITS-1))); - } - - return fixmax_I((INT)0,(INT)(fixnormz_D(maxVal) - 1)); -} -#endif - -#ifndef FUNCTION_getScalefactor_SGL -#define FUNCTION_getScalefactor_SGL -SCALE_INLINE -INT getScalefactor(const FIXP_SGL *vector, /*!< Pointer to input vector */ - INT len) /*!< Length of input vector */ -{ - INT i; - SHORT temp, maxVal = (FIXP_SGL)0; - - for(i=len;i!=0;i--){ - temp = (SHORT)(*vector++); - maxVal |= (temp^(temp>>(FRACT_BITS-1))); - } - - return fixmax_I((INT)0,(INT)(fixnormz_D(FX_SGL2FX_DBL((FIXP_SGL)maxVal)) - 1)); -} -#endif - -- cgit v1.2.3