From: Scott Wheeler Date: Wed, 6 Feb 2008 05:00:24 +0000 (+0000) Subject: Use the new replace function. (Doing in-place value modifications isn't done anywher... X-Git-Tag: v1.5~20 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2644c529a57375072cdb0397d4dac6bc9eb7e2bc;p=taglib Use the new replace function. (Doing in-place value modifications isn't done anywhere else in the TagLib API, so let's not do it here either...) git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@771465 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- diff --git a/taglib/mpeg/id3v2/id3v2framefactory.cpp b/taglib/mpeg/id3v2/id3v2framefactory.cpp index 8634b3c9..5d245cb2 100644 --- a/taglib/mpeg/id3v2/id3v2framefactory.cpp +++ b/taglib/mpeg/id3v2/id3v2framefactory.cpp @@ -116,7 +116,7 @@ Frame *FrameFactory::createFrame(const ByteVector &origData, Header *tagHeader) // Data lengths are not part of the encoded data, but since they are synch-safe // integers they will be never actually encoded. ByteVector frameData = data.mid(Frame::Header::size(version), header->frameSize()); - SynchData::decode(frameData); + frameData = SynchData::decode(frameData); data = data.mid(0, Frame::Header::size(version)) + frameData; } diff --git a/taglib/mpeg/id3v2/id3v2synchdata.cpp b/taglib/mpeg/id3v2/id3v2synchdata.cpp index 773754d7..17503ba5 100644 --- a/taglib/mpeg/id3v2/id3v2synchdata.cpp +++ b/taglib/mpeg/id3v2/id3v2synchdata.cpp @@ -51,22 +51,13 @@ ByteVector SynchData::fromUInt(uint value) return v; } -void SynchData::decode(ByteVector &data) +ByteVector SynchData::decode(const ByteVector &data) { - char *n = data.data(); - const char *o = data.data(); - const char *end = o + data.size(); + ByteVector result = data; - if(data.size() <= 0) - return; + ByteVector pattern(2, char(0)); + pattern[0] = '\xFF'; + pattern[1] = '\x00'; - while(o < end - 1) { - *n++ = *o; - if(o[0] == '\xFF' && o[1] == '\x00') - o++; - o++; - } - *n++ = *o; - - data.resize(n - data.data()); + return result.replace(pattern, '\xFF'); } diff --git a/taglib/mpeg/id3v2/id3v2synchdata.h b/taglib/mpeg/id3v2/id3v2synchdata.h index fedfc90e..86e0bfe5 100644 --- a/taglib/mpeg/id3v2/id3v2synchdata.h +++ b/taglib/mpeg/id3v2/id3v2synchdata.h @@ -59,9 +59,9 @@ namespace TagLib { TAGLIB_EXPORT ByteVector fromUInt(uint value); /*! - * Deunsynchronize the data (in-place). + * Convert the data from unsynchronized data to its original format. */ - TAGLIB_EXPORT void decode(ByteVector &data); + TAGLIB_EXPORT ByteVector decode(const ByteVector &input); } } diff --git a/taglib/mpeg/id3v2/id3v2tag.cpp b/taglib/mpeg/id3v2/id3v2tag.cpp index 381dc4cf..beb496c8 100644 --- a/taglib/mpeg/id3v2/id3v2tag.cpp +++ b/taglib/mpeg/id3v2/id3v2tag.cpp @@ -395,9 +395,8 @@ void ID3v2::Tag::parse(const ByteVector &origData) { ByteVector data = origData; - if(d->header.unsynchronisation() && d->header.majorVersion() <= 3) { - SynchData::decode(data); - } + if(d->header.unsynchronisation() && d->header.majorVersion() <= 3) + data = SynchData::decode(data); uint frameDataPosition = 0; uint frameDataLength = data.size();