From a2aaf8a8e17372caef3388cb06a88d65f7be52ea Mon Sep 17 00:00:00 2001 From: Scott Wheeler Date: Fri, 16 May 2008 05:08:51 +0000 Subject: [PATCH] Make reading an ID3v2 tag out of a RIFF chunk possible. git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@808235 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- taglib/riff/aiff/aifffile.cpp | 19 +++++++++++++------ taglib/riff/rifffile.cpp | 8 ++++++++ taglib/riff/rifffile.h | 1 + 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/taglib/riff/aiff/aifffile.cpp b/taglib/riff/aiff/aifffile.cpp index 27fbb6ca..cec725f5 100644 --- a/taglib/riff/aiff/aifffile.cpp +++ b/taglib/riff/aiff/aifffile.cpp @@ -38,15 +38,18 @@ using namespace TagLib; class RIFF::AIFF::File::FilePrivate { public: - FilePrivate() + FilePrivate() : + tag(0) { } ~FilePrivate() { - + delete tag; } + + ID3v2::Tag *tag; }; //////////////////////////////////////////////////////////////////////////////// @@ -68,7 +71,7 @@ RIFF::AIFF::File::~File() ID3v2::Tag *RIFF::AIFF::File::tag() const { - return 0; + return d->tag; } RIFF::AIFF::Properties *RIFF::AIFF::File::audioProperties() const @@ -92,7 +95,11 @@ bool RIFF::AIFF::File::save() void RIFF::AIFF::File::read(bool readProperties, Properties::ReadStyle /* propertiesStyle */) { - debug("Found " + String::number(chunkCount()) + " chunks."); - for(int i = 0; i < chunkCount(); i++) - debug("\t\"" + chunkName(i) + "\""); + for(uint i = 0; i < chunkCount(); i++) { + if(chunkName(i) == "ID3 ") + d->tag = new ID3v2::Tag(this, chunkOffset(i)); + } + + if(!d->tag) + d->tag = new ID3v2::Tag; } diff --git a/taglib/riff/rifffile.cpp b/taglib/riff/rifffile.cpp index 3e9ad9d0..1b3b9d84 100644 --- a/taglib/riff/rifffile.cpp +++ b/taglib/riff/rifffile.cpp @@ -43,6 +43,7 @@ public: ByteVector format; ByteVectorList chunkNames; + List chunkOffsets; List chunkSizes; }; @@ -73,6 +74,11 @@ uint RIFF::File::chunkCount() const return d->chunkNames.size(); } +uint RIFF::File::chunkOffset(uint i) const +{ + return d->chunkOffsets[i]; +} + ByteVector RIFF::File::chunkName(uint i) const { if(i >= chunkCount()) @@ -117,6 +123,8 @@ void RIFF::File::read() d->chunkNames.append(chunkName); d->chunkSizes.append(chunkSize); + d->chunkOffsets.append(tell()); + seek(chunkSize, Current); } } diff --git a/taglib/riff/rifffile.h b/taglib/riff/rifffile.h index 5949df1e..9bb51049 100644 --- a/taglib/riff/rifffile.h +++ b/taglib/riff/rifffile.h @@ -58,6 +58,7 @@ namespace TagLib { File(FileName file, Endianness endianness); uint chunkCount() const; + uint chunkOffset(uint i) const; ByteVector chunkName(uint i) const; ByteVector chunkData(uint i);