玉兔远程控制 0.1.0-bate5
载入中...
搜索中...
未找到
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_VideoBitRate(0)
22 , m_VideoFrameRate(0)
23 , m_AudioBitRate(0)
24 , m_AudioSampleRate(-1)
25 , m_AudioChannelCount(1)
26 , m_EndAction(ENDACTION::OpenFile)
27{
28#if HAVE_QT6_MULTIMEDIA
29 QMediaRecorder recorder;
30 m_VideoResolution = recorder.videoResolution();
31 m_VideoBitRate = recorder.videoBitRate();
32 m_AudioBitRate = recorder.audioBitRate();
33 m_AudioChannelCount = recorder.audioChannelCount();
34#endif
35
36 m_szVideoPath = QStandardPaths::writableLocation(QStandardPaths::MoviesLocation);
37 QDir d;
38 if(m_szVideoPath.isEmpty() || !d.exists(m_szVideoPath))
39 m_szVideoPath = RabbitCommon::CDir::Instance()->GetDirUserImage();
40 m_szVideoPath += QDir::separator() + QString("RabbitRemoteControl")
41 + QDir::separator() + QString("Record");
42
43 if(!d.exists(m_szVideoPath))
44 d.mkpath(m_szVideoPath);
45
46 m_szImagePath = QStandardPaths::writableLocation(
47 QStandardPaths::PicturesLocation);
48 if(m_szImagePath.isEmpty() || !d.exists(m_szImagePath))
49 m_szImagePath = RabbitCommon::CDir::Instance()->GetDirUserImage();
50 m_szImagePath += QDir::separator() + QString("RabbitRemoteControl")
51 + QDir::separator() + QString("ScreenShot");
52 if(!d.exists(m_szImagePath))
53 d.mkpath(m_szImagePath);
54}
55
56CParameterRecord& CParameterRecord::operator =(const CParameterRecord& in)
57{
58 if(this == &in)
59 return *this;
60 m_bEnableVideo = in.m_bEnableVideo;
61 m_bEnableAudio = in.m_bEnableAudio;
62 m_szVideoFile = in.m_szVideoFile;
63 m_szImageFile = in.m_szImageFile;
64 m_szVideoPath = in.m_szVideoPath;
65 m_szImagePath = in.m_szImagePath;
66
67#if HAVE_QT6_MULTIMEDIA
68 m_FileFormat = in.m_FileFormat;
69 m_VideoCodec = in.m_VideoCodec;
70 m_AudioCodec = in.m_AudioCodec;
71 m_Quality = in.m_Quality;
72 m_EncodingMode = in.m_EncodingMode;
73#endif
74
75 m_VideoResolution = in.m_VideoResolution;
76 m_VideoBitRate = in.m_VideoBitRate;
77 m_VideoFrameRate = in.m_VideoFrameRate;
78 m_AudioBitRate = in.m_AudioBitRate;
79 m_AudioSampleRate = in.m_AudioSampleRate;
80 m_AudioChannelCount = in.m_AudioChannelCount;
81
82 m_EndAction = in.m_EndAction;
83
84 return *this;
85}
86
87bool CParameterRecord::GetEnableVideo() const
88{
89 return m_bEnableVideo;
90}
91
92void CParameterRecord::SetEnableVideo(bool newEnableVideo)
93{
94 if (m_bEnableVideo == newEnableVideo)
95 return;
96 m_bEnableVideo = newEnableVideo;
97 SetModified(true);
98 emit sigEnableVideoChanged();
99}
100
101bool CParameterRecord::GetEnableAudio() const
102{
103 return m_bEnableAudio;
104}
105
106void CParameterRecord::SetEnableAudio(bool newEnableAudio)
107{
108 if (m_bEnableAudio == newEnableAudio)
109 return;
110 m_bEnableAudio = newEnableAudio;
111 SetModified(true);
112 emit sigEnableAudioChanged();
113}
114
115CParameterRecord::ENDACTION CParameterRecord::GetEndAction() const
116{
117 return m_EndAction;
118}
119
120void CParameterRecord::SetEndAction(ENDACTION newEndAction)
121{
122 if (m_EndAction == newEndAction)
123 return;
124 m_EndAction = newEndAction;
125 SetModified(true);
126 emit sigEndActionChanged();
127}
128
129QString CParameterRecord::GetImagePath() const
130{
131 return m_szImagePath;
132}
133
134void CParameterRecord::SetImagePath(const QString &newImagePath)
135{
136 if (m_szImagePath == newImagePath)
137 return;
138 m_szImagePath = newImagePath;
139 SetModified(true);
140 QDir d(m_szImagePath);
141 if(!d.exists())
142 d.mkpath(m_szImagePath);
143 emit ImagePathChanged();
144}
145
146int CParameterRecord::OnLoad(QSettings &set)
147{
148 set.beginGroup("Record");
149
150 SetEnableVideo(set.value("EnableVideo", GetEnableVideo()).toBool());
151 SetEnableAudio(set.value("EnableAudio", GetEnableAudio()).toBool());
152 SetVideoPath(set.value("Path/Video", GetVideoPath()).toString());
153 SetImagePath(set.value("Path/Image", GetImagePath()).toString());
154#if HAVE_QT6_MULTIMEDIA
155 SetFileFormat((QMediaFormat::FileFormat)
156 set.value("FileFormat", (int)GetFileFormat()).toInt());
157 SetVideoCodec((QMediaFormat::VideoCodec)
158 set.value("Video/Codec", (int)GetVideoCodec()).toInt());
159 SetAudioCodec((QMediaFormat::AudioCodec)
160 set.value("Audio/Codec", (int)GetAudioCodec()).toInt());
161 SetQuality((QMediaRecorder::Quality)
162 set.value("Quality", GetQuality()).toInt());
163 SetEncodingMode((QMediaRecorder::EncodingMode)
164 set.value("EncodingMode", GetEncodingMode()).toInt());
165#endif
166 SetAudioSampleRate(set.value("Audio/SampleRate", GetAudioSampleRate()).toInt());
167 SetVideoFrameRate(set.value("Video/FrameRate", GetVideoFrameRate()).toInt());
168 SetEndAction((ENDACTION)set.value("EndAction", GetEndAction()).toInt());
169 set.endGroup();
170 return 0;
171}
172
173int CParameterRecord::OnSave(QSettings &set)
174{
175 set.beginGroup("Record");
176
177 set.setValue("EnableVideo", GetEnableVideo());
178 set.setValue("EnableAudio", GetEnableAudio());
179 set.setValue("Path/Video", GetVideoPath());
180 set.setValue("Path/Image", GetImagePath());
181#if HAVE_QT6_MULTIMEDIA
182 set.setValue("FileFormat", (int)GetFileFormat());
183 set.setValue("Video/Codec", (int)GetVideoCodec());
184 set.setValue("Audio/Codec", (int)GetAudioCodec());
185 set.setValue("Quality", (int)GetQuality());
186 set.setValue("EncodingMode", GetEncodingMode());
187#endif
188 set.setValue("Audio/SampleRate", GetAudioSampleRate());
189 set.setValue("Video/FrameRate", GetVideoFrameRate());
190 set.setValue("EndAction", (int)GetEndAction());
191 set.endGroup();
192 return 0;
193}
194
195const QString CParameterRecord::GetVideoFile(bool bAuto)
196{
197 if(bAuto)
198 m_szVideoFile = GetVideoPath() + QDir::separator()
199 + QDateTime::currentDateTime().toLocalTime()
200 .toString("yyyy_MM_dd_hh_mm_ss_zzz");
201
202 return m_szVideoFile;
203}
204
205int CParameterRecord::SetVideoFile(const QString &szFile)
206{
207 if(m_szVideoFile == szFile)
208 return 0;
209 SetModified(true);
210 m_szVideoFile = szFile;
211 return 0;
212}
213
214QString CParameterRecord::GetImageFile(bool bAuto)
215{
216 QString szPath = GetImagePath();
217 if(bAuto) {
218 m_szImageFile = szPath
219 + QDir::separator()
220 + QDateTime::currentDateTime().toLocalTime()
221 .toString("yyyy_MM_dd_hh_mm_ss_zzz") + ".png";
222 }
223 return m_szImageFile;
224}
225
226void CParameterRecord::SetImageFile(const QString &newImageFile)
227{
228 if (m_szImageFile == newImageFile)
229 return;
230 m_szImageFile = newImageFile;
231 SetModified(true);
232 emit sigImageFileChanged();
233}
234
235const QString CParameterRecord::GetVideoPath() const
236{
237 return m_szVideoPath;
238}
239
240int CParameterRecord::SetVideoPath(const QString &szPath)
241{
242 if(m_szVideoPath == szPath)
243 return 0;
244 m_szVideoPath = szPath;
245 SetModified(true);
246 QDir d(m_szVideoPath);
247 if(!d.exists())
248 d.mkpath(m_szVideoPath);
249 return 0;
250}
251
252#if HAVE_QT6_MULTIMEDIA
253const QMediaFormat::FileFormat CParameterRecord::GetFileFormat() const
254{
255 return m_FileFormat;
256}
257
258int CParameterRecord::SetFileFormat(const QMediaFormat::FileFormat &f)
259{
260 if(m_FileFormat == f)
261 return 0;
262 m_FileFormat = f;
263 SetModified(true);
264 return 0;
265}
266
267const QMediaFormat::VideoCodec CParameterRecord::GetVideoCodec() const
268{
269 return m_VideoCodec;
270}
271
272int CParameterRecord::SetVideoCodec(QMediaFormat::VideoCodec v)
273{
274 if(m_VideoCodec == v)
275 return 0;
276 m_VideoCodec = v;
277 SetModified(true);
278 return 0;
279}
280
281const QMediaFormat::AudioCodec CParameterRecord::GetAudioCodec() const
282{
283 return m_AudioCodec;
284}
285
286int CParameterRecord::SetAudioCodec(QMediaFormat::AudioCodec a)
287{
288 if(m_AudioCodec == a)
289 return 0;
290 m_AudioCodec = a;
291 SetModified(true);
292 return 0;
293}
294
295QMediaRecorder::Quality CParameterRecord::GetQuality() const
296{
297 return m_Quality;
298}
299
300void CParameterRecord::SetQuality(const QMediaRecorder::Quality &newQuality)
301{
302 if (m_Quality == newQuality)
303 return;
304 m_Quality = newQuality;
305 SetModified(true);
306 emit sigQualityChanged();
307}
308
309QMediaRecorder::EncodingMode CParameterRecord::GetEncodingMode() const
310{
311 return m_EncodingMode;
312}
313
314void CParameterRecord::SetEncodingMode(const QMediaRecorder::EncodingMode &newEncodingMode)
315{
316 if (m_EncodingMode == newEncodingMode)
317 return;
318 m_EncodingMode = newEncodingMode;
319 SetModified(true);
320 emit sigEncodingModeChanged();
321}
322#endif
323
324QSize CParameterRecord::GetVideoResolution()
325{
326 return m_VideoResolution;
327}
328
329void CParameterRecord::SetVideoResolution(QSize size)
330{
331 m_VideoResolution = size;
332}
333
334int CParameterRecord::GetVideoBitRate() const
335{
336 return m_VideoBitRate;
337}
338
339void CParameterRecord::SetVideoBitRate(int bitRate)
340{
341 m_VideoBitRate = bitRate;
342}
343
344qreal CParameterRecord::GetVideoFrameRate() const
345{
346 return m_VideoFrameRate;
347}
348
349void CParameterRecord::SetVideoFrameRate(qreal newVideoFrameRate)
350{
351 if(m_VideoFrameRate == newVideoFrameRate)
352 return;
353 m_VideoFrameRate = newVideoFrameRate;
354 SetModified(true);
355 return;
356}
357
358int CParameterRecord::GetAudioBitRate()
359{
360 return m_AudioBitRate;
361}
362
363void CParameterRecord::SetAudioBitRate(int bitRate)
364{
365 m_AudioBitRate = bitRate;
366}
367
368int CParameterRecord::GetAudioSampleRate() const
369{
370 return m_AudioSampleRate;
371}
372
373void CParameterRecord::SetAudioSampleRate(int newAudioSampleRate)
374{
375 if(m_AudioSampleRate == newAudioSampleRate)
376 return;
377 m_AudioSampleRate = newAudioSampleRate;
378 SetModified(true);
379 return;
380}
381
382int CParameterRecord::GetAudioChannelCount()
383{
384 return m_AudioChannelCount;
385}
386
387void CParameterRecord::SetAudioChannelCount(int count)
388{
389 m_AudioChannelCount = count;
390}
391
392CParameterRecord& operator << (CParameterRecord& para, QMediaRecorder& recorder)
393{
394#if HAVE_QT6_MULTIMEDIA
395 para.SetVideoResolution(recorder.videoResolution());
396 para.SetVideoBitRate(recorder.videoBitRate());
397 para.SetVideoFrameRate(recorder.videoFrameRate());
398 para.SetAudioBitRate(recorder.audioBitRate());
399 para.SetAudioSampleRate(recorder.audioSampleRate());
400 para.SetAudioChannelCount(recorder.audioChannelCount());
401 QMediaFormat format;
402 format = recorder.mediaFormat();
403 para.SetAudioCodec(format.audioCodec());
404 para.SetVideoCodec(format.videoCodec());
405 para.SetFileFormat(format.fileFormat());
406 para.SetQuality(recorder.quality());
407 para.SetEncodingMode(recorder.encodingMode());
408#endif
409 para.SetVideoFile(recorder.outputLocation().toString());
410 return para;
411}
412
413CParameterRecord& operator >> (CParameterRecord& para, QMediaRecorder& recorder)
414{
415#if HAVE_QT6_MULTIMEDIA
416 recorder.setVideoResolution(para.GetVideoResolution());
417 recorder.setVideoBitRate(para.GetVideoBitRate());
418 recorder.setVideoFrameRate(para.GetVideoFrameRate());
419 recorder.setAudioBitRate(para.GetAudioBitRate());
420 recorder.setAudioSampleRate(para.GetAudioSampleRate());
421 recorder.setAudioChannelCount(para.GetAudioChannelCount());
422 QMediaFormat format;
423 format.setAudioCodec(para.GetAudioCodec());
424 format.setVideoCodec(para.GetVideoCodec());
425 format.setFileFormat(para.GetFileFormat());
426 recorder.setMediaFormat(format);
427 recorder.setQuality(para.GetQuality());
428 recorder.setEncodingMode(para.GetEncodingMode());
429#endif
430
431 if(!para.GetVideoFile(true).isEmpty())
432 recorder.setOutputLocation(QUrl::fromLocalFile(para.GetVideoFile(true)));
433 return para;
434}
const QString GetVideoFile(bool bAuto=false)
参数接口
Definition Parameter.h:209
int SetModified(bool bModified=true)
在设置参数时,如果有修改,则调用。