summaryrefslogtreecommitdiff
path: root/CHANGES
blob: 9291760b9854c35fa18409b46ce84305d4cdf78b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338

 libmad - MPEG audio decoder library
 Copyright (C) 2000-2004 Underbit Technologies, Inc.

 $Id: CHANGES,v 1.14 2004/02/17 02:02:03 rob Exp $

===============================================================================

Version 0.15.1 (beta)

  * Updated to autoconf 2.59, automake 1.8.2, libtool 1.5.2.

  * Replaced Layer III IMDCT routine with one based on a faster algorithm,
    improving both speed and accuracy.

  * Improved portability of the Huffman table initialization.

  * Fixed a problem that could result in an assertion failure in layer3.c
    due to an invalid Layer III free format bitrate.

  * Improved the robustness of Layer II bitrate/mode combinations, and added
    a new MAD_ERROR_BADMODE error enum. The allowability of low-bitrate
    stereo streams is influenced by the --enable-strict-iso option to
    `configure'.

Version 0.15.0 (beta)

  * Updated to autoconf 2.57, automake 1.7.5, libtool 1.4.3.

  * Added new mad_f_div() API routine.

  * Added a 64th entry to the Layer I/Layer II scalefactor table, for better
    compatibility with existing streams. The --enable-strict-iso option to
    `configure' can be used to disable use of this entry.

  * Modified the header decoding routine to allow the reserved emphasis
    value, for better compatibility with existing streams. The
    --enable-strict-iso option to `configure' can be used to restore the
    previous behavior of reporting this value as an error.

  * Added new MAD_EMPHASIS_RESERVED enumeration constant.

  * Fixed a bug in the ARM version of mad_f_scale64() discovered by Andre
    McCurdy.

  * Rewrote PowerPC assembly for minor gains.

  * Modified mad_timer_fraction() to avoid the possibility of division by
    zero when 0 is passed as the second argument.

  * Fixed a non-fatal problem caused by attempting to designate ancillary
    bits in Layer III after a decoding error.

  * Changed to build a shared library by default.

  * Changed to use native Cygwin build by default; give --host=mingw32 to
    `configure' to use MinGW (and avoid a dependency on the Cygwin DLL).

Version 0.14.2 (beta)

  * Changed Cygwin builds to use MinGW; resulting Win32 executables no
    longer have a dependency on Cygwin DLLs.

  * Added a new mad_stream_errorstr() API function to libmad for retrieving
    a string description of the current error condition.

Version 0.14.1 (beta)

  * Updated config.guess and config.sub to latest upstream versions.

  * Enabled libtool versioning rather than release numbering.

  * Improved the documentation in minimad.c.

  * Several other small fixes.

Version 0.14.0 (beta)

  * Added a 64-bit FPM negation operation to improve performance of subband
    synthesis on some platforms.

  * Improved MSVC++ portability and added MSVC++ project files.

  * Added rounding to Layer III requantization for slightly better accuracy.

Version 0.13.0 (beta)

  * Ancillary data is now properly extracted from Layer III streams.

  * Rewrote the Layer III joint stereo decoding routine to correct a major
    MPEG-2 problem and a minor MPEG-1 problem decoding intensity stereo.

  * Eliminated the dependency on sign-extending right shifts for Layer I and
    Layer II.

  * Renamed `private' field to `private_bits' for better C++ compatibility.

  * Gratuitously renamed `sfreq' field to `samplerate' and
    MAD_ERROR_BADSAMPLEFREQ constant to MAD_ERROR_BADSAMPLERATE.

  * Added `samplerate' and `channels' fields to synth.pcm struct to allow
    these to be different from the decoded frame, and for simpler access.

  * Added new mad_stream_options() and mad_decoder_options() API entries for
    special runtime decoding options.

  * Added new MAD_OPTION_IGNORECRC and MAD_OPTION_HALFSAMPLERATE options.

  * Added new MAD_FLAG_FREEFORMAT indicator flag.

  * Fixed some bugs in the async decoder.

  * Added a new mad_timer_multiply() API routine.

  * Eliminated `+' from asm constraints under Intel for better compatibility
    with some compilers.

  * Fixed a PIC-related problem in imdct_l_arm.S.

  * Eliminated a static variable to make libmad thread-safe.

Version 0.12.5 (beta)

  * Modified Layer III requantization to occur during Huffman decoding for
    significant performance gains.

  * Optimized short block IMDCT by eliminating redundant calculations.

  * Made several other Layer III performance improvements; added
    ASO_INTERLEAVE1, ASO_INTERLEAVE2, and ASO_ZEROCHECK
    architecture-specific options for best performance on various
    architectures.

  * Optimized synthesis DCT to store result values as soon as they are
    calculated.

Version 0.12.4 (beta)

  * New PowerPC fixed-point assembly courtesy of David Blythe.

  * Reorganized fixed-point assembly routines for easier maintenance and
    better performance.

  * Improved performance of subband synthesis through better indexing and
    fewer local variables.

  * Added alias reduction for the lower two subbands of mixed short blocks,
    per a report of ambiguity with ISO/IEC 11172-3 and for uniformity with
    most other implementations. Also improved alias reduction performance
    using multiply/accumulate.

  * Added --enable-strict-iso option to `configure' to override best
    accepted practices such as the alias reduction for mixed short blocks.

  * Improved performance of Layer III IMDCT by using longer
    multiply/accumulate runs where possible.

Version 0.12.3 (beta)

  * Added MPEG 2.5 support.

  * Added preliminary support for parameterizing the binary point position
    in the fixed-point representation.

  * Added multiply/accumulate optimization to the Layer III IMDCT for long
    blocks.

  * Fixed a bug in the handling of Layer III mixed_block_flag.

  * Fixed a configure problem when multiple -O CFLAGS are present.

Version 0.12.2 (beta)

  * Rearranged the synthesis polyphase filterbank memory vector for better
    locality of reference, and rewrote mad_synth_frame() to accommodate,
    resulting in improved performance.

  * Discovered a combination of compiler optimization flags that further
    improve performance.

  * Changed some array references in layer3.c to pointer derefs.

Version 0.12.1 (beta)

  * Resolved the intensity + MS joint stereo issue (a simple bug).
    OPT_ISKLUGE is no longer considered to be a kluge.

  * Fixed another, hopefully last main_data memory bug.

  * Split part of struct mad_frame into struct mad_header for convenience
    and size.

Version 0.12.0 (alpha)

  * Changed the build environment to use automake and libtool. A libmad
    shared library can now be built using the --enable-shared option to
    `configure'.

  * Added another callback to MAD's high-level decoder API after the frame
    header has been read but before the frame's audio data is decoded.

  * Streamlined header processing so that mad_frame_decode() can be called
    with or without having already called mad_frame_header().

  * Fixed some other header reading miscellany, including CRC handling and
    free bitrate detection, and frame length verification with free
    bitrates.

  * Fixed a problem with Layer III free bitrates > 320 kbps. The main_data
    buffer size should now be large enough to handle any size frame, by
    virtue of the maximum possible part2_3_length.

  * Further developed the async API; arbitrary messages can now be passed to
    the subsidiary decoding process.

  * Streamlined timer.c and extended its interface. It now has support for
    video frame/field lengths, including output support for drop-frame
    encoding.

  * Replaced many constant integer preprocessor defines with enums.

Version 0.11.4 (beta)

  * Fixed free format bitrate discovery.

  * Changed the timer implementation and extended its interface.

  * Integrated Nicolas Pitre's patch for pre-shifting at compile-time and
    for better multiply/accumulate code output.

  * Applied Simon Burge's patch to imdct_l_arm.S for a.out compatibility.

  * Added -mtune=strongarm for all ARM targets.

Version 0.11.3 (beta)

  * Added new --enable-speed and --enable-accuracy options for `configure'
    to automatically select appropriate SSO/ASO options, et al.

  * Modified subband synthesis to use multiply/accumulate optimization (if
    available) for better speed and/or accuracy.

  * Incorporated Andre McCurdy's changes for further rounding optimizations
    in the rest of his code.

Version 0.11.2 (beta)

  * Incorporated Nicolas Pitre's ARM assembly and parameterized scaling
    changes.

  * Incorporated Andre McCurdy's ARM assembly optimization (used only if
    --enable-aso is given to `configure' to enable architecture-specific
    optimizations.)

  * Reduced FPM_INTEL assembly to two instructions.

  * Fixed accuracy problems with certain FPM modes in synth.c.

  * Improved the accuracy of FPM_APPROX.

  * Improved the accuracy of SSO.

  * Improved sync discovery by checking for a sync word in the following
    frame.

  * Minor code clean-up.

  * Added experimental rules for generating a libmad.so shared library.

Version 0.11.1 (beta)

  * Moved libmad code into a separate directory.

  * Changed SSO to be disabled by default, as output accuracy is deemed to
    be more important than speed in the general case.

  * Fixed a bug in Layer III sanity checking that could cause a crash on
    certain random data input.

  * Extended the Layer III requantization table from 8191 to 8206 as some
    encoders are known to use these values, even though ISO/IEC 11172-3
    suggests the maximum should be 8191.

Version 0.11.0 (beta)

  * Implemented MPEG-2 extension to Lower Sampling Frequencies.

  * Improved Layer III performance by avoiding IMDCT calculation when all
    input samples are zero.

  * Significantly reduced size of Layer II tables.

Version 0.10.3 (beta)

  * Improved SSO output quality.

  * Made portable to cygwin.

  * Localized memory references in III_huffdecode() for better performance.

Version 0.10.2 (beta)

  * Rewrote Layer III long block 36-point IMDCT routine for better
    performance.

  * Improved subband synthesis fixed-point games somewhat.

Version 0.10.1 (beta)

  * Added a subband synthesis optimization (SSO) which involves modifying
    the fixed-point multiplication method during windowing. This produces
    subtle differences in the output but improves performance greatly.

  * Added I_STEREO and MS_STEREO flags to frame struct.

  * Eliminated privately-used CRCFAILED flag.

  * Fixed a bug where Layer III decoding could crash on some badly-formatted
    (e.g. non-MPEG) bitstreams.

  * Miscellaneous code clean-up.

Version 0.10.0 (beta)

  * Added SPARC fixed-point math support.

  * Revamped libmad API for better high- and low-level support.

  * Documented more of the code.

  * Changed sync semantics such that new stream buffers are assumed to be
    sync-aligned.

  * Changed Layer III to dynamically allocate static memory so as not to
    waste it (about 6.4K) when only decoding Layer I or Layer II.

===============================================================================