From 9c309ede2feb598908b1476062b79d0d23759bf3 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Fri, 11 Jun 2021 12:49:26 +0200 Subject: Get rid of QMediaEncoderSettings As per API review, fold this class into QMediaRecorder as that's the only place where it is being used. This removes one level of indirection from the API and also makes it possible to use from QML. Change-Id: Id9157df04512382cce28e89b082433ec67d36b28 Reviewed-by: Volker Hilsheimer --- .../multimedia/audiorecorder/audiorecorder.cpp | 25 +++++---- .../audiorecorder/doc/src/audiorecorder.qdoc | 22 ++++---- examples/multimediawidgets/camera/camera.cpp | 9 +-- examples/multimediawidgets/camera/camera.h | 1 - examples/multimediawidgets/camera/imagesettings.h | 1 - .../multimediawidgets/camera/videosettings.cpp | 64 ++++++++++------------ examples/multimediawidgets/camera/videosettings.h | 4 +- 7 files changed, 57 insertions(+), 69 deletions(-) (limited to 'examples') diff --git a/examples/multimedia/audiorecorder/audiorecorder.cpp b/examples/multimedia/audiorecorder/audiorecorder.cpp index 4983fa97c..63efc4ba8 100644 --- a/examples/multimedia/audiorecorder/audiorecorder.cpp +++ b/examples/multimedia/audiorecorder/audiorecorder.cpp @@ -59,6 +59,7 @@ #include #include #include +#include #include #include #include @@ -194,18 +195,18 @@ void AudioRecorder::toggleRecord() if (m_audioEncoder->recorderState() == QMediaRecorder::StoppedState) { m_captureSession.audioInput()->setDevice(boxValue(ui->audioDeviceBox).value()); - QMediaEncoderSettings settings; - settings.setFileFormat(boxValue(ui->containerBox).value()); - settings.setAudioCodec(boxValue(ui->audioCodecBox).value()); - settings.setAudioSampleRate(ui->sampleRateBox->value()); - settings.setAudioBitRate(boxValue(ui->bitrateBox).toInt()); - settings.setAudioChannelCount(boxValue(ui->channelsBox).toInt()); - settings.setQuality(QMediaEncoderSettings::Quality(ui->qualitySlider->value())); - settings.setEncodingMode(ui->constantQualityRadioButton->isChecked() ? - QMediaEncoderSettings::ConstantQualityEncoding : - QMediaEncoderSettings::ConstantBitRateEncoding); - - m_audioEncoder->setEncoderSettings(settings); + QMediaFormat format; + format.setFileFormat(boxValue(ui->containerBox).value()); + format.setAudioCodec(boxValue(ui->audioCodecBox).value()); + m_audioEncoder->setMediaFormat(format); + m_audioEncoder->setAudioSampleRate(ui->sampleRateBox->value()); + m_audioEncoder->setAudioBitRate(boxValue(ui->bitrateBox).toInt()); + m_audioEncoder->setAudioChannelCount(boxValue(ui->channelsBox).toInt()); + m_audioEncoder->setQuality(QMediaRecorder::Quality(ui->qualitySlider->value())); + m_audioEncoder->setEncodingMode(ui->constantQualityRadioButton->isChecked() ? + QMediaRecorder::ConstantQualityEncoding : + QMediaRecorder::ConstantBitRateEncoding); + m_audioEncoder->record(); } else { diff --git a/examples/multimedia/audiorecorder/doc/src/audiorecorder.qdoc b/examples/multimedia/audiorecorder/doc/src/audiorecorder.qdoc index d5d49e723..723f7742f 100644 --- a/examples/multimedia/audiorecorder/doc/src/audiorecorder.qdoc +++ b/examples/multimedia/audiorecorder/doc/src/audiorecorder.qdoc @@ -51,8 +51,8 @@ \l{QAudioRecorder::supportedContainers()}{supportedContainers()}, and \l{QAudioRecorder::supportedAudioSampleRates()}{supportedAudioSampleRates()} methods. The quality slider is setup from 0 (zero) to - \l{QMediaEncoderSettings::VeryHighQuality} with a default value of - \l{QMediaEncoderSettings::NormalQuality}, while the bitrates are hardcoded + \l{QMediaRecorder::VeryHighQuality} with a default value of + \l{QMediaRecorder::NormalQuality}, while the bitrates are hardcoded into the list. \section1 Recording Audio @@ -79,18 +79,18 @@ \l{QMediaRecorder::record()}{record()} method. \code - QAudioEncoderSettings settings; - settings.setCodec(boxValue(ui->audioCodecBox).toString()); - settings.setSampleRate(boxValue(ui->sampleRateBox).toInt()); - settings.setBitRate(boxValue(ui->bitrateBox).toInt()); - settings.setQuality(QMediaEncoderSettings::EncodingQuality(ui->qualitySlider->value())); - settings.setEncodingMode(ui->constantQualityRadioButton->isChecked() ? - QMediaEncoderSettings::ConstantQualityEncoding : - QMediaEncoderSettings::ConstantBitRateEncoding); + QMediaFormat format; + format.setCodec(boxValue(ui->audioCodecBox).toString()); + audioRecorder->setMediaFormat(format); + audioRecorder->setSampleRate(boxValue(ui->sampleRateBox).toInt()); + audioRecorder->setBitRate(boxValue(ui->bitrateBox).toInt()); + audioRecorder->setQuality(QMediaRecorder::EncodingQuality(ui->qualitySlider->value())); + audioRecorder->setEncodingMode(ui->constantQualityRadioButton->isChecked() ? + QMediaRecorder::ConstantQualityEncoding : + QMediaRecorder::ConstantBitRateEncoding); QString container = boxValue(ui->containerBox).toString(); - audioRecorder->setEncodingSettings(settings, QVideoEncoderSettings(), container); audioRecorder->record(); \endcode diff --git a/examples/multimediawidgets/camera/camera.cpp b/examples/multimediawidgets/camera/camera.cpp index f45971e9f..552990496 100644 --- a/examples/multimediawidgets/camera/camera.cpp +++ b/examples/multimediawidgets/camera/camera.cpp @@ -192,13 +192,8 @@ void Camera::configureVideoSettings() VideoSettings settingsDialog(m_mediaEncoder.data()); settingsDialog.setWindowFlags(settingsDialog.windowFlags() & ~Qt::WindowContextHelpButtonHint); - settingsDialog.setEncoderSettings(m_encoderSettings); - - if (settingsDialog.exec()) { - m_encoderSettings = settingsDialog.encoderSettings(); - - m_mediaEncoder->setEncoderSettings(m_encoderSettings); - } + if (settingsDialog.exec()) + settingsDialog.applySettings(); } void Camera::configureImageSettings() diff --git a/examples/multimediawidgets/camera/camera.h b/examples/multimediawidgets/camera/camera.h index 6a55f42b3..2b19dae86 100644 --- a/examples/multimediawidgets/camera/camera.h +++ b/examples/multimediawidgets/camera/camera.h @@ -138,7 +138,6 @@ private: QCameraImageCapture *m_imageCapture; QScopedPointer m_mediaEncoder; - QMediaEncoderSettings m_encoderSettings; bool m_isCapturingImage = false; bool m_applicationExiting = false; bool m_doImageCapture = true; diff --git a/examples/multimediawidgets/camera/imagesettings.h b/examples/multimediawidgets/camera/imagesettings.h index cb7691045..c155c5531 100644 --- a/examples/multimediawidgets/camera/imagesettings.h +++ b/examples/multimediawidgets/camera/imagesettings.h @@ -52,7 +52,6 @@ #define IMAGESETTINGS_H #include -#include QT_BEGIN_NAMESPACE class QComboBox; diff --git a/examples/multimediawidgets/camera/videosettings.cpp b/examples/multimediawidgets/camera/videosettings.cpp index 9bc0d0ea0..22b82fb60 100644 --- a/examples/multimediawidgets/camera/videosettings.cpp +++ b/examples/multimediawidgets/camera/videosettings.cpp @@ -113,7 +113,26 @@ VideoSettings::VideoSettings(QMediaRecorder *mediaRecorder, QWidget *parent) QVariant::fromValue(format)); } - ui->qualitySlider->setRange(0, int(QMediaEncoderSettings::VeryHighQuality)); + ui->qualitySlider->setRange(0, int(QMediaRecorder::VeryHighQuality)); + + QMediaFormat format = mediaRecorder->mediaFormat(); + selectComboBoxItem(ui->containerFormatBox, QVariant::fromValue(format.fileFormat())); + selectComboBoxItem(ui->audioCodecBox, QVariant::fromValue(format.audioCodec())); + selectComboBoxItem(ui->videoCodecBox, QVariant::fromValue(format.videoCodec())); + + ui->qualitySlider->setValue(mediaRecorder->quality()); + ui->audioSampleRateBox->setValue(mediaRecorder->audioSampleRate()); + selectComboBoxItem(ui->videoResolutionBox, QVariant(mediaRecorder->videoResolution())); + + //special case for frame rate + for (int i = 0; i < ui->videoFramerateBox->count(); ++i) { + qreal itemRate = ui->videoFramerateBox->itemData(i).value(); + if (qFuzzyCompare(itemRate, mediaRecorder->videoFrameRate())) { + ui->videoFramerateBox->setCurrentIndex(i); + break; + } + } + } VideoSettings::~VideoSettings() @@ -133,40 +152,17 @@ void VideoSettings::changeEvent(QEvent *e) } } -QMediaEncoderSettings VideoSettings::encoderSettings() const -{ - QMediaEncoderSettings settings = mediaRecorder->encoderSettings(); - settings.setQuality(QMediaEncoderSettings::Quality(ui->qualitySlider->value())); - settings.setFileFormat(boxValue(ui->containerFormatBox).value()); - - settings.setAudioCodec(boxValue(ui->audioCodecBox).value()); - settings.setAudioSampleRate(ui->audioSampleRateBox->value()); - - settings.setVideoCodec(boxValue(ui->videoCodecBox).value()); - settings.setVideoResolution(boxValue(ui->videoResolutionBox).toSize()); - settings.setVideoFrameRate(boxValue(ui->videoFramerateBox).value()); - return settings; -} - -void VideoSettings::setEncoderSettings(const QMediaEncoderSettings &encoderSettings) +void VideoSettings::applySettings() { - selectComboBoxItem(ui->containerFormatBox, QVariant::fromValue(encoderSettings.fileFormat())); - ui->qualitySlider->setValue(encoderSettings.quality()); - - selectComboBoxItem(ui->audioCodecBox, QVariant::fromValue(encoderSettings.audioCodec())); - ui->audioSampleRateBox->setValue(encoderSettings.audioSampleRate()); - - selectComboBoxItem(ui->videoCodecBox, QVariant::fromValue(encoderSettings.videoCodec())); - selectComboBoxItem(ui->videoResolutionBox, QVariant(encoderSettings.videoResolution())); - - //special case for frame rate - for (int i = 0; i < ui->videoFramerateBox->count(); ++i) { - qreal itemRate = ui->videoFramerateBox->itemData(i).value(); - if (qFuzzyCompare(itemRate, encoderSettings.videoFrameRate())) { - ui->videoFramerateBox->setCurrentIndex(i); - break; - } - } + QMediaFormat format; + format.setFileFormat(boxValue(ui->containerFormatBox).value()); + format.setAudioCodec(boxValue(ui->audioCodecBox).value()); + format.setVideoCodec(boxValue(ui->videoCodecBox).value()); + + mediaRecorder->setQuality(QMediaRecorder::Quality(ui->qualitySlider->value())); + mediaRecorder->setAudioSampleRate(ui->audioSampleRateBox->value()); + mediaRecorder->setVideoResolution(boxValue(ui->videoResolutionBox).toSize()); + mediaRecorder->setVideoFrameRate(boxValue(ui->videoFramerateBox).value()); } QVariant VideoSettings::boxValue(const QComboBox *box) const diff --git a/examples/multimediawidgets/camera/videosettings.h b/examples/multimediawidgets/camera/videosettings.h index 2cb690d27..28f8ce8a7 100644 --- a/examples/multimediawidgets/camera/videosettings.h +++ b/examples/multimediawidgets/camera/videosettings.h @@ -52,7 +52,6 @@ #define VIDEOSETTINGS_H #include -#include QT_BEGIN_NAMESPACE class QComboBox; @@ -68,8 +67,7 @@ public: explicit VideoSettings(QMediaRecorder *mediaRecorder, QWidget *parent = nullptr); ~VideoSettings(); - QMediaEncoderSettings encoderSettings() const; - void setEncoderSettings(const QMediaEncoderSettings&); + void applySettings(); protected: void changeEvent(QEvent *e) override; -- cgit v1.2.3