mirror of
https://github.com/wang-bin/QtAV.git
synced 2026-10-19 05:31:30 +08:00
294 lines
12 KiB
C++
294 lines
12 KiB
C++
/******************************************************************************
|
|
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 "common_export.h"
|
|
#include <QtCore/QObject>
|
|
#include <QtCore/QStringList>
|
|
#include <QtCore/QVariant>
|
|
#include <QtGui/QColor>
|
|
#include <QtGui/QFont>
|
|
|
|
//TODO: use hash to simplify api
|
|
/*
|
|
* MVC model. signals from Config notify ui update. signals from ui does not change Config unless ui changes applyed by XXXPage.apply()
|
|
* signals from ui will emit Config::xxxChanged() with the value in ui. ui cancel the change also emit it with the value stores in Config.
|
|
* apply() will change the value in Config
|
|
*/
|
|
|
|
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)
|
|
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 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;
|
|
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();
|
|
protected:
|
|
explicit Config(QObject *parent = 0);
|
|
~Config();
|
|
|
|
public Q_SLOTS:
|
|
void save();
|
|
|
|
private:
|
|
class Data;
|
|
Data *mpData;
|
|
};
|
|
|
|
#endif // PLAYER_CONFIG_H
|