1
2 libmad - MPEG audio decoder library
3 Copyright (C) 2000-2004 Underbit Technologies, Inc.
4
5 $Id: CHANGES,v 1.14 2004/02/17 02:02:03 rob Exp $
6
7===============================================================================
8
9Version 0.15.1 (beta)
10
11  * Updated to autoconf 2.59, automake 1.8.2, libtool 1.5.2.
12
13  * Replaced Layer III IMDCT routine with one based on a faster algorithm,
14    improving both speed and accuracy.
15
16  * Improved portability of the Huffman table initialization.
17
18  * Fixed a problem that could result in an assertion failure in layer3.c
19    due to an invalid Layer III free format bitrate.
20
21  * Improved the robustness of Layer II bitrate/mode combinations, and added
22    a new MAD_ERROR_BADMODE error enum. The allowability of low-bitrate
23    stereo streams is influenced by the --enable-strict-iso option to
24    `configure'.
25
26Version 0.15.0 (beta)
27
28  * Updated to autoconf 2.57, automake 1.7.5, libtool 1.4.3.
29
30  * Added new mad_f_div() API routine.
31
32  * Added a 64th entry to the Layer I/Layer II scalefactor table, for better
33    compatibility with existing streams. The --enable-strict-iso option to
34    `configure' can be used to disable use of this entry.
35
36  * Modified the header decoding routine to allow the reserved emphasis
37    value, for better compatibility with existing streams. The
38    --enable-strict-iso option to `configure' can be used to restore the
39    previous behavior of reporting this value as an error.
40
41  * Added new MAD_EMPHASIS_RESERVED enumeration constant.
42
43  * Fixed a bug in the ARM version of mad_f_scale64() discovered by Andre
44    McCurdy.
45
46  * Rewrote PowerPC assembly for minor gains.
47
48  * Modified mad_timer_fraction() to avoid the possibility of division by
49    zero when 0 is passed as the second argument.
50
51  * Fixed a non-fatal problem caused by attempting to designate ancillary
52    bits in Layer III after a decoding error.
53
54  * Changed to build a shared library by default.
55
56  * Changed to use native Cygwin build by default; give --host=mingw32 to
57    `configure' to use MinGW (and avoid a dependency on the Cygwin DLL).
58
59Version 0.14.2 (beta)
60
61  * Changed Cygwin builds to use MinGW; resulting Win32 executables no
62    longer have a dependency on Cygwin DLLs.
63
64  * Added a new mad_stream_errorstr() API function to libmad for retrieving
65    a string description of the current error condition.
66
67Version 0.14.1 (beta)
68
69  * Updated config.guess and config.sub to latest upstream versions.
70
71  * Enabled libtool versioning rather than release numbering.
72
73  * Improved the documentation in minimad.c.
74
75  * Several other small fixes.
76
77Version 0.14.0 (beta)
78
79  * Added a 64-bit FPM negation operation to improve performance of subband
80    synthesis on some platforms.
81
82  * Improved MSVC++ portability and added MSVC++ project files.
83
84  * Added rounding to Layer III requantization for slightly better accuracy.
85
86Version 0.13.0 (beta)
87
88  * Ancillary data is now properly extracted from Layer III streams.
89
90  * Rewrote the Layer III joint stereo decoding routine to correct a major
91    MPEG-2 problem and a minor MPEG-1 problem decoding intensity stereo.
92
93  * Eliminated the dependency on sign-extending right shifts for Layer I and
94    Layer II.
95
96  * Renamed `private' field to `private_bits' for better C++ compatibility.
97
98  * Gratuitously renamed `sfreq' field to `samplerate' and
99    MAD_ERROR_BADSAMPLEFREQ constant to MAD_ERROR_BADSAMPLERATE.
100
101  * Added `samplerate' and `channels' fields to synth.pcm struct to allow
102    these to be different from the decoded frame, and for simpler access.
103
104  * Added new mad_stream_options() and mad_decoder_options() API entries for
105    special runtime decoding options.
106
107  * Added new MAD_OPTION_IGNORECRC and MAD_OPTION_HALFSAMPLERATE options.
108
109  * Added new MAD_FLAG_FREEFORMAT indicator flag.
110
111  * Fixed some bugs in the async decoder.
112
113  * Added a new mad_timer_multiply() API routine.
114
115  * Eliminated `+' from asm constraints under Intel for better compatibility
116    with some compilers.
117
118  * Fixed a PIC-related problem in imdct_l_arm.S.
119
120  * Eliminated a static variable to make libmad thread-safe.
121
122Version 0.12.5 (beta)
123
124  * Modified Layer III requantization to occur during Huffman decoding for
125    significant performance gains.
126
127  * Optimized short block IMDCT by eliminating redundant calculations.
128
129  * Made several other Layer III performance improvements; added
130    ASO_INTERLEAVE1, ASO_INTERLEAVE2, and ASO_ZEROCHECK
131    architecture-specific options for best performance on various
132    architectures.
133
134  * Optimized synthesis DCT to store result values as soon as they are
135    calculated.
136
137Version 0.12.4 (beta)
138
139  * New PowerPC fixed-point assembly courtesy of David Blythe.
140
141  * Reorganized fixed-point assembly routines for easier maintenance and
142    better performance.
143
144  * Improved performance of subband synthesis through better indexing and
145    fewer local variables.
146
147  * Added alias reduction for the lower two subbands of mixed short blocks,
148    per a report of ambiguity with ISO/IEC 11172-3 and for uniformity with
149    most other implementations. Also improved alias reduction performance
150    using multiply/accumulate.
151
152  * Added --enable-strict-iso option to `configure' to override best
153    accepted practices such as the alias reduction for mixed short blocks.
154
155  * Improved performance of Layer III IMDCT by using longer
156    multiply/accumulate runs where possible.
157
158Version 0.12.3 (beta)
159
160  * Added MPEG 2.5 support.
161
162  * Added preliminary support for parameterizing the binary point position
163    in the fixed-point representation.
164
165  * Added multiply/accumulate optimization to the Layer III IMDCT for long
166    blocks.
167
168  * Fixed a bug in the handling of Layer III mixed_block_flag.
169
170  * Fixed a configure problem when multiple -O CFLAGS are present.
171
172Version 0.12.2 (beta)
173
174  * Rearranged the synthesis polyphase filterbank memory vector for better
175    locality of reference, and rewrote mad_synth_frame() to accommodate,
176    resulting in improved performance.
177
178  * Discovered a combination of compiler optimization flags that further
179    improve performance.
180
181  * Changed some array references in layer3.c to pointer derefs.
182
183Version 0.12.1 (beta)
184
185  * Resolved the intensity + MS joint stereo issue (a simple bug).
186    OPT_ISKLUGE is no longer considered to be a kluge.
187
188  * Fixed another, hopefully last main_data memory bug.
189
190  * Split part of struct mad_frame into struct mad_header for convenience
191    and size.
192
193Version 0.12.0 (alpha)
194
195  * Changed the build environment to use automake and libtool. A libmad
196    shared library can now be built using the --enable-shared option to
197    `configure'.
198
199  * Added another callback to MAD's high-level decoder API after the frame
200    header has been read but before the frame's audio data is decoded.
201
202  * Streamlined header processing so that mad_frame_decode() can be called
203    with or without having already called mad_frame_header().
204
205  * Fixed some other header reading miscellany, including CRC handling and
206    free bitrate detection, and frame length verification with free
207    bitrates.
208
209  * Fixed a problem with Layer III free bitrates > 320 kbps. The main_data
210    buffer size should now be large enough to handle any size frame, by
211    virtue of the maximum possible part2_3_length.
212
213  * Further developed the async API; arbitrary messages can now be passed to
214    the subsidiary decoding process.
215
216  * Streamlined timer.c and extended its interface. It now has support for
217    video frame/field lengths, including output support for drop-frame
218    encoding.
219
220  * Replaced many constant integer preprocessor defines with enums.
221
222Version 0.11.4 (beta)
223
224  * Fixed free format bitrate discovery.
225
226  * Changed the timer implementation and extended its interface.
227
228  * Integrated Nicolas Pitre's patch for pre-shifting at compile-time and
229    for better multiply/accumulate code output.
230
231  * Applied Simon Burge's patch to imdct_l_arm.S for a.out compatibility.
232
233  * Added -mtune=strongarm for all ARM targets.
234
235Version 0.11.3 (beta)
236
237  * Added new --enable-speed and --enable-accuracy options for `configure'
238    to automatically select appropriate SSO/ASO options, et al.
239
240  * Modified subband synthesis to use multiply/accumulate optimization (if
241    available) for better speed and/or accuracy.
242
243  * Incorporated Andre McCurdy's changes for further rounding optimizations
244    in the rest of his code.
245
246Version 0.11.2 (beta)
247
248  * Incorporated Nicolas Pitre's ARM assembly and parameterized scaling
249    changes.
250
251  * Incorporated Andre McCurdy's ARM assembly optimization (used only if
252    --enable-aso is given to `configure' to enable architecture-specific
253    optimizations.)
254
255  * Reduced FPM_INTEL assembly to two instructions.
256
257  * Fixed accuracy problems with certain FPM modes in synth.c.
258
259  * Improved the accuracy of FPM_APPROX.
260
261  * Improved the accuracy of SSO.
262
263  * Improved sync discovery by checking for a sync word in the following
264    frame.
265
266  * Minor code clean-up.
267
268  * Added experimental rules for generating a libmad.so shared library.
269
270Version 0.11.1 (beta)
271
272  * Moved libmad code into a separate directory.
273
274  * Changed SSO to be disabled by default, as output accuracy is deemed to
275    be more important than speed in the general case.
276
277  * Fixed a bug in Layer III sanity checking that could cause a crash on
278    certain random data input.
279
280  * Extended the Layer III requantization table from 8191 to 8206 as some
281    encoders are known to use these values, even though ISO/IEC 11172-3
282    suggests the maximum should be 8191.
283
284Version 0.11.0 (beta)
285
286  * Implemented MPEG-2 extension to Lower Sampling Frequencies.
287
288  * Improved Layer III performance by avoiding IMDCT calculation when all
289    input samples are zero.
290
291  * Significantly reduced size of Layer II tables.
292
293Version 0.10.3 (beta)
294
295  * Improved SSO output quality.
296
297  * Made portable to cygwin.
298
299  * Localized memory references in III_huffdecode() for better performance.
300
301Version 0.10.2 (beta)
302
303  * Rewrote Layer III long block 36-point IMDCT routine for better
304    performance.
305
306  * Improved subband synthesis fixed-point games somewhat.
307
308Version 0.10.1 (beta)
309
310  * Added a subband synthesis optimization (SSO) which involves modifying
311    the fixed-point multiplication method during windowing. This produces
312    subtle differences in the output but improves performance greatly.
313
314  * Added I_STEREO and MS_STEREO flags to frame struct.
315
316  * Eliminated privately-used CRCFAILED flag.
317
318  * Fixed a bug where Layer III decoding could crash on some badly-formatted
319    (e.g. non-MPEG) bitstreams.
320
321  * Miscellaneous code clean-up.
322
323Version 0.10.0 (beta)
324
325  * Added SPARC fixed-point math support.
326
327  * Revamped libmad API for better high- and low-level support.
328
329  * Documented more of the code.
330
331  * Changed sync semantics such that new stream buffers are assumed to be
332    sync-aligned.
333
334  * Changed Layer III to dynamically allocate static memory so as not to
335    waste it (about 6.4K) when only decoding Layer I or Layer II.
336
337===============================================================================
338
339