]> granicus.if.org Git - taglib/commitdiff
Use the new replace function. (Doing in-place value modifications isn't done anywher...
authorScott Wheeler <wheeler@kde.org>
Wed, 6 Feb 2008 05:00:24 +0000 (05:00 +0000)
committerScott Wheeler <wheeler@kde.org>
Wed, 6 Feb 2008 05:00:24 +0000 (05:00 +0000)
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

taglib/mpeg/id3v2/id3v2framefactory.cpp
taglib/mpeg/id3v2/id3v2synchdata.cpp
taglib/mpeg/id3v2/id3v2synchdata.h
taglib/mpeg/id3v2/id3v2tag.cpp

index 8634b3c9632194540d28d62ea73f372d7f11c9ad..5d245cb28712b4770dbc95c4630edbc5c30957ad 100644 (file)
@@ -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;
   }
 
index 773754d7334eb87edefdf76dcc45b6b324154258..17503ba5437a5c308689dc0eb567070940944a28 100644 (file)
@@ -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');
 }
index fedfc90e2f73456fedf48380e1b01ef1c1eaab39..86e0bfe55178c004520a8947b1af3aebdf2cab2d 100644 (file)
@@ -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);
     }
 
   }
index 381dc4cf758f631dde9d591ff8fcb95487e8b58d..beb496c8a05e4c4cc9642ef964286fbeaba0112a 100644 (file)
@@ -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();