PageRenderTime 82ms CodeModel.GetById 40ms app.highlight 5ms RepoModel.GetById 35ms app.codeStats 0ms

/thirdparty/liblastfm2/src/fingerprint/contrib/MadSource.h

http://github.com/tomahawk-player/tomahawk
C++ Header | 69 lines | 37 code | 13 blank | 19 comment | 0 complexity | b8068e4f1515e1d902640c45bb30c0d5 MD5 | raw file
 1/*
 2   Copyright 2009 Last.fm Ltd. 
 3   Copyright 2009 John Stamp <jstamp@users.sourceforge.net>
 4
 5   This file is part of liblastfm.
 6
 7   liblastfm is free software: you can redistribute it and/or modify
 8   it under the terms of the GNU General Public License as published by
 9   the Free Software Foundation, either version 3 of the License, or
10   (at your option) any later version.
11
12   liblastfm is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU General Public License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with liblastfm.  If not, see <http://www.gnu.org/licenses/>.
19*/
20
21#ifndef __MP3_SOURCE_H__
22#define __MP3_SOURCE_H__
23
24#include <lastfm/FingerprintableSource>
25#include <QFile>
26#include <string>
27#include <vector>
28#include <fstream>
29#include <mad.h>
30
31
32class MadSource : public lastfm::FingerprintableSource
33{
34public:
35    MadSource();
36    ~MadSource();
37
38    virtual void getInfo(int& lengthSecs, int& samplerate, int& bitrate, int& nchannels);
39    virtual void init(const QString& fileName);
40    virtual int updateBuffer(signed short* pBuffer, size_t bufferSize);
41    virtual void skip(const int mSecs);
42    virtual void skipSilence(double silenceThreshold = 0.0001);
43    virtual bool eof() const { return m_inputFile.atEnd(); }
44
45private:
46    static bool fetchData( QFile& mp3File,
47                           unsigned char* pMP3_Buffer,
48                           const int MP3_BufferSize,
49                           mad_stream& madStream );
50
51    static bool isRecoverable(const mad_error& error, bool log = false);
52
53    static std::string MadErrorString(const mad_error& error);
54
55    struct mad_stream    m_mad_stream;
56    struct mad_frame     m_mad_frame;
57    mad_timer_t          m_mad_timer;
58    struct mad_synth     m_mad_synth;
59
60    QFile                m_inputFile;
61
62    unsigned char*       m_pMP3_Buffer;
63    static const int     m_MP3_BufferSize = (5*8192);
64    QString              m_fileName;
65
66    size_t               m_pcmpos;
67};
68
69#endif