aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-02-28 10:34:37 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-02-28 10:34:37 +0000
commitcfd5af13972472d0c5faf039110c4833a828db00 (patch)
treeffb75d6ece2d7900c5a863e36902907b66364ed7 /src
parentf7d49232a953d33ee57080193dfdf3d939deef29 (diff)
downloadqmmp-cfd5af13972472d0c5faf039110c4833a828db00.tar.gz
qmmp-cfd5af13972472d0c5faf039110c4833a828db00.tar.bz2
qmmp-cfd5af13972472d0c5faf039110c4833a828db00.zip
fixed flac regression (Closes issue 257)
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1593 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
-rw-r--r--src/plugins/Input/flac/decoder_flac.cpp25
-rw-r--r--src/plugins/Input/flac/decoder_flac.h1
2 files changed, 25 insertions, 1 deletions
diff --git a/src/plugins/Input/flac/decoder_flac.cpp b/src/plugins/Input/flac/decoder_flac.cpp
index c80eb21e6..4c6c4d951 100644
--- a/src/plugins/Input/flac/decoder_flac.cpp
+++ b/src/plugins/Input/flac/decoder_flac.cpp
@@ -28,6 +28,7 @@
#include <taglib/flacfile.h>
#include <taglib/xiphcomment.h>
#include <taglib/tmap.h>
+#include <taglib/id3v2header.h>
#include <qmmp/buffer.h>
#include <qmmp/output.h>
#include <qmmp/recycler.h>
@@ -331,8 +332,17 @@ bool DecoderFLAC::initialize()
qDebug("DecoderFLAC: creating FLAC__StreamDecoder");
m_data->decoder = FLAC__stream_decoder_new ();
}
- char buf[22];
+ char buf[500];
+ //skip id3v2
+ data()->input->peek(buf, sizeof(buf));
+ ulong id3v2_size = findID3v2(buf, sizeof(buf));
+ if(id3v2_size)
+ {
+ qDebug("DecoderFLAC: skipping id3v2 tag (%lu bytes)", id3v2_size);
+ data()->input->seek(id3v2_size);
+ }
data()->input->peek(buf,sizeof(buf));
+ data()->input->seek(0);
qDebug("DecoderFLAC: setting callbacks");
if(!memcmp(buf, "OggS", 4))
{
@@ -534,3 +544,16 @@ void DecoderFLAC::next()
m_totalBytes = 0;
}
}
+
+uint DecoderFLAC::findID3v2(char *data, ulong size) //retuns ID3v2 tag size
+{
+ if (size < 10)
+ return 0;
+ if (!memcmp(data, "ID3", 3))
+ {
+ TagLib::ByteVector byteVector(data, size);
+ TagLib::ID3v2::Header header(byteVector);
+ return header.completeTagSize();
+ }
+ return 0;
+}
diff --git a/src/plugins/Input/flac/decoder_flac.h b/src/plugins/Input/flac/decoder_flac.h
index 74af08a71..d0ae2b879 100644
--- a/src/plugins/Input/flac/decoder_flac.h
+++ b/src/plugins/Input/flac/decoder_flac.h
@@ -81,6 +81,7 @@ private:
// helper functions
void deinit();
+ uint findID3v2(char *data, ulong size); //retuns ID3v2 tag size
// FLAC Decoder
FLAC__StreamDecoder *m_flacDecoder;