While testing FDK in Android P DP3 x86 64bit emulator we observed a runtime error.
The function parameter of the callback didn't use a typeless pointer.
Following patch contains a revised sbr decoder callback function with explicit data type cast to be inline with all other callbacks in FDK.
Bug: 112662306
Bug: 116075869
Test: on x86: atest DecoderTestXheAac ; atest DecoderTestAacDrc
Change-Id: Id224de22beaf2eb9631babd838c4c3ceae0a801e
Merged-In: Idc9c44a9755b8151d5c7d8107696f43ac592413b
While long-term test we discovered a bit counter overflow in the bit buffer.
The bit buffer state was only used by HCR and RVLC tool and can easily be substituted with FDKgetValidBits() call.
The following patch completely removes the bit counter and all its obsolete functions.
Bug: 112662184
Test: atest DecoderTestXheAac ; atest DecoderTestAacDrc
Change-Id: Icee0519d26a2aa62367d2dece59cd3d60ffcade7
(cherry picked from commit 15292f7e96)
While long-term test we discovered a bit counter overflow in the bit buffer.
The bit buffer state was only used by HCR and RVLC tool and can easily be substituted with FDKgetValidBits() call.
The following patch completely removes the bit counter and all its obsolete functions.
Bug: 112662184
Test: atest DecoderTestXheAac ; atest DecoderTestAacDrc
Change-Id: Icee0519d26a2aa62367d2dece59cd3d60ffcade7
Bug: 71430241
Bug: 79220129
Test: cts-tradefed run commandAndExit cts-dev -m CtsMediaTestCases -t android.media.cts.DecoderTestXheAac
cts-tradefed run commandAndExit cts-dev -m CtsMediaTestCases -t android.media.cts.DecoderTestAacDrc
Add restriction to call intensity stereo tool only for applicable configurations
Change-Id: I30ec6640bd484c56cc9d5b8b35186fc1c875e021
Fix high band energy calculation in sbr encoder
Change-Id: I964dd46fab2ed797c440a983512bbab7e1aff98a
Fix out-of-bounds read access in noiseless coder
Change-Id: I9a669435dbdca421ff9e4affec57811002d75b3b
Use temporary buffer for dummy parsing to check presence of audioPreroll data
Change-Id: I2d42c5c8deddde34351c3d2858b9fe196b3a0906
Set applyAsc to 1 in case that the ASC parsing fails
Change-Id: I552a8b960270bc18cae459ad28a3ba241035668e
Parametric stereo together with mps not supported
Change-Id: Icde14a2774a4303bb0c41046861a59d04b624365
Align ssc callback error path for drm
Change-Id: Ie8ecbfa42c702e6df81c1aec532a9ff1e653dac9
Ensure that the bit counter starts at a multiple of TPDEC_SYNCSKIP
Change-Id: I08d69ec361b2e2ed800282e333fd248b4b3ca245
Allow flushing only when audioPreroll is enabled in current and new config
Change-Id: I52e95d75de4bbed692be922a59a23bda58870625
Omit reverse channel mapping in pass through mode
Change-Id: I335e209c29a700cc091be069f1d08e4288b40793
1) Fixes some potential NULL-pointer access in case input pointer is
passed NULL
2) Modified some for lazy init
Test: mm -j 8
Change-Id: I7fca97e1d9f70d8e8c1533b519181af35a5468f7
* 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
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
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
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
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
Provide relevant DRC metadata information via API needed for DRC
presentation mode wrapper.
Bug 9428126
Change-Id: I827cd6bdfd2a8799c21935ae32af23739c90a9b6
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
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
* 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