玉兔远程控制 0.0.36
载入中...
搜索中...
未找到
ParameterRecordUI.cpp
1#include <QDir>
2#include <QDateTime>
3#include <QFileDialog>
4#include <QMediaRecorder>
5#include <QLoggingCategory>
6#if HAVE_QT6_MULTIMEDIA
7 #include <QMediaFormat>
8#endif
9#include "ParameterRecordUI.h"
10#include "ui_ParameterRecordUI.h"
11
12static Q_LOGGING_CATEGORY(log, "Parameter.Record.UI")
14 : CParameterUI(parent)
15 , ui(new Ui::CParameterRecordUI)
16 , m_pParameters(nullptr)
17{
18 ui->setupUi(this);
19 setWindowTitle(tr("Record"));
20 setWindowIcon(QIcon::fromTheme("media-record"));
21#if HAVE_QT6_MULTIMEDIA
22 QMediaRecorder recorder;
23 auto formats = recorder.mediaFormat().supportedFileFormats(QMediaFormat::Encode);
24 foreach(auto f, formats) {
25 qDebug(log) << "File format name:" << f;
26 ui->cmbFileFormat->addItem(QMediaFormat::fileFormatName(f), f);
27 }
28 auto video = recorder.mediaFormat().supportedVideoCodecs(QMediaFormat::Encode);
29 foreach (auto v, video) {
30 qDebug(log) << "Video codec:" << v;
31 ui->cmbVideoEncode->addItem(QMediaFormat::videoCodecName(v), (int)v);
32 }
33 ui->dsbFrameRate->setToolTip(tr("A value of 0 indicates the recorder should make an optimal choice based on what is available from the video source and the limitations of the codec.") + "\n" +
34 tr("If record remote desktop, recommended options: 24, 50, 60"));
35 auto audio = recorder.mediaFormat().supportedAudioCodecs(QMediaFormat::Encode);
36 foreach(auto a, audio) {
37 qDebug(log) << "Audio codec:" << a;
38 ui->cmbAudioEncode->addItem(QMediaFormat::audioCodecName(a), (int)a);
39 }
40 ui->sbSampleRate->setToolTip(tr("A value of -1 indicates the recorder should make an optimal choice based on what is available from the audio source, and the limitations of the codec. options: 8kHz, 11.025kHz, 22.05kHz, 16kHz, 37.8kHz, 44.1kHz, 48kHz, 96kHz, 192kHz etc"));
41
42 ui->cmbQuality->addItem("Very height", QMediaRecorder::Quality::VeryHighQuality);
43 ui->cmbQuality->addItem("Height", QMediaRecorder::Quality::HighQuality);
44 ui->cmbQuality->addItem("Normal", QMediaRecorder::Quality::NormalQuality);
45 ui->cmbQuality->addItem("Low", QMediaRecorder::Quality::LowQuality);
46 ui->cmbQuality->addItem("Very low", QMediaRecorder::Quality::VeryLowQuality);
47
48 ui->cmbEncodingMode->addItem("Constant quality", QMediaRecorder::EncodingMode::ConstantQualityEncoding);
49 ui->cmbEncodingMode->setItemData(
50 QMediaRecorder::EncodingMode::ConstantQualityEncoding,
51 tr("Encoding will aim to have a constant quality, adjusting bitrate to fit."),
52 Qt::ToolTipRole);
53 ui->cmbEncodingMode->addItem("Constant bit rate", QMediaRecorder::EncodingMode::ConstantBitRateEncoding);
54 ui->cmbEncodingMode->setItemData(
55 QMediaRecorder::EncodingMode::ConstantBitRateEncoding,
56 tr("Encoding will use a constant bit rate, adjust quality to fit."),
57 Qt::ToolTipRole);
58 ui->cmbEncodingMode->addItem("Average bit rate", QMediaRecorder::EncodingMode::AverageBitRateEncoding);
59 ui->cmbEncodingMode->setItemData(
60 QMediaRecorder::EncodingMode::AverageBitRateEncoding,
61 tr("Encoding will try to keep an average bitrate setting, but will use more or less as needed."),
62 Qt::ToolTipRole);
63 ui->cmbEncodingMode->addItem("Two pass", QMediaRecorder::EncodingMode::TwoPassEncoding);
64 ui->cmbEncodingMode->setItemData(
65 QMediaRecorder::EncodingMode::TwoPassEncoding,
66 tr("The media will first be processed to determine the characteristics, and then processed a second time allocating more bits to the areas that need it."),
67 Qt::ToolTipRole);
68 on_cmbEncodingMode_currentIndexChanged(ui->cmbEncodingMode->currentIndex());
69#endif
70}
71
72CParameterRecordUI::~CParameterRecordUI()
73{
74 delete ui;
75}
76
77int CParameterRecordUI::SetParameter(CParameter *pParameter)
78{
79 m_pParameters = qobject_cast<CParameterRecord*>(pParameter);
80 if(!m_pParameters)
81 return 1;
82 ui->gbVideo->setChecked(m_pParameters->GetEnableVideo());
83 ui->gbAudio->setChecked(m_pParameters->GetEnableAudio());
84 ui->leFolder->setText(m_pParameters->GetPath());
85#if HAVE_QT6_MULTIMEDIA
86 int nIndex = -1;
87 nIndex = ui->cmbFileFormat->findData((int)m_pParameters->GetFileFormat());
88 if(-1 < nIndex)
89 ui->cmbFileFormat->setCurrentIndex(nIndex);
90
91 nIndex = ui->cmbVideoEncode->findData((int)m_pParameters->GetVideoCodec());
92 if(-1 < nIndex)
93 ui->cmbVideoEncode->setCurrentIndex(nIndex);
94
95 nIndex = ui->cmbAudioEncode->findData((int)m_pParameters->GetAudioCodec());
96 if(-1 < nIndex)
97 ui->cmbAudioEncode->setCurrentIndex(nIndex);
98
99 nIndex = ui->cmbQuality->findData((int)m_pParameters->GetQuality());
100 if(-1 < nIndex)
101 ui->cmbQuality->setCurrentIndex(nIndex);
102
103 nIndex = ui->cmbEncodingMode->findData((int)m_pParameters->GetEncodingMode());
104 if(-1 < nIndex)
105 ui->cmbEncodingMode->setCurrentIndex(nIndex);
106#endif
107 ui->dsbFrameRate->setValue(m_pParameters->GetVideoFrameRate());
108 ui->sbSampleRate->setValue(m_pParameters->GetAudioSampleRate());
109
110 switch(m_pParameters->GetEndAction()) {
111 case CParameterRecord::ENDACTION::No:
112 ui->rbNoAction->setChecked(true);
113 break;
114 case CParameterRecord::ENDACTION::OpenFile:
115 ui->rbOpenFile->setChecked(true);
116 break;
117 case CParameterRecord::ENDACTION::OpenFolder:
118 ui->rbOpenFolder->setChecked(true);
119 break;
120 }
121
122 return 0;
123}
124
125int CParameterRecordUI::Accept()
126{
127 m_pParameters->SetEnableVideo(ui->gbVideo->isChecked());
128 m_pParameters->SetEnableAudio(ui->gbAudio->isChecked());
129 m_pParameters->SetPath(ui->leFolder->text());
130 QString szFile = m_pParameters->GetPath()
131 + QDir::separator()
132 + QDateTime::currentDateTime().toLocalTime()
133 .toString("yyyy_MM_dd_hh_mm_ss_zzz");
134 m_pParameters->SetImageFile(szFile + ".png");
135 m_pParameters->SetFile(szFile);
136#if HAVE_QT6_MULTIMEDIA
137 int nData = ui->cmbFileFormat->currentData().toInt();
138 m_pParameters->SetFileFormat((QMediaFormat::FileFormat)nData);
139
140 nData = ui->cmbVideoEncode->currentData().toInt();
141 m_pParameters->SetVideoCodec((QMediaFormat::VideoCodec)nData);
142
143 nData = ui->cmbAudioEncode->currentData().toInt();
144 m_pParameters->SetAudioCodec((QMediaFormat::AudioCodec)nData);
145
146 nData = ui->cmbQuality->currentData().toInt();
147 m_pParameters->SetQuality((QMediaRecorder::Quality)nData);
148
149 nData = ui->cmbEncodingMode->currentData().toInt();
150 m_pParameters->SetEncodingMode((QMediaRecorder::EncodingMode)nData);
151#endif
152 m_pParameters->SetVideoFrameRate(ui->dsbFrameRate->value());
153 m_pParameters->SetAudioSampleRate(ui->sbSampleRate->value());
154
155 if(ui->rbNoAction->isChecked())
156 m_pParameters->SetEndAction(CParameterRecord::ENDACTION::No);
157 else if(ui->rbOpenFile->isChecked())
158 m_pParameters->SetEndAction(CParameterRecord::ENDACTION::OpenFile);
159 else if(ui->rbOpenFolder->isChecked())
160 m_pParameters->SetEndAction(CParameterRecord::ENDACTION::OpenFolder);
161 return 0;
162}
163
164void CParameterRecordUI::on_pbFolder_clicked()
165{
166 QString szPath;
167 szPath = QFileDialog::getExistingDirectory(
168 this, tr("Open path"),
169 m_pParameters->GetPath());
170 if(szPath.isEmpty())
171 return;
172 ui->leFolder->setText(szPath);
173}
174
175void CParameterRecordUI::on_cmbEncodingMode_currentIndexChanged(int index)
176{
177#if HAVE_QT6_MULTIMEDIA
178 if(ui->cmbEncodingMode->itemData(index) == QMediaRecorder::ConstantQualityEncoding) {
179 ui->cmbQuality->setEnabled(true);
180 ui->dsbFrameRate->setEnabled(false);
181 ui->sbSampleRate->setEnabled(false);
182 if(ui->dsbFrameRate->value() != 0)
183 ui->dsbFrameRate->setValue(0);
184 if(ui->sbSampleRate->value() != -1)
185 ui->sbSampleRate->setValue(-1);
186 } else {
187 ui->cmbQuality->setEnabled(false);
188 ui->dsbFrameRate->setEnabled(true);
189 ui->sbSampleRate->setEnabled(true);
190 if(ui->dsbFrameRate->value() == 0)
191 ui->dsbFrameRate->setValue(24);
192 if(ui->sbSampleRate->value() == -1)
193 ui->sbSampleRate->setValue(8000);
194 }
195#endif
196}
197
参数界面接口
Definition ParameterUI.h:15
参数接口
Definition Parameter.h:169