Commit Graph

23 Commits

Author SHA1 Message Date
Nathan Caldwell
d56920e206 aacenc: Correct spreading calculation for high spreading.
The 3GPP spec uses the following calculation for high spreading:

thr'_spr = max(thr_scaled, s_h(n) * thr_scaled(n-1))

where, n is defined as the current band, and s_h() is defined as "[...] the
distance of adjacent bands in Bark and a constant slope that is 15 dB/Bark
[...]". This is a little ambiguous as you would assume you want the Bark
width of the previous band for this calculation. However, this assumption
appears to be incorrect, and you really want the Bark width of the current
band. Coincidentally this is exactly what the spec calls for! =P

This noticeably improves Tom's Diner at low bitrates (I tested at 64kbps,
with mid/side disabled).

Patch by: Nathan Caldwell <saintdev@gmail.com>

Originally committed as revision 25622 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-11-01 07:45:13 +00:00
Nathan Caldwell
3ea12f65ba aacenc: cosmetics: Swap spreading_hi/low name to match the 3GPP spec.
Patch by: Nathan Caldwell <saintdev@gmail.com>

Originally committed as revision 25621 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-11-01 07:39:31 +00:00
Nathan Caldwell
c8dcb9dee1 aacenc: Remove energy 'normalization' modification from the 3GPP psymodel
This greatly improves bitrate handling. You will now get within a few
kbps of your requested bitrate instead of 20-40kbps higher.

There is absolutely no analog to this line in the 3GPP spec, that I
can find.

patch by Nathan Caldwell saintdev (at) gmail

Originally committed as revision 25589 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-10-27 06:36:47 +00:00
Nathan Caldwell
4df5aebb81 aacenc: Fix threshold-in-quiet calculation in the 3GPP psymodel.
Removing the modification vastly improves quality (at a slight bitrate
cost) for some samples. castanets.wav is a good example. The closest
equivalent I see to the modification in the 3GPP spec is a similar
modification (over a specific frequency range) when TNS is used.

This also changes the threshold-in-quiet calculation to match the
3GPP spec.

patch by Nathan Caldwell saintdev (at) gmail

Originally committed as revision 25588 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-10-27 05:54:44 +00:00
Nathan Caldwell
eafadadaf5 aacenc: Fix the conditions under which 3GPP pre-echo control is run.
According to the 3GPP spec:
"Thus the pre-echo control is inactive for the first short window (but
not all short windows in a short frame) after a start block and for
all frames with a stop window sequence."

Currently, pre-echo control is only run when the current frame is not
a short frame, and the previous frame is not a short frame.

patch by Nathan Caldwell saintdev (at) gmail

Originally committed as revision 25587 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-10-27 05:54:41 +00:00
Nathan Caldwell
276df9d821 aacenc: Fix bug in LAME windowing where only one channel got initalized
I used the same loop counter for the inner and outer initalization loops.
This caused initalization to only run for the first channel. This in turn lead
to any channel other than the first using only short blocks.

Patch by Nathan Caldwell, saintdev at gmail

Originally committed as revision 25566 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-10-25 06:15:21 +00:00
Alex Converse
0e107f7890 psymodel: Const correct FFPsyWindowInfo.
Originally committed as revision 24999 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-08-30 23:48:35 +00:00
Nathan Caldwell
62147469da acenc: LAME-inspired window decision
This performs quite a bit better than the current 3GPP-inspired window decision
on all the samples I have tested. On the castanets.wav sample it performs very
similar to iTunes window selection, and seems to perform better than Nero.
On fatboy.wav, it seems to perform at least as good as iTunes, if not better.
Nero performs horribly on this sample.

Patch by: Nathan Caldwell <saintdev@gmail.com>

Originally committed as revision 24892 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-08-23 20:00:03 +00:00
Nathan Caldwell
af00dddeca aacenc: Rename Psy3gpp* structs to AacPsy*
This allows cleaner implementation of other psymodels using the existing
structs. It also will make it easier to interchange individual parts of
the psymodel to create hybrid models.

Patch by: Nathan Caldwell <saintdev@gmail.com>

Originally committed as revision 24890 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-08-23 19:27:24 +00:00
Alex Converse
49d3aab764 aacenc: psy_3gpp_init(): Fix line_to_frequency for short windows.
Originally committed as revision 24233 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-07-14 04:10:52 +00:00
Alex Converse
cecaf7d71a aacenc: aac_psy_init(): Factorize line_to_frequency.
Originally committed as revision 24232 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-07-14 04:10:47 +00:00
Alex Converse
d7194e3b73 aacenc: psy_3gpp_init(): Fix ath for the first line in each sfb.
Fix the MDCT line to frequency calculation for the first line in each sfb.
Use this value to calculate ATH.

Originally committed as revision 24231 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-07-14 04:10:41 +00:00
Alex Converse
886385afd6 aacenc: psy_3gpp_init(): Calculate barks on demand.
Originally committed as revision 24230 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-07-14 04:10:31 +00:00
Alex Converse
75ef689884 aacenc: Fix window decision logic.
This keeps the encoder from switching away from an wight short sequence
prematurely when attacks are detected two frames in a row. It also allows for
the legal and useful LONG_STOP_SEQUENCE to LONG_START_SEQUENCE transition.

Originally committed as revision 23870 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-06-28 21:49:26 +00:00
Alex Converse
31184aac87 aacenc: Fix psy logic.
Set band info before determining scalefactors. Use the look ahead for
windowing decision.

Originally committed as revision 23132 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-05-14 16:49:11 +00:00
Diego Biurrun
ba87f0801d Remove explicit filename from Doxygen @file commands.
Passing an explicit filename to this command is only necessary if the
documentation in the @file block refers to a file different from the
one the block resides in.

Originally committed as revision 22921 to svn://svn.ffmpeg.org/ffmpeg/trunk
2010-04-20 14:45:34 +00:00
Alex Converse
988c170547 Change fminf/fmaxf to FFMIN/FFMAX to fix the build on broken operating systems.
Originally committed as revision 19391 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-07-09 17:22:59 +00:00
Diego Biurrun
c8f47d8b79 cosmetics: Remove unnecessary {} around if/for blocks;
move statements after if/for to the next line.

Originally committed as revision 19378 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-07-08 21:36:33 +00:00
Diego Biurrun
99d61d340c cosmetics: prettyprinting, K&R style, break overly long lines
Originally committed as revision 19377 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-07-08 21:16:06 +00:00
Alex Converse
fd257dc4c0 Cosmetics: Pretty print the AAC encoder.
Originally committed as revision 19376 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-07-08 20:36:45 +00:00
Alex Converse
78e65cd772 Merge the AAC encoder from SoC svn. It is still considered experimental.
Originally committed as revision 19375 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-07-08 20:01:31 +00:00
Diego Biurrun
bad5537e2c Use full internal pathname in doxygen @file directives.
Otherwise doxygen complains about ambiguous filenames when files exist
under the same name in different subdirectories.

Originally committed as revision 16912 to svn://svn.ffmpeg.org/ffmpeg/trunk
2009-02-01 02:00:19 +00:00
Kostya Shishkov
bf689db069 Add okayed chunks of AAC encoder psychoacoustic model
Originally committed as revision 14822 to svn://svn.ffmpeg.org/ffmpeg/trunk
2008-08-18 05:39:44 +00:00