File indexing completed on 2024-04-14 04:46:59

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 &params, 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 &params, bool codecInName);
0043     RenderPresetModel(const QString &name, const QString &groupName, const QString &params, 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 &params);
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 };