aboutsummaryrefslogtreecommitdiffstats
path: root/libFDK/include/mips
diff options
context:
space:
mode:
authorJean-Michel Trivi <jmtrivi@google.com>2012-10-02 10:16:04 -0700
committerJean-Michel Trivi <jmtrivi@google.com>2012-10-02 10:46:47 -0700
commit6ab36997af5d5acda4f21d33031f4e45c85f96b7 (patch)
tree4696e6feca7d1243bb9e90da7699b00d8f026441 /libFDK/include/mips
parented8b5a747e97c9b8b029ba6485e33f3aad081652 (diff)
downloadODR-AudioEnc-6ab36997af5d5acda4f21d33031f4e45c85f96b7.tar.gz
ODR-AudioEnc-6ab36997af5d5acda4f21d33031f4e45c85f96b7.tar.bz2
ODR-AudioEnc-6ab36997af5d5acda4f21d33031f4e45c85f96b7.zip
Bug 7170947 Update AAC codec
From Fraunhofer: * AAC Decoder - Stick to the written MPEG standard instead of the MPEG reference software in terms of reference level normalization. Always set the program reference level equal to the target level. This disables level normalization using a default level for streams without embedded metadata. Modified file(s): libAACdec\src\aacdec_drc.cpp - Fix downmix channel assignment when using a WAV output channel ordering. Modified file(s): libPCMutils\src\pcmutils_lib.cpp - Retain signal accuracy and prevent LSB alteration when no level correction needs to be done. Modified file(s): libAACdec\src\aacdec_drc.h libAACdec\src\aacdec_drc.cpp libSBRdec\src\sbrdecoder.cpp libSBRdec\src\sbr_dec.cpp libSBRdec\src\sbrdec_drc.cpp - Align metadata processing with reference implementation. Modified file(s): libAACdec\src\aacdec_drc.h libAACdec\src\aacdecoder.cpp * AAC-Encoder - Prevent potential overflow in energy calculation after TNS processing. Modified file(s): libAACenc\src\band_nrg.cpp - Added saturation for number of relevant lines which are used in pe calculation. Modified file(s): libAACenc\src\line_pe.cpp - Removed obsolete files. Deleded file(s): libAACenc\src\tns_param.h libAACenc\src\tns_param.cpp * FDK-Library - Added x86 Count Leading Zeros intrinsic. Modified file(s): libFDK\include\clz.h Added file(s): libFDK\include\x86\clz_x86.h - Fixed compilation for MIPS GCC-4.4 and higher. Modified file(s): libFDK\include\mips\cplx_mul.h libFDK\include\mips\fixmul_mips.h Change-Id: I4be65f07f88d412224c7fddc3f054e8f451176cc
Diffstat (limited to 'libFDK/include/mips')
-rw-r--r--libFDK/include/mips/cplx_mul.h39
-rw-r--r--libFDK/include/mips/fixmul_mips.h7
2 files changed, 38 insertions, 8 deletions
diff --git a/libFDK/include/mips/cplx_mul.h b/libFDK/include/mips/cplx_mul.h
index 4e8f26f..fb777ce 100644
--- a/libFDK/include/mips/cplx_mul.h
+++ b/libFDK/include/mips/cplx_mul.h
@@ -107,10 +107,23 @@ inline void cplxMultDiv2( FIXP_DBL *c_Re,
FIXP_DBL b_Re,
FIXP_DBL b_Im)
{
- INT result;
- result = (((long long)a_Re * b_Re) - ((long long) a_Im * b_Im)) >> 32;
+ 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;
- result = (((long long)a_Re * b_Im) - ((long long) a_Im * b_Re)) >> 32;
+
+ __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
@@ -123,10 +136,24 @@ inline void cplxMult( FIXP_DBL *c_Re,
FIXP_DBL b_Re,
FIXP_DBL b_Im)
{
- INT result;
- result = (((long long)a_Re * b_Re) - ((long long) a_Im * b_Im)) >> 32;
+ 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;
- result = (((long long)a_Re * b_Im) - ((long long) a_Im * b_Re)) >> 32;
+
+ __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
diff --git a/libFDK/include/mips/fixmul_mips.h b/libFDK/include/mips/fixmul_mips.h
index 0e7af0d..62d059e 100644
--- a/libFDK/include/mips/fixmul_mips.h
+++ b/libFDK/include/mips/fixmul_mips.h
@@ -100,11 +100,14 @@ amm-info@iis.fraunhofer.de
inline INT fixmuldiv2_DD (const INT a, const INT b)
{
-
- return ((long long) a * b) >> 32;
+ 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