Rabbit Remote Control 0.0.37
Loading...
Searching...
No Matches
ParameterRecord.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QDir>
4#include <QDateTime>
5#include <QStandardPaths>
6
7#include "ParameterRecord.h"
8#include "RabbitCommonDir.h"
9
10CParameterRecord::CParameterRecord(QObject *parent, const QString &szPrefix)
11 : CParameter(parent, szPrefix)
12 , m_bEnableVideo(true)
13 , m_bEnableAudio(true)
14#if HAVE_QT6_MULTIMEDIA
15 , m_FileFormat(QMediaFormat::FileFormat::MPEG4)
16 , m_VideoCodec(QMediaFormat::VideoCodec::H264)
17 , m_AudioCodec(QMediaFormat::AudioCodec::AAC)
18 , m_Quality(QMediaRecorder::NormalQuality)
19 , m_EncodingMode(QMediaRecorder::ConstantQualityEncoding)
20#endif
21 , m_VideoFrameRate(0)
22 , m_AudioSampleRate(-1)
23 , m_EndAction(ENDACTION::OpenFile)
24{
25 m_szVideoPath = QStandardPaths::writableLocation(QStandardPaths::MoviesLocation);
26 QDir d;
27 if(m_szVideoPath.isEmpty() || !d.exists(m_szVideoPath))
28 m_szVideoPath = RabbitCommon::CDir::Instance()->GetDirUserImage();
29 m_szVideoPath += QDir::separator() + QString("RabbitRemoteControl")
30 + QDir::separator() + QString("Record");
31
32 if(!d.exists(m_szVideoPath))
33 d.mkpath(m_szVideoPath);
34
35 m_szImagePath = QStandardPaths::writableLocation(
36 QStandardPaths::PicturesLocation);
37 if(m_szImagePath.isEmpty() || !d.exists(m_szImagePath))
38 m_szImagePath = RabbitCommon::CDir::Instance()->GetDirUserImage();
39 m_szImagePath += QDir::separator() + QString("RabbitRemoteControl")
40 + QDir::separator() + QString("ScreenShot");
41 if(!d.exists(m_szImagePath))
42 d.mkpath(m_szImagePath);
43}
44
45CParameterRecord& CParameterRecord::operator =(const CParameterRecord& in)
46{
47 if(this == &in)
48 return *this;
49 m_bEnableVideo = in.m_bEnableVideo;
50 m_bEnableAudio = in.m_bEnableAudio;
51 m_szVideoFile = in.m_szVideoFile;
52 m_szImageFile = in.m_szImageFile;
53 m_szVideoPath = in.m_szVideoPath;
54 m_szImagePath = in.m_szImagePath;
55
56#if HAVE_QT6_MULTIMEDIA
57 m_FileFormat = in.m_FileFormat;
58 m_VideoCodec = in.m_VideoCodec;
59 m_AudioCodec = in.m_AudioCodec;
60 m_Quality = in.m_Quality;
61 m_EncodingMode = in.m_EncodingMode;
62#endif
63
64 m_VideoFrameRate = in.m_VideoFrameRate;
65 m_AudioSampleRate = in.m_AudioSampleRate;
66
67 m_EndAction = in.m_EndAction;
68
69 return *this;
70}
71
72bool CParameterRecord::GetEnableVideo() const
73{
74 return m_bEnableVideo;
75}
76
77void CParameterRecord::SetEnableVideo(bool newEnableVideo)
78{
79 if (m_bEnableVideo == newEnableVideo)
80 return;
81 m_bEnableVideo = newEnableVideo;
82 SetModified(true);
83 emit sigEnableVideoChanged();
84}
85
86bool CParameterRecord::GetEnableAudio() const
87{
88 return m_bEnableAudio;
89}
90
91void CParameterRecord::SetEnableAudio(bool newEnableAudio)
92{
93 if (m_bEnableAudio == newEnableAudio)
94 return;
95 m_bEnableAudio = newEnableAudio;
96 SetModified(true);
97 emit sigEnableAudioChanged();
98}
99
100CParameterRecord::ENDACTION CParameterRecord::GetEndAction() const
101{
102 return m_EndAction;
103}
104
105void CParameterRecord::SetEndAction(ENDACTION newEndAction)
106{
107 if (m_EndAction == newEndAction)
108 return;
109 m_EndAction = newEndAction;
110 SetModified(true);
111 emit sigEndActionChanged();
112}
113
114QString CParameterRecord::GetImagePath() const
115{
116 return m_szImagePath;
117}
118
119void CParameterRecord::SetImagePath(const QString &newImagePath)
120{
121 if (m_szImagePath == newImagePath)
122 return;
123 m_szImagePath = newImagePath;
124 SetModified(true);
125 QDir d(m_szImagePath);
126 if(!d.exists())
127 d.mkpath(m_szImagePath);
128 emit ImagePathChanged();
129}
130
131int CParameterRecord::OnLoad(QSettings &set)
132{
133 set.beginGroup("Record");
134
135 SetEnableVideo(set.value("EnableVideo", GetEnableVideo()).toBool());
136 SetEnableAudio(set.value("EnableAudio", GetEnableAudio()).toBool());
137 SetVideoPath(set.value("Path/Video", GetVideoPath()).toString());
138 SetImagePath(set.value("Path/Image", GetImagePath()).toString());
139#if HAVE_QT6_MULTIMEDIA
140 SetFileFormat((QMediaFormat::FileFormat)
141 set.value("FileFormat", (int)GetFileFormat()).toInt());
142 SetVideoCodec((QMediaFormat::VideoCodec)
143 set.value("Video/Codec", (int)GetVideoCodec()).toInt());
144 SetAudioCodec((QMediaFormat::AudioCodec)
145 set.value("Audio/Codec", (int)GetAudioCodec()).toInt());
146 SetQuality((QMediaRecorder::Quality)
147 set.value("Quality", GetQuality()).toInt());
148 SetEncodingMode((QMediaRecorder::EncodingMode)
149 set.value("EncodingMode", GetEncodingMode()).toInt());
150#endif
151 SetAudioSampleRate(set.value("Audio/SampleRate", GetAudioSampleRate()).toInt());
152 SetVideoFrameRate(set.value("Video/FrameRate", GetVideoFrameRate()).toInt());
153 SetEndAction((ENDACTION)set.value("EndAction", GetEndAction()).toInt());
154 set.endGroup();
155 return 0;
156}
157
158int CParameterRecord::OnSave(QSettings &set)
159{
160 set.beginGroup("Record");
161
162 set.setValue("EnableVideo", GetEnableVideo());
163 set.setValue("EnableAudio", GetEnableAudio());
164 set.setValue("Path/Video", GetVideoPath());
165 set.setValue("Path/Image", GetImagePath());
166#if HAVE_QT6_MULTIMEDIA
167 set.setValue("FileFormat", (int)GetFileFormat());
168 set.setValue("Video/Codec", (int)GetVideoCodec());
169 set.setValue("Audio/Codec", (int)GetAudioCodec());
170 set.setValue("Quality", (int)GetQuality());
171 set.setValue("EncodingMode", GetEncodingMode());
172#endif
173 set.setValue("Audio/SampleRate", GetAudioSampleRate());
174 set.setValue("Video/FrameRate", GetVideoFrameRate());
175 set.setValue("EndAction", (int)GetEndAction());
176 set.endGroup();
177 return 0;
178}
179
180const QString CParameterRecord::GetVideoFile(bool bAuto)
181{
182 if(bAuto)
183 m_szVideoFile = GetVideoPath() + QDir::separator()
184 + QDateTime::currentDateTime().toLocalTime()
185 .toString("yyyy_MM_dd_hh_mm_ss_zzz");
186
187 return m_szVideoFile;
188}
189
190int CParameterRecord::SetVideoFile(const QString &szFile)
191{
192 if(m_szVideoFile == szFile)
193 return 0;
194 SetModified(true);
195 m_szVideoFile = szFile;
196 return 0;
197}
198
199QString CParameterRecord::GetImageFile(bool bAuto)
200{
201 QString szPath = GetImagePath();
202 if(bAuto) {
203 m_szImageFile = szPath
204 + QDir::separator()
205 + QDateTime::currentDateTime().toLocalTime()
206 .toString("yyyy_MM_dd_hh_mm_ss_zzz") + ".png";
207 }
208 return m_szImageFile;
209}
210
211void CParameterRecord::SetImageFile(const QString &newImageFile)
212{
213 if (m_szImageFile == newImageFile)
214 return;
215 m_szImageFile = newImageFile;
216 SetModified(true);
217 emit sigImageFileChanged();
218}
219
220const QString CParameterRecord::GetVideoPath() const
221{
222 return m_szVideoPath;
223}
224
225int CParameterRecord::SetVideoPath(const QString &szPath)
226{
227 if(m_szVideoPath == szPath)
228 return 0;
229 m_szVideoPath = szPath;
230 SetModified(true);
231 QDir d(m_szVideoPath);
232 if(!d.exists())
233 d.mkpath(m_szVideoPath);
234 return 0;
235}
236
237#if HAVE_QT6_MULTIMEDIA
238const QMediaFormat::FileFormat CParameterRecord::GetFileFormat() const
239{
240 return m_FileFormat;
241}
242
243int CParameterRecord::SetFileFormat(const QMediaFormat::FileFormat &f)
244{
245 if(m_FileFormat == f)
246 return 0;
247 m_FileFormat = f;
248 SetModified(true);
249 return 0;
250}
251
252const QMediaFormat::VideoCodec CParameterRecord::GetVideoCodec() const
253{
254 return m_VideoCodec;
255}
256
257int CParameterRecord::SetVideoCodec(QMediaFormat::VideoCodec v)
258{
259 if(m_VideoCodec == v)
260 return 0;
261 m_VideoCodec = v;
262 SetModified(true);
263 return 0;
264}
265
266const QMediaFormat::AudioCodec CParameterRecord::GetAudioCodec() const
267{
268 return m_AudioCodec;
269}
270
271int CParameterRecord::SetAudioCodec(QMediaFormat::AudioCodec a)
272{
273 if(m_AudioCodec == a)
274 return 0;
275 m_AudioCodec = a;
276 SetModified(true);
277 return 0;
278}
279
280QMediaRecorder::Quality CParameterRecord::GetQuality() const
281{
282 return m_Quality;
283}
284
285void CParameterRecord::SetQuality(const QMediaRecorder::Quality &newQuality)
286{
287 if (m_Quality == newQuality)
288 return;
289 m_Quality = newQuality;
290 SetModified(true);
291 emit sigQualityChanged();
292}
293
294QMediaRecorder::EncodingMode CParameterRecord::GetEncodingMode() const
295{
296 return m_EncodingMode;
297}
298
299void CParameterRecord::SetEncodingMode(const QMediaRecorder::EncodingMode &newEncodingMode)
300{
301 if (m_EncodingMode == newEncodingMode)
302 return;
303 m_EncodingMode = newEncodingMode;
304 SetModified(true);
305 emit sigEncodingModeChanged();
306}
307#endif
308
309qreal CParameterRecord::GetVideoFrameRate() const
310{
311 return m_VideoFrameRate;
312}
313
314void CParameterRecord::SetVideoFrameRate(qreal newVideoFrameRate)
315{
316 if(m_VideoFrameRate == newVideoFrameRate)
317 return;
318 m_VideoFrameRate = newVideoFrameRate;
319 SetModified(true);
320 return;
321}
322
323int CParameterRecord::GetAudioSampleRate() const
324{
325 return m_AudioSampleRate;
326}
327
328void CParameterRecord::SetAudioSampleRate(int newAudioSampleRate)
329{
330 if(m_AudioSampleRate == newAudioSampleRate)
331 return;
332 m_AudioSampleRate = newAudioSampleRate;
333 SetModified(true);
334 return;
335}
336
337CParameterRecord& operator << (CParameterRecord& para, QMediaRecorder& recorder)
338{
339#if HAVE_QT6_MULTIMEDIA
340 para.SetVideoFrameRate(recorder.videoFrameRate());
341 para.SetAudioSampleRate(recorder.audioSampleRate());
342 QMediaFormat format;
343 format = recorder.mediaFormat();
344 para.SetAudioCodec(format.audioCodec());
345 para.SetVideoCodec(format.videoCodec());
346 para.SetFileFormat(format.fileFormat());
347 para.SetQuality(recorder.quality());
348 para.SetEncodingMode(recorder.encodingMode());
349#endif
350 para.SetVideoFile(recorder.outputLocation().toString());
351 return para;
352}
353
354CParameterRecord& operator >> (CParameterRecord& para, QMediaRecorder& recorder)
355{
356#if HAVE_QT6_MULTIMEDIA
357 recorder.setVideoFrameRate(para.GetVideoFrameRate());
358 recorder.setAudioSampleRate(para.GetAudioSampleRate());
359 QMediaFormat format;
360 format.setAudioCodec(para.GetAudioCodec());
361 format.setVideoCodec(para.GetVideoCodec());
362 format.setFileFormat(para.GetFileFormat());
363 recorder.setMediaFormat(format);
364 recorder.setQuality(para.GetQuality());
365 recorder.setEncodingMode(para.GetEncodingMode());
366#endif
367
368 if(!para.GetVideoFile(true).isEmpty())
369 recorder.setOutputLocation(QUrl::fromLocalFile(para.GetVideoFile(true)));
370 return para;
371}
const QString GetVideoFile(bool bAuto=false)
Parameter interface.
Definition Parameter.h:209
int SetModified(bool bModified=true)
When setting parameters, if there is a modification, it is called.