aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/ffmpeg/decoder_ffmpegcue.h
blob: c53f874abcaac2bde1178ef5a96c888c2bf1a2f6 (plain) (blame)
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
/***************************************************************************
 *   Copyright (C) 2011-2021 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 DECODER_FFMPEGCUE_H
#define DECODER_FFMPEGCUE_H

#include <qmmp/decoder.h>

class Output;
class QIDevice;
class CueParser;

/**
    @author Ilya Kotov <forkotov02@ya.ru>
*/
class DecoderFFmpegCue : public Decoder
{
public:
    explicit DecoderFFmpegCue(const QString &url);
    virtual ~DecoderFFmpegCue();

    // Standard Decoder API
    bool initialize() override;
    qint64 totalTime() const override;
    void seek(qint64) override;
    qint64 read(unsigned char *data, qint64 size) override;
    int bitrate() const override;
    const QString nextURL() const override;
    void next() override;

private:
    Decoder *m_decoder = nullptr;
    CueParser *m_parser = nullptr;
    char *m_buf = nullptr; //buffer for remainig data
    int m_track = 0;
    qint64 m_duration = 0;
    qint64 m_offset = 0;
    qint64 m_trackSize = 0;
    qint64 m_written = 0;
    QString m_url;
    qint64 m_bufSize = 0;
    qint64 m_frameSize = 0; //sample size
    QIODevice *m_input = nullptr;
};

#endif // DECODER_FFMPEGCUE_H
6'>3ffc8b54a
743106083







dbe1c2bb4
743106083







dbe1c2bb4
743106083








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 by Ilya Kotov                                      *
*   forkotov02@hotmail.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.,                                       *
*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
***************************************************************************/


#include <QFile>
#include <QTextStream>

#include <qmmp/decoder.h>
#include <qmmp/decoderfactory.h>
#include <qmmp/output.h>
#include <qmmp/outputfactory.h>
#include <qmmp/visual.h>
#include <qmmp/visualfactory.h>
#include <qmmp/effect.h>
#include <qmmp/effectfactory.h>
#include <qmmp/qmmp.h>
#include <qmmpui/general.h>
#include <qmmpui/generalfactory.h>


#include "aboutdialog.h"

static QString getstringFromResource(const QString& res_file)
{
    QString ret_string;
    QFile file(res_file);
    if (file.open(QIODevice::ReadOnly))
    {
        QTextStream ts(&file);
        ts.setCodec("UTF-8");
        ret_string = ts.readAll();
        file.close();
    }
    return ret_string;
}

AboutDialog::AboutDialog(QWidget* parent, Qt::WFlags fl)
        : QDialog( parent, fl )
{
    setupUi(this);
    setAttribute(Qt::WA_QuitOnClose, false);
    licenseTextEdit->setPlainText(getstringFromResource(":COPYING"));
    aboutTextEdit->setHtml(loadAbout());
    authorsTextEdit->setPlainText(getstringFromResource(tr(":/txt/authors_en.txt")));
    thanksToTextEdit->setPlainText(getstringFromResource(tr(":/txt/thanks_en.txt")));
    translatorsTextEdit->setPlainText(getstringFromResource(tr(":/txt/translators_en.txt")));
}

AboutDialog::~AboutDialog()
{}

/*$SPECIALIZATION$*/
void AboutDialog::accept()
{
    QDialog::accept();
}

QString AboutDialog::loadAbout()
{
    QString text;
    text.append("<head>");
    text.append("<META content=\"text/html; charset=UTF-8\">");
    text.append("</head>");
    text.append("<h3>"+tr("Qt-based Multimedia Player (Qmmp)")+"</h3>");
    text.append("<h4>"+tr("Version:")+" "+ Qmmp::strVersion() + "</h4>");
    text.append("<p>"+getstringFromResource(tr(":txt/description_en.txt"))+"</p>");
    text.append("<h5>"+tr("Input plugins:")+"</h5>");
    text.append("<ul type=\"square\">");
    foreach(DecoderFactory *fact, *Decoder::factories())
    {
        text.append("<li>");
        text.append(fact->properties().name);
        text.append("</li>");
    }
    text.append("</ul>");
    text.append("<h5>"+tr("Output plugins:")+"</h5>");
    text.append("<ul type=\"square\">");
    foreach(OutputFactory *fact, *Output::factories())
    {
        text.append("<li>");
        text.append(fact->properties().name);
        text.append("</li>");
    }
    text.append("</ul>");
    text.append("<h5>"+tr("Visual plugins:")+"</h5>");
    text.append("<ul type=\"square\">");
    foreach(VisualFactory *fact, *Visual::factories())
    {
        text.append("<li>");
        text.append(fact->properties().name);
        text.append("</li>");
    }
    text.append("</ul>");
    text.append("<h5>"+tr("Effect plugins:")+"</h5>");
    text.append("<ul type=\"square\">");
    foreach(EffectFactory *fact, *Effect::factories())