taglib/CHANGELOG.md
Urs Fleisch 7dc8bfc806 Fix property mappings
For MP4 map ENCODEDBY to ©enc instead of ©too, which is now mapped to
ENCODING.
For ASF, add new properties ENCODINGTIME (WM/EncodingTime) and FILEWEBPAGE
(WM/AudioFileURL).
2023-12-24 08:42:15 +01:00

23 KiB

TagLib 2.0 (Jan 24, 2024)

  • New major version, binary incompatible, but source-compatible with the latest 1.x release if no deprecated features are used.
  • Requires a C++17 compiler and uses features of C++17.
  • Major code cleanup, fixed warnings issued by compilers and static analyzers.
  • Made methods virtual which should have been virtual but could not be changed to keep binary compatibility, remove related workarounds.
  • Removed deprecated functions:
    • APE::Item::Item(const String &, const String &)
    • APE::Item::toStringList(): Use values()
    • APE::Item::value(): Use binaryData()
    • ASF::Properties::setLength()
    • ByteVector::checksum()
    • ByteVector::isNull(): Use isEmpty()
    • ByteVector::null
    • FLAC::File::setID3v2FrameFactory()
    • FLAC::File::streamInfoData()
    • FLAC::File::streamLength()
    • FLAC::Properties::Properties(File *, ReadStyle)
    • FLAC::Properties::sampleWidth(): Use bitsPerSample()
    • File::isReadable(): Use system functions
    • File::isWritable(): Use system functions
    • FileName::str()
    • FileRef::create(): Use constructor
    • MP4::Tag::itemListMap(): Use itemMap()
    • MPC::File::remove(): Use strip()
    • MPC::Properties::Properties(const ByteVector &, long, ReadStyle)
    • MPEG::File::save(int, ...): Use overload
    • MPEG::File::setID3v2FrameFactory(): Use constructor
    • MPEG::ID3v2::Frame::Header::Header(const ByteVector &, bool)
    • MPEG::ID3v2::Frame::Header::frameAlterPreservation(): Use fileAlterPreservation()
    • MPEG::ID3v2::Frame::Header::setData(const ByteVector &, bool)
    • MPEG::ID3v2::Frame::Header::size(unsigned int): Use size()
    • MPEG::ID3v2::Frame::Header::unsycronisation(): use unsynchronisation()
    • MPEG::ID3v2::Frame::checkEncoding(const StringList &, String::Type): Use checkTextEncoding(const StringList &, String::Type)
    • MPEG::ID3v2::Frame::headerSize(): Use Header::size()
    • MPEG::ID3v2::Frame::headerSize(unsigned int): Use Header::size(unsigned int)
    • MPEG::ID3v2::FrameFactory::createFrame(const ByteVector &, bool)
    • MPEG::ID3v2::FrameFactory::createFrame(const ByteVector &, unsigned int): Use createFrame(const ByteVector &, const Header *)
    • MPEG::ID3v2::RelativeVolumeFrame::channelType()
    • MPEG::ID3v2::RelativeVolumeFrame::peakVolume(): Use peakVolume(ChannelType)
    • MPEG::ID3v2::RelativeVolumeFrame::setChannelType()
    • MPEG::ID3v2::RelativeVolumeFrame::setPeakVolume(const PeakVolume &): Use setPeakVolume(const PeakVolume &, ChannelType)
    • MPEG::ID3v2::RelativeVolumeFrame::setVolumeAdjustment(float): Use setVolumeAdjustment(float, ChannelType)
    • MPEG::ID3v2::RelativeVolumeFrame::setVolumeAdjustmentIndex(short): Use setVolumeAdjustmentIndex(short, ChannelType)
    • MPEG::ID3v2::RelativeVolumeFrame::volumeAdjustment(): Use volumeAdjustment(ChannelType)
    • MPEG::ID3v2::RelativeVolumeFrame::volumeAdjustmentIndex(): Use volumeAdjustmentIndex(ChannelType)
    • MPEG::ID3v2::Tag::footer()
    • MPEG::ID3v2::Tag::render(int): Use render(Version)
    • MPEG::XingHeader::xingHeaderOffset()
    • Ogg::Page::getCopyWithNewPageSequenceNumber()
    • Ogg::XiphComment::removeField(): Use removeFields()
    • PropertyMap::unsupportedData(): Returns now const reference, use addUnsupportedData() to add keys
    • RIFF::AIFF::Properties::Properties(const ByteVector &, ReadStyle)
    • RIFF::AIFF::Properties::Properties(const ByteVector &, int, ReadStyle)
    • RIFF::AIFF::Properties::sampleWidth(): Use bitsPerSample()
    • RIFF::WAV::File::save(TagTypes, bool, int): Use save(TagTypes, StripTags, Version)
    • RIFF::WAV::File::tag(): Returns now a TagUnion, use ID3v2Tag() to get an ID3v2::Tag
    • String::isNull(): Use isEmpty()
    • String::null
    • TrueAudio::File::setID3v2FrameFactory(): Use constructor
    • WavPack::Properties::Properties(const ByteVector &, long, ReadStyle)
  • Behavioral changes:
    • The basic tag methods (e.g. genre()) separate multiple values with " / " instead of " ".
    • The stream operator for String uses UTF-8 instead of ISO-8859-1 encoding.
    • MP4 property ORIGINALDATE is mapped to "----:com.apple.iTunes:ORIGINALDATE" instead of "----:com.apple.iTunes:originaldate".
    • MP4 property ENCODEDBY is mapped to "©enc" instead of "©too", which is now mapped to ENCODING.
  • Unified interface for complex properties like pictures.
  • Simplified the unified properties interface by providing its methods on FileRef.
  • C bindings: Support for properties (taglib_property_...) and complex properties like cover art (taglib_complex_property_...), memory I/O streams.
  • Support for Direct Stream Digital (DSD) stream files (DSF) and interchange file format (DSDIFF, DFF), ADTS (AAC) files.
  • The runtime version can be queried.
  • Additional utility functions ByteVector::fromUShort(), ByteVector::fromULongLong(), ByteVector::toULongLong(), ByteVector::toULongLong(), List::sort().
  • Fixed List::setAutoDelete() affecting implicitly shared copies.
  • Build system: Direct support for CMake, find_package(TagLib) exports target TagLib::tag.
  • Build system: Fixed PackageConfig to support both relative and absolute paths.
  • Build system: utf8cpp is no longer included, it can be provided via a system package or a Git submodule.
  • ASF: Support additional properties ARTISTWEBPAGE, ENCODING, ENCODINGTIME, FILEWEBPAGE, INITIALKEY, ORIGINALALBUM, ORIGINALARTIST, ORIGINALFILENAME, ORIGINALLYRICIST.
  • ID3v2: Fixed extensibility of FrameFactory, use it also for WAV and AIFF files.
  • MP4: Support additional properties OWNER, RELEASEDATE.
  • MP4: Introduced ItemFactory allowing clients to support new atom types.
  • MP4: Detect duration from mvhd atom if not present in mdhd atom.
  • MP4: Fixed type of hdvd atom to be integer instead of boolean.
  • MP4: Tolerate trailing garbage in M4A files.
  • MPC: Fixed content check in presence of an ID3v2 tag.
  • MPEG: Do not scan full file for ID3v2 tag when ReadStyle Fast is used.
  • RIFF: Support properties ALBUM, ARRANGER, ARTIST, ARTISTWEBPAGE, BPM, COMMENT, COMPOSER, COPYRIGHT, DATE, DISCSUBTITLE, ENCODEDBY, ENCODING, ENCODINGTIME, GENRE, ISRC, LABEL, LANGUAGE, LYRICIST, MEDIA, PERFORMER, RELEASECOUNTRY, REMIXER, TITLE, TRACKNUMBER.
  • WAV: Fixed crash with files having the "id3 " chunk as the only valid chunk.
  • Windows: Fixed support for files larger than 2GB.

TagLib 1.13.1 (Jul 1, 2023)

  • Fixed parsing of TXXX frames without description.
  • Detect MP4 atoms with invalid length or type.
  • Do not miss ID3v2 frames when an extended header is present.
  • Use property "DISCSUBTITLE" for ID3v2 "TSST" frame.
  • Build system improvements: Use absolute path for macOS dylib install name, support --define-prefix when using pkg-config, fixed minimum required CppUnit version.
  • Code clean up using clang-tidy.

TagLib 1.13 (Oct 27, 2022)

  • Added interface StreamTypeResolver to support streams which cannot be fopen()'ed, e.g. network files.
  • Added MP4::File::strip() to remove meta atom from MP4 file.
  • Added Map::value() to look up without creating entry.
  • Use property "WORK" instead of "CONTENTGROUP" for ID3v2 "TIT1" frame, use property "WORK" for ASF "WM/ContentGroupDescription", use property "COMPILATION" for ID3v2 "TCMP" frame.
  • Build system improvements: option WITH_ZLIB, BUILD_TESTING instead of BUILD_TESTS, GNUInstallDirs, FeatureSummary, tests with BUILD_SHARED_LIBS, cross compilation with Buildroot, systems without HAVE_GCC_ATOMIC, Clang.
  • Fixed heap-buffer-overflows when handling ASF, APE, FLAC, ID3v2, MP4, MPC tags.
  • Fixed detection of invalid file by extension when correct type can be detected by contents.
  • Fixed unnecessary creation of map entries in APE and FLAC tags if looked up tag does not exist.
  • Fixed parsing of MP4 non-full meta atoms.
  • Fixed potential ID3v1 false positive in the presence of an APE tag.
  • Fixed ID3v2 version handling for frames embedded in CHAP or CTOC frames.
  • Fixed parsing of multiple strings with a single BOM in ID3v2.4.0.
  • Fixed several smaller issues reported by clang-tidy.

TagLib 1.12 (Feb 16, 2021)

  • Added support for WinRT.
  • Added support for Linux on POWER.
  • Added support for classical music tags of iTunes 12.5.
  • Added support for file descriptor to FileStream.
  • Added support for 'cmID', 'purl', 'egid' MP4 atoms.
  • Added support for 'GRP1' ID3v2 frame.
  • Added support for extensible WAV subformat.
  • Enabled FileRef to detect file types based on the stream content.
  • Dropped support for Windows 9x and NT 4.0 or older.
  • Check for mandatory header objects in ASF files.
  • More tolerant handling of RIFF padding, WAV files, broken MPEG streams.
  • Improved calculation of Ogg, Opus, Speex, WAV, MP4 bitrates.
  • Improved Windows compatibility by storing FLAC picture after comments.
  • Fixed numerical genres in ID3v2.3.0 'TCON' frames.
  • Fixed consistency of API removing MP4 items when empty values are set.
  • Fixed consistency of API preferring COMM frames with no description.
  • Fixed OOB read on invalid Ogg FLAC files (CVE-2018-11439).
  • Fixed handling of empty MPEG files.
  • Fixed parsing MP4 mdhd timescale.
  • Fixed reading MP4 atoms with zero length.
  • Fixed reading FLAC files with zero-sized seektables.
  • Fixed handling of lowercase field names in Vorbis Comments.
  • Fixed handling of 'rate' atoms in MP4 files.
  • Fixed handling of invalid UTF-8 sequences.
  • Fixed possible file corruptions when saving Ogg files.
  • Fixed handling of non-audio blocks, sampling rates, DSD audio in WavPack files.
  • TableOfContentsFrame::toString() improved.
  • UserTextIdentificationFrame::toString() improved.
  • Marked FileRef::create() deprecated.
  • Marked MPEG::File::save() with boolean parameters deprecated, provide overloads with enum parameters.
  • Several smaller bug fixes and performance improvements.

TagLib 1.11.1 (Oct 24, 2016)

  • Fixed binary incompatible change in TagLib::String.
  • Fixed reading ID3v2 CTOC frames with a lot of entries.
  • Fixed seeking ByteVectorStream from the end.

TagLib 1.11 (Apr 29, 2016)

1.11:

  • Fixed reading APE items with long keys.
  • Fixed reading ID3v2 SYLT frames when description is empty.

1.11 BETA 2:

  • Better handling of PCM WAV files with a 'fact' chunk.
  • Better handling of corrupted APE tags.
  • Efficient decoding of unsynchronized ID3v2 frames.
  • Fixed text encoding when saving certain frames in ID3v2.3 tags.
  • Fixed updating the size of RIFF files when removing chunks.
  • Several smaller bug fixes and performance improvements.

1.11 BETA:

  • New API for creating FileRef from IOStream.
  • Added support for ID3v2 PCST and WFED frames.
  • Added support for pictures in XiphComment.
  • Added String::clear().
  • Added FLAC::File::strip() for removing non-standard tags.
  • Added alternative functions to XiphComment::removeField().
  • Added BUILD_BINDINGS build option.
  • Added ENABLE_CCACHE build option.
  • Replaced ENABLE_STATIC build option with BUILD_SHARED_LIBS.
  • Better handling of duplicate ID3v2 tags in all kinds of files.
  • Better handling of duplicate tag chunks in WAV files.
  • Better handling of duplicate tag chunks in AIFF files.
  • Better handling of duplicate Vorbis comment blocks in FLAC files.
  • Better handling of broken MPEG audio frames.
  • Fixed crash when calling File::properties() after strip().
  • Fixed crash when parsing certain MPEG files.
  • Fixed crash when saving Ogg files.
  • Fixed possible file corruptions when saving ASF files.
  • Fixed possible file corruptions when saving FLAC files.
  • Fixed possible file corruptions when saving MP4 files.
  • Fixed possible file corruptions when saving MPEG files.
  • Fixed possible file corruptions when saving APE files.
  • Fixed possible file corruptions when saving Musepack files.
  • Fixed possible file corruptions when saving WavPack files.
  • Fixed updating the comment field of Vorbis comments.
  • Fixed reading date and time in ID3v2.3 tags.
  • Marked ByteVector::null and ByteVector::isNull() deprecated.
  • Marked String::null and String::isNull() deprecated.
  • Marked XiphComment::removeField() deprecated.
  • Marked Ogg::Page::getCopyWithNewPageSequenceNumber() deprecated. It returns null.
  • Marked custom integer types deprecated.
  • Many smaller bug fixes and performance improvements.

TagLib 1.10 (Nov 11, 2015)

1.10:

  • Added new options to the tagwriter example.
  • Fixed self-assignment operator in some types.
  • Fixed extraction of MP4 tag keys with an empty list.

1.10 BETA:

  • New API for the audio length in milliseconds.
  • Added support for ID3v2 ETCO and SYLT frames.
  • Added support for album artist in PropertyMap API of MP4 files.
  • Added support for embedded frames in ID3v2 CHAP and CTOC frames.
  • Added support for AIFF-C files.
  • Better handling of duplicate ID3v2 tags in MPEG files.
  • Allowed generating taglib.pc on Windows.
  • Added ZLIB_SOURCE build option.
  • Fixed backwards-incompatible change in TagLib::String when constructing UTF16 strings.
  • Fixed crash when parsing certain FLAC files.
  • Fixed crash when encoding empty strings.
  • Fixed saving of certain XM files on OS X.
  • Changed Xiph and APE generic getters to return space-concatenated values.
  • Fixed possible file corruptions when removing tags from WAV files.
  • Added support for MP4 files with 64-bit atoms in certain 64-bit environments.
  • Prevented ID3v2 padding from being too large.
  • Fixed crash when parsing corrupted APE files.
  • Fixed crash when parsing corrupted WAV files.
  • Fixed crash when parsing corrupted Ogg FLAC files.
  • Fixed crash when parsing corrupted MPEG files.
  • Fixed saving empty tags in WAV files.
  • Fixed crash when parsing corrupted Musepack files.
  • Fixed possible memory leaks when parsing AIFF and WAV files.
  • Fixed crash when parsing corrupted MP4 files.
  • Stopped writing empty ID3v2 frames.
  • Fixed possible file corruptions when saving WMA files.
  • Added TagLib::MP4::Tag::isEmpty().
  • Added accessors to manipulate MP4 tags.
  • Fixed crash when parsing corrupted WavPack files.
  • Fixed seeking MPEG frames.
  • Fixed reading FLAC files with zero-sized padding blocks.
  • Added support for reading the encoder information of WMA files.
  • Added support for reading the codec of WAV files.
  • Added support for multi channel WavPack files.
  • Added support for reading the nominal bitrate of Ogg Speex files.
  • Added support for VBR headers in MPEG files.
  • Marked FLAC::File::streamInfoData() deprecated. It returns an empty ByteVector.
  • Marked FLAC::File::streamLength() deprecated. It returns zero.
  • Fixed possible file corruptions when adding an ID3v1 tag to FLAC files.
  • Many smaller bug fixes and performance improvements.

TagLib 1.9.1 (Oct 8, 2013)

  • Fixed binary incompatible change in TagLib::Map and TagLib::List.
  • Fixed constructing String from ByteVector.
  • Fixed compilation on MSVC with the /Zc:wchar_t- option.
  • Fixed detecting of RIFF files with invalid chunk sizes.
  • Added TagLib::MP4::Properties::codec().

TagLib 1.9 (Oct 6, 2013)

  • Added support for the Ogg Opus file format.
  • Added support for INFO tags in WAV files.
  • Changed FileStream to use Windows file API.
  • Included taglib-config.cmd script for Windows.
  • New ID3v1::Tag methods for working directly with genre numbers.
  • New MPEG::File methods for checking which tags are saved in the file.
  • Added support for the PropertyMap API to ASF and MP4 files.
  • Added MusicBrainz identifiers to the PropertyMap API.
  • Allowed reading of MP4 cover art without an explicitly specified format.
  • Better parsing of corrupted FLAC files.
  • Fixed saving of PropertyMap comments without description into ID3v2 tags.
  • Fixed crash when parsing certain XM files.
  • Fixed compilation of unit test with clang.
  • Better handling of files that can't be open or have read-only permissions.
  • Improved atomic reference counting.
  • New hookable API for debug messages.
  • More complete Windows install instructions.
  • Many smaller bug fixes and performance improvements.

TagLib 1.8 (Sep 6, 2012)

1.8:

  • Added support for OWNE ID3 frames.
  • Changed key validation in the new PropertyMap API.
  • ID3v1::Tag::setStringHandler will no longer delete the previous handler, the caller is responsible for this.
  • File objects will also no longer delete the passed IOStream objects. It should be done in the caller code after the File object is no longer used.
  • Added ID3v2::Tag::setLatin1StringHandler for custom handling of latin1-encoded text in ID3v2 frames.
  • Fixed validation of ID3v2 frame IDs (IDs with '0' were ignored).

1.8 BETA:

  • New API for accessing tags by name.
  • New abstract I/O stream layer to allow custom I/O handlers.
  • Support for writing ID3v2.3 tags.
  • Support for various module file formats (MOD, S3M, IT, XM).
  • Support for MP4 and ASF is now enabled by default.
  • Started using atomic int operations for reference counting.
  • Added methods for checking if WMA and MP4 files are DRM-protected.
  • Added taglib_free to the C bindings.
  • New method to allow removing pictures from FLAC files.
  • Support for reading audio properties from ALAC and Musepack SV8 files.
  • Added replay-gain information to Musepack audio properties.
  • Support for APEv2 binary tags.
  • Many AudioProperties subclasses now provide information about the total number of samples.
  • Various small bug fixes.

TagLib 1.7.2 (Apr 20, 2012)

  • Fixed division by zero while parsing corrupted MP4 files (CVE-2012-2396).
  • Fixed compilation on Haiku.

TagLib 1.7.1 (Mar 17, 2012)

  • Improved parsing of corrupted WMA, RIFF and OGG files.
  • Fixed a memory leak in the WMA parser.
  • Fixed a memory leak in the FLAC parser.
  • Fixed a possible division by zero in the APE parser.
  • Added detection of TTA2 files.
  • Fixed saving of multiple identically named tags to Vorbis Comments.

TagLib 1.7 (Mar 11, 2011)

1.7:

  • Fixed memory leaks in the FLAC file format parser.
  • Fixed bitrate calculation for WAV files.

1.7 RC1:

  • Support for reading/writing tags from Monkey's Audio files. (BUG:210404)
  • Support for reading/writing embedded pictures from WMA files.
  • Support for reading/writing embedded pictures from FLAC files (BUG:218696).
  • Implemented APE::Tag::isEmpty() to check for all APE tags, not just the basic ones.
  • Added reading of WAV audio length. (BUG:116033)
  • Exposed FLAC MD5 signature of the uncompressed audio stream via FLAC::Properties::signature(). (BUG:160172)
  • Added function ByteVector::toHex() for hex-encoding of byte vectors.
  • WavPack reader now tries to get the audio length by finding the final block, if the header doesn't have the information. (BUG:258016)
  • Fixed a memory leak in the ID3v2.2 PIC frame parser. (BUG:257007)
  • Fixed writing of RIFF files with even chunk sizes. (BUG:243954)
  • Fixed compilation on MSVC 2010.
  • Removed support for building using autoconf/automake.
  • API docs can be now built using "make docs".

TagLib 1.6.3 (Apr 17, 2010)

  • Fixed definitions of the TAGLIB_WITH_MP4 and TAGLIB_WITH_ASF macros.
  • Fixed upgrading of ID3v2.3 genre frame with ID3v1 code 0 (Blues).
  • New method int String::toInt(bool *ok) which can return whether the conversion to a number was successful.
  • Fixed parsing of incorrectly written lengths in ID3v2 (affects mainly compressed frames). (BUG:231075)

TagLib 1.6.2 (Apr 9, 2010)

  • Read Vorbis Comments from the first FLAC metadata block, if there are multiple ones. (BUG:211089)
  • Fixed a memory leak in FileRef's OGA format detection.
  • Fixed compilation with the Sun Studio compiler. (BUG:215225)
  • Handle WM/TrackNumber attributes with DWORD content in WMA files. (BUG:218526)
  • More strict check if something is a valid MP4 file. (BUG:216819)
  • Correctly save MP4 int-pair atoms with flags set to 0.
  • Fixed compilation of the test runner on Windows.
  • Store ASF attributes larger than 64k in the metadata library object.
  • Ignore trailing non-data atoms when parsing MP4 covr atoms.
  • Don't upgrade ID3v2.2 frame TDA to TDRC. (BUG:228968)

TagLib 1.6.1 (Oct 31, 2009)

  • Better detection of the audio codec of .oga files in FileRef.
  • Fixed saving of Vorbis comments to Ogg FLAC files. TagLib tried to include the Vorbis framing bit, which is only correct for Ogg Vorbis.
  • Public symbols now have explicitly set visibility to "default" on GCC.
  • Added missing exports for static ID3v1 functions.
  • Fixed a typo in taglib_c.pc
  • Fixed a failing test on ppc64.
  • Support for binary 'covr' atom in MP4 files. TagLib 1.6 treated them as text atoms, which corrupted them in some cases.
  • Fixed ID3v1-style genre to string conversion in MP4 files.

TagLib 1.6 (Sep 13, 2009)

1.6:

  • New CMake option to build a static version - ENABLE_STATIC.
  • Added support for disabling dllimport/dllexport on Windows using the TAGLIB_STATIC macro.
  • Support for parsing the obsolete 'gnre' MP4 atom.
  • New cpp macros TAGLIB_WITH_MP4 and TAGLIB_WITH_ASF to determine if TagLib was built with MP4/ASF support.

1.6 RC1:

  • Split Ogg packets larger than 64k into multiple pages. (BUG:171957)
  • TagLib can now use FLAC padding block. (BUG:107659)
  • ID3v2.2 frames are now not incorrectly saved. (BUG:176373)
  • Support for ID3v2.2 PIC frames. (BUG:167786)
  • Fixed a bug in ByteVectorList::split().
  • XiphComment::year() now falls back to YEAR if DATE doesn't exist and XiphComment::year() falls back to TRACKNUM if TRACKNUMBER doesn't exist. (BUG:144396)
  • Improved ID3v2.3 genre parsing. (BUG:188578)
  • Better checking of corrupted ID3v2 APIC data. (BUG:168382)
  • Bitrate calculating using the Xing header now uses floating point numbers. (BUG:172556)
  • New TagLib::String method rfind().
  • Added support for MP4 file format with iTunes-style metadata [optional].
  • Added support for ASF (WMA) file format [optional].
  • Fixed crash when saving a Locator APEv2 tag. (BUG:169810)
  • Fixed a possible crash in the non-const version of String::operator[] and in String::operator+=. (BUG:169389)
  • Added support for PRIV ID3v2 frames.
  • Empty ID3v2 genres are no longer treated as numeric ID3v1 genres.
  • Added support for the POPM (rating/play count) ID3v2 frame.
  • Generic RIFF file format support:
    • Support for AIFF files with ID3v2 tags.
    • Support for WAV files with ID3v2 tags.
  • Fixed crash on handling unsupported ID3v2 frames, e.g. on encrypted frames. (BUG:161721)
  • Fixed overflow while calculating bitrate of FLAC files with a very high bitrate.