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