File indexing completed on 2024-04-28 08:44:24
0001 /* 0002 SPDX-FileCopyrightText: 2017 Nicolas Carion 0003 SPDX-FileCopyrightText: 2022 Julius Künzel <jk.kdedev@smartlab.uber.space> 0004 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <KLocalizedString> 0010 #include <QDomElement> 0011 #include <QString> 0012 #include <memory> 0013 0014 #include <mlt++/MltProfile.h> 0015 0016 class RenderPresetParams : public QMap<QString, QString> 0017 { 0018 public: 0019 // the number of the enum entries maps to the index of the combo boxes in the preset edit dialog 0020 enum RateControl { Unknown = 0, Average, Constant, Quality, Constrained }; 0021 0022 QString toString(); 0023 void insertFromString(const QString ¶ms, bool overwrite); 0024 void replacePlaceholder(const QString &placeholder, const QString &newValue); 0025 void refreshX265Params(); 0026 RateControl videoRateControl() const; 0027 bool hasAlpha(); 0028 bool isImageSequence(); 0029 bool isX265(); 0030 }; 0031 0032 /** @class RenderPresetModel 0033 @brief This class serves to describe the parameters of a render preset 0034 */ 0035 class RenderPresetModel 0036 { 0037 public: 0038 RenderPresetModel() = delete; 0039 0040 RenderPresetModel(QDomElement preset, const QString &presetFile, bool editable, const QString &groupName = QString(), 0041 const QString &renderer = QStringLiteral("avformat")); 0042 RenderPresetModel(const QString &groupName, const QString &path, QString presetName, const QString ¶ms, bool codecInName); 0043 RenderPresetModel(const QString &name, const QString &groupName, const QString ¶ms, const QString &extension, const QString &defaultVBitrate, 0044 const QString &defaultVQuality, const QString &defaultABitrate, const QString &defaultAQuality, const QString &speedsString, 0045 bool manualPreset); 0046 0047 enum InstallType { BuildIn, Custom, Download }; 0048 0049 QDomElement toXml(); 0050 0051 QString name() const { return m_name; }; 0052 QString note() const { return m_note; } 0053 QString standard() const { return m_standard; }; 0054 RenderPresetParams params(QStringList removeParams = {}) const; 0055 QString extension() const; 0056 QString groupName() const { return m_groupName; }; 0057 QString renderer() const { return m_renderer; }; 0058 QString url() const; 0059 QStringList speeds() const; 0060 int defaultSpeedIndex() const { return m_defaultSpeedIndex; }; 0061 QString topFieldFirst() const { return m_topFieldFirst; }; 0062 QString presetFile() const { return m_presetFile; }; 0063 QStringList audioBitrates() const; 0064 QString defaultABitrate() const; 0065 QStringList audioQualities() const; 0066 QString defaultAQuality() const; 0067 QStringList videoBitrates() const; 0068 QString defaultVBitrate() const; 0069 QStringList videoQualities() const; 0070 QString defaultVQuality() const; 0071 /** @brief Returns a list of all default values for this profile (speed, aBitrate, aQuality, vBitrate, vQuality */ 0072 QStringList defaultValues() const; 0073 bool editable() const; 0074 bool isManual() const; 0075 0076 QString getParam(const QString &name) const; 0077 bool hasParam(const QString &name) const; 0078 RenderPresetParams::RateControl audioRateControl() const; 0079 InstallType installType() const; 0080 bool hasFixedSize() const; 0081 QString error() const; 0082 QString warning() const; 0083 int estimateFileSize(int length); 0084 0085 private: 0086 void setParams(const QString ¶ms); 0087 void checkPreset(); 0088 0089 QString m_presetFile; 0090 bool m_editable; 0091 QString m_name; 0092 QString m_note; 0093 QString m_standard; 0094 bool m_manual; 0095 RenderPresetParams m_params; 0096 QString m_extension; 0097 QString m_groupName; 0098 QString m_renderer; 0099 QString m_url; 0100 QString m_speeds; 0101 int m_defaultSpeedIndex; 0102 QString m_topFieldFirst; 0103 QString m_vBitrates; 0104 QString m_defaultVBitrate; 0105 QString m_vQualities; 0106 QString m_defaultVQuality; 0107 QString m_aBitrates; 0108 QString m_defaultABitrate; 0109 QString m_aQualities; 0110 QString m_defaultAQuality; 0111 0112 QString m_errors; 0113 QString m_warnings; 0114 };