Commit Graph

109 Commits

Author SHA1 Message Date
Martin Storsjo
19cabba1f2 Add wav writer functions, for use with a decoder example 2014-06-23 10:51:54 +03:00
Martin Storsjo
f82510410d Add support for waveformatex files
This is used for multichannel wave files.
2014-06-23 10:45:50 +03:00
Martin Storsjo
16f75a570e Support reading sox style piped wav files
Sox writes the RIFF header size as a very large number, instead
of as 0 as in libavformat.
2014-06-23 10:45:50 +03:00
Martin Storsjo
43cb942cd4 Use skip instead of fseek
fseek(SEEK_CUR) doesn't work for nonseekable streams (such
as pipes).

Only do this for skipping past small chunks; don't use it for
skipping past the actual data for non-streamed input.
2014-06-23 10:45:50 +03:00
Martin Storsjo
cb19aa7c12 Allow reading wav files with a 0 bytes RIFF chunk
This is required in order to read streamed wav files produced by
the libavformat wav muxer.
2014-06-23 10:45:50 +03:00
Martin Storsjo
3951d0a4e5 Allow opening stdin when "-" is specified 2014-06-23 10:45:50 +03:00
Martin Storsjo
e7348e7a5d Support streamed wav files with a 0 bytes data chunk 2014-06-23 10:45:50 +03:00
Martin Storsjo
1652691ee9 Use AC_SEARCH_LIBS to search for a library containing math functions
Even though the previous mechanism worked, this should be more
correct.
2014-06-23 10:44:02 +03:00
Mark Harris
b8f6c140ce Fix AIX build
Fix AIX build failure with IBM xlC compiler due to conflicting
definition of M_PI.  The libSYS/include/genericStds.h definition is
guarded with #ifndef M_PI, but was included before <math.h> which
defines M_PI with more significant digits.
2014-05-26 12:31:40 -07:00
Mark Harris
c15b653b99 Add ppc optimization for clz and fixmul
Optimize ppc/ppc64 similar to i386/x86_64, approximately doubling
encoding speed on a Power Mac G5 running OS X 10.5.8.
2014-05-26 12:23:56 -07:00
Mark Harris
5e154c7ed1 Make LONG 32 bits for ppc64 as it is for x86_64 2014-05-26 12:14:40 -07:00
Mark Harris
72fd73dbdd Fix PowerPC Mac build 2014-05-26 12:12:03 -07:00
Martin Storsjo
2f29dd48d0 Bump the version number, add a changelog entry 2013-11-25 12:25:55 +02:00
Martin Storsjo
c3f7404aab Include autogen.sh when building distribution packages 2013-11-25 12:25:55 +02:00
Martin Storsjo
164fc98be1 Include the encoder library version in the publicly installed header
This allows callers to conditionally use new API features without
breaking compatibility with the earlier versions of the library.
2013-11-01 12:11:30 +02:00
Martin Storsjo
c8002b04ff Avoid casting arbitrary values to an enum
The enum only contains the constant values 0, 1 and 2. This produces
the warning "comparison of constant 6 with expression of type
'PS_RESOLUTION' is always false" in clang for the first check
in the getNoBands function (but apparently not for the second one
even though mode>=3 shouldn't ever happen for a valid PS_RESOLUTION
value either). This could allow the compiler to completely remove
the conditions that shouldn't be able to occur even though they
actually are used and are necessary.

By passing the value as UINT instead, it is clear to the compiler
that all the checks are necessary.
2013-11-01 11:28:59 +02:00
Martin Storsjo
b41a6f9e81 Revert "Avoid too big changes in isScale"
This reverts commit 226601a8d9.

This change doesn't seem to be necessary any longer, a proper
fix seems to be included upstream now in
60a27b7fe5.
2013-11-01 10:58:46 +02:00
Martin Storsjo
321233ee92 Merge remote-tracking branch 'aosp/kitkat-release' into kitkat-merge
Conflicts:
	libAACenc/src/quantize.cpp
2013-11-01 10:46:40 +02:00
Martin Storsjo
fcb5f1b692 Ignore .dirstamp files 2013-10-03 09:02:22 +02:00
Terrance
0feb581efb Add an autogen shellscript 2013-09-07 18:32:50 +03:00
Jean-Michel Trivi
fa3eba1644 Encoder 7.1 support
* AAC-Encoder

   - Add 7.1 rear surround and 7.1 front center support to supported encoder
     channel modes. Change max channels from 6 to 8 and add 7.1 configuration
     to bandwidth and channel mapping functions.
     Modified file(s):
        libAACenc\include\aacenc_lib.h
        libAACenc\src\aacEnc_ram.cpp
        libAACenc\src\aacEnc_ram.h
        libAACenc\src\aacenc.cpp
        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\bitenc.cpp
        libAACenc\src\channel_map.cpp
        libAACenc\src\interface.h
        libAACenc\src\metadata_compressor.cpp
        libAACenc\src\psy_main.cpp
        libAACenc\src\psy_main.h
        libAACenc\src\qc_data.h
        libAACenc\src\qc_main.cpp
        libAACenc\src\qc_main.h

* SBR-Encoder

   - Support up to 7.1 audio channels. Changed max channels from 6 to 8.
     Modified file(s):
        libSBRenc\include\sbr_encoder.h
        libSBRenc\src\sbr.h
        libSBRenc\src\sbr_encoder.cpp
        libSBRenc\src\sbr_ram.cpp

* Transport-Encoder
   - Add 7.1 channel configuration to audio specific config writer in
     transport encoder library.
     Modified file(s):
        libMpegTPEnc\src\tpenc_asc.cpp
        libMpegTPEnc\src\version

* SYS-Library
   - Add 7.1 channel modes to CHANNEL_MODE description.
     Modified file(s):
        libSYS\include\FDK_audio.h
        libSYS\src\genericStds.cpp

Bug 9428126

Change-Id: Ide53583aa8e03df4537b98db80740dfe0e7a9e0f
2013-09-03 14:19:38 -07:00
Jean-Michel Trivi
9f455bea1c Encoder ELD auto configurator
* AAC-Encoder

   - Introduce ELD auto configurator to get predefined configuration at given
     bitrate and sampling rate. The configurator selects SBR on/off and if SBR
     enabled distinguishes between dualrate and downsampled SBR. In default
     configuration the ELD auto configurator is enabled.
     Modified file(s):
        libAACenc\include\aacenc_lib.h
        libAACenc\src\aacenc_lib.cpp

Bug 9428126

Change-Id: I01acc9c37e57c4154b3a818d496d538b7f8b227d
2013-09-03 11:44:33 -07:00
Jean-Michel Trivi
dbf9680648 Encoder explicit signaling
* AAC-Encoder

   - Revise explicit signaling method which is required for downsampled SBR.
     The parameter is optional and default configuration is implicit signaling
     for dualrate SBR as before. In case of downsampled SBR and HE-AAC explicit
     signaling is configured as default.
     Modified file(s):
        documentation\aacEncoder.pdf
        libAACenc\include\aacenc_lib.h
        libAACenc\src\aacenc_lib.cpp
        libMpegTPEnc\src\tpenc_asc.cpp
        libMpegTPEnc\src\version
        libSYS\include\FDK_audio.h
        libSYS\src\genericStds.cpp

Bug 9428126

Change-Id: I35138140346f17384d109ee5829be9ea5bab80fc
2013-09-03 11:31:55 -07:00
Jean-Michel Trivi
3aec97e388 Encoder downsampled SBR
* AAC-Encoder

   - Introduce optional AACENC_SBR_RATIO encoder API parameter to configure
     dualrate or downsampled SBR explicitely. ELD makes use of downsampled SBR
     in default configuration.
     Modified file(s):
        documentation\aacEncoder.pdf
        libAACenc\include\aacenc_lib.h
        libAACenc\src\aacenc.h
        libAACenc\src\aacenc_lib.cpp

* SBR-Encoder

   - Implement downsampled SBR feature.
   - Revise sbr tuning parameter selection.
     Modified file(s):
        libSBRenc\include\sbr_encoder.h
        libSBRenc\src\bit_sbr.h
        libSBRenc\src\env_est.cpp
        libSBRenc\src\mh_det.cpp
        libSBRenc\src\nf_est.cpp
        libSBRenc\src\ps_main.cpp
        libSBRenc\src\sbr.h
        libSBRenc\src\sbr_def.h
        libSBRenc\src\sbr_encoder.cpp
        libSBRenc\src\sbr_rom.cpp
        libSBRenc\src\sbr_rom.h
        libSBRenc\src\sbrenc_freq_sca.cpp
        libSBRenc\src\sbrenc_freq_sca.h
        libSBRenc\src\ton_corr.cpp

Bug 9428126

Change-Id: I731720a10829272acaaf70b84525df00a09ff3d2
2013-08-29 12:24:04 -07:00
Jean-Michel Trivi
7ad97579f8 AAC Encoder low delay quality
* 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
2013-08-28 18:06:47 -07:00
Jean-Michel Trivi
206a397c70 Decoder parse ASC
* AAC-Decoder

   - Add support for explicit backward compatible signaling via ASC extension.

Bug 9428126

Change-Id: I0cb8226da07e3684bbb7eb95d10b6040973aa0f6
2013-08-27 16:35:59 -07:00
Jean-Michel Trivi
5016eb7f65 Decoder stability, sanity checks improvements
* 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
2013-08-27 16:28:09 -07:00
Jean-Michel Trivi
b9774f9065 Decode dynamic range control improvements
* 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
2013-08-27 16:20:46 -07:00
Jean-Michel Trivi
2ddc922da8 Decode parametric stereo even with invalid channel config
AAC decoder: Allow decoding of Parametric Stereo (AOT 29) bitstreams
   with invalid channel config 2.

Bug 9428126

Change-Id: I1e8b801dfc0e6b1706421342d4985512e83f0dbe
2013-08-27 16:17:45 -07:00
Jean-Michel Trivi
3a0a695565 FDK update for downsampled SBR
Add missing support for downsampled SBR in libFDK

Bug 9428126

Change-Id: Idb732f8d31a115d36dd4b22916599db7fab98cae
2013-08-27 15:57:28 -07:00
Jean-Michel Trivi
16c472c201 AAC encoder metadata improvement
AAC-Encoder

   - Introduce metadata support for parametric stereo audio object type.
     Write metadata matrix mixdown coefficient only for channel config 5 and 6.
     Modified file(s):
        libAACenc/src/aacenc_lib.cpp

   - Revise metadata encoder downmix gain and fix matrix mixdown coefficient.
     Modified file(s):
        libAACenc/src/aacenc_lib.cpp
        libAACenc/src/metadata_compressor.cpp
        libMpegTPEnc/src/tpenc_asc.cpp
        libMpegTPEnc/src/tpenc_lib.cpp
        libMpegTPEnc/src/version

Bug 9428126

Change-Id: I87f5f1a1fdddd8223187aa0f9dc733e0ecc3e7e4
2013-08-20 15:31:42 -07:00
Jean-Michel Trivi
a84864deb7 SBR header period
AAC encoder: Connect SBR and PS header repetition rate with AACENC_HEADER_PERIOD
     parameter of the encoder API.

Bug 9428126

Change-Id: Ia1ab965de9eaa2ac229d0c395a337cbd4d20cba1
2013-08-20 15:30:07 -07:00
Jean-Michel Trivi
3c59acf128 AAC encoder bitrate limitation
AAC encoder: Make the bit rate limiting functionality more stable for multichannel
     configurations where element bit rate for SBR can differ significantly.

Bug 9428126

Change-Id: I35b134c5b3c160a8f5a16b4314782b731fe49cd8
2013-08-20 15:27:49 -07:00
Jean-Michel Trivi
fc4d7b0e73 SBR encoder improvement
SBR encoder: Introduce coupling energy ratio limitation to prevent undesirable SBR band
     amplification while decoding.

Bug 9428126

Change-Id: I18a77cd1a178fff7531b490779a29a0df7d993af
2013-08-20 15:05:08 -07:00
Jean-Michel Trivi
60a27b7fe5 Encoder intensity fix
AAC encoder: Prevent illegal intensity values delta coding at short blocks.

Bug 9428126

Change-Id: Ic287b86f3229022740f2317ea74aabe612de5e6b
2013-08-20 15:03:32 -07:00
Jean-Michel Trivi
ed247dfa54 Encoder quantizer fix
AAC Encoder: Saturate quantizer shift value to prevent
  undefined behaviour.

In very rare cases the shift value 'totalShift = (16-4)-(3*(totalShift>>2))'
 can be greater than accu data width. If you apply a shift with more then
 31 bit the result depends on the architecture and is not defined in C.
For certain platforms zeros are shifted in. That would be our desired behaviour.
On other platforms the shift will be applied as modulo. For example >>34
 would be applied as >>2. To prevent this discrepancy the shift value
 is limited/saturated to DFRACT_BITS-1. 'accu >>= fixMin(totalShift,DFRACT_BITS-1)'.

Bug 9428126

Change-Id: I27177654c4dc22cf899bc35dad9cdd040dccb02d
2013-08-20 15:01:21 -07:00
Jean-Michel Trivi
577fcbb570 Decode and SYS lib cleanup
* AAC-Encoder

   - Remove source snippets related to unsupported frame length of 960.
   - Adjust minBits initialization for disabled VBR configuration.
     Modified file(s):
        libAACenc/src/aacenc.h
        libAACenc/src/aacenc_lib.cpp
        libAACenc/src/aacenc_tns.cpp
        libAACenc/src/bandwidth.cpp
        libAACenc/src/psy_const.h
        libAACenc/src/transform.h

   - Revise encoder parameter restrictions: "Error Resilient(ER) AAC Low Complexity"
     is not supported. Where the AAC part of the FDK encoder threw an
     initialization error, now the aacEncoder_SetParam() returns an error
     before initialization if the application tries to configure this
     audio object type.
     Modified file(s):
        libAACenc/src/aacenc_lib.cpp

* SYS-Library

   - Portability fix for Mingw32.
     Modified file(s):
        libSYS/include/machine_type.h

   - Minor changes.
     Modified file(s):
        libSYS/include/wav_file.h
        libSYS/src/wav_file.cpp
        libSYS/src/cmdl_parser.cpp
        libSYS/src/genericStds.cpp

Bug 9428126

Change-Id: I9fa44923d34f033d0dc607f2b85abacb8a85eb61
2013-08-20 14:51:53 -07:00
Jean-Michel Trivi
4f0d97057c Disclaimer update, lib version increment
- Update disclaimer in all source files.
- Increment library version in each FDK sub-module.

Bug 9428126

Change-Id: I490b96d4ee472246b01483202b0bb4f1e9c2a5d7
2013-08-20 14:38:55 -07:00
Jean-Michel Trivi
8bd0baee9e Fix HE-AAC SBR ignored high-freq data
Change-Id: I12d284477f07349368e714ba52cbb2a47b024554
(cherry picked from commit a889574e60a02bbc647d3b078d2727cb48d82e5a)
2013-08-05 19:23:49 +00:00
Martin Storsjo
f6aebfd487 Bump the version number, add a changelog entry 2013-07-27 18:54:00 +03:00
Martin Storsjo
59ff381ee4 Include dependency libs (-lm) in the pkg-config file 2013-07-27 02:01:33 +03:00
Martin Storsjo
a63897ce4e Check the right element in isBook
This makes sure we read the right array element, corresponding
to all other array accesses in the same function, and all other
use of the isBook array elsewhere in the library.

This makes the fix in the previous commit ("Avoid too big changes
in isScale") work as intended, fixing other samples that triggered
assertions.
2013-07-10 17:21:42 +03:00
Martin Storsjo
226601a8d9 Avoid too big changes in isScale
These values are delta encoded, but only steps [-60,60] are
possible to encode. If the difference between two values are
bigger than that, we end up with a sequence we are unable to
encode.

This fixes crashes on certain stereo samples at higher
bitrates.
2013-03-18 16:28:50 +02:00
Martin Storsjo
bae4553d42 Merge remote-tracking branch 'aosp/master' 2013-02-27 22:06:16 +02:00
Martin Storsjo
8f9f42c104 Don't try to shift more bits than the variable length
Shifting by more than (or equal to) the variable length is
undefined in C.

This caused the quantized spectrum values to remain unshifted,
causing loud beeps in some samples.

The exact same change was originally applied in
657456949 (for AOSP) and in 24021f190 (in the separate fdk-aac
repo), but was overwritten and silently reverted by the new
upstream code drop for Android 4.2 in 381d69840a. After the code
drop, I chose not to reapply this change since the crashes that
it fixed had been fixed in other ways upstream and I was unable to
reproduce them after the new code drop.
2013-02-17 02:21:26 +02:00
Elliott Hughes
dd68dcdb75 am 0d439d3d: Merge "Remove a bionic workaround."
* commit '0d439d3d744f5ac8b0b0c16dcc9d1d3814ad002e':
  Remove a bionic workaround.
2012-11-29 20:29:44 -08:00
Elliott Hughes
03a143bcb4 Remove a bionic workaround.
(Requires corresponding bionic patch 3975cec694a0c9b42e3f7e671fcd678da92836c3.)

(cherry-pick of 1d24ddc612489f57c23e78a5deaaad91f1bf6ce5.)

Change-Id: I7105b17c285ff24fb48be23cf2067aef37f36d45
2012-11-29 19:51:22 -08:00
Elliott Hughes
0d439d3d74 Merge "Remove a bionic workaround." 2012-11-29 19:32:14 -08:00
Elliott Hughes
1d24ddc612 Remove a bionic workaround.
(Requires corresponding bionic patch 3975cec694a0c9b42e3f7e671fcd678da92836c3.)

Change-Id: Ief968db33e2f9e1957510bbd59f25faa6828d678
2012-11-29 17:30:23 -08:00
Martin Storsjo
b966edf7fc Add a changelog entry for 0.1.1, bump the version numbers 2012-11-13 23:47:12 +02:00