aboutsummaryrefslogtreecommitdiffstats
path: root/libFDK
Commit message (Collapse)AuthorAgeFilesLines
* Try to properly handle the case when the bitstream reader runs out of bits ↵Martin Storsjo2017-04-261-1/+15
| | | | to read
* Add checks to avoid overreading supplied buffers and fix issue #61.Robert Kausch2017-04-232-20/+45
|
* Merge remote-tracking branch 'aosp/master'Martin Storsjo2016-10-281-8/+8
|\
| * Remove redundant register storage class specifiersMartin Storsjo2016-10-181-8/+8
| | | | | | | | | | | | | | | | | | | | Clang warns about this being deprecated, when building without specifying -std=c++98. This doesn't give any measurable encoding speed impact on ARM or AArch64, on neither GCC nor Clang. Change-Id: I63a0bbd1dccb97547522da188ee585d4d8127c29
* | Merge remote-tracking branch 'aosp/master'Martin Storsjo2016-10-182-27/+27
|\|
| * Add casts to avoid errors due to narrowingMartin Storsjo2016-10-172-27/+27
| | | | | | | | | | | | | | | | | | | | | | This fixes building in C++11 mode, which normally errors out on narrowing hex literals to signed long. This is similar to what was done in git commit ef30836651 (change id I64d19a8a8059c5a96386b1eaac297fd2469515f8), completing the fix for that category of issues. Change-Id: I1907bc947d43bf44910fb2b34bf2b31c0e53aa53
* | Fix building with MSVC for ARMMartin Storsjo2016-09-111-1/+0
| | | | | | | | | | cmnintrin.h only existed for Windows CE, and doesn't seem to actually be necessary for building this.
* | Detect MSVC x64Martin Storsjo2016-09-111-1/+1
| |
* | Add aarch64 assembly optimization (ARMv8a 64 bits)Lexyan2016-09-105-0/+249
| | | | | | | | | | | | | | | | | | | | | | | | | | The fixmuldiv functions don't need inline assembly to be fast in this architecture; the compiler (both clang and GCC) figure out to use the optimal instructions for this (which is 2 instruction sequence), and when letting the compiler emit the instructions instead of using inline assembly, the compiler is able to interleave those instructions with other instructions, improving scheduling, making it even faster than when using inline assembly. Overall, this gives about 50% speedup.
* | Merge remote-tracking branch 'aosp/master'Martin Storsjo2016-08-254-61/+264
|\|
| * AAC/SBR decoder improvements and bugfixesJean-Michel Trivi2016-04-082-3/+197
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * AAC-Decoder - Add support for AOT 20 (ER-AAC scalable) (base layer only) - Add support for AAC as used in Digital Radio Mondiale (DRM30/DRM+) Modified file(s): libAACdec/src/aacdecoder.cpp libAACdec/src/aacdecoder_lib.cpp libFDK/src/FDK_core.cpp libFDK/src/FDK_tools_rom.cpp libMpegTPDec/src/tpdec_asc.cpp libMpegTPDec/src/tpdec_lib.cpp libMpegTPDec/src/version libSBRdec/include/sbrdecoder.h libSBRdec/src/env_extr.h libSBRdec/src/sbrdecoder.cpp Added file(s): libMpegTPDec/src/tpdec_drm.cpp libMpegTPDec/src/tpdec_drm.h - Fix sanity check in HCR module that was performed at the wrong point in time. Modified file(s): libAACdec/src/aacdecoder_lib.cpp libAACdec/src/block.cpp - Extend core sampling rate support up to 96 kHz. Modified file(s): libAACdec/src/aac_rom.cpp libAACdec/src/aacdecoder.cpp libAACdec/src/aacdecoder_lib.cpp - Return correct audio output channel description according number of output channels. Modified file(s): libAACdec/src/aacdecoder_lib.cpp - Indroduce decoder intern output buffer. This change allows to use framework output buffer with the actual size of the deocder output channels. Modified file(s): libAACdec/include/aacdecoder_lib.h libAACdec/src/aacdecoder.h libAACdec/src/aacdecoder_lib.cpp * SBR-Decoder - Increase robustness for erroneous input data. - Improve error concealment performance. - Fix handling of lowest sub-band for LD-SBR Modified file(s): libAACdec/src/aacdecoder.cpp libAACdec/src/aacdecoder_lib.cpp libSBRdec/src/env_calc.cpp libSBRdec/src/env_dec.cpp libSBRdec/src/env_extr.cpp libSBRdec/src/env_extr.h libSBRdec/src/sbr_dec.cpp libSBRdec/src/sbr_rom.cpp libSBRdec/src/sbr_rom.h libSBRdec/src/sbrdecoder.cpp - Add QMF delay compensation for ELD v2 streams decoded with the complex low delay filter-bank. Modified file(s): libSBRdec/src/sbr_dec.cpp libSBRdec/src/sbr_dec.h libSBRdec/src/sbrdecoder.cpp - Introduce a different handling of frames to be flushed dependent on whether there are delayed frames available or not. Modified file(s): libSBRdec/src/sbr_ram.h libSBRdec/src/sbrdecoder.cpp - Calculate the correct number of samples for dual-mono copy in case of no available PS data. Modified file(s): libSBRdec/src/sbrdecoder.cpp * SYS-Library - Change include order of genericStds.h to prevent conflict with definitions which are also used in math.h. Modified file(s): libSYS/src/genericStds.cpp Change-Id: I3ecffbad85f39b056213107955cfadbeb3f4b6e1
| * AAC/SBR encoder improvementsJean-Michel Trivi2016-04-082-1/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * AAC-Encoder - AAC-ELD core encoder audio quality tuning. Update tuning tables, configure bitreservoir size and adapt afterburner iteration value. Modified file(s): libAACenc/src/aacenc.h libAACenc/src/aacenc_lib.cpp libAACenc/src/adj_thr.cpp libAACenc/src/adj_thr.h libAACenc/src/adj_thr_data.h libAACenc/src/bandwidth.cpp libAACenc/src/pnsparam.cpp libAACenc/src/qc_main.cpp - Introduze dead zone quantizer for ELD to improve audio quality at certain configurations. Modified file(s): libAACenc/src/aacenc_lib.cpp libAACenc/src/adj_thr.cpp libAACenc/src/adj_thr.h libAACenc/src/qc_data.h libAACenc/src/qc_main.cpp libAACenc/src/quantize.cpp libAACenc/src/quantize.h libAACenc/src/sf_estim.cpp libAACenc/src/sf_estim.h - Revise TNS module to improve ELD audio quality. - Use new window function and separate prediction gain according TNS filters. - Add missing memory initilization to TNS configuration. Modified file(s): libAACenc/src/aacenc_lib.cpp libAACenc/src/aacenc_tns.cpp libAACenc/src/aacenc_tns.h libAACenc/src/psy_main.cpp libAACenc/src/tns_func.h * SBR-Encoder - Revise frequency resolution calculation and handle differently depending on number of envelopes and split frames decision. - Add and adjust ELD SBR tuning tables. Modified file(s): libSBRenc/include/sbr_encoder.h libSBRenc/src/bit_sbr.h libSBRenc/src/env_est.cpp libSBRenc/src/fram_gen.cpp libSBRenc/src/fram_gen.h libSBRenc/src/mh_det.cpp libSBRenc/src/sbr_def.h libSBRenc/src/sbr_encoder.cpp libSBRenc/src/sbr_rom.cpp libSBRenc/src/tran_det.cpp - Replace ELD transient detector with fast implementation. Modified file(s): libSBRenc/src/env_est.cpp libSBRenc/src/env_est.h libSBRenc/src/fram_gen.cpp libSBRenc/src/sbr_def.h libSBRenc/src/sbr_encoder.cpp libSBRenc/src/tran_det.cpp libSBRenc/src/tran_det.h * FDK-Library - Introduce generic compare function in tools library. Modified file(s): libFDK/include/fixpoint_math.h libFDK/src/FDK_core.cpp * SBR-Encoder - Revise ELD frame splitter to improve bit distribution. Modified file(s): libSBRenc/include/sbr_encoder.h libSBRenc/src/bit_sbr.h libSBRenc/src/env_est.cpp libSBRenc/src/fram_gen.cpp libSBRenc/src/fram_gen.h libSBRenc/src/sbr_encoder.cpp libSBRenc/src/tran_det.cpp libSBRenc/src/tran_det.h - Configure amplitude resolution according the tonality of the audio signal. Modified file(s): libSBRenc/include/sbr_encoder.h libSBRenc/src/bit_sbr.h libSBRenc/src/env_est.cpp libSBRenc/src/nf_est.cpp libSBRenc/src/nf_est.h libSBRenc/src/sbr_def.h libSBRenc/src/sbr_encoder.cpp libSBRenc/src/ton_corr.cpp libSBRenc/src/ton_corr.h libSBRenc/src/tran_det.cpp libSBRenc/src/tran_det.h Change-Id: Ie0672b989a06ee63b50240616b8d1d4b790b6cb2
| * SBR/AAC encoder updates, code clean upJean-Michel Trivi2016-04-043-30/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * SBR-Encoder - Prevent noise level overflow in noise floor detection. - Saturate threshold calculation in transient detection. Modified file(s): libSBRenc/src/nf_est.cpp libSBRenc/src/sbr_encoder.cpp libSBRenc/src/tran_det.cpp * AAC-Encoder - Expand input data range of GetInvInt() function. There was an encoder assert observed in non-default bitrate configuration. Modified file(s): libAACenc/src/aacenc_lib.cpp libAACenc/src/intensity.cpp libFDK/include/fixpoint_math.h libFDK/src/FDK_core.cpp libFDK/src/FDK_tools_rom.cpp - Make sure that the encoder is stable with regard to very low audio bandwidth confguration parameter value. - Fix lowdelay blending for low audio bandwidth. Modified file(s): libAACenc/src/aacenc.cpp libAACenc/src/aacenc_lib.cpp libAACenc/src/adj_thr.cpp libAACenc/src/psy_configuration.cpp libAACenc/src/psy_main.cpp - Disable pseudo surround flag in case metadata matrix mixdown index is present in program config element. Modified file(s): libAACenc/src/aacenc_lib.cpp - Enable variable bitrate mode in encoder api. - Add AACENC_PEAK_BITRATE parameter to encoder api. - Add AACENC_AUDIOMUXVER parameter to encoder api. Modified file(s): libAACenc/include/aacenc_lib.h libAACenc/src/aacenc.cpp libAACenc/src/aacenc.h libAACenc/src/aacenc_lib.cpp libAACenc/src/qc_main.cpp libMpegTPEnc/src/tpenc_latm.cpp libMpegTPEnc/src/version * FDK-Sources - Code clean up. Remove unneeded pseudo audio object types and transport types. Modified file(s): libAACdec/src/aacdecoder.cpp libAACdec/src/aacdecoder_lib.cpp libAACenc/include/aacenc_lib.h libAACenc/src/aacenc.cpp libAACenc/src/aacenc_lib.cpp libFDK/src/FDK_tools_rom.cpp libMpegTPDec/src/tpdec_lib.cpp libMpegTPDec/src/version libMpegTPEnc/src/tpenc_latm.cpp libMpegTPEnc/src/version libSBRdec/src/sbrdecoder.cpp libSBRenc/src/sbr_encoder.cpp libSYS/include/FDK_audio.h libSYS/src/genericStds.cpp Change-Id: I807a53cb7f48c9ee7563cb8da1d0c52221576ca6
| * Remove compiler warnings, revised ARM QMF encoderJean-Michel Trivi2016-04-042-41/+41
| | | | | | | | | | | | Bug 8493170 Change-Id: I64d19a8a8059c5a96386b1eaac297fd2469515f8
* | Invert inline and void to be compatible with gcc 3.3.4Guillaume Smaha2016-05-181-2/+2
| |
* | Merge remote-tracking branch 'aosp/master' into updateTimothy Gu2016-01-261-0/+5
|\|
| * Remove __DATE__/__TIME__Dan Willemsen2015-10-231-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | Building __DATE__/__TIME__ into the binaries means that every build will create different binaries, even if all the sources are identical. This also means that any libraries including this one will need to be patched during every OTA. Nothing appears to use the build_date/build_time fields, so just replace them with empty strings. Bug: 24204119 Change-Id: I9543eb388a1e8ab9284df9035a62fc8942cdc082
* | libFDK/include/mips/cplx_mul.h: use C code instead of ASMVicente Olivert Riera2015-09-211-38/+5
| | | | | | | | | | | | | | | | Replace the assembler code by the equivalent in C. This way it will work for every MIPS ISA. Now the check for __mips_isa_rev < 6 is no longer necessary, so remove it. Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
* | Fix the preprocessor statements controlling the use of mips{32,64}r1 ↵Jasper Lievisse Adriaanse2015-08-131-1/+1
| | | | | | | | | | | | | | | | instructions. Only enable code using mips32/mips64 instructions if the compiler is targetting this ISA. (integer madd and msub instructions aren't available in the ``canonical'' mips ISAs)
* | Merge remote-tracking branch 'aosp/master'Martin Storsjo2014-11-073-3/+3
|\|
| * [MIPSR6] Skip assembler code using MFHI/MFLO on mips32r6Duane Sand2014-07-312-2/+2
| | | | | | | | Change-Id: I3dacd96cf9d5cf9c3d34d612ebb0456d64bc23bc
| * Merge "AArch64: Make LONG 4 bytes"Glenn Kasten2014-04-091-2/+2
| |\
| | * AArch64: Make LONG 4 bytesMarcus Oakland2014-03-111-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The libSYS/include/machine_type.h header file states LONG should be "Data type representing 4 byte signed integer on all supported platforms" but only provided for defining LONG as INT and ULONG as UINT when __x86_64__ was defined. This has been changed to when __LP64__ is defined, so that it also applies to AArch64. The change to libFDK/include/common_fix.h is then needed to get the project to compile. Change-Id: Iea42d7eca97dcc9da772a05b207d134cb999a72a Signed-off-by: Marcus Oakland <marcus.oakland@arm.com>
| * | Temporary workaround for 64-bit build errorGlenn Kasten2014-03-121-1/+1
| |/ | | | | | | | | | | Replace #error by #warning so we can build 64-bit Change-Id: Ib52fbfb0e5e945ff04ba51ae06b4e3393886d7b7
* | Extend the GetInvInt table to 80 elementsMartin Storsjo2014-08-012-8/+13
| | | | | | | | | | | | | | | | | | | | This is a bug fix patch from Fraunhofer, amending/replacing/extending the previous commit which only extended the table to 55 elements. (In my previous fix, 55 seemed to be enough for the issue at hand at least. A few of the coefficients had slightly different rounding than what Fraunhofer had used though). This will show up in AOSP in the next code drop as well.
* | Extend GetInvInt to support values up to 54Martin Storsjo2014-07-292-6/+7
| | | | | | | | | | | | | | | | | | For sample rates >= 64 kHz with short blocks, the largest sfb width is 36, which after grouping can be multiplied with 3, ending up as 108. GetInvInt needs to be able to support the largest grouped sfb width, divided by two (3 * 36 / 2 = 54). This fixes VBR encoding with sample rates >= 64 kHz.
* | Add ppc optimization for clz and fixmulMark Harris2014-05-265-1/+232
| | | | | | | | | | Optimize ppc/ppc64 similar to i386/x86_64, approximately doubling encoding speed on a Power Mac G5 running OS X 10.5.8.
* | Make LONG 32 bits for ppc64 as it is for x86_64Mark Harris2014-05-261-2/+2
| |
* | Fix PowerPC Mac buildMark Harris2014-05-261-0/+4
|/
* AAC Encoder low delay qualityJean-Michel Trivi2013-08-282-21/+63
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * AAC-Encoder - Revise bit distribution for lowdelay configuration to improve encoder audio quality. - Adjust lowdelay bitreservoir for low bitreservoir configuration. Modified file(s): libAACenc\src\aacEnc_ram.cpp libAACenc\src\aacenc.cpp libAACenc\src\aacenc_lib.cpp libAACenc\src\aacenc_tns.cpp libAACenc\src\adj_thr.cpp libAACenc\src\adj_thr.h libAACenc\src\block_switch.cpp libAACenc\src\block_switch.h libAACenc\src\interface.h libAACenc\src\psy_main.cpp libAACenc\src\qc_data.h libAACenc\src\qc_main.cpp * FDK-Library - Increase the accuracy in CalcInvLdData() calculation which improves the encoder audio quality. Modified file(s): libFDK\src\fixpoint_math.cpp Bug 9428126 Change-Id: I302d7f4c3aeccf79e1b85f20e18a31e6e2b10544
* FDK update for downsampled SBRJean-Michel Trivi2013-08-275-1/+32
| | | | | | | | Add missing support for downsampled SBR in libFDK Bug 9428126 Change-Id: Idb732f8d31a115d36dd4b22916599db7fab98cae
* Disclaimer update, lib version incrementJean-Michel Trivi2013-08-2062-64/+64
| | | | | | | | | - Update disclaimer in all source files. - Increment library version in each FDK sub-module. Bug 9428126 Change-Id: I490b96d4ee472246b01483202b0bb4f1e9c2a5d7
* Bug 7170947 Update AAC codecJean-Michel Trivi2012-10-026-10/+196
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* fix mips build by reverting files backKeun young Park2012-09-112-31/+5
| | | | | | - MIPS still needs the work-around Change-Id: If68b2028bd2779ada79020bb333ec8817abe9429
* Bug fixes in AAC decoder, AAC encoder, FDK libraryJean-Michel Trivi2012-09-096-11/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Latest code drop from Fraunhofer: * AAC-Decoder - Expanded AAC-LD/ELD decoder TNS max band tables to avoid wrong data access for sampling rates <22kHz and >48kHz. Modified file(s): libAACdec\src\aacdec_tns.cpp libAACdec\src\aac_rom.h libAACdec\src\aac_rom.cpp - Fixed ELD synthesis QMF filterbank scaling for downsampled SBR. Modified file(s): libFDK\src\qmf.cpp * AAC-Encoder - Fixed bit rate limiting for lower limit as introduced in the Delivery 2012-05-11. Modified file(s): libAACenc\include\aacenc_lib.h libAACenc\src\aacenc.h libAACenc\src\aacenc.cpp libSBRenc\src\sbr_rom.h libSBRenc\src\sbr_rom.cpp - Allow negative prediction gain as meaning that there is no coding gain. Make use of scaleValueSaturate in gauss window calculation. Modified file(s): libAACenc\src\aacenc_tns.cpp - Added energy saturation to prevent overflow in short blocks. Modified file(s): libAACenc\src\grp_data.cpp - Perform scalefactor adaption in case quantized lines are out of valid range. Modified file(s): libAACenc\src\quantize.cpp - Interrupt quantization loop when no spectral data is available. Adjustments in bitreservoir adaption. Modified file(s): libAACenc\src\qc_main.cpp - Indroduced dynamic scaling in none missing harmonic energy lowering compensation. Modified file(s): libSBRenc\src\env_est.cpp * FDK-Library - Fixed saturation for negative values in scaleValueSaturate. Modified file(s): libFDK\include\scale.h Change-Id: If830ea65caef6b5554281e4b7a77a8b2e08825ce
* GCC 4.4 and later cannot handle h constructs. Fix to replace the assembly ↵Raghu Gandham2012-08-092-31/+5
| | | | | | constructs. Change-Id: I47509c20ee32f04ce42105563d2d4013910da531
* Snapshot 2bda038c163298531d47394bc2c09e1409c5d0dbThe Android Open Source Project2012-07-1161-0/+20672
Change-Id: If584e579464f28b97d50e51fc76ba654a5536c54