aboutsummaryrefslogtreecommitdiffstats
path: root/Common/Config.h
blob: 059c67715294451a7b2faa308026f1c475f1206c (plain)
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
/******************************************************************************
    QtAV Player Demo:  this file is part of QtAV examples
    Copyright (C) 2012-2016 Wang Bin <wbsecg1@gmail.com>
*   This file is part of QtAV (from 2014)
    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 3 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, see <http://www.gnu.org/licenses/>.
******************************************************************************/

#ifndef PLAYER_CONFIG_H
#define PLAYER_CONFIG_H

#include "CommonExport.h"
#include <QtCore/QObject>
#include <QtCore/QStringList>
#include <QtCore/QVariant>
#include <QtGui/QColor>
#include <QtGui/QFont>


class COMMON_EXPORT Config : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QVariantList history READ history NOTIFY historyChanged)
    // last file opened by file dialog
    Q_PROPERTY(QString lastFile READ lastFile WRITE setLastFile NOTIFY lastFileChanged)
    Q_PROPERTY(qreal forceFrameRate READ forceFrameRate WRITE setForceFrameRate NOTIFY forceFrameRateChanged)
    Q_PROPERTY(QStringList decoderPriorityNames READ decoderPriorityNames WRITE setDecoderPriorityNames NOTIFY decoderPriorityNamesChanged)
    Q_PROPERTY(bool zeroCopy READ zeroCopy WRITE setZeroCopy NOTIFY zeroCopyChanged)
    Q_PROPERTY(QString captureDir READ captureDir WRITE setCaptureDir NOTIFY captureDirChanged)
    Q_PROPERTY(QString captureFormat READ captureFormat WRITE setCaptureFormat NOTIFY captureFormatChanged)
    Q_PROPERTY(int captureQuality READ captureQuality WRITE setCaptureQuality NOTIFY captureQualityChanged)
    Q_PROPERTY(QStringList subtitleEngines READ subtitleEngines WRITE setSubtitleEngines NOTIFY subtitleEnginesChanged)
    Q_PROPERTY(bool subtitleAutoLoad READ subtitleAutoLoad WRITE setSubtitleAutoLoad NOTIFY subtitleAutoLoadChanged)
    Q_PROPERTY(bool subtitleEnabled READ subtitleEnabled WRITE setSubtitleEnabled NOTIFY subtitleEnabledChanged)
    Q_PROPERTY(QFont subtitleFont READ subtitleFont WRITE setSubtitleFont NOTIFY subtitleFontChanged)
    Q_PROPERTY(QColor subtitleColor READ subtitleColor WRITE setSubtitleColor NOTIFY subtitleColorChanged)
    Q_PROPERTY(QColor subtitleOutlineColor READ subtitleOutlineColor WRITE setSubtitleOutlineColor NOTIFY subtitleOutlineColorChanged)
    Q_PROPERTY(bool subtitleOutline READ subtitleOutline WRITE setSubtitleOutline NOTIFY subtitleOutlineChanged)
    Q_PROPERTY(int subtitleBottomMargin READ subtitleBottomMargin WRITE setSubtitleBottomMargin NOTIFY subtitleBottomMarginChanged)
    Q_PROPERTY(qreal subtitleDelay READ subtitleDelay WRITE setSubtitleDelay NOTIFY subtitleDelayChanged)
    // font properties for libass engine
    Q_PROPERTY(QString assFontFile READ assFontFile WRITE setAssFontFile NOTIFY assFontFileChanged)
    Q_PROPERTY(QString assFontsDir READ assFontsDir WRITE setAssFontsDir NOTIFY assFontsDirChanged)
    Q_PROPERTY(bool assFontFileForced READ isAssFontFileForced WRITE setAssFontFileForced NOTIFY assFontFileForcedChanged)

    Q_PROPERTY(bool previewEnabled READ previewEnabled WRITE setPreviewEnabled NOTIFY previewEnabledChanged)
    Q_PROPERTY(int previewWidth READ previewWidth WRITE setPreviewWidth NOTIFY previewWidthChanged)
    Q_PROPERTY(int previewHeight READ previewHeight WRITE setPreviewHeight NOTIFY previewHeightChanged)
    Q_PROPERTY(bool EGL READ isEGL WRITE setEGL NOTIFY EGLChanged)
    Q_PROPERTY(OpenGLType openGLType READ openGLType WRITE setOpenGLType NOTIFY openGLTypeChanged)
    Q_PROPERTY(QString ANGLEPlatform READ getANGLEPlatform WRITE setANGLEPlatform NOTIFY ANGLEPlatformChanged)
    Q_PROPERTY(bool avformatOptionsEnabled READ avformatOptionsEnabled WRITE setAvformatOptionsEnabled NOTIFY avformatOptionsEnabledChanged)
    Q_PROPERTY(qreal timeout READ timeout WRITE setTimeout NOTIFY timeoutChanged)
    Q_PROPERTY(int bufferValue READ bufferValue WRITE setBufferValue NOTIFY bufferValueChanged)
    Q_PROPERTY(QString logLevel READ logLevel WRITE setLogLevel NOTIFY logLevelChanged)
    Q_ENUMS(OpenGLType)
    Q_PROPERTY(QString language READ language WRITE setLanguage NOTIFY languageChanged)

    Q_PROPERTY(bool userShaderEnabled READ userShaderEnabled WRITE setUserShaderEnabled NOTIFY userShaderEnabledChanged)
    Q_PROPERTY(bool intermediateFBO READ intermediateFBO WRITE setIntermediateFBO NOTIFY intermediateFBOChanged)
    Q_PROPERTY(QString fragHeader READ fragHeader WRITE setFragHeader NOTIFY fragHeaderChanged)
    Q_PROPERTY(QString fragSample READ fragSample WRITE setFragSample NOTIFY fragSampleChanged)
    Q_PROPERTY(QString fragPostProcess READ fragPostProcess WRITE setFragPostProcess NOTIFY fragPostProcessChanged)
    Q_PROPERTY(QString videoURI READ videoURI WRITE setVideoURI NOTIFY videoURIChanged)

    Q_PROPERTY(qreal segmentBufferSize READ segmentBufferSize WRITE setSegmentBufferSize NOTIFY segmentBufferSizeChanged)
    Q_PROPERTY(QString adaptationLogic READ adaptationLogic WRITE setAdaptationLogic NOTIFY adaptationLogicChanged)
    Q_PROPERTY(bool icn READ icn WRITE setIcn NOTIFY icnChanged)
    Q_PROPERTY(qreal rateAlpha READ rateAlpha WRITE setRateAlpha NOTIFY rateAlphaChanged)
    Q_PROPERTY(qreal bufferReservoirThreshold READ bufferReservoirThreshold WRITE setBufferReservoirThreshold NOTIFY bufferReservoirThresholdChanged)
    Q_PROPERTY(qreal bufferMaxThreshold READ bufferMaxThreshold WRITE setBufferMaxThreshold NOTIFY bufferMaxThresholdChanged)
    Q_PROPERTY(qreal adaptechFirstThreshold READ adaptechFirstThreshold WRITE setAdaptechFirstThreshold NOTIFY adaptechFirstThresholdChanged)
    Q_PROPERTY(qreal adaptechSecondThreshold READ adaptechSecondThreshold WRITE setAdaptechSecondThreshold NOTIFY adaptechSecondThresholdChanged)
    Q_PROPERTY(qreal adaptechSwitchUpMargin READ adaptechSwitchUpMargin WRITE setAdaptechSwitchUpMargin NOTIFY adaptechSwitchUpMarginChanged)
    Q_PROPERTY(qreal adaptechSlackParameter READ adaptechSlackParameter WRITE setAdaptechSlackParameter NOTIFY adaptechSlackParameterChanged)
    Q_PROPERTY(qreal adaptechAlpha READ adaptechAlpha WRITE setAdaptechAlpha NOTIFY adaptechAlphaChanged)
    Q_PROPERTY(qreal bufferThreeThresholdFirst READ bufferThreeThresholdFirst WRITE setBufferThreeThresholdFirst NOTIFY bufferThreeThresholdFirstChanged)
    Q_PROPERTY(qreal bufferThreeThresholdSecond READ bufferThreeThresholdSecond WRITE setBufferThreeThresholdSecond NOTIFY bufferThreeThresholdSecondChanged)
    Q_PROPERTY(qreal bufferThreeThresholdThird READ bufferThreeThresholdThird WRITE setBufferThreeThresholdThird NOTIFY bufferThreeThresholdThirdChanged)
    Q_PROPERTY(qreal pandaParamAlpha READ pandaParamAlpha WRITE setPandaParamAlpha NOTIFY pandaParamAlphaChanged)
    Q_PROPERTY(qreal pandaParamBeta READ pandaParamBeta WRITE setPandaParamBeta NOTIFY pandaParamBetaChanged)
    Q_PROPERTY(qreal pandaParamBMin READ pandaParamBMin WRITE setPandaParamBMin NOTIFY pandaParamBMinChanged)
    Q_PROPERTY(qreal pandaParamK READ pandaParamK WRITE setPandaParamK NOTIFY pandaParamKChanged)
    Q_PROPERTY(qreal pandaParamW READ pandaParamW WRITE setPandaParamW NOTIFY pandaParamWChanged)
    Q_PROPERTY(qreal pandaParamEpsilon READ pandaParamEpsilon WRITE setPandaParamAlpha NOTIFY pandaParamEpsilonChanged)
    Q_PROPERTY(qreal bolaBufferTarget READ bolaBufferTarget WRITE setBolaBufferTarget NOTIFY bolaBufferTargetChanged)
    Q_PROPERTY(qreal bolaAlpha READ bolaAlpha WRITE setBolaAlpha NOTIFY bolaAlphaChanged)
    Q_PROPERTY(bool repeat READ repeat WRITE setRepeat NOTIFY repeatChanged)
    Q_PROPERTY(bool graph READ graph WRITE setGraph NOTIFY graphChanged)
    Q_PROPERTY(bool fullScreen READ fullScreen WRITE setFullScreen NOTIFY fullScreenChanged)
    Q_PROPERTY(bool autotune READ autotune WRITE setAutotune NOTIFY autotuneChanged)
    Q_PROPERTY(int lifetime READ lifetime WRITE setLifetime NOTIFY lifetimeChanged)
    Q_PROPERTY(int retransmissions READ retransmissions WRITE setRetransmissions NOTIFY retransmissionsChanged)
    Q_PROPERTY(qreal alpha READ alpha WRITE setAlpha NOTIFY alphaChanged)
    Q_PROPERTY(qreal beta READ beta WRITE setBeta NOTIFY betaChanged)
    Q_PROPERTY(qreal drop READ drop WRITE setDrop NOTIFY dropChanged)
    Q_PROPERTY(qreal betaWifi READ betaWifi WRITE setBetaWifi NOTIFY betaWifiChanged)
    Q_PROPERTY(qreal dropWifi READ dropWifi WRITE setDropWifi NOTIFY dropWifiChanged)
    Q_PROPERTY(int delayWifi READ delayWifi WRITE setDelayWifi NOTIFY delayWifiChanged)
    Q_PROPERTY(qreal betaLte READ betaLte WRITE setBetaLte NOTIFY betaLteChanged)
    Q_PROPERTY(qreal dropLte READ dropLte WRITE setDropLte NOTIFY dropLteChanged)
    Q_PROPERTY(int delayLte READ delayLte WRITE setDelayLte NOTIFY delayLteChanged)
    Q_PROPERTY(int batchingParameter READ batchingParameter WRITE setBatchingParameter NOTIFY batchingParameterChanged)
    Q_PROPERTY(int rateEstimator READ rateEstimator WRITE setRateEstimator NOTIFY rateEstimatorChanged)

public:
    enum OpenGLType { // currently only for windows
        Auto,
        Desktop,
        OpenGLES,
        Software
    };

    static Config& instance();
    static void setName(const QString& name); // config file base name
    static QString getName();
    /*!
     * \brief defaultConfigFile
     * Config file name is $appname.ini. Must call Config::setName() first
     */
    static QString defaultConfigFile();
    static QString defaultDir();
    Q_INVOKABLE bool reset();
    void reload();
    //void loadFromFile(const QString& file);
    QString getConfigPath();
    QString lastFile() const;
    Config& setLastFile(const QString& value);

    qreal forceFrameRate() const;
    Config& setForceFrameRate(qreal value);
    // in priority order. the same order as displayed in ui
    QStringList decoderPriorityNames() const;
    Config& setDecoderPriorityNames(const QStringList& names);

    bool zeroCopy() const;
    Config& setZeroCopy(bool value);

    QString captureDir() const;
    Config& setCaptureDir(const QString& dir);

    /*!
     * \brief captureFormat
     *  can be "yuv" to capture yuv image without convertion. the suffix is the yuv format, e.g. "yuv420p", "nv12"
     *  or can be "jpg", "png"
     * \return
     */
    QString captureFormat() const;
    Config& setCaptureFormat(const QString& format);
    // only works for non-yuv capture. value: -1~100, -1: default
    int captureQuality() const;
    Config& setCaptureQuality(int quality);

    QStringList subtitleEngines() const;
    Config& setSubtitleEngines(const QStringList& value);
    bool subtitleAutoLoad() const;
    Config& setSubtitleAutoLoad(bool value);
    bool subtitleEnabled() const;
    Config& setSubtitleEnabled(bool value);

    QFont subtitleFont() const;
    Config& setSubtitleFont(const QFont& value);
    bool subtitleOutline() const;
    Config& setSubtitleOutline(bool value);
    QColor subtitleColor() const;
    Config& setSubtitleColor(const QColor& value);
    QColor subtitleOutlineColor() const;
    Config& setSubtitleOutlineColor(const QColor& value);
    int subtitleBottomMargin() const;
    Config& setSubtitleBottomMargin(int value);

    qreal subtitleDelay() const;
    Config& setSubtitleDelay(qreal value);

    QString assFontFile() const;
    Config& setAssFontFile(const QString& value);
    QString assFontsDir() const;
    Config& setAssFontsDir(const QString& value);
    bool isAssFontFileForced() const;
    Config& setAssFontFileForced(bool value);

    bool previewEnabled() const;
    Config& setPreviewEnabled(bool value);
    int previewWidth() const;
    Config& setPreviewWidth(int value);
    int previewHeight() const;
    Config& setPreviewHeight(int value);

    QVariantHash avformatOptions() const;
    bool avformatOptionsEnabled() const;
    Config& setAvformatOptionsEnabled(bool value);
    int analyzeDuration() const;
    Config& analyzeDuration(int ad);
    unsigned int probeSize() const;
    Config& probeSize(unsigned int ps);
    bool reduceBuffering() const;
    Config& reduceBuffering(bool y);
    QString avformatExtra() const;
    Config& avformatExtra(const QString& text);

    QString avfilterVideoOptions() const;
    Config& avfilterVideoOptions(const QString& options);
    bool avfilterVideoEnable() const;
    Config& avfilterVideoEnable(bool e);

    QString avfilterAudioOptions() const;
    Config& avfilterAudioOptions(const QString& options);
    bool avfilterAudioEnable() const;
    Config& avfilterAudioEnable(bool e);

    // currently only for xcb
    bool isEGL() const;
    Config& setEGL(bool value);
    // can be "Desktop", "OpenGLES", "Software"
    OpenGLType openGLType() const;
    Config& setOpenGLType(OpenGLType value);

    QString getANGLEPlatform() const;
    Config& setANGLEPlatform(const QString &value);

    // ms >0. default 30000ms
    qreal timeout() const;
    Config& setTimeout(qreal value);

    bool abortOnTimeout() const;
    Config& setAbortOnTimeout(bool value);

    // <0: auto
    int bufferValue() const;
    Config& setBufferValue(int value);

    // can be: "", "off", "debug", "warning", "critical", "fatal", "all"
    QString logLevel() const;
    Config& setLogLevel(const QString& value);

    QString language() const;
    Config& setLanguage(const QString& value);

    Q_INVOKABLE QVariant operator ()(const QString& key) const;
    Q_INVOKABLE Config& operator ()(const QString& key, const QVariant& value);

    /// history will not be clear in reset()
    QVariantList history() const;
    // {url: urlString, start: ms, duration: ms}
    Q_INVOKABLE void addHistory(const QVariantMap& value);
    Q_INVOKABLE void removeHistory(const QString& url);
    Q_INVOKABLE void clearHistory();

    Config& setUserShaderEnabled(bool value);
    bool userShaderEnabled() const;
    Config& setIntermediateFBO(bool value);
    bool intermediateFBO() const;
    Config& setFragHeader(const QString& text);
    QString fragHeader() const;
    Config& setFragSample(const QString& text);
    QString fragSample() const;
    Config& setFragPostProcess(const QString& text);
    QString fragPostProcess() const;
    Config& setVideoURI(const QString &value);
    QString videoURI() const;
    Config& setSegmentBufferSize(qreal value);
    qreal segmentBufferSize() const;
    Config& setAdaptationLogic(const QString &value);
    QString adaptationLogic() const;
    Config& setIcn(bool value);
    bool icn() const;
    Config& setRateAlpha(qreal value);
    qreal rateAlpha() const;
    Config& setBufferReservoirThreshold(qreal value);
    qreal bufferReservoirThreshold() const;
    Config& setBufferMaxThreshold(qreal value);
    qreal bufferMaxThreshold() const;
    Config& setAdaptechFirstThreshold(qreal value);
    qreal adaptechFirstThreshold() const;
    Config& setAdaptechSecondThreshold(qreal value);
    qreal adaptechSecondThreshold() const;
    Config& setAdaptechSwitchUpMargin(qreal value);
    qreal adaptechSwitchUpMargin() const;
    Config& setAdaptechSlackParameter(qreal value);
    qreal adaptechSlackParameter() const;
    Config& setAdaptechAlpha(qreal value);
    qreal adaptechAlpha() const;
    Config& setBufferThreeThresholdFirst(qreal value);
    qreal bufferThreeThresholdFirst() const;
    Config& setBufferThreeThresholdSecond(qreal value);
    qreal bufferThreeThresholdSecond() const;
    Config& setBufferThreeThresholdThird(qreal value);
    qreal bufferThreeThresholdThird() const;
    Config& setPandaParamAlpha(qreal value);
    qreal pandaParamAlpha() const;
    Config& setPandaParamBeta(qreal value);
    qreal pandaParamBeta() const;
    Config& setPandaParamBMin(qreal value);
    qreal pandaParamBMin() const;
    Config& setPandaParamK(qreal value);
    qreal pandaParamK() const;
    Config& setPandaParamW(qreal value);
    qreal pandaParamW() const;
    Config& setPandaParamEpsilon(qreal value);
    qreal pandaParamEpsilon() const;
    Config& setBolaBufferTarget(qreal value);
    qreal bolaBufferTarget() const;
    Config& setBolaAlpha(qreal value);
    qreal bolaAlpha() const;
    Config& setRepeat(bool value);
    bool repeat() const;
    Config& setGraph(bool value);
    bool graph() const;
    Config& setFullScreen(bool value);
    bool fullScreen() const;
    Config& setAutotune(bool value);
    bool autotune() const;
    Config& setLifetime(int value);
    int lifetime() const;
    Config& setRetransmissions(int value);
    int retransmissions() const;
    Config& setAlpha(qreal value);
    qreal alpha() const;
    Config& setBeta(qreal value);
    qreal beta() const;
    Config& setDrop(qreal value);
    qreal drop() const;
    Config& setBetaWifi(qreal value);
    qreal betaWifi() const;
    Config& setDropWifi(qreal value);
    qreal dropWifi() const;
    Config& setDelayWifi(int value);
    int delayWifi() const;
    Config& setBetaLte(qreal value);
    qreal betaLte() const;
    Config& setDropLte(qreal value);
    qreal dropLte() const;
    Config& setDelayLte(int value);
    int delayLte() const;
    Config& setBatchingParameter(int value);
    int batchingParameter() const;
    Config& setRateEstimator(int value);
    int rateEstimator() const;


public:
    Q_SIGNAL void changed();
    Q_SIGNAL void userShaderEnabledChanged();
    Q_SIGNAL void intermediateFBOChanged();
    Q_SIGNAL void fragHeaderChanged();
    Q_SIGNAL void fragSampleChanged();
    Q_SIGNAL void fragPostProcessChanged();

    Q_SIGNAL void lastFileChanged();
    //keyword 'signals' maybe protected. we need call the signals in other classes. Q_SIGNAL is empty
    Q_SIGNAL void forceFrameRateChanged();
    Q_SIGNAL void decodingThreadsChanged(int n);
    Q_SIGNAL void decoderPriorityNamesChanged();
    Q_SIGNAL void registeredDecodersChanged(const QVector<int>& r);
    Q_SIGNAL void zeroCopyChanged();
    Q_SIGNAL void captureDirChanged(const QString& dir);
    Q_SIGNAL void captureFormatChanged(const QString& fmt);
    Q_SIGNAL void captureQualityChanged(int quality);
    Q_SIGNAL void avfilterVideoChanged();
    Q_SIGNAL void avfilterAudioChanged();
    Q_SIGNAL void subtitleEnabledChanged();
    Q_SIGNAL void subtitleAutoLoadChanged();
    Q_SIGNAL void subtitleEnginesChanged();
    Q_SIGNAL void subtitleFontChanged();
    Q_SIGNAL void subtitleColorChanged();
    Q_SIGNAL void subtitleOutlineChanged();
    Q_SIGNAL void subtitleOutlineColorChanged();
    Q_SIGNAL void subtitleBottomMarginChanged();
    Q_SIGNAL void subtitleDelayChanged();
    Q_SIGNAL void assFontFileChanged();
    Q_SIGNAL void assFontsDirChanged();
    Q_SIGNAL void assFontFileForcedChanged();
    Q_SIGNAL void previewEnabledChanged();
    Q_SIGNAL void previewWidthChanged();
    Q_SIGNAL void previewHeightChanged();
    Q_SIGNAL void EGLChanged();
    Q_SIGNAL void openGLTypeChanged();
    Q_SIGNAL void ANGLEPlatformChanged();
    Q_SIGNAL void avformatOptionsEnabledChanged();
    Q_SIGNAL void bufferValueChanged();
    Q_SIGNAL void timeoutChanged();
    Q_SIGNAL void abortOnTimeoutChanged();
    Q_SIGNAL void logLevelChanged();
    Q_SIGNAL void languageChanged();
    Q_SIGNAL void historyChanged();
    Q_SIGNAL void videoURIChanged();
    Q_SIGNAL void segmentBufferSizeChanged();
    Q_SIGNAL void adaptationLogicChanged();
    Q_SIGNAL void icnChanged();
    Q_SIGNAL void rateAlphaChanged();
    Q_SIGNAL void bufferReservoirThresholdChanged();
    Q_SIGNAL void bufferMaxThresholdChanged();
    Q_SIGNAL void adaptechFirstThresholdChanged();
    Q_SIGNAL void adaptechSecondThresholdChanged();
    Q_SIGNAL void adaptechSwitchUpMarginChanged();
    Q_SIGNAL void adaptechSlackParameterChanged();
    Q_SIGNAL void adaptechAlphaChanged();
    Q_SIGNAL void bufferThreeThresholdFirstChanged();
    Q_SIGNAL void bufferThreeThresholdSecondChanged();
    Q_SIGNAL void bufferThreeThresholdThirdChanged();
    Q_SIGNAL void pandaParamAlphaChanged();
    Q_SIGNAL void pandaParamBetaChanged();
    Q_SIGNAL void pandaParamBMinChanged();
    Q_SIGNAL void pandaParamKChanged();
    Q_SIGNAL void pandaParamWChanged();
    Q_SIGNAL void pandaParamEpsilonChanged();
    Q_SIGNAL void bolaAlphaChanged();
    Q_SIGNAL void bolaBufferTargetChanged();
    Q_SIGNAL void repeatChanged();
    Q_SIGNAL void graphChanged();
    Q_SIGNAL void fullScreenChanged();
    Q_SIGNAL void autotuneChanged();
    Q_SIGNAL void lifetimeChanged();
    Q_SIGNAL void retransmissionsChanged();
    Q_SIGNAL void alphaChanged();
    Q_SIGNAL void betaChanged();
    Q_SIGNAL void dropChanged();
    Q_SIGNAL void betaWifiChanged();
    Q_SIGNAL void dropWifiChanged();
    Q_SIGNAL void delayWifiChanged();
    Q_SIGNAL void betaLteChanged();
    Q_SIGNAL void dropLteChanged();
    Q_SIGNAL void delayLteChanged();
    Q_SIGNAL void batchingParameterChanged();
    Q_SIGNAL void rateEstimatorChanged();

protected:
    explicit Config(QObject *parent = 0);
    ~Config();

public Q_SLOTS:
    void save();

private:
    class Data;
    Data *mpData;
};

#endif // PLAYER_CONFIG_H