1 /* 2 * Kaidan - A user-friendly XMPP client for every device! 3 * 4 * Copyright (C) 2016-2021 Kaidan developers and contributors 5 * (see the LICENSE file for a full list of copyright authors) 6 * 7 * Kaidan is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * In addition, as a special exception, the author of Kaidan gives 13 * permission to link the code of its release with the OpenSSL 14 * project's "OpenSSL" library (or with modified versions of it that 15 * use the same license as the "OpenSSL" library), and distribute the 16 * linked executables. You must obey the GNU General Public License in 17 * all respects for all of the code used other than "OpenSSL". If you 18 * modify this file, you may extend this exception to your version of 19 * the file, but you are not obligated to do so. If you do not wish to 20 * do so, delete this exception statement from your version. 21 * 22 * Kaidan is distributed in the hope that it will be useful, 23 * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 * GNU General Public License for more details. 26 * 27 * You should have received a copy of the GNU General Public License 28 * along with Kaidan. If not, see <http://www.gnu.org/licenses/>. 29 */ 30 31 #pragma once 32 33 #include <QAudioEncoderSettings> 34 #include <QCoreApplication> 35 #include <QImageEncoderSettings> 36 #include <QVideoEncoderSettings> 37 38 #include "AudioDeviceModel.h" 39 #include "CameraModel.h" 40 41 class QSettings; 42 43 class MediaSettings 44 { 45 Q_GADGET 46 47 Q_PROPERTY(CameraInfo camera MEMBER camera) 48 Q_PROPERTY(AudioDeviceInfo audioInputDevice MEMBER audioInputDevice) 49 Q_PROPERTY(QString container MEMBER container) 50 51 public: 52 MediaSettings() = default; 53 explicit MediaSettings(const CameraInfo &camera, const AudioDeviceInfo &audioInputDevice); 54 55 void loadSettings(QSettings *settings); 56 void saveSettings(QSettings *settings); 57 void dumpProperties(const QString &context) const; 58 59 bool operator==(const MediaSettings &other) const; 60 bool operator!=(const MediaSettings &other) const; 61 62 CameraInfo camera; 63 AudioDeviceInfo audioInputDevice; 64 QString container; 65 }; 66 67 class CommonEncoderSettings 68 { 69 Q_GADGET 70 Q_DECLARE_TR_FUNCTIONS(CommonEncoderSettings) 71 72 Q_PROPERTY(QString codec MEMBER codec) 73 Q_PROPERTY(CommonEncoderSettings::EncodingQuality quality MEMBER quality) 74 Q_PROPERTY(QVariantMap options MEMBER options) 75 76 public: 77 enum class EncodingQuality { 78 VeryLowQuality = QMultimedia::EncodingQuality::VeryLowQuality, 79 LowQuality = QMultimedia::EncodingQuality::LowQuality, 80 NormalQuality = QMultimedia::EncodingQuality::NormalQuality, 81 HighQuality = QMultimedia::EncodingQuality::HighQuality, 82 VeryHighQuality = QMultimedia::EncodingQuality::VeryHighQuality 83 }; 84 Q_ENUM(EncodingQuality) 85 86 enum class EncodingMode { 87 ConstantQualityEncoding = QMultimedia::EncodingMode::ConstantQualityEncoding, 88 ConstantBitRateEncoding = QMultimedia::EncodingMode::ConstantBitRateEncoding, 89 AverageBitRateEncoding = QMultimedia::EncodingMode::AverageBitRateEncoding, 90 TwoPassEncoding = QMultimedia::EncodingMode::TwoPassEncoding 91 }; 92 Q_ENUM(EncodingMode) 93 94 explicit CommonEncoderSettings(const QString &codec, 95 CommonEncoderSettings::EncodingQuality quality, 96 const QVariantMap &options); 97 virtual ~CommonEncoderSettings() = default; 98 99 virtual void loadSettings(QSettings *settings); 100 virtual void saveSettings(QSettings *settings); 101 virtual void dumpProperties(const QString &context) const = 0; 102 103 bool operator==(const CommonEncoderSettings &other) const; 104 bool operator!=(const CommonEncoderSettings &other) const; 105 106 static QString toString(CommonEncoderSettings::EncodingQuality quality); 107 static QString toString(CommonEncoderSettings::EncodingMode mode); 108 109 QString codec; 110 CommonEncoderSettings::EncodingQuality quality; 111 QVariantMap options; 112 }; 113 114 class ImageEncoderSettings : public CommonEncoderSettings 115 { 116 Q_GADGET 117 118 Q_PROPERTY(QSize resolution MEMBER resolution) 119 120 public: 121 explicit ImageEncoderSettings(const QImageEncoderSettings &settings = { }); 122 123 void loadSettings(QSettings *settings) override; 124 void saveSettings(QSettings *settings) override; 125 void dumpProperties(const QString &context) const override; 126 127 bool operator==(const ImageEncoderSettings &other) const; 128 bool operator!=(const ImageEncoderSettings &other) const; 129 130 QImageEncoderSettings toQImageEncoderSettings() const; 131 132 QSize resolution; 133 }; 134 135 class AudioEncoderSettings : public CommonEncoderSettings 136 { 137 Q_GADGET 138 139 Q_PROPERTY(CommonEncoderSettings::EncodingMode mode MEMBER mode) 140 Q_PROPERTY(int bitRate MEMBER bitRate) 141 Q_PROPERTY(int sampleRate MEMBER sampleRate) 142 Q_PROPERTY(int channelCount MEMBER channelCount) 143 144 public: 145 explicit AudioEncoderSettings(const QAudioEncoderSettings &settings = { }); 146 147 void loadSettings(QSettings *settings) override; 148 void saveSettings(QSettings *settings) override; 149 void dumpProperties(const QString &context) const override; 150 151 bool operator==(const AudioEncoderSettings &other) const; 152 bool operator!=(const AudioEncoderSettings &other) const; 153 154 QAudioEncoderSettings toQAudioEncoderSettings() const; 155 156 CommonEncoderSettings::EncodingMode mode; 157 int bitRate; 158 int sampleRate; 159 int channelCount; 160 }; 161 162 class VideoEncoderSettings : public CommonEncoderSettings 163 { 164 Q_GADGET 165 166 Q_PROPERTY(CommonEncoderSettings::EncodingMode mode MEMBER mode) 167 Q_PROPERTY(int bitRate MEMBER bitRate) 168 Q_PROPERTY(qreal frameRate MEMBER frameRate) 169 Q_PROPERTY(QSize resolution MEMBER resolution) 170 171 public: 172 explicit VideoEncoderSettings(const QVideoEncoderSettings &settings = { }); 173 174 void loadSettings(QSettings *settings) override; 175 void saveSettings(QSettings *settings) override; 176 void dumpProperties(const QString &context) const override; 177 178 bool operator==(const VideoEncoderSettings &other) const; 179 bool operator!=(const VideoEncoderSettings &other) const; 180 181 QVideoEncoderSettings toQVideoEncoderSettings() const; 182 183 CommonEncoderSettings::EncodingMode mode; 184 int bitRate; 185 qreal frameRate; 186 QSize resolution; 187 }; 188 189 Q_DECLARE_METATYPE(MediaSettings) 190 Q_DECLARE_METATYPE(ImageEncoderSettings) 191 Q_DECLARE_METATYPE(AudioEncoderSettings) 192 Q_DECLARE_METATYPE(VideoEncoderSettings) 193