1. 15 Apr, 2016 1 commit
    • Jean-Michel Trivi's avatar
      Fix aacDecoder_drcExtractAndMap() · 97a1b814
      Jean-Michel Trivi authored
      Parse DVB DRC data only when numThreads is below
       MAX_DRC_THREADS. The post-increment is necessary as
       it is used in fill element DRC data section.
      This solution parses as many DRC payloads as allowed by
       MAX_DRC_THREADS and skips all remaining DRC elements in the stream.
      
      Bug 27792766
      Bug 26751339
      
      Change-Id: Ie1641888bac1757c4d1491119f977fc5d436eaea
      97a1b814
  2. 08 Apr, 2016 1 commit
    • Jean-Michel Trivi's avatar
      AAC/SBR decoder improvements and bugfixes · 203e3f28
      Jean-Michel Trivi authored
      * 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
      203e3f28
  3. 05 Apr, 2016 2 commits
    • Jean-Michel Trivi's avatar
      Fix aacDecoder_drcExtractAndMap() · 4834f01b
      Jean-Michel Trivi authored
      Parse DVB DRC data only when numThreads is below
       MAX_DRC_THREADS. The post-increment is necessary as
       it is used in fill element DRC data section.
      This solution parses as many DRC payloads as allowed by
       MAX_DRC_THREADS and skips all remaining DRC elements in the stream.
      
      Bug 27792766
      Bug 26751339
      
      Change-Id: Ie1641888bac1757c4d1491119f977fc5d436eaea
      4834f01b
    • Jean-Michel Trivi's avatar
      SBR/AAC encoder updates, code clean up · e1c78ed7
      Jean-Michel Trivi authored
      * 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
      e1c78ed7
  4. 21 Mar, 2016 2 commits
    • Jean-Michel Trivi's avatar
      Fix stack corruption happening in aacDecoder_drcExtractAndMap() · a06d1c2b
      Jean-Michel Trivi authored
      In the aacDecoder_drcExtractAndMap() function, self->numThreads
        can be used after having exceeded its intended max value,
        MAX_DRC_THREADS, causing memory to be cleared after the
        threadBs[MAX_DRC_THREADS] array.
      The crash is prevented by never using self->numThreads with
        a value equal to or greater than MAX_DRC_THREADS.
      A proper fix will be required as there seems to be an issue as
        to which entry in the threadBs array is meant to be initialized
        and used.
      
      Bug 26751339
      
      Change-Id: I655cc40c35d4206ab72e83b2bdb751be2fe52b5a
      a06d1c2b
    • Jean-Michel Trivi's avatar
      Fix stack corruption happening in aacDecoder_drcExtractAndMap() · e46ff0f7
      Jean-Michel Trivi authored
      In the aacDecoder_drcExtractAndMap() function, self->numThreads
        can be used after having exceeded its intended max value,
        MAX_DRC_THREADS, causing memory to be cleared after the
        threadBs[MAX_DRC_THREADS] array.
      The crash is prevented by never using self->numThreads with
        a value equal to or greater than MAX_DRC_THREADS.
      A proper fix will be required as there seems to be an issue as
        to which entry in the threadBs array is meant to be initialized
        and used.
      
      Bug 26751339
      
      Change-Id: I655cc40c35d4206ab72e83b2bdb751be2fe52b5a
      e46ff0f7
  5. 30 Oct, 2015 1 commit
    • Dan Willemsen's avatar
      Remove __DATE__/__TIME__ · 2d435aa4
      Dan Willemsen authored
      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
      (cherry picked from commit 6e833073)
      2d435aa4
  6. 23 Oct, 2015 1 commit
    • Dan Willemsen's avatar
      Remove __DATE__/__TIME__ · 6e833073
      Dan Willemsen authored
      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
      6e833073
  7. 21 May, 2014 3 commits
    • Jean-Michel Trivi's avatar
      AAC-Decoder: SBR delay for gapless · 6792cf63
      Jean-Michel Trivi authored
      Revise decoder output delay determination. The output delay consisted of
        concealment and limiter delay. SBR delay was not covered but must be
        considered for gapless playback delay compensation.
      
      Bug 9428126
      
      Change-Id: I67483712c284de9b5378694f9db7acbed2547dd7
      6792cf63
    • Jean-Michel Trivi's avatar
      AAC-Decoder: DRC metadata in stream info · 8e087bf3
      Jean-Michel Trivi authored
      Provide relevant DRC metadata information via API needed for DRC
        presentation mode wrapper.
      
      Bug 9428126
      
      Change-Id: I827cd6bdfd2a8799c21935ae32af23739c90a9b6
      8e087bf3
    • Jean-Michel Trivi's avatar
      AAC Decoder: flush/seek improvements · af967fcc
      Jean-Michel Trivi authored
      Improve flushing and seeking.
      Add field to the API stream info structure signaling the additional output
       delay for flushing and delay compensation.
      
      Bug 9428126
      
      Change-Id: I808412905563ea3de50a2e77a9b5dfee829cd2ed
      af967fcc
  8. 31 Mar, 2014 1 commit
    • Jean-Michel Trivi's avatar
      AAC Decoder: introduce time domain limiter · 603f48ab
      Jean-Michel Trivi authored
      Introduce time domain limiter. The module is per default enabled for all
        AAC-LC and HE-AAC v1/2 streams. For all ER-AAC-LD and ER-AAC-ELD streams
        the limiter is disabled per default. The feature can be en- or disabled
        via dynamic API parameter. Note that the limiter introduces an additional
        output delay which depends on the module parameters and the streams
        sampling rate.
      
      Bug 9428126
      
      Change-Id: I299a072340b33e2c324facbd347a72c8de3d380e
      603f48ab
  9. 30 Dec, 2013 1 commit
    • Jean-Michel Trivi's avatar
      AAC Decoder: support 6.1/7.1 decoded as 5.1 · 47c680c6
      Jean-Michel Trivi authored
         - Add 6.1 and 7.1 channel support including downmixer. Per default the
           decoder creates a 5.1 channel output for all streams with more than six
           encoded channels.
           Modified file(s):
              libPCMutils/include/pcmutils_lib.h
              libPCMutils/src/pcmutils_lib.cpp
              libAACdec/include/aacdecoder_lib.h
              libAACdec/src/aac_rom.h
              libAACdec/src/aacdecoder.cpp
              libAACdec/src/aac_ram.cpp
              libAACdec/src/aacdec_drc.cpp
              libAACdec/src/aacdecoder_lib.cpp
              libAACdec/src/aac_rom.cpp
              libAACdec/src/aacdecoder.h
              libSBRdec/include/sbrdecoder.h
              libSBRdec/src/sbrdec_drc.h
              libSBRdec/src/sbrdecoder.cpp
              libSBRdec/src/sbr_ram.cpp
              libSBRdec/src/sbr_ram.h
              libMpegTPDec/include/tp_data.h
              libMpegTPDec/include/tpdec_lib.h
              libMpegTPDec/src/version
              libMpegTPDec/src/tpdec_asc.cpp
              libMpegTPEnc/include/tp_data.h
              libMpegTPEnc/src/version
              libSYS/include/FDK_audio.h
              libSYS/src/genericStds.cpp
      
         - Fix error concealment modules fade-out/in mechanism.
           Modified file(s):
              libAACdec/src/conceal.cpp
      
      Bug 9428126
      
      Change-Id: I3230bd2072314b730911cd7ec1740e290cb1d254
      47c680c6
  10. 27 Aug, 2013 5 commits
    • Jean-Michel Trivi's avatar
      Decoder parse ASC · 206a397c
      Jean-Michel Trivi authored
      * AAC-Decoder
      
         - Add support for explicit backward compatible signaling via ASC extension.
      
      Bug 9428126
      
      Change-Id: I0cb8226da07e3684bbb7eb95d10b6040973aa0f6
      206a397c
    • Jean-Michel Trivi's avatar
      Decoder stability, sanity checks improvements · 5016eb7f
      Jean-Michel Trivi authored
      * AAC-Decoder
      
         - Improved PCE handling for saver (re-)configuration and metadata processing.
           Modified file(s):
              libAACdec/src/aacdecoder.cpp
              libAACdec/src/aacdecoder_lib.cpp
      
         - Transport layer changes (config found) -> to be evaluated.
           Modified file(s):
              libMpegTPDec/include/tpdec_lib.h
              libMpegTPDec/src/tpdec_latm.h
              libMpegTPDec/src/version
              libMpegTPDec/src/tpdec_asc.cpp
              libMpegTPDec/src/tpdec_lib.cpp
              libMpegTPDec/src/tpdec_adts.cpp
              libMpegTPDec/src/tpdec_latm.cpp
              libSYS/include/FDK_audio.h
              libSYS/src/genericStds.cpp
      
         - Enable concealment state machine to skip states if the corresponding
           parameter is set to zero.
           Modified file(s):
              libAACdec/src/conceal.cpp
      
         - Add some more sanity checks to avoid segmentation faults especially when
           setting dynamic API params.
           Modified file(s):
              libAACdec/src/aacdecoder_lib.cpp
      
         - Fix to do a fail-safe initialization of IMDCT for all channels even with
           corrupt streams.
           Modified file(s):
              libAACdec/src/aacdecoder.cpp
      
         - HCR decoder fix (remove warnings).
           Modified file(s):
              libAACdec/src/block.cpp
      
         - Fix border calculation in SBR decoder's LPP transposer patch determination.
           Modified file(s):
              libSBRdec/src/env_dec.cpp
              libSBRdec/src/sbrdecoder.cpp
              libSBRdec/src/lpp_tran.cpp
      
      Bug 9428126
      
      Change-Id: Ib415b702b88a7ec8e9a55789d79cafb39296d26b
      5016eb7f
    • Jean-Michel Trivi's avatar
      Decode dynamic range control improvements · b9774f90
      Jean-Michel Trivi authored
      * AAC-Decoder
      
         - Only set the program reference level if it has changed compared to the
           previous value. This allows setting it on a frame-by-frame basis without
           limitations.
           Modified file(s):
              libAACdec/src/aacdec_drc.cpp
              libAACdec/src/aacdec_drc.h
      
         - Add expiry counter for the program reference level.
           Modified file(s):
              libAACdec/src/aacdec_drc.cpp
              libAACdec/src/aacdec_drc_types.h
      
         - Disable scaling of light compression gain values when heavy compression
           mode is enabled to have the full light compression as fallback if no heavy
           values are available.
           Modified file(s):
              libAACdec/src/aacdec_drc.cpp
              libAACdec/src/aacdecoder_lib.cpp
              libAACdec/src/aacdec_drc_types.h
      
         - Change initialization and channel disabling to improve start-up behavior in
           SBR decoder.
           Modified file(s):
              libSBRdec/src/sbrdecoder.cpp
              libSBRdec/src/sbrdec_drc.cpp
      
      Bug 9428126
      
      Change-Id: Ie1d3949c53910506da2547d32fe3bf6ee7606eb4
      b9774f90
    • Jean-Michel Trivi's avatar
      Decode parametric stereo even with invalid channel config · 2ddc922d
      Jean-Michel Trivi authored
      AAC decoder: Allow decoding of Parametric Stereo (AOT 29) bitstreams
         with invalid channel config 2.
      
      Bug 9428126
      
      Change-Id: I1e8b801dfc0e6b1706421342d4985512e83f0dbe
      2ddc922d
    • Jean-Michel Trivi's avatar
      FDK update for downsampled SBR · 3a0a6955
      Jean-Michel Trivi authored
      Add missing support for downsampled SBR in libFDK
      
      Bug 9428126
      
      Change-Id: Idb732f8d31a115d36dd4b22916599db7fab98cae
      3a0a6955
  11. 20 Aug, 2013 1 commit
  12. 02 Oct, 2012 1 commit
    • Jean-Michel Trivi's avatar
      Bug 7170947 Update AAC codec · 6ab36997
      Jean-Michel Trivi authored
      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
      6ab36997
  13. 12 Sep, 2012 1 commit
    • John Grossman's avatar
      Don't zero out spec coeffs before doing the final IMDCT. · 34ce250e
      John Grossman authored
      
      Addresses bug 7140347.
      
      When flushing the decoder, you need to make sure to zero out any
      lingering spectral coefficients as well as zero out the overlap buffer
      state after decoding the final access unit.  Zeroing out the spec
      coefficients *before* you decode the last block, however, seems like a
      mistake.  If the final block contains any useful information for the
      stream, then you end up outputting the overlap portion of the second
      to last decoded block combined with zeros.  Because of the shape of
      the second to last block's windows, this results in what appears to be
      a fade out, but actually is a zero'ed out final block.
      Signed-off-by: default avatarJohn Grossman <johngro@google.com>
      Change-Id: I0fab9ee1a5899811d5519a91dc05631e9bf4963c
      34ce250e
  14. 09 Sep, 2012 1 commit
    • Jean-Michel Trivi's avatar
      Bug fixes in AAC decoder, AAC encoder, FDK library · 381d6984
      Jean-Michel Trivi authored
      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
      381d6984
  15. 11 Jul, 2012 1 commit