]> granicus.if.org Git - taglib/commitdiff
MPEG: Hide an internal function from the public header.
authorTsuda Kageyu <tsuda.kageyu@gmail.com>
Fri, 31 Jul 2015 15:15:51 +0000 (00:15 +0900)
committerTsuda Kageyu <tsuda.kageyu@gmail.com>
Fri, 31 Jul 2015 15:15:51 +0000 (00:15 +0900)
taglib/mpeg/mpegfile.cpp
taglib/mpeg/mpegfile.h

index e353a563c5664f36e303a0c4b999f07668b35df0..43075cfc091528eebde9ee374ef015ba987ced28 100644 (file)
 #include <apetag.h>
 #include <tdebug.h>
 
-#include <bitset>
-
 #include "mpegfile.h"
 #include "mpegheader.h"
 #include "tpropertymap.h"
 
 using namespace TagLib;
 
+namespace
+{
+  /*!
+   * MPEG frames can be recognized by the bit pattern 11111111 111, so the
+   * first byte is easy to check for, however checking to see if the second byte
+   * starts with \e 111 is a bit more tricky, hence these functions.
+   */
+
+  inline bool firstSyncByte(uchar byte)
+  {
+    return (byte == 0xFF);
+  }
+
+  inline bool secondSynchByte(uchar byte)
+  {
+    return ((byte & 0xE0) == 0xE0);
+  }
+}
+
 namespace
 {
   enum { ID3v2Index = 0, APEIndex = 1, ID3v1Index = 2 };
@@ -388,11 +405,11 @@ long MPEG::File::nextFrameOffset(long position)
       return position - 1;
 
     for(uint i = 0; i < buffer.size() - 1; i++) {
-      if(uchar(buffer[i]) == 0xff && secondSynchByte(buffer[i + 1]))
+      if(firstSyncByte(buffer[i]) && secondSynchByte(buffer[i + 1]))
         return position + i;
     }
 
-    foundLastSyncPattern = uchar(buffer[buffer.size() - 1]) == 0xff;
+    foundLastSyncPattern = firstSyncByte(buffer[buffer.size() - 1]);
     position += buffer.size();
   }
 }
@@ -412,11 +429,11 @@ long MPEG::File::previousFrameOffset(long position)
     if(buffer.size() <= 0)
       break;
 
-    if(foundFirstSyncPattern && uchar(buffer[buffer.size() - 1]) == 0xff)
+    if(foundFirstSyncPattern && firstSyncByte(buffer[buffer.size() - 1]))
       return position + buffer.size() - 1;
 
     for(int i = buffer.size() - 2; i >= 0; i--) {
-      if(uchar(buffer[i]) == 0xff && secondSynchByte(buffer[i + 1]))
+      if(firstSyncByte(buffer[i]) && secondSynchByte(buffer[i + 1]))
         return position + i;
     }
 
@@ -524,7 +541,7 @@ void MPEG::File::read(bool readProperties)
 long MPEG::File::findID3v2(long offset)
 {
   // This method is based on the contents of TagLib::File::find(), but because
-  // of some subtlties -- specifically the need to look for the bit pattern of
+  // of some subtleties -- specifically the need to look for the bit pattern of
   // an MPEG sync, it has been modified for use here.
 
   if(isValid() && ID3v2::Header::fileIdentifier().size() <= bufferSize()) {
@@ -664,11 +681,3 @@ void MPEG::File::findAPE()
   d->APELocation = -1;
   d->APEFooterLocation = -1;
 }
-
-bool MPEG::File::secondSynchByte(char byte)
-{
-  std::bitset<8> b(byte);
-
-  // check to see if the byte matches 111xxxxx
-  return b.test(7) && b.test(6) && b.test(5);
-}
index de2133393e75f711e71f1b486858687f7f5678a8..01f81d1c70f9cf10d6ec6d2ac83ef686857decb8 100644 (file)
@@ -375,13 +375,6 @@ namespace TagLib {
       long findID3v1();
       void findAPE();
 
-      /*!
-       * MPEG frames can be recognized by the bit pattern 11111111 111, so the
-       * first byte is easy to check for, however checking to see if the second byte
-       * starts with \e 111 is a bit more tricky, hence this member function.
-       */
-      static bool secondSynchByte(char byte);
-
       class FilePrivate;
       FilePrivate *d;
     };