diff options
author | Kai Köhne <kai.koehne@qt.io> | 2022-09-06 16:07:45 +0200 |
---|---|---|
committer | Kai Köhne <kai.koehne@qt.io> | 2022-09-07 11:52:54 +0200 |
commit | 46abf24d5f2945b862a794fe1b85a6b23d44f1ed (patch) | |
tree | c37fcc4abcd103fbeef53503f1649f7b1756e1b1 /examples | |
parent | 2d41f6dfb813fbfda76ec77970e8f2ef88cab8b4 (diff) |
Examples: C++ style cleanup
Run clang-format on all files.
Unify the headers to use the canonical include variants:
single class includes instead of #include <QtGui>.
Finally, using signals and slots instead of Q_SIGNALS and Q_SLOTS.
Pick-to: 6.4
Change-Id: I033dad85a4a25600ec4e3171bede8b98e584cf5d
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
Diffstat (limited to 'examples')
82 files changed, 1374 insertions, 1340 deletions
diff --git a/examples/multimedia/audiodecoder/audiodecoder.cpp b/examples/multimedia/audiodecoder/audiodecoder.cpp index 390933cd4..c8420804b 100644 --- a/examples/multimedia/audiodecoder/audiodecoder.cpp +++ b/examples/multimedia/audiodecoder/audiodecoder.cpp @@ -2,33 +2,28 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "audiodecoder.h" + #include <QFile> + #include <stdio.h> AudioDecoder::AudioDecoder(bool isPlayback, bool isDelete, const QString &targetFileName) - : m_cout(stdout, QIODevice::WriteOnly), - m_targetFilename(targetFileName) + : m_cout(stdout, QIODevice::WriteOnly), m_targetFilename(targetFileName) { m_isPlayback = isPlayback; m_isDelete = isDelete; - connect(&m_decoder, &QAudioDecoder::bufferReady, - this, &AudioDecoder::bufferReady); - connect(&m_decoder, QOverload<QAudioDecoder::Error>::of(&QAudioDecoder::error), - this, QOverload<QAudioDecoder::Error>::of(&AudioDecoder::error)); - connect(&m_decoder, &QAudioDecoder::isDecodingChanged, - this, &AudioDecoder::isDecodingChanged); - connect(&m_decoder, &QAudioDecoder::finished, - this, &AudioDecoder::finished); - connect(&m_decoder, &QAudioDecoder::positionChanged, - this, &AudioDecoder::updateProgress); - connect(&m_decoder, &QAudioDecoder::durationChanged, - this, &AudioDecoder::updateProgress); - - connect(&m_soundEffect, &QSoundEffect::statusChanged, - this, &AudioDecoder::playbackStatusChanged); - connect(&m_soundEffect, &QSoundEffect::playingChanged, - this, &AudioDecoder::playingChanged); + connect(&m_decoder, &QAudioDecoder::bufferReady, this, &AudioDecoder::bufferReady); + connect(&m_decoder, QOverload<QAudioDecoder::Error>::of(&QAudioDecoder::error), this, + QOverload<QAudioDecoder::Error>::of(&AudioDecoder::error)); + connect(&m_decoder, &QAudioDecoder::isDecodingChanged, this, &AudioDecoder::isDecodingChanged); + connect(&m_decoder, &QAudioDecoder::finished, this, &AudioDecoder::finished); + connect(&m_decoder, &QAudioDecoder::positionChanged, this, &AudioDecoder::updateProgress); + connect(&m_decoder, &QAudioDecoder::durationChanged, this, &AudioDecoder::updateProgress); + + connect(&m_soundEffect, &QSoundEffect::statusChanged, this, + &AudioDecoder::playbackStatusChanged); + connect(&m_soundEffect, &QSoundEffect::playingChanged, this, &AudioDecoder::playingChanged); m_progress = -1.0; } @@ -71,7 +66,7 @@ void AudioDecoder::bufferReady() return; if (!m_waveDecoder) { - QIODevice* target = new QFile(m_targetFilename, this); + QIODevice *target = new QFile(m_targetFilename, this); if (!target->open(QIODevice::WriteOnly)) { qWarning() << "target file is not writable"; m_decoder.stop(); @@ -80,8 +75,8 @@ void AudioDecoder::bufferReady() m_waveDecoder = new QWaveDecoder(target, buffer.format()); } - if (!m_waveDecoder || (!m_waveDecoder->isOpen() - && !m_waveDecoder->open(QIODevice::WriteOnly))) { + if (!m_waveDecoder + || (!m_waveDecoder->isOpen() && !m_waveDecoder->open(QIODevice::WriteOnly))) { m_decoder.stop(); return; } diff --git a/examples/multimedia/audiodecoder/audiodecoder.h b/examples/multimedia/audiodecoder/audiodecoder.h index 865e69dd7..5f8d447c0 100644 --- a/examples/multimedia/audiodecoder/audiodecoder.h +++ b/examples/multimedia/audiodecoder/audiodecoder.h @@ -7,7 +7,6 @@ #include <QAudioDecoder> #include <QSoundEffect> #include <QTextStream> -#include <QAudioDecoder> #include <QWaveDecoder> class AudioDecoder : public QObject diff --git a/examples/multimedia/audiodecoder/main.cpp b/examples/multimedia/audiodecoder/main.cpp index fecb4d76e..2a23a7751 100644 --- a/examples/multimedia/audiodecoder/main.cpp +++ b/examples/multimedia/audiodecoder/main.cpp @@ -8,10 +8,10 @@ #include <QFileInfo> #include <QTextStream> #ifdef Q_OS_ANDROID -#include <QApplication> -#include <QFileDialog> -#include <QMessageBox> -#include <qstandardpaths.h> +# include <QApplication> +# include <QFileDialog> +# include <QMessageBox> +# include <QStandardPaths> #endif #include <stdio.h> @@ -34,8 +34,10 @@ int main(int argc, char *argv[]) if (app.arguments().size() < 2) { cout << "Usage: audiodecoder [-p] [-pd] SOURCEFILE [TARGETFILE]\n"; cout << "Set -p option if you want to play output file.\n"; - cout << "Set -pd option if you want to play output file and delete it after successful playback.\n"; - cout << "Default TARGETFILE name is \"out.wav\" in the same directory as the source file.\n"; + cout << "Set -pd option if you want to play output file and delete it after successful " + "playback.\n"; + cout << "Default TARGETFILE name is \"out.wav\" in the same directory as the source " + "file.\n"; return 0; } @@ -64,15 +66,14 @@ int main(int argc, char *argv[]) "which will be decoded and played back to you."; QMessageBox messageBox(QMessageBox::Information, "Audio Decoder", message, QMessageBox::Ok); messageBox.exec(); - sourceFile = QFileInfo(QFileDialog::getOpenFileName(messageBox.parentWidget(), - "Select Audio File")); + sourceFile = + QFileInfo(QFileDialog::getOpenFileName(messageBox.parentWidget(), "Select Audio File")); auto musicPath = QStandardPaths::writableLocation(QStandardPaths::MusicLocation); targetFile = QFileInfo(musicPath.append("/out.wav")); isPlayback = true; #endif AudioDecoder decoder(isPlayback, isDelete, targetFile.absoluteFilePath()); - QObject::connect(&decoder, &AudioDecoder::done, - &app, &QCoreApplication::quit); + QObject::connect(&decoder, &AudioDecoder::done, &app, &QCoreApplication::quit); decoder.setSource(sourceFile.absoluteFilePath()); decoder.start(); if (decoder.getError() != QAudioDecoder::NoError) diff --git a/examples/multimedia/audiodevices/audiodevices.cpp b/examples/multimedia/audiodevices/audiodevices.cpp index e29807601..049185701 100644 --- a/examples/multimedia/audiodevices/audiodevices.cpp +++ b/examples/multimedia/audiodevices/audiodevices.cpp @@ -2,9 +2,10 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "audiodevices.h" -#include <qmediadevices.h> -#include <qcameradevice.h> -#include <qmediaformat.h> + +#include <QCameraDevice> +#include <QMediaDevices> +#include <QMediaFormat> // Utility functions for converting QAudioFormat fields into text @@ -24,18 +25,14 @@ static QString toString(QAudioFormat::SampleFormat sampleFormat) } } -AudioDevicesBase::AudioDevicesBase(QWidget *parent) - : QMainWindow(parent) +AudioDevicesBase::AudioDevicesBase(QWidget *parent) : QMainWindow(parent) { setupUi(this); } AudioDevicesBase::~AudioDevicesBase() = default; - -AudioTest::AudioTest(QWidget *parent) - : AudioDevicesBase(parent), - m_devices(new QMediaDevices(this)) +AudioTest::AudioTest(QWidget *parent) : AudioDevicesBase(parent), m_devices(new QMediaDevices(this)) { m_devices->videoInputs(); qDebug() << "<<<<<<<<<<<<<<<<<<"; @@ -45,7 +42,8 @@ AudioTest::AudioTest(QWidget *parent) connect(deviceBox, QOverload<int>::of(&QComboBox::activated), this, &AudioTest::deviceChanged); connect(sampleRateSpinBox, &QSpinBox::valueChanged, this, &AudioTest::sampleRateChanged); connect(channelsSpinBox, &QSpinBox::valueChanged, this, &AudioTest::channelChanged); - connect(sampleFormatBox, QOverload<int>::of(&QComboBox::activated), this, &AudioTest::sampleFormatChanged); + connect(sampleFormatBox, QOverload<int>::of(&QComboBox::activated), this, + &AudioTest::sampleFormatChanged); connect(populateTableButton, &QPushButton::clicked, this, &AudioTest::populateTable); connect(m_devices, &QMediaDevices::audioInputsChanged, this, &AudioTest::updateAudioDevices); connect(m_devices, &QMediaDevices::audioOutputsChanged, this, &AudioTest::updateAudioDevices); @@ -74,20 +72,19 @@ void AudioTest::test() nearestChannel->setText(QString("%1").arg(nearest.channelCount())); nearestSampleFormat->setText(toString(nearest.sampleFormat())); } - } - else + } else testResult->setText(tr("No Device")); } void AudioTest::updateAudioDevices() { deviceBox->clear(); - const auto devices = m_mode == QAudioDevice::Input ? m_devices->audioInputs() : m_devices->audioOutputs(); - for (auto &deviceInfo: devices) + const auto devices = + m_mode == QAudioDevice::Input ? m_devices->audioInputs() : m_devices->audioOutputs(); + for (auto &deviceInfo : devices) deviceBox->addItem(deviceInfo.description(), QVariant::fromValue(deviceInfo)); } - void AudioTest::modeChanged(int idx) { testResult->clear(); @@ -110,16 +107,16 @@ void AudioTest::deviceChanged(int idx) sampleRateSpinBox->clear(); sampleRateSpinBox->setMinimum(m_deviceInfo.minimumSampleRate()); sampleRateSpinBox->setMaximum(m_deviceInfo.maximumSampleRate()); - int sampleValue = qBound(m_deviceInfo.minimumSampleRate(), 48000, - m_deviceInfo.maximumSampleRate()); + int sampleValue = + qBound(m_deviceInfo.minimumSampleRate(), 48000, m_deviceInfo.maximumSampleRate()); sampleRateSpinBox->setValue(sampleValue); m_settings.setSampleRate(sampleValue); channelsSpinBox->clear(); channelsSpinBox->setMinimum(m_deviceInfo.minimumChannelCount()); channelsSpinBox->setMaximum(m_deviceInfo.maximumChannelCount()); - int channelValue = qBound(m_deviceInfo.minimumChannelCount(), 2, - m_deviceInfo.maximumChannelCount()); + int channelValue = + qBound(m_deviceInfo.minimumChannelCount(), 2, m_deviceInfo.maximumChannelCount()); channelsSpinBox->setValue(channelValue); sampleFormatBox->clear(); @@ -142,12 +139,16 @@ void AudioTest::populateTable() QTableWidgetItem *sampleTypeItem = new QTableWidgetItem(toString(sampleFormat)); allFormatsTable->setItem(row, 2, sampleTypeItem); - QTableWidgetItem *sampleRateItem = new QTableWidgetItem(QString("%1 - %2") - .arg(m_deviceInfo.minimumSampleRate()).arg(m_deviceInfo.maximumSampleRate())); + QTableWidgetItem *sampleRateItem = + new QTableWidgetItem(QString("%1 - %2") + .arg(m_deviceInfo.minimumSampleRate()) + .arg(m_deviceInfo.maximumSampleRate())); allFormatsTable->setItem(row, 0, sampleRateItem); - QTableWidgetItem *channelsItem = new QTableWidgetItem(QString("%1 - %2") - .arg(m_deviceInfo.minimumChannelCount()).arg(m_deviceInfo.maximumChannelCount())); + QTableWidgetItem *channelsItem = + new QTableWidgetItem(QString("%1 - %2") + .arg(m_deviceInfo.minimumChannelCount()) + .arg(m_deviceInfo.maximumChannelCount())); allFormatsTable->setItem(row, 1, channelsItem); ++row; diff --git a/examples/multimedia/audiodevices/audiodevices.h b/examples/multimedia/audiodevices/audiodevices.h index ffc4a00be..ad1de73e1 100644 --- a/examples/multimedia/audiodevices/audiodevices.h +++ b/examples/multimedia/audiodevices/audiodevices.h @@ -4,17 +4,17 @@ #ifndef AUDIODEVICES_H #define AUDIODEVICES_H +#include "ui_audiodevicesbase.h" + #include <QAudioDevice> -#include <QMediaDevices> #include <QMainWindow> +#include <QMediaDevices> #include <QObject> -#include "ui_audiodevicesbase.h" - class AudioDevicesBase : public QMainWindow, public Ui::AudioDevicesBase { public: - AudioDevicesBase(QWidget *parent = 0); + AudioDevicesBase(QWidget *parent = nullptr); virtual ~AudioDevicesBase(); }; @@ -40,8 +40,6 @@ private slots: void sampleFormatChanged(int idx); void test(); void populateTable(); - }; #endif - diff --git a/examples/multimedia/audiodevices/main.cpp b/examples/multimedia/audiodevices/main.cpp index 7dafce831..411f67092 100644 --- a/examples/multimedia/audiodevices/main.cpp +++ b/examples/multimedia/audiodevices/main.cpp @@ -1,10 +1,10 @@ // Copyright (C) 2017 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -#include <QtWidgets> - #include "audiodevices.h" +#include <QApplication> + int main(int argv, char **args) { QApplication app(argv, args); diff --git a/examples/multimedia/audiooutput/audiooutput.cpp b/examples/multimedia/audiooutput/audiooutput.cpp index 334d65e1e..fb99af499 100644 --- a/examples/multimedia/audiooutput/audiooutput.cpp +++ b/examples/multimedia/audiooutput/audiooutput.cpp @@ -7,8 +7,8 @@ #include <QAudioSink> #include <QDebug> #include <QVBoxLayout> -#include <qmath.h> -#include <qendian.h> +#include <QtEndian> +#include <QtMath> Generator::Generator(const QAudioFormat &format, qint64 durationUs, int sampleRate) { @@ -41,9 +41,10 @@ void Generator::generateData(const QAudioFormat &format, qint64 durationUs, int while (length) { // Produces value (-1..1) - const qreal x = qSin(2 * M_PI * sampleRate * qreal(sampleIndex++ % format.sampleRate()) / format.sampleRate()); - for (int i=0; i<format.channelCount(); ++i) { - switch(format.sampleFormat()) { + const qreal x = qSin(2 * M_PI * sampleRate * qreal(sampleIndex++ % format.sampleRate()) + / format.sampleRate()); + for (int i = 0; i < format.channelCount(); ++i) { + switch (format.sampleFormat()) { case QAudioFormat::UInt8: *reinterpret_cast<quint8 *>(ptr) = static_cast<quint8>((1.0 + x) / 2 * 255); break; @@ -51,7 +52,8 @@ void Generator::generateData(const QAudioFormat &format, qint64 durationUs, int *reinterpret_cast<qint16 *>(ptr) = static_cast<qint16>(x * 32767); break; case QAudioFormat::Int32: - *reinterpret_cast<qint32 *>(ptr) = static_cast<qint32>(x * std::numeric_limits<qint32>::max()); + *reinterpret_cast<qint32 *>(ptr) = + static_cast<qint32>(x * std::numeric_limits<qint32>::max()); break; case QAudioFormat::Float: *reinterpret_cast<float *>(ptr) = x; @@ -93,9 +95,7 @@ qint64 Generator::bytesAvailable() const return m_buffer.size() + QIODevice::bytesAvailable(); } -AudioTest::AudioTest() - : m_devices(new QMediaDevices(this)), - m_pushTimer(new QTimer(this)) +AudioTest::AudioTest() : m_devices(new QMediaDevices(this)), m_pushTimer(new QTimer(this)) { initializeWindow(); initializeAudio(m_devices->defaultAudioOutput()); @@ -114,11 +114,12 @@ void AudioTest::initializeWindow() m_deviceBox = new QComboBox(this); const QAudioDevice &defaultDeviceInfo = m_devices->defaultAudioOutput(); m_deviceBox->addItem(defaultDeviceInfo.description(), QVariant::fromValue(defaultDeviceInfo)); - for (auto &deviceInfo: m_devices->audioOutputs()) { + for (auto &deviceInfo : m_devices->audioOutputs()) { if (deviceInfo != defaultDeviceInfo) m_deviceBox->addItem(deviceInfo.description(), QVariant::fromValue(deviceInfo)); } - connect(m_deviceBox, QOverload<int>::of(&QComboBox::activated), this, &AudioTest::deviceChanged); + connect(m_deviceBox, QOverload<int>::of(&QComboBox::activated), this, + &AudioTest::deviceChanged); connect(m_devices, &QMediaDevices::audioOutputsChanged, this, &AudioTest::updateAudioDevices); layout->addWidget(m_deviceBox); @@ -158,8 +159,7 @@ void AudioTest::initializeAudio(const QAudioDevice &deviceInfo) m_audioOutput.reset(new QAudioSink(deviceInfo, format)); m_generator->start(); - qreal initialVolume = QAudio::convertVolume(m_audioOutput->volume(), - QAudio::LinearVolumeScale, + qreal initialVolume = QAudio::convertVolume(m_audioOutput->volume(), QAudio::LinearVolumeScale, QAudio::LogarithmicVolumeScale); m_volumeSlider->setValue(qRound(initialVolume * 100)); toggleMode(); @@ -175,8 +175,7 @@ void AudioTest::deviceChanged(int index) void AudioTest::volumeChanged(int value) { - qreal linearVolume = QAudio::convertVolume(value / qreal(100), - QAudio::LogarithmicVolumeScale, + qreal linearVolume = QAudio::convertVolume(value / qreal(100), QAudio::LogarithmicVolumeScale, QAudio::LinearVolumeScale); m_audioOutput->setVolume(linearVolume); @@ -186,7 +185,7 @@ void AudioTest::updateAudioDevices() { m_deviceBox->clear(); const QList<QAudioDevice> devices = m_devices->audioOutputs(); - for (const QAudioDevice &deviceInfo: devices) + for (const QAudioDevice &deviceInfo : devices) m_deviceBox->addItem(deviceInfo.description(), QVariant::fromValue(deviceInfo)); } @@ -197,11 +196,11 @@ void AudioTest::toggleMode() toggleSuspendResume(); if (m_pullMode) { - //switch to pull mode (QAudioSink pulls from Generator as needed) + // switch to pull mode (QAudioSink pulls from Generator as needed) m_modeButton->setText(tr("Enable push mode")); m_audioOutput->start(m_generator.data()); } else { - //switch to push mode (periodically push to QAudioSink using a timer) + // switch to push mode (periodically push to QAudioSink using a timer) m_modeButton->setText(tr("Enable pull mode")); auto io = m_audioOutput->start(); m_pushTimer->disconnect(); @@ -214,7 +213,7 @@ void AudioTest::toggleMode() QByteArray buffer(len, 0); len = m_generator->read(buffer.data(), len); if (len) - io->write(buffer.data(), len); + io->write(buffer.data(), len); }); m_pushTimer->start(10); @@ -225,7 +224,8 @@ void AudioTest::toggleMode() void AudioTest::toggleSuspendResume() { - if (m_audioOutput->state() == QAudio::SuspendedState || m_audioOutput->state() == QAudio::StoppedState) { + if (m_audioOutput->state() == QAudio::SuspendedState + || m_audioOutput->state() == QAudio::StoppedState) { m_audioOutput->resume(); m_suspendResumeButton->setText(tr("Suspend playback")); } else if (m_audioOutput->state() == QAudio::ActiveState) { @@ -235,4 +235,3 @@ void AudioTest::toggleSuspendResume() // no-op } } - diff --git a/examples/multimedia/audiooutput/audiooutput.h b/examples/multimedia/audiooutput/audiooutput.h index 050af3e93..3a82c57c4 100644 --- a/examples/multimedia/audiooutput/audiooutput.h +++ b/examples/multimedia/audiooutput/audiooutput.h @@ -4,20 +4,20 @@ #ifndef AUDIOOUTPUT_H #define AUDIOOUTPUT_H -#include <math.h> - #include <QAudioSink> #include <QByteArray> #include <QComboBox> #include <QIODevice> #include <QLabel> #include <QMainWindow> +#include <QMediaDevices> #include <QObject> #include <QPushButton> +#include <QScopedPointer> #include <QSlider> #include <QTimer> -#include <QScopedPointer> -#include <QMediaDevices> + +#include <math.h> class Generator : public QIODevice { diff --git a/examples/multimedia/audiooutput/main.cpp b/examples/multimedia/audiooutput/main.cpp index 5d93b275f..8c652f0ff 100644 --- a/examples/multimedia/audiooutput/main.cpp +++ b/examples/multimedia/audiooutput/main.cpp @@ -1,10 +1,10 @@ // Copyright (C) 2017 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -#include <QApplication> - #include "audiooutput.h" +#include <QApplication> + int main(int argc, char *argv[]) { QApplication app(argc, argv); diff --git a/examples/multimedia/audiorecorder/audiolevel.cpp b/examples/multimedia/audiorecorder/audiolevel.cpp index efcd90731..be17ef2e1 100644 --- a/examples/multimedia/audiorecorder/audiolevel.cpp +++ b/examples/multimedia/audiorecorder/audiolevel.cpp @@ -2,10 +2,10 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "audiolevel.h" + #include <QPainter> -AudioLevel::AudioLevel(QWidget *parent) - : QWidget(parent) +AudioLevel::AudioLevel(QWidget *parent) : QWidget(parent) { setMinimumHeight(15); setMaximumHeight(50); diff --git a/examples/multimedia/audiorecorder/audiolevel.h b/examples/multimedia/audiorecorder/audiolevel.h index f2cddd4c1..7a42a8d01 100644 --- a/examples/multimedia/audiorecorder/audiolevel.h +++ b/examples/multimedia/audiorecorder/audiolevel.h @@ -10,7 +10,7 @@ class AudioLevel : public QWidget { Q_OBJECT public: - explicit AudioLevel(QWidget *parent = 0); + explicit AudioLevel(QWidget *parent = nullptr); // Using [0; 1.0] range void setLevel(qreal level); diff --git a/examples/multimedia/audiorecorder/audiorecorder.cpp b/examples/multimedia/audiorecorder/audiorecorder.cpp index 81666f432..e9677f738 100644 --- a/examples/multimedia/audiorecorder/audiorecorder.cpp +++ b/examples/multimedia/audiorecorder/audiorecorder.cpp @@ -3,26 +3,23 @@ #include "audiorecorder.h" #include "audiolevel.h" - #include "ui_audiorecorder.h" -#include <QMediaRecorder> +#include <QAudioBuffer> +#include <QAudioDevice> +#include <QAudioInput> #include <QDir> #include <QFileDialog> +#include <QImageCapture> +#include <QMediaDevices> +#include <QMediaFormat> #include <QMediaRecorder> -#include <QStandardPaths> -#include <qmediadevices.h> -#include <qmediaformat.h> -#include <qaudiodevice.h> -#include <qaudiobuffer.h> -#include <qaudioinput.h> -#include <qimagecapture.h> #include <QMimeType> +#include <QStandardPaths> static QList<qreal> getBufferLevels(const QAudioBuffer &buffer); -AudioRecorder::AudioRecorder() - : ui(new Ui::AudioRecorder) +AudioRecorder::AudioRecorder() : ui(new Ui::AudioRecorder) { ui->setupUi(this); @@ -30,49 +27,54 @@ AudioRecorder::AudioRecorder() m_captureSession.setRecorder(m_audioRecorder); m_captureSession.setAudioInput(new QAudioInput(this)); // ### replace with a monitoring output once we have it. -// m_probe = new QAudioProbe(this); -// connect(m_probe, &QAudioProbe::audioBufferProbed, -// this, &AudioRecorder::processBuffer); -// m_probe->setSource(m_audioRecorder); + // m_probe = new QAudioProbe(this); + // connect(m_probe, &QAudioProbe::audioBufferProbed, + // this, &AudioRecorder::processBuffer); + // m_probe->setSource(m_audioRecorder); - //audio devices + // audio devices ui->audioDeviceBox->addItem(tr("Default"), QVariant(QString())); - for (auto device: QMediaDevices::audioInputs()) { + for (auto device : QMediaDevices::audioInputs()) { auto name = device.description(); ui->audioDeviceBox->addItem(name, QVariant::fromValue(device)); } - //audio codecs and container formats + // audio codecs and container formats updateFormats(); - connect(ui->audioCodecBox, &QComboBox::currentIndexChanged, this, &AudioRecorder::updateFormats); + connect(ui->audioCodecBox, &QComboBox::currentIndexChanged, this, + &AudioRecorder::updateFormats); connect(ui->containerBox, &QComboBox::currentIndexChanged, this, &AudioRecorder::updateFormats); - //sample rate + // sample rate ui->sampleRateBox->setRange(m_captureSession.audioInput()->device().minimumSampleRate(), m_captureSession.audioInput()->device().maximumSampleRate()); - ui->sampleRateBox->setValue(qBound(m_captureSession.audioInput()->device().minimumSampleRate(), 44100, - m_captureSession.audioInput()->device().maximumSampleRate())); + ui->sampleRateBox->setValue( + qBound(m_captureSession.audioInput()->device().minimumSampleRate(), 44100, + m_captureSession.audioInput()->device().maximumSampleRate())); - //channels + // channels ui->channelsBox->addItem(tr("Default"), QVariant(-1)); ui->channelsBox->addItem(QStringLiteral("1"), QVariant(1)); ui->channelsBox->addItem(QStringLiteral("2"), QVariant(2)); ui->channelsBox->addItem(QStringLiteral("4"), QVariant(4)); - //quality + // quality ui->qualitySlider->setRange(0, int(QImageCapture::VeryHighQuality)); ui->qualitySlider->setValue(int(QImageCapture::NormalQuality)); - //bit rates: + // bit rates: ui->bitrateBox->addItem(tr("Default"), QVariant(0)); ui->bitrateBox->addItem(QStringLiteral("32000"), QVariant(32000)); ui->bitrateBox->addItem(QStringLiteral("64000"), QVariant(64000)); ui->bitrateBox->addItem(QStringLiteral("96000"), QVariant(96000)); ui->bitrateBox->addItem(QStringLiteral("128000"), QVariant(128000)); - connect(m_audioRecorder, &QMediaRecorder::durationChanged, this, &AudioRecorder::updateProgress); - connect(m_audioRecorder, &QMediaRecorder::recorderStateChanged, this, &AudioRecorder::onStateChanged); - connect(m_audioRecorder, &QMediaRecorder::errorChanged, this, &AudioRecorder::displayErrorMessage); + connect(m_audioRecorder, &QMediaRecorder::durationChanged, this, + &AudioRecorder::updateProgress); + connect(m_audioRecorder, &QMediaRecorder::recorderStateChanged, this, + &AudioRecorder::onStateChanged); + connect(m_audioRecorder, &QMediaRecorder::errorChanged, this, + &AudioRecorder::displayErrorMessage); } void AudioRecorder::updateProgress(qint64 duration) @@ -124,20 +126,20 @@ static QVariant boxValue(const QComboBox *box) void AudioRecorder::toggleRecord() { if (m_audioRecorder->recorderState() == QMediaRecorder::StoppedState) { - m_captureSession.audioInput()->setDevice(boxValue(ui->audioDeviceBox).value<QAudioDevice>()); + m_captureSession.audioInput()->setDevice( + boxValue(ui->audioDeviceBox).value<QAudioDevice>()); m_audioRecorder->setMediaFormat(selectedMediaFormat()); m_audioRecorder->setAudioSampleRate(ui->sampleRateBox->value()); m_audioRecorder->setAudioBitRate(boxValue(ui->bitrateBox).toInt()); m_audioRecorder->setAudioChannelCount(boxValue(ui->channelsBox).toInt()); m_audioRecorder->setQuality(QMediaRecorder::Quality(ui->qualitySlider->value())); - m_audioRecorder->setEncodingMode(ui->constantQualityRadioButton->isChecked() ? - QMediaRecorder::ConstantQualityEncoding : - QMediaRecorder::ConstantBitRateEncoding); + m_audioRecorder->setEncodingMode(ui->constantQualityRadioButton->isChecked() + ? QMediaRecorder::ConstantQualityEncoding + : QMediaRecorder::ConstantBitRateEncoding); m_audioRecorder->record(); - } - else { + } else { m_audioRecorder->stop(); } } @@ -153,9 +155,9 @@ void AudioRecorder::togglePause() void AudioRecorder::setOutputLocation() { #ifdef Q_OS_ANDROID - QString fileName = QFileDialog::getSaveFileName(this, tr("Save Recording"), - "output." - + selectedMediaFormat().mimeType().preferredSuffix()); + QString fileName = QFileDialog::getSaveFileName( + this, tr("Save Recording"), + "output." + selectedMediaFormat().mimeType().preferredSuffix()); #else QString fileName = QFileDialog::getSaveFileName(); #endif @@ -182,23 +184,27 @@ void AudioRecorder::updateFormats() int currentIndex = 0; ui->audioCodecBox->clear(); - ui->audioCodecBox->addItem(tr("Default audio codec"), QVariant::fromValue(QMediaFormat::AudioCodec::Unspecified)); + ui->audioCodecBox->addItem(tr("Default audio codec"), + QVariant::fromValue(QMediaFormat::AudioCodec::Unspecified)); for (auto codec : format.supportedAudioCodecs(QMediaFormat::Encode)) { if (codec == format.audioCodec()) currentIndex = ui->audioCodecBox->count(); - ui->audioCodecBox->addItem(QMediaFormat::audioCodecDescription(codec), QVariant::fromValue(codec)); + ui->audioCodecBox->addItem(QMediaFormat::audioCodecDescription(codec), + QVariant::fromValue(codec)); } ui->audioCodecBox->setCurrentIndex(currentIndex); currentIndex = 0; ui->containerBox->clear(); - ui->containerBox->addItem(tr("Default file format"), QVariant::fromValue(QMediaFormat::UnspecifiedFormat)); + ui->containerBox->addItem(tr("Default file format"), + QVariant::fromValue(QMediaFormat::UnspecifiedFormat)); for (auto container : format.supportedFileFormats(QMediaFormat::Encode)) { if (container < QMediaFormat::Mpeg4Audio) // Skip video formats continue; if (container == format.fileFormat()) currentIndex = ui->containerBox->count(); - ui->containerBox->addItem(QMediaFormat::fileFormatDescription(container), QVariant::fromValue(container)); + ui->containerBox->addItem(QMediaFormat::fileFormatDescription(container), + QVariant::fromValue(container)); } ui->containerBox->setCurrentIndex(currentIndex); @@ -248,7 +254,7 @@ QList<qreal> getBufferLevels(const QAudioBuffer &buffer) return max_values; } -void AudioRecorder::processBuffer(const QAudioBuffer& buffer) +void AudioRecorder::processBuffer(const QAudioBuffer &buffer) { if (m_audioLevels.count() != buffer.format().channelCount()) { qDeleteAll(m_audioLevels); diff --git a/examples/multimedia/audiorecorder/audiorecorder.h b/examples/multimedia/audiorecorder/audiorecorder.h index 3323e8050..830e4b001 100644 --- a/examples/multimedia/audiorecorder/audiorecorder.h +++ b/examples/multimedia/audiorecorder/audiorecorder.h @@ -5,12 +5,14 @@ #define AUDIORECORDER_H #include <QMainWindow> -#include <QMediaRecorder> #include <QMediaCaptureSession> +#include <QMediaRecorder> #include <QUrl> QT_BEGIN_NAMESPACE -namespace Ui { class AudioRecorder; } +namespace Ui { +class AudioRecorder; +} class QAudioBuffer; QT_END_NAMESPACE @@ -24,7 +26,7 @@ public: AudioRecorder(); public slots: - void processBuffer(const QAudioBuffer&); + void processBuffer(const QAudioBuffer &); private slots: void setOutputLocation(); @@ -45,7 +47,7 @@ private: QMediaCaptureSession m_captureSession; QMediaRecorder *m_audioRecorder = nullptr; - QList<AudioLevel*> m_audioLevels; + QList<AudioLevel *> m_audioLevels; bool m_outputLocationSet = false; bool m_updatingFormats = false; }; diff --git a/examples/multimedia/audiorecorder/main.cpp b/examples/multimedia/audiorecorder/main.cpp index 691b4908c..407729616 100644 --- a/examples/multimedia/audiorecorder/main.cpp +++ b/examples/multimedia/audiorecorder/main.cpp @@ -3,7 +3,7 @@ #include "audiorecorder.h" -#include <QtWidgets> +#include <QApplication> int main(int argc, char *argv[]) { diff --git a/examples/multimedia/audiosource/audiosource.cpp b/examples/multimedia/audiosource/audiosource.cpp index 6a1567b26..545b8c5fa 100644 --- a/examples/multimedia/audiosource/audiosource.cpp +++ b/examples/multimedia/audiosource/audiosource.cpp @@ -3,21 +3,18 @@ #include "audiosource.h" -#include <stdlib.h> -#include <math.h> - +#include <QAudioDevice> +#include <QAudioSource> #include <QDateTime> #include <QDebug> #include <QPainter> #include <QVBoxLayout> -#include <QAudioDevice> -#include <QAudioSource> -#include <qendian.h> +#include <QtEndian> -AudioInfo::AudioInfo(const QAudioFormat &format) - : m_format(format) -{ -} +#include <math.h> +#include <stdlib.h> + +AudioInfo::AudioInfo(const QAudioFormat &format) : m_format(format) { } void AudioInfo::start() { @@ -63,8 +60,7 @@ qint64 AudioInfo::writeData(const char *data, qint64 len) return len; } -RenderArea::RenderArea(QWidget *parent) - : QWidget(parent) +RenderArea::RenderArea(QWidget *parent) : QWidget(parent) { setBackgroundRole(QPalette::Base); setAutoFillBackground(true); @@ -85,8 +81,7 @@ void RenderArea::paintEvent(QPaintEvent * /* event */) return; const int pos = qRound(qreal(frame.width() - 1) * m_level); - painter.fillRect(frame.left() + 1, frame.top() + 1, - pos, frame.height() - 1, Qt::red); + painter.fillRect(frame.left() + 1, frame.top() + 1, pos, frame.height() - 1, Qt::red); } void RenderArea::setLevel(qreal value) @@ -95,9 +90,7 @@ void RenderArea::setLevel(qreal value) update(); } - -InputTest::InputTest() - : m_devices(new QMediaDevices(this)) +InputTest::InputTest() : m_devices(new QMediaDevices(this)) { initializeWindow(); initializeAudio(QMediaDevices::defaultAudioInput()); @@ -113,7 +106,7 @@ void InputTest::initializeWindow() m_deviceBox = new QComboBox(this); const QAudioDevice &defaultDeviceInfo = QMediaDevices::defaultAudioInput(); m_deviceBox->addItem(defaultDeviceInfo.description(), QVariant::fromValue(defaultDeviceInfo)); - for (auto &deviceInfo: m_devices->audioInputs()) { + for (auto &deviceInfo : m_devices->audioInputs()) { if (deviceInfo != defaultDeviceInfo) m_deviceBox->addItem(deviceInfo.description(), QVariant::fromValue(deviceInfo)); } @@ -144,12 +137,10 @@ void InputTest::initializeAudio(const QAudioDevice &deviceInfo) format.setSampleFormat(QAudioFormat::Int16); m_audioInfo.reset(new AudioInfo(format)); - connect(m_audioInfo.data(), &AudioInfo::levelChanged, - m_canvas, &RenderArea::setLevel); + connect(m_audioInfo.data(), &AudioInfo::levelChanged, m_canvas, &RenderArea::setLevel); m_audioInput.reset(new QAudioSource(deviceInfo, format)); - qreal initialVolume = QAudio::convertVolume(m_audioInput->volume(), - QAudio::LinearVolumeScale, + qreal initialVolume = QAudio::convertVolume(m_audioInput->volume(), QAudio::LinearVolumeScale, QAudio::LogarithmicVolumeScale); m_volumeSlider->setValue(qRound(initialVolume * 100)); m_audioInfo->start(); @@ -171,18 +162,17 @@ void InputTest::toggleMode() if (!io) return; - connect(io, &QIODevice::readyRead, - [this, io]() { - static const qint64 BufferSize = 4096; - const qint64 len = qMin(m_audioInput->bytesAvailable(), BufferSize); - - QByteArray buffer(len, 0); - qint64 l = io->read(buffer.data(), len); - if (l > 0) { - const qreal level = m_audioInfo->calculateLevel(buffer.constData(), l); - m_canvas->setLevel(level); - } - }); + connect(io, &QIODevice::readyRead, [this, io]() { + static const qint64 BufferSize = 4096; + const qint64 len = qMin(m_audioInput->bytesAvailable(), BufferSize); + + QByteArray buffer(len, 0); + qint64 l = io->read(buffer.data(), len); + if (l > 0) { + const qreal level = m_audioInfo->calculateLevel(buffer.constData(), l); + m_canvas->setLevel(level); + } + }); } m_pullMode = !m_pullMode; @@ -218,8 +208,7 @@ void InputTest::deviceChanged(int index) void InputTest::sliderChanged(int value) { - qreal linearVolume = QAudio::convertVolume(value / qreal(100), - QAudio::LogarithmicVolumeScale, + qreal linearVolume = QAudio::convertVolume(value / qreal(100), QAudio::LogarithmicVolumeScale, QAudio::LinearVolumeScale); m_audioInput->setVolume(linearVolume); diff --git a/examples/multimedia/audiosource/audiosource.h b/examples/multimedia/audiosource/audiosource.h index fe54f0cbd..05b891fe7 100644 --- a/examples/multimedia/audiosource/audiosource.h +++ b/examples/multimedia/audiosource/audiosource.h @@ -42,7 +42,6 @@ private: qreal m_level = 0.0; // 0.0 <= m_level <= 1.0 }; - class RenderArea : public QWidget { Q_OBJECT @@ -59,7 +58,6 @@ private: qreal m_level = 0; }; - class InputTest : public QWidget { Q_OBJECT diff --git a/examples/multimedia/audiosource/main.cpp b/examples/multimedia/audiosource/main.cpp index 2445a6927..49156d860 100644 --- a/examples/multimedia/audiosource/main.cpp +++ b/examples/multimedia/audiosource/main.cpp @@ -3,7 +3,7 @@ #include "audiosource.h" -#include <QtWidgets/QApplication> +#include <QApplication> int main(int argv, char **args) { diff --git a/examples/multimedia/camera/camera.cpp b/examples/multimedia/camera/camera.cpp index 201e6e985..47f8222ae 100644 --- a/examples/multimedia/camera/camera.cpp +++ b/examples/multimedia/camera/camera.cpp @@ -3,39 +3,41 @@ #include "camera.h" #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) -#include "ui_camera_mobile.h" +# include "ui_camera_mobile.h" #else -#include "ui_camera.h" +# include "ui_camera.h" #endif -#include "videosettings.h" + #include "imagesettings.h" #include "metadatadialog.h" +#include "videosettings.h" -#include <QMediaRecorder> -#include <QVideoWidget> -#include <QCameraDevice> -#include <QMediaMetaData> -#include <QMediaDevices> +#include <QAction> +#include <QActionGroup> #include <QAudioDevice> #include <QAudioInput> - -#include <QMessageBox> -#include <QPalette> +#include <QCameraDevice> +#include <QDir> #include <QImage> - -#include <QtWidgets> +#include <QKeyEvent> +#include <QLineEdit> #include <QMediaDevices> #include <QMediaFormat> +#include <QMediaMetaData> +#include <QMediaRecorder> +#include <QMessageBox> +#include <QPalette> +#include <QTimer> +#include <QVideoWidget> -Camera::Camera() - : ui(new Ui::Camera) +Camera::Camera() : ui(new Ui::Camera) { ui->setupUi(this); m_audioInput.reset(new QAudioInput); m_captureSession.setAudioInput(m_audioInput.get()); - //Camera devices: + // Camera devices: videoDevicesGroup = new QActionGroup(this); videoDevicesGroup->setExclusive(true); @@ -61,16 +63,20 @@ void Camera::setCamera(const QCameraDevice &cameraDevice) if (!m_mediaRecorder) { m_mediaRecorder.reset(new QMediaRecorder); m_captureSession.setRecorder(m_mediaRecorder.data()); - connect(m_mediaRecorder.data(), &QMediaRecorder::recorderStateChanged, this, &Camera::updateRecorderState); + connect(m_mediaRecorder.data(), &QMediaRecorder::recorderStateChanged, this, + &Camera::updateRecorderState); } m_imageCapture = new QImageCapture; m_captureSession.setImageCapture(m_imageCapture); - connect(m_mediaRecorder.data(), &QMediaRecorder::durationChanged, this, &Camera::updateRecordTime); - connect(m_mediaRecorder.data(), &QMediaRecorder::errorChanged, this, &Camera::displayRecorderError); + connect(m_mediaRecorder.data(), &QMediaRecorder::durationChanged, this, + &Camera::updateRecordTime); + connect(m_mediaRecorder.data(), &QMediaRecorder::errorChanged, this, + &Camera::displayRecorderError); - connect(ui->exposureCompensation, &QAbstractSlider::valueChanged, this, &Camera::setExposureCompensation); + connect(ui->exposureCompensation, &QAbstractSlider::valueChanged, this, + &Camera::setExposureCompensation); m_captureSession.setVideoOutput(ui->viewfinder); @@ -92,11 +98,12 @@ void Camera::setCamera(const QCameraDevice &cameraDevice) // we use 29 FPS to compare against as some cameras report 29.97 FPS... QCameraFormat bestFormat; for (const auto &fmt : formats) { - if (bestFormat.maxFrameRate() < 29 && fmt.maxFrameRate() > bestFormat.maxFrameRate()) + if (bestFormat.maxFrameRate() < 29 + && fmt.maxFrameRate() > bestFormat.maxFrameRate()) bestFormat = fmt; - else if (bestFormat.maxFrameRate() == fmt.maxFrameRate() && - bestFormat.resolution().width()*bestFormat.resolution().height() < - fmt.resolution().width()*fmt.resolution().height()) + else if (bestFormat.maxFrameRate() == fmt.maxFrameRate() + && bestFormat.resolution().width() * bestFormat.resolution().height() + < fmt.resolution().width() * fmt.resolution().height()) bestFormat = fmt; } @@ -108,7 +115,7 @@ void Camera::setCamera(const QCameraDevice &cameraDevice) m_camera->start(); } -void Camera::keyPressEvent(QKeyEvent * event) +void Camera::keyPressEvent(QKeyEvent *event) { if (event->isAutoRepeat()) return; @@ -141,16 +148,15 @@ void Camera::keyReleaseEvent(QKeyEvent *event) void Camera::updateRecordTime() { - QString str = QString("Recorded %1 sec").arg(m_mediaRecorder->duration()/1000); + QString str = QString("Recorded %1 sec").arg(m_mediaRecorder->duration() / 1000); ui->statusbar->showMessage(str); } -void Camera::processCapturedImage(int requestId, const QImage& img) +void Camera::processCapturedImage(int requestId, const QImage &img) { Q_UNUSED(requestId); - QImage scaledImage = img.scaled(ui->viewfinder->size(), - Qt::KeepAspectRatio, - Qt::SmoothTransformation); + QImage scaledImage = + img.scaled(ui->viewfinder->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); ui->lastImagePreviewLabel->setPixmap(QPixmap::fromImage(scaledImage)); @@ -213,7 +219,8 @@ void Camera::takeImage() m_imageCapture->captureToFile(); } -void Camera::displayCaptureError(int id, const QImageCapture::Error error, const QString &errorString) +void Camera::displayCaptureError(int id, const QImageCapture::Error error, + const QString &errorString) { Q_UNUSED(id); Q_UNUSED(error); @@ -278,7 +285,7 @@ void Camera::updateRecorderState(QMediaRecorder::RecorderState state) void Camera::setExposureCompensation(int index) { - m_camera->setExposureCompensation(index*0.5); + m_camera->setExposureCompensation(index * 0.5); } void Camera::displayRecorderError() @@ -368,20 +375,16 @@ void Camera::saveMetaData() if (i == QMediaMetaData::CoverArtImage) { QImage coverArt(val); data.insert(key, coverArt); - } - else if (i == QMediaMetaData::ThumbnailImage) { + } else if (i == QMediaMetaData::ThumbnailImage) { QImage thumbnail(val); data.insert(key, thumbnail); - } - else if (i == QMediaMetaData::Date) { + } else if (i == QMediaMetaData::Date) { QDateTime date = QDateTime::fromString(val); data.insert(key, date); - } - else { + } else { data.insert(key, val); } } } m_mediaRecorder->setMetaData(data); } - diff --git a/examples/multimedia/camera/camera.h b/examples/multimedia/camera/camera.h index ae8eb5919..5f083135f 100644 --- a/examples/multimedia/camera/camera.h +++ b/examples/multimedia/camera/camera.h @@ -4,19 +4,21 @@ #ifndef CAMERA_H #define CAMERA_H +#include <QAudioInput> #include <QCamera> #include <QImageCapture> -#include <QMediaRecorder> -#include <QScopedPointer> -#include <QMediaMetaData> #include <QMediaCaptureSession> #include <QMediaDevices> -#include <QAudioInput> +#include <QMediaMetaData> +#include <QMediaRecorder> +#include <QScopedPointer> #include <QMainWindow> QT_BEGIN_NAMESPACE -namespace Ui { class Camera; } +namespace Ui { +class Camera; +} class QActionGroup; QT_END_NAMESPACE @@ -82,7 +84,7 @@ protected: private: Ui::Camera *ui; - QActionGroup *videoDevicesGroup = nullptr; + QActionGroup *videoDevicesGroup = nullptr; QMediaDevices m_devices; QMediaCaptureSession m_captureSession; diff --git a/examples/multimedia/camera/imagesettings.cpp b/examples/multimedia/camera/imagesettings.cpp index a107cc62d..0a6c6a138 100644 --- a/examples/multimedia/camera/imagesettings.cpp +++ b/examples/multimedia/camera/imagesettings.cpp @@ -4,34 +4,35 @@ #include "imagesettings.h" #include "ui_imagesettings.h" +#include <QCamera> #include <QComboBox> #include <QDebug> #include <QImageCapture> -#include <QCamera> #include <QMediaCaptureSession> -ImageSettings::ImageSettings(QImageCapture *imageCapture, QWidget *parent) : - QDialog(parent), - ui(new Ui::ImageSettingsUi), - imagecapture(imageCapture) +ImageSettings::ImageSettings(QImageCapture *imageCapture, QWidget *parent) + : QDialog(parent), ui(new Ui::ImageSettingsUi), imagecapture(imageCapture) { ui->setupUi(this); - //image codecs + // image codecs ui->imageCodecBox->addItem(tr("Default image format"), QVariant(QString())); const auto supportedImageFormats = QImageCapture::supportedFormats(); for (const auto &f : supportedImageFormats) { QString description = QImageCapture::fileFormatDescription(f); - ui->imageCodecBox->addItem(QImageCapture::fileFormatName(f) + ": " + description, QVariant::fromValue(f)); + ui->imageCodecBox->addItem(QImageCapture::fileFormatName(f) + ": " + description, + QVariant::fromValue(f)); } ui->imageQualitySlider->setRange(0, int(QImageCapture::VeryHighQuality)); ui->imageResolutionBox->addItem(tr("Default Resolution")); - const QList<QSize> supportedResolutions = imagecapture->captureSession()->camera()->cameraDevice().photoResolutions(); + const QList<QSize> supportedResolutions = + imagecapture->captureSession()->camera()->cameraDevice().photoResolutions(); for (const QSize &resolution : supportedResolutions) { - ui->imageResolutionBox->addItem(QString("%1x%2").arg(resolution.width()).arg(resolution.height()), - QVariant(resolution)); + ui->imageResolutionBox->addItem( + QString("%1x%2").arg(resolution.width()).arg(resolution.height()), + QVariant(resolution)); } selectComboBoxItem(ui->imageCodecBox, QVariant::fromValue(imagecapture->fileFormat())); diff --git a/examples/multimedia/camera/imagesettings.h b/examples/multimedia/camera/imagesettings.h index 13bd6dc4a..0e2ef8e5b 100644 --- a/examples/multimedia/camera/imagesettings.h +++ b/examples/multimedia/camera/imagesettings.h @@ -9,7 +9,9 @@ QT_BEGIN_NAMESPACE class QComboBox; class QImageCapture; -namespace Ui { class ImageSettingsUi; } +namespace Ui { +class ImageSettingsUi; +} QT_END_NAMESPACE class ImageSettings : public QDialog diff --git a/examples/multimedia/camera/main.cpp b/examples/multimedia/camera/main.cpp index 50b411e4e..13554fc2b 100644 --- a/examples/multimedia/camera/main.cpp +++ b/examples/multimedia/camera/main.cpp @@ -3,7 +3,7 @@ #include "camera.h" -#include <QtWidgets> +#include <QApplication> int main(int argc, char *argv[]) { diff --git a/examples/multimedia/camera/metadatadialog.cpp b/examples/multimedia/camera/metadatadialog.cpp index 096217014..82977de1b 100644 --- a/examples/multimedia/camera/metadatadialog.cpp +++ b/examples/multimedia/camera/metadatadialog.cpp @@ -2,14 +2,21 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "metadatadialog.h" -#include "camera.h" -#include <QtWidgets> +#include <QDialog> +#include <QDialogButtonBox> +#include <QFileDialog> #include <QFormLayout> +#include <QHBoxLayout> +#include <QLineEdit> #include <QMediaMetaData> +#include <QPushButton> +#include <QScrollArea> +#include <QString> +#include <QVBoxLayout> +#include <QWidget> -MetaDataDialog::MetaDataDialog(QWidget *parent) - : QDialog(parent) +MetaDataDialog::MetaDataDialog(QWidget *parent) : QDialog(parent) { QFormLayout *metaDataLayout = new QFormLayout; for (int key = 0; key < QMediaMetaData::NumMetaData; key++) { @@ -17,21 +24,20 @@ MetaDataDialog::MetaDataDialog(QWidget *parent) m_metaDataFields[key] = new QLineEdit; if (key == QMediaMetaData::ThumbnailImage) { QPushButton *openThumbnail = new QPushButton(tr("Open")); - connect(openThumbnail, &QPushButton::clicked, this, &MetaDataDialog::openThumbnailImage); + connect(openThumbnail, &QPushButton::clicked, this, + &MetaDataDialog::openThumbnailImage); QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(m_metaDataFields[key]); layout->addWidget(openThumbnail); metaDataLayout->addRow(label, layout); - } - else if (key == QMediaMetaData::CoverArtImage) { + } else if (key == QMediaMetaData::CoverArtImage) { QPushButton *openCoverArt = new QPushButton(tr("Open")); connect(openCoverArt, &QPushButton::clicked, this, &MetaDataDialog::openCoverArtImage); QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(m_metaDataFields[key]); layout->addWidget(openCoverArt); metaDataLayout->addRow(label, layout); - } - else { + } else { if (key == QMediaMetaData::Title) m_metaDataFields[key]->setText(tr("Qt Camera Example")); else if (key == QMediaMetaData::Author) @@ -52,8 +58,7 @@ MetaDataDialog::MetaDataDialog(QWidget *parent) this->setLayout(dialogLayout); this->layout()->addWidget(scrollArea); - auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok - | QDialogButtonBox::Cancel); + auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); this->layout()->addWidget(buttonBox); this->setWindowTitle(tr("Set Metadata")); @@ -65,16 +70,16 @@ MetaDataDialog::MetaDataDialog(QWidget *parent) void MetaDataDialog::openThumbnailImage() { - QString fileName = QFileDialog::getOpenFileName(this, - tr("Open Image"), QDir::currentPath(), tr("Image Files (*.png *.jpg *.bmp)")); + QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), QDir::currentPath(), + tr("Image Files (*.png *.jpg *.bmp)")); if (!fileName.isEmpty()) m_metaDataFields[QMediaMetaData::ThumbnailImage]->setText(fileName); } void MetaDataDialog::openCoverArtImage() { - QString fileName = QFileDialog::getOpenFileName(this, - tr("Open Image"), QDir::currentPath(), tr("Image Files (*.png *.jpg *.bmp)")); + QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), QDir::currentPath(), + tr("Image Files (*.png *.jpg *.bmp)")); if (!fileName.isEmpty()) m_metaDataFields[QMediaMetaData::CoverArtImage]->setText(fileName); } diff --git a/examples/multimedia/camera/videosettings.cpp b/examples/multimedia/camera/videosettings.cpp index b2c62bafc..d3f59fa2c 100644 --- a/examples/multimedia/camera/videosettings.cpp +++ b/examples/multimedia/camera/videosettings.cpp @@ -3,21 +3,21 @@ #include "videosettings.h" #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) -#include "ui_videosettings_mobile.h" +# include "ui_videosettings_mobile.h" #else -#include "ui_videosettings.h" +# include "ui_videosettings.h" #endif +#include <QAudioDevice> +#include <QAudioInput> +#include <QCamera> +#include <QCameraDevice> #include <QComboBox> -#include <QSpinBox> #include <QDebug> -#include <QMediaRecorder> -#include <QMediaFormat> -#include <QAudioDevice> #include <QMediaCaptureSession> -#include <QCameraDevice> -#include <QCamera> -#include <QAudioInput> +#include <QMediaFormat> +#include <QMediaRecorder> +#include <QSpinBox> QString toFormattedString(const QCameraFormat &cameraFormat) { @@ -41,13 +41,11 @@ QString toFormattedString(const QCameraFormat &cameraFormat) } VideoSettings::VideoSettings(QMediaRecorder *mediaRecorder, QWidget *parent) - : QDialog(parent), - ui(new Ui::VideoSettingsUi), - mediaRecorder(mediaRecorder) + : QDialog(parent), ui(new Ui::VideoSettingsUi), mediaRecorder(mediaRecorder) { ui->setupUi(this); - //sample rate: + // sample rate: auto audioDevice = mediaRecorder->captureSession()->audioInput()->device(); ui->audioSampleRateBox->setRange(audioDevice.minimumSampleRate(), audioDevice.maximumSampleRate()); @@ -77,9 +75,12 @@ VideoSettings::VideoSettings(QMediaRecorder *mediaRecorder, QWidget *parent) connect(ui->fpsSpinBox, &QSpinBox::valueChanged, ui->fpsSlider, &QSlider::setValue); updateFormatsAndCodecs(); - connect(ui->audioCodecBox, &QComboBox::currentIndexChanged, this, &VideoSettings::updateFormatsAndCodecs); - connect(ui->videoCodecBox, &QComboBox::currentIndexChanged, this, &VideoSettings::updateFormatsAndCodecs); - connect(ui->containerFormatBox, &QComboBox::currentIndexChanged, this, &VideoSettings::updateFormatsAndCodecs); + connect(ui->audioCodecBox, &QComboBox::currentIndexChanged, this, + &VideoSettings::updateFormatsAndCodecs); + connect(ui->videoCodecBox, &QComboBox::currentIndexChanged, this, + &VideoSettings::updateFormatsAndCodecs); + connect(ui->containerFormatBox, &QComboBox::currentIndexChanged, this, + &VideoSettings::updateFormatsAndCodecs); ui->qualitySlider->setRange(0, int(QMediaRecorder::VeryHighQuality)); @@ -149,36 +150,41 @@ void VideoSettings::updateFormatsAndCodecs() int currentIndex = 0; ui->audioCodecBox->clear(); - ui->audioCodecBox->addItem(tr("Default audio codec"), QVariant::fromValue(QMediaFormat::AudioCodec::Unspecified)); + ui->audioCodecBox->addItem(tr("Default audio codec"), + QVariant::fromValue(QMediaFormat::AudioCodec::Unspecified)); for (auto codec : format.supportedAudioCodecs(QMediaFormat::Encode)) { if (codec == format.audioCodec()) currentIndex = ui->audioCodecBox->count(); - ui->audioCodecBox->addItem(QMediaFormat::audioCodecDescription(codec), QVariant::fromValue(codec)); + ui->audioCodecBox->addItem(QMediaFormat::audioCodecDescription(codec), + QVariant::fromValue(codec)); } ui->audioCodecBox->setCurrentIndex(currentIndex); currentIndex = 0; ui->videoCodecBox->clear(); - ui->videoCodecBox->addItem(tr("Default video codec"), QVariant::fromValue(QMediaFormat::VideoCodec::Unspecified)); + ui->videoCodecBox->addItem(tr("Default video codec"), + QVariant::fromValue(QMediaFormat::VideoCodec::Unspecified)); for (auto codec : format.supportedVideoCodecs(QMediaFormat::Encode)) { if (codec == format.videoCodec()) currentIndex = ui->videoCodecBox->count(); - ui->videoCodecBox->addItem(QMediaFormat::videoCodecDescription(codec), QVariant::fromValue(codec)); + ui->videoCodecBox->addItem(QMediaFormat::videoCodecDescription(codec), + QVariant::fromValue(codec)); } ui->videoCodecBox->setCurrentIndex(currentIndex); currentIndex = 0; ui->containerFormatBox->clear(); - ui->containerFormatBox->addItem(tr("Default file format"), QVariant::fromValue(QMediaFormat::UnspecifiedFormat)); + ui->containerFormatBox->addItem(tr("Default file format"), + QVariant::fromValue(QMediaFormat::UnspecifiedFormat)); for (auto container : format.supportedFileFormats(QMediaFormat::Encode)) { if (container == format.fileFormat()) currentIndex = ui->containerFormatBox->count(); - ui->containerFormatBox->addItem(QMediaFormat::fileFormatDescription(container), QVariant::fromValue(container)); + ui->containerFormatBox->addItem(QMediaFormat::fileFormatDescription(container), + QVariant::fromValue(container)); } ui->containerFormatBox->setCurrentIndex(currentIndex); m_updatingFormats = false; - } QVariant VideoSettings::boxValue(const QComboBox *box) const diff --git a/examples/multimedia/camera/videosettings.h b/examples/multimedia/camera/videosettings.h index 2f356d90f..a9e7b4c0a 100644 --- a/examples/multimedia/camera/videosettings.h +++ b/examples/multimedia/camera/videosettings.h @@ -9,7 +9,9 @@ QT_BEGIN_NAMESPACE class QComboBox; class QMediaRecorder; -namespace Ui { class VideoSettingsUi; } +namespace Ui { +class VideoSettingsUi; +} QT_END_NAMESPACE class VideoSettings : public QDialog @@ -27,7 +29,7 @@ protected: void changeEvent(QEvent *e) override; private: - QVariant boxValue(const QComboBox*) const; + QVariant boxValue(const QComboBox *) const; void selectComboBoxItem(QComboBox *box, const QVariant &value); Ui::VideoSettingsUi *ui; diff --git a/examples/multimedia/declarative-camera/qmlcamera.cpp b/examples/multimedia/declarative-camera/qmlcamera.cpp index 46e333a68..347b7684f 100644 --- a/examples/multimedia/declarative-camera/qmlcamera.cpp +++ b/examples/multimedia/declarative-camera/qmlcamera.cpp @@ -2,18 +2,17 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include <QGuiApplication> -#include <QQuickView> #include <QQmlEngine> +#include <QQuickView> -int main(int argc, char* argv[]) +int main(int argc, char *argv[]) { - QGuiApplication app(argc,argv); + QGuiApplication app(argc, argv); QQuickView view; view.setResizeMode(QQuickView::SizeRootObjectToView); // Qt.quit() called in embedded .qml by default only emits // quit() signal, so do this (optionally use Qt.exit()). - QObject::connect(view.engine(), &QQmlEngine::quit, - qApp, &QGuiApplication::quit); + QObject::connect(view.engine(), &QQmlEngine::quit, qApp, &QGuiApplication::quit); view.setSource(QUrl("qrc:///declarative-camera.qml")); view.resize(800, 480); view.show(); diff --git a/examples/multimedia/devices/main.cpp b/examples/multimedia/devices/main.cpp index 7a1854ede..6c7f46a0b 100644 --- a/examples/multimedia/devices/main.cpp +++ b/examples/multimedia/devices/main.cpp @@ -1,13 +1,12 @@ // Copyright (C) 2020 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -#include <QTextStream> -#include <QString> -#include <QAudioFormat> - #include <QAudioDevice> +#include <QAudioFormat> #include <QCameraDevice> -#include <qmediadevices.h> +#include <QMediaDevices> +#include <QString> +#include <QTextStream> #include <stdio.h> @@ -30,12 +29,12 @@ QString formatToString(QAudioFormat::SampleFormat sampleFormat) QString positionToString(QCameraDevice::Position position) { switch (position) { - case QCameraDevice::BackFace: - return "BackFace"; - case QCameraDevice::FrontFace: - return "FrontFace"; - default: - return "Unspecified"; + case QCameraDevice::BackFace: + return "BackFace"; + case QCameraDevice::FrontFace: + return "FrontFace"; + default: + return "Unspecified"; } } @@ -48,26 +47,28 @@ void printAudioDeviceInfo(QTextStream &out, const QAudioDevice &deviceInfo) out.setFieldAlignment(QTextStream::AlignLeft); out << "Name: " << deviceInfo.description() << qSetFieldWidth(0) << Qt::endl; out.setFieldWidth(30); - out << "Id: " << QString::fromLatin1(deviceInfo.id()) << qSetFieldWidth(0) << Qt::endl; + out << "Id: " << QString::fromLatin1(deviceInfo.id()) << qSetFieldWidth(0) << Qt::endl; out.setFieldWidth(30); - out << "Default: " << isDefault << qSetFieldWidth(0) << Qt::endl; + out << "Default: " << isDefault << qSetFieldWidth(0) << Qt::endl; out.setFieldWidth(30); - out << "Preferred Format: " << formatToString(preferredFormat.sampleFormat()) << qSetFieldWidth(0) << Qt::endl; + out << "Preferred Format: " << formatToString(preferredFormat.sampleFormat()) + << qSetFieldWidth(0) << Qt::endl; out.setFieldWidth(30); out << "Preferred Rate: " << preferredFormat.sampleRate() << qSetFieldWidth(0) << Qt::endl; out.setFieldWidth(30); - out << "Preferred Channels: " << preferredFormat.channelCount() << qSetFieldWidth(0) << Qt::endl; + out << "Preferred Channels: " << preferredFormat.channelCount() << qSetFieldWidth(0) + << Qt::endl; out.setFieldWidth(30); out << "Supported Formats: "; - for (auto &format: supportedFormats) + for (auto &format : supportedFormats) out << qSetFieldWidth(0) << formatToString(format) << " "; out << Qt::endl; out.setFieldWidth(30); out << "Supported Rates: " << qSetFieldWidth(0) << deviceInfo.minimumSampleRate() << " - " - << deviceInfo.maximumSampleRate() << Qt::endl; + << deviceInfo.maximumSampleRate() << Qt::endl; out.setFieldWidth(30); out << "Supported Channels: " << qSetFieldWidth(0) << deviceInfo.minimumChannelCount() << " - " - << deviceInfo.maximumChannelCount() << Qt::endl; + << deviceInfo.maximumChannelCount() << Qt::endl; out << Qt::endl; } @@ -83,33 +84,33 @@ void printVideoDeviceInfo(QTextStream &out, const QCameraDevice &cameraDevice) out.setFieldAlignment(QTextStream::AlignLeft); out << "Name: " << cameraDevice.description() << qSetFieldWidth(0) << Qt::endl; out.setFieldWidth(30); - out << "Id: " << QString::fromLatin1(cameraDevice.id()) << qSetFieldWidth(0) << Qt::endl; + out << "Id: " << QString::fromLatin1(cameraDevice.id()) << qSetFieldWidth(0) << Qt::endl; out.setFieldWidth(30); - out << "Default: " << isDefault << qSetFieldWidth(0) << Qt::endl; + out << "Default: " << isDefault << qSetFieldWidth(0) << Qt::endl; out.setFieldWidth(30); out << "Position: " << positionToString(position) << qSetFieldWidth(0) << Qt::endl; out.setFieldWidth(30); out << "Photo Resolutions: "; - for (auto &resolution: photoResolutions) { + for (auto &resolution : photoResolutions) { QString s = QString("%1x%2").arg(resolution.width()).arg(resolution.height()); out << qSetFieldWidth(0) << s << ", "; } out.setFieldWidth(10); out << Qt::endl << Qt::endl; out << "Supported Video Formats: " << qSetFieldWidth(0) << Qt::endl; - for (auto &format: videoFormats) { + for (auto &format : videoFormats) { out.setFieldWidth(30); - QString s = QString("%1x%2").arg(format.resolution().width()).arg(format.resolution().height()); + QString s = + QString("%1x%2").arg(format.resolution().width()).arg(format.resolution().height()); out << "Resolution: " << s << qSetFieldWidth(0) << Qt::endl; out.setFieldWidth(30); - out << "Frame Rate: " << qSetFieldWidth(0) << "Min:" << format.minFrameRate() << " Max:" << format.maxFrameRate() << Qt::endl; + out << "Frame Rate: " << qSetFieldWidth(0) << "Min:" << format.minFrameRate() + << " Max:" << format.maxFrameRate() << Qt::endl; } out << Qt::endl; - } - int main(int argc, char *argv[]) { Q_UNUSED(argc); @@ -122,10 +123,10 @@ int main(int argc, char *argv[]) out << "Audio devices detected: " << Qt::endl; out << Qt::endl << "Input" << Qt::endl; - for (auto &deviceInfo: audioInputDevices) + for (auto &deviceInfo : audioInputDevices) printAudioDeviceInfo(out, deviceInfo); out << Qt::endl << "Output" << Qt::endl; - for (auto &deviceInfo: audioOutputDevices) + for (auto &deviceInfo : audioOutputDevices) printAudioDeviceInfo(out, deviceInfo); out << Qt::endl << "Video devices detected: " << Qt::endl; diff --git a/examples/multimedia/player/main.cpp b/examples/multimedia/player/main.cpp index befe1d561..3f9993570 100644 --- a/examples/multimedia/player/main.cpp +++ b/examples/multimedia/player/main.cpp @@ -4,8 +4,8 @@ #include "player.h" #include <QApplication> -#include <QCommandLineParser> #include <QCommandLineOption> +#include <QCommandLineParser> #include <QDir> #include <QUrl> @@ -27,7 +27,7 @@ int main(int argc, char *argv[]) if (!parser.positionalArguments().isEmpty() && player.isPlayerAvailable()) { QList<QUrl> urls; - for (auto &a: parser.positionalArguments()) + for (auto &a : parser.positionalArguments()) urls.append(QUrl::fromUserInput(a, QDir::currentPath())); player.addToPlaylist(urls); } diff --git a/examples/multimedia/player/player.cpp b/examples/multimedia/player/player.cpp index 22146d7e9..5028cead1 100644 --- a/examples/multimedia/player/player.cpp +++ b/examples/multimedia/player/player.cpp @@ -2,45 +2,59 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "player.h" - #include "playercontrols.h" #include "playlistmodel.h" #include "qmediaplaylist.h" #include "videowidget.h" -#include <QMediaMetaData> -#include <QMediaDevices> +#include <QApplication> #include <QAudioDevice> #include <QAudioOutput> +#include <QBoxLayout> +#include <QComboBox> +#include <QDir> +#include <QFileDialog> +#include <QHBoxLayout> +#include <QLabel> +#include <QLineEdit> +#include <QListView> +#include <QMediaDevices> #include <QMediaFormat> -#include <QtWidgets> - -Player::Player(QWidget *parent) - : QWidget(parent) +#include <QMediaMetaData> +#include <QMessageBox> +#include <QPushButton> +#include <QSlider> +#include <QStandardPaths> +#include <QStatusBar> +#include <QVBoxLayout> + +Player::Player(QWidget *parent) : QWidget(parent) { -//! [create-objs] + //! [create-objs] m_player = new QMediaPlayer(this); m_audioOutput = new QAudioOutput(this); m_player->setAudioOutput(m_audioOutput); -//! [create-objs] + //! [create-objs] connect(m_player, &QMediaPlayer::durationChanged, this, &Player::durationChanged); connect(m_player, &QMediaPlayer::positionChanged, this, &Player::positionChanged); - connect(m_player, QOverload<>::of(&QMediaPlayer::metaDataChanged), this, &Player::metaDataChanged); + connect(m_player, QOverload<>::of(&QMediaPlayer::metaDataChanged), this, + &Player::metaDataChanged); connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &Player::statusChanged); connect(m_player, &QMediaPlayer::bufferProgressChanged, this, &Player::bufferingProgress); connect(m_player, &QMediaPlayer::hasVideoChanged, this, &Player::videoAvailableChanged); connect(m_player, &QMediaPlayer::errorChanged, this, &Player::displayErrorMessage); connect(m_player, &QMediaPlayer::tracksChanged, this, &Player::tracksChanged); -//! [2] + //! [2] m_videoWidget = new VideoWidget(this); m_videoWidget->resize(1280, 720); m_player->setVideoOutput(m_videoWidget); m_playlistModel = new PlaylistModel(this); m_playlist = m_playlistModel->playlist(); -//! [2] - connect(m_playlist, &QMediaPlaylist::currentIndexChanged, this, &Player::playlistPositionChanged); + //! [2] + connect(m_playlist, &QMediaPlaylist::currentIndexChanged, this, + &Player::playlistPositionChanged); // player layout QBoxLayout *layout = new QVBoxLayout(this); @@ -108,7 +122,7 @@ Player::Player(QWidget *parent) #if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) m_audioOutputCombo = new QComboBox(this); m_audioOutputCombo->addItem(QString::fromUtf8("Default"), QVariant::fromValue(QAudioDevice())); - for (auto &deviceInfo: QMediaDevices::audioOutputs()) + for (auto &deviceInfo : QMediaDevices::audioOutputs()) m_audioOutputCombo->addItem(deviceInfo.description(), QVariant::fromValue(deviceInfo)); connect(m_audioOutputCombo, QOverload<int>::of(&QComboBox::activated), this, &Player::audioOutputChanged); @@ -180,7 +194,7 @@ Player::Player(QWidget *parent) if (!isPlayerAvailable()) { QMessageBox::warning(this, tr("Service not available"), - tr("The QMediaPlayer object does not have a valid service.\n"\ + tr("The QMediaPlayer object does not have a valid service.\n" "Please check the media service plugins are installed.")); controls->setEnabled(false); @@ -203,7 +217,8 @@ void Player::open() QFileDialog fileDialog(this); fileDialog.setAcceptMode(QFileDialog::AcceptOpen); fileDialog.setWindowTitle(tr("Open Files")); - fileDialog.setDirectory(QStandardPaths::standardLocations(QStandardPaths::MoviesLocation).value(0, QDir::homePath())); + fileDialog.setDirectory(QStandardPaths::standardLocations(QStandardPaths::MoviesLocation) + .value(0, QDir::homePath())); if (fileDialog.exec() == QDialog::Accepted) addToPlaylist(fileDialog.selectedUrls()); } @@ -213,13 +228,14 @@ static bool isPlaylist(const QUrl &url) // Check for ".m3u" playlists. if (!url.isLocalFile()) return false; const QFileInfo fileInfo(url.toLocalFile()); - return fileInfo.exists() && !fileInfo.suffix().compare(QLatin1String("m3u"), Qt::CaseInsensitive); + return fileInfo.exists() + && !fileInfo.suffix().compare(QLatin1String("m3u"), Qt::CaseInsensitive); } void Player::addToPlaylist(const QList<QUrl> &urls) { const int previousMediaCount = m_playlist->mediaCount(); - for (auto &url: urls) { + for (auto &url : urls) { if (isPlaylist(url)) m_playlist->load(url); else @@ -251,14 +267,14 @@ void Player::metaDataChanged() { auto metaData = m_player->metaData(); setTrackInfo(QString("%1 - %2") - .arg(metaData.value(QMediaMetaData::AlbumArtist).toString()) - .arg(metaData.value(QMediaMetaData::Title).toString())); + .arg(metaData.value(QMediaMetaData::AlbumArtist).toString()) + .arg(metaData.value(QMediaMetaData::Title).toString())); #if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) for (int i = 0; i < QMediaMetaData::NumMetaData; i++) { - if (QLineEdit* field = qobject_cast<QLineEdit*>(m_metaDataFields[i])) + if (QLineEdit *field = qobject_cast<QLineEdit *>(m_metaDataFields[i])) field->clear(); - else if (QLabel* label = qobject_cast<QLabel*>(m_metaDataFields[i])) + else if (QLabel *label = qobject_cast<QLabel *>(m_metaDataFields[i])) label->clear(); m_metaDataFields[i]->setDisabled(true); m_metaDataLabels[i]->setDisabled(true); @@ -268,17 +284,17 @@ void Player::metaDataChanged() int i = int(key); if (key == QMediaMetaData::CoverArtImage) { QVariant v = metaData.value(key); - if (QLabel *cover = qobject_cast<QLabel*>(m_metaDataFields[key])) { + if (QLabel *cover = qobject_cast<QLabel *>(m_metaDataFields[key])) { QImage coverImage = v.value<QImage>(); cover->setPixmap(QPixmap::fromImage(coverImage)); } } else if (key == QMediaMetaData::ThumbnailImage) { QVariant v = metaData.value(key); - if (QLabel *thumbnail = qobject_cast<QLabel*>(m_metaDataFields[key])) { + if (QLabel *thumbnail = qobject_cast<QLabel *>(m_metaDataFields[key])) { QImage thumbnailImage = v.value<QImage>(); thumbnail->setPixmap(QPixmap::fromImage(thumbnailImage)); } - } else if (QLineEdit *field = qobject_cast<QLineEdit*>(m_metaDataFields[key])) { + } else if (QLineEdit *field = qobject_cast<QLineEdit *>(m_metaDataFields[key])) { QString stringValue = metaData.stringValue(key); field->setText(stringValue); } @@ -296,7 +312,7 @@ QString Player::trackName(const QMediaMetaData &metaData, int index) if (title.isEmpty()) { if (lang == QLocale::Language::AnyLanguage) - name = tr("Track %1").arg(index+1); + name = tr("Track %1").arg(index + 1); else name = QLocale::languageToString(lang); } else { @@ -378,10 +394,10 @@ void Player::statusChanged(QMediaPlayer::MediaStatus status) break; case QMediaPlayer::BufferingMedia: case QMediaPlayer::BufferedMedia: - setStatusInfo(tr("Buffering %1%").arg(qRound(m_player->bufferProgress()*100.))); + setStatusInfo(tr("Buffering %1%").arg(qRound(m_player->bufferProgress() * 100.))); break; case QMediaPlayer::StalledMedia: - setStatusInfo(tr("Stalled %1%").arg(qRound(m_player->bufferProgress()*100.))); + setStatusInfo(tr("Stalled %1%").arg(qRound(m_player->bufferProgress() * 100.))); break; case QMediaPlayer::EndOfMedia: QApplication::alert(this); @@ -396,9 +412,8 @@ void Player::statusChanged(QMediaPlayer::MediaStatus status) void Player::handleCursor(QMediaPlayer::MediaStatus status) { #ifndef QT_NO_CURSOR - if (status == QMediaPlayer::LoadingMedia || - status == QMediaPlayer::BufferingMedia || - status == QMediaPlayer::StalledMedia) + if (status == QMediaPlayer::LoadingMedia || status == QMediaPlayer::BufferingMedia + || status == QMediaPlayer::StalledMedia) setCursor(QCursor(Qt::BusyCursor)); else unsetCursor(); @@ -408,20 +423,24 @@ void Player::handleCursor(QMediaPlayer::MediaStatus status) void Player::bufferingProgress(float progress) { if (m_player->mediaStatus() == QMediaPlayer::StalledMedia) - setStatusInfo(tr("Stalled %1%").arg(qRound(progress*100.))); + setStatusInfo(tr("Stalled %1%").arg(qRound(progress * 100.))); else - setStatusInfo(tr("Buffering %1%").arg(qRound(progress*100.))); + setStatusInfo(tr("Buffering %1%").arg(qRound(progress * 100.))); } void Player::videoAvailableChanged(bool available) { if (!available) { - disconnect(m_fullScreenButton, &QPushButton::clicked, m_videoWidget, &QVideoWidget::setFullScreen); - disconnect(m_videoWidget, &QVideoWidget::fullScreenChanged, m_fullScreenButton, &QPushButton::setChecked); + disconnect(m_fullScreenButton, &QPushButton::clicked, m_videoWidget, + &QVideoWidget::setFullScreen); + disconnect(m_videoWidget, &QVideoWidget::fullScreenChanged, m_fullScreenButton, + &QPushButton::setChecked); m_videoWidget->setFullScreen(false); } else { - connect(m_fullScreenButton, &QPushButton::clicked, m_videoWidget, &QVideoWidget::setFullScreen); - connect(m_videoWidget, &QVideoWidget::fullScreenChanged, m_fullScreenButton, &QPushButton::setChecked); + connect(m_fullScreenButton, &QPushButton::clicked, m_videoWidget, + &QVideoWidget::setFullScreen); + connect(m_videoWidget, &QVideoWidget::fullScreenChanged, m_fullScreenButton, + &QPushButton::setChecked); if (m_fullScreenButton->isChecked()) m_videoWidget->setFullScreen(true); @@ -487,10 +506,10 @@ void Player::updateDurationInfo(qint64 currentInfo) { QString tStr; if (currentInfo || m_duration) { - QTime currentTime((currentInfo / 3600) % 60, (currentInfo / 60) % 60, - currentInfo % 60, (currentInfo * 1000) % 1000); - QTime totalTime((m_duration / 3600) % 60, (m_duration / 60) % 60, - m_duration % 60, (m_duration * 1000) % 1000); + QTime currentTime((currentInfo / 3600) % 60, (currentInfo / 60) % 60, currentInfo % 60, + (currentInfo * 1000) % 1000); + QTime totalTime((m_duration / 3600) % 60, (m_duration / 60) % 60, m_duration % 60, + (m_duration * 1000) % 1000); QString format = "mm:ss"; if (m_duration > 3600) format = "hh:mm:ss"; diff --git a/examples/multimedia/player/player.h b/examples/multimedia/player/player.h index 1d328d307..66b1b8fab 100644 --- a/examples/multimedia/player/player.h +++ b/examples/multimedia/player/player.h @@ -6,9 +6,9 @@ #include "qmediaplaylist.h" -#include <QWidget> -#include <QMediaPlayer> #include <QMediaMetaData> +#include <QMediaPlayer> +#include <QWidget> QT_BEGIN_NAMESPACE class QAbstractItemView; diff --git a/examples/multimedia/player/playercontrols.cpp b/examples/multimedia/player/playercontrols.cpp index 0a6827326..ff4ec3c0d 100644 --- a/examples/multimedia/player/playercontrols.cpp +++ b/examples/multimedia/player/playercontrols.cpp @@ -3,15 +3,14 @@ #include "playercontrols.h" +#include <QAudio> #include <QBoxLayout> +#include <QComboBox> #include <QSlider> #include <QStyle> #include <QToolButton> -#include <QComboBox> -#include <QAudio> -PlayerControls::PlayerControls(QWidget *parent) - : QWidget(parent) +PlayerControls::PlayerControls(QWidget *parent) : QWidget(parent) { m_playButton = new QToolButton(this); m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); @@ -42,7 +41,8 @@ PlayerControls::PlayerControls(QWidget *parent) m_volumeSlider = new QSlider(Qt::Horizontal, this); m_volumeSlider->setRange(0, 100); - connect(m_volumeSlider, &QSlider::valueChanged, this, &PlayerControls::onVolumeSliderValueChanged); + connect(m_volumeSlider, &QSlider::valueChanged, this, + &PlayerControls::onVolumeSliderValueChanged); m_rateBox = new QComboBox(this); m_rateBox->addItem("0.5x", QVariant(0.5)); @@ -50,7 +50,8 @@ PlayerControls::PlayerControls(QWidget *parent) m_rateBox->addItem("2.0x", QVariant(2.0)); m_rateBox->setCurrentIndex(1); - connect(m_rateBox, QOverload<int>::of(&QComboBox::activated), this, &PlayerControls::updateRate); + connect(m_rateBox, QOverload<int>::of(&QComboBox::activated), this, + &PlayerControls::updateRate); QBoxLayout *layout = new QHBoxLayout; layout->setContentsMargins(0, 0, 0, 0); @@ -93,17 +94,16 @@ void PlayerControls::setState(QMediaPlayer::PlaybackState state) float PlayerControls::volume() const { - qreal linearVolume = QAudio::convertVolume(m_volumeSlider->value() / qreal(100), - QAudio::LogarithmicVolumeScale, - QAudio::LinearVolumeScale); + qreal linearVolume = + QAudio::convertVolume(m_volumeSlider->value() / qreal(100), + QAudio::LogarithmicVolumeScale, QAudio::LinearVolumeScale); return linearVolume; } void PlayerControls::setVolume(float volume) { - qreal logarithmicVolume = QAudio::convertVolume(volume, - QAudio::LinearVolumeScale, + qreal logarithmicVolume = QAudio::convertVolume(volume, QAudio::LinearVolumeScale, QAudio::LogarithmicVolumeScale); m_volumeSlider->setValue(qRound(logarithmicVolume * 100)); @@ -119,9 +119,8 @@ void PlayerControls::setMuted(bool muted) if (muted != m_playerMuted) { m_playerMuted = muted; - m_muteButton->setIcon(style()->standardIcon(muted - ? QStyle::SP_MediaVolumeMuted - : QStyle::SP_MediaVolume)); + m_muteButton->setIcon(style()->standardIcon(muted ? QStyle::SP_MediaVolumeMuted + : QStyle::SP_MediaVolume)); } } diff --git a/examples/multimedia/player/playlistmodel.cpp b/examples/multimedia/player/playlistmodel.cpp index 871aed0b8..ad5cec9f4 100644 --- a/examples/multimedia/player/playlistmodel.cpp +++ b/examples/multimedia/player/playlistmodel.cpp @@ -7,13 +7,15 @@ #include <QFileInfo> #include <QUrl> -PlaylistModel::PlaylistModel(QObject *parent) - : QAbstractItemModel(parent) +PlaylistModel::PlaylistModel(QObject *parent) : QAbstractItemModel(parent) { m_playlist.reset(new QMediaPlaylist); - connect(m_playlist.data(), &QMediaPlaylist::mediaAboutToBeInserted, this, &PlaylistModel::beginInsertItems); - connect(m_playlist.data(), &QMediaPlaylist::mediaInserted, this, &PlaylistModel::endInsertItems); - connect(m_playlist.data(), &QMediaPlaylist::mediaAboutToBeRemoved, this, &PlaylistModel::beginRemoveItems); + connect(m_playlist.data(), &QMediaPlaylist::mediaAboutToBeInserted, this, + &PlaylistModel::beginInsertItems); + connect(m_playlist.data(), &QMediaPlaylist::mediaInserted, this, + &PlaylistModel::endInsertItems); + connect(m_playlist.data(), &QMediaPlaylist::mediaAboutToBeRemoved, this, + &PlaylistModel::beginRemoveItems); connect(m_playlist.data(), &QMediaPlaylist::mediaRemoved, this, &PlaylistModel::endRemoveItems); connect(m_playlist.data(), &QMediaPlaylist::mediaChanged, this, &PlaylistModel::changeItems); } @@ -32,11 +34,10 @@ int PlaylistModel::columnCount(const QModelIndex &parent) const QModelIndex PlaylistModel::index(int row, int column, const QModelIndex &parent) const { - return m_playlist && !parent.isValid() - && row >= 0 && row < m_playlist->mediaCount() - && column >= 0 && column < ColumnCount - ? createIndex(row, column) - : QModelIndex(); + return m_playlist && !parent.isValid() && row >= 0 && row < m_playlist->mediaCount() + && column >= 0 && column < ColumnCount + ? createIndex(row, column) + : QModelIndex(); } QModelIndex PlaylistModel::parent(const QModelIndex &child) const @@ -98,5 +99,5 @@ void PlaylistModel::endRemoveItems() void PlaylistModel::changeItems(int start, int end) { m_data.clear(); - emit dataChanged(index(start,0), index(end,ColumnCount)); + emit dataChanged(index(start, 0), index(end, ColumnCount)); } diff --git a/examples/multimedia/player/playlistmodel.h b/examples/multimedia/player/playlistmodel.h index 6c20cc1d6..0c510f6e0 100644 --- a/examples/multimedia/player/playlistmodel.h +++ b/examples/multimedia/player/playlistmodel.h @@ -16,11 +16,7 @@ class PlaylistModel : public QAbstractItemModel Q_OBJECT public: - enum Column - { - Title = 0, - ColumnCount - }; + enum Column { Title = 0, ColumnCount }; explicit PlaylistModel(QObject *parent = nullptr); ~PlaylistModel(); @@ -28,14 +24,16 @@ public: int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; - QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; + QModelIndex index(int row, int column, + const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &child) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QMediaPlaylist *playlist() const; - bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::DisplayRole) override; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::DisplayRole) override; private slots: void beginInsertItems(int start, int end); diff --git a/examples/multimedia/player/qmediaplaylist.cpp b/examples/multimedia/player/qmediaplaylist.cpp index 529720808..d4fa1f842 100644 --- a/examples/multimedia/player/qmediaplaylist.cpp +++ b/examples/multimedia/player/qmediaplaylist.cpp @@ -5,12 +5,11 @@ #include "qmediaplaylist_p.h" #include "qplaylistfileparser_p.h" -#include <QtCore/qlist.h> -#include <QtCore/qfile.h> -#include <QtCore/qurl.h> -#include <QtCore/qcoreevent.h> -#include <QtCore/qcoreapplication.h> +#include <QCoreApplication> +#include <QFile> +#include <QList> #include <QRandomGenerator> +#include <QUrl> QT_BEGIN_NAMESPACE @@ -18,16 +17,13 @@ class QM3uPlaylistWriter { public: QM3uPlaylistWriter(QIODevice *device) - :m_device(device), m_textStream(new QTextStream(m_device)) + : m_device(device), m_textStream(new QTextStream(m_device)) { } - ~QM3uPlaylistWriter() - { - delete m_textStream; - } + ~QM3uPlaylistWriter() { delete m_textStream; } - bool writeItem(const QUrl& item) + bool writeItem(const QUrl &item) { *m_textStream << item.toString() << Qt::endl; return true; @@ -38,7 +34,6 @@ private: QTextStream *m_textStream; }; - int QMediaPlaylistPrivate::nextPosition(int steps) const { if (playlist.count() == 0) @@ -117,7 +112,6 @@ int QMediaPlaylistPrivate::prevPosition(int steps) const \sa QUrl */ - /*! \enum QMediaPlaylist::PlaybackMode @@ -127,23 +121,21 @@ int QMediaPlaylistPrivate::prevPosition(int steps) const \value CurrentItemInLoop The current item is played repeatedly in a loop. - \value Sequential Playback starts from the current and moves through each successive item until the last is reached and then stops. - The next item is a null item when the last one is currently playing. + \value Sequential Playback starts from the current and moves through each successive + item until the last is reached and then stops. The next item is a null item when the last one is + currently playing. - \value Loop Playback restarts at the first item after the last has finished playing. + \value Loop Playback restarts at the first item after the last has finished + playing. \value Random Play items in random order. */ - - /*! Create a new playlist object with the given \a parent. */ -QMediaPlaylist::QMediaPlaylist(QObject *parent) - : QObject(parent) - , d_ptr(new QMediaPlaylistPrivate) +QMediaPlaylist::QMediaPlaylist(QObject *parent) : QObject(parent), d_ptr(new QMediaPlaylistPrivate) { Q_D(QMediaPlaylist); @@ -230,7 +222,6 @@ int QMediaPlaylist::previousIndex(int steps) const return d_func()->prevPosition(steps); } - /*! Returns the number of items in the playlist. @@ -344,8 +335,7 @@ bool QMediaPlaylist::insertMedia(int pos, const QList<QUrl> &items) bool QMediaPlaylist::moveMedia(int from, int to) { Q_D(QMediaPlaylist); - if (from < 0 || from > d->playlist.count() || - to < 0 || to > d->playlist.count()) + if (from < 0 || from > d->playlist.count() || to < 0 || to > d->playlist.count()) return false; d->playlist.move(from, to); @@ -515,7 +505,8 @@ void QMediaPlaylist::shuffle() current = d->playlist.takeAt(d->currentPos); while (!d->playlist.isEmpty()) - playlist.append(d->playlist.takeAt(QRandomGenerator::global()->bounded(int(d->playlist.size())))); + playlist.append( + d->playlist.takeAt(QRandomGenerator::global()->bounded(int(d->playlist.size())))); if (d->currentPos != -1) playlist.insert(d->currentPos, current); @@ -523,7 +514,6 @@ void QMediaPlaylist::shuffle() emit mediaChanged(0, d->playlist.count()); } - /*! Advance to the next media content in playlist. */ diff --git a/examples/multimedia/player/qmediaplaylist.h b/examples/multimedia/player/qmediaplaylist.h index 94846d9b7..8342712d1 100644 --- a/examples/multimedia/player/qmediaplaylist.h +++ b/examples/multimedia/player/qmediaplaylist.h @@ -4,11 +4,9 @@ #ifndef QMEDIAPLAYLIST_H #define QMEDIAPLAYLIST_H -#include <QtCore/qobject.h> - -#include <QtMultimedia/qtmultimediaglobal.h> -#include <QtMultimedia/qmediaenumdebug.h> +#include <QObject> +#include <qmediaenumdebug.h> QT_BEGIN_NAMESPACE @@ -16,7 +14,8 @@ class QMediaPlaylistPrivate; class QMediaPlaylist : public QObject { Q_OBJECT - Q_PROPERTY(QMediaPlaylist::PlaybackMode playbackMode READ playbackMode WRITE setPlaybackMode NOTIFY playbackModeChanged) + Q_PROPERTY(QMediaPlaylist::PlaybackMode playbackMode READ playbackMode WRITE setPlaybackMode + NOTIFY playbackModeChanged) Q_PROPERTY(QUrl currentMedia READ currentMedia NOTIFY currentMediaChanged) Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged) @@ -61,7 +60,7 @@ public: Error error() const; QString errorString() const; -public Q_SLOTS: +public slots: void shuffle(); void next(); @@ -69,10 +68,10 @@ public Q_SLOTS: void setCurrentIndex(int index); -Q_SIGNALS: +signals: void currentIndexChanged(int index); void playbackModeChanged(QMediaPlaylist::PlaybackMode mode); - void currentMediaChanged(const QUrl&); + void currentMediaChanged(const QUrl &); void mediaAboutToBeInserted(int start, int end); void mediaInserted(int start, int end); @@ -93,4 +92,4 @@ QT_END_NAMESPACE Q_MEDIA_ENUM_DEBUG(QMediaPlaylist, PlaybackMode) Q_MEDIA_ENUM_DEBUG(QMediaPlaylist, Error) -#endif // QMEDIAPLAYLIST_H +#endif // QMEDIAPLAYLIST_H diff --git a/examples/multimedia/player/qmediaplaylist_p.h b/examples/multimedia/player/qmediaplaylist_p.h index b0a6609c7..bc1ec1c20 100644 --- a/examples/multimedia/player/qmediaplaylist_p.h +++ b/examples/multimedia/player/qmediaplaylist_p.h @@ -18,25 +18,21 @@ #include "qmediaplaylist.h" #include "qplaylistfileparser_p.h" -#include <QtCore/qdebug.h> +#include <QDebug> #ifdef Q_MOC_RUN -# pragma Q_MOC_EXPAND_MACROS +# pragma Q_MOC_EXPAND_MACROS #endif QT_BEGIN_NAMESPACE - class QMediaPlaylistControl; class QMediaPlaylistPrivate { Q_DECLARE_PUBLIC(QMediaPlaylist) public: - QMediaPlaylistPrivate() - : error(QMediaPlaylist::NoError) - { - } + QMediaPlaylistPrivate() : error(QMediaPlaylist::NoError) { } virtual ~QMediaPlaylistPrivate() { @@ -62,13 +58,14 @@ public: bool checkFormat(const char *format) const { QLatin1String f(format); - QPlaylistFileParser::FileType type = format ? QPlaylistFileParser::UNKNOWN : QPlaylistFileParser::M3U8; + QPlaylistFileParser::FileType type = + format ? QPlaylistFileParser::UNKNOWN : QPlaylistFileParser::M3U8; if (format) { - if (f == QLatin1String("m3u") || f == QLatin1String("text/uri-list") || - f == QLatin1String("audio/x-mpegurl") || f == QLatin1String("audio/mpegurl")) + if (f == QLatin1String("m3u") || f == QLatin1String("text/uri-list") + || f == QLatin1String("audio/x-mpegurl") || f == QLatin1String("audio/mpegurl")) type = QPlaylistFileParser::M3U; - else if (f == QLatin1String("m3u8") || f == QLatin1String("application/x-mpegURL") || - f == QLatin1String("application/vnd.apple.mpegurl")) + else if (f == QLatin1String("m3u8") || f == QLatin1String("application/x-mpegURL") + || f == QLatin1String("application/vnd.apple.mpegurl")) type = QPlaylistFileParser::M3U8; } @@ -88,7 +85,9 @@ public: parser = new QPlaylistFileParser(q_ptr); QObject::connect(parser, &QPlaylistFileParser::finished, [this]() { loadFinished(); }); QObject::connect(parser, &QPlaylistFileParser::error, - [this](QMediaPlaylist::Error err, const QString& errorMsg) { loadFailed(err, errorMsg); }); + [this](QMediaPlaylist::Error err, const QString &errorMsg) { + loadFailed(err, errorMsg); + }); } int nextPosition(int steps) const; @@ -108,5 +107,4 @@ public: QT_END_NAMESPACE - #endif // QMEDIAPLAYLIST_P_H diff --git a/examples/multimedia/player/qplaylistfileparser.cpp b/examples/multimedia/player/qplaylistfileparser.cpp index 698f81ddc..7823f9907 100644 --- a/examples/multimedia/player/qplaylistfileparser.cpp +++ b/examples/multimedia/player/qplaylistfileparser.cpp @@ -1,15 +1,16 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only -#include "qplaylistfileparser_p.h" -#include <qfileinfo.h> -#include <QtCore/QDebug> -#include <QtCore/qiodevice.h> -#include <QtCore/qpointer.h> -#include <QtNetwork/QNetworkReply> -#include <QtNetwork/QNetworkRequest> -#include "qmediaplayer.h" #include "qmediametadata.h" +#include "qmediaplayer.h" +#include "qplaylistfileparser_p.h" + +#include <QDebug> +#include <QFileInfo> +#include <QIODevice> +#include <QNetworkReply> +#include <QNetworkRequest> +#include <QPointer> QT_BEGIN_NAMESPACE @@ -18,14 +19,12 @@ namespace { class ParserBase { public: - explicit ParserBase(QPlaylistFileParser *parent) - : m_parent(parent) - , m_aborted(false) + explicit ParserBase(QPlaylistFileParser *parent) : m_parent(parent), m_aborted(false) { Q_ASSERT(m_parent); } - bool parseLine(int lineIndex, const QString& line, const QUrl& root) + bool parseLine(int lineIndex, const QString &line, const QUrl &root) { if (m_aborted) return false; @@ -38,7 +37,7 @@ public: virtual ~ParserBase() = default; protected: - virtual bool parseLineImpl(int lineIndex, const QString& line, const QUrl& root) = 0; + virtual bool parseLineImpl(int lineIndex, const QString &line, const QUrl &root) = 0; static QUrl expandToFullPath(const QUrl &root, const QString &line) { @@ -52,7 +51,8 @@ protected: if (url.scheme().isEmpty()) { // Resolve it relative to root if (root.isLocalFile()) - return QUrl::fromUserInput(line, root.adjusted(QUrl::RemoveFilename).toLocalFile(), QUrl::AssumeLocalFile); + return QUrl::fromUserInput(line, root.adjusted(QUrl::RemoveFilename).toLocalFile(), + QUrl::AssumeLocalFile); return root.resolved(url); } if (url.scheme().length() == 1) @@ -62,8 +62,7 @@ protected: return url; } - void newItemFound(const QVariant& content) { Q_EMIT m_parent->newItem(content); } - + void newItemFound(const QVariant &content) { Q_EMIT m_parent->newItem(content); } QPlaylistFileParser *m_parent; bool m_aborted; @@ -72,11 +71,7 @@ protected: class M3UParser : public ParserBase { public: - explicit M3UParser(QPlaylistFileParser *q) - : ParserBase(q) - , m_extendedFormat(false) - { - } + explicit M3UParser(QPlaylistFileParser *q) : ParserBase(q), m_extendedFormat(false) { } /* * @@ -95,31 +90,41 @@ public: C:\Documents and Settings\I\My Music\Greatest Hits\Example.ogg */ - bool parseLineImpl(int lineIndex, const QString& line, const QUrl& root) override + bool parseLineImpl(int lineIndex, const QString &line, const QUrl &root) override { - if (line[0] == u'#' ) { + if (line[0] == u'#') { if (m_extendedFormat) { if (line.startsWith(QLatin1String("#EXTINF:"))) { m_extraInfo.clear(); int artistStart = line.indexOf(QLatin1String(","), 8); bool ok = false; - QStringView lineView { line }; - int length = lineView.mid(8, artistStart < 8 ? -1 : artistStart - 8).trimmed().toInt(&ok); + QStringView lineView{ line }; + int length = lineView.mid(8, artistStart < 8 ? -1 : artistStart - 8) + .trimmed() + .toInt(&ok); if (ok && length > 0) { - //convert from second to milisecond + // convert from second to milisecond m_extraInfo[QMediaMetaData::Duration] = QVariant(length * 1000); } if (artistStart > 0) { int titleStart = getSplitIndex(line, artistStart); if (titleStart > artistStart) { - m_extraInfo[QMediaMetaData::Author] = lineView.mid(artistStart + 1, - titleStart - artistStart - 1).trimmed().toString(). - replace(QLatin1String("--"), QLatin1String("-")); - m_extraInfo[QMediaMetaData::Title] = lineView.mid(titleStart + 1).trimmed().toString(). - replace(QLatin1String("--"), QLatin1String("-")); + m_extraInfo[QMediaMetaData::Author] = + lineView.mid(artistStart + 1, titleStart - artistStart - 1) + .trimmed() + .toString() + .replace(QLatin1String("--"), QLatin1String("-")); + m_extraInfo[QMediaMetaData::Title] = + lineView.mid(titleStart + 1) + .trimmed() + .toString() + .replace(QLatin1String("--"), QLatin1String("-")); } else { - m_extraInfo[QMediaMetaData::Title] = lineView.mid(artistStart + 1).trimmed().toString(). - replace(QLatin1String("--"), QLatin1String("-")); + m_extraInfo[QMediaMetaData::Title] = + lineView.mid(artistStart + 1) + .trimmed() + .toString() + .replace(QLatin1String("--"), QLatin1String("-")); } } } @@ -137,11 +142,11 @@ public: return true; } - int getSplitIndex(const QString& line, int startPos) + int getSplitIndex(const QString &line, int startPos) { if (startPos < 0) startPos = 0; - const QChar* buf = line.data(); + const QChar *buf = line.data(); for (int i = startPos; i < line.length(); ++i) { if (buf[i] == u'-') { if (i == line.length() - 1) @@ -155,56 +160,53 @@ public: } private: - QMediaMetaData m_extraInfo; - bool m_extendedFormat; + QMediaMetaData m_extraInfo; + bool m_extendedFormat; }; class PLSParser : public ParserBase { public: - explicit PLSParser(QPlaylistFileParser *q) - : ParserBase(q) - { - } + explicit PLSParser(QPlaylistFileParser *q) : ParserBase(q) { } -/* - * -The format is essentially that of an INI file structured as follows: + /* + * + The format is essentially that of an INI file structured as follows: -Header + Header - * [playlist] : This tag indicates that it is a Playlist File + * [playlist] : This tag indicates that it is a Playlist File -Track Entry -Assuming track entry #X + Track Entry + Assuming track entry #X - * FileX : Variable defining location of stream. - * TitleX : Defines track title. - * LengthX : Length in seconds of track. Value of -1 indicates indefinite. + * FileX : Variable defining location of stream. + * TitleX : Defines track title. + * LengthX : Length in seconds of track. Value of -1 indicates indefinite. -Footer + Footer - * NumberOfEntries : This variable indicates the number of tracks. - * Version : Playlist version. Currently only a value of 2 is valid. + * NumberOfEntries : This variable indicates the number of tracks. + * Version : Playlist version. Currently only a value of 2 is valid. -[playlist] + [playlist] -File1=Alternative\everclear - SMFTA.mp3 + File1=Alternative\everclear - SMFTA.mp3 -Title1=Everclear - So Much For The Afterglow + Title1=Everclear - So Much For The Afterglow -Length1=233 + Length1=233 -File2=http://www.site.com:8000/listen.pls + File2=http://www.site.com:8000/listen.pls -Title2=My Cool Stream + Title2=My Cool Stream -Length5=-1 + Length5=-1 -NumberOfEntries=2 + NumberOfEntries=2 -Version=2 -*/ + Version=2 + */ bool parseLineImpl(int, const QString &line, const QUrl &root) override { // We ignore everything but 'File' entries, since that's the only thing we care about. @@ -222,7 +224,8 @@ Version=2 return true; } - QString getValue(QStringView line) { + QString getValue(QStringView line) + { int start = line.indexOf(u'='); if (start < 0) return QString(); @@ -238,13 +241,13 @@ class QPlaylistFileParserPrivate Q_DECLARE_PUBLIC(QPlaylistFileParser) public: QPlaylistFileParserPrivate(QPlaylistFileParser *q) - : q_ptr(q) - , m_stream(nullptr) - , m_type(QPlaylistFileParser::UNKNOWN) - , m_scanIndex(0) - , m_lineIndex(-1) - , m_utf8(false) - , m_aborted(false) + : q_ptr(q), + m_stream(nullptr), + m_type(QPlaylistFileParser::UNKNOWN), + m_scanIndex(0), + m_lineIndex(-1), + m_utf8(false), + m_aborted(false) { } @@ -255,8 +258,8 @@ public: QScopedPointer<QNetworkReply, QScopedPointerDeleteLater> m_source; QScopedPointer<ParserBase> m_currentParser; - QByteArray m_buffer; - QUrl m_root; + QByteArray m_buffer; + QUrl m_root; QNetworkAccessManager m_mgr; QString m_mimeType; QPlaylistFileParser *q_ptr; @@ -268,7 +271,12 @@ public: QUrl m_media; QString m_mimeType; [[nodiscard]] bool isValid() const { return m_stream || !m_media.isEmpty(); } - void reset() { m_stream = nullptr; m_media = QUrl(); m_mimeType = QString(); } + void reset() + { + m_stream = nullptr; + m_media = QUrl(); + m_mimeType = QString(); + } } m_pendingJob; int m_scanIndex; int m_lineIndex; @@ -279,8 +287,8 @@ private: bool processLine(int startIndex, int length); }; -#define LINE_LIMIT 4096 -#define READ_LIMIT 64 +#define LINE_LIMIT 4096 +#define READ_LIMIT 64 bool QPlaylistFileParserPrivate::processLine(int startIndex, int length) { @@ -293,7 +301,9 @@ bool QPlaylistFileParserPrivate::processLine(int startIndex, int length) QString mimeType; if (m_source) mimeType = m_source->header(QNetworkRequest::ContentTypeHeader).toString(); - m_type = QPlaylistFileParser::findPlaylistType(suffix, !mimeType.isEmpty() ? mimeType : m_mimeType, m_buffer.constData(), quint32(m_buffer.size())); + m_type = QPlaylistFileParser::findPlaylistType( + suffix, !mimeType.isEmpty() ? mimeType : m_mimeType, m_buffer.constData(), + quint32(m_buffer.size())); switch (m_type) { case QPlaylistFileParser::UNKNOWN: @@ -334,8 +344,9 @@ void QPlaylistFileParserPrivate::handleData() { Q_Q(QPlaylistFileParser); while (m_stream->bytesAvailable() && !m_aborted) { - int expectedBytes = qMin(READ_LIMIT, int(qMin(m_stream->bytesAvailable(), - qint64(LINE_LIMIT - m_buffer.size())))); + int expectedBytes = + qMin(READ_LIMIT, + int(qMin(m_stream->bytesAvailable(), qint64(LINE_LIMIT - m_buffer.size())))); m_buffer.push_back(m_stream->read(expectedBytes)); int processedBytes = 0; while (m_scanIndex < m_buffer.length() && !m_aborted) { @@ -348,7 +359,7 @@ void QPlaylistFileParserPrivate::handleData() } processedBytes = m_scanIndex + 1; if (!m_stream) { - //some error happened, so exit parsing + // some error happened, so exit parsing return; } } @@ -359,13 +370,14 @@ void QPlaylistFileParserPrivate::handleData() break; if (m_buffer.length() - processedBytes >= LINE_LIMIT) { - emit q->error(QMediaPlaylist::FormatError, QMediaPlaylist::tr("invalid line in playlist file")); + emit q->error(QMediaPlaylist::FormatError, + QMediaPlaylist::tr("invalid line in playlist file")); q->abort(); break; } if (!m_stream->bytesAvailable() && (!m_source || !m_source->isFinished())) { - //last line + // last line processLine(processedBytes, -1); break; } @@ -388,20 +400,20 @@ void QPlaylistFileParserPrivate::handleData() } QPlaylistFileParser::QPlaylistFileParser(QObject *parent) - : QObject(parent) - , d_ptr(new QPlaylistFileParserPrivate(this)) + : QObject(parent), d_ptr(new QPlaylistFileParserPrivate(this)) { - } QPlaylistFileParser::~QPlaylistFileParser() = default; QPlaylistFileParser::FileType QPlaylistFileParser::findByMimeType(const QString &mime) { - if (mime == QLatin1String("text/uri-list") || mime == QLatin1String("audio/x-mpegurl") || mime == QLatin1String("audio/mpegurl")) + if (mime == QLatin1String("text/uri-list") || mime == QLatin1String("audio/x-mpegurl") + || mime == QLatin1String("audio/mpegurl")) return QPlaylistFileParser::M3U; - if (mime == QLatin1String("application/x-mpegURL") || mime == QLatin1String("application/vnd.apple.mpegurl")) + if (mime == QLatin1String("application/x-mpegURL") + || mime == QLatin1String("application/vnd.apple.mpegurl")) return QPlaylistFileParser::M3U8; if (mime == QLatin1String("audio/x-scpls")) @@ -440,10 +452,9 @@ QPlaylistFileParser::FileType QPlaylistFileParser::findByDataHeader(const char * return QPlaylistFileParser::UNKNOWN; } -QPlaylistFileParser::FileType QPlaylistFileParser::findPlaylistType(const QString& suffix, - const QString& mime, - const char *data, - quint32 size) +QPlaylistFileParser::FileType QPlaylistFileParser::findPlaylistType(const QString &suffix, + const QString &mime, + const char *data, quint32 size) { FileType dataHeaderType = findByDataHeader(data, size); @@ -500,13 +511,14 @@ void QPlaylistFileParser::start(QIODevice *stream, const QString &mimeType) d->handleData(); } -void QPlaylistFileParser::start(const QUrl& request, const QString &mimeType) +void QPlaylistFileParser::start(const QUrl &request, const QString &mimeType) { Q_D(QPlaylistFileParser); const QUrl &url = request.url(); if (url.isLocalFile() && !QFile::exists(url.toLocalFile())) { - emit error(QMediaPlaylist::AccessDeniedError, QString(QMediaPlaylist::tr("%1 does not exist")).arg(url.toString())); + emit error(QMediaPlaylist::AccessDeniedError, + QString(QMediaPlaylist::tr("%1 does not exist")).arg(url.toString())); return; } @@ -523,7 +535,8 @@ void QPlaylistFileParser::start(const QUrl& request, const QString &mimeType) d->m_stream = d->m_source.get(); connect(d->m_source.data(), SIGNAL(readyRead()), this, SLOT(handleData())); connect(d->m_source.data(), SIGNAL(finished()), this, SLOT(handleData())); - connect(d->m_source.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)), this, SLOT(handleError())); + connect(d->m_source.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)), this, + SLOT(handleError())); if (url.isLocalFile()) d->handleData(); @@ -554,7 +567,8 @@ void QPlaylistFileParserPrivate::handleParserFinished() Q_Q(QPlaylistFileParser); const bool isParserValid = !m_currentParser.isNull(); if (!isParserValid && !m_aborted) - emit q->error(QMediaPlaylist::FormatNotSupportedError, QMediaPlaylist::tr("Empty file provided")); + emit q->error(QMediaPlaylist::FormatNotSupportedError, + QMediaPlaylist::tr("Empty file provided")); if (isParserValid && !m_aborted) { m_currentParser.reset(); diff --git a/examples/multimedia/player/qplaylistfileparser_p.h b/examples/multimedia/player/qplaylistfileparser_p.h index 3d2016736..88e5bf19e 100644 --- a/examples/multimedia/player/qplaylistfileparser_p.h +++ b/examples/multimedia/player/qplaylistfileparser_p.h @@ -15,9 +15,10 @@ // We mean it. // -#include "qtmultimediaglobal.h" #include "qmediaplaylist.h" -#include <QtCore/qobject.h> +#include "qtmultimediaglobal.h" + +#include <QObject> QT_BEGIN_NAMESPACE @@ -34,8 +35,7 @@ public: QPlaylistFileParser(QObject *parent = nullptr); ~QPlaylistFileParser(); - enum FileType - { + enum FileType { UNKNOWN, M3U, M3U8, // UTF-8 version of M3U @@ -49,26 +49,22 @@ public: QList<QUrl> playlist; -Q_SIGNALS: - void newItem(const QVariant& content); +signals: + void newItem(const QVariant &content); void finished(); - void error(QMediaPlaylist::Error err, const QString& errorMsg); + void error(QMediaPlaylist::Error err, const QString &errorMsg); -private Q_SLOTS: +private slots: void handleData(); void handleError(); private: - static FileType findByMimeType(const QString &mime); static FileType findBySuffixType(const QString &suffix); static FileType findByDataHeader(const char *data, quint32 size); - static FileType findPlaylistType(QIODevice *device, - const QString& mime); - static FileType findPlaylistType(const QString &suffix, - const QString& mime, - const char *data = nullptr, - quint32 size = 0); + static FileType findPlaylistType(QIODevice *device, const QString &mime); + static FileType findPlaylistType(const QString &suffix, const QString &mime, + const char *data = nullptr, quint32 size = 0); Q_DISABLE_COPY(QPlaylistFileParser) Q_DECLARE_PRIVATE(QPlaylistFileParser) diff --git a/examples/multimedia/player/videowidget.cpp b/examples/multimedia/player/videowidget.cpp index e7f906e38..3fbbd4f72 100644 --- a/examples/multimedia/player/videowidget.cpp +++ b/examples/multimedia/player/videowidget.cpp @@ -6,8 +6,7 @@ #include <QKeyEvent> #include <QMouseEvent> -VideoWidget::VideoWidget(QWidget *parent) - : QVideoWidget(parent) +VideoWidget::VideoWidget(QWidget *parent) : QVideoWidget(parent) { setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); @@ -43,4 +42,3 @@ void VideoWidget::mousePressEvent(QMouseEvent *event) { QVideoWidget::mousePressEvent(event); } - diff --git a/examples/multimedia/spectrum/engine.cpp b/examples/multimedia/spectrum/engine.cpp index d9d791bc1..4e44db06b 100644 --- a/examples/multimedia/spectrum/engine.cpp +++ b/examples/multimedia/spectrum/engine.cpp @@ -5,10 +5,8 @@ #include "tonegenerator.h" #include "utils.h" -#include <math.h> - -#include <QAudioSource> #include <QAudioSink> +#include <QAudioSource> #include <QCoreApplication> #include <QDebug> #include <QFile> @@ -16,48 +14,51 @@ #include <QSet> #include <QThread> +#include <math.h> + //----------------------------------------------------------------------------- // Constants //----------------------------------------------------------------------------- -const qint64 BufferDurationUs = 10 * 1000000; +const qint64 BufferDurationUs = 10 * 1000000; // Size of the level calculation window in microseconds -const int LevelWindowUs = 0.1 * 1000000; +const int LevelWindowUs = 0.1 * 1000000; //----------------------------------------------------------------------------- // Constructor and destructor //----------------------------------------------------------------------------- Engine::Engine(QObject *parent) - : QObject(parent) - , m_mode(QAudioDevice::Input) - , m_state(QAudio::StoppedState) - , m_devices(new QMediaDevices(this)) - , m_generateTone(false) - , m_file(nullptr) - , m_analysisFile(nullptr) - , m_availableAudioInputDevices(m_devices->audioInputs()) - , m_audioInputDevice(m_devices->defaultAudioInput()) - , m_audioInput(nullptr) - , m_audioInputIODevice(nullptr) - , m_recordPosition(0) - , m_availableAudioOutputDevices(m_devices->audioOutputs()) - , m_audioOutputDevice(m_devices->defaultAudioOutput()) - , m_audioOutput(nullptr) - , m_playPosition(0) - , m_bufferPosition(0) - , m_bufferLength(0) - , m_dataLength(0) - , m_levelBufferLength(0) - , m_rmsLevel(0.0) - , m_peakLevel(0.0) - , m_spectrumBufferLength(0) - , m_spectrumPosition(0) - , m_count(0) -{ - connect(&m_spectrumAnalyser, QOverload<const FrequencySpectrum&>::of(&SpectrumAnalyser::spectrumChanged), - this, QOverload<const FrequencySpectrum&>::of(&Engine::spectrumChanged)); + : QObject(parent), + m_mode(QAudioDevice::Input), + m_state(QAudio::StoppedState), + m_devices(new QMediaDevices(this)), + m_generateTone(false), + m_file(nullptr), + m_analysisFile(nullptr), + m_availableAudioInputDevices(m_devices->audioInputs()), + m_audioInputDevice(m_devices->defaultAudioInput()), + m_audioInput(nullptr), + m_audioInputIODevice(nullptr), + m_recordPosition(0), + m_availableAudioOutputDevices(m_devices->audioOutputs()), + m_audioOutputDevice(m_devices->defaultAudioOutput()), + m_audioOutput(nullptr), + m_playPosition(0), + m_bufferPosition(0), + m_bufferLength(0), + m_dataLength(0), + m_levelBufferLength(0), + m_rmsLevel(0.0), + m_peakLevel(0.0), + m_spectrumBufferLength(0), + m_spectrumPosition(0), + m_count(0) +{ + connect(&m_spectrumAnalyser, + QOverload<const FrequencySpectrum &>::of(&SpectrumAnalyser::spectrumChanged), this, + QOverload<const FrequencySpectrum &>::of(&Engine::spectrumChanged)); // This code might misinterpret things like "-something -category". But // it's unlikely that that needs to be supported so we'll let it go. @@ -80,7 +81,6 @@ Engine::Engine(QObject *parent) m_notifyTimer = new QTimer(this); m_notifyTimer->setInterval(1000); connect(m_notifyTimer, &QTimer::timeout, this, &Engine::audioNotify); - } Engine::~Engine() = default; @@ -96,7 +96,7 @@ bool Engine::loadFile(const QString &fileName) Q_ASSERT(!m_generateTone); Q_ASSERT(!m_file); Q_ASSERT(!fileName.isEmpty()); - QIODevice* file = new QFile(fileName); + QIODevice *file = new QFile(fileName); if (file->open(QIODevice::ReadOnly)) { m_file = new QWaveDecoder(file, this); if (m_file->open(QIODevice::ReadOnly)) { @@ -104,10 +104,9 @@ bool Engine::loadFile(const QString &fileName) result = initialize(); } else { emit errorMessage(tr("Audio format not supported"), - formatToString(m_file->audioFormat())); + formatToString(m_file->audioFormat())); } - } - else + } else emit errorMessage(tr("Could not open WAV decoder for file"), fileName); } else { emit errorMessage(tr("Could not open file"), fileName); @@ -129,9 +128,8 @@ bool Engine::generateTone(const Tone &tone) m_generateTone = true; m_tone = tone; ENGINE_DEBUG << "Engine::generateTone" - << "startFreq" << m_tone.startFreq - << "endFreq" << m_tone.endFreq - << "amp" << m_tone.amplitude; + << "startFreq" << m_tone.startFreq << "endFreq" << m_tone.endFreq << "amp" + << m_tone.amplitude; return initialize(); } @@ -144,8 +142,7 @@ bool Engine::generateSweptTone(qreal amplitude) m_tone.endFreq = 0; m_tone.amplitude = amplitude; ENGINE_DEBUG << "Engine::generateSweptTone" - << "startFreq" << m_tone.startFreq - << "amp" << m_tone.amplitude; + << "startFreq" << m_tone.startFreq << "amp" << m_tone.amplitude; return initialize(); } @@ -170,7 +167,6 @@ void Engine::setWindowFunction(WindowFunction type) m_spectrumAnalyser.setWindowFunction(type); } - //----------------------------------------------------------------------------- // Public slots //----------------------------------------------------------------------------- @@ -178,8 +174,7 @@ void Engine::setWindowFunction(WindowFunction type) void Engine::startRecording() { if (m_audioInput) { - if (QAudioDevice::Input == m_mode && - QAudio::SuspendedState == m_state) { + if (QAudioDevice::Input == m_mode && QAudio::SuspendedState == m_state) { m_audioInput->resume(); } else { m_spectrumAnalyser.cancelCalculation(); @@ -189,15 +184,13 @@ void Engine::startRecording() setRecordPosition(0, true); stopPlayback(); m_mode = QAudioDevice::Input; - connect(m_audioInput, &QAudioSource::stateChanged, - this, &Engine::audioStateChanged); + connect(m_audioInput, &QAudioSource::stateChanged, this, &Engine::audioStateChanged); m_count = 0; m_dataLength = 0; emit dataLengthChanged(0); m_audioInputIODevice = m_audioInput->start(); - connect(m_audioInputIODevice, &QIODevice::readyRead, - this, &Engine::audioDataReady); + connect(m_audioInputIODevice, &QIODevice::readyRead, this, &Engine::audioDataReady); } m_notifyTimer->start(); } @@ -209,8 +202,7 @@ void Engine::startPlayback() initialize(); if (m_audioOutput) { - if (QAudioDevice::Output == m_mode && - QAudio::SuspendedState == m_state) { + if (QAudioDevice::Output == m_mode && QAudio::SuspendedState == m_state) { #ifdef Q_OS_WIN // The Windows backend seems to internally go back into ActiveState // while still returning SuspendedState, so to ensure that it doesn't @@ -224,8 +216,7 @@ void Engine::startPlayback() setPlayPosition(0, true); stopRecording(); m_mode = QAudioDevice::Output; - connect(m_audioOutput, &QAudioSink::stateChanged, - this, &Engine::audioStateChanged); + connect(m_audioOutput, &QAudioSink::stateChanged, this, &Engine::audioStateChanged); m_count = 0; if (m_file) { @@ -246,8 +237,7 @@ void Engine::startPlayback() void Engine::suspend() { - if (QAudio::ActiveState == m_state || - QAudio::IdleState == m_state) { + if (QAudio::ActiveState == m_state || QAudio::IdleState == m_state) { switch (m_mode) { case QAudioDevice::Input: m_audioInput->suspend(); @@ -278,7 +268,6 @@ void Engine::setAudioOutputDevice(const QAudioDevice &device) } } - //----------------------------------------------------------------------------- // Private slots //----------------------------------------------------------------------------- @@ -287,66 +276,70 @@ void Engine::audioNotify() { switch (m_mode) { case QAudioDevice::Input: { - const qint64 recordPosition = qMin(m_bufferLength, m_format.bytesForDuration(m_audioInput->processedUSecs())); - setRecordPosition(recordPosition); - const qint64 levelPosition = m_dataLength - m_levelBufferLength; - if (levelPosition >= 0) - calculateLevel(levelPosition, m_levelBufferLength); - if (m_dataLength >= m_spectrumBufferLength) { - const qint64 spectrumPosition = m_dataLength - m_spectrumBufferLength; - calculateSpectrum(spectrumPosition); - } - emit bufferChanged(0, m_dataLength, m_buffer); + const qint64 recordPosition = + qMin(m_bufferLength, m_format.bytesForDuration(m_audioInput->processedUSecs())); + setRecordPosition(recordPosition); + const qint64 levelPosition = m_dataLength - m_levelBufferLength; + if (levelPosition >= 0) + calculateLevel(levelPosition, m_levelBufferLength); + if (m_dataLength >= m_spectrumBufferLength) { + const qint64 spectrumPosition = m_dataLength - m_spectrumBufferLength; + calculateSpectrum(spectrumPosition); } - break; + emit bufferChanged(0, m_dataLength, m_buffer); + } break; case QAudioDevice::Output: { - const qint64 playPosition = m_format.bytesForDuration(m_audioOutput->processedUSecs()); - setPlayPosition(qMin(bufferLength(), playPosition)); - const qint64 levelPosition = playPosition - m_levelBufferLength; - const qint64 spectrumPosition = playPosition - m_spectrumBufferLength; - if (m_file) { - if (levelPosition > m_bufferPosition || - spectrumPosition > m_bufferPosition || - qMax(m_levelBufferLength, m_spectrumBufferLength) > m_dataLength) { - m_bufferPosition = 0; - m_dataLength = 0; - // Data needs to be read into m_buffer in order to be analysed - const qint64 readPos = qMax(qint64(0), qMin(levelPosition, spectrumPosition)); - const qint64 readEnd = qMin(m_analysisFile->getDevice()->size(), qMax(levelPosition + m_levelBufferLength, spectrumPosition + m_spectrumBufferLength)); - const qint64 readLen = readEnd - readPos + m_format.bytesForDuration(WaveformWindowDuration); - qDebug() << "Engine::audioNotify [1]" - << "analysisFileSize" << m_analysisFile->getDevice()->size() - << "readPos" << readPos - << "readLen" << readLen; - if (m_analysisFile->seek(readPos + m_analysisFile->headerLength())) { - m_buffer.resize(readLen); - m_bufferPosition = readPos; - m_dataLength = m_analysisFile->read(m_buffer.data(), readLen); - qDebug() << "Engine::audioNotify [2]" << "bufferPosition" << m_bufferPosition << "dataLength" << m_dataLength; - } else { - qDebug() << "Engine::audioNotify [2]" << "file seek error"; - } - emit bufferChanged(m_bufferPosition, m_dataLength, m_buffer); + const qint64 playPosition = m_format.bytesForDuration(m_audioOutput->processedUSecs()); + setPlayPosition(qMin(bufferLength(), playPosition)); + const qint64 levelPosition = playPosition - m_levelBufferLength; + const qint64 spectrumPosition = playPosition - m_spectrumBufferLength; + if (m_file) { + if (levelPosition > m_bufferPosition || spectrumPosition > m_bufferPosition + || qMax(m_levelBufferLength, m_spectrumBufferLength) > m_dataLength) { + m_bufferPosition = 0; + m_dataLength = 0; + // Data needs to be read into m_buffer in order to be analysed + const qint64 readPos = qMax(qint64(0), qMin(levelPosition, spectrumPosition)); + const qint64 readEnd = qMin(m_analysisFile->getDevice()->size(), + qMax(levelPosition + m_levelBufferLength, + spectrumPosition + m_spectrumBufferLength)); + const qint64 readLen = + readEnd - readPos + m_format.bytesForDuration(WaveformWindowDuration); + qDebug() << "Engine::audioNotify [1]" + << "analysisFileSize" << m_analysisFile->getDevice()->size() << "readPos" + << readPos << "readLen" << readLen; + if (m_analysisFile->seek(readPos + m_analysisFile->headerLength())) { + m_buffer.resize(readLen); + m_bufferPosition = readPos; + m_dataLength = m_analysisFile->read(m_buffer.data(), readLen); + qDebug() << "Engine::audioNotify [2]" + << "bufferPosition" << m_bufferPosition << "dataLength" + << m_dataLength; + } else { + qDebug() << "Engine::audioNotify [2]" + << "file seek error"; } - } else { - if (playPosition >= m_dataLength) - stopPlayback(); + emit bufferChanged(m_bufferPosition, m_dataLength, m_buffer); } - if (levelPosition >= 0 && levelPosition + m_levelBufferLength < m_bufferPosition + m_dataLength) - calculateLevel(levelPosition, m_levelBufferLength); - if (spectrumPosition >= 0 && spectrumPosition + m_spectrumBufferLength < m_bufferPosition + m_dataLength) - calculateSpectrum(spectrumPosition); + } else { + if (playPosition >= m_dataLength) + stopPlayback(); } + if (levelPosition >= 0 + && levelPosition + m_levelBufferLength < m_bufferPosition + m_dataLength) + calculateLevel(levelPosition, m_levelBufferLength); + if (spectrumPosition >= 0 + && spectrumPosition + m_spectrumBufferLength < m_bufferPosition + m_dataLength) + calculateSpectrum(spectrumPosition); + } break; + default: break; - default: - break; } } void Engine::audioStateChanged(QAudio::State state) { - ENGINE_DEBUG << "Engine::audioStateChanged from" << m_state - << "to" << state; + ENGINE_DEBUG << "Engine::audioStateChanged from" << m_state << "to" << state; if (QAudio::IdleState == state && m_file && m_file->pos() == m_file->getDevice()->size()) { stopPlayback(); @@ -381,9 +374,8 @@ void Engine::audioDataReady() const qint64 bytesSpace = m_buffer.size() - m_dataLength; const qint64 bytesToRead = qMin(bytesReady, bytesSpace); - const qint64 bytesRead = m_audioInputIODevice->read( - m_buffer.data() + m_dataLength, - bytesToRead); + const qint64 bytesRead = + m_audioInputIODevice->read(m_buffer.data() + m_dataLength, bytesToRead); if (bytesRead) { m_dataLength += bytesRead; @@ -396,11 +388,11 @@ void Engine::audioDataReady() void Engine::spectrumChanged(const FrequencySpectrum &spectrum) { - ENGINE_DEBUG << "Engine::spectrumChanged" << "pos" << m_spectrumPosition; + ENGINE_DEBUG << "Engine::spectrumChanged" + << "pos" << m_spectrumPosition; emit spectrumChanged(m_spectrumPosition, m_spectrumBufferLength, spectrum); } - //----------------------------------------------------------------------------- // Private functions //----------------------------------------------------------------------------- @@ -479,17 +471,19 @@ bool Engine::initialize() } } else { if (m_file) - emit errorMessage(tr("Audio format not supported"), - formatToString(m_format)); + emit errorMessage(tr("Audio format not supported"), formatToString(m_format)); else if (m_generateTone) emit errorMessage(tr("No suitable format found"), ""); else emit errorMessage(tr("No common input / output format found"), ""); } - ENGINE_DEBUG << "Engine::initialize" << "m_bufferLength" << m_bufferLength; - ENGINE_DEBUG << "Engine::initialize" << "m_dataLength" << m_dataLength; - ENGINE_DEBUG << "Engine::initialize" << "format" << m_format; + ENGINE_DEBUG << "Engine::initialize" + << "m_bufferLength" << m_bufferLength; + ENGINE_DEBUG << "Engine::initialize" + << "m_dataLength" << m_dataLength; + ENGINE_DEBUG << "Engine::initialize" + << "format" << m_format; return result; } @@ -608,7 +602,7 @@ void Engine::calculateLevel(qint64 position, qint64 length) const char *ptr = m_buffer.constData() + position - m_bufferPosition; const char *const end = ptr + length; while (ptr < end) { - const qint16 value = *reinterpret_cast<const qint16*>(ptr); + const qint16 value = *reinterpret_cast<const qint16 *>(ptr); const qreal fracValue = pcmToReal(value); peakLevel = qMax(peakLevel, fracValue); sum += fracValue * fracValue; @@ -621,8 +615,9 @@ void Engine::calculateLevel(qint64 position, qint64 length) rmsLevel = qMin(qreal(1.0), rmsLevel); setLevel(rmsLevel, peakLevel, numSamples); - ENGINE_DEBUG << "Engine::calculateLevel" << "pos" << position << "len" << length - << "rms" << rmsLevel << "peak" << peakLevel; + ENGINE_DEBUG << "Engine::calculateLevel" + << "pos" << position << "len" << length << "rms" << rmsLevel << "peak" + << peakLevel; #endif } @@ -636,13 +631,13 @@ void Engine::calculateSpectrum(qint64 position) // QThread::currentThread is marked 'for internal use only', but // we're only using it for debug output here, so it's probably OK :) - ENGINE_DEBUG << "Engine::calculateSpectrum" << QThread::currentThread() - << "count" << m_count << "pos" << position << "len" << m_spectrumBufferLength + ENGINE_DEBUG << "Engine::calculateSpectrum" << QThread::currentThread() << "count" << m_count + << "pos" << position << "len" << m_spectrumBufferLength << "spectrumAnalyser.isReady" << m_spectrumAnalyser.isReady(); if (m_spectrumAnalyser.isReady()) { - m_spectrumBuffer = QByteArray::fromRawData(m_buffer.constData() + position - m_bufferPosition, - m_spectrumBufferLength); + m_spectrumBuffer = QByteArray::fromRawData( + m_buffer.constData() + position - m_bufferPosition, m_spectrumBufferLength); m_spectrumPosition = position; m_spectrumAnalyser.calculate(m_spectrumBuffer, m_format); } @@ -681,11 +676,11 @@ void Engine::emitError(QAudio::Error error) break; case QAudio::UnderrunError: errorString = tr("UnderrunError: Audio data is not being fed" - "to the audio device at a fast enough rate."); + "to the audio device at a fast enough rate."); break; case QAudio::FatalError: errorString = tr("FatalError: A non-recoverable error has occurred," - "the audio device is not usable at this time."); + "the audio device is not usable at this time."); break; } @@ -715,9 +710,9 @@ void Engine::dumpData() QFile txtFile(txtFileName); txtFile.open(QFile::WriteOnly | QFile::Text); QTextStream stream(&txtFile); - const qint16 *ptr = reinterpret_cast<const qint16*>(m_buffer.constData()); + const qint16 *ptr = reinterpret_cast<const qint16 *>(m_buffer.constData()); const int numSamples = m_dataLength / (2 * m_format.channels()); - for (int i=0; i<numSamples; ++i) { + for (int i = 0; i < numSamples; ++i) { stream << i << "\t" << *ptr << "\n"; ptr += m_format.channels(); } diff --git a/examples/multimedia/spectrum/engine.h b/examples/multimedia/spectrum/engine.h index 3d108fe1c..0ac454484 100644 --- a/examples/multimedia/spectrum/engine.h +++ b/examples/multimedia/spectrum/engine.h @@ -13,17 +13,17 @@ #include <QByteArray> #include <QDir> #include <QList> -#include <QObject> #include <QMediaDevices> -#include <QWaveDecoder> +#include <QObject> #include <QTimer> +#include <QWaveDecoder> #ifdef DUMP_CAPTURED_AUDIO -#define DUMP_DATA +# define DUMP_DATA #endif #ifdef DUMP_SPECTRUM -#define DUMP_DATA +# define DUMP_DATA #endif class FrequencySpectrum; @@ -43,14 +43,18 @@ class Engine : public QObject Q_OBJECT public: - explicit Engine(QObject *parent = 0); + explicit Engine(QObject *parent = nullptr); ~Engine(); const QList<QAudioDevice> &availableAudioInputDevices() const - { return m_availableAudioInputDevices; } + { + return m_availableAudioInputDevices; + } const QList<QAudioDevice> &availableAudioOutputDevices() const - { return m_availableAudioOutputDevices; } + { + return m_availableAudioOutputDevices; + } QAudioDevice::Mode mode() const { return m_mode; } QAudio::State state() const { return m_state; } @@ -59,7 +63,7 @@ public: * \return Current audio format * \note May be QAudioFormat() if engine is not initialized */ - const QAudioFormat& format() const { return m_format; } + const QAudioFormat &format() const { return m_format; } /** * Stop any ongoing recording or playback, and reset to ground state. @@ -222,7 +226,10 @@ private: #ifdef DUMP_DATA void createOutputDir(); - QString outputPath() const { return m_outputDir.path(); } + QString outputPath() const + { + return m_outputDir.path(); + } #endif #ifdef DUMP_CAPTURED_AUDIO @@ -230,53 +237,52 @@ private: #endif private: - QAudioDevice::Mode m_mode; - QAudio::State m_state; - QMediaDevices *m_devices; + QAudioDevice::Mode m_mode; + QAudio::State m_state; + QMediaDevices *m_devices; - bool m_generateTone; - SweptTone m_tone; + bool m_generateTone; + SweptTone m_tone; - QWaveDecoder* m_file; + QWaveDecoder *m_file; // We need a second file handle via which to read data into m_buffer // for analysis - QWaveDecoder* m_analysisFile; + QWaveDecoder *m_analysisFile; - QAudioFormat m_format; + QAudioFormat m_format; const QList<QAudioDevice> m_availableAudioInputDevices; - QAudioDevice m_audioInputDevice; - QAudioSource* m_audioInput; - QIODevice* m_audioInputIODevice; - qint64 m_recordPosition; + QAudioDevice m_audioInputDevice; + QAudioSource *m_audioInput; + QIODevice *m_audioInputIODevice; + qint64 m_recordPosition; const QList<QAudioDevice> m_availableAudioOutputDevices; - QAudioDevice m_audioOutputDevice; - QAudioSink* m_audioOutput; - qint64 m_playPosition; - QBuffer m_audioOutputIODevice; - - QByteArray m_buffer; - qint64 m_bufferPosition; - qint64 m_bufferLength; - qint64 m_dataLength; - - int m_levelBufferLength; - qreal m_rmsLevel; - qreal m_peakLevel; - - int m_spectrumBufferLength; - QByteArray m_spectrumBuffer; - SpectrumAnalyser m_spectrumAnalyser; - qint64 m_spectrumPosition; - - int m_count; + QAudioDevice m_audioOutputDevice; + QAudioSink *m_audioOutput; + qint64 m_playPosition; + QBuffer m_audioOutputIODevice; + + QByteArray m_buffer; + qint64 m_bufferPosition; + qint64 m_bufferLength; + qint64 m_dataLength; + + int m_levelBufferLength; + qreal m_rmsLevel; + qreal m_peakLevel; + + int m_spectrumBufferLength; + QByteArray m_spectrumBuffer; + SpectrumAnalyser m_spectrumAnalyser; + qint64 m_spectrumPosition; + + int m_count; QTimer *m_notifyTimer = nullptr; #ifdef DUMP_DATA - QDir m_outputDir; + QDir m_outputDir; #endif - }; #endif // ENGINE_H diff --git a/examples/multimedia/spectrum/frequencyspectrum.cpp b/examples/multimedia/spectrum/frequencyspectrum.cpp index b9f3c12df..f271a04aa 100644 --- a/examples/multimedia/spectrum/frequencyspectrum.cpp +++ b/examples/multimedia/spectrum/frequencyspectrum.cpp @@ -3,16 +3,12 @@ #include "frequencyspectrum.h" -FrequencySpectrum::FrequencySpectrum(int numPoints) - : m_elements(numPoints) -{ - -} +FrequencySpectrum::FrequencySpectrum(int numPoints) : m_elements(numPoints) { } void FrequencySpectrum::reset() { iterator i = begin(); - for ( ; i != end(); ++i) + for (; i != end(); ++i) *i = Element(); } diff --git a/examples/multimedia/spectrum/frequencyspectrum.h b/examples/multimedia/spectrum/frequencyspectrum.h index f56964508..9f3771571 100644 --- a/examples/multimedia/spectrum/frequencyspectrum.h +++ b/examples/multimedia/spectrum/frequencyspectrum.h @@ -4,20 +4,20 @@ #ifndef FREQUENCYSPECTRUM_H #define FREQUENCYSPECTRUM_H -#include <QtCore/QList> +#include <QList> /** * Represents a frequency spectrum as a series of elements, each of which * consists of a frequency, an amplitude and a phase. */ -class FrequencySpectrum { +class FrequencySpectrum +{ public: FrequencySpectrum(int numPoints = 0); - struct Element { - Element() - : frequency(0.0), amplitude(0.0), phase(0.0), clipped(false) - { } + struct Element + { + Element() : frequency(0.0), amplitude(0.0), phase(0.0), clipped(false) { } /** * Frequency in Hertz @@ -46,8 +46,8 @@ public: void reset(); int count() const; - Element& operator[](int index); - const Element& operator[](int index) const; + Element &operator[](int index); + const Element &operator[](int index) const; iterator begin(); iterator end(); const_iterator begin() const; diff --git a/examples/multimedia/spectrum/levelmeter.cpp b/examples/multimedia/spectrum/levelmeter.cpp index aa7141d48..25bfdc494 100644 --- a/examples/multimedia/spectrum/levelmeter.cpp +++ b/examples/multimedia/spectrum/levelmeter.cpp @@ -3,35 +3,32 @@ #include "levelmeter.h" -#include <math.h> - +#include <QDebug> #include <QPainter> #include <QTimer> -#include <QDebug> +#include <math.h> // Constants const int RedrawInterval = 100; // ms const qreal PeakDecayRate = 0.001; const int PeakHoldLevelDuration = 2000; // ms - LevelMeter::LevelMeter(QWidget *parent) - : QWidget(parent) - , m_rmsLevel(0.0) - , m_peakLevel(0.0) - , m_decayedPeakLevel(0.0) - , m_peakDecayRate(PeakDecayRate) - , m_peakHoldLevel(0.0) - , m_redrawTimer(new QTimer(this)) - , m_rmsColor(Qt::red) - , m_peakColor(255, 200, 200, 255) + : QWidget(parent), + m_rmsLevel(0.0), + m_peakLevel(0.0), + m_decayedPeakLevel(0.0), + m_peakDecayRate(PeakDecayRate), + m_peakHoldLevel(0.0), + m_redrawTimer(new QTimer(this)), + m_rmsColor(Qt::red), + m_peakColor(255, 200, 200, 255) { setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); setMinimumWidth(30); - connect(m_redrawTimer, &QTimer::timeout, - this, &LevelMeter::redrawTimerExpired); + connect(m_redrawTimer, &QTimer::timeout, this, &LevelMeter::redrawTimerExpired); m_redrawTimer->start(RedrawInterval); } @@ -47,7 +44,8 @@ void LevelMeter::reset() void LevelMeter::levelChanged(qreal rmsLevel, qreal peakLevel, int numSamples) { // Smooth the RMS signal - const qreal smooth = pow(qreal(0.9), static_cast<qreal>(numSamples) / 256); // TODO: remove this magic number + const qreal smooth = + pow(qreal(0.9), static_cast<qreal>(numSamples) / 256); // TODO: remove this magic number m_rmsLevel = (m_rmsLevel * smooth) + (rmsLevel * (1.0 - smooth)); if (peakLevel > m_decayedPeakLevel) { diff --git a/examples/multimedia/spectrum/levelmeter.h b/examples/multimedia/spectrum/levelmeter.h index 47cf557c5..e131bc904 100644 --- a/examples/multimedia/spectrum/levelmeter.h +++ b/examples/multimedia/spectrum/levelmeter.h @@ -17,7 +17,7 @@ class LevelMeter : public QWidget Q_OBJECT public: - explicit LevelMeter(QWidget *parent = 0); + explicit LevelMeter(QWidget *parent = nullptr); ~LevelMeter(); void paintEvent(QPaintEvent *event) override; @@ -75,7 +75,6 @@ private: QColor m_rmsColor; QColor m_peakColor; - }; #endif // LEVELMETER_H diff --git a/examples/multimedia/spectrum/main.cpp b/examples/multimedia/spectrum/main.cpp index 8a64d6046..31913b2f2 100644 --- a/examples/multimedia/spectrum/main.cpp +++ b/examples/multimedia/spectrum/main.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "mainwidget.h" + #include <QApplication> int main(int argc, char *argv[]) diff --git a/examples/multimedia/spectrum/mainwidget.cpp b/examples/multimedia/spectrum/mainwidget.cpp index f0a7cf2ae..f3583c7ad 100644 --- a/examples/multimedia/spectrum/mainwidget.cpp +++ b/examples/multimedia/spectrum/mainwidget.cpp @@ -1,55 +1,55 @@ // Copyright (C) 2017 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause +#include "mainwidget.h" #include "engine.h" #include "levelmeter.h" -#include "mainwidget.h" -#include "waveform.h" #include "progressbar.h" #include "settingsdialog.h" #include "spectrograph.h" #include "tonegeneratordialog.h" #include "utils.h" +#include "waveform.h" +#include <QFileDialog> +#include <QHBoxLayout> #include <QLabel> +#include <QMenu> +#include <QMessageBox> #include <QPushButton> -#include <QHBoxLayout> -#include <QVBoxLayout> #include <QStyle> -#include <QMenu> -#include <QFileDialog> #include <QTimerEvent> -#include <QMessageBox> +#include <QVBoxLayout> const int NullTimerId = -1; MainWidget::MainWidget(QWidget *parent) - : QWidget(parent) - , m_mode(NoMode) - , m_engine(new Engine(this)) + : QWidget(parent), + m_mode(NoMode), + m_engine(new Engine(this)) #ifndef DISABLE_WAVEFORM - , m_waveform(new Waveform(this)) + , + m_waveform(new Waveform(this)) #endif - , m_progressBar(new ProgressBar(this)) - , m_spectrograph(new Spectrograph(this)) - , m_levelMeter(new LevelMeter(this)) - , m_modeButton(new QPushButton(this)) - , m_recordButton(new QPushButton(this)) - , m_pauseButton(new QPushButton(this)) - , m_playButton(new QPushButton(this)) - , m_settingsButton(new QPushButton(this)) - , m_infoMessage(new QLabel(tr("Select a mode to begin"), this)) - , m_infoMessageTimerId(NullTimerId) - , m_settingsDialog(new SettingsDialog( - m_engine->availableAudioInputDevices(), - m_engine->availableAudioOutputDevices(), - this)) - , m_toneGeneratorDialog(new ToneGeneratorDialog(this)) - , m_modeMenu(new QMenu(this)) - , m_loadFileAction(nullptr) - , m_generateToneAction(nullptr) - , m_recordAction(nullptr) - , m_errorOccurred(false) + , + m_progressBar(new ProgressBar(this)), + m_spectrograph(new Spectrograph(this)), + m_levelMeter(new LevelMeter(this)), + m_modeButton(new QPushButton(this)), + m_recordButton(new QPushButton(this)), + m_pauseButton(new QPushButton(this)), + m_playButton(new QPushButton(this)), + m_settingsButton(new QPushButton(this)), + m_infoMessage(new QLabel(tr("Select a mode to begin"), this)), + m_infoMessageTimerId(NullTimerId), + m_settingsDialog(new SettingsDialog(m_engine->availableAudioInputDevices(), + m_engine->availableAudioOutputDevices(), this)), + m_toneGeneratorDialog(new ToneGeneratorDialog(this)), + m_modeMenu(new QMenu(this)), + m_loadFileAction(nullptr), + m_generateToneAction(nullptr), + m_recordAction(nullptr), + m_errorOccurred(false) { m_spectrograph->setParams(SpectrumNumBands, SpectrumLowFreq, SpectrumHighFreq); @@ -59,7 +59,6 @@ MainWidget::MainWidget(QWidget *parent) MainWidget::~MainWidget() = default; - //----------------------------------------------------------------------------- // Public slots //----------------------------------------------------------------------------- @@ -70,8 +69,7 @@ void MainWidget::stateChanged(QAudioDevice::Mode mode, QAudio::State state) updateButtonStates(); - if (QAudio::ActiveState != state && - QAudio::SuspendedState != state) { + if (QAudio::ActiveState != state && QAudio::SuspendedState != state) { m_levelMeter->reset(); m_spectrograph->reset(); } @@ -79,18 +77,16 @@ void MainWidget::stateChanged(QAudioDevice::Mode mode, QAudio::State state) void MainWidget::formatChanged(const QAudioFormat &format) { - infoMessage(formatToString(format), NullMessageTimeout); + infoMessage(formatToString(format), NullMessageTimeout); #ifndef DISABLE_WAVEFORM if (QAudioFormat() != format) { - m_waveform->initialize(format, WaveformTileLength, - WaveformWindowDuration); + m_waveform->initialize(format, WaveformTileLength, WaveformWindowDuration); } #endif } -void MainWidget::spectrumChanged(qint64 position, qint64 length, - const FrequencySpectrum &spectrum) +void MainWidget::spectrumChanged(qint64 position, qint64 length, const FrequencySpectrum &spectrum) { m_progressBar->windowChanged(position, length); m_spectrograph->spectrumChanged(spectrum); @@ -139,7 +135,6 @@ void MainWidget::bufferLengthChanged(qint64 length) m_progressBar->bufferLengthChanged(length); } - //----------------------------------------------------------------------------- // Private slots //----------------------------------------------------------------------------- @@ -148,7 +143,8 @@ void MainWidget::showFileDialog() { m_errorOccurred = false; const QString dir; - const QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open WAV file"), dir, "*.wav"); + const QStringList fileNames = + QFileDialog::getOpenFileNames(this, tr("Open WAV file"), dir, "*.wav"); if (fileNames.count()) { reset(); setMode(LoadFileMode); @@ -200,7 +196,6 @@ void MainWidget::initializeRecord() updateButtonStates(); } - //----------------------------------------------------------------------------- // Private functions //----------------------------------------------------------------------------- @@ -225,9 +220,9 @@ void MainWidget::createUi() m_waveform->setLayout(waveformLayout.release()); windowLayout->addWidget(m_waveform); #else -#ifndef DISABLE_WAVEFORM +# ifndef DISABLE_WAVEFORM windowLayout->addWidget(m_waveform); -#endif // DISABLE_WAVEFORM +# endif // DISABLE_WAVEFORM windowLayout->addWidget(m_progressBar); #endif // SUPERIMPOSE_PROGRESS_ON_WAVEFORM @@ -291,62 +286,49 @@ void MainWidget::createUi() void MainWidget::connectUi() { - connect(m_recordButton, &QPushButton::clicked, - m_engine, &Engine::startRecording); + connect(m_recordButton, &QPushButton::clicked, m_engine, &Engine::startRecording); - connect(m_pauseButton, &QPushButton::clicked, - m_engine, &Engine::suspend); + connect(m_pauseButton, &QPushButton::clicked, m_engine, &Engine::suspend); - connect(m_playButton, &QPushButton::clicked, - m_engine, &Engine::startPlayback); + connect(m_playButton, &QPushButton::clicked, m_engine, &Engine::startPlayback); - connect(m_settingsButton, &QPushButton::clicked, - this, &MainWidget::showSettingsDialog); + connect(m_settingsButton, &QPushButton::clicked, this, &MainWidget::showSettingsDialog); - connect(m_engine, &Engine::stateChanged, - this, &MainWidget::stateChanged); + connect(m_engine, &Engine::stateChanged, this, &MainWidget::stateChanged); - connect(m_engine, &Engine::formatChanged, - this, &MainWidget::formatChanged); + connect(m_engine, &Engine::formatChanged, this, &MainWidget::formatChanged); m_progressBar->bufferLengthChanged(m_engine->bufferLength()); - connect(m_engine, &Engine::bufferLengthChanged, - this, &MainWidget::bufferLengthChanged); + connect(m_engine, &Engine::bufferLengthChanged, this, &MainWidget::bufferLengthChanged); - connect(m_engine, &Engine::dataLengthChanged, - this, &MainWidget::updateButtonStates); + connect(m_engine, &Engine::dataLengthChanged, this, &MainWidget::updateButtonStates); - connect(m_engine, &Engine::recordPositionChanged, - m_progressBar, &ProgressBar::recordPositionChanged); + connect(m_engine, &Engine::recordPositionChanged, m_progressBar, + &ProgressBar::recordPositionChanged); - connect(m_engine, &Engine::playPositionChanged, - m_progressBar, &ProgressBar::playPositionChanged); + connect(m_engine, &Engine::playPositionChanged, m_progressBar, + &ProgressBar::playPositionChanged); - connect(m_engine, &Engine::recordPositionChanged, - this, &MainWidget::audioPositionChanged); + connect(m_engine, &Engine::recordPositionChanged, this, &MainWidget::audioPositionChanged); - connect(m_engine, &Engine::playPositionChanged, - this, &MainWidget::audioPositionChanged); + connect(m_engine, &Engine::playPositionChanged, this, &MainWidget::audioPositionChanged); - connect(m_engine, &Engine::levelChanged, - m_levelMeter, &LevelMeter::levelChanged); + connect(m_engine, &Engine::levelChanged, m_levelMeter, &LevelMeter::levelChanged); - connect(m_engine, QOverload<qint64, qint64, const FrequencySpectrum&>::of(&Engine::spectrumChanged), - this, QOverload<qint64, qint64, const FrequencySpectrum&>::of(&MainWidget::spectrumChanged)); + connect(m_engine, + QOverload<qint64, qint64, const FrequencySpectrum &>::of(&Engine::spectrumChanged), + this, + QOverload<qint64, qint64, const FrequencySpectrum &>::of(&MainWidget::spectrumChanged)); - connect(m_engine, &Engine::infoMessage, - this, &MainWidget::infoMessage); + connect(m_engine, &Engine::infoMessage, this, &MainWidget::infoMessage); - connect(m_engine, &Engine::errorMessage, - this, &MainWidget::errorMessage); + connect(m_engine, &Engine::errorMessage, this, &MainWidget::errorMessage); - connect(m_spectrograph, &Spectrograph::infoMessage, - this, &MainWidget::infoMessage); + connect(m_spectrograph, &Spectrograph::infoMessage, this, &MainWidget::infoMessage); #ifndef DISABLE_WAVEFORM - connect(m_engine, &Engine::bufferChanged, - m_waveform, &Waveform::bufferChanged); + connect(m_engine, &Engine::bufferChanged, m_waveform, &Waveform::bufferChanged); #endif } @@ -369,20 +351,20 @@ void MainWidget::createMenus() void MainWidget::updateButtonStates() { - const bool recordEnabled = ((QAudioDevice::Output == m_engine->mode() || - (QAudio::ActiveState != m_engine->state() && - QAudio::IdleState != m_engine->state())) && - RecordMode == m_mode); + const bool recordEnabled = ((QAudioDevice::Output == m_engine->mode() + || (QAudio::ActiveState != m_engine->state() + && QAudio::IdleState != m_engine->state())) + && RecordMode == m_mode); m_recordButton->setEnabled(m_errorOccurred ? false : recordEnabled); - const bool pauseEnabled = (QAudio::ActiveState == m_engine->state() || - QAudio::IdleState == m_engine->state()); + const bool pauseEnabled = + (QAudio::ActiveState == m_engine->state() || QAudio::IdleState == m_engine->state()); m_pauseButton->setEnabled(m_errorOccurred ? false : pauseEnabled); const bool playEnabled = (/*m_engine->dataLength() &&*/ - (QAudioDevice::Output != m_engine->mode() || - (QAudio::ActiveState != m_engine->state() && - QAudio::IdleState != m_engine->state()))); + (QAudioDevice::Output != m_engine->mode() + || (QAudio::ActiveState != m_engine->state() + && QAudio::IdleState != m_engine->state()))); m_playButton->setEnabled(m_errorOccurred ? false : playEnabled); } diff --git a/examples/multimedia/spectrum/mainwidget.h b/examples/multimedia/spectrum/mainwidget.h index 39d2c409f..789e312f5 100644 --- a/examples/multimedia/spectrum/mainwidget.h +++ b/examples/multimedia/spectrum/mainwidget.h @@ -34,7 +34,7 @@ class MainWidget : public QWidget Q_OBJECT public: - explicit MainWidget(QWidget *parent = 0); + explicit MainWidget(QWidget *parent = nullptr); ~MainWidget(); // QObject @@ -43,8 +43,7 @@ public: public slots: void stateChanged(QAudioDevice::Mode mode, QAudio::State state); void formatChanged(const QAudioFormat &format); - void spectrumChanged(qint64 position, qint64 length, - const FrequencySpectrum &spectrum); + void spectrumChanged(qint64 position, qint64 length, const FrequencySpectrum &spectrum); void infoMessage(const QString &message, int timeoutMs); void errorMessage(const QString &heading, const QString &detail); void audioPositionChanged(qint64 position); @@ -64,49 +63,43 @@ private: void connectUi(); void reset(); - enum Mode { - NoMode, - RecordMode, - GenerateToneMode, - LoadFileMode - }; + enum Mode { NoMode, RecordMode, GenerateToneMode, LoadFileMode }; void setMode(Mode mode); private: - Mode m_mode; + Mode m_mode; - Engine* m_engine; + Engine *m_engine; #ifndef DISABLE_WAVEFORM - Waveform* m_waveform; + Waveform *m_waveform; #endif - ProgressBar* m_progressBar; - Spectrograph* m_spectrograph; - LevelMeter* m_levelMeter; - - QPushButton* m_modeButton; - QPushButton* m_recordButton; - QIcon m_recordIcon; - QPushButton* m_pauseButton; - QIcon m_pauseIcon; - QPushButton* m_playButton; - QIcon m_playIcon; - QPushButton* m_settingsButton; - QIcon m_settingsIcon; - - QLabel* m_infoMessage; - int m_infoMessageTimerId; - - SettingsDialog* m_settingsDialog; - ToneGeneratorDialog* m_toneGeneratorDialog; - - QMenu* m_modeMenu; - QAction* m_loadFileAction; - QAction* m_generateToneAction; - QAction* m_recordAction; - bool m_errorOccurred; - + ProgressBar *m_progressBar; + Spectrograph *m_spectrograph; + LevelMeter *m_levelMeter; + + QPushButton *m_modeButton; + QPushButton *m_recordButton; + QIcon m_recordIcon; + QPushButton *m_pauseButton; + QIcon m_pauseIcon; + QPushButton *m_playButton; + QIcon m_playIcon; + QPushButton *m_settingsButton; + QIcon m_settingsIcon; + + QLabel *m_infoMessage; + int m_infoMessageTimerId; + + SettingsDialog *m_settingsDialog; + ToneGeneratorDialog *m_toneGeneratorDialog; + + QMenu *m_modeMenu; + QAction *m_loadFileAction; + QAction *m_generateToneAction; + QAction *m_recordAction; + bool m_errorOccurred; }; #endif // MAINWIDGET_H diff --git a/examples/multimedia/spectrum/progressbar.cpp b/examples/multimedia/spectrum/progressbar.cpp index d829b735d..701359abc 100644 --- a/examples/multimedia/spectrum/progressbar.cpp +++ b/examples/multimedia/spectrum/progressbar.cpp @@ -2,16 +2,15 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "progressbar.h" -#include "spectrum.h" #include <QPainter> ProgressBar::ProgressBar(QWidget *parent) - : QWidget(parent) - , m_bufferLength(0) - , m_recordPosition(0) - , m_playPosition(0) - , m_windowPosition(0) - , m_windowLength(0) + : QWidget(parent), + m_bufferLength(0), + m_recordPosition(0), + m_playPosition(0), + m_windowPosition(0), + m_windowLength(0) { setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); setMinimumHeight(30); diff --git a/examples/multimedia/spectrum/progressbar.h b/examples/multimedia/spectrum/progressbar.h index e1b575bb6..8b117c7e6 100644 --- a/examples/multimedia/spectrum/progressbar.h +++ b/examples/multimedia/spectrum/progressbar.h @@ -15,7 +15,7 @@ class ProgressBar : public QWidget Q_OBJECT public: - explicit ProgressBar(QWidget *parent = 0); + explicit ProgressBar(QWidget *parent = nullptr); ~ProgressBar(); void reset(); diff --git a/examples/multimedia/spectrum/settingsdialog.cpp b/examples/multimedia/spectrum/settingsdialog.cpp index 8d64bc9a9..9acd641f9 100644 --- a/examples/multimedia/spectrum/settingsdialog.cpp +++ b/examples/multimedia/spectrum/settingsdialog.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "settingsdialog.h" + #include <QCheckBox> #include <QComboBox> #include <QDialogButtonBox> @@ -11,26 +12,22 @@ #include <QSpinBox> #include <QVBoxLayout> -SettingsDialog::SettingsDialog( - const QList<QAudioDevice> &availableInputDevices, - const QList<QAudioDevice> &availableOutputDevices, - QWidget *parent) - : QDialog(parent) - , m_windowFunction(DefaultWindowFunction) - , m_inputDeviceComboBox(new QComboBox(this)) - , m_outputDeviceComboBox(new QComboBox(this)) - , m_windowFunctionComboBox(new QComboBox(this)) +SettingsDialog::SettingsDialog(const QList<QAudioDevice> &availableInputDevices, + const QList<QAudioDevice> &availableOutputDevices, QWidget *parent) + : QDialog(parent), + m_windowFunction(DefaultWindowFunction), + m_inputDeviceComboBox(new QComboBox(this)), + m_outputDeviceComboBox(new QComboBox(this)), + m_windowFunctionComboBox(new QComboBox(this)) { QVBoxLayout *dialogLayout = new QVBoxLayout(this); // Populate combo boxes for (const QAudioDevice &device : availableInputDevices) - m_inputDeviceComboBox->addItem(device.description(), - QVariant::fromValue(device)); + m_inputDeviceComboBox->addItem(device.description(), QVariant::fromValue(device)); for (const QAudioDevice &device : availableOutputDevices) - m_outputDeviceComboBox->addItem(device.description(), - QVariant::fromValue(device)); + m_outputDeviceComboBox->addItem(device.description(), QVariant::fromValue(device)); m_windowFunctionComboBox->addItem(tr("None"), QVariant::fromValue(int(NoWindow))); m_windowFunctionComboBox->addItem("Hann", QVariant::fromValue(int(HannWindow))); @@ -63,12 +60,12 @@ SettingsDialog::SettingsDialog( dialogLayout->addLayout(windowFunctionLayout.release()); // Connect - connect(m_inputDeviceComboBox, QOverload<int>::of(&QComboBox::activated), - this, &SettingsDialog::inputDeviceChanged); - connect(m_outputDeviceComboBox, QOverload<int>::of(&QComboBox::activated), - this, &SettingsDialog::outputDeviceChanged); - connect(m_windowFunctionComboBox, QOverload<int>::of(&QComboBox::activated), - this, &SettingsDialog::windowFunctionChanged); + connect(m_inputDeviceComboBox, QOverload<int>::of(&QComboBox::activated), this, + &SettingsDialog::inputDeviceChanged); + connect(m_outputDeviceComboBox, QOverload<int>::of(&QComboBox::activated), this, + &SettingsDialog::outputDeviceChanged); + connect(m_windowFunctionComboBox, QOverload<int>::of(&QComboBox::activated), this, + &SettingsDialog::windowFunctionChanged); // Add standard buttons to layout QDialogButtonBox *buttonBox = new QDialogButtonBox(this); @@ -76,10 +73,10 @@ SettingsDialog::SettingsDialog( dialogLayout->addWidget(buttonBox); // Connect standard buttons - connect(buttonBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, - this, &SettingsDialog::accept); - connect(buttonBox->button(QDialogButtonBox::Cancel), &QPushButton::clicked, - this, &SettingsDialog::reject); + connect(buttonBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, + &SettingsDialog::accept); + connect(buttonBox->button(QDialogButtonBox::Cancel), &QPushButton::clicked, this, + &SettingsDialog::reject); setLayout(dialogLayout); } @@ -88,8 +85,8 @@ SettingsDialog::~SettingsDialog() = default; void SettingsDialog::windowFunctionChanged(int index) { - m_windowFunction = static_cast<WindowFunction>( - m_windowFunctionComboBox->itemData(index).value<int>()); + m_windowFunction = + static_cast<WindowFunction>(m_windowFunctionComboBox->itemData(index).value<int>()); } void SettingsDialog::inputDeviceChanged(int index) @@ -101,4 +98,3 @@ void SettingsDialog::outputDeviceChanged(int index) { m_outputDevice = m_outputDeviceComboBox->itemData(index).value<QAudioDevice>(); } - diff --git a/examples/multimedia/spectrum/settingsdialog.h b/examples/multimedia/spectrum/settingsdialog.h index a3bb2881d..ac877d975 100644 --- a/examples/multimedia/spectrum/settingsdialog.h +++ b/examples/multimedia/spectrum/settingsdialog.h @@ -5,8 +5,9 @@ #define SETTINGSDIALOG_H #include "spectrum.h" -#include <QDialog> + #include <QAudioDevice> +#include <QDialog> QT_BEGIN_NAMESPACE class QComboBox; @@ -26,8 +27,7 @@ class SettingsDialog : public QDialog public: SettingsDialog(const QList<QAudioDevice> &availableInputDevices, - const QList<QAudioDevice> &availableOutputDevices, - QWidget *parent = 0); + const QList<QAudioDevice> &availableOutputDevices, QWidget *parent = nullptr); ~SettingsDialog(); WindowFunction windowFunction() const { return m_windowFunction; } @@ -40,7 +40,7 @@ private slots: void outputDeviceChanged(int index); private: - WindowFunction m_windowFunction; + WindowFunction m_windowFunction; QAudioDevice m_inputDevice; QAudioDevice m_outputDevice; diff --git a/examples/multimedia/spectrum/spectrograph.cpp b/examples/multimedia/spectrum/spectrograph.cpp index 55838f0b7..d6b76b1df 100644 --- a/examples/multimedia/spectrum/spectrograph.cpp +++ b/examples/multimedia/spectrum/spectrograph.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "spectrograph.h" + #include <QDebug> #include <QMouseEvent> #include <QPainter> @@ -12,17 +13,16 @@ const int NullIndex = -1; const int BarSelectionInterval = 2000; Spectrograph::Spectrograph(QWidget *parent) - : QWidget(parent) - , m_barSelected(NullIndex) - , m_timerId(NullTimerId) - , m_lowFreq(0.0) - , m_highFreq(0.0) + : QWidget(parent), + m_barSelected(NullIndex), + m_timerId(NullTimerId), + m_lowFreq(0.0), + m_highFreq(0.0) { setMinimumHeight(100); } -Spectrograph::~Spectrograph() -= default; +Spectrograph::~Spectrograph() = default; void Spectrograph::setParams(int numBars, qreal lowFreq, qreal highFreq) { @@ -85,8 +85,8 @@ void Spectrograph::paintEvent(QPaintEvent *event) if (numBars) { const int numHorizontalSections = numBars; QLine line(rect().topLeft(), rect().bottomLeft()); - for (int i=1; i<numHorizontalSections; ++i) { - line.translate(rect().width()/numHorizontalSections, 0); + for (int i = 1; i < numHorizontalSections; ++i) { + line.translate(rect().width() / numHorizontalSections, 0); painter.drawLine(line); } } @@ -94,8 +94,8 @@ void Spectrograph::paintEvent(QPaintEvent *event) // Draw horizontal lines const int numVerticalSections = 10; QLine line(rect().topLeft(), rect().topRight()); - for (int i=1; i<numVerticalSections; ++i) { - line.translate(0, rect().height()/numVerticalSections); + for (int i = 1; i < numVerticalSections; ++i) { + line.translate(0, rect().height() / numVerticalSections); painter.drawLine(line); } @@ -114,7 +114,7 @@ void Spectrograph::paintEvent(QPaintEvent *event) const int leftPaddingWidth = (paddingWidth + gapWidth) / 2; const int barHeight = rect().height() - 2 * gapWidth; - for (int i=0; i<numBars; ++i) { + for (int i = 0; i < numBars; ++i) { const qreal value = m_bars[i].value; Q_ASSERT(value >= 0.0 && value <= 1.0); QRect bar = rect(); @@ -156,7 +156,7 @@ int Spectrograph::barIndex(qreal frequency) const Q_ASSERT(frequency >= m_lowFreq && frequency < m_highFreq); const qreal bandWidth = (m_highFreq - m_lowFreq) / m_bars.count(); const int index = (frequency - m_lowFreq) / bandWidth; - if (index <0 || index >= m_bars.count()) + if (index < 0 || index >= m_bars.count()) Q_ASSERT(false); return index; } @@ -165,7 +165,7 @@ QPair<qreal, qreal> Spectrograph::barRange(int index) const { Q_ASSERT(index >= 0 && index < m_bars.count()); const qreal bandWidth = (m_highFreq - m_lowFreq) / m_bars.count(); - return QPair<qreal, qreal>(index * bandWidth, (index+1) * bandWidth); + return QPair<qreal, qreal>(index * bandWidth, (index + 1) * bandWidth); } void Spectrograph::updateBars() @@ -173,7 +173,7 @@ void Spectrograph::updateBars() m_bars.fill(Bar()); FrequencySpectrum::const_iterator i = m_spectrum.begin(); const FrequencySpectrum::const_iterator end = m_spectrum.end(); - for ( ; i != end; ++i) { + for (; i != end; ++i) { const FrequencySpectrum::Element e = *i; if (e.frequency >= m_lowFreq && e.frequency < m_highFreq) { Bar &bar = m_bars[barIndex(e.frequency)]; @@ -184,11 +184,11 @@ void Spectrograph::updateBars() update(); } -void Spectrograph::selectBar(int index) { +void Spectrograph::selectBar(int index) +{ const QPair<qreal, qreal> frequencyRange = barRange(index); - const QString message = QString("%1 - %2 Hz") - .arg(frequencyRange.first) - .arg(frequencyRange.second); + const QString message = + QString("%1 - %2 Hz").arg(frequencyRange.first).arg(frequencyRange.second); emit infoMessage(message, BarSelectionInterval); if (NullTimerId != m_timerId) @@ -198,5 +198,3 @@ void Spectrograph::selectBar(int index) { m_barSelected = index; update(); } - - diff --git a/examples/multimedia/spectrum/spectrograph.h b/examples/multimedia/spectrum/spectrograph.h index 9de4b73a0..1344d3257 100644 --- a/examples/multimedia/spectrum/spectrograph.h +++ b/examples/multimedia/spectrum/spectrograph.h @@ -17,7 +17,7 @@ class Spectrograph : public QWidget Q_OBJECT public: - explicit Spectrograph(QWidget *parent = 0); + explicit Spectrograph(QWidget *parent = nullptr); ~Spectrograph(); void setParams(int numBars, qreal lowFreq, qreal highFreq); @@ -44,18 +44,19 @@ private: void selectBar(int index); private: - struct Bar { + struct Bar + { Bar() : value(0.0), clipped(false) { } - qreal value; - bool clipped; + qreal value; + bool clipped; }; - QList<Bar> m_bars; - int m_barSelected; - int m_timerId; - qreal m_lowFreq; - qreal m_highFreq; - FrequencySpectrum m_spectrum; + QList<Bar> m_bars; + int m_barSelected; + int m_timerId; + qreal m_lowFreq; + qreal m_highFreq; + FrequencySpectrum m_spectrum; }; #endif // SPECTROGRAPH_H diff --git a/examples/multimedia/spectrum/spectrum.h b/examples/multimedia/spectrum/spectrum.h index 928048245..e416e82bd 100644 --- a/examples/multimedia/spectrum/spectrum.h +++ b/examples/multimedia/spectrum/spectrum.h @@ -4,25 +4,26 @@ #ifndef SPECTRUM_H #define SPECTRUM_H -#include <qglobal.h> -#include "utils.h" #include "fftreal_wrapper.h" // For FFTLengthPowerOfTwo +#include "utils.h" + +#include <QtGlobal> //----------------------------------------------------------------------------- // Constants //----------------------------------------------------------------------------- // Number of audio samples used to calculate the frequency spectrum -const int SpectrumLengthSamples = PowerOfTwo<FFTLengthPowerOfTwo>::Result; +const int SpectrumLengthSamples = PowerOfTwo<FFTLengthPowerOfTwo>::Result; // Number of bands in the frequency spectrum -const int SpectrumNumBands = 10; +const int SpectrumNumBands = 10; // Lower bound of first band in the spectrum -const qreal SpectrumLowFreq = 0.0; // Hz +const qreal SpectrumLowFreq = 0.0; // Hz // Upper band of last band in the spectrum -const qreal SpectrumHighFreq = 1000.0; // Hz +const qreal SpectrumHighFreq = 1000.0; // Hz // Waveform window size in microseconds const qint64 WaveformWindowDuration = 500 * 1000; @@ -32,63 +33,59 @@ const qint64 WaveformWindowDuration = 500 * 1000; // available until some time after QAudio*::start() has been called, and we // need this value in order to initialize the waveform display. // We therefore just choose a sensible value. -const int WaveformTileLength = 4096; +const int WaveformTileLength = 4096; // Fudge factor used to calculate the spectrum bar heights const qreal SpectrumAnalyserMultiplier = 0.15; // Disable message timeout -const int NullMessageTimeout = -1; - +const int NullMessageTimeout = -1; //----------------------------------------------------------------------------- // Types and data structures //----------------------------------------------------------------------------- -enum WindowFunction { - NoWindow, - HannWindow -}; +enum WindowFunction { NoWindow, HannWindow }; Q_DECLARE_METATYPE(WindowFunction) const WindowFunction DefaultWindowFunction = HannWindow; struct Tone { - Tone(qreal freq = 0.0, qreal amp = 0.0) - : frequency(freq), amplitude(amp) - { } + Tone(qreal freq = 0.0, qreal amp = 0.0) : frequency(freq), amplitude(amp) { } // Start and end frequencies for swept tone generation - qreal frequency; + qreal frequency; // Amplitude in range [0.0, 1.0] - qreal amplitude; + qreal amplitude; }; struct SweptTone { SweptTone(qreal start = 0.0, qreal end = 0.0, qreal amp = 0.0) - : startFreq(start), endFreq(end), amplitude(amp) - { Q_ASSERT(end >= start); } + : startFreq(start), endFreq(end), amplitude(amp) + { + Q_ASSERT(end >= start); + } SweptTone(const Tone &tone) - : startFreq(tone.frequency), endFreq(tone.frequency), amplitude(tone.amplitude) - { } + : startFreq(tone.frequency), endFreq(tone.frequency), amplitude(tone.amplitude) + { + } // Start and end frequencies for swept tone generation - qreal startFreq; - qreal endFreq; + qreal startFreq; + qreal endFreq; // Amplitude in range [0.0, 1.0] - qreal amplitude; + qreal amplitude; }; // Handle some dependencies between macros defined in the .pro file #ifdef DISABLE_WAVEFORM -#undef SUPERIMPOSE_PROGRESS_ON_WAVEFORM +# undef SUPERIMPOSE_PROGRESS_ON_WAVEFORM #endif #endif // SPECTRUM_H - diff --git a/examples/multimedia/spectrum/spectrumanalyser.cpp b/examples/multimedia/spectrum/spectrumanalyser.cpp index ced777058..07d6a6a6e 100644 --- a/examples/multimedia/spectrum/spectrumanalyser.cpp +++ b/examples/multimedia/spectrum/spectrumanalyser.cpp @@ -2,27 +2,30 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "spectrumanalyser.h" -#include "utils.h" #include "fftreal_wrapper.h" +#include "utils.h" -#include <qmath.h> -#include <qmetatype.h> #include <QAudioFormat> +#include <QMetaType> #include <QThread> +#include <QtMath> SpectrumAnalyserThread::SpectrumAnalyserThread(QObject *parent) - : QObject(parent) + : QObject(parent) #ifndef DISABLE_FFT - , m_fft(new FFTRealWrapper) + , + m_fft(new FFTRealWrapper) #endif - , m_numSamples(SpectrumLengthSamples) - , m_windowFunction(DefaultWindowFunction) - , m_window(SpectrumLengthSamples, 0.0) - , m_input(SpectrumLengthSamples, 0.0) - , m_output(SpectrumLengthSamples, 0.0) - , m_spectrum(SpectrumLengthSamples) + , + m_numSamples(SpectrumLengthSamples), + m_windowFunction(DefaultWindowFunction), + m_window(SpectrumLengthSamples, 0.0), + m_input(SpectrumLengthSamples, 0.0), + m_output(SpectrumLengthSamples, 0.0), + m_spectrum(SpectrumLengthSamples) #ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD - , m_thread(new QThread(this)) + , + m_thread(new QThread(this)) #endif { #ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD @@ -49,7 +52,7 @@ void SpectrumAnalyserThread::setWindowFunction(WindowFunction type) void SpectrumAnalyserThread::calculateWindow() { - for (int i=0; i<m_numSamples; ++i) { + for (int i = 0; i < m_numSamples; ++i) { DataType x = 0.0; switch (m_windowFunction) { @@ -67,17 +70,16 @@ void SpectrumAnalyserThread::calculateWindow() } } -void SpectrumAnalyserThread::calculateSpectrum(const QByteArray &buffer, - int inputFrequency, - int bytesPerFrame) +void SpectrumAnalyserThread::calculateSpectrum(const QByteArray &buffer, int inputFrequency, + int bytesPerFrame) { #ifndef DISABLE_FFT Q_ASSERT(buffer.size() == m_numSamples * bytesPerFrame); // Initialize data array const char *ptr = buffer.constData(); - for (int i=0; i<m_numSamples; ++i) { - const qint16 pcmSample = *reinterpret_cast<const qint16*>(ptr); + for (int i = 0; i < m_numSamples; ++i) { + const qint16 pcmSample = *reinterpret_cast<const qint16 *>(ptr); // Scale down to range [-1.0, 1.0] const DataType realSample = pcmToReal(pcmSample); const DataType windowedSample = realSample * m_window[i]; @@ -89,16 +91,16 @@ void SpectrumAnalyserThread::calculateSpectrum(const QByteArray &buffer, m_fft->calculateFFT(m_output.data(), m_input.data()); // Analyze output to obtain amplitude and phase for each frequency - for (int i=2; i<=m_numSamples/2; ++i) { + for (int i = 2; i <= m_numSamples / 2; ++i) { // Calculate frequency of this complex sample m_spectrum[i].frequency = qreal(i * inputFrequency) / (m_numSamples); const qreal real = m_output[i]; qreal imag = 0.0; - if (i>0 && i<m_numSamples/2) - imag = m_output[m_numSamples/2 + i]; + if (i > 0 && i < m_numSamples / 2) + imag = m_output[m_numSamples / 2 + i]; - const qreal magnitude = qSqrt(real*real + imag*imag); + const qreal magnitude = qSqrt(real * real + imag * imag); qreal amplitude = SpectrumAnalyserMultiplier * qLn(magnitude); // Bound amplitude to [0.0, 1.0] @@ -112,21 +114,21 @@ void SpectrumAnalyserThread::calculateSpectrum(const QByteArray &buffer, emit calculationComplete(m_spectrum); } - //============================================================================= // SpectrumAnalyser //============================================================================= SpectrumAnalyser::SpectrumAnalyser(QObject *parent) - : QObject(parent) - , m_thread(new SpectrumAnalyserThread(this)) - , m_state(Idle) + : QObject(parent), + m_thread(new SpectrumAnalyserThread(this)), + m_state(Idle) #ifdef DUMP_SPECTRUMANALYSER - , m_count(0) + , + m_count(0) #endif { - connect(m_thread, &SpectrumAnalyserThread::calculationComplete, - this, &SpectrumAnalyser::calculationComplete); + connect(m_thread, &SpectrumAnalyserThread::calculationComplete, this, + &SpectrumAnalyser::calculationComplete); } SpectrumAnalyser::~SpectrumAnalyser() = default; @@ -147,21 +149,18 @@ void SpectrumAnalyser::setOutputPath(const QString &outputDir) void SpectrumAnalyser::setWindowFunction(WindowFunction type) { - const bool b = QMetaObject::invokeMethod(m_thread, "setWindowFunction", - Qt::AutoConnection, - Q_ARG(WindowFunction, type)); + const bool b = QMetaObject::invokeMethod(m_thread, "setWindowFunction", Qt::AutoConnection, + Q_ARG(WindowFunction, type)); Q_ASSERT(b); Q_UNUSED(b); // suppress warnings in release builds } -void SpectrumAnalyser::calculate(const QByteArray &buffer, - const QAudioFormat &format) +void SpectrumAnalyser::calculate(const QByteArray &buffer, const QAudioFormat &format) { // QThread::currentThread is marked 'for internal use only', but // we're only using it for debug output here, so it's probably OK :) - SPECTRUMANALYSER_DEBUG << "SpectrumAnalyser::calculate" - << QThread::currentThread() - << "state" << m_state; + SPECTRUMANALYSER_DEBUG << "SpectrumAnalyser::calculate" << QThread::currentThread() << "state" + << m_state; if (isReady()) { Q_ASSERT(format.sampleFormat() == QAudioFormat::Int16); @@ -170,15 +169,16 @@ void SpectrumAnalyser::calculate(const QByteArray &buffer, #ifdef DUMP_SPECTRUMANALYSER m_count++; - const QString pcmFileName = m_outputDir.filePath(QString("spectrum_%1.pcm").arg(m_count, 4, 10, QChar('0'))); + const QString pcmFileName = + m_outputDir.filePath(QString("spectrum_%1.pcm").arg(m_count, 4, 10, QChar('0'))); QFile pcmFile(pcmFileName); pcmFile.open(QIODevice::WriteOnly); const int bufferLength = m_numSamples * bytesPerFrame; pcmFile.write(buffer, bufferLength); m_textStream << "TimeDomain " << m_count << "\n"; - const qint16* input = reinterpret_cast<const qint16*>(buffer); - for (int i=0; i<m_numSamples; ++i) { + const qint16 *input = reinterpret_cast<const qint16 *>(buffer); + for (int i = 0; i < m_numSamples; ++i) { m_textStream << i << "\t" << *input << "\n"; input += format.channels(); } @@ -191,22 +191,18 @@ void SpectrumAnalyser::calculate(const QByteArray &buffer, // calculation will be done in the child thread. // Once the calculation is finished, a calculationChanged signal will be // emitted by m_thread. - const bool b = QMetaObject::invokeMethod(m_thread, "calculateSpectrum", - Qt::AutoConnection, - Q_ARG(QByteArray, buffer), - Q_ARG(int, format.sampleRate()), - Q_ARG(int, bytesPerFrame)); + const bool b = QMetaObject::invokeMethod( + m_thread, "calculateSpectrum", Qt::AutoConnection, Q_ARG(QByteArray, buffer), + Q_ARG(int, format.sampleRate()), Q_ARG(int, bytesPerFrame)); Q_ASSERT(b); Q_UNUSED(b); // suppress warnings in release builds #ifdef DUMP_SPECTRUMANALYSER m_textStream << "FrequencySpectrum " << m_count << "\n"; FrequencySpectrum::const_iterator x = m_spectrum.begin(); - for (int i=0; i<m_numSamples; ++i, ++x) - m_textStream << i << "\t" - << x->frequency << "\t" - << x->amplitude<< "\t" - << x->phase << "\n"; + for (int i = 0; i < m_numSamples; ++i, ++x) + m_textStream << i << "\t" << x->frequency << "\t" << x->amplitude << "\t" << x->phase + << "\n"; #endif } } @@ -222,7 +218,6 @@ void SpectrumAnalyser::cancelCalculation() m_state = Cancelled; } - //----------------------------------------------------------------------------- // Private slots //----------------------------------------------------------------------------- diff --git a/examples/multimedia/spectrum/spectrumanalyser.h b/examples/multimedia/spectrum/spectrumanalyser.h index b865fa359..202e602fe 100644 --- a/examples/multimedia/spectrum/spectrumanalyser.h +++ b/examples/multimedia/spectrum/spectrumanalyser.h @@ -4,21 +4,21 @@ #ifndef SPECTRUMANALYSER_H #define SPECTRUMANALYSER_H +#include "frequencyspectrum.h" +#include "spectrum.h" + #include <QByteArray> -#include <QObject> #include <QList> +#include <QObject> #ifdef DUMP_SPECTRUMANALYSER -#include <QDir> -#include <QFile> -#include <QTextStream> +# include <QDir> +# include <QFile> +# include <QTextStream> #endif -#include "frequencyspectrum.h" -#include "spectrum.h" - #ifndef DISABLE_FFT -#include "FFTRealFixLenParam.h" +# include "FFTRealFixLenParam.h" #endif QT_FORWARD_DECLARE_CLASS(QAudioFormat) @@ -42,9 +42,7 @@ public: public slots: void setWindowFunction(WindowFunction type); - void calculateSpectrum(const QByteArray &buffer, - int inputFrequency, - int bytesPerSample); + void calculateSpectrum(const QByteArray &buffer, int inputFrequency, int bytesPerSample); signals: void calculationComplete(const FrequencySpectrum &spectrum); @@ -54,27 +52,27 @@ private: private: #ifndef DISABLE_FFT - FFTRealWrapper* m_fft; + FFTRealWrapper *m_fft; #endif - const int m_numSamples; + const int m_numSamples; - WindowFunction m_windowFunction; + WindowFunction m_windowFunction; #ifdef DISABLE_FFT - typedef qreal DataType; + typedef qreal DataType; #else - typedef FFTRealFixLenParam::DataType DataType; + typedef FFTRealFixLenParam::DataType DataType; #endif - QList<DataType> m_window; + QList<DataType> m_window; - QList<DataType> m_input; - QList<DataType> m_output; + QList<DataType> m_input; + QList<DataType> m_output; - FrequencySpectrum m_spectrum; + FrequencySpectrum m_spectrum; #ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD - QThread* m_thread; + QThread *m_thread; #endif }; @@ -87,7 +85,7 @@ class SpectrumAnalyser : public QObject Q_OBJECT public: - SpectrumAnalyser(QObject *parent = 0); + SpectrumAnalyser(QObject *parent = nullptr); ~SpectrumAnalyser(); #ifdef DUMP_SPECTRUMANALYSER @@ -136,24 +134,18 @@ private: void calculateWindow(); private: + SpectrumAnalyserThread *m_thread; - SpectrumAnalyserThread* m_thread; + enum State { Idle, Busy, Cancelled }; - enum State { - Idle, - Busy, - Cancelled - }; - - State m_state; + State m_state; #ifdef DUMP_SPECTRUMANALYSER - QDir m_outputDir; - int m_count; - QFile m_textFile; - QTextStream m_textStream; + QDir m_outputDir; + int m_count; + QFile m_textFile; + QTextStream m_textStream; #endif }; #endif // SPECTRUMANALYSER_H - diff --git a/examples/multimedia/spectrum/tonegenerator.cpp b/examples/multimedia/spectrum/tonegenerator.cpp index 1a7f64184..5df1df44d 100644 --- a/examples/multimedia/spectrum/tonegenerator.cpp +++ b/examples/multimedia/spectrum/tonegenerator.cpp @@ -3,10 +3,11 @@ #include "spectrum.h" #include "utils.h" -#include <QByteArray> + #include <QAudioFormat> -#include <qmath.h> -#include <qendian.h> +#include <QByteArray> +#include <QtEndian> +#include <QtMath> void generateTone(const SweptTone &tone, const QAudioFormat &format, QByteArray &buffer) { @@ -39,7 +40,7 @@ void generateTone(const SweptTone &tone, const QAudioFormat &format, QByteArray while (length) { const qreal x = tone.amplitude * qSin(phase); const qint16 value = realToPcm(x); - for (int i=0; i<format.channelCount(); ++i) { + for (int i = 0; i < format.channelCount(); ++i) { qToLittleEndian<qint16>(value, ptr); ptr += channelBytes; length -= channelBytes; diff --git a/examples/multimedia/spectrum/tonegenerator.h b/examples/multimedia/spectrum/tonegenerator.h index 449734470..2c331fb3c 100644 --- a/examples/multimedia/spectrum/tonegenerator.h +++ b/examples/multimedia/spectrum/tonegenerator.h @@ -4,9 +4,10 @@ #ifndef TONEGENERATOR_H #define TONEGENERATOR_H -#include <qglobal.h> #include "spectrum.h" +#include <QtGlobal> + QT_BEGIN_NAMESPACE class QAudioFormat; class QByteArray; @@ -18,4 +19,3 @@ QT_END_NAMESPACE void generateTone(const SweptTone &tone, const QAudioFormat &format, QByteArray &buffer); #endif // TONEGENERATOR_H - diff --git a/examples/multimedia/spectrum/tonegeneratordialog.cpp b/examples/multimedia/spectrum/tonegeneratordialog.cpp index 21baac3b7..c0ca107d5 100644 --- a/examples/multimedia/spectrum/tonegeneratordialog.cpp +++ b/examples/multimedia/spectrum/tonegeneratordialog.cpp @@ -2,14 +2,15 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "tonegeneratordialog.h" + +#include <QCheckBox> #include <QComboBox> #include <QDialogButtonBox> #include <QLabel> #include <QPushButton> -#include <QVBoxLayout> -#include <QCheckBox> #include <QSlider> #include <QSpinBox> +#include <QVBoxLayout> const int ToneGeneratorFreqMin = 1; const int ToneGeneratorFreqMax = 1000; @@ -17,15 +18,15 @@ const int ToneGeneratorFreqDefault = 440; const int ToneGeneratorAmplitudeDefault = 75; ToneGeneratorDialog::ToneGeneratorDialog(QWidget *parent) - : QDialog(parent) - , m_toneGeneratorSweepCheckBox(new QCheckBox(tr("Frequency sweep"), this)) - , m_frequencySweepEnabled(true) - , m_toneGeneratorControl(new QWidget(this)) - , m_toneGeneratorFrequencyControl(new QWidget(this)) - , m_frequencySlider(new QSlider(Qt::Horizontal, this)) - , m_frequencySpinBox(new QSpinBox(this)) - , m_frequency(ToneGeneratorFreqDefault) - , m_amplitudeSlider(new QSlider(Qt::Horizontal, this)) + : QDialog(parent), + m_toneGeneratorSweepCheckBox(new QCheckBox(tr("Frequency sweep"), this)), + m_frequencySweepEnabled(true), + m_toneGeneratorControl(new QWidget(this)), + m_toneGeneratorFrequencyControl(new QWidget(this)), + m_frequencySlider(new QSlider(Qt::Horizontal, this)), + m_frequencySpinBox(new QSpinBox(this)), + m_frequency(ToneGeneratorFreqDefault), + m_amplitudeSlider(new QSlider(Qt::Horizontal, this)) { QVBoxLayout *dialogLayout = new QVBoxLayout(this); @@ -59,12 +60,11 @@ ToneGeneratorDialog::ToneGeneratorDialog(QWidget *parent) dialogLayout->addWidget(m_toneGeneratorControl); // Connect - connect(m_toneGeneratorSweepCheckBox, &QCheckBox::toggled, - this, &ToneGeneratorDialog::frequencySweepEnabled); - connect(m_frequencySlider, &QSlider::valueChanged, - m_frequencySpinBox, &QSpinBox::setValue); - connect(m_frequencySpinBox, QOverload<int>::of(&QSpinBox::valueChanged), - m_frequencySlider, &QSlider::setValue); + connect(m_toneGeneratorSweepCheckBox, &QCheckBox::toggled, this, + &ToneGeneratorDialog::frequencySweepEnabled); + connect(m_frequencySlider, &QSlider::valueChanged, m_frequencySpinBox, &QSpinBox::setValue); + connect(m_frequencySpinBox, QOverload<int>::of(&QSpinBox::valueChanged), m_frequencySlider, + &QSlider::setValue); // Add standard buttons to layout QDialogButtonBox *buttonBox = new QDialogButtonBox(this); @@ -72,10 +72,10 @@ ToneGeneratorDialog::ToneGeneratorDialog(QWidget *parent) dialogLayout->addWidget(buttonBox); // Connect standard buttons - connect(buttonBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, - this, &ToneGeneratorDialog::accept); - connect(buttonBox->button(QDialogButtonBox::Cancel), &QPushButton::clicked, - this, &ToneGeneratorDialog::reject); + connect(buttonBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, + &ToneGeneratorDialog::accept); + connect(buttonBox->button(QDialogButtonBox::Cancel), &QPushButton::clicked, this, + &ToneGeneratorDialog::reject); setLayout(dialogLayout); } diff --git a/examples/multimedia/spectrum/tonegeneratordialog.h b/examples/multimedia/spectrum/tonegeneratordialog.h index 269ce8706..a922610a3 100644 --- a/examples/multimedia/spectrum/tonegeneratordialog.h +++ b/examples/multimedia/spectrum/tonegeneratordialog.h @@ -5,6 +5,7 @@ #define TONEGENERATORDIALOG_H #include "spectrum.h" + #include <QAudioDevice> #include <QDialog> @@ -23,7 +24,7 @@ class ToneGeneratorDialog : public QDialog Q_OBJECT public: - explicit ToneGeneratorDialog(QWidget *parent = 0); + explicit ToneGeneratorDialog(QWidget *parent = nullptr); ~ToneGeneratorDialog(); bool isFrequencySweepEnabled() const; diff --git a/examples/multimedia/spectrum/utils.cpp b/examples/multimedia/spectrum/utils.cpp index af0695fad..f73571569 100644 --- a/examples/multimedia/spectrum/utils.cpp +++ b/examples/multimedia/spectrum/utils.cpp @@ -1,8 +1,8 @@ // Copyright (C) 2017 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -#include <QAudioFormat> #include "utils.h" +#include <QAudioFormat> qreal nyquistFrequency(const QAudioFormat &format) { @@ -45,17 +45,17 @@ QString formatToString(const QAudioFormat &format) } result = QString("%1 Hz %2 bit %3 %4") - .arg(format.sampleRate()) - .arg(format.bytesPerSample() * 8) - .arg(formatType) - .arg(formatChannels); + .arg(format.sampleRate()) + .arg(format.bytesPerSample() * 8) + .arg(formatType) + .arg(formatChannels); } return result; } -const qint16 PCMS16MaxValue = 32767; -const quint16 PCMS16MaxAmplitude = 32768; // because minimum is -32768 +const qint16 PCMS16MaxValue = 32767; +const quint16 PCMS16MaxAmplitude = 32768; // because minimum is -32768 qreal pcmToReal(qint16 pcm) { diff --git a/examples/multimedia/spectrum/utils.h b/examples/multimedia/spectrum/utils.h index fe53bad34..da0711c66 100644 --- a/examples/multimedia/spectrum/utils.h +++ b/examples/multimedia/spectrum/utils.h @@ -4,8 +4,8 @@ #ifndef UTILS_H #define UTILS_H -#include <QtCore/qglobal.h> #include <QDebug> +#include <QtGlobal> QT_FORWARD_DECLARE_CLASS(QAudioFormat) @@ -25,12 +25,19 @@ qint16 realToPcm(qreal real); // Compile-time calculation of powers of two -template<int N> class PowerOfTwo -{ public: static const int Result = PowerOfTwo<N-1>::Result * 2; }; - -template<> class PowerOfTwo<0> -{ public: static const int Result = 1; }; +template<int N> +class PowerOfTwo +{ +public: + static const int Result = PowerOfTwo<N - 1>::Result * 2; +}; +template<> +class PowerOfTwo<0> +{ +public: + static const int Result = 1; +}; //----------------------------------------------------------------------------- // Debug output @@ -39,28 +46,34 @@ template<> class PowerOfTwo<0> class NullDebug { public: - template <typename T> - NullDebug& operator<<(const T&) { return *this; } + template<typename T> + NullDebug &operator<<(const T &) + { + return *this; + } }; -inline NullDebug nullDebug() { return NullDebug(); } +inline NullDebug nullDebug() +{ + return NullDebug(); +} #ifdef LOG_ENGINE -# define ENGINE_DEBUG qDebug() +# define ENGINE_DEBUG qDebug() #else -# define ENGINE_DEBUG nullDebug() +# define ENGINE_DEBUG nullDebug() #endif #ifdef LOG_SPECTRUMANALYSER -# define SPECTRUMANALYSER_DEBUG qDebug() +# define SPECTRUMANALYSER_DEBUG qDebug() #else -# define SPECTRUMANALYSER_DEBUG nullDebug() +# define SPECTRUMANALYSER_DEBUG nullDebug() #endif #ifdef LOG_WAVEFORM -# define WAVEFORM_DEBUG qDebug() +# define WAVEFORM_DEBUG qDebug() #else -# define WAVEFORM_DEBUG nullDebug() +# define WAVEFORM_DEBUG nullDebug() #endif #endif // UTILS_H diff --git a/examples/multimedia/spectrum/waveform.cpp b/examples/multimedia/spectrum/waveform.cpp index ef7f27cc0..d978b952d 100644 --- a/examples/multimedia/spectrum/waveform.cpp +++ b/examples/multimedia/spectrum/waveform.cpp @@ -3,27 +3,28 @@ #include "waveform.h" #include "utils.h" + +#include <QDebug> #include <QPainter> #include <QResizeEvent> -#include <QDebug> //#define PAINT_EVENT_TRACE #ifdef PAINT_EVENT_TRACE -# define WAVEFORM_PAINT_DEBUG qDebug() +# define WAVEFORM_PAINT_DEBUG qDebug() #else -# define WAVEFORM_PAINT_DEBUG nullDebug() +# define WAVEFORM_PAINT_DEBUG nullDebug() #endif Waveform::Waveform(QWidget *parent) - : QWidget(parent) - , m_bufferPosition(0) - , m_bufferLength(0) - , m_audioPosition(0) - , m_active(false) - , m_tileLength(0) - , m_tileArrayStart(0) - , m_windowPosition(0) - , m_windowLength(0) + : QWidget(parent), + m_bufferPosition(0), + m_bufferLength(0), + m_audioPosition(0), + m_active(false), + m_tileLength(0), + m_tileArrayStart(0), + m_windowPosition(0), + m_windowLength(0) { setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); setMinimumHeight(50); @@ -42,24 +43,23 @@ void Waveform::paintEvent(QPaintEvent * /*event*/) if (m_active) { WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" - << "windowPosition" << m_windowPosition - << "windowLength" << m_windowLength; + << "windowPosition" << m_windowPosition << "windowLength" + << m_windowLength; qint64 pos = m_windowPosition; const qint64 windowEnd = m_windowPosition + m_windowLength; int destLeft = 0; int destRight = 0; while (pos < windowEnd) { const TilePoint point = tilePoint(pos); - WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "pos" << pos - << "tileIndex" << point.index - << "positionOffset" << point.positionOffset - << "pixelOffset" << point.pixelOffset; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" + << "pos" << pos << "tileIndex" << point.index << "positionOffset" + << point.positionOffset << "pixelOffset" << point.pixelOffset; if (point.index != NullIndex) { const Tile &tile = m_tiles[point.index]; if (tile.painted) { - const qint64 sectionLength = qMin((m_tileLength - point.positionOffset), - (windowEnd - pos)); + const qint64 sectionLength = + qMin((m_tileLength - point.positionOffset), (windowEnd - pos)); Q_ASSERT(sectionLength > 0); const int sourceRight = tilePixelOffset(point.positionOffset + sectionLength); @@ -73,9 +73,10 @@ void Waveform::paintEvent(QPaintEvent * /*event*/) sourceRect.setLeft(point.pixelOffset); sourceRect.setRight(sourceRight); - WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "tileIndex" << point.index - << "source" << point.pixelOffset << sourceRight - << "dest" << destLeft << destRight; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" + << "tileIndex" << point.index << "source" + << point.pixelOffset << sourceRight << "dest" << destLeft + << destRight; painter.drawPixmap(destRect, *tile.pixmap, sourceRect); @@ -83,25 +84,30 @@ void Waveform::paintEvent(QPaintEvent * /*event*/) if (point.index < m_tiles.count()) { pos = tilePosition(point.index + 1); - WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "pos ->" << pos; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" + << "pos ->" << pos; } else { // Reached end of tile array - WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "reached end of tile array"; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" + << "reached end of tile array"; break; } } else { // Passed last tile which is painted - WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "tile" << point.index << "not painted"; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" + << "tile" << point.index << "not painted"; break; } } else { // pos is past end of tile array - WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "pos" << pos << "past end of tile array"; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" + << "pos" << pos << "past end of tile array"; break; } } - WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "final pos" << pos << "final x" << destRight; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" + << "final pos" << pos << "final x" << destRight; } } @@ -111,11 +117,12 @@ void Waveform::resizeEvent(QResizeEvent *event) createPixmaps(event->size()); } -void Waveform::initialize(const QAudioFormat &format, qint64 audioBufferSize, qint64 windowDurationUs) +void Waveform::initialize(const QAudioFormat &format, qint64 audioBufferSize, + qint64 windowDurationUs) { WAVEFORM_DEBUG << "Waveform::initialize" - << "audioBufferSize" << audioBufferSize - << "windowDurationUs" << windowDurationUs; + << "audioBufferSize" << audioBufferSize << "windowDurationUs" + << windowDurationUs; reset(); @@ -138,9 +145,8 @@ void Waveform::initialize(const QAudioFormat &format, qint64 audioBufferSize, qi } WAVEFORM_DEBUG << "Waveform::initialize" - << "tileLength" << m_tileLength - << "windowLength" << m_windowLength - << "nTiles" << nTiles; + << "tileLength" << m_tileLength << "windowLength" << m_windowLength << "nTiles" + << nTiles; m_pixmaps.fill(nullptr, nTiles); m_tiles.resize(nTiles); @@ -170,8 +176,7 @@ void Waveform::reset() void Waveform::bufferChanged(qint64 position, qint64 length, const QByteArray &buffer) { WAVEFORM_DEBUG << "Waveform::bufferChanged" - << "audioPosition" << m_audioPosition - << "bufferPosition" << position + << "audioPosition" << m_audioPosition << "bufferPosition" << position << "bufferLength" << length; m_bufferPosition = position; m_bufferLength = length; @@ -182,8 +187,7 @@ void Waveform::bufferChanged(qint64 position, qint64 length, const QByteArray &b void Waveform::audioPositionChanged(qint64 position) { WAVEFORM_DEBUG << "Waveform::audioPositionChanged" - << "audioPosition" << position - << "bufferPosition" << m_bufferPosition + << "audioPosition" << position << "bufferPosition" << m_bufferPosition << "bufferLength" << m_bufferLength; if (position >= m_bufferPosition) { @@ -205,19 +209,18 @@ void Waveform::createPixmaps(const QSize &widgetSize) m_pixmapSize.setWidth(qreal(widgetSize.width()) * m_tileLength / m_windowLength); WAVEFORM_DEBUG << "Waveform::createPixmaps" - << "widgetSize" << widgetSize - << "pixmapSize" << m_pixmapSize; + << "widgetSize" << widgetSize << "pixmapSize" << m_pixmapSize; Q_ASSERT(m_tiles.count() == m_pixmaps.count()); // (Re)create pixmaps - for (auto & pixmap : m_pixmaps) { + for (auto &pixmap : m_pixmaps) { delete pixmap; pixmap = new QPixmap(m_pixmapSize); } // Update tile pixmap pointers, and mark for repainting - for (int i=0; i<m_tiles.count(); ++i) { + for (int i = 0; i < m_tiles.count(); ++i) { m_tiles[i].pixmap = m_pixmaps[i]; m_tiles[i].painted = false; } @@ -226,14 +229,14 @@ void Waveform::createPixmaps(const QSize &widgetSize) void Waveform::setWindowPosition(qint64 position) { WAVEFORM_DEBUG << "Waveform::setWindowPosition" - << "old" << m_windowPosition << "new" << position - << "tileArrayStart" << m_tileArrayStart; + << "old" << m_windowPosition << "new" << position << "tileArrayStart" + << m_tileArrayStart; const qint64 oldPosition = m_windowPosition; m_windowPosition = position; - if ((m_windowPosition >= oldPosition) && - (m_windowPosition - m_tileArrayStart < (m_tiles.count() * m_tileLength))) { + if ((m_windowPosition >= oldPosition) + && (m_windowPosition - m_tileArrayStart < (m_tiles.count() * m_tileLength))) { // Work out how many tiles need to be shuffled const qint64 offset = m_windowPosition - m_tileArrayStart; const int nTiles = offset / m_tileLength; @@ -288,7 +291,7 @@ bool Waveform::paintTiles() WAVEFORM_DEBUG << "Waveform::paintTiles"; bool updateRequired = false; - for (int i=0; i<m_tiles.count(); ++i) { + for (int i = 0; i < m_tiles.count(); ++i) { const Tile &tile = m_tiles[i]; if (!tile.painted) { const qint64 tileStart = m_tileArrayStart + i * m_tileLength; @@ -311,11 +314,8 @@ void Waveform::paintTile(int index) const qint64 tileStart = m_tileArrayStart + index * m_tileLength; WAVEFORM_DEBUG << "Waveform::paintTile" - << "index" << index - << "bufferPosition" << m_bufferPosition - << "bufferLength" << m_bufferLength - << "start" << tileStart - << "end" << tileStart + m_tileLength; + << "index" << index << "bufferPosition" << m_bufferPosition << "bufferLength" + << m_bufferLength << "start" << tileStart << "end" << tileStart + m_tileLength; Q_ASSERT(m_bufferPosition <= tileStart); Q_ASSERT(m_bufferPosition + m_bufferLength >= tileStart + m_tileLength); @@ -323,8 +323,8 @@ void Waveform::paintTile(int index) Tile &tile = m_tiles[index]; Q_ASSERT(!tile.painted); - const qint16* base = reinterpret_cast<const qint16*>(m_buffer.constData()); - const qint16* buffer = base + ((tileStart - m_bufferPosition) / 2); + const qint16 *base = reinterpret_cast<const qint16 *>(m_buffer.constData()); + const qint16 *buffer = base + ((tileStart - m_bufferPosition) / 2); const int numSamples = m_tileLength / (2 * m_format.channelCount()); QPainter painter(tile.pixmap); @@ -346,10 +346,10 @@ void Waveform::paintTile(int index) QLine line(origin, origin); - for (int i=0; i<numSamples; ++i) { - const qint16* ptr = buffer + i * m_format.channelCount(); + for (int i = 0; i < numSamples; ++i) { + const qint16 *ptr = buffer + i * m_format.channelCount(); - const int offset = reinterpret_cast<const char*>(ptr) - m_buffer.constData(); + const int offset = reinterpret_cast<const char *>(ptr) - m_buffer.constData(); Q_ASSERT(offset >= 0); Q_ASSERT(offset < m_bufferLength); Q_UNUSED(offset); @@ -370,7 +370,8 @@ void Waveform::paintTile(int index) void Waveform::shuffleTiles(int n) { - WAVEFORM_DEBUG << "Waveform::shuffleTiles" << "n" << n; + WAVEFORM_DEBUG << "Waveform::shuffleTiles" + << "n" << n; while (n--) { Tile tile = m_tiles.first(); @@ -380,17 +381,18 @@ void Waveform::shuffleTiles(int n) m_tileArrayStart += m_tileLength; } - WAVEFORM_DEBUG << "Waveform::shuffleTiles" << "tileArrayStart" << m_tileArrayStart; + WAVEFORM_DEBUG << "Waveform::shuffleTiles" + << "tileArrayStart" << m_tileArrayStart; } void Waveform::resetTiles(qint64 newStartPos) { - WAVEFORM_DEBUG << "Waveform::resetTiles" << "newStartPos" << newStartPos; + WAVEFORM_DEBUG << "Waveform::resetTiles" + << "newStartPos" << newStartPos; QList<Tile>::iterator i = m_tiles.begin(); - for ( ; i != m_tiles.end(); ++i) + for (; i != m_tiles.end(); ++i) i->painted = false; m_tileArrayStart = newStartPos; } - diff --git a/examples/multimedia/spectrum/waveform.h b/examples/multimedia/spectrum/waveform.h index 9d877d5bf..86fda9962 100644 --- a/examples/multimedia/spectrum/waveform.h +++ b/examples/multimedia/spectrum/waveform.h @@ -23,7 +23,7 @@ class Waveform : public QWidget Q_OBJECT public: - explicit Waveform(QWidget *parent = 0); + explicit Waveform(QWidget *parent = nullptr); ~Waveform(); // QWidget @@ -68,17 +68,18 @@ private: struct TilePoint { TilePoint(int idx = 0, qint64 pos = 0, qint64 pix = 0) - : index(idx), positionOffset(pos), pixelOffset(pix) - { } + : index(idx), positionOffset(pos), pixelOffset(pix) + { + } // Index of tile - int index; + int index; // Number of bytes from start of tile - qint64 positionOffset; + qint64 positionOffset; // Number of pixels from left of corresponding pixmap - int pixelOffset; + int pixelOffset; }; /* @@ -130,36 +131,37 @@ private: void resetTiles(qint64 newStartPos); private: - qint64 m_bufferPosition; - qint64 m_bufferLength; - QByteArray m_buffer; + qint64 m_bufferPosition; + qint64 m_bufferLength; + QByteArray m_buffer; - qint64 m_audioPosition; - QAudioFormat m_format; + qint64 m_audioPosition; + QAudioFormat m_format; - bool m_active; + bool m_active; - QSize m_pixmapSize; - QList<QPixmap*> m_pixmaps; + QSize m_pixmapSize; + QList<QPixmap *> m_pixmaps; - struct Tile { + struct Tile + { // Pointer into parent m_pixmaps array - QPixmap* pixmap; + QPixmap *pixmap; // Flag indicating whether this tile has been painted - bool painted; + bool painted; }; - QList<Tile> m_tiles; + QList<Tile> m_tiles; // Length of audio data in bytes depicted by each tile - qint64 m_tileLength; + qint64 m_tileLength; // Position in bytes of the first tile, relative to m_buffer - qint64 m_tileArrayStart; + qint64 m_tileArrayStart; - qint64 m_windowPosition; - qint64 m_windowLength; + qint64 m_windowPosition; + qint64 m_windowLength; }; #endif // WAVEFORM_H diff --git a/examples/multimedia/video/mediaplayer/main.cpp b/examples/multimedia/video/mediaplayer/main.cpp index 7fccbc05c..e2b22db4b 100644 --- a/examples/multimedia/video/mediaplayer/main.cpp +++ b/examples/multimedia/video/mediaplayer/main.cpp @@ -1,10 +1,10 @@ // Copyright (C) 2021 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -#include <QGuiApplication> -#include <QQmlApplicationEngine> #include <QCommandLineParser> #include <QDir> +#include <QGuiApplication> +#include <QQmlApplicationEngine> int main(int argc, char *argv[]) { @@ -25,10 +25,11 @@ int main(int argc, char *argv[]) if (!parser.positionalArguments().isEmpty()) { QUrl source = QUrl::fromUserInput(parser.positionalArguments().at(0), QDir::currentPath()); - QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, [source](QObject *object, const QUrl &){ - qDebug() << "setting source"; - object->setProperty("source", source); - }); + QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, + [source](QObject *object, const QUrl &) { + qDebug() << "setting source"; + object->setProperty("source", source); + }); } engine.load(url); diff --git a/examples/multimedia/video/qmlvideo/frequencymonitor.cpp b/examples/multimedia/video/qmlvideo/frequencymonitor.cpp index 71f155f99..61be58167 100644 --- a/examples/multimedia/video/qmlvideo/frequencymonitor.cpp +++ b/examples/multimedia/video/qmlvideo/frequencymonitor.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "frequencymonitor.h" + #include <QDebug> #include <QElapsedTimer> #include <QString> @@ -10,11 +11,20 @@ //#define VERBOSE_TRACE -inline QDebug qtTrace() { return qDebug() << "[frequencymonitor]"; } +inline QDebug qtTrace() +{ + return qDebug() << "[frequencymonitor]"; +} #ifdef VERBOSE_TRACE -inline QDebug qtVerboseTrace() { return qtTrace(); } +inline QDebug qtVerboseTrace() +{ + return qtTrace(); +} #else -inline QNoDebug qtVerboseTrace() { return QNoDebug(); } +inline QNoDebug qtVerboseTrace() +{ + return QNoDebug(); +} #endif static const int DefaultSamplingInterval = 100; @@ -47,29 +57,27 @@ public: }; FrequencyMonitorPrivate::FrequencyMonitorPrivate(FrequencyMonitor *parent) -: QObject(parent) -, q_ptr(parent) -, m_active(false) -, m_instantaneousFrequency(0) -, m_averageTimer(new QTimer(this)) -, m_count(0) -, m_averageFrequency(0) -, m_traceTimer(new QTimer(this)) -, m_stalledTimer(new QTimer(this)) + : QObject(parent), + q_ptr(parent), + m_active(false), + m_instantaneousFrequency(0), + m_averageTimer(new QTimer(this)), + m_count(0), + m_averageFrequency(0), + m_traceTimer(new QTimer(this)), + m_stalledTimer(new QTimer(this)) { m_instantaneousElapsed.start(); - connect(m_averageTimer, &QTimer::timeout, - this, &FrequencyMonitorPrivate::calculateAverageFrequency); + connect(m_averageTimer, &QTimer::timeout, this, + &FrequencyMonitorPrivate::calculateAverageFrequency); if (DefaultSamplingInterval) m_averageTimer->start(DefaultSamplingInterval); m_averageElapsed.start(); - connect(m_traceTimer, &QTimer::timeout, - q_ptr, &FrequencyMonitor::trace); + connect(m_traceTimer, &QTimer::timeout, q_ptr, &FrequencyMonitor::trace); if (DefaultTraceInterval) m_traceTimer->start(DefaultTraceInterval); m_stalledTimer->setSingleShot(true); - connect(m_stalledTimer, &QTimer::timeout, - this, &FrequencyMonitorPrivate::stalled); + connect(m_stalledTimer, &QTimer::timeout, this, &FrequencyMonitorPrivate::stalled); } void FrequencyMonitorPrivate::calculateInstantaneousFrequency() @@ -101,8 +109,7 @@ void FrequencyMonitorPrivate::stalled() } } -FrequencyMonitor::FrequencyMonitor(QObject *parent) -: QObject(parent) +FrequencyMonitor::FrequencyMonitor(QObject *parent) : QObject(parent) { d_ptr = new FrequencyMonitorPrivate(this); } @@ -150,12 +157,13 @@ void FrequencyMonitor::trace() { Q_D(FrequencyMonitor); const QString value = QString::fromLatin1("instant %1 average %2") - .arg(d->m_instantaneousFrequency, 0, 'f', 2) - .arg(d->m_averageFrequency, 0, 'f', 2); + .arg(d->m_instantaneousFrequency, 0, 'f', 2) + .arg(d->m_averageFrequency, 0, 'f', 2); if (d->m_label.isEmpty()) qtTrace() << "FrequencyMonitor::trace" << value; else - qtTrace() << "FrequencyMonitor::trace" << "label" << d->m_label << value; + qtTrace() << "FrequencyMonitor::trace" + << "label" << d->m_label << value; } void FrequencyMonitor::setLabel(const QString &value) diff --git a/examples/multimedia/video/qmlvideo/frequencymonitor.h b/examples/multimedia/video/qmlvideo/frequencymonitor.h index 67c44d255..a1756dc88 100644 --- a/examples/multimedia/video/qmlvideo/frequencymonitor.h +++ b/examples/multimedia/video/qmlvideo/frequencymonitor.h @@ -22,13 +22,16 @@ class FrequencyMonitor : public QObject Q_DECLARE_PRIVATE(FrequencyMonitor) Q_PROPERTY(QString label READ label WRITE setLabel NOTIFY labelChanged) Q_PROPERTY(bool active READ active WRITE setActive NOTIFY activeChanged) - Q_PROPERTY(int samplingInterval READ samplingInterval WRITE setSamplingInterval NOTIFY samplingIntervalChanged) - Q_PROPERTY(int traceInterval READ traceInterval WRITE setTraceInterval NOTIFY traceIntervalChanged) - Q_PROPERTY(qreal instantaneousFrequency READ instantaneousFrequency NOTIFY instantaneousFrequencyChanged) + Q_PROPERTY(int samplingInterval READ samplingInterval WRITE setSamplingInterval NOTIFY + samplingIntervalChanged) + Q_PROPERTY( + int traceInterval READ traceInterval WRITE setTraceInterval NOTIFY traceIntervalChanged) + Q_PROPERTY(qreal instantaneousFrequency READ instantaneousFrequency NOTIFY + instantaneousFrequencyChanged) Q_PROPERTY(qreal averageFrequency READ averageFrequency NOTIFY averageFrequencyChanged) public: - FrequencyMonitor(QObject *parent = 0); + FrequencyMonitor(QObject *parent = nullptr); ~FrequencyMonitor(); static void qmlRegisterType(); diff --git a/examples/multimedia/video/qmlvideo/frequencymonitordeclarative.cpp b/examples/multimedia/video/qmlvideo/frequencymonitordeclarative.cpp index 2c30f03a9..6ed2019ff 100644 --- a/examples/multimedia/video/qmlvideo/frequencymonitordeclarative.cpp +++ b/examples/multimedia/video/qmlvideo/frequencymonitordeclarative.cpp @@ -2,7 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "frequencymonitor.h" -#include <QtQml/qqml.h> +#include <qqml.h> void FrequencyMonitor::qmlRegisterType() { diff --git a/examples/multimedia/video/qmlvideo/main.cpp b/examples/multimedia/video/qmlvideo/main.cpp index 95fc2a1dd..a63146df0 100644 --- a/examples/multimedia/video/qmlvideo/main.cpp +++ b/examples/multimedia/video/qmlvideo/main.cpp @@ -1,20 +1,21 @@ // Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -#include <QtCore/QStandardPaths> -#include <QtCore/QString> -#include <QtCore/QStringList> -#include <QtQml/QQmlContext> -#include <QtQml/QQmlEngine> -#include <QtGui/QGuiApplication> -#include <QtQuick/QQuickItem> -#include <QtQuick/QQuickView> +#include "performancemonitor.h" #include "trace.h" - #ifdef PERFORMANCEMONITOR_SUPPORT -#include "performancemonitordeclarative.h" +# include "performancemonitordeclarative.h" #endif +#include <QGuiApplication> +#include <QQmlContext> +#include <QQmlEngine> +#include <QQuickItem> +#include <QQuickView> +#include <QStandardPaths> +#include <QString> +#include <QStringList> + static const QString DefaultFileName1 = ""; static const QString DefaultFileName2 = ""; @@ -37,7 +38,7 @@ int main(int argc, char *argv[]) const QByteArray arg = args.at(i).toUtf8(); if (arg.startsWith('-')) { if ("-volume" == arg) { - if (i+1 < args.count()) + if (i + 1 < args.count()) volume = 0.01 * args.at(++i).toInt(); else qtTrace() << "Option \"-volume\" takes a value"; @@ -87,15 +88,13 @@ int main(int argc, char *argv[]) rootObject->setProperty("perfMonitorsLogging", performanceMonitorState.logging); rootObject->setProperty("perfMonitorsVisible", performanceMonitorState.visible); } - QObject::connect(&viewer, SIGNAL(afterRendering()), - rootObject, SLOT(qmlFramePainted())); + QObject::connect(&viewer, SIGNAL(afterRendering()), rootObject, SLOT(qmlFramePainted())); #endif - const QStringList moviesLocation = QStandardPaths::standardLocations(QStandardPaths::MoviesLocation); - const QUrl videoPath = - QUrl::fromLocalFile(moviesLocation.isEmpty() ? - app.applicationDirPath() : - moviesLocation.front()); + const QStringList moviesLocation = + QStandardPaths::standardLocations(QStandardPaths::MoviesLocation); + const QUrl videoPath = QUrl::fromLocalFile(moviesLocation.isEmpty() ? app.applicationDirPath() + : moviesLocation.front()); viewer.rootContext()->setContextProperty("videoPath", videoPath); QMetaObject::invokeMethod(rootObject, "init"); @@ -105,4 +104,3 @@ int main(int argc, char *argv[]) return app.exec(); } - diff --git a/examples/multimedia/video/qmlvideo/performancemonitor.h b/examples/multimedia/video/qmlvideo/performancemonitor.h index 1b09baf39..683468619 100644 --- a/examples/multimedia/video/qmlvideo/performancemonitor.h +++ b/examples/multimedia/video/qmlvideo/performancemonitor.h @@ -13,9 +13,13 @@ struct State State() : valid(true), logging(false), visible(true) { } State(bool l, bool v) : valid(true), logging(l), visible(v) { } bool operator==(const State &other) const - { return logging == other.logging && visible == other.visible; } + { + return logging == other.logging && visible == other.visible; + } bool operator!=(const State &other) const - { return logging != other.logging || visible != other.visible; } + { + return logging != other.logging || visible != other.visible; + } bool parseArgument(const QByteArray &arg); @@ -27,4 +31,3 @@ struct State } // namespace PerformanceMonitor #endif // PERFORMANCEMONITOR_H - diff --git a/examples/multimedia/video/qmlvideo/performancemonitordeclarative.cpp b/examples/multimedia/video/qmlvideo/performancemonitordeclarative.cpp index 275c590f7..a2ad1ca82 100644 --- a/examples/multimedia/video/qmlvideo/performancemonitordeclarative.cpp +++ b/examples/multimedia/video/qmlvideo/performancemonitordeclarative.cpp @@ -2,12 +2,11 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "frequencymonitor.h" -#include "performancemonitor.h" namespace PerformanceMonitor { - void qmlRegisterTypes() - { - FrequencyMonitor::qmlRegisterType(); - } +void qmlRegisterTypes() +{ + FrequencyMonitor::qmlRegisterType(); +} } diff --git a/examples/multimedia/video/qmlvideo/performancemonitordeclarative.h b/examples/multimedia/video/qmlvideo/performancemonitordeclarative.h index b36f86b61..4514d5041 100644 --- a/examples/multimedia/video/qmlvideo/performancemonitordeclarative.h +++ b/examples/multimedia/video/qmlvideo/performancemonitordeclarative.h @@ -4,10 +4,8 @@ #ifndef PERFORMANCEMONITORDECLARATIVE_H #define PERFORMANCEMONITORDECLARATIVE_H -#include "performancemonitor.h" - namespace PerformanceMonitor { - void qmlRegisterTypes(); +void qmlRegisterTypes(); } #endif // PERFORMANCEMONITORDECLARATIVE_H diff --git a/examples/multimedia/video/qmlvideo/trace.h b/examples/multimedia/video/qmlvideo/trace.h index 263e3bb65..bd7f63b68 100644 --- a/examples/multimedia/video/qmlvideo/trace.h +++ b/examples/multimedia/video/qmlvideo/trace.h @@ -4,7 +4,7 @@ #ifndef TRACE_H #define TRACE_H -#include <QtCore/QDebug> +#include <QDebug> #define ENABLE_TRACE //#define VERBOSE_TRACE @@ -14,13 +14,19 @@ namespace Trace { class NullDebug { public: - template <typename T> - NullDebug& operator<<(const T&) { return *this; } + template<typename T> + NullDebug &operator<<(const T &) + { + return *this; + } }; -inline NullDebug nullDebug() { return NullDebug(); } +inline NullDebug nullDebug() +{ + return NullDebug(); +} -template <typename T> +template<typename T> struct PtrWrapper { PtrWrapper(const T *ptr) : m_ptr(ptr) { } @@ -29,8 +35,8 @@ struct PtrWrapper } // namespace Trace -template <typename T> -inline QDebug& operator<<(QDebug &debug, const Trace::PtrWrapper<T> &wrapper) +template<typename T> +inline QDebug &operator<<(QDebug &debug, const Trace::PtrWrapper<T> &wrapper) { QDebugStateSaver saver(debug); debug.nospace() << '[' << static_cast<const void *>(wrapper.m_ptr) << ']'; @@ -39,20 +45,37 @@ inline QDebug& operator<<(QDebug &debug, const Trace::PtrWrapper<T> &wrapper) template<typename T> inline const void *qtVoidPtr(const T *ptr) -{ return static_cast<const void *>(ptr); } +{ + return static_cast<const void *>(ptr); +} #define qtThisPtr() qtVoidPtr(this) #ifdef ENABLE_TRACE - inline QDebug qtTrace() { return qDebug() << "[qmlvideo]"; } +inline QDebug qtTrace() +{ + return qDebug() << "[qmlvideo]"; +} # ifdef VERBOSE_TRACE - inline QDebug qtVerboseTrace() { return qtTrace(); } +inline QDebug qtVerboseTrace() +{ + return qtTrace(); +} # else - inline Trace::NullDebug qtVerboseTrace() { return Trace::nullDebug(); } +inline Trace::NullDebug qtVerboseTrace() +{ + return Trace::nullDebug(); +} # endif #else - inline Trace::NullDebug qtTrace() { return Trace::nullDebug(); } - inline Trace::NullDebug qtVerboseTrace() { return Trace::nullDebug(); } +inline Trace::NullDebug qtTrace() +{ + return Trace::nullDebug(); +} +inline Trace::NullDebug qtVerboseTrace() +{ + return Trace::nullDebug(); +} #endif #endif // TRACE_H diff --git a/examples/multimedia/video/recorder/main.cpp b/examples/multimedia/video/recorder/main.cpp index 7edc04ed8..195290319 100644 --- a/examples/multimedia/video/recorder/main.cpp +++ b/examples/multimedia/video/recorder/main.cpp @@ -10,11 +10,13 @@ int main(int argc, char *argv[]) QQmlApplicationEngine engine; const QUrl url(QStringLiteral("qrc:/main.qml")); - QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, - &app, [url](QObject *obj, const QUrl &objUrl) { - if (!obj && url == objUrl) - QCoreApplication::exit(-1); - }, Qt::QueuedConnection); + QObject::connect( + &engine, &QQmlApplicationEngine::objectCreated, &app, + [url](QObject *obj, const QUrl &objUrl) { + if (!obj && url == objUrl) + QCoreApplication::exit(-1); + }, + Qt::QueuedConnection); engine.load(url); return app.exec(); diff --git a/examples/multimedia/videographicsitem/main.cpp b/examples/multimedia/videographicsitem/main.cpp index 85d1ec92b..725243ed9 100644 --- a/examples/multimedia/videographicsitem/main.cpp +++ b/examples/multimedia/videographicsitem/main.cpp @@ -4,8 +4,8 @@ #include "videoplayer.h" #include <QApplication> -#include <QCommandLineParser> #include <QCommandLineOption> +#include <QCommandLineParser> #include <QDir> #include <QUrl> @@ -26,9 +26,8 @@ int main(int argc, char **argv) VideoPlayer player; if (!parser.positionalArguments().isEmpty() && player.isPlayerAvailable()) { - const QUrl url = - QUrl::fromUserInput(parser.positionalArguments().constFirst(), - QDir::currentPath(), QUrl::AssumeLocalFile); + const QUrl url = QUrl::fromUserInput(parser.positionalArguments().constFirst(), + QDir::currentPath(), QUrl::AssumeLocalFile); player.load(url); } @@ -36,4 +35,3 @@ int main(int argc, char **argv) return app.exec(); } - diff --git a/examples/multimedia/videographicsitem/videoplayer.cpp b/examples/multimedia/videographicsitem/videoplayer.cpp index 096fabd77..534391c66 100644 --- a/examples/multimedia/videographicsitem/videoplayer.cpp +++ b/examples/multimedia/videographicsitem/videoplayer.cpp @@ -3,11 +3,22 @@ #include "videoplayer.h" -#include <QtWidgets> +#include <QBoxLayout> +#include <QDir> +#include <QFileDialog> +#include <QGraphicsScene> #include <QGraphicsVideoItem> - -VideoPlayer::VideoPlayer(QWidget *parent) - : QWidget(parent) +#include <QGraphicsView> +#include <QHBoxLayout> +#include <QPushButton> +#include <QScreen> +#include <QSlider> +#include <QStandardPaths> +#include <QStyle> +#include <QVBoxLayout> +#include <QWidget> + +VideoPlayer::VideoPlayer(QWidget *parent) : QWidget(parent) { m_mediaPlayer = new QMediaPlayer(this); const QSize screenGeometry = screen()->availableSize(); @@ -21,11 +32,10 @@ VideoPlayer::VideoPlayer(QWidget *parent) QSlider *rotateSlider = new QSlider(Qt::Horizontal); rotateSlider->setToolTip(tr("Rotate Video")); - rotateSlider->setRange(-180, 180); + rotateSlider->setRange(-180, 180); rotateSlider->setValue(0); - connect(rotateSlider, &QAbstractSlider::valueChanged, - this, &VideoPlayer::rotateVideo); + connect(rotateSlider, &QAbstractSlider::valueChanged, this, &VideoPlayer::rotateVideo); QAbstractButton *openButton = new QPushButton(tr("Open...")); connect(openButton, &QAbstractButton::clicked, this, &VideoPlayer::openFile); @@ -39,8 +49,7 @@ VideoPlayer::VideoPlayer(QWidget *parent) m_positionSlider = new QSlider(Qt::Horizontal); m_positionSlider->setRange(0, 0); - connect(m_positionSlider, &QAbstractSlider::sliderMoved, - this, &VideoPlayer::setPosition); + connect(m_positionSlider, &QAbstractSlider::sliderMoved, this, &VideoPlayer::setPosition); QBoxLayout *controlLayout = new QHBoxLayout; controlLayout->setContentsMargins(0, 0, 0, 0); @@ -54,15 +63,13 @@ VideoPlayer::VideoPlayer(QWidget *parent) layout->addLayout(controlLayout); m_mediaPlayer->setVideoOutput(m_videoItem); - connect(m_mediaPlayer, &QMediaPlayer::playbackStateChanged, - this, &VideoPlayer::mediaStateChanged); + connect(m_mediaPlayer, &QMediaPlayer::playbackStateChanged, this, + &VideoPlayer::mediaStateChanged); connect(m_mediaPlayer, &QMediaPlayer::positionChanged, this, &VideoPlayer::positionChanged); connect(m_mediaPlayer, &QMediaPlayer::durationChanged, this, &VideoPlayer::durationChanged); } -VideoPlayer::~VideoPlayer() -{ -} +VideoPlayer::~VideoPlayer() { } QSize VideoPlayer::sizeHint() const { @@ -79,7 +86,8 @@ void VideoPlayer::openFile() QFileDialog fileDialog(this); fileDialog.setAcceptMode(QFileDialog::AcceptOpen); fileDialog.setWindowTitle(tr("Open Movie")); - fileDialog.setDirectory(QStandardPaths::standardLocations(QStandardPaths::MoviesLocation).value(0, QDir::homePath())); + fileDialog.setDirectory(QStandardPaths::standardLocations(QStandardPaths::MoviesLocation) + .value(0, QDir::homePath())); if (fileDialog.exec() == QDialog::Accepted) load(fileDialog.selectedUrls().constFirst()); } @@ -104,7 +112,7 @@ void VideoPlayer::play() void VideoPlayer::mediaStateChanged(QMediaPlayer::PlaybackState state) { - switch(state) { + switch (state) { case QMediaPlayer::PlayingState: m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause)); break; @@ -129,10 +137,9 @@ void VideoPlayer::setPosition(int position) m_mediaPlayer->setPosition(position); } - void VideoPlayer::rotateVideo(int angle) { - //rotate around the center of video element + // rotate around the center of video element qreal x = m_videoItem->boundingRect().width() / 2.0; qreal y = m_videoItem->boundingRect().height() / 2.0; m_videoItem->setTransform(QTransform().translate(x, y).rotate(angle).translate(-x, -y)); diff --git a/examples/multimedia/videographicsitem/videoplayer.h b/examples/multimedia/videographicsitem/videoplayer.h index a5be31efc..5cd4d7434 100644 --- a/examples/multimedia/videographicsitem/videoplayer.h +++ b/examples/multimedia/videographicsitem/videoplayer.h @@ -45,4 +45,3 @@ private: }; #endif - diff --git a/examples/multimedia/videowidget/main.cpp b/examples/multimedia/videowidget/main.cpp index ccf5983dd..a4e2dc4aa 100644 --- a/examples/multimedia/videowidget/main.cpp +++ b/examples/multimedia/videowidget/main.cpp @@ -3,12 +3,12 @@ #include "videoplayer.h" -#include <QtWidgets/QApplication> -#include <QtCore/QCommandLineParser> -#include <QtCore/QCommandLineOption> -#include <QtCore/QDir> -#include <QtCore/QUrl> +#include <QApplication> +#include <QCommandLineOption> +#include <QCommandLineParser> +#include <QDir> #include <QScreen> +#include <QUrl> int main(int argc, char *argv[]) { @@ -27,9 +27,8 @@ int main(int argc, char *argv[]) VideoPlayer player; if (!parser.positionalArguments().isEmpty()) { - const QUrl url = - QUrl::fromUserInput(parser.positionalArguments().constFirst(), - QDir::currentPath(), QUrl::AssumeLocalFile); + const QUrl url = QUrl::fromUserInput(parser.positionalArguments().constFirst(), + QDir::currentPath(), QUrl::AssumeLocalFile); player.setUrl(url); } diff --git a/examples/multimedia/videowidget/videoplayer.cpp b/examples/multimedia/videowidget/videoplayer.cpp index 4a34bfded..a87264834 100644 --- a/examples/multimedia/videowidget/videoplayer.cpp +++ b/examples/multimedia/videowidget/videoplayer.cpp @@ -3,11 +3,20 @@ #include "videoplayer.h" -#include <QtWidgets> +#include <QBoxLayout> +#include <QFileDialog> +#include <QHBoxLayout> +#include <QLabel> +#include <QMediaPlayer> +#include <QPushButton> +#include <QSizePolicy> +#include <QSlider> +#include <QStandardPaths> +#include <QString> +#include <QStyle> #include <QVideoWidget> -VideoPlayer::VideoPlayer(QWidget *parent) - : QWidget(parent) +VideoPlayer::VideoPlayer(QWidget *parent) : QWidget(parent) { m_mediaPlayer = new QMediaPlayer(this); QVideoWidget *videoWidget = new QVideoWidget; @@ -19,14 +28,12 @@ VideoPlayer::VideoPlayer(QWidget *parent) m_playButton->setEnabled(false); m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); - connect(m_playButton, &QAbstractButton::clicked, - this, &VideoPlayer::play); + connect(m_playButton, &QAbstractButton::clicked, this, &VideoPlayer::play); m_positionSlider = new QSlider(Qt::Horizontal); m_positionSlider->setRange(0, 0); - connect(m_positionSlider, &QAbstractSlider::sliderMoved, - this, &VideoPlayer::setPosition); + connect(m_positionSlider, &QAbstractSlider::sliderMoved, this, &VideoPlayer::setPosition); m_errorLabel = new QLabel; m_errorLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); @@ -45,24 +52,22 @@ VideoPlayer::VideoPlayer(QWidget *parent) setLayout(layout); m_mediaPlayer->setVideoOutput(videoWidget); - connect(m_mediaPlayer, &QMediaPlayer::playbackStateChanged, - this, &VideoPlayer::mediaStateChanged); + connect(m_mediaPlayer, &QMediaPlayer::playbackStateChanged, this, + &VideoPlayer::mediaStateChanged); connect(m_mediaPlayer, &QMediaPlayer::positionChanged, this, &VideoPlayer::positionChanged); connect(m_mediaPlayer, &QMediaPlayer::durationChanged, this, &VideoPlayer::durationChanged); - connect(m_mediaPlayer, &QMediaPlayer::errorChanged, - this, &VideoPlayer::handleError); + connect(m_mediaPlayer, &QMediaPlayer::errorChanged, this, &VideoPlayer::handleError); } -VideoPlayer::~VideoPlayer() -{ -} +VideoPlayer::~VideoPlayer() { } void VideoPlayer::openFile() { QFileDialog fileDialog(this); fileDialog.setAcceptMode(QFileDialog::AcceptOpen); fileDialog.setWindowTitle(tr("Open Movie")); - fileDialog.setDirectory(QStandardPaths::standardLocations(QStandardPaths::MoviesLocation).value(0, QDir::homePath())); + fileDialog.setDirectory(QStandardPaths::standardLocations(QStandardPaths::MoviesLocation) + .value(0, QDir::homePath())); if (fileDialog.exec() == QDialog::Accepted) setUrl(fileDialog.selectedUrls().constFirst()); } @@ -89,7 +94,7 @@ void VideoPlayer::play() void VideoPlayer::mediaStateChanged(QMediaPlayer::PlaybackState state) { - switch(state) { + switch (state) { case QMediaPlayer::PlayingState: m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause)); break; diff --git a/examples/multimedia/videowidget/videoplayer.h b/examples/multimedia/videowidget/videoplayer.h index b06df8280..3657a04de 100644 --- a/examples/multimedia/videowidget/videoplayer.h +++ b/examples/multimedia/videowidget/videoplayer.h @@ -35,7 +35,7 @@ private slots: void handleError(); private: - QMediaPlayer* m_mediaPlayer; + QMediaPlayer *m_mediaPlayer; QAbstractButton *m_playButton; QSlider *m_positionSlider; QLabel *m_errorLabel; diff --git a/examples/spatialaudio/audiopanning/main.cpp b/examples/spatialaudio/audiopanning/main.cpp index 35ae9bc0f..84e5197bd 100644 --- a/examples/spatialaudio/audiopanning/main.cpp +++ b/examples/spatialaudio/audiopanning/main.cpp @@ -1,20 +1,23 @@ // Copyright (C) 2022 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -#include <QtSpatialAudio/QtSpatialAudio> - -#include <QtWidgets/QApplication> -#include <QtWidgets/QCheckBox> -#include <QtWidgets/QComboBox> -#include <QtWidgets/QFileDialog> -#include <QtWidgets/QFormLayout> -#include <QtWidgets/QHBoxLayout> -#include <QtWidgets/QLineEdit> -#include <QtWidgets/QPushButton> -#include <QtWidgets/QSlider> - -#include <QtCore/QPropertyAnimation> -#include <QtCore/QLibraryInfo> +#include <QApplication> +#include <QAudioEngine> +#include <QAudioListener> +#include <QAudioRoom> +#include <QCheckBox> +#include <QComboBox> +#include <QCommandLineParser> +#include <QFileDialog> +#include <QFormLayout> +#include <QHBoxLayout> +#include <QLibraryInfo> +#include <QLineEdit> +#include <QPropertyAnimation> +#include <QPushButton> +#include <QSlider> +#include <QSpatialSound> +#include <QStandardPaths> class AudioWidget : public QWidget { |