]> granicus.if.org Git - taglib/commitdiff
Support the new OggFLAC 1.0 standard from FLAC 1.1.2
authorAllan Sandfeld Jensen <kde@carewolf.com>
Fri, 18 Mar 2005 00:02:27 +0000 (00:02 +0000)
committerAllan Sandfeld Jensen <kde@carewolf.com>
Fri, 18 Mar 2005 00:02:27 +0000 (00:02 +0000)
git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@398574 283d02a7-25f6-0310-bc7c-ecb5cbfe19da

ogg/flac/oggflacfile.cpp

index 9f8fd7cf806211b23b2d4ee4bf229c761cfe24c5..7e330fce70916828c116d2e4e60a158602f96000 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
-    copyright            : (C) 2004 by Allan Sandfeld Jensen
+    copyright            : (C) 2004-2005 by Allan Sandfeld Jensen
     email                : kde@carewolf.org
  ***************************************************************************/
 
@@ -178,16 +178,33 @@ void Ogg::FLAC::File::scan()
   if(!isValid())
     return;
 
-  int ipacket = 1;
+  int ipacket = 0;
   long overhead = 0;
 
-  ByteVector metadataHeader = packet(ipacket);
-
+  ByteVector metadataHeader = packet(ipacket++);
   if(metadataHeader.isNull())
     return;
 
-  ByteVector header = metadataHeader.mid(0,4);
+  ByteVector header;
+
+  if (!metadataHeader.startsWith("fLaC"))  {
+    // FLAC 1.1.2+
+    if (metadataHeader.startsWith("\x7fFLAC")) return;
+
+    if (metadataHeader[5] != 1) return; // not version 1
+
+    metadataHeader = metadataHeader.mid(13);
+  }
+  else {
+    // FLAC 1.1.0 & 1.1.1
+    metadataHeader = packet(ipacket++);
 
+    if(metadataHeader.isNull())
+      return;
+
+  }
+
+  header = metadataHeader.mid(0,4);
   // Header format (from spec):
   // <1> Last-metadata-block flag
   // <7> BLOCK_TYPE
@@ -215,7 +232,10 @@ void Ogg::FLAC::File::scan()
   // Search through the remaining metadata
 
   while(!lastBlock) {
-    metadataHeader = packet(++ipacket);
+    metadataHeader = packet(ipacket++);
+
+    if(metadataHeader.isNull())
+      return;
 
     header = metadataHeader.mid(0, 4);
     blockType = header[0] & 0x7f;