Commit Graph

121 Commits

Author SHA1 Message Date
Alex Converse ed492b61db Add an HE-AAC v1 decoder.
A large portion of this code was orignally authored by Robert Swain. The rest
was written by me. Full history is available at:
svn://svn.ffmpeg.org/soc/aac-sbr
http://github.com/aconverse/ffmpeg-heaac/tree/sbr_pub

Originally committed as revision 22316 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-03-08 04:33:02 +00:00
Alex Converse 732436920b 10l: AAC: Set multiplier to 0.
Originally committed as revision 22299 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-03-07 23:52:33 +00:00
Alex Converse 54f158bda2 AAC: Set codec parameters in the first frame rather than in .init()
Originally committed as revision 22298 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-03-07 23:46:40 +00:00
Alex Converse 57cb8d9831 AAC: Add a new line after the TNS error message.
Originally committed as revision 22287 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-03-07 21:07:22 +00:00
Måns Rullgård 1429224b04 Move FFT parts from dsputil.h to fft.h
Originally committed as revision 22235 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-03-06 14:34:46 +00:00
Alex Converse b5e2bb8c3c AAC: Return the number of bytes consumed in decoding a frame.
The libfaad wrapper does this.

Originally committed as revision 22206 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-03-04 12:34:15 +00:00
Alex Converse ab2a302834 AAC: Mark predictor functions av_always_inline.
This results in a 50% speedup on main profile with no increase in binary size.

Originally committed as revision 22196 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-03-04 04:58:43 +00:00
Alex Converse c4a90caae2 aac: Keep decode_band_types() from eating all padding at the end of a buffer.
Due to a shortcoming in the AAC specification, if an all zero buffer is
fed to section data decoding it will never terminate. That means without
a buffer exhaustion check decode_band_types() will consume all input
buffer padding. Worse if a get_bits() implementation that returns zeros
when padding is exhausted is used, the function will never terminate.

The fixes that by added a buffer exhaustion check in the sectioning
decoding loop.

Originally committed as revision 22044 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-02-24 23:56:52 +00:00
Alex Converse 8d63712486 Add some AAC buffer overread checks.
Originally committed as revision 21886 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-02-18 23:06:56 +00:00
Alex Converse 8958445898 AAC: Mark che_configure() as av_cold.
It is also only called when the output configuration is not locked.

Originally committed as revision 21834 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-02-15 16:29:46 +00:00
Alex Converse ff98c17cba AAC: Mark functions that are only called when the output configuration is not locked as av_cold.
Originally committed as revision 21833 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-02-15 16:19:46 +00:00
Alex Converse 1edea057dd Output the first AAC frame. This is needed for SBR conformance.
Originally committed as revision 21739 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-02-10 14:51:57 +00:00
Måns Rullgård d356a53f44 AAC: optimise bitstream reading in decode_spectrum_and_dequant()
Using the low-level macros directly avoids redundant open/update/close
cycles.

2-3% faster on ARM, PPC, and Core i7.

Originally committed as revision 21224 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-01-15 14:02:52 +00:00
Måns Rullgård 798339fb46 AAC: ARM/NEON asm for VMUL2/4 functions
Originally committed as revision 21219 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-01-15 02:58:24 +00:00
Måns Rullgård 2ef21b9179 AAC: Reduce depth of vlc_spectral tables to 2
Up to 6% faster overall on i7, no change on A8.

Originally committed as revision 21191 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-01-13 16:46:39 +00:00
Måns Rullgård 95dff4aced AAC: Unswitch loop over window groups in decode_spectrum_and_dequant()
GCC should be able to do this, but doesn't.  Slightly faster code.

Originally committed as revision 21190 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-01-13 16:46:35 +00:00
Måns Rullgård 05f9d8fcaa AAC: simplify some calculations in decode_spectrum_and_dequant()
Simplify cur_band_type, group_len, and coef/offset calculations.  This
makes the code easier to read and slightly faster.

Originally committed as revision 21189 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-01-13 16:46:32 +00:00
Måns Rullgård c816d3d042 AAC: Compress codebook tables and optimise sign bit handling
The codebooks each consist of small number of values repeated in
groups of 2 or 4.  Storing the codebooks as a packed list of 2- or
4-bit indexes into a table reduces their size substantially (from 7.5k
to 1.5k), resulting in less cache pressure.

For the band types with sign bits in the bitstream, storing the number
and position of non-zero codebook values using a few bits avoids
multiple get_bits() calls and floating-point comparisons which gcc
handles miserably.

Some float/int type punning also avoids gcc brain damage.

Overall speedup 20-35% on Cortex-A8, 20% on Core i7.

Originally committed as revision 21188 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-01-13 16:46:28 +00:00
Måns Rullgård dc0d86face AAC: use table for cbrtf(n)*n
The maximum length of escape_sequence is 21 bits, so adjust limit in
code to match this.

Up to 10% faster on Cortex-A8.

Originally committed as revision 21153 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-01-11 20:21:26 +00:00
Måns Rullgård 7c8af53f87 AAC: escape_sequence is 21 bits max
The maximum length of escape_sequence is 21 bits, so adjust limit in
code to match this.  Also fix the comment.

Originally committed as revision 21151 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-01-11 18:02:00 +00:00
Reimar Döffinger 14b8607065 Add support for hard-coded MDCT-related ff_sine_windows tables.
Originally committed as revision 21108 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-01-09 13:28:04 +00:00
Måns Rullgård 3963a17d0e AAC: add a const to decode_spectrum_and_dequant() args
Originally committed as revision 21099 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-01-08 17:52:54 +00:00
Carl Eugen Hoyos b0bc928b86 Undo r20874: It broke AAC decoding.
Originally committed as revision 20879 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-12-16 11:39:14 +00:00
Carl Eugen Hoyos 257c7147e1 Use enum and constant to avoid three icc warnings.
Originally committed as revision 20874 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-12-15 15:57:18 +00:00
Andreas Öman f658631419 aac: Set sample rate in avctx from ADTS header (if not already set by some
other means)

Originally committed as revision 20773 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-12-08 19:20:36 +00:00
Alex Converse 4fab662769 AAC: Add a global header but output not locked output configuration status.
Originally committed as revision 20701 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-12-02 09:12:05 +00:00
Alex Converse 38610d92ff Set the SBR mode to implicit on ADTS frames occurring before the output is locked.
Originally committed as revision 20700 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-12-02 09:07:32 +00:00
Alex Converse 4e878a1898 10l: Fix inverted if-condition from r20448. Fixes issue 1562.
Originally committed as revision 20570 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-11-21 20:56:46 +00:00
Alex Converse 01d19fbc9f AAC: Rename sect_len to sect_end. It marks the last sfb of the section, not the
length of the section.

Originally committed as revision 20513 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-11-11 20:33:56 +00:00
Alex Converse 981b8fd777 Don't lock the channel output configuration based on the first value seen for
non extradata formats. Instead lock it only after the successful decoding of a
frame. This fixes issue 999.

Originally committed as revision 20448 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-11-03 22:50:02 +00:00
Robert Swain 0359289d1d AAC: Fix regression introduced in r20067 where ADTS files would always be
signalled as having a channel configuration of 1 in output_configure().
Previously this didn't matter but it does now.

Originally committed as revision 20193 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-10-09 15:38:44 +00:00
David Conrad 144fec83b3 dca and aac decoders use float_to_int16_interleave, so check for
the C version of that rather than float_to_int16.
Fixes output on ARM/VFP

Originally committed as revision 20192 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-10-08 14:40:14 +00:00
Robert Swain 754ff9a795 Refactor channel element configuration and mapping code into its own function
to allow reuse

Originally committed as revision 20069 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-09-28 15:37:18 +00:00
Robert Swain 2309923c5c Reindent after last commit
Originally committed as revision 20068 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-09-28 15:35:51 +00:00
Robert Swain e22da6b637 AAC: Add channel layout support for channel configuration as defined in the
specification

Originally committed as revision 20067 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-09-28 15:35:13 +00:00
Måns Rullgård b418a6ca7e AAC: minor simplification in PNS decoding
Originally committed as revision 19999 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-09-23 13:52:53 +00:00
Måns Rullgård 0cb7141282 AAC: 10l: fix PNS decoding
Originally committed as revision 19970 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-09-22 19:31:01 +00:00
Alex Converse 5419da8d9c AAC: Simplify some logic from r19956. (The escape codebook is unsigned.)
Originally committed as revision 19958 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-09-22 01:34:42 +00:00
Måns Rullgård 42d3fbb3f4 AAC: use new dsputil functions
Originally committed as revision 19956 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-09-22 00:48:45 +00:00
Reimar Döffinger b5f09d31c2 Make sample_fmts and channel_layouts compound literals const to reduce size of
.data section.

Originally committed as revision 19787 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-09-06 09:15:07 +00:00
Diego Biurrun 577d383b0c cosmetics: K&R coding style
Originally committed as revision 19562 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-08-02 10:50:59 +00:00
Alex Converse 36f517736f Cosmetics: reindent after last commit
Originally committed as revision 19400 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-07-10 21:54:06 +00:00
Alex Converse 6308765cb5 Ignore subsequent channel configurations after the first in an AAC file. The
current code doesn't handle them properly, and they are a dubious construction
at best.

Originally committed as revision 19399 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-07-10 21:53:04 +00:00
Ronald S. Bultje ce863d7f36 Rename ff_log_missing_feature() to av_log_missing_feature().
Originally committed as revision 19294 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-06-29 19:07:04 +00:00
Alex Converse d4eeef0c19 Cosmetics: Re-indent after last commit
Originally committed as revision 19175 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-06-12 21:16:33 +00:00
Alex Converse 85e9296f41 Move TNS and swb_offset tables from aacdectab.h to aactab.c so that they can be
shared with the AAC encoder.

Originally committed as revision 19174 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-06-12 21:14:45 +00:00
Alex Converse 401a995085 In the event of a mismatch, do not follow the sample rate index in an AAC PCE.
This matches the behavior the reference decoder and fixes issue 1072.

Originally committed as revision 18957 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-05-26 21:34:56 +00:00
Siarhei Siamashka 7d485f165f Support for getting (i)MDCT output multiplied by a constant scaling factor.
Scaling (i)MDCT output has no runtime overhead and can be used to improve
performance of audio codecs. All the changes are only needed in
'ff_mdct_init' function and slow down initialization a bit.

Originally committed as revision 18855 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-05-16 14:17:08 +00:00
Alex Converse 90350d73f8 Allow parsing and decoding of ADTS AAC files with channel config = 0
Originally committed as revision 18815 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-05-13 17:57:58 +00:00
Robert Swain 7bbd2fb126 Remove redundant assignment. err is assigned in every switch case anyway. Issue
found by CSA.

Originally committed as revision 18641 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-04-21 12:29:36 +00:00