diff --git a/NEWS b/NEWS index 62015f05..5db9da59 100644 --- a/NEWS +++ b/NEWS @@ -1,23 +1,25 @@ -TagLib 1.10 (??? ??, 2015) +TagLib 1.10 (Aug 23, 2015) ========================== 1.10 BETA: - * Fixed binary incompatible change in TagLib::String. - * Fixed crash when parsing certain FLAC files. - * Fixed crash when encoding empty strings. - * Fixed saving of certain XM files on OS X. - * Allowed Xiph and APE generic getters to return space-concatenated values. + * 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. - * Better handling of duplicate ID3v2 tags in MPEG files. * Prevented ID3v2 padding from being too large. * Fixed crash when parsing corrupted APE files. - * Added support for AIFF-C files. * Fixed crash when parsing corrupted WAV files. * Fixed crash when parsing corrupted Ogg FLAC files. * Fixed crash when parsing corrupted MPEG files. @@ -28,12 +30,10 @@ TagLib 1.10 (??? ??, 2015) * Stopped writing empty ID3v2 frames. * Fixed possible file corruptions when saving WMA files. * Added TagLib::MP4::Tag::isEmpty(). - * Added accessors to manipulate MP4 tags . + * Added accessors to manipulate MP4 tags. * Fixed crash when parsing corrupted WavPack files. * Fixed seeking MPEG frames. - * Allowed generating taglib.pc on Windows. * Fixed reading FLAC files with zero-sized padding blocks. - * New API for the audio length in milliseconds. * 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. diff --git a/taglib/ape/apetag.cpp b/taglib/ape/apetag.cpp index de268053..23f2d32f 100644 --- a/taglib/ape/apetag.cpp +++ b/taglib/ape/apetag.cpp @@ -47,6 +47,7 @@ class APE::Tag::TagPrivate { public: Footer footer; + ItemListMap itemListMap; }; diff --git a/taglib/asf/asffile.cpp b/taglib/asf/asffile.cpp index f030ae87..0e98a948 100644 --- a/taglib/asf/asffile.cpp +++ b/taglib/asf/asffile.cpp @@ -23,9 +23,6 @@ * http://www.mozilla.org/MPL/ * ***************************************************************************/ -// The implementation of this class is based on the document found at: -// http://download.microsoft.com/download/8/0/5/80506BEB-C95A-47AE-99CF-0D6D6D028ABA/ASF_Specification.pdf - #include #include #include diff --git a/taglib/dsf/dsffile.cpp b/taglib/dsf/dsffile.cpp index 06996eda..81f570e3 100644 --- a/taglib/dsf/dsffile.cpp +++ b/taglib/dsf/dsffile.cpp @@ -40,10 +40,7 @@ class DSF::File::FilePrivate public: FilePrivate() : properties(0), - tag(0) - { - - } + tag(0) {} ~FilePrivate() { @@ -62,17 +59,19 @@ public: //////////////////////////////////////////////////////////////////////////////// DSF::File::File(FileName file, bool readProperties, - AudioProperties::ReadStyle propertiesStyle) : TagLib::File(file) + AudioProperties::ReadStyle propertiesStyle) : + TagLib::File(file), + d(new FilePrivate()) { - d = new FilePrivate; if(isOpen()) read(readProperties, propertiesStyle); } DSF::File::File(IOStream *stream, bool readProperties, - AudioProperties::ReadStyle propertiesStyle) : TagLib::File(stream) + AudioProperties::ReadStyle propertiesStyle) : + TagLib::File(stream), + d(new FilePrivate()) { - d = new FilePrivate; if(isOpen()) read(readProperties, propertiesStyle); } @@ -168,7 +167,7 @@ void DSF::File::read(bool readProperties, AudioProperties::ReadStyle propertiesS { // A DSF file consists of four chunks: DSD chunk, format chunk, data chunk, and metadata chunk // The file format is not chunked in the sense of a RIFF File, though - + // DSD chunk ByteVector chunkName = readBlock(4); if(chunkName != "DSD ") { @@ -178,14 +177,14 @@ void DSF::File::read(bool readProperties, AudioProperties::ReadStyle propertiesS } long long chunkSize = readBlock(8).toInt64LE(0); - + // Integrity check if(28 != chunkSize) { debug("DSF::File::read() -- File is corrupted."); setValid(false); return; } - + d->fileSize = readBlock(8).toInt64LE(0); // File is malformed or corrupted @@ -213,10 +212,10 @@ void DSF::File::read(bool readProperties, AudioProperties::ReadStyle propertiesS } chunkSize = readBlock(8).toInt64LE(0); - - d->properties + + d->properties = new AudioProperties(readBlock(static_cast(chunkSize)), propertiesStyle); - + // Skip the data chunk // A metadata offset of 0 indicates the absence of an ID3v2 tag diff --git a/taglib/dsf/dsfproperties.cpp b/taglib/dsf/dsfproperties.cpp index 731e4512..0d15fbac 100644 --- a/taglib/dsf/dsfproperties.cpp +++ b/taglib/dsf/dsfproperties.cpp @@ -43,10 +43,7 @@ public: sampleCount(0), blockSizePerChannel(0), bitrate(0), - length(0) - { - - } + length(0) {} // Nomenclature is from DSF file format specification uint formatVersion; @@ -67,9 +64,9 @@ public: // public members //////////////////////////////////////////////////////////////////////////////// -DSF::AudioProperties::AudioProperties(const ByteVector &data, ReadStyle style) +DSF::AudioProperties::AudioProperties(const ByteVector &data, ReadStyle style) : + d(new PropertiesPrivate()) { - d = new PropertiesPrivate; read(data); } @@ -145,14 +142,14 @@ int DSF::AudioProperties::blockSizePerChannel() const void DSF::AudioProperties::read(const ByteVector &data) { - d->formatVersion = data.toUInt32LE(0); - d->formatID = data.toUInt32LE(4); - d->channelType = data.toUInt32LE(8); - d->channelNum = data.toUInt32LE(12); - d->samplingFrequency = data.toUInt32LE(16); - d->bitsPerSample = data.toUInt32LE(20); - d->sampleCount = data.toInt64LE(24); - d->blockSizePerChannel = data.toUInt32LE(32); + d->formatVersion = data.toUInt32LE(0); + d->formatID = data.toUInt32LE(4); + d->channelType = data.toUInt32LE(8); + d->channelNum = data.toUInt32LE(12); + d->samplingFrequency = data.toUInt32LE(16); + d->bitsPerSample = data.toUInt32LE(20); + d->sampleCount = data.toInt64LE(24); + d->blockSizePerChannel = data.toUInt32LE(32); d->bitrate = static_cast(d->samplingFrequency * d->bitsPerSample * d->channelNum / 1000.0 + 0.5); diff --git a/taglib/mpeg/id3v2/frames/chapterframe.cpp b/taglib/mpeg/id3v2/frames/chapterframe.cpp index 7f71b122..af79c161 100644 --- a/taglib/mpeg/id3v2/frames/chapterframe.cpp +++ b/taglib/mpeg/id3v2/frames/chapterframe.cpp @@ -65,8 +65,8 @@ ChapterFrame::ChapterFrame(const ID3v2::Header *tagHeader, const ByteVector &dat } ChapterFrame::ChapterFrame(const ByteVector &elementID, - const TagLib::uint &startTime, const TagLib::uint &endTime, - const TagLib::uint &startOffset, const TagLib::uint &endOffset, + TagLib::uint startTime, TagLib::uint endTime, + TagLib::uint startOffset, TagLib::uint endOffset, const FrameList &embeddedFrames) : ID3v2::Frame("CHAP") { diff --git a/taglib/mpeg/id3v2/frames/chapterframe.h b/taglib/mpeg/id3v2/frames/chapterframe.h index 692895ee..36853062 100644 --- a/taglib/mpeg/id3v2/frames/chapterframe.h +++ b/taglib/mpeg/id3v2/frames/chapterframe.h @@ -61,10 +61,9 @@ namespace TagLib { * * All times are in milliseconds. */ - // BIC: There's no reason to use const-references with uints ChapterFrame(const ByteVector &elementID, - const uint &startTime, const uint &endTime, - const uint &startOffset, const uint &endOffset, + uint startTime, uint endTime, + uint startOffset, uint endOffset, const FrameList &embeddedFrames = FrameList()); /*! diff --git a/taglib/mpeg/id3v2/id3v2extendedheader.h b/taglib/mpeg/id3v2/id3v2extendedheader.h index d7227e9d..d60200e7 100644 --- a/taglib/mpeg/id3v2/id3v2extendedheader.h +++ b/taglib/mpeg/id3v2/id3v2extendedheader.h @@ -38,7 +38,7 @@ namespace TagLib { /*! * This class implements ID3v2 extended headers. It attempts to follow, - * both semantically and programatically, the structure specified in + * both semantically and programatically, the structure specified in * the ID3v2 standard. The API is based on the properties of ID3v2 extended * headers specified there. If any of the terms used in this documentation * are unclear please check the specification in the linked section. diff --git a/taglib/riff/wav/infotag.h b/taglib/riff/wav/infotag.h index aa65fd63..dd72bedd 100644 --- a/taglib/riff/wav/infotag.h +++ b/taglib/riff/wav/infotag.h @@ -48,11 +48,11 @@ namespace TagLib { //! A abstraction for the string to data encoding in Info tags. /*! - * RIFF Info tag has no clear definitions about character encodings. + * RIFF INFO tag has no clear definitions about character encodings. * In practice, local encoding of each system is largely used and UTF-8 is * popular too. * - * Here is an option to read and write tags in your preferrd encoding + * Here is an option to read and write tags in your preferred encoding * by subclassing this class, reimplementing parse() and render() and setting * your reimplementation as the default with Info::Tag::setStringHandler(). * @@ -91,12 +91,12 @@ namespace TagLib { { public: /*! - * Constructs an empty Info tag. + * Constructs an empty INFO tag. */ Tag(); /*! - * Constructs an Info tag read from \a data which is contents of "LIST" chunk. + * Constructs an INFO tag read from \a data which is contents of "LIST" chunk. */ Tag(const ByteVector &data); diff --git a/taglib/riff/wav/wavfile.h b/taglib/riff/wav/wavfile.h index f82fa3b2..3fb73a57 100644 --- a/taglib/riff/wav/wavfile.h +++ b/taglib/riff/wav/wavfile.h @@ -63,7 +63,7 @@ namespace TagLib { NoTags = 0x0000, //! Matches ID3v2 tags. ID3v2 = 0x0001, - //! Matches Info tags. + //! Matches INFO tags. Info = 0x0002, //! Matches all tag types. AllTags = 0xffff diff --git a/tests/test_file.cpp b/tests/test_file.cpp index 1ba99042..cb2c3fc2 100644 --- a/tests/test_file.cpp +++ b/tests/test_file.cpp @@ -92,7 +92,7 @@ public: CPPUNIT_ASSERT_EQUAL((offset_t)2, file.rfind(ByteVector("23", 2), 6)); file.seek(0); - const ByteVector v = file.readBlock(file.length()); + const ByteVector v = file.readBlock(static_cast(file.length())); CPPUNIT_ASSERT_EQUAL((size_t)10, v.size()); CPPUNIT_ASSERT_EQUAL((offset_t)v.rfind("23"), file.rfind("23"));