cannam@85: cannam@85: libmad - MPEG audio decoder library cannam@85: Copyright (C) 2000-2004 Underbit Technologies, Inc. cannam@85: cannam@85: $Id: CHANGES,v 1.14 2004/02/17 02:02:03 rob Exp $ cannam@85: cannam@85: =============================================================================== cannam@85: cannam@85: Version 0.15.1 (beta) cannam@85: cannam@85: * Updated to autoconf 2.59, automake 1.8.2, libtool 1.5.2. cannam@85: cannam@85: * Replaced Layer III IMDCT routine with one based on a faster algorithm, cannam@85: improving both speed and accuracy. cannam@85: cannam@85: * Improved portability of the Huffman table initialization. cannam@85: cannam@85: * Fixed a problem that could result in an assertion failure in layer3.c cannam@85: due to an invalid Layer III free format bitrate. cannam@85: cannam@85: * Improved the robustness of Layer II bitrate/mode combinations, and added cannam@85: a new MAD_ERROR_BADMODE error enum. The allowability of low-bitrate cannam@85: stereo streams is influenced by the --enable-strict-iso option to cannam@85: `configure'. cannam@85: cannam@85: Version 0.15.0 (beta) cannam@85: cannam@85: * Updated to autoconf 2.57, automake 1.7.5, libtool 1.4.3. cannam@85: cannam@85: * Added new mad_f_div() API routine. cannam@85: cannam@85: * Added a 64th entry to the Layer I/Layer II scalefactor table, for better cannam@85: compatibility with existing streams. The --enable-strict-iso option to cannam@85: `configure' can be used to disable use of this entry. cannam@85: cannam@85: * Modified the header decoding routine to allow the reserved emphasis cannam@85: value, for better compatibility with existing streams. The cannam@85: --enable-strict-iso option to `configure' can be used to restore the cannam@85: previous behavior of reporting this value as an error. cannam@85: cannam@85: * Added new MAD_EMPHASIS_RESERVED enumeration constant. cannam@85: cannam@85: * Fixed a bug in the ARM version of mad_f_scale64() discovered by Andre cannam@85: McCurdy. cannam@85: cannam@85: * Rewrote PowerPC assembly for minor gains. cannam@85: cannam@85: * Modified mad_timer_fraction() to avoid the possibility of division by cannam@85: zero when 0 is passed as the second argument. cannam@85: cannam@85: * Fixed a non-fatal problem caused by attempting to designate ancillary cannam@85: bits in Layer III after a decoding error. cannam@85: cannam@85: * Changed to build a shared library by default. cannam@85: cannam@85: * Changed to use native Cygwin build by default; give --host=mingw32 to cannam@85: `configure' to use MinGW (and avoid a dependency on the Cygwin DLL). cannam@85: cannam@85: Version 0.14.2 (beta) cannam@85: cannam@85: * Changed Cygwin builds to use MinGW; resulting Win32 executables no cannam@85: longer have a dependency on Cygwin DLLs. cannam@85: cannam@85: * Added a new mad_stream_errorstr() API function to libmad for retrieving cannam@85: a string description of the current error condition. cannam@85: cannam@85: Version 0.14.1 (beta) cannam@85: cannam@85: * Updated config.guess and config.sub to latest upstream versions. cannam@85: cannam@85: * Enabled libtool versioning rather than release numbering. cannam@85: cannam@85: * Improved the documentation in minimad.c. cannam@85: cannam@85: * Several other small fixes. cannam@85: cannam@85: Version 0.14.0 (beta) cannam@85: cannam@85: * Added a 64-bit FPM negation operation to improve performance of subband cannam@85: synthesis on some platforms. cannam@85: cannam@85: * Improved MSVC++ portability and added MSVC++ project files. cannam@85: cannam@85: * Added rounding to Layer III requantization for slightly better accuracy. cannam@85: cannam@85: Version 0.13.0 (beta) cannam@85: cannam@85: * Ancillary data is now properly extracted from Layer III streams. cannam@85: cannam@85: * Rewrote the Layer III joint stereo decoding routine to correct a major cannam@85: MPEG-2 problem and a minor MPEG-1 problem decoding intensity stereo. cannam@85: cannam@85: * Eliminated the dependency on sign-extending right shifts for Layer I and cannam@85: Layer II. cannam@85: cannam@85: * Renamed `private' field to `private_bits' for better C++ compatibility. cannam@85: cannam@85: * Gratuitously renamed `sfreq' field to `samplerate' and cannam@85: MAD_ERROR_BADSAMPLEFREQ constant to MAD_ERROR_BADSAMPLERATE. cannam@85: cannam@85: * Added `samplerate' and `channels' fields to synth.pcm struct to allow cannam@85: these to be different from the decoded frame, and for simpler access. cannam@85: cannam@85: * Added new mad_stream_options() and mad_decoder_options() API entries for cannam@85: special runtime decoding options. cannam@85: cannam@85: * Added new MAD_OPTION_IGNORECRC and MAD_OPTION_HALFSAMPLERATE options. cannam@85: cannam@85: * Added new MAD_FLAG_FREEFORMAT indicator flag. cannam@85: cannam@85: * Fixed some bugs in the async decoder. cannam@85: cannam@85: * Added a new mad_timer_multiply() API routine. cannam@85: cannam@85: * Eliminated `+' from asm constraints under Intel for better compatibility cannam@85: with some compilers. cannam@85: cannam@85: * Fixed a PIC-related problem in imdct_l_arm.S. cannam@85: cannam@85: * Eliminated a static variable to make libmad thread-safe. cannam@85: cannam@85: Version 0.12.5 (beta) cannam@85: cannam@85: * Modified Layer III requantization to occur during Huffman decoding for cannam@85: significant performance gains. cannam@85: cannam@85: * Optimized short block IMDCT by eliminating redundant calculations. cannam@85: cannam@85: * Made several other Layer III performance improvements; added cannam@85: ASO_INTERLEAVE1, ASO_INTERLEAVE2, and ASO_ZEROCHECK cannam@85: architecture-specific options for best performance on various cannam@85: architectures. cannam@85: cannam@85: * Optimized synthesis DCT to store result values as soon as they are cannam@85: calculated. cannam@85: cannam@85: Version 0.12.4 (beta) cannam@85: cannam@85: * New PowerPC fixed-point assembly courtesy of David Blythe. cannam@85: cannam@85: * Reorganized fixed-point assembly routines for easier maintenance and cannam@85: better performance. cannam@85: cannam@85: * Improved performance of subband synthesis through better indexing and cannam@85: fewer local variables. cannam@85: cannam@85: * Added alias reduction for the lower two subbands of mixed short blocks, cannam@85: per a report of ambiguity with ISO/IEC 11172-3 and for uniformity with cannam@85: most other implementations. Also improved alias reduction performance cannam@85: using multiply/accumulate. cannam@85: cannam@85: * Added --enable-strict-iso option to `configure' to override best cannam@85: accepted practices such as the alias reduction for mixed short blocks. cannam@85: cannam@85: * Improved performance of Layer III IMDCT by using longer cannam@85: multiply/accumulate runs where possible. cannam@85: cannam@85: Version 0.12.3 (beta) cannam@85: cannam@85: * Added MPEG 2.5 support. cannam@85: cannam@85: * Added preliminary support for parameterizing the binary point position cannam@85: in the fixed-point representation. cannam@85: cannam@85: * Added multiply/accumulate optimization to the Layer III IMDCT for long cannam@85: blocks. cannam@85: cannam@85: * Fixed a bug in the handling of Layer III mixed_block_flag. cannam@85: cannam@85: * Fixed a configure problem when multiple -O CFLAGS are present. cannam@85: cannam@85: Version 0.12.2 (beta) cannam@85: cannam@85: * Rearranged the synthesis polyphase filterbank memory vector for better cannam@85: locality of reference, and rewrote mad_synth_frame() to accommodate, cannam@85: resulting in improved performance. cannam@85: cannam@85: * Discovered a combination of compiler optimization flags that further cannam@85: improve performance. cannam@85: cannam@85: * Changed some array references in layer3.c to pointer derefs. cannam@85: cannam@85: Version 0.12.1 (beta) cannam@85: cannam@85: * Resolved the intensity + MS joint stereo issue (a simple bug). cannam@85: OPT_ISKLUGE is no longer considered to be a kluge. cannam@85: cannam@85: * Fixed another, hopefully last main_data memory bug. cannam@85: cannam@85: * Split part of struct mad_frame into struct mad_header for convenience cannam@85: and size. cannam@85: cannam@85: Version 0.12.0 (alpha) cannam@85: cannam@85: * Changed the build environment to use automake and libtool. A libmad cannam@85: shared library can now be built using the --enable-shared option to cannam@85: `configure'. cannam@85: cannam@85: * Added another callback to MAD's high-level decoder API after the frame cannam@85: header has been read but before the frame's audio data is decoded. cannam@85: cannam@85: * Streamlined header processing so that mad_frame_decode() can be called cannam@85: with or without having already called mad_frame_header(). cannam@85: cannam@85: * Fixed some other header reading miscellany, including CRC handling and cannam@85: free bitrate detection, and frame length verification with free cannam@85: bitrates. cannam@85: cannam@85: * Fixed a problem with Layer III free bitrates > 320 kbps. The main_data cannam@85: buffer size should now be large enough to handle any size frame, by cannam@85: virtue of the maximum possible part2_3_length. cannam@85: cannam@85: * Further developed the async API; arbitrary messages can now be passed to cannam@85: the subsidiary decoding process. cannam@85: cannam@85: * Streamlined timer.c and extended its interface. It now has support for cannam@85: video frame/field lengths, including output support for drop-frame cannam@85: encoding. cannam@85: cannam@85: * Replaced many constant integer preprocessor defines with enums. cannam@85: cannam@85: Version 0.11.4 (beta) cannam@85: cannam@85: * Fixed free format bitrate discovery. cannam@85: cannam@85: * Changed the timer implementation and extended its interface. cannam@85: cannam@85: * Integrated Nicolas Pitre's patch for pre-shifting at compile-time and cannam@85: for better multiply/accumulate code output. cannam@85: cannam@85: * Applied Simon Burge's patch to imdct_l_arm.S for a.out compatibility. cannam@85: cannam@85: * Added -mtune=strongarm for all ARM targets. cannam@85: cannam@85: Version 0.11.3 (beta) cannam@85: cannam@85: * Added new --enable-speed and --enable-accuracy options for `configure' cannam@85: to automatically select appropriate SSO/ASO options, et al. cannam@85: cannam@85: * Modified subband synthesis to use multiply/accumulate optimization (if cannam@85: available) for better speed and/or accuracy. cannam@85: cannam@85: * Incorporated Andre McCurdy's changes for further rounding optimizations cannam@85: in the rest of his code. cannam@85: cannam@85: Version 0.11.2 (beta) cannam@85: cannam@85: * Incorporated Nicolas Pitre's ARM assembly and parameterized scaling cannam@85: changes. cannam@85: cannam@85: * Incorporated Andre McCurdy's ARM assembly optimization (used only if cannam@85: --enable-aso is given to `configure' to enable architecture-specific cannam@85: optimizations.) cannam@85: cannam@85: * Reduced FPM_INTEL assembly to two instructions. cannam@85: cannam@85: * Fixed accuracy problems with certain FPM modes in synth.c. cannam@85: cannam@85: * Improved the accuracy of FPM_APPROX. cannam@85: cannam@85: * Improved the accuracy of SSO. cannam@85: cannam@85: * Improved sync discovery by checking for a sync word in the following cannam@85: frame. cannam@85: cannam@85: * Minor code clean-up. cannam@85: cannam@85: * Added experimental rules for generating a libmad.so shared library. cannam@85: cannam@85: Version 0.11.1 (beta) cannam@85: cannam@85: * Moved libmad code into a separate directory. cannam@85: cannam@85: * Changed SSO to be disabled by default, as output accuracy is deemed to cannam@85: be more important than speed in the general case. cannam@85: cannam@85: * Fixed a bug in Layer III sanity checking that could cause a crash on cannam@85: certain random data input. cannam@85: cannam@85: * Extended the Layer III requantization table from 8191 to 8206 as some cannam@85: encoders are known to use these values, even though ISO/IEC 11172-3 cannam@85: suggests the maximum should be 8191. cannam@85: cannam@85: Version 0.11.0 (beta) cannam@85: cannam@85: * Implemented MPEG-2 extension to Lower Sampling Frequencies. cannam@85: cannam@85: * Improved Layer III performance by avoiding IMDCT calculation when all cannam@85: input samples are zero. cannam@85: cannam@85: * Significantly reduced size of Layer II tables. cannam@85: cannam@85: Version 0.10.3 (beta) cannam@85: cannam@85: * Improved SSO output quality. cannam@85: cannam@85: * Made portable to cygwin. cannam@85: cannam@85: * Localized memory references in III_huffdecode() for better performance. cannam@85: cannam@85: Version 0.10.2 (beta) cannam@85: cannam@85: * Rewrote Layer III long block 36-point IMDCT routine for better cannam@85: performance. cannam@85: cannam@85: * Improved subband synthesis fixed-point games somewhat. cannam@85: cannam@85: Version 0.10.1 (beta) cannam@85: cannam@85: * Added a subband synthesis optimization (SSO) which involves modifying cannam@85: the fixed-point multiplication method during windowing. This produces cannam@85: subtle differences in the output but improves performance greatly. cannam@85: cannam@85: * Added I_STEREO and MS_STEREO flags to frame struct. cannam@85: cannam@85: * Eliminated privately-used CRCFAILED flag. cannam@85: cannam@85: * Fixed a bug where Layer III decoding could crash on some badly-formatted cannam@85: (e.g. non-MPEG) bitstreams. cannam@85: cannam@85: * Miscellaneous code clean-up. cannam@85: cannam@85: Version 0.10.0 (beta) cannam@85: cannam@85: * Added SPARC fixed-point math support. cannam@85: cannam@85: * Revamped libmad API for better high- and low-level support. cannam@85: cannam@85: * Documented more of the code. cannam@85: cannam@85: * Changed sync semantics such that new stream buffers are assumed to be cannam@85: sync-aligned. cannam@85: cannam@85: * Changed Layer III to dynamically allocate static memory so as not to cannam@85: waste it (about 6.4K) when only decoding Layer I or Layer II. cannam@85: cannam@85: =============================================================================== cannam@85: