aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General/rgscan/gain_analysis.c
Commit message (Expand)AuthorAgeFilesLines
* fixed function nametrialuser022015-09-291-1/+1
* rgscan: fixed gcc warningstrialuser022013-10-101-29/+36
* rgscan: added album gain calculationtrialuser022013-09-251-16/+33
* gain_analysis.h/gain_analysis.с: added support for multiple usagetrialuser022013-09-231-146/+174
* converting gain_analysis.c to UTF-8trialuser022013-09-201-9/+9
* prepare for ReplayGain scanner implementationtrialuser022013-09-191-0/+481
upport' href='/qmmp/commit/lib/downloader.h?id=c6d40b3e63ef5af1c83546f41fde38c8f3983c8f'>c6d40b3e6
8d949130a

c6d40b3e6
8d949130a


c6d40b3e6
8d949130a
e6c43e75f
8d949130a
c6d40b3e6
d14349242


8d949130a
e394c172c
8d949130a

4fbe9116e
d80498e56
1f0e403c9
41c8a60a2
1f0e403c9
8d949130a
c6d40b3e6

ade1c826f
d87795831
c6d40b3e6

62f7371b8
3df482395
ade1c826f
c6d40b3e6
8d949130a
1f0e403c9
41c8a60a2
4161760f0
8d949130a
c6d40b3e6
d80498e56
c6d40b3e6
4fbe9116e
c6d40b3e6
8d949130a
c6d40b3e6
8d949130a


8a6f98263






8d949130a


c6d40b3e6
8d949130a


d80498e56
8d949130a
ed3828f0d

c2a2cbd07
8d949130a


8a6f98263

c6d40b3e6

8d949130a
3df482395

d14349242
62f7371b8
c6d40b3e6

8d949130a
c6d40b3e6
e01deb8ac
ade1c826f
ed3828f0d
d80498e56
8beff974f
d87795831
e394c172c
8d949130a
4fbe9116e
d14349242

61795f7dc
d14349242
8d949130a
c6d40b3e6
8d949130a





c6d40b3e6
8d949130a
8a6f98263
8d949130a
c6d40b3e6


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
                                                                            
                                                                            
                                                                            













                                                                            
                                                                            
                                                                             

                          
 


                    
                 
                  
                
                  
                      


                 
 
                 

                     
                      
 
             
                                          
   
                     

              
                    
                    

                         
                                       
                       
                       
  
 
             
                                          
   
                                         
 
            
       
                                                                  
 
                                
 


                     






                                            


                        
                          


                             
                       
               

        
                 


                 

                                                   

        
                 

                                                 
                                                   
                                           

                   
                            
                  
                        
                       
                    
                 
                     
                            
                        
                             
                              

                            
                            
      
  
 





                                             
 
        
                                
                               


      
/***************************************************************************
 *   Copyright (C) 2006-2016 by Ilya Kotov                                 *
 *   forkotov02@ya.ru                                                      *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
 ***************************************************************************/
#ifndef HTTPSTREAMREADER_H
#define HTTPSTREAMREADER_H

#include <QObject>
#include <QIODevice>
#include <QUrl>
#include <QMutex>
#include <QString>
#include <QHash>
#include <QThread>
#include <curl/curl.h>
#ifdef WITH_ENCA
#include <enca.h>
#endif

class QTextCodec;
class QFileInfo;
class DownloadThread;
class HTTPInputSource;

/*! @internal
 *   @author Ilya Kotov <forkotov02@ya.ru>
 */
struct HttpStreamData
{
    char *buf;
    size_t buf_fill;
    size_t buf_size;
    QString content_type;
    bool aborted;
    QHash <QString, QByteArray> header;
    bool icy_meta_data;
    size_t icy_metaint;
};

/*! @internal
 *   @author Ilya Kotov <forkotov02@ya.ru>
 */
class HttpStreamReader : public QIODevice
{
    Q_OBJECT
public:
    HttpStreamReader(const QString &url, HTTPInputSource *parent);

    virtual ~HttpStreamReader();

    /**
     *  QIODevice API
     */
    bool atEnd () const override;
    qint64 bytesAvailable () const override;
    qint64 bytesToWrite () const override;
    void close () override;
    bool isSequential () const override;
    bool open (OpenMode mode) override;
    bool seek (qint64 pos) override;
    /**
     *  helper functions
     */
    QString contentType();
    void downloadFile();
    QMutex *mutex();
    HttpStreamData *stream();
    void checkBuffer();
    void run();

signals:
    void ready();
    void error();

protected:
    qint64 readData(char*, qint64) override;
    qint64 writeData(const char*, qint64) override;

private:
    void abort();
    qint64 readBuffer(char* data, qint64 maxlen);
    void readICYMetaData();
    void parseICYMetaData(char *data, qint64 size);
    void sendStreamInfo(QTextCodec *codec);
    CURL *m_handle;
    QMutex m_mutex;
    HttpStreamData m_stream;
    QString m_url;
    QString m_userAgent;
    size_t m_metacount;
    QString m_title;
    bool m_ready;
    bool m_meta_sent;
    size_t m_prebuffer_size;
    QTextCodec *m_codec;
    DownloadThread *m_thread;
    HTTPInputSource *m_parent;
#ifdef WITH_ENCA
    EncaAnalyser m_analyser;
    QTextCodec *m_prevCodec;
#endif
};

class DownloadThread : public QThread
{
    Q_OBJECT
public:
    DownloadThread(HttpStreamReader *parent);
    virtual ~DownloadThread ();

private:
    virtual void run() override;
    HttpStreamReader *m_parent;
};

#endif