From a89ce9ce0c8cea6e18933319d2076d0ca542e450 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Fri, 18 Mar 2005 00:02:27 +0000 Subject: [PATCH] Support the new OggFLAC 1.0 standard from FLAC 1.1.2 git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@398574 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- ogg/flac/oggflacfile.cpp | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/ogg/flac/oggflacfile.cpp b/ogg/flac/oggflacfile.cpp index 9f8fd7cf..7e330fce 100644 --- a/ogg/flac/oggflacfile.cpp +++ b/ogg/flac/oggflacfile.cpp @@ -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;