summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-02-02 20:36:06 +0100
committerLars Knoll <lars.knoll@qt.io>2021-02-09 14:34:35 +0000
commitb010b331e52890b5d9be0218aa91c849adb1f63f (patch)
tree13815d4854deef4fd8e0f6867e4223324b571826
parentd9fcf2ab6ac24cdba9a9ff3f0e32a39938216cee (diff)
Use the new QMediaEncoderSettings in QMediaRecorder
Switch the backends for Android (compiles but untested), AFFoundation and GStreamer over to use the new QMediaEncoderSettings. Get rid of the old *EncoderControl classes and associated infrastructure. Change-Id: Ic75ff43eab55aeb0ab53d7248f7f5ff70b14c05f Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r--examples/multimedia/audiorecorder/audiorecorder.cpp34
-rw-r--r--examples/multimedia/audiorecorder/audiorecorder.ui8
-rw-r--r--examples/multimediawidgets/camera/camera.cpp15
-rw-r--r--examples/multimediawidgets/camera/camera.h4
-rw-r--r--examples/multimediawidgets/camera/imagesettings.h3
-rw-r--r--examples/multimediawidgets/camera/videosettings.cpp117
-rw-r--r--examples/multimediawidgets/camera/videosettings.h10
-rw-r--r--examples/multimediawidgets/camera/videosettings.ui279
-rw-r--r--src/imports/multimedia/qdeclarativecamerarecorder.cpp121
-rw-r--r--src/imports/multimedia/qdeclarativecamerarecorder_p.h29
-rw-r--r--src/multimedia/CMakeLists.txt15
-rw-r--r--src/multimedia/controls/controls.pri6
-rw-r--r--src/multimedia/controls/qaudioencodersettingscontrol.cpp133
-rw-r--r--src/multimedia/controls/qaudioencodersettingscontrol.h82
-rw-r--r--src/multimedia/controls/qmediacontainercontrol.cpp114
-rw-r--r--src/multimedia/controls/qmediacontainercontrol.h72
-rw-r--r--src/multimedia/controls/qmediarecordercontrol.h2
-rw-r--r--src/multimedia/controls/qvideoencodersettingscontrol.cpp154
-rw-r--r--src/multimedia/controls/qvideoencodersettingscontrol.h80
-rw-r--r--src/multimedia/platform/android/mediacapture/mediacapture.pri6
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidaudioencodersettingscontrol.cpp96
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidaudioencodersettingscontrol_p.h78
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp21
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h6
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp177
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidcapturesession_p.h20
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidmediacontainercontrol.cpp84
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidmediacontainercontrol_p.h77
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidmediarecordercontrol.cpp5
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidmediarecordercontrol_p.h2
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidvideoencodersettingscontrol.cpp81
-rw-r--r--src/multimedia/platform/android/mediacapture/qandroidvideoencodersettingscontrol_p.h77
-rw-r--r--src/multimedia/platform/android/qandroidformatsinfo.cpp32
-rw-r--r--src/multimedia/platform/android/qandroidformatsinfo_p.h4
-rw-r--r--src/multimedia/platform/android/wrappers/jni/androidmediarecorder_p.h12
-rw-r--r--src/multimedia/platform/darwin/camera/avfaudioencodersettingscontrol.mm226
-rw-r--r--src/multimedia/platform/darwin/camera/avfaudioencodersettingscontrol_p.h86
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameraservice.mm18
-rw-r--r--src/multimedia/platform/darwin/camera/avfcameraservice_p.h9
-rw-r--r--src/multimedia/platform/darwin/camera/avfmediacontainercontrol.mm113
-rw-r--r--src/multimedia/platform/darwin/camera/avfmediacontainercontrol_p.h80
-rw-r--r--src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm253
-rw-r--r--src/multimedia/platform/darwin/camera/avfmediarecordercontrol_p.h3
-rw-r--r--src/multimedia/platform/darwin/camera/avfvideoencodersettingscontrol.mm311
-rw-r--r--src/multimedia/platform/darwin/camera/avfvideoencodersettingscontrol_p.h93
-rw-r--r--src/multimedia/platform/darwin/camera/camera.pri6
-rw-r--r--src/multimedia/platform/darwin/qdarwinformatsinfo.mm70
-rw-r--r--src/multimedia/platform/darwin/qdarwinformatsinfo_p.h3
-rw-r--r--src/multimedia/platform/gstreamer/camerabin/camerabincontrol.cpp3
-rw-r--r--src/multimedia/platform/gstreamer/camerabin/camerabinrecorder.cpp12
-rw-r--r--src/multimedia/platform/gstreamer/camerabin/camerabinservice.cpp13
-rw-r--r--src/multimedia/platform/gstreamer/camerabin/camerabinsession.cpp6
-rw-r--r--src/multimedia/platform/gstreamer/camerabin/camerabinsession_p.h9
-rw-r--r--src/multimedia/platform/gstreamer/common/common.pri6
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstcodecsinfo.cpp9
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstreameraudioencoder.cpp289
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstreameraudioencoder_p.h117
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstreamercontainer.cpp239
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstreamercontainer_p.h111
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstreamervideoencoder.cpp355
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstreamervideoencoder_p.h107
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstutils.cpp31
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstutils_p.h1
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice.cpp13
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp124
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession_p.h9
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp115
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol_p.h5
-rw-r--r--src/multimedia/platform/gstreamer/qgstreamerformatsinfo.cpp49
-rw-r--r--src/multimedia/platform/gstreamer/qgstreamerformatsinfo_p.h9
-rw-r--r--src/multimedia/platform/gstreamer/qgstreamerintegration_p.h4
-rw-r--r--src/multimedia/qmediaformat.cpp149
-rw-r--r--src/multimedia/qmediaformat.h24
-rw-r--r--src/multimedia/recording/qmediaencodersettings.cpp576
-rw-r--r--src/multimedia/recording/qmediaencodersettings.h117
-rw-r--r--src/multimedia/recording/qmediarecorder.cpp329
-rw-r--r--src/multimedia/recording/qmediarecorder.h33
-rw-r--r--src/multimedia/recording/qmediarecorder_p.h4
-rw-r--r--tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp6
-rw-r--r--tests/auto/unit/mockbackend/CMakeLists.txt3
-rw-r--r--tests/auto/unit/mockbackend/capture.pri3
-rw-r--r--tests/auto/unit/mockbackend/mockaudioencodercontrol.h94
-rw-r--r--tests/auto/unit/mockbackend/mockmediacontainercontrol.h84
-rw-r--r--tests/auto/unit/mockbackend/mockmediarecordercontrol.h2
-rw-r--r--tests/auto/unit/mockbackend/mockmediarecorderservice.h15
-rw-r--r--tests/auto/unit/mockbackend/mockvideoencodercontrol.h61
-rw-r--r--tests/auto/unit/multimedia/CMakeLists.txt2
-rw-r--r--tests/auto/unit/multimedia/multimedia.pro2
-rw-r--r--tests/auto/unit/multimedia/qaudiorecorder/tst_qaudiorecorder.cpp1
-rw-r--r--tests/auto/unit/multimedia/qmediacontainercontrol/CMakeLists.txt17
-rw-r--r--tests/auto/unit/multimedia/qmediacontainercontrol/qmediacontainercontrol.pro9
-rw-r--r--tests/auto/unit/multimedia/qmediacontainercontrol/tst_qmediacontainercontrol.cpp66
-rw-r--r--tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp1473
-rw-r--r--tests/auto/unit/multimedia/qmediasink/tst_qmediasink.cpp8
-rw-r--r--tests/auto/unit/multimedia/qvideoencodersettingscontrol/CMakeLists.txt13
-rw-r--r--tests/auto/unit/multimedia/qvideoencodersettingscontrol/qvideoencodersettingscontrol.pro8
-rw-r--r--tests/auto/unit/multimedia/qvideoencodersettingscontrol/tst_qvideoencodersettingscontrol.cpp88
97 files changed, 1946 insertions, 6204 deletions
diff --git a/examples/multimedia/audiorecorder/audiorecorder.cpp b/examples/multimedia/audiorecorder/audiorecorder.cpp
index ddd28bcdf..3a73dd7f0 100644
--- a/examples/multimedia/audiorecorder/audiorecorder.cpp
+++ b/examples/multimedia/audiorecorder/audiorecorder.cpp
@@ -87,22 +87,21 @@ AudioRecorder::AudioRecorder()
//audio codecs
ui->audioCodecBox->addItem(tr("Default"), QVariant(QString()));
- for (auto &codecName: m_audioRecorder->supportedAudioCodecs()) {
- ui->audioCodecBox->addItem(codecName, QVariant(codecName));
- }
+ for (auto &codec : QMediaEncoderInfo::supportedAudioCodecs())
+ ui->audioCodecBox->addItem(QMediaFormat::audioCodecDescription(codec), QVariant::fromValue(codec));
//containers
ui->containerBox->addItem(tr("Default"), QVariant(QString()));
- for (auto &containerName: m_audioRecorder->supportedContainers()) {
- ui->containerBox->addItem(containerName, QVariant(containerName));
+ for (auto &container : QMediaEncoderInfo::supportedFileFormats()) {
+ if (container < QMediaFormat::AAC) // ### Somewhat hacky, skip video formats
+ continue;
+ ui->containerBox->addItem(QMediaFormat::fileFormatDescription(container), QVariant::fromValue(container));
}
//sample rate
- ui->sampleRateBox->addItem(tr("Default"), QVariant(0));
- for (int sampleRate: m_audioRecorder->supportedAudioSampleRates()) {
- ui->sampleRateBox->addItem(QString::number(sampleRate), QVariant(
- sampleRate));
- }
+ auto sampleRates = m_audioRecorder->audioInput().supportedSampleRates();
+ ui->sampleRateBox->setRange(sampleRates.minimum, sampleRates.maximum);
+ ui->sampleRateBox->setValue(qBound(sampleRates.minimum, 44100, sampleRates.maximum));
//channels
ui->channelsBox->addItem(tr("Default"), QVariant(-1));
@@ -194,19 +193,18 @@ void AudioRecorder::toggleRecord()
if (m_audioRecorder->state() == QMediaRecorder::StoppedState) {
m_audioRecorder->setAudioInput(boxValue(ui->audioDeviceBox).value<QAudioDeviceInfo>());
- QAudioEncoderSettings settings;
- settings.setCodec(boxValue(ui->audioCodecBox).toString());
- settings.setSampleRate(boxValue(ui->sampleRateBox).toInt());
- settings.setBitRate(boxValue(ui->bitrateBox).toInt());
- settings.setChannelCount(boxValue(ui->channelsBox).toInt());
+ QMediaEncoderSettings settings;
+ settings.setFormat(boxValue(ui->containerBox).value<QMediaFormat::FileFormat>());
+ settings.setAudioCodec(boxValue(ui->audioCodecBox).value<QMediaFormat::AudioCodec>());
+ settings.setAudioSampleRate(ui->sampleRateBox->value());
+ settings.setAudioBitRate(boxValue(ui->bitrateBox).toInt());
+ settings.setAudioChannelCount(boxValue(ui->channelsBox).toInt());
settings.setQuality(QMultimedia::EncodingQuality(ui->qualitySlider->value()));
settings.setEncodingMode(ui->constantQualityRadioButton->isChecked() ?
QMultimedia::ConstantQualityEncoding :
QMultimedia::ConstantBitRateEncoding);
- QString container = boxValue(ui->containerBox).toString();
-
- m_audioRecorder->setEncodingSettings(settings, QVideoEncoderSettings(), container);
+ m_audioRecorder->setEncoderSettings(settings);
m_audioRecorder->record();
}
else {
diff --git a/examples/multimedia/audiorecorder/audiorecorder.ui b/examples/multimedia/audiorecorder/audiorecorder.ui
index 6ea510524..bd2560622 100644
--- a/examples/multimedia/audiorecorder/audiorecorder.ui
+++ b/examples/multimedia/audiorecorder/audiorecorder.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>297</width>
- <height>374</height>
+ <height>476</height>
</rect>
</property>
<property name="windowTitle">
@@ -51,9 +51,6 @@
<item row="2" column="1">
<widget class="QComboBox" name="containerBox"/>
</item>
- <item row="3" column="1">
- <widget class="QComboBox" name="sampleRateBox"/>
- </item>
<item row="1" column="1">
<widget class="QComboBox" name="audioCodecBox"/>
</item>
@@ -67,6 +64,9 @@
<item row="4" column="1">
<widget class="QComboBox" name="channelsBox"/>
</item>
+ <item row="3" column="1">
+ <widget class="QSpinBox" name="sampleRateBox"/>
+ </item>
</layout>
</item>
<item row="1" column="0" colspan="3">
diff --git a/examples/multimediawidgets/camera/camera.cpp b/examples/multimediawidgets/camera/camera.cpp
index 533a2d4db..f573970d2 100644
--- a/examples/multimediawidgets/camera/camera.cpp
+++ b/examples/multimediawidgets/camera/camera.cpp
@@ -222,19 +222,12 @@ void Camera::configureVideoSettings()
VideoSettings settingsDialog(m_mediaRecorder.data());
settingsDialog.setWindowFlags(settingsDialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);
- settingsDialog.setAudioSettings(m_audioSettings);
- settingsDialog.setVideoSettings(m_videoSettings);
- settingsDialog.setFormat(m_videoContainerFormat);
+ settingsDialog.setEncoderSettings(m_encoderSettings);
if (settingsDialog.exec()) {
- m_audioSettings = settingsDialog.audioSettings();
- m_videoSettings = settingsDialog.videoSettings();
- m_videoContainerFormat = settingsDialog.format();
-
- m_mediaRecorder->setEncodingSettings(
- m_audioSettings,
- m_videoSettings,
- m_videoContainerFormat);
+ m_encoderSettings = settingsDialog.encoderSettings();
+
+ m_mediaRecorder->setEncoderSettings(m_encoderSettings);
m_camera->unload();
m_camera->start();
diff --git a/examples/multimediawidgets/camera/camera.h b/examples/multimediawidgets/camera/camera.h
index d45923cc4..a59aad28b 100644
--- a/examples/multimediawidgets/camera/camera.h
+++ b/examples/multimediawidgets/camera/camera.h
@@ -127,9 +127,7 @@ private:
QScopedPointer<QMediaRecorder> m_mediaRecorder;
QImageEncoderSettings m_imageSettings;
- QAudioEncoderSettings m_audioSettings;
- QVideoEncoderSettings m_videoSettings;
- QString m_videoContainerFormat;
+ QMediaEncoderSettings m_encoderSettings;
bool m_isCapturingImage = false;
bool m_applicationExiting = false;
};
diff --git a/examples/multimediawidgets/camera/imagesettings.h b/examples/multimediawidgets/camera/imagesettings.h
index 1e4ac536e..a4cbc7c9b 100644
--- a/examples/multimediawidgets/camera/imagesettings.h
+++ b/examples/multimediawidgets/camera/imagesettings.h
@@ -69,9 +69,6 @@ public:
explicit ImageSettings(QCameraImageCapture *imageCapture, QWidget *parent = nullptr);
~ImageSettings();
- QAudioEncoderSettings audioSettings() const;
- void setAudioSettings(const QAudioEncoderSettings &settings);
-
QImageEncoderSettings imageSettings() const;
void setImageSettings(const QImageEncoderSettings &settings);
diff --git a/examples/multimediawidgets/camera/videosettings.cpp b/examples/multimediawidgets/camera/videosettings.cpp
index f9c79fa12..b41462489 100644
--- a/examples/multimediawidgets/camera/videosettings.cpp
+++ b/examples/multimediawidgets/camera/videosettings.cpp
@@ -52,65 +52,65 @@
#include "ui_videosettings.h"
#include <QComboBox>
+#include <QSpinBox>
#include <QDebug>
#include <QMediaRecorder>
#include <QMediaService>
-
-
-VideoSettings::VideoSettings(QMediaRecorder *mediaRecorder, QWidget *parent) :
- QDialog(parent),
- ui(new Ui::VideoSettingsUi),
- mediaRecorder(mediaRecorder)
+#include <QMediaFormat>
+#include <QAudioDeviceInfo>
+#include <QCameraInfo>
+
+VideoSettings::VideoSettings(QMediaRecorder *mediaRecorder, QWidget *parent)
+ : QDialog(parent),
+ ui(new Ui::VideoSettingsUi),
+ mediaRecorder(mediaRecorder)
{
ui->setupUi(this);
//audio codecs
ui->audioCodecBox->addItem(tr("Default audio codec"), QVariant(QString()));
- const QStringList supportedAudioCodecs = mediaRecorder->supportedAudioCodecs();
- for (const QString &codecName : supportedAudioCodecs) {
- QString description = mediaRecorder->audioCodecDescription(codecName);
- ui->audioCodecBox->addItem(codecName + ": " + description, QVariant(codecName));
+ const auto supportedAudioCodecs = QMediaEncoderInfo::supportedAudioCodecs();
+ for (const auto &codec : supportedAudioCodecs) {
+ QString description = QMediaFormat::audioCodecDescription(codec);
+ ui->audioCodecBox->addItem(QMediaFormat::audioCodecName(codec) + ": " + description, QVariant::fromValue(codec));
}
//sample rate:
- const QList<int>supportedAudioSampleRates = mediaRecorder->supportedAudioSampleRates();
- for (int sampleRate : supportedAudioSampleRates)
- ui->audioSampleRateBox->addItem(QString::number(sampleRate), QVariant(sampleRate));
-
- ui->audioQualitySlider->setRange(0, int(QMultimedia::VeryHighQuality));
+ const auto sampleRates = mediaRecorder->audioInput().supportedSampleRates();
+ ui->audioSampleRateBox->setRange(sampleRates.minimum, sampleRates.maximum);
//video codecs
ui->videoCodecBox->addItem(tr("Default video codec"), QVariant(QString()));
- const QStringList supportedVideoCodecs = mediaRecorder->supportedVideoCodecs();
- for (const QString &codecName : supportedVideoCodecs) {
- QString description = mediaRecorder->videoCodecDescription(codecName);
- ui->videoCodecBox->addItem(codecName + ": " + description, QVariant(codecName));
+ const auto supportedVideoCodecs = QMediaEncoderInfo::supportedVideoCodecs();
+ for (const auto &codec : supportedVideoCodecs) {
+ QString description = QMediaFormat::videoCodecDescription(codec);
+ ui->videoCodecBox->addItem(QMediaFormat::videoCodecName(codec) + ": " + description, QVariant::fromValue(codec));
}
- ui->videoQualitySlider->setRange(0, int(QMultimedia::VeryHighQuality));
-
ui->videoResolutionBox->addItem(tr("Default"));
- const QList<QSize> supportedResolutions = mediaRecorder->supportedResolutions();
+ auto supportedResolutions = mediaRecorder->videoInput().photoResolutions(); // ### Should use resolutions from video formats
for (const QSize &resolution : supportedResolutions) {
ui->videoResolutionBox->addItem(QString("%1x%2").arg(resolution.width()).arg(resolution.height()),
QVariant(resolution));
}
ui->videoFramerateBox->addItem(tr("Default"));
- const QList<qreal> supportedFrameRates = mediaRecorder->supportedFrameRates();
- for (qreal rate : supportedFrameRates) {
- QString rateString = QString("%1").arg(rate, 0, 'f', 2);
- ui->videoFramerateBox->addItem(rateString, QVariant(rate));
- }
+// const QList<qreal> supportedFrameRates = mediaRecorder->supportedFrameRates();
+// for (qreal rate : supportedFrameRates) {
+// QString rateString = QString("%1").arg(rate, 0, 'f', 2);
+// ui->videoFramerateBox->addItem(rateString, QVariant(rate));
+// }
//containers
ui->containerFormatBox->addItem(tr("Default container"), QVariant(QString()));
- const QStringList formats = mediaRecorder->supportedContainers();
- for (const QString &format : formats) {
- ui->containerFormatBox->addItem(format + ": " + mediaRecorder->containerDescription(format),
- QVariant(format));
+ const auto formats = QMediaEncoderInfo::supportedFileFormats();
+ for (auto format : formats) {
+ ui->containerFormatBox->addItem(QMediaFormat::fileFormatName(format) + ": " + QMediaFormat::fileFormatDescription(format),
+ QVariant::fromValue(format));
}
+
+ ui->qualitySlider->setRange(0, int(QMultimedia::VeryHighQuality));
}
VideoSettings::~VideoSettings()
@@ -130,59 +130,42 @@ void VideoSettings::changeEvent(QEvent *e)
}
}
-QAudioEncoderSettings VideoSettings::audioSettings() const
-{
- QAudioEncoderSettings settings = mediaRecorder->audioSettings();
- settings.setCodec(boxValue(ui->audioCodecBox).toString());
- settings.setQuality(QMultimedia::EncodingQuality(ui->audioQualitySlider->value()));
- settings.setSampleRate(boxValue(ui->audioSampleRateBox).toInt());
- return settings;
-}
-
-void VideoSettings::setAudioSettings(const QAudioEncoderSettings &audioSettings)
+QMediaEncoderSettings VideoSettings::encoderSettings() const
{
- selectComboBoxItem(ui->audioCodecBox, QVariant(audioSettings.codec()));
- selectComboBoxItem(ui->audioSampleRateBox, QVariant(audioSettings.sampleRate()));
- ui->audioQualitySlider->setValue(audioSettings.quality());
-}
+ QMediaEncoderSettings settings = mediaRecorder->encoderSettings();
+ settings.setQuality(QMultimedia::EncodingQuality(ui->qualitySlider->value()));
+ settings.setFormat(boxValue(ui->containerFormatBox).value<QMediaFormat::FileFormat>());
-QVideoEncoderSettings VideoSettings::videoSettings() const
-{
- QVideoEncoderSettings settings = mediaRecorder->videoSettings();
- settings.setCodec(boxValue(ui->videoCodecBox).toString());
- settings.setQuality(QMultimedia::EncodingQuality(ui->videoQualitySlider->value()));
- settings.setResolution(boxValue(ui->videoResolutionBox).toSize());
- settings.setFrameRate(boxValue(ui->videoFramerateBox).value<qreal>());
+ settings.setAudioCodec(boxValue(ui->audioCodecBox).value<QMediaFormat::AudioCodec>());
+ settings.setAudioSampleRate(ui->audioSampleRateBox->value());
+ settings.setVideoCodec(boxValue(ui->videoCodecBox).value<QMediaFormat::VideoCodec>());
+ settings.setVideoResolution(boxValue(ui->videoResolutionBox).toSize());
+ settings.setVideoFrameRate(boxValue(ui->videoFramerateBox).value<qreal>());
return settings;
}
-void VideoSettings::setVideoSettings(const QVideoEncoderSettings &videoSettings)
+void VideoSettings::setEncoderSettings(const QMediaEncoderSettings &encoderSettings)
{
- selectComboBoxItem(ui->videoCodecBox, QVariant(videoSettings.codec()));
- selectComboBoxItem(ui->videoResolutionBox, QVariant(videoSettings.resolution()));
- ui->videoQualitySlider->setValue(videoSettings.quality());
+ selectComboBoxItem(ui->containerFormatBox, QVariant::fromValue(encoderSettings.format()));
+ 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<qreal>();
- if (qFuzzyCompare(itemRate, videoSettings.frameRate())) {
+ if (qFuzzyCompare(itemRate, encoderSettings.videoFrameRate())) {
ui->videoFramerateBox->setCurrentIndex(i);
break;
}
}
}
-QString VideoSettings::format() const
-{
- return boxValue(ui->containerFormatBox).toString();
-}
-
-void VideoSettings::setFormat(const QString &format)
-{
- selectComboBoxItem(ui->containerFormatBox, QVariant(format));
-}
-
QVariant VideoSettings::boxValue(const QComboBox *box) const
{
int idx = box->currentIndex();
diff --git a/examples/multimediawidgets/camera/videosettings.h b/examples/multimediawidgets/camera/videosettings.h
index a192942a9..35970d150 100644
--- a/examples/multimediawidgets/camera/videosettings.h
+++ b/examples/multimediawidgets/camera/videosettings.h
@@ -69,14 +69,8 @@ public:
explicit VideoSettings(QMediaRecorder *mediaRecorder, QWidget *parent = nullptr);
~VideoSettings();
- QAudioEncoderSettings audioSettings() const;
- void setAudioSettings(const QAudioEncoderSettings&);
-
- QVideoEncoderSettings videoSettings() const;
- void setVideoSettings(const QVideoEncoderSettings&);
-
- QString format() const;
- void setFormat(const QString &format);
+ QMediaEncoderSettings encoderSettings() const;
+ void setEncoderSettings(const QMediaEncoderSettings&);
protected:
void changeEvent(QEvent *e) override;
diff --git a/examples/multimediawidgets/camera/videosettings.ui b/examples/multimediawidgets/camera/videosettings.ui
index 940b7db7a..e30e31608 100644
--- a/examples/multimediawidgets/camera/videosettings.ui
+++ b/examples/multimediawidgets/camera/videosettings.ui
@@ -6,149 +6,150 @@
<rect>
<x>0</x>
<y>0</y>
- <width>561</width>
- <height>369</height>
+ <width>686</width>
+ <height>499</height>
</rect>
</property>
<property name="windowTitle">
<string>Video Settings</string>
</property>
- <layout class="QGridLayout" name="gridLayout_4">
- <item row="0" column="0">
- <widget class="QScrollArea" name="scrollArea">
- <property name="frameShape">
- <enum>QFrame::NoFrame</enum>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="4" column="1">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
</property>
- <property name="widgetResizable">
- <bool>true</bool>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
- <widget class="QWidget" name="scrollAreaWidgetContents">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>543</width>
- <height>250</height>
- </rect>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>Video</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="1" column="0" colspan="2">
+ <widget class="QComboBox" name="videoResolutionBox"/>
+ </item>
+ <item row="4" column="0" colspan="2">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>Video Codec:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <widget class="QComboBox" name="videoFramerateBox"/>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QLabel" name="label_9">
+ <property name="text">
+ <string>Framerate:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" colspan="2">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>Resolution:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0" colspan="2">
+ <widget class="QComboBox" name="videoCodecBox"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QWidget" name="widget" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
</property>
- <layout class="QGridLayout" name="gridLayout_3">
- <item row="0" column="0">
- <widget class="QGroupBox" name="groupBox">
- <property name="title">
- <string>Audio</string>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0" colspan="2">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Audio Codec:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0" colspan="2">
- <widget class="QComboBox" name="audioCodecBox"/>
- </item>
- <item row="2" column="0" colspan="2">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Sample Rate:</string>
- </property>
- </widget>
- </item>
- <item row="3" column="0" colspan="2">
- <widget class="QComboBox" name="audioSampleRateBox"/>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Quality:</string>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QSlider" name="audioQualitySlider">
- <property name="maximum">
- <number>4</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="0" column="1" rowspan="3">
- <widget class="QGroupBox" name="groupBox_2">
- <property name="title">
- <string>Video</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0" colspan="2">
- <widget class="QLabel" name="label_8">
- <property name="text">
- <string>Resolution:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0" colspan="2">
- <widget class="QComboBox" name="videoResolutionBox"/>
- </item>
- <item row="2" column="0" colspan="2">
- <widget class="QLabel" name="label_9">
- <property name="text">
- <string>Framerate:</string>
- </property>
- </widget>
- </item>
- <item row="3" column="0" colspan="2">
- <widget class="QComboBox" name="videoFramerateBox"/>
- </item>
- <item row="4" column="0" colspan="2">
- <widget class="QLabel" name="label_6">
- <property name="text">
- <string>Video Codec:</string>
- </property>
- </widget>
- </item>
- <item row="5" column="0" colspan="2">
- <widget class="QComboBox" name="videoCodecBox"/>
- </item>
- <item row="6" column="0">
- <widget class="QLabel" name="label_7">
- <property name="text">
- <string>Quality:</string>
- </property>
- </widget>
- </item>
- <item row="6" column="1">
- <widget class="QSlider" name="videoQualitySlider">
- <property name="maximum">
- <number>4</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Container Format:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QComboBox" name="containerFormatBox"/>
- </item>
- </layout>
- </widget>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="title">
+ <string>Audio</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Audio Codec:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="audioCodecBox"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>Sample Rate:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="audioSampleRateBox"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Quality:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSlider" name="qualitySlider">
+ <property name="maximum">
+ <number>4</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>File Format:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="containerFormatBox"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
</widget>
</item>
- <item row="1" column="0">
+ <item row="3" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -156,21 +157,11 @@
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
- <height>14</height>
+ <height>40</height>
</size>
</property>
</spacer>
</item>
- <item row="2" column="0">
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
- </item>
</layout>
</widget>
<resources/>
diff --git a/src/imports/multimedia/qdeclarativecamerarecorder.cpp b/src/imports/multimedia/qdeclarativecamerarecorder.cpp
index 2739d19e0..fecff9145 100644
--- a/src/imports/multimedia/qdeclarativecamerarecorder.cpp
+++ b/src/imports/multimedia/qdeclarativecamerarecorder.cpp
@@ -103,7 +103,7 @@ QDeclarativeCameraRecorder::~QDeclarativeCameraRecorder()
*/
QSize QDeclarativeCameraRecorder::captureResolution()
{
- return m_videoSettings.resolution();
+ return m_encoderSettings.videoResolution();
}
/*!
@@ -114,9 +114,9 @@ QSize QDeclarativeCameraRecorder::captureResolution()
\sa {QtMultimedia::CameraImageProcessing::whiteBalanceMode}{whileBalanceMode}
*/
-QString QDeclarativeCameraRecorder::audioCodec() const
+QMediaFormat::AudioCodec QDeclarativeCameraRecorder::audioCodec() const
{
- return m_audioSettings.codec();
+ return m_encoderSettings.audioCodec();
}
/*!
@@ -125,9 +125,9 @@ QString QDeclarativeCameraRecorder::audioCodec() const
This property holds the video codec to be used for recording video.
Typically this is \c h264.
*/
-QString QDeclarativeCameraRecorder::videoCodec() const
+QMediaFormat::VideoCodec QDeclarativeCameraRecorder::videoCodec() const
{
- return m_videoSettings.codec();
+ return m_encoderSettings.videoCodec();
}
/*!
@@ -136,47 +136,48 @@ QString QDeclarativeCameraRecorder::videoCodec() const
This property holds the media container to be used for recording video.
Typically this is \c mp4.
*/
-QString QDeclarativeCameraRecorder::mediaContainer() const
+QMediaFormat::FileFormat QDeclarativeCameraRecorder::mediaContainer() const
{
- return m_mediaContainer;
+ return m_encoderSettings.format();
}
void QDeclarativeCameraRecorder::setCaptureResolution(const QSize &resolution)
{
- m_videoSettings = m_recorder->videoSettings();
+ m_encoderSettings = m_recorder->encoderSettings();
if (resolution != captureResolution()) {
- m_videoSettings.setResolution(resolution);
- m_recorder->setVideoSettings(m_videoSettings);
+ m_encoderSettings.setVideoResolution(resolution);
+ m_recorder->setEncoderSettings(m_encoderSettings);
emit captureResolutionChanged(resolution);
}
}
-void QDeclarativeCameraRecorder::setAudioCodec(const QString &codec)
+void QDeclarativeCameraRecorder::setAudioCodec(QMediaFormat::AudioCodec codec)
{
- m_audioSettings = m_recorder->audioSettings();
+ m_encoderSettings = m_recorder->encoderSettings();
if (codec != audioCodec()) {
- m_audioSettings.setCodec(codec);
- m_recorder->setAudioSettings(m_audioSettings);
- emit audioCodecChanged(codec);
+ m_encoderSettings.setAudioCodec(codec);
+ m_recorder->setEncoderSettings(m_encoderSettings);
+ emit audioCodecChanged();
}
}
-void QDeclarativeCameraRecorder::setVideoCodec(const QString &codec)
+void QDeclarativeCameraRecorder::setVideoCodec(QMediaFormat::VideoCodec codec)
{
- m_videoSettings = m_recorder->videoSettings();
+ m_encoderSettings = m_recorder->encoderSettings();
if (codec != videoCodec()) {
- m_videoSettings.setCodec(codec);
- m_recorder->setVideoSettings(m_videoSettings);
- emit videoCodecChanged(codec);
+ m_encoderSettings.setVideoCodec(codec);
+ m_recorder->setEncoderSettings(m_encoderSettings);
+ emit videoCodecChanged();
}
}
-void QDeclarativeCameraRecorder::setMediaContainer(const QString &container)
+void QDeclarativeCameraRecorder::setMediaContainer(QMediaFormat::FileFormat container)
{
- if (container != m_mediaContainer) {
- m_mediaContainer = container;
- m_recorder->setContainerFormat(container);
- emit mediaContainerChanged(container);
+ m_encoderSettings = m_recorder->encoderSettings();
+ if (container != m_encoderSettings.format()) {
+ m_encoderSettings.setFormat(container);
+ m_recorder->setEncoderSettings(m_encoderSettings);
+ emit mediaContainerChanged();
}
}
@@ -187,7 +188,7 @@ void QDeclarativeCameraRecorder::setMediaContainer(const QString &container)
*/
qreal QDeclarativeCameraRecorder::frameRate() const
{
- return m_videoSettings.frameRate();
+ return m_encoderSettings.videoFrameRate();
}
/*!
@@ -197,7 +198,7 @@ qreal QDeclarativeCameraRecorder::frameRate() const
*/
int QDeclarativeCameraRecorder::videoBitRate() const
{
- return m_videoSettings.bitRate();
+ return m_encoderSettings.videoBitRate();
}
/*!
@@ -207,7 +208,7 @@ int QDeclarativeCameraRecorder::videoBitRate() const
*/
int QDeclarativeCameraRecorder::audioBitRate() const
{
- return m_audioSettings.bitRate();
+ return m_encoderSettings.audioBitRate();
}
/*!
@@ -218,7 +219,7 @@ int QDeclarativeCameraRecorder::audioBitRate() const
*/
int QDeclarativeCameraRecorder::audioChannels() const
{
- return m_audioSettings.channelCount();
+ return m_encoderSettings.audioChannelCount();
}
/*!
@@ -228,7 +229,7 @@ int QDeclarativeCameraRecorder::audioChannels() const
*/
int QDeclarativeCameraRecorder::audioSampleRate() const
{
- return m_audioSettings.sampleRate();
+ return m_encoderSettings.audioSampleRate();
}
/*!
@@ -254,7 +255,7 @@ int QDeclarativeCameraRecorder::audioSampleRate() const
*/
QDeclarativeCameraRecorder::EncodingMode QDeclarativeCameraRecorder::videoEncodingMode() const
{
- return EncodingMode(m_videoSettings.encodingMode());
+ return EncodingMode(m_encoderSettings.encodingMode());
}
/*!
@@ -277,75 +278,75 @@ QDeclarativeCameraRecorder::EncodingMode QDeclarativeCameraRecorder::videoEncodi
*/
QDeclarativeCameraRecorder::EncodingMode QDeclarativeCameraRecorder::audioEncodingMode() const
{
- return EncodingMode(m_audioSettings.encodingMode());
+ return EncodingMode(m_encoderSettings.encodingMode());
}
void QDeclarativeCameraRecorder::setFrameRate(qreal frameRate)
{
- m_videoSettings = m_recorder->videoSettings();
- if (!qFuzzyCompare(m_videoSettings.frameRate(),frameRate)) {
- m_videoSettings.setFrameRate(frameRate);
- m_recorder->setVideoSettings(m_videoSettings);
+ m_encoderSettings = m_recorder->encoderSettings();
+ if (!qFuzzyCompare(m_encoderSettings.videoFrameRate(),frameRate)) {
+ m_encoderSettings.setVideoFrameRate(frameRate);
+ m_recorder->setEncoderSettings(m_encoderSettings);
emit frameRateChanged(frameRate);
}
}
void QDeclarativeCameraRecorder::setVideoBitRate(int rate)
{
- m_videoSettings = m_recorder->videoSettings();
- if (m_videoSettings.bitRate() != rate) {
- m_videoSettings.setBitRate(rate);
- m_recorder->setVideoSettings(m_videoSettings);
+ m_encoderSettings = m_recorder->encoderSettings();
+ if (m_encoderSettings.videoBitRate() != rate) {
+ m_encoderSettings.setVideoBitRate(rate);
+ m_recorder->setEncoderSettings(m_encoderSettings);
emit videoBitRateChanged(rate);
}
}
void QDeclarativeCameraRecorder::setAudioBitRate(int rate)
{
- m_audioSettings = m_recorder->audioSettings();
- if (m_audioSettings.bitRate() != rate) {
- m_audioSettings.setBitRate(rate);
- m_recorder->setAudioSettings(m_audioSettings);
+ m_encoderSettings = m_recorder->encoderSettings();
+ if (m_encoderSettings.audioBitRate() != rate) {
+ m_encoderSettings.setAudioBitRate(rate);
+ m_recorder->setEncoderSettings(m_encoderSettings);
emit audioBitRateChanged(rate);
}
}
void QDeclarativeCameraRecorder::setAudioChannels(int channels)
{
- m_audioSettings = m_recorder->audioSettings();
- if (m_audioSettings.channelCount() != channels) {
- m_audioSettings.setChannelCount(channels);
- m_recorder->setAudioSettings(m_audioSettings);
+ m_encoderSettings = m_recorder->encoderSettings();
+ if (m_encoderSettings.audioChannelCount() != channels) {
+ m_encoderSettings.setAudioChannelCount(channels);
+ m_recorder->setEncoderSettings(m_encoderSettings);
emit audioChannelsChanged(channels);
}
}
void QDeclarativeCameraRecorder::setAudioSampleRate(int rate)
{
- m_audioSettings = m_recorder->audioSettings();
- if (m_audioSettings.sampleRate() != rate) {
- m_audioSettings.setSampleRate(rate);
- m_recorder->setAudioSettings(m_audioSettings);
+ m_encoderSettings = m_recorder->encoderSettings();
+ if (m_encoderSettings.audioSampleRate() != rate) {
+ m_encoderSettings.setAudioSampleRate(rate);
+ m_recorder->setEncoderSettings(m_encoderSettings);
emit audioSampleRateChanged(rate);
}
}
void QDeclarativeCameraRecorder::setAudioEncodingMode(QDeclarativeCameraRecorder::EncodingMode encodingMode)
{
- m_audioSettings = m_recorder->audioSettings();
- if (m_audioSettings.encodingMode() != QMultimedia::EncodingMode(encodingMode)) {
- m_audioSettings.setEncodingMode(QMultimedia::EncodingMode(encodingMode));
- m_recorder->setAudioSettings(m_audioSettings);
+ m_encoderSettings = m_recorder->encoderSettings();
+ if (m_encoderSettings.encodingMode() != QMultimedia::EncodingMode(encodingMode)) {
+ m_encoderSettings.setEncodingMode(QMultimedia::EncodingMode(encodingMode));
+ m_recorder->setEncoderSettings(m_encoderSettings);
emit audioEncodingModeChanged(encodingMode);
}
}
void QDeclarativeCameraRecorder::setVideoEncodingMode(QDeclarativeCameraRecorder::EncodingMode encodingMode)
{
- m_videoSettings = m_recorder->videoSettings();
- if (m_videoSettings.encodingMode() != QMultimedia::EncodingMode(encodingMode)) {
- m_videoSettings.setEncodingMode(QMultimedia::EncodingMode(encodingMode));
- m_recorder->setVideoSettings(m_videoSettings);
+ m_encoderSettings = m_recorder->encoderSettings();
+ if (m_encoderSettings.encodingMode() != QMultimedia::EncodingMode(encodingMode)) {
+ m_encoderSettings.setEncodingMode(QMultimedia::EncodingMode(encodingMode));
+ m_recorder->setEncoderSettings(m_encoderSettings);
emit videoEncodingModeChanged(encodingMode);
}
}
diff --git a/src/imports/multimedia/qdeclarativecamerarecorder_p.h b/src/imports/multimedia/qdeclarativecamerarecorder_p.h
index be30f48f6..da1894507 100644
--- a/src/imports/multimedia/qdeclarativecamerarecorder_p.h
+++ b/src/imports/multimedia/qdeclarativecamerarecorder_p.h
@@ -54,6 +54,7 @@
#include <qcamera.h>
#include <qmediarecorder.h>
#include <qmediaencodersettings.h>
+#include <qmediaformat.h>
QT_BEGIN_NAMESPACE
@@ -70,19 +71,19 @@ class QDeclarativeCameraRecorder : public QObject
Q_PROPERTY(RecorderState recorderState READ recorderState WRITE setRecorderState NOTIFY recorderStateChanged)
Q_PROPERTY(RecorderStatus recorderStatus READ recorderStatus NOTIFY recorderStatusChanged)
- Q_PROPERTY(QString videoCodec READ videoCodec WRITE setVideoCodec NOTIFY videoCodecChanged)
+ Q_PROPERTY(QMediaFormat::VideoCodec videoCodec READ videoCodec WRITE setVideoCodec NOTIFY videoCodecChanged)
Q_PROPERTY(QSize resolution READ captureResolution WRITE setCaptureResolution NOTIFY captureResolutionChanged)
Q_PROPERTY(qreal frameRate READ frameRate WRITE setFrameRate NOTIFY frameRateChanged)
Q_PROPERTY(int videoBitRate READ videoBitRate WRITE setVideoBitRate NOTIFY videoBitRateChanged)
Q_PROPERTY(EncodingMode videoEncodingMode READ videoEncodingMode WRITE setVideoEncodingMode NOTIFY videoEncodingModeChanged)
- Q_PROPERTY(QString audioCodec READ audioCodec WRITE setAudioCodec NOTIFY audioCodecChanged)
+ Q_PROPERTY(QMediaFormat::AudioCodec audioCodec READ audioCodec WRITE setAudioCodec NOTIFY audioCodecChanged)
Q_PROPERTY(int audioBitRate READ audioBitRate WRITE setAudioBitRate NOTIFY audioBitRateChanged)
Q_PROPERTY(int audioChannels READ audioChannels WRITE setAudioChannels NOTIFY audioChannelsChanged)
Q_PROPERTY(int audioSampleRate READ audioSampleRate WRITE setAudioSampleRate NOTIFY audioSampleRateChanged)
Q_PROPERTY(EncodingMode audioEncodingMode READ audioEncodingMode WRITE setAudioEncodingMode NOTIFY audioEncodingModeChanged)
- Q_PROPERTY(QString mediaContainer READ mediaContainer WRITE setMediaContainer NOTIFY mediaContainerChanged)
+ Q_PROPERTY(QMediaFormat::FileFormat mediaContainer READ mediaContainer WRITE setMediaContainer NOTIFY mediaContainerChanged)
Q_PROPERTY(qint64 duration READ duration NOTIFY durationChanged)
Q_PROPERTY(QString outputLocation READ outputLocation WRITE setOutputLocation NOTIFY outputLocationChanged)
@@ -137,9 +138,9 @@ public:
qint64 duration() const;
bool isMuted() const;
- QString audioCodec() const;
- QString videoCodec() const;
- QString mediaContainer() const;
+ QMediaFormat::AudioCodec audioCodec() const;
+ QMediaFormat::VideoCodec videoCodec() const;
+ QMediaFormat::FileFormat mediaContainer() const;
Error errorCode() const;
QString errorString() const;
@@ -164,9 +165,9 @@ public Q_SLOTS:
void setMetadata(const QString &key, const QVariant &value);
void setCaptureResolution(const QSize &resolution);
- void setAudioCodec(const QString &codec);
- void setVideoCodec(const QString &codec);
- void setMediaContainer(const QString &container);
+ void setAudioCodec(QMediaFormat::AudioCodec codec);
+ void setVideoCodec(QMediaFormat::VideoCodec codec);
+ void setMediaContainer(QMediaFormat::FileFormat container);
void setFrameRate(qreal frameRate);
void setVideoBitRate(int rate);
@@ -190,9 +191,9 @@ Q_SIGNALS:
void metaDataChanged(const QString &key, const QVariant &value);
void captureResolutionChanged(const QSize &);
- void audioCodecChanged(const QString &codec);
- void videoCodecChanged(const QString &codec);
- void mediaContainerChanged(const QString &container);
+ void audioCodecChanged();
+ void videoCodecChanged();
+ void mediaContainerChanged();
void frameRateChanged(qreal arg);
void videoBitRateChanged(int arg);
@@ -214,9 +215,7 @@ private:
QMediaRecorder *m_recorder;
- QAudioEncoderSettings m_audioSettings;
- QVideoEncoderSettings m_videoSettings;
- QString m_mediaContainer;
+ QMediaEncoderSettings m_encoderSettings;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/CMakeLists.txt b/src/multimedia/CMakeLists.txt
index 2e408425c..1ecca6352 100644
--- a/src/multimedia/CMakeLists.txt
+++ b/src/multimedia/CMakeLists.txt
@@ -31,20 +31,17 @@ qt_internal_add_module(Multimedia
camera/qcameraimageprocessing.cpp camera/qcameraimageprocessing.h
camera/qcamerainfo.cpp camera/qcamerainfo.h camera/qcamerainfo_p.h
controls/qaudiodecodercontrol.cpp controls/qaudiodecodercontrol.h
- controls/qaudioencodersettingscontrol.cpp controls/qaudioencodersettingscontrol.h
controls/qcameracontrol.cpp controls/qcameracontrol.h
controls/qcameraexposurecontrol.cpp controls/qcameraexposurecontrol.h
controls/qcamerafocuscontrol.cpp controls/qcamerafocuscontrol.h
controls/qcameraimagecapturecontrol.cpp controls/qcameraimagecapturecontrol.h
controls/qcameraimageprocessingcontrol.cpp controls/qcameraimageprocessingcontrol.h
controls/qimageencodercontrol.cpp controls/qimageencodercontrol.h
- controls/qmediacontainercontrol.cpp controls/qmediacontainercontrol.h
controls/qmediaplayercontrol.cpp controls/qmediaplayercontrol.h
controls/qmediarecordercontrol.cpp controls/qmediarecordercontrol.h
controls/qmediastreamscontrol.cpp controls/qmediastreamscontrol.h
controls/qmetadatareadercontrol.cpp controls/qmetadatareadercontrol.h
controls/qmetadatawritercontrol.cpp controls/qmetadatawritercontrol.h
- controls/qvideoencodersettingscontrol.cpp controls/qvideoencodersettingscontrol.h
controls/qvideorenderercontrol.cpp controls/qvideorenderercontrol.h
controls/qvideowindowcontrol.cpp controls/qvideowindowcontrol.h
platform/qmediaplatformcaptureinterface.cpp platform/qmediaplatformcaptureinterface_p.h
@@ -203,15 +200,12 @@ qt_internal_extend_target(Multimedia CONDITION QT_FEATURE_gstreamer
platform/gstreamer/audio/qaudiooutput_gstreamer.cpp platform/gstreamer/audio/qaudiooutput_gstreamer_p.h
platform/gstreamer/audio/qgstreameraudiodecodercontrol.cpp platform/gstreamer/audio/qgstreameraudiodecodercontrol_p.h
platform/gstreamer/common/qgstappsrc.cpp platform/gstreamer/common/qgstappsrc_p.h
- platform/gstreamer/common/qgstreameraudioencoder.cpp platform/gstreamer/common/qgstreameraudioencoder_p.h
- platform/gstreamer/common/qgstreamercontainer.cpp platform/gstreamer/common/qgstreamercontainer_p.h
platform/gstreamer/common/qgstcodecsinfo.cpp platform/gstreamer/common/qgstcodecsinfo_p.h
platform/gstreamer/common/qgstreamerbufferprobe.cpp platform/gstreamer/common/qgstreamerbufferprobe_p.h
platform/gstreamer/common/qgstreamerbushelper.cpp platform/gstreamer/common/qgstreamerbushelper_p.h
platform/gstreamer/common/qgstreamermessage.cpp platform/gstreamer/common/qgstreamermessage_p.h
platform/gstreamer/common/qgstreamerplayercontrol.cpp platform/gstreamer/common/qgstreamerplayercontrol_p.h
platform/gstreamer/common/qgstreamerplayersession.cpp platform/gstreamer/common/qgstreamerplayersession_p.h
- platform/gstreamer/common/qgstreamervideoencoder.cpp platform/gstreamer/common/qgstreamervideoencoder_p.h
platform/gstreamer/common/qgstreamervideooverlay.cpp platform/gstreamer/common/qgstreamervideooverlay_p.h
platform/gstreamer/common/qgstreamervideorenderer.cpp platform/gstreamer/common/qgstreamervideorenderer_p.h
platform/gstreamer/common/qgstreamervideorendererinterface.cpp platform/gstreamer/common/qgstreamervideorendererinterface_p.h
@@ -237,8 +231,6 @@ qt_internal_extend_target(Multimedia CONDITION QT_FEATURE_gstreamer
qt_internal_extend_target(Multimedia CONDITION QT_FEATURE_gstreamer AND use_camerabin
SOURCES
- platform/gstreamer/camerabin/qgstreameraudioencodercontrol.cpp platform/gstreamer/camerabin/qgstreameraudioencodercontrol_p.h
- platform/gstreamer/camerabin/qgstreamercontainercontrol.cpp platform/gstreamer/camerabin/qgstreamercontainercontrol_p.h
platform/gstreamer/camerabin/camerabincontrol.cpp platform/gstreamer/camerabin/camerabincontrol_p.h
platform/gstreamer/camerabin/camerabinimagecapture.cpp platform/gstreamer/camerabin/camerabinimagecapture_p.h
platform/gstreamer/camerabin/camerabinimageencoder.cpp platform/gstreamer/camerabin/camerabinimageencoder_p.h
@@ -247,7 +239,6 @@ qt_internal_extend_target(Multimedia CONDITION QT_FEATURE_gstreamer AND use_came
platform/gstreamer/camerabin/camerabinrecorder.cpp platform/gstreamer/camerabin/camerabinrecorder_p.h
platform/gstreamer/camerabin/camerabinservice.cpp platform/gstreamer/camerabin/camerabinservice_p.h
platform/gstreamer/camerabin/camerabinsession.cpp platform/gstreamer/camerabin/camerabinsession_p.h
- platform/gstreamer/camerabin/qgstreamervideoencodercontrol.cpp platform/gstreamer/camerabin/qgstreamervideoencodercontrol_p.h
DEFINES
GST_USE_CAMERABIN
)
@@ -351,7 +342,6 @@ qt_internal_extend_target(Multimedia CONDITION ANDROID
platform/android/common/qandroidglobal_p.h
platform/android/common/qandroidmultimediautils.cpp platform/android/common/qandroidmultimediautils_p.h
platform/android/common/qandroidvideooutput.cpp platform/android/common/qandroidvideooutput_p.h
- platform/android/mediacapture/qandroidaudioencodersettingscontrol.cpp platform/android/mediacapture/qandroidaudioencodersettingscontrol_p.h
platform/android/mediacapture/qandroidcameracontrol.cpp platform/android/mediacapture/qandroidcameracontrol_p.h
platform/android/mediacapture/qandroidcameraexposurecontrol.cpp platform/android/mediacapture/qandroidcameraexposurecontrol_p.h
platform/android/mediacapture/qandroidcamerafocuscontrol.cpp platform/android/mediacapture/qandroidcamerafocuscontrol_p.h
@@ -362,9 +352,7 @@ qt_internal_extend_target(Multimedia CONDITION ANDROID
platform/android/mediacapture/qandroidcaptureservice.cpp platform/android/mediacapture/qandroidcaptureservice_p.h
platform/android/mediacapture/qandroidcapturesession.cpp platform/android/mediacapture/qandroidcapturesession_p.h
platform/android/mediacapture/qandroidimageencodercontrol.cpp platform/android/mediacapture/qandroidimageencodercontrol_p.h
- platform/android/mediacapture/qandroidmediacontainercontrol.cpp platform/android/mediacapture/qandroidmediacontainercontrol_p.h
platform/android/mediacapture/qandroidmediarecordercontrol.cpp platform/android/mediacapture/qandroidmediarecordercontrol_p.h
- platform/android/mediacapture/qandroidvideoencodersettingscontrol.cpp platform/android/mediacapture/qandroidvideoencodersettingscontrol_p.h
platform/android/mediaplayer/qandroidmediaplayercontrol.cpp platform/android/mediaplayer/qandroidmediaplayercontrol_p.h
platform/android/mediaplayer/qandroidmediaplayervideorenderercontrol.cpp platform/android/mediaplayer/qandroidmediaplayervideorenderercontrol_p.h
platform/android/mediaplayer/qandroidmediaservice.cpp platform/android/mediaplayer/qandroidmediaservice_p.h
@@ -449,7 +437,6 @@ qt_internal_extend_target(Multimedia CONDITION IOS AND NOT WATCHOS
qt_internal_extend_target(Multimedia CONDITION APPLE AND NOT TVOS AND NOT WATCHOS
SOURCES
- platform/darwin/camera/avfaudioencodersettingscontrol.mm platform/darwin/camera/avfaudioencodersettingscontrol_p.h
platform/darwin/camera/avfcameracontrol.mm platform/darwin/camera/avfcameracontrol_p.h
platform/darwin/camera/avfcameradebug_p.h
platform/darwin/camera/avfcameraexposurecontrol.mm platform/darwin/camera/avfcameraexposurecontrol_p.h
@@ -462,9 +449,7 @@ qt_internal_extend_target(Multimedia CONDITION APPLE AND NOT TVOS AND NOT WATCHO
platform/darwin/camera/avfcamerawindowcontrol.mm platform/darwin/camera/avfcamerawindowcontrol_p.h
platform/darwin/camera/avfimagecapturecontrol.mm platform/darwin/camera/avfimagecapturecontrol_p.h
platform/darwin/camera/avfimageencodercontrol.mm platform/darwin/camera/avfimageencodercontrol_p.h
- platform/darwin/camera/avfmediacontainercontrol.mm platform/darwin/camera/avfmediacontainercontrol_p.h
platform/darwin/camera/avfstoragelocation.mm platform/darwin/camera/avfstoragelocation_p.h
- platform/darwin/camera/avfvideoencodersettingscontrol.mm platform/darwin/camera/avfvideoencodersettingscontrol_p.h
)
qt_internal_extend_target(Multimedia CONDITION MACOS AND NOT TVOS AND NOT WATCHOS
diff --git a/src/multimedia/controls/controls.pri b/src/multimedia/controls/controls.pri
index 3f5b32c72..f196894cb 100644
--- a/src/multimedia/controls/controls.pri
+++ b/src/multimedia/controls/controls.pri
@@ -3,20 +3,17 @@ INCLUDEPATH += controls
PUBLIC_HEADERS += \
controls/qaudiodecodercontrol.h \
- controls/qaudioencodersettingscontrol.h \
controls/qcameracontrol.h \
controls/qcameraexposurecontrol.h \
controls/qcamerafocuscontrol.h \
controls/qcameraimagecapturecontrol.h \
controls/qcameraimageprocessingcontrol.h \
controls/qimageencodercontrol.h \
- controls/qmediacontainercontrol.h \
controls/qmediaplayercontrol.h \
controls/qmediarecordercontrol.h \
controls/qmediastreamscontrol.h \
controls/qmetadatareadercontrol.h \
controls/qmetadatawritercontrol.h \
- controls/qvideoencodersettingscontrol.h \
controls/qvideorenderercontrol.h \
controls/qvideowindowcontrol.h \
@@ -27,7 +24,6 @@ SOURCES += \
controls/qcameraimagecapturecontrol.cpp \
controls/qcameraimageprocessingcontrol.cpp \
controls/qimageencodercontrol.cpp \
- controls/qmediacontainercontrol.cpp \
controls/qmediaplayercontrol.cpp \
controls/qmediarecordercontrol.cpp \
controls/qmediastreamscontrol.cpp \
@@ -36,5 +32,3 @@ SOURCES += \
controls/qvideorenderercontrol.cpp \
controls/qvideowindowcontrol.cpp \
controls/qaudiodecodercontrol.cpp \
- controls/qvideoencodersettingscontrol.cpp \
- controls/qaudioencodersettingscontrol.cpp \
diff --git a/src/multimedia/controls/qaudioencodersettingscontrol.cpp b/src/multimedia/controls/qaudioencodersettingscontrol.cpp
deleted file mode 100644
index 692fa28e2..000000000
--- a/src/multimedia/controls/qaudioencodersettingscontrol.cpp
+++ /dev/null
@@ -1,133 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qaudioencodersettingscontrol.h"
-#include <QtCore/qstringlist.h>
-
-QT_BEGIN_NAMESPACE
-
-
-/*!
- \class QAudioEncoderSettingsControl
- \obsolete
- \inmodule QtMultimedia
-
- \ingroup multimedia_control
-
- \brief The QAudioEncoderSettingsControl class provides access to the settings of a
- media service that performs audio encoding.
-
- If a QMediaService supports encoding audio data it will implement
- QAudioEncoderSettingsControl. This control provides information about the limits
- of restricted audio encoder options and allows the selection of a set of
- audio encoder settings as specified in a QAudioEncoderSettings object.
-
- The functionality provided by this control is exposed to application code through the
- QMediaRecorder class.
-
- The interface name of QAudioEncoderSettingsControl is \c org.qt-project.qt.audioencodersettingscontrol/5.0 as
- defined in QAudioEncoderSettingsControl_iid.
-
- \sa QMediaService::requestControl(), QMediaRecorder
-*/
-
-/*!
- \macro QAudioEncoderSettingsControl_iid
-
- \c org.qt-project.qt.audioencodersettingscontrol/5.0
-
- Defines the interface name of the QAudioEncoderSettingsControl class.
-
- \relates QAudioEncoderSettingsControl
-*/
-
-/*!
- Create a new audio encoder settings control object with the given \a parent.
-*/
-QAudioEncoderSettingsControl::QAudioEncoderSettingsControl(QObject *parent)
- :QObject(parent)
-{
-}
-
-/*!
- \fn QAudioEncoderSettingsControl::supportedAudioCodecs() const
-
- Returns the list of supported audio codec names.
-*/
-
-/*!
- \fn QAudioEncoderSettingsControl::codecDescription(const QString &codecName) const
-
- Returns the description of audio codec \a codecName.
-*/
-
-/*!
- \fn QAudioEncoderSettingsControl::supportedSampleRates(const QAudioEncoderSettings &settings = QAudioEncoderSettings(),
- bool *continuous) const
-
- Returns the list of supported audio sample rates, if known.
-
- If non null audio \a settings parameter is passed,
- the returned list is reduced to sample rates supported with partial settings applied.
-
- It can be used for example to query the list of sample rates, supported by specific audio codec.
-
- If the encoder supports arbitrary sample rates within the supported rates range,
- *\a continuous is set to true, otherwise *\a continuous is set to false.
-*/
-
-/*!
- \fn QAudioEncoderSettingsControl::audioSettings() const
-
- Returns the audio encoder settings.
-
- The returned value may be different tha passed to QAudioEncoderSettingsControl::setAudioSettings()
- if the settings contains the default or undefined parameters.
- In this case if the undefined parameters are already resolved, they should be returned.
-*/
-
-/*!
- \fn QAudioEncoderSettingsControl::setAudioSettings(const QAudioEncoderSettings &settings)
-
- Sets the selected audio \a settings.
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qaudioencodersettingscontrol.cpp"
diff --git a/src/multimedia/controls/qaudioencodersettingscontrol.h b/src/multimedia/controls/qaudioencodersettingscontrol.h
deleted file mode 100644
index b2e257f33..000000000
--- a/src/multimedia/controls/qaudioencodersettingscontrol.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QAUDIOENCODERSETTINGSCONTROL_H
-#define QAUDIOENCODERSETTINGSCONTROL_H
-
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediarecorder.h>
-#include <QtCore/qlist.h>
-#include <QtCore/qpair.h>
-
-QT_BEGIN_NAMESPACE
-
-class QAudioFormat;
-QT_END_NAMESPACE
-
-QT_BEGIN_NAMESPACE
-
-// Required for QDoc workaround
-class QString;
-
-class Q_MULTIMEDIA_EXPORT QAudioEncoderSettingsControl : public QObject
-{
- Q_OBJECT
-
-public:
- virtual QStringList supportedAudioCodecs() const = 0;
- virtual QString codecDescription(const QString &codecName) const = 0;
-
- virtual QList<int> supportedSampleRates(const QAudioEncoderSettings &settings,
- bool *continuous = nullptr) const = 0;
-
- virtual QAudioEncoderSettings audioSettings() const = 0;
- virtual void setAudioSettings(const QAudioEncoderSettings &settings) = 0;
-
-protected:
- explicit QAudioEncoderSettingsControl(QObject *parent = nullptr);
-};
-
-#define QAudioEncoderSettingsControl_iid "org.qt-project.qt.audioencodersettingscontrol/5.0"
-Q_MEDIA_DECLARE_CONTROL(QAudioEncoderSettingsControl, QAudioEncoderSettingsControl_iid)
-
-QT_END_NAMESPACE
-
-
-#endif // QAUDIOENCODERSETTINGSCONTROL_H
diff --git a/src/multimedia/controls/qmediacontainercontrol.cpp b/src/multimedia/controls/qmediacontainercontrol.cpp
deleted file mode 100644
index 851979199..000000000
--- a/src/multimedia/controls/qmediacontainercontrol.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include "qmediacontainercontrol.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QMediaContainerControl
- \obsolete
-
- \brief The QMediaContainerControl class provides access to the output container format of a QMediaService.
-
- \inmodule QtMultimedia
-
-
- \ingroup multimedia_control
-
- If a QMediaService supports writing encoded data it will implement
- QMediaContainerControl. This control provides information about the output
- containers supported by a media service and allows one to be selected as
- the current output containers.
-
- The functionality provided by this control is exposed to application code
- through the QMediaRecorder class.
-
- The interface name of QMediaContainerControl is \c org.qt-project.qt.mediacontainercontrol/5.0 as
- defined in QMediaContainerControl_iid.
-
- \sa QMediaService::requestControl(), QMediaRecorder
-*/
-
-/*!
- \macro QMediaContainerControl_iid
-
- \c org.qt-project.qt.mediacontainercontrol/5.0
-
- Defines the interface name of the QMediaContainerControl class.
-
- \relates QMediaContainerControl
-*/
-
-/*!
- Constructs a new media container control with the given \a parent.
-*/
-QMediaContainerControl::QMediaContainerControl(QObject *parent)
- :QObject(parent)
-{
-}
-
-/*!
- \fn QMediaContainerControl::supportedContainers() const
-
- Returns a list of MIME types of supported container formats.
-*/
-
-/*!
- \fn QMediaContainerControl::containerFormat() const
-
- Returns the selected container format.
-*/
-
-/*!
- \fn QMediaContainerControl::setContainerFormat(const QString &format)
-
- Sets the current container \a format.
-*/
-
-/*!
- \fn QMediaContainerControl::containerDescription(const QString &formatMimeType) const
-
- Returns a description of the container \a formatMimeType.
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qmediacontainercontrol.cpp"
diff --git a/src/multimedia/controls/qmediacontainercontrol.h b/src/multimedia/controls/qmediacontainercontrol.h
deleted file mode 100644
index 34753b44c..000000000
--- a/src/multimedia/controls/qmediacontainercontrol.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#ifndef QMEDIACONTAINERCONTROL_H
-#define QMEDIACONTAINERCONTROL_H
-
-#include <QtMultimedia/qmediaservice.h>
-
-QT_BEGIN_NAMESPACE
-
-// Required for QDoc workaround
-class QString;
-
-class Q_MULTIMEDIA_EXPORT QMediaContainerControl : public QObject
-{
- Q_OBJECT
-
-public:
- virtual QStringList supportedContainers() const = 0;
- virtual QString containerFormat() const = 0;
- virtual void setContainerFormat(const QString &format) = 0;
-
- virtual QString containerDescription(const QString &formatMimeType) const = 0;
-
-protected:
- explicit QMediaContainerControl(QObject *parent = nullptr);
-};
-
-#define QMediaContainerControl_iid "org.qt-project.qt.mediacontainercontrol/5.0"
-Q_MEDIA_DECLARE_CONTROL(QMediaContainerControl, QMediaContainerControl_iid)
-
-QT_END_NAMESPACE
-
-
-#endif // QMEDIACONTAINERCONTROL_H
diff --git a/src/multimedia/controls/qmediarecordercontrol.h b/src/multimedia/controls/qmediarecordercontrol.h
index e0851bac4..647ae2de4 100644
--- a/src/multimedia/controls/qmediarecordercontrol.h
+++ b/src/multimedia/controls/qmediarecordercontrol.h
@@ -74,6 +74,8 @@ public:
virtual QAudioDeviceInfo audioInput() const = 0;
virtual bool setAudioInput(const QAudioDeviceInfo &id) = 0;
+ virtual void setEncoderSettings(const QMediaEncoderSettings &settings) = 0;
+
Q_SIGNALS:
void stateChanged(QMediaRecorder::State state);
void statusChanged(QMediaRecorder::Status status);
diff --git a/src/multimedia/controls/qvideoencodersettingscontrol.cpp b/src/multimedia/controls/qvideoencodersettingscontrol.cpp
deleted file mode 100644
index 710b67455..000000000
--- a/src/multimedia/controls/qvideoencodersettingscontrol.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qvideoencodersettingscontrol.h"
-#include <QtCore/qstringlist.h>
-#include <QtCore/qvariant.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QVideoEncoderSettingsControl
- \obsolete
-
- \inmodule QtMultimedia
-
-
- \ingroup multimedia_control
-
- \brief The QVideoEncoderSettingsControl class provides access to the settings
- of a media service that performs video encoding.
-
- If a QMediaService supports encoding video data it will implement
- QVideoEncoderSettingsControl. This control provides information about the limits
- of restricted video encoder options and allows the selection of a set of
- video encoder settings as specified in a QVideoEncoderSettings object.
-
- The functionality provided by this control is exposed to application code
- through the QMediaRecorder class.
-
- The interface name of QVideoEncoderSettingsControl is \c org.qt-project.qt.videoencodersettingscontrol/5.0 as
- defined in QVideoEncoderSettingsControl_iid.
-
- \sa QMediaRecorder, QVideoEncoderSettings, QMediaService::requestControl()
-*/
-
-/*!
- \macro QVideoEncoderSettingsControl_iid
-
- \c org.qt-project.qt.videoencodersettingscontrol/5.0
-
- Defines the interface name of the QVideoEncoderSettingsControl class.
-
- \relates QVideoEncoderSettingsControl
-*/
-
-/*!
- Create a new video encoder settings control object with the given \a parent.
-*/
-QVideoEncoderSettingsControl::QVideoEncoderSettingsControl(QObject *parent)
- :QObject(parent)
-{
-}
-
-/*!
- \fn QVideoEncoderSettingsControl::supportedVideoCodecs() const
-
- Returns the list of supported video codecs.
-*/
-
-/*!
- \fn QVideoEncoderSettingsControl::videoCodecDescription(const QString &codec) const
-
- Returns a description of a video \a codec.
-*/
-
-/*!
- \fn QVideoEncoderSettingsControl::supportedResolutions(const QVideoEncoderSettings &settings = QVideoEncoderSettings(),
- bool *continuous = 0) const
-
- Returns a list of supported resolutions.
-
- If non null video \a settings parameter is passed,
- the returned list is reduced to resolution supported with partial settings like
- \l {QVideoEncoderSettings::setCodec()}{video codec} or
- \l {QVideoEncoderSettings::setFrameRate()}{frame rate} applied.
-
- If the encoder supports arbitrary resolutions within the supported resolutions range,
- *\a continuous is set to true, otherwise *\a continuous is set to false.
-
- \sa QVideoEncoderSettings::resolution()
-*/
-
-/*!
- \fn QVideoEncoderSettingsControl::supportedFrameRates(const QVideoEncoderSettings &settings = QVideoEncoderSettings(),
- bool *continuous = 0) const
-
- Returns a list of supported frame rates.
-
- If non null video \a settings parameter is passed,
- the returned list is reduced to frame rates supported with partial settings like
- \l {QVideoEncoderSettings::setCodec()}{video codec} or
- \l {QVideoEncoderSettings::setResolution()}{video resolution} applied.
-
- If the encoder supports arbitrary frame rates within the supported range,
- *\a continuous is set to true, otherwise *\a continuous is set to false.
-
- \sa QVideoEncoderSettings::frameRate()
-*/
-
-/*!
- \fn QVideoEncoderSettingsControl::videoSettings() const
-
- Returns the video encoder settings.
-
- The returned value may be different tha passed to QVideoEncoderSettingsControl::setVideoSettings()
- if the settings contains the default or undefined parameters.
- In this case if the undefined parameters are already resolved, they should be returned.
-*/
-
-/*!
- \fn QVideoEncoderSettingsControl::setVideoSettings(const QVideoEncoderSettings &settings)
-
- Sets the selected video encoder \a settings.
-*/
-
-QT_END_NAMESPACE
-
-#include "moc_qvideoencodersettingscontrol.cpp"
diff --git a/src/multimedia/controls/qvideoencodersettingscontrol.h b/src/multimedia/controls/qvideoencodersettingscontrol.h
deleted file mode 100644
index 3edca2d56..000000000
--- a/src/multimedia/controls/qvideoencodersettingscontrol.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QVIDEOENCODERSETTINGSCONTROL_H
-#define QVIDEOENCODERSETTINGSCONTROL_H
-
-#include <QtMultimedia/qmediaservice.h>
-#include <QtMultimedia/qmediarecorder.h>
-
-#include <QtCore/qpair.h>
-#include <QtCore/qsize.h>
-
-QT_BEGIN_NAMESPACE
-
-class QByteArray;
-QT_END_NAMESPACE
-
-QT_BEGIN_NAMESPACE
-
-// Required for QDoc workaround
-class QString;
-
-class Q_MULTIMEDIA_EXPORT QVideoEncoderSettingsControl : public QObject
-{
- Q_OBJECT
-
-public:
- virtual QStringList supportedVideoCodecs() const = 0;
- virtual QString videoCodecDescription(const QString &codec) const = 0;
-
- virtual QVideoEncoderSettings videoSettings() const = 0;
- virtual void setVideoSettings(const QVideoEncoderSettings &settings) = 0;
-
-protected:
- explicit QVideoEncoderSettingsControl(QObject *parent = nullptr);
-};
-
-#define QVideoEncoderSettingsControl_iid "org.qt-project.qt.videoencodersettingscontrol/5.0"
-Q_MEDIA_DECLARE_CONTROL(QVideoEncoderSettingsControl, QVideoEncoderSettingsControl_iid)
-
-QT_END_NAMESPACE
-
-
-#endif
diff --git a/src/multimedia/platform/android/mediacapture/mediacapture.pri b/src/multimedia/platform/android/mediacapture/mediacapture.pri
index 8a6959d94..6d785d366 100644
--- a/src/multimedia/platform/android/mediacapture/mediacapture.pri
+++ b/src/multimedia/platform/android/mediacapture/mediacapture.pri
@@ -11,9 +11,6 @@ SOURCES += \
$$PWD/qandroidcamerafocuscontrol.cpp \
$$PWD/qandroidcapturesession.cpp \
$$PWD/qandroidmediarecordercontrol.cpp \
- $$PWD/qandroidaudioencodersettingscontrol.cpp \
- $$PWD/qandroidmediacontainercontrol.cpp \
- $$PWD/qandroidvideoencodersettingscontrol.cpp \
$$PWD/qandroidcameravideorenderercontrol.cpp
HEADERS += \
@@ -27,7 +24,4 @@ HEADERS += \
$$PWD/qandroidcamerafocuscontrol_p.h \
$$PWD/qandroidcapturesession_p.h \
$$PWD/qandroidmediarecordercontrol_p.h \
- $$PWD/qandroidaudioencodersettingscontrol_p.h \
- $$PWD/qandroidmediacontainercontrol_p.h \
- $$PWD/qandroidvideoencodersettingscontrol_p.h \
$$PWD/qandroidcameravideorenderercontrol_p.h
diff --git a/src/multimedia/platform/android/mediacapture/qandroidaudioencodersettingscontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidaudioencodersettingscontrol.cpp
deleted file mode 100644
index 50a3ca0b6..000000000
--- a/src/multimedia/platform/android/mediacapture/qandroidaudioencodersettingscontrol.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qandroidaudioencodersettingscontrol_p.h"
-
-#include "qandroidcapturesession_p.h"
-
-QT_BEGIN_NAMESPACE
-
-QAndroidAudioEncoderSettingsControl::QAndroidAudioEncoderSettingsControl(QAndroidCaptureSession *session)
- : QAudioEncoderSettingsControl()
- , m_session(session)
-{
-}
-
-QStringList QAndroidAudioEncoderSettingsControl::supportedAudioCodecs() const
-{
- return QStringList() << QLatin1String("amr-nb") << QLatin1String("amr-wb") << QLatin1String("aac");
-}
-
-QString QAndroidAudioEncoderSettingsControl::codecDescription(const QString &codecName) const
-{
- if (codecName == QLatin1String("amr-nb"))
- return tr("Adaptive Multi-Rate Narrowband (AMR-NB) audio codec");
- else if (codecName == QLatin1String("amr-wb"))
- return tr("Adaptive Multi-Rate Wideband (AMR-WB) audio codec");
- else if (codecName == QLatin1String("aac"))
- return tr("AAC Low Complexity (AAC-LC) audio codec");
-
- return QString();
-}
-
-QList<int> QAndroidAudioEncoderSettingsControl::supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous) const
-{
- if (continuous)
- *continuous = false;
-
- if (settings.isNull() || settings.codec().isNull() || settings.codec() == QLatin1String("aac")) {
- return QList<int>() << 8000 << 11025 << 12000 << 16000 << 22050
- << 24000 << 32000 << 44100 << 48000 << 96000;
- } else if (settings.codec() == QLatin1String("amr-nb")) {
- return QList<int>() << 8000;
- } else if (settings.codec() == QLatin1String("amr-wb")) {
- return QList<int>() << 16000;
- }
-
- return QList<int>();
-}
-
-QAudioEncoderSettings QAndroidAudioEncoderSettingsControl::audioSettings() const
-{
- return m_session->audioSettings();
-}
-
-void QAndroidAudioEncoderSettingsControl::setAudioSettings(const QAudioEncoderSettings &settings)
-{
- m_session->setAudioSettings(settings);
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/platform/android/mediacapture/qandroidaudioencodersettingscontrol_p.h b/src/multimedia/platform/android/mediacapture/qandroidaudioencodersettingscontrol_p.h
deleted file mode 100644
index df380a290..000000000
--- a/src/multimedia/platform/android/mediacapture/qandroidaudioencodersettingscontrol_p.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QANDROIDAUDIOENCODERSETTINGSCONTROL_H
-#define QANDROIDAUDIOENCODERSETTINGSCONTROL_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <qaudioencodersettingscontrol.h>
-
-QT_BEGIN_NAMESPACE
-
-class QAndroidCaptureSession;
-
-class QAndroidAudioEncoderSettingsControl : public QAudioEncoderSettingsControl
-{
- Q_OBJECT
-public:
- explicit QAndroidAudioEncoderSettingsControl(QAndroidCaptureSession *session);
-
- QStringList supportedAudioCodecs() const override;
- QString codecDescription(const QString &codecName) const override;
- QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const override;
- QAudioEncoderSettings audioSettings() const override;
- void setAudioSettings(const QAudioEncoderSettings &settings) override;
-
-private:
- QAndroidCaptureSession *m_session;
-};
-
-QT_END_NAMESPACE
-
-#endif // QANDROIDAUDIOENCODERSETTINGSCONTROL_H
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp
index bbd69ff49..26095fd36 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice.cpp
@@ -50,9 +50,6 @@
#include "qandroidcameraimageprocessingcontrol_p.h"
#include "qandroidimageencodercontrol_p.h"
#include "qandroidcameraimagecapturecontrol_p.h"
-#include "qandroidaudioencodersettingscontrol_p.h"
-#include "qandroidvideoencodersettingscontrol_p.h"
-#include "qandroidmediacontainercontrol_p.h"
QT_BEGIN_NAMESPACE
@@ -76,23 +73,14 @@ QAndroidCaptureService::QAndroidCaptureService(QMediaRecorder::CaptureMode mode)
m_cameraImageProcessingControl = 0;
m_imageEncoderControl = 0;
m_imageCaptureControl = 0;
- m_videoEncoderSettingsControl = 0;
}
m_captureSession = new QAndroidCaptureSession(m_cameraSession);
m_recorderControl = new QAndroidMediaRecorderControl(m_captureSession);
- m_audioEncoderSettingsControl = new QAndroidAudioEncoderSettingsControl(m_captureSession);
- m_mediaContainerControl = new QAndroidMediaContainerControl(m_captureSession);
-
- if (m_videoEnabled)
- m_videoEncoderSettingsControl = new QAndroidVideoEncoderSettingsControl(m_captureSession);
}
QAndroidCaptureService::~QAndroidCaptureService()
{
- delete m_audioEncoderSettingsControl;
- delete m_videoEncoderSettingsControl;
- delete m_mediaContainerControl;
delete m_recorderControl;
delete m_captureSession;
delete m_cameraControl;
@@ -110,15 +98,6 @@ QObject *QAndroidCaptureService::requestControl(const char *name)
if (qstrcmp(name, QMediaRecorderControl_iid) == 0)
return m_recorderControl;
- if (qstrcmp(name, QMediaContainerControl_iid) == 0)
- return m_mediaContainerControl;
-
- if (qstrcmp(name, QAudioEncoderSettingsControl_iid) == 0)
- return m_audioEncoderSettingsControl;
-
- if (qstrcmp(name, QVideoEncoderSettingsControl_iid) == 0)
- return m_videoEncoderSettingsControl;
-
if (qstrcmp(name, QCameraControl_iid) == 0)
return m_cameraControl;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h
index 3bdb30bbe..b9d7bb685 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcaptureservice_p.h
@@ -68,9 +68,6 @@ class QAndroidCameraFocusControl;
class QAndroidCameraImageProcessingControl;
class QAndroidImageEncoderControl;
class QAndroidCameraImageCaptureControl;
-class QAndroidAudioEncoderSettingsControl;
-class QAndroidVideoEncoderSettingsControl;
-class QAndroidMediaContainerControl;
class QAndroidCaptureService : public QMediaPlatformCaptureInterface
{
@@ -96,9 +93,6 @@ private:
QAndroidCameraImageProcessingControl *m_cameraImageProcessingControl;
QAndroidImageEncoderControl *m_imageEncoderControl;
QAndroidCameraImageCaptureControl *m_imageCaptureControl;
- QAndroidAudioEncoderSettingsControl *m_audioEncoderSettingsControl;
- QAndroidVideoEncoderSettingsControl *m_videoEncoderSettingsControl;
- QAndroidMediaContainerControl *m_mediaContainerControl;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp
index 64969a064..7672e7a01 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidcapturesession.cpp
@@ -58,9 +58,7 @@ QAndroidCaptureSession::QAndroidCaptureSession(QAndroidCameraSession *cameraSess
, m_duration(0)
, m_state(QMediaRecorder::StoppedState)
, m_status(QMediaRecorder::UnloadedStatus)
- , m_containerFormatDirty(true)
- , m_videoSettingsDirty(true)
- , m_audioSettingsDirty(true)
+ , m_encoderSettingsDirty(true)
, m_outputFormat(AndroidMediaRecorder::DefaultOutputFormat)
, m_audioEncoder(AndroidMediaRecorder::DefaultAudioEncoder)
, m_videoEncoder(AndroidMediaRecorder::DefaultVideoEncoder)
@@ -234,21 +232,55 @@ void QAndroidCaptureSession::start()
m_mediaRecorder->setOutputFormat(m_outputFormat);
// Set audio encoder settings
- m_mediaRecorder->setAudioChannels(m_audioSettings.channelCount());
- m_mediaRecorder->setAudioEncodingBitRate(m_audioSettings.bitRate());
- m_mediaRecorder->setAudioSamplingRate(m_audioSettings.sampleRate());
+ m_mediaRecorder->setAudioChannels(m_encoderSettings.audioChannelCount());
+ m_mediaRecorder->setAudioEncodingBitRate(m_encoderSettings.audioBitRate());
+ m_mediaRecorder->setAudioSamplingRate(m_encoderSettings.audioSampleRate());
m_mediaRecorder->setAudioEncoder(m_audioEncoder);
// Set video encoder settings
if (m_cameraSession) {
- m_mediaRecorder->setVideoSize(m_videoSettings.resolution());
- m_mediaRecorder->setVideoFrameRate(qRound(m_videoSettings.frameRate()));
- m_mediaRecorder->setVideoEncodingBitRate(m_videoSettings.bitRate());
+ m_mediaRecorder->setVideoSize(m_encoderSettings.videoResolution());
+ m_mediaRecorder->setVideoFrameRate(qRound(m_encoderSettings.videoFrameRate()));
+ m_mediaRecorder->setVideoEncodingBitRate(m_encoderSettings.videoBitRate());
m_mediaRecorder->setVideoEncoder(m_videoEncoder);
m_mediaRecorder->setOrientationHint(m_cameraSession->currentCameraRotation());
}
+ const char *extension = "mp4";
+ switch(m_encoderSettings.format()) {
+ case QMediaFormat::MPEG4:
+ break;
+ case QMediaFormat::Ogg:
+ extension = "ogg";
+ break;
+ case QMediaFormat::QuickTime:
+ extension = "mov";
+ break;
+ case QMediaFormat::WebM:
+ extension = "webm";
+ break;
+ case QMediaFormat::AAC:
+ extension = "aac";
+ break;
+ case QMediaFormat::MP3:
+ extension = "mp3";
+ break;
+ case QMediaFormat::Mpeg4Audio:
+ extension = "m4a";
+ break;
+ case QMediaFormat::Opus:
+ extension = "opus";
+ case QMediaFormat::ASF:
+ case QMediaFormat::AVI:
+ case QMediaFormat::Matroska:
+ case QMediaFormat::FLAC:
+ case QMediaFormat::Wave:
+ case QMediaFormat::WindowsMediaAudio:
+ case QMediaFormat::UnspecifiedFormat:
+ break;
+ }
+
// Set output file
QString filePath = m_mediaStorageLocation.generateFileName(
m_requestedOutputLocation.isLocalFile() ? m_requestedOutputLocation.toLocalFile()
@@ -257,7 +289,7 @@ void QAndroidCaptureSession::start()
: QMediaStorageLocation::Sounds,
m_cameraSession ? QLatin1String("VID_")
: QLatin1String("REC_"),
- m_containerFormat);
+ QString::fromUtf8(extension));
m_usedOutputLocation = QUrl::fromLocalFile(filePath);
m_mediaRecorder->setOutputFile(filePath);
@@ -366,84 +398,58 @@ qint64 QAndroidCaptureSession::duration() const
return m_duration;
}
-void QAndroidCaptureSession::setContainerFormat(const QString &format)
+void QAndroidCaptureSession::setEncoderSettings(const QMediaEncoderSettings &settings)
{
- if (m_containerFormat == format)
- return;
-
- m_containerFormat = format;
- m_containerFormatDirty = true;
+ m_encoderSettings = settings;
+ m_encoderSettings.resolveFormat(m_cameraSession ? QMediaEncoderSettings::AudioAndVideo : QMediaEncoderSettings::AudioOnly);
+ m_encoderSettingsDirty = true;
}
-void QAndroidCaptureSession::setAudioSettings(const QAudioEncoderSettings &settings)
-{
- if (m_audioSettings == settings)
- return;
-
- m_audioSettings = settings;
- m_audioSettingsDirty = true;
-}
-
-void QAndroidCaptureSession::setVideoSettings(const QVideoEncoderSettings &settings)
+void QAndroidCaptureSession::applySettings()
{
- if (!m_cameraSession || m_videoSettings == settings)
+ if (!m_encoderSettingsDirty)
return;
- m_videoSettings = settings;
- m_videoSettingsDirty = true;
-}
-
-void QAndroidCaptureSession::applySettings()
-{
// container settings
- if (m_containerFormatDirty) {
- if (m_containerFormat.isEmpty()) {
- m_containerFormat = m_defaultSettings.outputFileExtension;
- m_outputFormat = m_defaultSettings.outputFormat;
- } else if (m_containerFormat == QLatin1String("3gp")) {
- m_outputFormat = AndroidMediaRecorder::THREE_GPP;
- } else if (!m_cameraSession && m_containerFormat == QLatin1String("amr")) {
- m_outputFormat = AndroidMediaRecorder::AMR_NB_Format;
- } else if (!m_cameraSession && m_containerFormat == QLatin1String("awb")) {
- m_outputFormat = AndroidMediaRecorder::AMR_WB_Format;
- } else {
- m_containerFormat = QStringLiteral("mp4");
- m_outputFormat = AndroidMediaRecorder::MPEG_4;
- }
-
- m_containerFormatDirty = false;
+ auto fileFormat = m_encoderSettings.format();
+ if (!m_cameraSession && fileFormat == QMediaFormat::AAC) {
+ m_outputFormat = AndroidMediaRecorder::AAC_ADTS;
+ } else if (fileFormat == QMediaFormat::Ogg) {
+ m_outputFormat = AndroidMediaRecorder::OGG;
+ } else if (fileFormat == QMediaFormat::WebM) {
+ m_outputFormat = AndroidMediaRecorder::WEBM;
+// } else if (fileFormat == QLatin1String("3gp")) {
+// m_outputFormat = AndroidMediaRecorder::THREE_GPP;
+ } else {
+ // fallback to MP4
+ m_outputFormat = AndroidMediaRecorder::MPEG_4;
}
// audio settings
- if (m_audioSettingsDirty) {
- if (m_audioSettings.channelCount() <= 0)
- m_audioSettings.setChannelCount(m_defaultSettings.audioChannels);
- if (m_audioSettings.bitRate() <= 0)
- m_audioSettings.setBitRate(m_defaultSettings.audioBitRate);
- if (m_audioSettings.sampleRate() <= 0)
- m_audioSettings.setSampleRate(m_defaultSettings.audioSampleRate);
-
- if (m_audioSettings.codec().isEmpty())
- m_audioEncoder = m_defaultSettings.audioEncoder;
- else if (m_audioSettings.codec() == QLatin1String("aac"))
- m_audioEncoder = AndroidMediaRecorder::AAC;
- else if (m_audioSettings.codec() == QLatin1String("amr-nb"))
- m_audioEncoder = AndroidMediaRecorder::AMR_NB_Encoder;
- else if (m_audioSettings.codec() == QLatin1String("amr-wb"))
- m_audioEncoder = AndroidMediaRecorder::AMR_WB_Encoder;
- else
- m_audioEncoder = m_defaultSettings.audioEncoder;
+ if (m_encoderSettings.audioChannelCount() <= 0)
+ m_encoderSettings.setAudioChannelCount(m_defaultSettings.audioChannels);
+ if (m_encoderSettings.audioBitRate() <= 0)
+ m_encoderSettings.setAudioBitRate(m_defaultSettings.audioBitRate);
+ if (m_encoderSettings.audioSampleRate() <= 0)
+ m_encoderSettings.setAudioSampleRate(m_defaultSettings.audioSampleRate);
+
+ if (m_encoderSettings.audioCodec() == QMediaFormat::AudioCodec::AAC)
+ m_audioEncoder = AndroidMediaRecorder::AAC;
+ else if (m_encoderSettings.audioCodec() == QMediaFormat::AudioCodec::Opus)
+ m_audioEncoder = AndroidMediaRecorder::OPUS;
+ else if (m_encoderSettings.audioCodec() == QMediaFormat::AudioCodec::Vorbis)
+ m_audioEncoder = AndroidMediaRecorder::VORBIS;
+ else
+ m_audioEncoder = m_defaultSettings.audioEncoder;
- m_audioSettingsDirty = false;
- }
// video settings
- if (m_cameraSession && m_cameraSession->camera() && m_videoSettingsDirty) {
- if (m_videoSettings.resolution().isEmpty()) {
- m_videoSettings.setResolution(m_defaultSettings.videoResolution);
- } else if (!m_supportedResolutions.contains(m_videoSettings.resolution())) {
+ if (m_cameraSession && m_cameraSession->camera()) {
+ if (m_encoderSettings.videoResolution().isEmpty()) {
+ m_encoderSettings.setVideoResolution(m_defaultSettings.videoResolution);
+ } else if (!m_supportedResolutions.contains(m_encoderSettings.videoResolution())) {
// if the requested resolution is not supported, find the closest one
- QSize reqSize = m_videoSettings.resolution();
+ QSize reqSize = m_encoderSettings.videoResolution();
int reqPixelCount = reqSize.width() * reqSize.height();
QList<int> supportedPixelCounts;
for (int i = 0; i < m_supportedResolutions.size(); ++i) {
@@ -451,33 +457,30 @@ void QAndroidCaptureSession::applySettings()
supportedPixelCounts.append(s.width() * s.height());
}
int closestIndex = qt_findClosestValue(supportedPixelCounts, reqPixelCount);
- m_videoSettings.setResolution(m_supportedResolutions.at(closestIndex));
+ m_encoderSettings.setVideoResolution(m_supportedResolutions.at(closestIndex));
}
- if (m_videoSettings.frameRate() <= 0)
- m_videoSettings.setFrameRate(m_defaultSettings.videoFrameRate);
- if (m_videoSettings.bitRate() <= 0)
- m_videoSettings.setBitRate(m_defaultSettings.videoBitRate);
+ if (m_encoderSettings.videoFrameRate() <= 0)
+ m_encoderSettings.setVideoFrameRate(m_defaultSettings.videoFrameRate);
+ if (m_encoderSettings.videoBitRate() <= 0)
+ m_encoderSettings.setVideoBitRate(m_defaultSettings.videoBitRate);
- if (m_videoSettings.codec().isEmpty())
- m_videoEncoder = m_defaultSettings.videoEncoder;
- else if (m_videoSettings.codec() == QLatin1String("h263"))
- m_videoEncoder = AndroidMediaRecorder::H263;
- else if (m_videoSettings.codec() == QLatin1String("h264"))
+ if (m_encoderSettings.videoCodec() == QMediaFormat::VideoCodec::H264)
m_videoEncoder = AndroidMediaRecorder::H264;
- else if (m_videoSettings.codec() == QLatin1String("mpeg4_sp"))
+ else if (m_encoderSettings.videoCodec() == QMediaFormat::VideoCodec::H265)
+ m_videoEncoder = AndroidMediaRecorder::HEVC;
+ else if (m_encoderSettings.videoCodec() == QMediaFormat::VideoCodec::MPEG4)
m_videoEncoder = AndroidMediaRecorder::MPEG_4_SP;
else
m_videoEncoder = m_defaultSettings.videoEncoder;
- m_videoSettingsDirty = false;
}
}
void QAndroidCaptureSession::updateResolution()
{
m_cameraSession->camera()->stopPreviewSynchronous();
- m_cameraSession->applyResolution(m_videoSettings.resolution(), false);
+ m_cameraSession->applyResolution(m_encoderSettings.videoResolution(), false);
}
void QAndroidCaptureSession::restartViewfinder()
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcapturesession_p.h b/src/multimedia/platform/android/mediacapture/qandroidcapturesession_p.h
index 8e0067e93..b5f40fc46 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidcapturesession_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidcapturesession_p.h
@@ -86,14 +86,8 @@ public:
qint64 duration() const;
- QString containerFormat() const { return m_containerFormat; }
- void setContainerFormat(const QString &format);
-
- QAudioEncoderSettings audioSettings() const { return m_audioSettings; }
- void setAudioSettings(const QAudioEncoderSettings &settings);
-
- QVideoEncoderSettings videoSettings() const { return m_videoSettings; }
- void setVideoSettings(const QVideoEncoderSettings &settings);
+ void setEncoderSettings(const QMediaEncoderSettings &settings);
+ QMediaEncoderSettings encoderSettings() { return m_encoderSettings; }
void applySettings();
@@ -139,7 +133,7 @@ private:
, videoEncoder(AndroidMediaRecorder::DefaultVideoEncoder)
, videoBitRate(1)
, videoFrameRate(-1)
- , videoResolution(320, 240)
+ , videoResolution(1280, 720)
, isNull(true)
{ }
};
@@ -174,12 +168,8 @@ private:
CaptureProfile m_defaultSettings;
- QString m_containerFormat;
- QAudioEncoderSettings m_audioSettings;
- QVideoEncoderSettings m_videoSettings;
- bool m_containerFormatDirty;
- bool m_videoSettingsDirty;
- bool m_audioSettingsDirty;
+ QMediaEncoderSettings m_encoderSettings;
+ bool m_encoderSettingsDirty = false;
AndroidMediaRecorder::OutputFormat m_outputFormat;
AndroidMediaRecorder::AudioEncoder m_audioEncoder;
AndroidMediaRecorder::VideoEncoder m_videoEncoder;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidmediacontainercontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidmediacontainercontrol.cpp
deleted file mode 100644
index 45fe7092c..000000000
--- a/src/multimedia/platform/android/mediacapture/qandroidmediacontainercontrol.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qandroidmediacontainercontrol_p.h"
-
-#include "qandroidcapturesession_p.h"
-
-QT_BEGIN_NAMESPACE
-
-QAndroidMediaContainerControl::QAndroidMediaContainerControl(QAndroidCaptureSession *session)
- : QMediaContainerControl()
- , m_session(session)
-{
-}
-
-QStringList QAndroidMediaContainerControl::supportedContainers() const
-{
- return QStringList() << QLatin1String("mp4")
- << QLatin1String("3gp")
- << QLatin1String("amr")
- << QLatin1String("awb");
-}
-
-QString QAndroidMediaContainerControl::containerFormat() const
-{
- return m_session->containerFormat();
-}
-
-void QAndroidMediaContainerControl::setContainerFormat(const QString &format)
-{
- m_session->setContainerFormat(format);
-}
-
-QString QAndroidMediaContainerControl::containerDescription(const QString &formatMimeType) const
-{
- if (formatMimeType == QLatin1String("mp4"))
- return tr("MPEG4 media file format");
- else if (formatMimeType == QLatin1String("3gp"))
- return tr("3GPP media file format");
- else if (formatMimeType == QLatin1String("amr"))
- return tr("AMR NB file format");
- else if (formatMimeType == QLatin1String("awb"))
- return tr("AMR WB file format");
-
- return QString();
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/platform/android/mediacapture/qandroidmediacontainercontrol_p.h b/src/multimedia/platform/android/mediacapture/qandroidmediacontainercontrol_p.h
deleted file mode 100644
index 00f09970f..000000000
--- a/src/multimedia/platform/android/mediacapture/qandroidmediacontainercontrol_p.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QANDROIDMEDIACONTAINERCONTROL_H
-#define QANDROIDMEDIACONTAINERCONTROL_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <qmediacontainercontrol.h>
-
-QT_BEGIN_NAMESPACE
-
-class QAndroidCaptureSession;
-
-class QAndroidMediaContainerControl : public QMediaContainerControl
-{
- Q_OBJECT
-public:
- QAndroidMediaContainerControl(QAndroidCaptureSession *session);
-
- QStringList supportedContainers() const override;
- QString containerFormat() const override;
- void setContainerFormat(const QString &format) override;
- QString containerDescription(const QString &formatMimeType) const override;
-
-private:
- QAndroidCaptureSession *m_session;
-};
-
-QT_END_NAMESPACE
-
-#endif // QANDROIDMEDIACONTAINERCONTROL_H
diff --git a/src/multimedia/platform/android/mediacapture/qandroidmediarecordercontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidmediarecordercontrol.cpp
index a7aea4a87..fd77523f9 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidmediarecordercontrol.cpp
+++ b/src/multimedia/platform/android/mediacapture/qandroidmediarecordercontrol.cpp
@@ -136,5 +136,10 @@ bool QAndroidMediaRecorderControl::setAudioInput(const QAudioDeviceInfo &info)
return true;
}
+void QAndroidMediaRecorderControl::setEncoderSettings(const QMediaEncoderSettings &settings)
+{
+ m_session->setEncoderSettings(settings);
+}
+
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/android/mediacapture/qandroidmediarecordercontrol_p.h b/src/multimedia/platform/android/mediacapture/qandroidmediarecordercontrol_p.h
index 53e9b366e..0ef2370c8 100644
--- a/src/multimedia/platform/android/mediacapture/qandroidmediarecordercontrol_p.h
+++ b/src/multimedia/platform/android/mediacapture/qandroidmediarecordercontrol_p.h
@@ -75,6 +75,8 @@ public:
QAudioDeviceInfo audioInput() const override;
bool setAudioInput(const QAudioDeviceInfo &id) override;
+ void setEncoderSettings(const QMediaEncoderSettings &settings) override;
+
public Q_SLOTS:
void setState(QMediaRecorder::State state) override;
void setMuted(bool muted) override;
diff --git a/src/multimedia/platform/android/mediacapture/qandroidvideoencodersettingscontrol.cpp b/src/multimedia/platform/android/mediacapture/qandroidvideoencodersettingscontrol.cpp
deleted file mode 100644
index cda1d2dd3..000000000
--- a/src/multimedia/platform/android/mediacapture/qandroidvideoencodersettingscontrol.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qandroidvideoencodersettingscontrol_p.h"
-
-#include "qandroidcapturesession_p.h"
-
-QT_BEGIN_NAMESPACE
-
-QAndroidVideoEncoderSettingsControl::QAndroidVideoEncoderSettingsControl(QAndroidCaptureSession *session)
- : QVideoEncoderSettingsControl()
- , m_session(session)
-{
-}
-
-QStringList QAndroidVideoEncoderSettingsControl::supportedVideoCodecs() const
-{
- return QStringList() << QLatin1String("h263")
- << QLatin1String("h264")
- << QLatin1String("mpeg4_sp");
-}
-
-QString QAndroidVideoEncoderSettingsControl::videoCodecDescription(const QString &codecName) const
-{
- if (codecName == QLatin1String("h263"))
- return tr("H.263 compression");
- else if (codecName == QLatin1String("h264"))
- return tr("H.264 compression");
- else if (codecName == QLatin1String("mpeg4_sp"))
- return tr("MPEG-4 SP compression");
-
- return QString();
-}
-
-QVideoEncoderSettings QAndroidVideoEncoderSettingsControl::videoSettings() const
-{
- return m_session->videoSettings();
-}
-
-void QAndroidVideoEncoderSettingsControl::setVideoSettings(const QVideoEncoderSettings &settings)
-{
- m_session->setVideoSettings(settings);
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/platform/android/mediacapture/qandroidvideoencodersettingscontrol_p.h b/src/multimedia/platform/android/mediacapture/qandroidvideoencodersettingscontrol_p.h
deleted file mode 100644
index d17825d87..000000000
--- a/src/multimedia/platform/android/mediacapture/qandroidvideoencodersettingscontrol_p.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QANDROIDVIDEOENCODERSETTINGSCONTROL_H
-#define QANDROIDVIDEOENCODERSETTINGSCONTROL_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <qvideoencodersettingscontrol.h>
-
-QT_BEGIN_NAMESPACE
-
-class QAndroidCaptureSession;
-
-class QAndroidVideoEncoderSettingsControl : public QVideoEncoderSettingsControl
-{
- Q_OBJECT
-public:
- explicit QAndroidVideoEncoderSettingsControl(QAndroidCaptureSession *session);
-
- QStringList supportedVideoCodecs() const override;
- QString videoCodecDescription(const QString &codecName) const override;
- QVideoEncoderSettings videoSettings() const override;
- void setVideoSettings(const QVideoEncoderSettings &settings) override;
-
-private:
- QAndroidCaptureSession *m_session;
-};
-
-QT_END_NAMESPACE
-
-#endif // QANDROIDVIDEOENCODERSETTINGSCONTROL_H
diff --git a/src/multimedia/platform/android/qandroidformatsinfo.cpp b/src/multimedia/platform/android/qandroidformatsinfo.cpp
index c6860e3c9..b8491492a 100644
--- a/src/multimedia/platform/android/qandroidformatsinfo.cpp
+++ b/src/multimedia/platform/android/qandroidformatsinfo.cpp
@@ -44,45 +44,47 @@ QT_BEGIN_NAMESPACE
QAndroidFormatInfo::QAndroidFormatInfo()
{
// ### Properly determine the set of supported codecs, this is a minimal set gathered from the old code base
- m_decodableAudioCodecs << Qt::AudioCodec::AAC << Qt::AudioCodec::MP3;
- m_encodableAudioCodecs << Qt::AudioCodec::AAC << Qt::AudioCodec::MP3;
- m_decodableVideoCodecs << Qt::VideoCodec::MPEG4 << Qt::VideoCodec::H264;
- m_encodableVideoCodecs << Qt::VideoCodec::MPEG4 << Qt::VideoCodec::H264;
- m_decodableMediaContainers << Qt::MediaContainer::MPEG4 << Qt::MediaContainer::MP3;
- m_encodableMediaContainers << Qt::MediaContainer::MPEG4 << Qt::MediaContainer::MP3;
+ m_decodableAudioCodecs << QMediaFormat::AudioCodec::AAC << QMediaFormat::AudioCodec::MP3 << QMediaFormat::AudioCodec::Opus
+ << QMediaFormat::AudioCodec::Vorbis;
+ m_encodableAudioCodecs = m_decodableAudioCodecs;
+ m_decodableVideoCodecs << QMediaFormat::VideoCodec::MPEG4 << QMediaFormat::VideoCodec::H264 << QMediaFormat::VideoCodec::H265;
+ m_encodableVideoCodecs = m_decodableVideoCodecs;
+ m_decodableFileFormats << QMediaFormat::FileFormat::MPEG4 << QMediaFormat::FileFormat::MP3 << QMediaFormat::AAC
+ << QMediaFormat::Ogg << QMediaFormat::WebM;
+ m_encodableFileFormats = m_decodableFileFormats;
}
-QAndroidFormatInfo::~QAndroidFormatInfo
+QAndroidFormatInfo::~QAndroidFormatInfo()
{
}
-QList<Qt::MediaContainer> QAndroidFormatInfo::decodableMediaContainers() const
+QList<QMediaFormat::FileFormat> QAndroidFormatInfo::decodableMediaContainers() const
{
- return m_decodableMediaContainers;
+ return m_decodableFileFormats;
}
-QList<Qt::AudioCodec> QAndroidFormatInfo::decodableAudioCodecs() const
+QList<QMediaFormat::AudioCodec> QAndroidFormatInfo::decodableAudioCodecs() const
{
return m_decodableAudioCodecs;
}
-QList<Qt::VideoCodec> QAndroidFormatInfo::decodableVideoCodecs() const
+QList<QMediaFormat::VideoCodec> QAndroidFormatInfo::decodableVideoCodecs() const
{
return m_decodableVideoCodecs;
}
-QList<Qt::MediaContainer> QAndroidFormatInfo::encodableMediaContainers() const
+QList<QMediaFormat::FileFormat> QAndroidFormatInfo::encodableMediaContainers() const
{
- return m_encodableMediaContainers;
+ return m_encodableFileFormats;
}
-QList<Qt::AudioCodec> QAndroidFormatInfo::encodableAudioCodecs() const
+QList<QMediaFormat::AudioCodec> QAndroidFormatInfo::encodableAudioCodecs() const
{
return m_encodableAudioCodecs;
}
-QList<Qt::VideoCodec> QAndroidFormatInfo::encodableVideoCodecs() const
+QList<QMediaFormat::VideoCodec> QAndroidFormatInfo::encodableVideoCodecs() const
{
return m_encodableVideoCodecs;
}
diff --git a/src/multimedia/platform/android/qandroidformatsinfo_p.h b/src/multimedia/platform/android/qandroidformatsinfo_p.h
index 54ce80072..c3f744ebc 100644
--- a/src/multimedia/platform/android/qandroidformatsinfo_p.h
+++ b/src/multimedia/platform/android/qandroidformatsinfo_p.h
@@ -70,11 +70,11 @@ public:
QList<QMediaFormat::VideoCodec> encodableVideoCodecs() const override;
private:
- QList<QMediaFormat::FileFormat> m_decodableMediaContainers;
+ QList<QMediaFormat::FileFormat> m_decodableFileFormats;
QList<QMediaFormat::AudioCodec> m_decodableAudioCodecs;
QList<QMediaFormat::VideoCodec> m_decodableVideoCodecs;
- QList<QMediaFormat::FileFormat> m_encodableMediaContainers;
+ QList<QMediaFormat::FileFormat> m_encodableFileFormats;
QList<QMediaFormat::AudioCodec> m_encodableAudioCodecs;
QList<QMediaFormat::VideoCodec> m_encodableVideoCodecs;
};
diff --git a/src/multimedia/platform/android/wrappers/jni/androidmediarecorder_p.h b/src/multimedia/platform/android/wrappers/jni/androidmediarecorder_p.h
index 9cba14f75..6cab2285a 100644
--- a/src/multimedia/platform/android/wrappers/jni/androidmediarecorder_p.h
+++ b/src/multimedia/platform/android/wrappers/jni/androidmediarecorder_p.h
@@ -107,7 +107,9 @@ public:
DefaultAudioEncoder = 0,
AMR_NB_Encoder = 1,
AMR_WB_Encoder = 2,
- AAC = 3
+ AAC = 3,
+ OPUS = 7,
+ VORBIS = 6
};
enum AudioSource {
@@ -124,7 +126,8 @@ public:
DefaultVideoEncoder = 0,
H263 = 1,
H264 = 2,
- MPEG_4_SP = 3
+ MPEG_4_SP = 3,
+ HEVC = 5
};
enum VideoSource {
@@ -137,7 +140,10 @@ public:
THREE_GPP = 1,
MPEG_4 = 2,
AMR_NB_Format = 3,
- AMR_WB_Format = 4
+ AMR_WB_Format = 4,
+ AAC_ADTS = 6,
+ OGG = 11,
+ WEBM = 9
};
AndroidMediaRecorder();
diff --git a/src/multimedia/platform/darwin/camera/avfaudioencodersettingscontrol.mm b/src/multimedia/platform/darwin/camera/avfaudioencodersettingscontrol.mm
deleted file mode 100644
index b613ca32a..000000000
--- a/src/multimedia/platform/darwin/camera/avfaudioencodersettingscontrol.mm
+++ /dev/null
@@ -1,226 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "avfaudioencodersettingscontrol_p.h"
-
-#include "avfcameraservice_p.h"
-#include "avfcamerasession_p.h"
-
-#include <AVFoundation/AVFoundation.h>
-#include <CoreAudio/CoreAudioTypes.h>
-
-QT_BEGIN_NAMESPACE
-
-struct AudioCodecInfo
-{
- QString description;
- int id;
-
- AudioCodecInfo() : id(0) { }
- AudioCodecInfo(const QString &desc, int i)
- : description(desc), id(i)
- { }
-};
-
-typedef QMap<QString, AudioCodecInfo> SupportedAudioCodecs;
-Q_GLOBAL_STATIC_WITH_ARGS(QString , defaultCodec, (QLatin1String("aac")))
-Q_GLOBAL_STATIC(SupportedAudioCodecs, supportedCodecs)
-
-AVFAudioEncoderSettingsControl::AVFAudioEncoderSettingsControl(AVFCameraService *service)
- : QAudioEncoderSettingsControl()
- , m_service(service)
-{
- if (supportedCodecs->isEmpty()) {
- supportedCodecs->insert(QStringLiteral("lpcm"),
- AudioCodecInfo(QStringLiteral("Linear PCM"),
- kAudioFormatLinearPCM));
- supportedCodecs->insert(QStringLiteral("ulaw"),
- AudioCodecInfo(QStringLiteral("PCM Mu-Law 2:1"),
- kAudioFormatULaw));
- supportedCodecs->insert(QStringLiteral("alaw"),
- AudioCodecInfo(QStringLiteral("PCM A-Law 2:1"),
- kAudioFormatALaw));
- supportedCodecs->insert(QStringLiteral("ima4"),
- AudioCodecInfo(QStringLiteral("IMA 4:1 ADPCM"),
- kAudioFormatAppleIMA4));
- supportedCodecs->insert(QStringLiteral("alac"),
- AudioCodecInfo(QStringLiteral("Apple Lossless Audio Codec"),
- kAudioFormatAppleLossless));
- supportedCodecs->insert(QStringLiteral("aac"),
- AudioCodecInfo(QStringLiteral("MPEG-4 Low Complexity AAC"),
- kAudioFormatMPEG4AAC));
- supportedCodecs->insert(QStringLiteral("aach"),
- AudioCodecInfo(QStringLiteral("MPEG-4 High Efficiency AAC"),
- kAudioFormatMPEG4AAC_HE));
- supportedCodecs->insert(QStringLiteral("aacl"),
- AudioCodecInfo(QStringLiteral("MPEG-4 AAC Low Delay"),
- kAudioFormatMPEG4AAC_LD));
- supportedCodecs->insert(QStringLiteral("aace"),
- AudioCodecInfo(QStringLiteral("MPEG-4 AAC Enhanced Low Delay"),
- kAudioFormatMPEG4AAC_ELD));
- supportedCodecs->insert(QStringLiteral("aacf"),
- AudioCodecInfo(QStringLiteral("MPEG-4 AAC Enhanced Low Delay with SBR"),
- kAudioFormatMPEG4AAC_ELD_SBR));
- supportedCodecs->insert(QStringLiteral("aacp"),
- AudioCodecInfo(QStringLiteral("MPEG-4 HE AAC V2"),
- kAudioFormatMPEG4AAC_HE_V2));
- supportedCodecs->insert(QStringLiteral("ilbc"),
- AudioCodecInfo(QStringLiteral("iLBC"),
- kAudioFormatiLBC));
- }
-}
-
-QStringList AVFAudioEncoderSettingsControl::supportedAudioCodecs() const
-{
- return supportedCodecs->keys();
-}
-
-QString AVFAudioEncoderSettingsControl::codecDescription(const QString &codecName) const
-{
- return supportedCodecs->value(codecName).description;
-}
-
-QList<int> AVFAudioEncoderSettingsControl::supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous) const
-{
- Q_UNUSED(settings);
-
- if (continuous)
- *continuous = true;
-
- return QList<int>() << 8000 << 96000;
-}
-
-QAudioEncoderSettings AVFAudioEncoderSettingsControl::audioSettings() const
-{
- return m_actualSettings;
-}
-
-void AVFAudioEncoderSettingsControl::setAudioSettings(const QAudioEncoderSettings &settings)
-{
- if (m_requestedSettings == settings)
- return;
-
- m_requestedSettings = m_actualSettings = settings;
-}
-
-NSDictionary *AVFAudioEncoderSettingsControl::applySettings()
-{
- if (m_service->session()->state() != QCamera::LoadedState &&
- m_service->session()->state() != QCamera::ActiveState) {
- return nil;
- }
-
- NSMutableDictionary *settings = [NSMutableDictionary dictionary];
-
- QString codec = m_requestedSettings.codec().isEmpty() ? *defaultCodec : m_requestedSettings.codec();
- if (!supportedCodecs->contains(codec)) {
- qWarning("Unsupported codec: '%s'", codec.toLocal8Bit().constData());
- codec = *defaultCodec;
- }
- [settings setObject:[NSNumber numberWithInt:supportedCodecs->value(codec).id] forKey:AVFormatIDKey];
- m_actualSettings.setCodec(codec);
-
-#ifdef Q_OS_OSX
- if (m_requestedSettings.encodingMode() == QMultimedia::ConstantQualityEncoding) {
- int quality;
- switch (m_requestedSettings.quality()) {
- case QMultimedia::VeryLowQuality:
- quality = AVAudioQualityMin;
- break;
- case QMultimedia::LowQuality:
- quality = AVAudioQualityLow;
- break;
- case QMultimedia::HighQuality:
- quality = AVAudioQualityHigh;
- break;
- case QMultimedia::VeryHighQuality:
- quality = AVAudioQualityMax;
- break;
- case QMultimedia::NormalQuality:
- default:
- quality = AVAudioQualityMedium;
- break;
- }
- [settings setObject:[NSNumber numberWithInt:quality] forKey:AVEncoderAudioQualityKey];
-
- } else
-#endif
- if (m_requestedSettings.bitRate() > 0){
- [settings setObject:[NSNumber numberWithInt:m_requestedSettings.bitRate()] forKey:AVEncoderBitRateKey];
- }
-
- int sampleRate = m_requestedSettings.sampleRate();
- int channelCount = m_requestedSettings.channelCount();
-
-#ifdef Q_OS_IOS
- // Some keys are mandatory only on iOS
- if (codec == QLatin1String("lpcm")) {
- [settings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
- [settings setObject:[NSNumber numberWithInt:NO] forKey:AVLinearPCMIsBigEndianKey];
- [settings setObject:[NSNumber numberWithInt:NO] forKey:AVLinearPCMIsFloatKey];
- [settings setObject:[NSNumber numberWithInt:NO] forKey:AVLinearPCMIsNonInterleaved];
- }
-
- if (codec == QLatin1String("alac"))
- [settings setObject:[NSNumber numberWithInt:24] forKey:AVEncoderBitDepthHintKey];
-
- if (sampleRate <= 0)
- sampleRate = codec == QLatin1String("ilbc") ? 8000 : 44100;
- if (channelCount <= 0)
- channelCount = codec == QLatin1String("ilbc") ? 1 : 2;
-#endif
-
- if (sampleRate > 0) {
- [settings setObject:[NSNumber numberWithInt:sampleRate] forKey:AVSampleRateKey];
- m_actualSettings.setSampleRate(sampleRate);
- }
- if (channelCount > 0) {
- [settings setObject:[NSNumber numberWithInt:channelCount] forKey:AVNumberOfChannelsKey];
- m_actualSettings.setChannelCount(channelCount);
- }
-
- return settings;
-}
-
-void AVFAudioEncoderSettingsControl::unapplySettings()
-{
- m_actualSettings = m_requestedSettings;
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/platform/darwin/camera/avfaudioencodersettingscontrol_p.h b/src/multimedia/platform/darwin/camera/avfaudioencodersettingscontrol_p.h
deleted file mode 100644
index b1851a5bf..000000000
--- a/src/multimedia/platform/darwin/camera/avfaudioencodersettingscontrol_p.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef AVFAUDIOENCODERSETTINGSCONTROL_H
-#define AVFAUDIOENCODERSETTINGSCONTROL_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <qaudioencodersettingscontrol.h>
-
-@class NSDictionary;
-@class AVCaptureAudioDataOutput;
-
-QT_BEGIN_NAMESPACE
-
-class AVFCameraService;
-
-class AVFAudioEncoderSettingsControl : public QAudioEncoderSettingsControl
-{
-public:
- explicit AVFAudioEncoderSettingsControl(AVFCameraService *service);
-
- QStringList supportedAudioCodecs() const override;
- QString codecDescription(const QString &codecName) const override;
- QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = nullptr) const override;
- QAudioEncoderSettings audioSettings() const override;
- void setAudioSettings(const QAudioEncoderSettings &settings) override;
-
- NSDictionary *applySettings();
- void unapplySettings();
-
-private:
- AVFCameraService *m_service;
-
- QAudioEncoderSettings m_requestedSettings;
- QAudioEncoderSettings m_actualSettings;
-};
-
-QT_END_NAMESPACE
-
-#endif // AVFAUDIOENCODERSETTINGSCONTROL_H
diff --git a/src/multimedia/platform/darwin/camera/avfcameraservice.mm b/src/multimedia/platform/darwin/camera/avfcameraservice.mm
index a536889cb..101e9cf4e 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraservice.mm
+++ b/src/multimedia/platform/darwin/camera/avfcameraservice.mm
@@ -52,9 +52,6 @@
#include "avfcamerafocuscontrol_p.h"
#include "avfcameraexposurecontrol_p.h"
#include "avfimageencodercontrol_p.h"
-#include "avfaudioencodersettingscontrol_p.h"
-#include "avfvideoencodersettingscontrol_p.h"
-#include "avfmediacontainercontrol_p.h"
#include "avfcamerawindowcontrol_p.h"
#ifdef Q_OS_IOS
@@ -87,9 +84,6 @@ AVFCameraService::AVFCameraService()
#endif
m_imageEncoderControl = new AVFImageEncoderControl(this);
- m_audioEncoderSettingsControl = new AVFAudioEncoderSettingsControl(this);
- m_videoEncoderSettingsControl = new AVFVideoEncoderSettingsControl(this);
- m_mediaContainerControl = new AVFMediaContainerControl(this);
}
AVFCameraService::~AVFCameraService()
@@ -121,9 +115,6 @@ AVFCameraService::~AVFCameraService()
delete m_cameraFocusControl;
delete m_cameraExposureControl;
delete m_imageEncoderControl;
- delete m_audioEncoderSettingsControl;
- delete m_videoEncoderSettingsControl;
- delete m_mediaContainerControl;
delete m_session;
}
@@ -152,15 +143,6 @@ QObject *AVFCameraService::requestControl(const char *name)
if (qstrcmp(name, QImageEncoderControl_iid) == 0)
return m_imageEncoderControl;
- if (qstrcmp(name, QAudioEncoderSettingsControl_iid) == 0)
- return m_audioEncoderSettingsControl;
-
- if (qstrcmp(name, QVideoEncoderSettingsControl_iid) == 0)
- return m_videoEncoderSettingsControl;
-
- if (qstrcmp(name, QMediaContainerControl_iid) == 0)
- return m_mediaContainerControl;
-
if (!m_captureWindowControl) {
if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
m_captureWindowControl = new AVFCameraWindowControl(this);
diff --git a/src/multimedia/platform/darwin/camera/avfcameraservice_p.h b/src/multimedia/platform/darwin/camera/avfcameraservice_p.h
index 321ab262d..c8b085bdb 100644
--- a/src/multimedia/platform/darwin/camera/avfcameraservice_p.h
+++ b/src/multimedia/platform/darwin/camera/avfcameraservice_p.h
@@ -71,9 +71,6 @@ class AVFCameraExposureControl;
class AVFImageEncoderControl;
class AVFMediaRecorderControl;
class AVFMediaRecorderControlIOS;
-class AVFAudioEncoderSettingsControl;
-class AVFVideoEncoderSettingsControl;
-class AVFMediaContainerControl;
class AVFCameraWindowControl;
class AVFCameraService : public QMediaPlatformCaptureInterface
@@ -95,9 +92,6 @@ public:
AVFCameraExposureControl *cameraExposureControl() const {return m_cameraExposureControl; }
AVFCameraRendererControl *videoOutput() const {return m_videoOutput; }
AVFImageEncoderControl *imageEncoderControl() const {return m_imageEncoderControl; }
- AVFAudioEncoderSettingsControl *audioEncoderSettingsControl() const { return m_audioEncoderSettingsControl; }
- AVFVideoEncoderSettingsControl *videoEncoderSettingsControl() const {return m_videoEncoderSettingsControl; }
- AVFMediaContainerControl *mediaContainerControl() const { return m_mediaContainerControl; }
private:
AVFCameraSession *m_session;
@@ -109,9 +103,6 @@ private:
AVFCameraFocusControl *m_cameraFocusControl;
AVFCameraExposureControl *m_cameraExposureControl;
AVFImageEncoderControl *m_imageEncoderControl;
- AVFAudioEncoderSettingsControl *m_audioEncoderSettingsControl;
- AVFVideoEncoderSettingsControl *m_videoEncoderSettingsControl;
- AVFMediaContainerControl *m_mediaContainerControl;
AVFCameraWindowControl *m_captureWindowControl;
};
diff --git a/src/multimedia/platform/darwin/camera/avfmediacontainercontrol.mm b/src/multimedia/platform/darwin/camera/avfmediacontainercontrol.mm
deleted file mode 100644
index 09049de0b..000000000
--- a/src/multimedia/platform/darwin/camera/avfmediacontainercontrol.mm
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "avfmediacontainercontrol_p.h"
-
-#include <AVFoundation/AVMediaFormat.h>
-#include <QtCore/qmap.h>
-
-QT_BEGIN_NAMESPACE
-
-struct ContainerInfo
-{
- QString description;
- NSString *fileType;
-
- ContainerInfo() : fileType(nil) { }
- ContainerInfo(const QString &desc, NSString *type)
- : description(desc), fileType(type)
- { }
-};
-
-typedef QMap<QString, ContainerInfo> SupportedContainers;
-Q_GLOBAL_STATIC(SupportedContainers, containers);
-
-AVFMediaContainerControl::AVFMediaContainerControl(AVFCameraService *)
- : QMediaContainerControl()
- , m_format(QStringLiteral("mov")) // .mov is the default container format on Apple platforms
-{
- if (containers->isEmpty()) {
- containers->insert(QStringLiteral("mov"),
- ContainerInfo(QStringLiteral("QuickTime movie file format"),
- AVFileTypeQuickTimeMovie));
- containers->insert(QStringLiteral("mp4"),
- ContainerInfo(QStringLiteral("MPEG-4 file format"),
- AVFileTypeMPEG4));
- containers->insert(QStringLiteral("m4v"),
- ContainerInfo(QStringLiteral("iTunes video file format"),
- AVFileTypeAppleM4V));
-#ifdef Q_OS_IOS
- containers->insert(QStringLiteral("3gp"),
- ContainerInfo(QStringLiteral("3GPP file format"),
- AVFileType3GPP));
-#endif
- }
-}
-
-QStringList AVFMediaContainerControl::supportedContainers() const
-{
- return containers->keys();
-}
-
-QString AVFMediaContainerControl::containerFormat() const
-{
- return m_format;
-}
-
-void AVFMediaContainerControl::setContainerFormat(const QString &format)
-{
- if (!containers->contains(format)) {
- qWarning("Unsupported container format: '%s'", format.toLocal8Bit().constData());
- return;
- }
-
- m_format = format;
-}
-
-QString AVFMediaContainerControl::containerDescription(const QString &formatMimeType) const
-{
- return containers->value(formatMimeType).description;
-}
-
-NSString *AVFMediaContainerControl::fileType() const
-{
- return containers->value(m_format).fileType;
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/platform/darwin/camera/avfmediacontainercontrol_p.h b/src/multimedia/platform/darwin/camera/avfmediacontainercontrol_p.h
deleted file mode 100644
index 9450dc16a..000000000
--- a/src/multimedia/platform/darwin/camera/avfmediacontainercontrol_p.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef AVFMEDIACONTAINERCONTROL_H
-#define AVFMEDIACONTAINERCONTROL_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <qmediacontainercontrol.h>
-
-@class NSString;
-
-QT_BEGIN_NAMESPACE
-
-class AVFCameraService;
-
-class AVFMediaContainerControl : public QMediaContainerControl
-{
-public:
- explicit AVFMediaContainerControl(AVFCameraService *service);
-
- QStringList supportedContainers() const override;
- QString containerFormat() const override;
- void setContainerFormat(const QString &format) override;
- QString containerDescription(const QString &formatMimeType) const override;
-
- NSString *fileType() const;
-
-private:
- QString m_format;
-};
-
-QT_END_NAMESPACE
-
-#endif // AVFMEDIACONTAINERCONTROL_H
diff --git a/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm b/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm
index 40e10bc60..721f2c1fa 100644
--- a/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm
+++ b/src/multimedia/platform/darwin/camera/avfmediarecordercontrol.mm
@@ -42,16 +42,15 @@
#include "avfcamerasession_p.h"
#include "avfcameraservice_p.h"
#include "avfcameracontrol_p.h"
-#include "avfaudioencodersettingscontrol_p.h"
-#include "avfvideoencodersettingscontrol_p.h"
-#include "avfmediacontainercontrol_p.h"
#include "qaudiodeviceinfo.h"
#include "qmediadevicemanager.h"
+#include "private/qdarwinformatsinfo_p.h"
+#include "avfcamerautility_p.h"
#include <QtCore/qurl.h>
#include <QtCore/qfileinfo.h>
#include <QtMultimedia/qcameracontrol.h>
-
+#include <CoreAudio/CoreAudio.h>
QT_USE_NAMESPACE
@@ -237,6 +236,231 @@ qreal AVFMediaRecorderControl::volume() const
return m_volume;
}
+static NSDictionary *avfAudioSettings(const QMediaEncoderSettings &encoderSettings)
+{
+ NSMutableDictionary *settings = [NSMutableDictionary dictionary];
+
+ int codecId = QDarwinFormatInfo::audioFormatForCodec(encoderSettings.audioCodec());
+
+ [settings setObject:[NSNumber numberWithInt:codecId] forKey:AVFormatIDKey];
+
+#ifdef Q_OS_OSX
+ if (encoderSettings.encodingMode() == QMultimedia::ConstantQualityEncoding) {
+ int quality;
+ switch (encoderSettings.quality()) {
+ case QMultimedia::VeryLowQuality:
+ quality = AVAudioQualityMin;
+ break;
+ case QMultimedia::LowQuality:
+ quality = AVAudioQualityLow;
+ break;
+ case QMultimedia::HighQuality:
+ quality = AVAudioQualityHigh;
+ break;
+ case QMultimedia::VeryHighQuality:
+ quality = AVAudioQualityMax;
+ break;
+ case QMultimedia::NormalQuality:
+ default:
+ quality = AVAudioQualityMedium;
+ break;
+ }
+ [settings setObject:[NSNumber numberWithInt:quality] forKey:AVEncoderAudioQualityKey];
+
+ } else
+#endif
+ if (encoderSettings.audioBitRate() > 0)
+ [settings setObject:[NSNumber numberWithInt:encoderSettings.audioBitRate()] forKey:AVEncoderBitRateKey];
+
+ int sampleRate = encoderSettings.audioSampleRate();
+ int channelCount = encoderSettings.audioChannelCount();
+
+#ifdef Q_OS_IOS
+ // Some keys are mandatory only on iOS
+ if (sampleRate <= 0)
+ sampleRate = 44100;
+ if (channelCount <= 0)
+ channelCount = 2;
+#endif
+
+ if (sampleRate > 0)
+ [settings setObject:[NSNumber numberWithInt:sampleRate] forKey:AVSampleRateKey];
+ if (channelCount > 0)
+ [settings setObject:[NSNumber numberWithInt:channelCount] forKey:AVNumberOfChannelsKey];
+
+ return settings;
+}
+
+static bool formatSupportsFramerate(AVCaptureDeviceFormat *format, qreal fps)
+{
+ if (format && fps > qreal(0)) {
+ const qreal epsilon = 0.1;
+ for (AVFrameRateRange *range in format.videoSupportedFrameRateRanges) {
+ if (range.maxFrameRate - range.minFrameRate < epsilon) {
+ if (qAbs(fps - range.maxFrameRate) < epsilon)
+ return true;
+ }
+
+ if (fps >= range.minFrameRate && fps <= range.maxFrameRate)
+ return true;
+ }
+ }
+
+ return false;
+}
+
+NSDictionary *avfVideoSettings(QMediaEncoderSettings &encoderSettings, AVCaptureDevice *device, AVCaptureConnection *connection)
+{
+ if (!device)
+ return nil;
+
+ // ### How to set file type????
+ // Maybe need to use AVCaptureVideoDataOutput on macOS as well?
+
+ // ### re-add needFpsChange
+// AVFPSRange currentFps = qt_current_framerates(device, connection);
+
+ NSMutableDictionary *videoSettings = [NSMutableDictionary dictionary];
+
+ // -- Codec
+
+ // AVVideoCodecKey is the only mandatory key
+ auto codec = encoderSettings.videoCodec();
+ NSString *c = QDarwinFormatInfo::videoFormatForCodec(codec);
+ [videoSettings setObject:c forKey:AVVideoCodecKey];
+ [c release];
+
+ // -- Resolution
+
+ int w = encoderSettings.videoResolution().width();
+ int h = encoderSettings.videoResolution().height();
+
+ if (AVCaptureDeviceFormat *currentFormat = device.activeFormat) {
+ CMFormatDescriptionRef formatDesc = currentFormat.formatDescription;
+ CMVideoDimensions dim = CMVideoFormatDescriptionGetDimensions(formatDesc);
+ FourCharCode formatCodec = CMVideoFormatDescriptionGetCodecType(formatDesc);
+
+ // We have to change the device's activeFormat in 3 cases:
+ // - the requested recording resolution is higher than the current device resolution
+ // - the requested recording resolution has a different aspect ratio than the current device aspect ratio
+ // - the requested frame rate is not available for the current device format
+ AVCaptureDeviceFormat *newFormat = nil;
+ if ((w <= 0 || h <= 0)
+ && encoderSettings.videoFrameRate() > 0
+ && !formatSupportsFramerate(currentFormat, encoderSettings.videoFrameRate())) {
+
+ newFormat = qt_find_best_framerate_match(device,
+ formatCodec,
+ encoderSettings.videoFrameRate());
+
+ } else if (w > 0 && h > 0) {
+ AVCaptureDeviceFormat *f = qt_find_best_resolution_match(device,
+ encoderSettings.videoResolution(),
+ formatCodec);
+
+ if (f) {
+ CMVideoDimensions d = CMVideoFormatDescriptionGetDimensions(f.formatDescription);
+ qreal fAspectRatio = qreal(d.width) / d.height;
+
+ if (w > dim.width || h > dim.height
+ || qAbs((qreal(dim.width) / dim.height) - fAspectRatio) > 0.01) {
+ newFormat = f;
+ }
+ }
+ }
+
+ if (qt_set_active_format(device, newFormat, false /*### !needFpsChange*/)) {
+ formatDesc = newFormat.formatDescription;
+ dim = CMVideoFormatDescriptionGetDimensions(formatDesc);
+ }
+
+ if (w > 0 && h > 0) {
+ // Make sure the recording resolution has the same aspect ratio as the device's
+ // current resolution
+ qreal deviceAspectRatio = qreal(dim.width) / dim.height;
+ qreal recAspectRatio = qreal(w) / h;
+ if (qAbs(deviceAspectRatio - recAspectRatio) > 0.01) {
+ if (recAspectRatio > deviceAspectRatio)
+ w = qRound(h * deviceAspectRatio);
+ else
+ h = qRound(w / deviceAspectRatio);
+ }
+
+ // recording resolution can't be higher than the device's active resolution
+ w = qMin(w, dim.width);
+ h = qMin(h, dim.height);
+ }
+ }
+
+ if (w > 0 && h > 0) {
+ // Width and height must be divisible by 2
+ w += w & 1;
+ h += h & 1;
+
+ [videoSettings setObject:[NSNumber numberWithInt:w] forKey:AVVideoWidthKey];
+ [videoSettings setObject:[NSNumber numberWithInt:h] forKey:AVVideoHeightKey];
+ encoderSettings.setVideoResolution(w, h);
+ } else {
+ encoderSettings.setVideoResolution(qt_device_format_resolution(device.activeFormat));
+ }
+
+ // -- FPS
+
+ if (true /*needFpsChange*/) {
+ const qreal fps = encoderSettings.videoFrameRate();
+ qt_set_framerate_limits(device, connection, fps, fps);
+ }
+ encoderSettings.setVideoFrameRate(qt_current_framerates(device, connection).second);
+
+ // -- Codec Settings
+
+ NSMutableDictionary *codecProperties = [NSMutableDictionary dictionary];
+ int bitrate = -1;
+ float quality = -1.f;
+
+ if (encoderSettings.encodingMode() == QMultimedia::ConstantQualityEncoding) {
+ if (encoderSettings.quality() != QMultimedia::NormalQuality) {
+ if (codec != QMediaFormat::VideoCodec::MotionJPEG) {
+ qWarning("ConstantQualityEncoding is not supported for MotionJPEG");
+ } else {
+ switch (encoderSettings.quality()) {
+ case QMultimedia::VeryLowQuality:
+ quality = 0.f;
+ break;
+ case QMultimedia::LowQuality:
+ quality = 0.25f;
+ break;
+ case QMultimedia::HighQuality:
+ quality = 0.75f;
+ break;
+ case QMultimedia::VeryHighQuality:
+ quality = 1.f;
+ break;
+ default:
+ quality = -1.f; // NormalQuality, let the system decide
+ break;
+ }
+ }
+ }
+ } else if (encoderSettings.encodingMode() == QMultimedia::AverageBitRateEncoding){
+ if (codec != QMediaFormat::VideoCodec::H264 && codec != QMediaFormat::VideoCodec::H265)
+ qWarning() << "AverageBitRateEncoding is not supported for codec" << QMediaFormat::videoCodecName(codec);
+ else
+ bitrate = encoderSettings.videoBitRate();
+ } else {
+ qWarning("Encoding mode is not supported");
+ }
+
+ if (bitrate != -1)
+ [codecProperties setObject:[NSNumber numberWithInt:bitrate] forKey:AVVideoAverageBitRateKey];
+ if (quality != -1.f)
+ [codecProperties setObject:[NSNumber numberWithFloat:quality] forKey:AVVideoQualityKey];
+
+ [videoSettings setObject:codecProperties forKey:AVVideoCompressionPropertiesKey];
+
+ return videoSettings;
+}
+
void AVFMediaRecorderControl::applySettings()
{
if (m_state != QMediaRecorder::StoppedState
@@ -245,13 +469,19 @@ void AVFMediaRecorderControl::applySettings()
return;
}
+ bool videoEnabled = m_cameraControl->captureMode().testFlag(QCamera::CaptureVideo);
+ QMediaEncoderSettings resolved = m_settings;
+ resolved.resolveFormat(videoEnabled ? QMediaEncoderSettings::AudioAndVideo : QMediaEncoderSettings::AudioOnly);
+
// Configure audio settings
- [m_movieOutput setOutputSettings:m_service->audioEncoderSettingsControl()->applySettings()
+ [m_movieOutput setOutputSettings:avfAudioSettings(resolved)
forConnection:[m_movieOutput connectionWithMediaType:AVMediaTypeAudio]];
// Configure video settings
AVCaptureConnection *videoConnection = [m_movieOutput connectionWithMediaType:AVMediaTypeVideo];
- NSDictionary *videoSettings = m_service->videoEncoderSettingsControl()->applySettings(videoConnection);
+ AVCaptureDevice *captureDevice = m_session->videoCaptureDevice();
+
+ NSDictionary *videoSettings = avfVideoSettings(resolved, captureDevice, videoConnection);
const AVFConfigurationLock lock(m_session->videoCaptureDevice()); // prevents activeFormat from being overridden
@@ -260,8 +490,8 @@ void AVFMediaRecorderControl::applySettings()
void AVFMediaRecorderControl::unapplySettings()
{
- m_service->audioEncoderSettingsControl()->unapplySettings();
- m_service->videoEncoderSettingsControl()->unapplySettings([m_movieOutput connectionWithMediaType:AVMediaTypeVideo]);
+// m_service->audioEncoderSettingsControl()->unapplySettings();
+// m_service->videoEncoderSettingsControl()->unapplySettings([m_movieOutput connectionWithMediaType:AVMediaTypeVideo]);
}
QAudioDeviceInfo AVFMediaRecorderControl::audioInput() const
@@ -291,6 +521,11 @@ bool AVFMediaRecorderControl::setAudioInput(const QAudioDeviceInfo &id)
return false;
}
+void AVFMediaRecorderControl::setEncoderSettings(const QMediaEncoderSettings &settings)
+{
+ m_settings = settings;
+}
+
void AVFMediaRecorderControl::setState(QMediaRecorder::State state)
{
if (m_state == state)
@@ -305,7 +540,7 @@ void AVFMediaRecorderControl::setState(QMediaRecorder::State state)
QString outputLocationPath = m_outputLocation.scheme() == QLatin1String("file") ?
m_outputLocation.path() : m_outputLocation.toString();
- QString extension = m_service->mediaContainerControl()->containerFormat();
+ QString extension = "mov";// ######m_service->mediaContainerControl()->containerFormat();
QUrl actualLocation = QUrl::fromLocalFile(
m_storageLocation.generateFileName(outputLocationPath,
diff --git a/src/multimedia/platform/darwin/camera/avfmediarecordercontrol_p.h b/src/multimedia/platform/darwin/camera/avfmediarecordercontrol_p.h
index b9900bd1a..02a8581d2 100644
--- a/src/multimedia/platform/darwin/camera/avfmediarecordercontrol_p.h
+++ b/src/multimedia/platform/darwin/camera/avfmediarecordercontrol_p.h
@@ -93,6 +93,8 @@ public:
QAudioDeviceInfo audioInput() const override;
bool setAudioInput(const QAudioDeviceInfo &id) override;
+ void setEncoderSettings(const QMediaEncoderSettings &settings) override;
+
public Q_SLOTS:
void setState(QMediaRecorder::State state) override;
void setMuted(bool muted) override;
@@ -114,6 +116,7 @@ private:
bool m_connected;
QUrl m_outputLocation;
+ QMediaEncoderSettings m_settings;
QMediaRecorder::State m_state;
QMediaRecorder::Status m_lastStatus;
diff --git a/src/multimedia/platform/darwin/camera/avfvideoencodersettingscontrol.mm b/src/multimedia/platform/darwin/camera/avfvideoencodersettingscontrol.mm
deleted file mode 100644
index 36da08d43..000000000
--- a/src/multimedia/platform/darwin/camera/avfvideoencodersettingscontrol.mm
+++ /dev/null
@@ -1,311 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "avfvideoencodersettingscontrol_p.h"
-
-#include "avfcameraservice_p.h"
-#include "avfcamerautility_p.h"
-#include "avfcamerasession_p.h"
-#include "avfcamerarenderercontrol_p.h"
-
-#include <AVFoundation/AVFoundation.h>
-
-QT_BEGIN_NAMESPACE
-
-Q_GLOBAL_STATIC_WITH_ARGS(QStringList, supportedCodecs, (QStringList() << QLatin1String("avc1")
- << QLatin1String("jpeg")
- #ifdef Q_OS_OSX
- << QLatin1String("ap4h")
- << QLatin1String("apcn")
- #endif
- ))
-
-static bool format_supports_framerate(AVCaptureDeviceFormat *format, qreal fps)
-{
- if (format && fps > qreal(0)) {
- const qreal epsilon = 0.1;
- for (AVFrameRateRange *range in format.videoSupportedFrameRateRanges) {
- if (range.maxFrameRate - range.minFrameRate < epsilon) {
- if (qAbs(fps - range.maxFrameRate) < epsilon)
- return true;
- }
-
- if (fps >= range.minFrameRate && fps <= range.maxFrameRate)
- return true;
- }
- }
-
- return false;
-}
-
-static bool real_list_contains(const QList<qreal> &list, qreal value)
-{
- for (qreal r : list) {
- if (qFuzzyCompare(r, value))
- return true;
- }
- return false;
-}
-
-AVFVideoEncoderSettingsControl::AVFVideoEncoderSettingsControl(AVFCameraService *service)
- : QVideoEncoderSettingsControl()
- , m_service(service)
- , m_restoreFormat(nil)
-{
-}
-
-QStringList AVFVideoEncoderSettingsControl::supportedVideoCodecs() const
-{
- return *supportedCodecs;
-}
-
-QString AVFVideoEncoderSettingsControl::videoCodecDescription(const QString &codecName) const
-{
- if (codecName == QLatin1String("avc1"))
- return QStringLiteral("H.264");
- else if (codecName == QLatin1String("jpeg"))
- return QStringLiteral("M-JPEG");
-#ifdef Q_OS_OSX
- else if (codecName == QLatin1String("ap4h"))
- return QStringLiteral("Apple ProRes 4444");
- else if (codecName == QLatin1String("apcn"))
- return QStringLiteral("Apple ProRes 422 Standard Definition");
-#endif
-
- return QString();
-}
-
-QVideoEncoderSettings AVFVideoEncoderSettingsControl::videoSettings() const
-{
- return m_actualSettings;
-}
-
-void AVFVideoEncoderSettingsControl::setVideoSettings(const QVideoEncoderSettings &settings)
-{
- if (m_requestedSettings == settings)
- return;
-
- m_requestedSettings = m_actualSettings = settings;
-}
-
-NSDictionary *AVFVideoEncoderSettingsControl::applySettings(AVCaptureConnection *connection)
-{
- if (m_service->session()->state() != QCamera::LoadedState &&
- m_service->session()->state() != QCamera::ActiveState) {
- return nil;
- }
-
- AVCaptureDevice *device = m_service->session()->videoCaptureDevice();
- if (!device)
- return nil;
-
- AVFPSRange currentFps = qt_current_framerates(device, connection);
- const bool needFpsChange = m_requestedSettings.frameRate() > 0
- && m_requestedSettings.frameRate() != currentFps.second;
-
- NSMutableDictionary *videoSettings = [NSMutableDictionary dictionary];
-
- // -- Codec
-
- // AVVideoCodecKey is the only mandatory key
- QString codec = m_requestedSettings.codec().isEmpty() ? supportedCodecs->first() : m_requestedSettings.codec();
- if (!supportedCodecs->contains(codec)) {
- qWarning("Unsupported codec: '%s'", codec.toLocal8Bit().constData());
- codec = supportedCodecs->first();
- }
- [videoSettings setObject:codec.toNSString() forKey:AVVideoCodecKey];
- m_actualSettings.setCodec(codec);
-
- // -- Resolution
-
- int w = m_requestedSettings.resolution().width();
- int h = m_requestedSettings.resolution().height();
-
- if (AVCaptureDeviceFormat *currentFormat = device.activeFormat) {
- CMFormatDescriptionRef formatDesc = currentFormat.formatDescription;
- CMVideoDimensions dim = CMVideoFormatDescriptionGetDimensions(formatDesc);
-
- // We have to change the device's activeFormat in 3 cases:
- // - the requested recording resolution is higher than the current device resolution
- // - the requested recording resolution has a different aspect ratio than the current device aspect ratio
- // - the requested frame rate is not available for the current device format
- AVCaptureDeviceFormat *newFormat = nil;
- if ((w <= 0 || h <= 0)
- && m_requestedSettings.frameRate() > 0
- && !format_supports_framerate(currentFormat, m_requestedSettings.frameRate())) {
-
- newFormat = qt_find_best_framerate_match(device,
- m_service->session()->defaultCodec(),
- m_requestedSettings.frameRate());
-
- } else if (w > 0 && h > 0) {
- AVCaptureDeviceFormat *f = qt_find_best_resolution_match(device,
- m_requestedSettings.resolution(),
- m_service->session()->defaultCodec());
-
- if (f) {
- CMVideoDimensions d = CMVideoFormatDescriptionGetDimensions(f.formatDescription);
- qreal fAspectRatio = qreal(d.width) / d.height;
-
- if (w > dim.width || h > dim.height
- || qAbs((qreal(dim.width) / dim.height) - fAspectRatio) > 0.01) {
- newFormat = f;
- }
- }
- }
-
- if (qt_set_active_format(device, newFormat, !needFpsChange)) {
- m_restoreFormat = [currentFormat retain];
- formatDesc = newFormat.formatDescription;
- dim = CMVideoFormatDescriptionGetDimensions(formatDesc);
- }
-
- if (w > 0 && h > 0) {
- // Make sure the recording resolution has the same aspect ratio as the device's
- // current resolution
- qreal deviceAspectRatio = qreal(dim.width) / dim.height;
- qreal recAspectRatio = qreal(w) / h;
- if (qAbs(deviceAspectRatio - recAspectRatio) > 0.01) {
- if (recAspectRatio > deviceAspectRatio)
- w = qRound(h * deviceAspectRatio);
- else
- h = qRound(w / deviceAspectRatio);
- }
-
- // recording resolution can't be higher than the device's active resolution
- w = qMin(w, dim.width);
- h = qMin(h, dim.height);
- }
- }
-
- if (w > 0 && h > 0) {
- // Width and height must be divisible by 2
- w += w & 1;
- h += h & 1;
-
- [videoSettings setObject:[NSNumber numberWithInt:w] forKey:AVVideoWidthKey];
- [videoSettings setObject:[NSNumber numberWithInt:h] forKey:AVVideoHeightKey];
- m_actualSettings.setResolution(w, h);
- } else {
- m_actualSettings.setResolution(qt_device_format_resolution(device.activeFormat));
- }
-
- // -- FPS
-
- if (needFpsChange) {
- m_restoreFps = currentFps;
- const qreal fps = m_requestedSettings.frameRate();
- qt_set_framerate_limits(device, connection, fps, fps);
- }
- m_actualSettings.setFrameRate(qt_current_framerates(device, connection).second);
-
- // -- Codec Settings
-
- NSMutableDictionary *codecProperties = [NSMutableDictionary dictionary];
- int bitrate = -1;
- float quality = -1.f;
-
- if (m_requestedSettings.encodingMode() == QMultimedia::ConstantQualityEncoding) {
- if (m_requestedSettings.quality() != QMultimedia::NormalQuality) {
- if (codec != QLatin1String("jpeg")) {
- qWarning("ConstantQualityEncoding is not supported for codec: '%s'", codec.toLocal8Bit().constData());
- } else {
- switch (m_requestedSettings.quality()) {
- case QMultimedia::VeryLowQuality:
- quality = 0.f;
- break;
- case QMultimedia::LowQuality:
- quality = 0.25f;
- break;
- case QMultimedia::HighQuality:
- quality = 0.75f;
- break;
- case QMultimedia::VeryHighQuality:
- quality = 1.f;
- break;
- default:
- quality = -1.f; // NormalQuality, let the system decide
- break;
- }
- }
- }
- } else if (m_requestedSettings.encodingMode() == QMultimedia::AverageBitRateEncoding){
- if (codec != QLatin1String("avc1"))
- qWarning("AverageBitRateEncoding is not supported for codec: '%s'", codec.toLocal8Bit().constData());
- else
- bitrate = m_requestedSettings.bitRate();
- } else {
- qWarning("Encoding mode is not supported");
- }
-
- if (bitrate != -1)
- [codecProperties setObject:[NSNumber numberWithInt:bitrate] forKey:AVVideoAverageBitRateKey];
- if (quality != -1.f)
- [codecProperties setObject:[NSNumber numberWithFloat:quality] forKey:AVVideoQualityKey];
-
- [videoSettings setObject:codecProperties forKey:AVVideoCompressionPropertiesKey];
-
- return videoSettings;
-}
-
-void AVFVideoEncoderSettingsControl::unapplySettings(AVCaptureConnection *connection)
-{
- m_actualSettings = m_requestedSettings;
-
- AVCaptureDevice *device = m_service->session()->videoCaptureDevice();
- if (!device)
- return;
-
- const bool needFpsChanged = m_restoreFps.first || m_restoreFps.second;
-
- if (m_restoreFormat) {
- qt_set_active_format(device, m_restoreFormat, !needFpsChanged);
- [m_restoreFormat release];
- m_restoreFormat = nil;
- }
-
- if (needFpsChanged) {
- qt_set_framerate_limits(device, connection, m_restoreFps.first, m_restoreFps.second);
- m_restoreFps = AVFPSRange();
- }
-}
-
-QT_END_NAMESPACE
-
-#include "moc_avfvideoencodersettingscontrol_p.cpp"
diff --git a/src/multimedia/platform/darwin/camera/avfvideoencodersettingscontrol_p.h b/src/multimedia/platform/darwin/camera/avfvideoencodersettingscontrol_p.h
deleted file mode 100644
index 0b0338ad6..000000000
--- a/src/multimedia/platform/darwin/camera/avfvideoencodersettingscontrol_p.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef AVFVIDEOENCODERSETTINGSCONTROL_H
-#define AVFVIDEOENCODERSETTINGSCONTROL_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <qvideoencodersettingscontrol.h>
-
-#include "avfcamerautility_p.h"
-#import <AVFoundation/AVFoundation.h>
-
-@class NSDictionary;
-
-QT_BEGIN_NAMESPACE
-
-class AVFCameraService;
-
-class AVFVideoEncoderSettingsControl : public QVideoEncoderSettingsControl
-{
- Q_OBJECT
-
-public:
- explicit AVFVideoEncoderSettingsControl(AVFCameraService *service);
-
- QStringList supportedVideoCodecs() const override;
- QString videoCodecDescription(const QString &codecName) const override;
-
- QVideoEncoderSettings videoSettings() const override;
- void setVideoSettings(const QVideoEncoderSettings &requestedVideoSettings) override;
-
- NSDictionary *applySettings(AVCaptureConnection *connection);
- void unapplySettings(AVCaptureConnection *connection);
-
-private:
- AVFCameraService *m_service;
-
- QVideoEncoderSettings m_requestedSettings;
- QVideoEncoderSettings m_actualSettings;
-
- AVCaptureDeviceFormat *m_restoreFormat;
- AVFPSRange m_restoreFps;
-};
-
-QT_END_NAMESPACE
-
-#endif // AVFVIDEOENCODERSETTINGSCONTROL_H
diff --git a/src/multimedia/platform/darwin/camera/camera.pri b/src/multimedia/platform/darwin/camera/camera.pri
index 16953d07a..648c5c358 100644
--- a/src/multimedia/platform/darwin/camera/camera.pri
+++ b/src/multimedia/platform/darwin/camera/camera.pri
@@ -11,9 +11,6 @@ HEADERS += \
$$PWD/avfcameraexposurecontrol_p.h \
$$PWD/avfcamerautility_p.h \
$$PWD/avfimageencodercontrol_p.h \
- $$PWD/avfvideoencodersettingscontrol_p.h \
- $$PWD/avfmediacontainercontrol_p.h \
- $$PWD/avfaudioencodersettingscontrol_p.h \
$$PWD/avfcamerawindowcontrol_p.h \
SOURCES += \
@@ -28,9 +25,6 @@ SOURCES += \
$$PWD/avfcameraexposurecontrol.mm \
$$PWD/avfcamerautility.mm \
$$PWD/avfimageencodercontrol.mm \
- $$PWD/avfvideoencodersettingscontrol.mm \
- $$PWD/avfmediacontainercontrol.mm \
- $$PWD/avfaudioencodersettingscontrol.mm \
$$PWD/avfcamerawindowcontrol.mm \
osx {
diff --git a/src/multimedia/platform/darwin/qdarwinformatsinfo.mm b/src/multimedia/platform/darwin/qdarwinformatsinfo.mm
index 5b953e4a7..16e8458e2 100644
--- a/src/multimedia/platform/darwin/qdarwinformatsinfo.mm
+++ b/src/multimedia/platform/darwin/qdarwinformatsinfo.mm
@@ -40,6 +40,7 @@
#include "qdarwinformatsinfo_p.h"
#include <AVFoundation/AVFoundation.h>
#include <qdebug.h>
+
QT_BEGIN_NAMESPACE
static struct {
@@ -53,7 +54,7 @@ static struct {
{ "video/quicktime", QMediaFormat::QuickTime },
{ "video/ogg", QMediaFormat::Ogg },
{ "audio/mp3", QMediaFormat::MP3 },
- { nullptr, QMediaFormat::MPEG4 }
+ { nullptr, QMediaFormat::UnspecifiedFormat }
};
static struct {
@@ -69,7 +70,7 @@ static struct {
{ "video/mp4; codecs=\"vp09\"", QMediaFormat::VideoCodec::VP9 },
{ "video/mp4; codecs=\"av01\"", QMediaFormat::VideoCodec::AV1 }, // ### ????
{ "video/mp4; codecs=\"jpeg\"", QMediaFormat::VideoCodec::MotionJPEG },
- { nullptr, QMediaFormat::VideoCodec::Invalid }
+ { nullptr, QMediaFormat::VideoCodec::Unspecified }
};
static struct {
@@ -82,7 +83,7 @@ static struct {
{ "video/mp4; codecs=\"ac-3\"", QMediaFormat::AudioCodec::AC3 },
{ "video/mp4; codecs=\"ec-3\"", QMediaFormat::AudioCodec::EAC3 },
{ "audio/flac", QMediaFormat::AudioCodec::FLAC },
- { nullptr, QMediaFormat::AudioCodec::Invalid },
+ { nullptr, QMediaFormat::AudioCodec::Unspecified },
};
QDarwinFormatInfo::QDarwinFormatInfo()
@@ -128,7 +129,6 @@ QDarwinFormatInfo::QDarwinFormatInfo()
QDarwinFormatInfo::~QDarwinFormatInfo()
{
-
}
QList<QMediaFormat::FileFormat> QDarwinFormatInfo::decodableMediaContainers() const
@@ -160,4 +160,66 @@ QList<QMediaFormat::VideoCodec> QDarwinFormatInfo::encodableVideoCodecs() const
{
return m_encodableVideoCodecs;
}
+
+int QDarwinFormatInfo::audioFormatForCodec(QMediaFormat::AudioCodec codec)
+{
+ int codecId = kAudioFormatMPEG4AAC;
+ switch (codec) {
+ case QMediaFormat::AudioCodec::Unspecified:
+ case QMediaFormat::AudioCodec::DolbyTrueHD:
+ case QMediaFormat::AudioCodec::Opus:
+ case QMediaFormat::AudioCodec::Vorbis:
+ case QMediaFormat::AudioCodec::Wave:
+ case QMediaFormat::AudioCodec::WindowsMediaAudio:
+ // Unsupported, shouldn't happen. Fall back to AAC
+ case QMediaFormat::AudioCodec::AAC:
+ codecId = kAudioFormatMPEG4AAC;
+ break;
+ case QMediaFormat::AudioCodec::MP3:
+ codecId = kAudioFormatMPEGLayer3;
+ break;
+ case QMediaFormat::AudioCodec::AC3:
+ codecId = kAudioFormatAC3;
+ break;
+ case QMediaFormat::AudioCodec::EAC3:
+ codecId = kAudioFormatEnhancedAC3;
+ break;
+ case QMediaFormat::AudioCodec::FLAC:
+ codecId = kAudioFormatFLAC;
+ break;
+ }
+ return codecId;
+}
+
+NSString *QDarwinFormatInfo::videoFormatForCodec(QMediaFormat::VideoCodec codec)
+{
+ const char *c = "hvc1"; // fallback is H265
+ switch (codec) {
+ case QMediaFormat::VideoCodec::Unspecified:
+ case QMediaFormat::VideoCodec::VP8:
+ case QMediaFormat::VideoCodec::H265:
+ case QMediaFormat::VideoCodec::AV1:
+ case QMediaFormat::VideoCodec::Theora:
+ break;
+
+ case QMediaFormat::VideoCodec::MPEG1:
+ c = "mp1v";
+ break;
+ case QMediaFormat::VideoCodec::MPEG2:
+ c = "mp2v";
+ break;
+ case QMediaFormat::VideoCodec::MPEG4:
+ c = "mp4v";
+ break;
+ case QMediaFormat::VideoCodec::H264:
+ c = "avc1";
+ break;
+ case QMediaFormat::VideoCodec::VP9:
+ c = "vp09";
+ break;
+ case QMediaFormat::VideoCodec::MotionJPEG:
+ c = "jpeg";
+ }
+ return [NSString stringWithUTF8String:c];
+}
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/darwin/qdarwinformatsinfo_p.h b/src/multimedia/platform/darwin/qdarwinformatsinfo_p.h
index fc6ee1743..ad53c745b 100644
--- a/src/multimedia/platform/darwin/qdarwinformatsinfo_p.h
+++ b/src/multimedia/platform/darwin/qdarwinformatsinfo_p.h
@@ -72,6 +72,9 @@ public:
QList<QMediaFormat::AudioCodec> encodableAudioCodecs() const override;
QList<QMediaFormat::VideoCodec> encodableVideoCodecs() const override;
+ static int audioFormatForCodec(QMediaFormat::AudioCodec codec);
+ static NSString *videoFormatForCodec(QMediaFormat::VideoCodec codec);
+
private:
QList<QMediaFormat::FileFormat> m_decodableMediaContainers;
QList<QMediaFormat::AudioCodec> m_decodableAudioCodecs;
diff --git a/src/multimedia/platform/gstreamer/camerabin/camerabincontrol.cpp b/src/multimedia/platform/gstreamer/camerabin/camerabincontrol.cpp
index 8abf38ce8..d303142ac 100644
--- a/src/multimedia/platform/gstreamer/camerabin/camerabincontrol.cpp
+++ b/src/multimedia/platform/gstreamer/camerabin/camerabincontrol.cpp
@@ -39,9 +39,6 @@
#include <QtMultimedia/private/qtmultimediaglobal_p.h>
#include "camerabincontrol.h"
-#include "camerabincontainer.h"
-#include "camerabinaudioencoder.h"
-#include "camerabinvideoencoder.h"
#include "camerabinimageencoder.h"
#include "camerabinfocus.h"
#include "camerabinimageprocessing.h"
diff --git a/src/multimedia/platform/gstreamer/camerabin/camerabinrecorder.cpp b/src/multimedia/platform/gstreamer/camerabin/camerabinrecorder.cpp
index a0507d140..fe848df2d 100644
--- a/src/multimedia/platform/gstreamer/camerabin/camerabinrecorder.cpp
+++ b/src/multimedia/platform/gstreamer/camerabin/camerabinrecorder.cpp
@@ -39,9 +39,6 @@
#include "camerabinrecorder.h"
#include "camerabincontrol.h"
-#include "private/qgstreameraudioencoder_p.h"
-#include "private/qgstreamervideoencoder_p.h"
-#include "private/qgstreamercontainer_p.h"
#include "qaudiodeviceinfo.h"
#include <QtCore/QDebug>
@@ -130,10 +127,11 @@ qint64 CameraBinRecorder::duration() const
void CameraBinRecorder::applySettings()
{
- QGStreamerContainerControl *containerControl = m_session->mediaContainerControl();
- QGStreamerAudioEncoderControl *audioEncoderControl = m_session->audioEncodeControl();
- QGStreamerVideoEncoderControl *audioEncoderControl = m_session->videoEncodeControl();
- containerConrol->applySettings(audioEncoderControl, audioEncoderControl);
+ // ######
+// QGStreamerContainerControl *containerControl = m_session->mediaContainerControl();
+// QGStreamerAudioEncoderControl *audioEncoderControl = m_session->audioEncodeControl();
+// QGStreamerVideoEncoderControl *audioEncoderControl = m_session->videoEncodeControl();
+// containerConrol->applySettings(audioEncoderControl, audioEncoderControl);
}
QAudioDeviceInfo CameraBinRecorder::audioInput() const
diff --git a/src/multimedia/platform/gstreamer/camerabin/camerabinservice.cpp b/src/multimedia/platform/gstreamer/camerabin/camerabinservice.cpp
index 131ab36cd..d4565332c 100644
--- a/src/multimedia/platform/gstreamer/camerabin/camerabinservice.cpp
+++ b/src/multimedia/platform/gstreamer/camerabin/camerabinservice.cpp
@@ -41,9 +41,6 @@
#include "camerabinservice.h"
#include "camerabinsession.h"
#include "camerabinrecorder.h"
-#include "camerabincontainer.h"
-#include "camerabinaudioencoder.h"
-#include "camerabinvideoencoder.h"
#include "camerabinimageencoder.h"
#include "camerabincontrol.h"
#include "camerabinmetadata.h"
@@ -119,19 +116,9 @@ QObject *CameraBinService::requestControl(const char *name)
if (qstrcmp(name,QMediaRecorderControl_iid) == 0)
return m_captureSession->recorderControl();
- if (qstrcmp(name,QAudioEncoderSettingsControl_iid) == 0)
- return m_captureSession->audioEncodeControl();
-
- if (qstrcmp(name,QVideoEncoderSettingsControl_iid) == 0)
- return m_captureSession->videoEncodeControl();
-
if (qstrcmp(name,QImageEncoderControl_iid) == 0)
return m_captureSession->imageEncodeControl();
-
- if (qstrcmp(name,QMediaContainerControl_iid) == 0)
- return m_captureSession->mediaContainerControl();
-
if (qstrcmp(name,QCameraControl_iid) == 0)
return m_captureSession->cameraControl();
diff --git a/src/multimedia/platform/gstreamer/camerabin/camerabinsession.cpp b/src/multimedia/platform/gstreamer/camerabin/camerabinsession.cpp
index 095986ecb..1f1e85f70 100644
--- a/src/multimedia/platform/gstreamer/camerabin/camerabinsession.cpp
+++ b/src/multimedia/platform/gstreamer/camerabin/camerabinsession.cpp
@@ -41,9 +41,6 @@
#include "camerabinsession.h"
#include "camerabincontrol.h"
#include "camerabinrecorder.h"
-#include "private/qgstreamercontainer_p.h"
-#include "private/qgstreameraudioencoder_p.h"
-#include "private/qgstreamervideoencoder_p.h"
#include "camerabinimageencoder.h"
#if QT_CONFIG(gstreamer_photography)
@@ -162,11 +159,8 @@ CameraBinSession::CameraBinSession(GstElementFactory *sourceFactory, QObject *pa
m_busHelper->installMessageFilter(this);
m_cameraControl = new CameraBinControl(this);
- m_audioEncodeControl = new QGStreamerAudioEncoderControl(this);
- m_videoEncodeControl = new QGStreamerVideoEncoderControl(this);
m_imageEncodeControl = new CameraBinImageEncoder(this);
m_recorderControl = new CameraBinRecorder(this);
- m_mediaContainerControl = new QGStreamerContainerControl(this);
m_imageProcessingControl = new CameraBinImageProcessing(this);
QByteArray envFlags = qgetenv("QT_GSTREAMER_CAMERABIN_FLAGS");
diff --git a/src/multimedia/platform/gstreamer/camerabin/camerabinsession_p.h b/src/multimedia/platform/gstreamer/camerabin/camerabinsession_p.h
index f307ae970..e34d3bead 100644
--- a/src/multimedia/platform/gstreamer/camerabin/camerabinsession_p.h
+++ b/src/multimedia/platform/gstreamer/camerabin/camerabinsession_p.h
@@ -72,11 +72,8 @@ QT_BEGIN_NAMESPACE
class QGstreamerMessage;
class QGstreamerBusHelper;
class CameraBinControl;
-class QGStreamerAudioEncoderControl;
-class QGStreamerVideoEncoderControl;
class CameraBinImageEncoder;
class CameraBinRecorder;
-class QGStreamerContainerControl;
class CameraBinExposure;
class CameraBinFlash;
class CameraBinFocus;
@@ -124,8 +121,6 @@ public:
GstElementFactory *sourceFactory() const { return m_sourceFactory; }
CameraBinControl *cameraControl() const { return m_cameraControl; }
- QGStreamerAudioEncoderControl *audioEncodeControl() const { return m_audioEncodeControl; }
- QGStreamerVideoEncoderControl *videoEncodeControl() const { return m_videoEncodeControl; }
CameraBinImageEncoder *imageEncodeControl() const { return m_imageEncodeControl; }
#if QT_CONFIG(gstreamer_photography)
@@ -136,7 +131,6 @@ public:
CameraBinImageProcessing *imageProcessingControl() const { return m_imageProcessingControl; }
CameraBinRecorder *recorderControl() const { return m_recorderControl; }
- QGStreamerContainerControl *mediaContainerControl() const { return m_mediaContainerControl; }
QGstreamerElementFactory *audioInput() const { return m_audioInputFactory; }
void setAudioInput(QGstreamerElementFactory *audioInput);
@@ -229,11 +223,8 @@ private:
QGstreamerVideoRendererInterface *m_viewfinderInterface;
CameraBinControl *m_cameraControl;
- QGStreamerAudioEncoderControl *m_audioEncodeControl;
- QGStreamerVideoEncoderControl *m_videoEncodeControl;
CameraBinImageEncoder *m_imageEncodeControl;
CameraBinRecorder *m_recorderControl;
- QGStreamerContainerControl *m_mediaContainerControl;
#if QT_CONFIG(gstreamer_photography)
CameraBinExposure *m_cameraExposureControl;
CameraBinFocus *m_cameraFocusControl;
diff --git a/src/multimedia/platform/gstreamer/common/common.pri b/src/multimedia/platform/gstreamer/common/common.pri
index 499663008..b57cf4d00 100644
--- a/src/multimedia/platform/gstreamer/common/common.pri
+++ b/src/multimedia/platform/gstreamer/common/common.pri
@@ -14,9 +14,6 @@ HEADERS += \
$$PWD/qgstreamerplayercontrol_p.h \
$$PWD/qgstvideorendererplugin_p.h \
$$PWD/qgstvideorenderersink_p.h \
- $$PWD/qgstreamercontainer_p.h \
- $$PWD/qgstreameraudioencoder_p.h \
- $$PWD/qgstreamervideoencoder_p.h
SOURCES += \
$$PWD/qgstappsrc.cpp \
@@ -34,6 +31,3 @@ SOURCES += \
$$PWD/qgstreamerplayercontrol.cpp \
$$PWD/qgstvideorendererplugin.cpp \
$$PWD/qgstvideorenderersink.cpp \
- $$PWD/qgstreamercontainer.cpp \
- $$PWD/qgstreameraudioencoder.cpp \
- $$PWD/qgstreamervideoencoder.cpp
diff --git a/src/multimedia/platform/gstreamer/common/qgstcodecsinfo.cpp b/src/multimedia/platform/gstreamer/common/qgstcodecsinfo.cpp
index 2f1dc4391..580d4ea8e 100644
--- a/src/multimedia/platform/gstreamer/common/qgstcodecsinfo.cpp
+++ b/src/multimedia/platform/gstreamer/common/qgstcodecsinfo.cpp
@@ -132,8 +132,8 @@ void QGstCodecsInfo::updateCodecs(ElementType elementType)
<< "video/x-raw-yuv" << "video/x-raw-rgb";
QSet<QByteArray> fieldsToAdd;
- fieldsToAdd << "mpegversion" << "layer" << "layout" << "raversion"
- << "wmaversion" << "wmvversion" << "variant" << "systemstream";
+ fieldsToAdd << "mpegversion" << "layer" << "layout"
+ << "variant";
GList *element = elements;
while (element) {
@@ -229,11 +229,10 @@ GList *QGstCodecsInfo::elementFactories(ElementType elementType) const
gstElementType = GST_ELEMENT_FACTORY_TYPE_MUXER;
break;
case AudioDecoder:
- gstElementType = (GstElementFactoryListType)(GST_ELEMENT_FACTORY_TYPE_DECODER | GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO);
+ gstElementType = (GstElementFactoryListType)(GST_ELEMENT_FACTORY_TYPE_PARSER | GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO);
break;
case VideoDecoder:
- // GST_ELEMENT_FACTORY_TYPE_VIDEO_ENCODER also lists image encoders. We don't want these here.
- gstElementType = (GstElementFactoryListType)(GST_ELEMENT_FACTORY_TYPE_DECODER | GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO);
+ gstElementType = (GstElementFactoryListType)(GST_ELEMENT_FACTORY_TYPE_PARSER | GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO);
break;
case Demuxer:
gstElementType = GST_ELEMENT_FACTORY_TYPE_DEMUXER;
diff --git a/src/multimedia/platform/gstreamer/common/qgstreameraudioencoder.cpp b/src/multimedia/platform/gstreamer/common/qgstreameraudioencoder.cpp
deleted file mode 100644
index 701533b43..000000000
--- a/src/multimedia/platform/gstreamer/common/qgstreameraudioencoder.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/private/qtmultimediaglobal_p.h>
-#include "qgstreameraudioencoder_p.h"
-#include "qgstreamercontainer_p.h"
-#include <private/qgstutils_p.h>
-
-#include <QtCore/qdebug.h>
-
-QT_BEGIN_NAMESPACE
-
-QGStreamerAudioEncoderControl::QGStreamerAudioEncoderControl(QObject *parent)
- : QAudioEncoderSettingsControl(parent)
- , m_codecs(QGstCodecsInfo::AudioEncoder)
-{
-}
-
-QGStreamerAudioEncoderControl::~QGStreamerAudioEncoderControl()
-{
-}
-
-QStringList QGStreamerAudioEncoderControl::supportedAudioCodecs() const
-{
- return m_codecs.supportedCodecs();
-}
-
-QString QGStreamerAudioEncoderControl::codecDescription(const QString &codecName) const
-{
- return m_codecs.codecDescription(codecName);
-}
-
-QList<int> QGStreamerAudioEncoderControl::supportedSampleRates(const QAudioEncoderSettings &, bool *) const
-{
- //TODO check element caps to find actual values
-
- return QList<int>();
-}
-
-QAudioEncoderSettings QGStreamerAudioEncoderControl::audioSettings() const
-{
- return m_audioSettings;
-}
-
-void QGStreamerAudioEncoderControl::setAudioSettings(const QAudioEncoderSettings &settings)
-{
- if (m_audioSettings != settings) {
- m_audioSettings = settings;
- m_actualAudioSettings = settings;
- emit settingsChanged();
- }
-}
-
-QAudioEncoderSettings QGStreamerAudioEncoderControl::actualAudioSettings() const
-{
- return m_actualAudioSettings;
-}
-
-void QGStreamerAudioEncoderControl::setActualAudioSettings(const QAudioEncoderSettings &settings)
-{
- m_actualAudioSettings = settings;
-}
-
-void QGStreamerAudioEncoderControl::resetActualSettings()
-{
- m_actualAudioSettings = m_audioSettings;
-}
-
-GstEncodingProfile *QGStreamerAudioEncoderControl::createProfile()
-{
- QString codec = m_actualAudioSettings.codec();
- QString preset = m_actualAudioSettings.encodingOption(QStringLiteral("preset")).toString();
- GstCaps *caps;
-
- if (codec.isEmpty())
- return 0;
-
- caps = gst_caps_from_string(codec.toLatin1());
-
- GstEncodingProfile *profile = (GstEncodingProfile *)gst_encoding_audio_profile_new(
- caps,
- !preset.isEmpty() ? preset.toLatin1().constData() : NULL, //preset
- NULL, //restriction
- 0); //presence
-
- gst_caps_unref(caps);
-
- return profile;
-}
-
-void QGStreamerAudioEncoderControl::applySettings(GstElement *encoder)
-{
- GObjectClass * const objectClass = G_OBJECT_GET_CLASS(encoder);
- const char * const name = qt_gst_element_get_factory_name(encoder);
-
- const bool isVorbis = qstrcmp(name, "vorbisenc") == 0;
-
- const int bitRate = m_actualAudioSettings.bitRate();
- if (!isVorbis && bitRate == -1) {
- // Bit rate is invalid, don't evaluate the remaining conditions unless the encoder is
- // vorbisenc which is known to accept -1 as an unspecified bitrate.
- } else if (g_object_class_find_property(objectClass, "bitrate")) {
- g_object_set(G_OBJECT(encoder), "bitrate", bitRate, NULL);
- } else if (g_object_class_find_property(objectClass, "target-bitrate")) {
- g_object_set(G_OBJECT(encoder), "target-bitrate", bitRate, NULL);
- }
-
- if (isVorbis) {
- static const double qualities[] = { 0.1, 0.3, 0.5, 0.7, 1.0 };
- g_object_set(G_OBJECT(encoder), "quality", qualities[m_actualAudioSettings.quality()], NULL);
- }
-}
-
-
-QSet<QString> QGStreamerAudioEncoderControl::supportedStreamTypes(const QString &codecName) const
-{
- return m_codecs.supportedStreamTypes(codecName);
-}
-
-GstElement *QGStreamerAudioEncoderControl::createEncoder()
-{
- QString codec = m_audioSettings.codec();
- GstElement *encoderElement = gst_element_factory_make(m_codecs.codecElement(codec).constData(), NULL);
- if (!encoderElement)
- return 0;
-
- GstBin * encoderBin = GST_BIN(gst_bin_new("audio-encoder-bin"));
-
- GstElement *sinkCapsFilter = gst_element_factory_make("capsfilter", NULL);
- GstElement *srcCapsFilter = gst_element_factory_make("capsfilter", NULL);
-
- gst_bin_add_many(encoderBin, sinkCapsFilter, encoderElement, srcCapsFilter, NULL);
- gst_element_link_many(sinkCapsFilter, encoderElement, srcCapsFilter, NULL);
-
- // add ghostpads
- GstPad *pad = gst_element_get_static_pad(sinkCapsFilter, "sink");
- gst_element_add_pad(GST_ELEMENT(encoderBin), gst_ghost_pad_new("sink", pad));
- gst_object_unref(GST_OBJECT(pad));
-
- pad = gst_element_get_static_pad(srcCapsFilter, "src");
- gst_element_add_pad(GST_ELEMENT(encoderBin), gst_ghost_pad_new("src", pad));
- gst_object_unref(GST_OBJECT(pad));
-
- if (m_audioSettings.sampleRate() > 0 || m_audioSettings.channelCount() > 0) {
- GstCaps *caps = gst_caps_new_empty();
- GstStructure *structure = qt_gst_structure_new_empty("audio/x-raw");
-
- if (m_audioSettings.sampleRate() > 0)
- gst_structure_set(structure, "rate", G_TYPE_INT, m_audioSettings.sampleRate(), NULL );
-
- if (m_audioSettings.channelCount() > 0)
- gst_structure_set(structure, "channels", G_TYPE_INT, m_audioSettings.channelCount(), NULL );
-
- gst_caps_append_structure(caps,structure);
-
- g_object_set(G_OBJECT(sinkCapsFilter), "caps", caps, NULL);
-
- gst_caps_unref(caps);
- }
-
- // Some encoders support several codecs. Setting a caps filter downstream with the desired
- // codec (which is actually a string representation of the caps) will make sure we use the
- // correct codec.
- GstCaps *caps = gst_caps_from_string(codec.toUtf8().constData());
- g_object_set(G_OBJECT(srcCapsFilter), "caps", caps, NULL);
- gst_caps_unref(caps);
-
- if (encoderElement) {
- if (m_audioSettings.encodingMode() == QMultimedia::ConstantQualityEncoding) {
- QMultimedia::EncodingQuality qualityValue = m_audioSettings.quality();
-
- if (codec == QLatin1String("audio/x-vorbis")) {
- double qualityTable[] = {
- 0.1, //VeryLow
- 0.3, //Low
- 0.5, //Normal
- 0.7, //High
- 1.0 //VeryHigh
- };
- g_object_set(G_OBJECT(encoderElement), "quality", qualityTable[qualityValue], NULL);
- } else if (codec == QLatin1String("audio/mpeg")) {
- g_object_set(G_OBJECT(encoderElement), "target", 0, NULL); //constant quality mode
- qreal quality[] = {
- 1, //VeryLow
- 3, //Low
- 5, //Normal
- 7, //High
- 9 //VeryHigh
- };
- g_object_set(G_OBJECT(encoderElement), "quality", quality[qualityValue], NULL);
- } else if (codec == QLatin1String("audio/x-speex")) {
- //0-10 range with default 8
- double qualityTable[] = {
- 2, //VeryLow
- 5, //Low
- 8, //Normal
- 9, //High
- 10 //VeryHigh
- };
- g_object_set(G_OBJECT(encoderElement), "quality", qualityTable[qualityValue], NULL);
- } else if (codec.startsWith("audio/AMR")) {
- int band[] = {
- 0, //VeryLow
- 2, //Low
- 4, //Normal
- 6, //High
- 7 //VeryHigh
- };
-
- g_object_set(G_OBJECT(encoderElement), "band-mode", band[qualityValue], NULL);
- }
- } else {
- int bitrate = m_audioSettings.bitRate();
- if (bitrate > 0) {
- if (codec == QLatin1String("audio/mpeg")) {
- g_object_set(G_OBJECT(encoderElement), "target", 1, NULL); //constant bitrate mode
- }
- g_object_set(G_OBJECT(encoderElement), "bitrate", bitrate, NULL);
- }
- }
-
-#if 0
- QMap<QString, QVariant> options = m_options.value(codec);
- for (auto it = options.cbegin(), end = options.cend(); it != end; ++it) {
- const QString &option = it.key();
- const QVariant &value = it.value();
-
- switch (value.typeId()) {
- case QMetaType::Int:
- g_object_set(G_OBJECT(encoderElement), option.toLatin1(), value.toInt(), NULL);
- break;
- case QMetaType::Bool:
- g_object_set(G_OBJECT(encoderElement), option.toLatin1(), value.toBool(), NULL);
- break;
- case QMetaType::Double:
- g_object_set(G_OBJECT(encoderElement), option.toLatin1(), value.toDouble(), NULL);
- break;
- case QMetaType::QString:
- g_object_set(G_OBJECT(encoderElement), option.toLatin1(), value.toString().toUtf8().constData(), NULL);
- break;
- default:
- qWarning() << "unsupported option type:" << option << value;
- break;
- }
-
- }
-#endif
- }
-
- return GST_ELEMENT(encoderBin);
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/platform/gstreamer/common/qgstreameraudioencoder_p.h b/src/multimedia/platform/gstreamer/common/qgstreameraudioencoder_p.h
deleted file mode 100644
index 316f57e77..000000000
--- a/src/multimedia/platform/gstreamer/common/qgstreameraudioencoder_p.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGSTREAMERAUDIOENCODER_H
-#define QGSTREAMERAUDIOENCODER_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtMultimedia/private/qtmultimediaglobal_p.h>
-#include <qaudioencodersettingscontrol.h>
-
-#include <QtCore/qstringlist.h>
-#include <QtCore/qmap.h>
-#include <QtCore/qset.h>
-
-#include <gst/gst.h>
-#include <gst/pbutils/pbutils.h>
-
-#include <gst/pbutils/encoding-profile.h>
-#include <private/qgstcodecsinfo_p.h>
-
-#include <qaudioformat.h>
-
-QT_BEGIN_NAMESPACE
-class CameraBinSession;
-
-class QGStreamerAudioEncoderControl : public QAudioEncoderSettingsControl
-{
- Q_OBJECT
-public:
- QGStreamerAudioEncoderControl(QObject *parent);
- virtual ~QGStreamerAudioEncoderControl();
-
- QStringList supportedAudioCodecs() const override;
- QString codecDescription(const QString &codecName) const override;
-
- QStringList supportedEncodingOptions(const QString &codec) const;
- QVariant encodingOption(const QString &codec, const QString &name) const;
- void setEncodingOption(const QString &codec, const QString &name, const QVariant &value);
-
- QList<int> supportedSampleRates(const QAudioEncoderSettings &settings = QAudioEncoderSettings(),
- bool *isContinuous = 0) const override;
- QList<int> supportedChannelCounts(const QAudioEncoderSettings &settings = QAudioEncoderSettings()) const;
- QList<int> supportedSampleSizes(const QAudioEncoderSettings &settings = QAudioEncoderSettings()) const;
-
- QAudioEncoderSettings audioSettings() const override;
- void setAudioSettings(const QAudioEncoderSettings &) override;
-
- QAudioEncoderSettings actualAudioSettings() const;
- void setActualAudioSettings(const QAudioEncoderSettings&);
- void resetActualSettings();
-
- GstEncodingProfile *createProfile();
-
- void applySettings(GstElement *element);
-
- QSet<QString> supportedStreamTypes(const QString &codecName) const;
- GstElement *createEncoder();
-
-Q_SIGNALS:
- void settingsChanged();
-
-private:
- QGstCodecsInfo m_codecs;
-
- QAudioEncoderSettings m_actualAudioSettings;
- QAudioEncoderSettings m_audioSettings;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/platform/gstreamer/common/qgstreamercontainer.cpp b/src/multimedia/platform/gstreamer/common/qgstreamercontainer.cpp
deleted file mode 100644
index 21fb09f39..000000000
--- a/src/multimedia/platform/gstreamer/common/qgstreamercontainer.cpp
+++ /dev/null
@@ -1,239 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/private/qtmultimediaglobal_p.h>
-#include "qgstreamercontainer_p.h"
-#include "qgstreameraudioencoder_p.h"
-#include "qgstreamervideoencoder_p.h"
-#include <private/qgstutils_p.h>
-
-#include <QtCore/qdebug.h>
-
-QT_BEGIN_NAMESPACE
-
-QGStreamerContainerControl::QGStreamerContainerControl(QObject *parent)
- :QMediaContainerControl(parent)
- , m_supportedContainers(QGstCodecsInfo::Muxer)
-{
-}
-
-QStringList QGStreamerContainerControl::supportedContainers() const
-{
- return m_supportedContainers.supportedCodecs();
-}
-
-QString QGStreamerContainerControl::containerDescription(const QString &formatMimeType) const
-{
- return m_supportedContainers.codecDescription(formatMimeType);
-}
-
-QString QGStreamerContainerControl::containerFormat() const
-{
- return m_format;
-}
-
-void QGStreamerContainerControl::setContainerFormat(const QString &format)
-{
- if (m_format != format) {
- m_format = format;
- m_actualFormat = format;
- emit settingsChanged();
- }
-}
-
-QString QGStreamerContainerControl::actualContainerFormat() const
-{
- return m_actualFormat;
-}
-
-void QGStreamerContainerControl::setActualContainerFormat(const QString &containerFormat)
-{
- m_actualFormat = containerFormat;
-}
-
-void QGStreamerContainerControl::resetActualContainerFormat()
-{
- m_actualFormat = m_format;
-}
-
-GstEncodingContainerProfile *QGStreamerContainerControl::createProfile()
-{
- GstCaps *caps = nullptr;
-
- if (m_actualFormat.isEmpty())
- return 0;
-
- QString format = m_actualFormat;
- const QStringList supportedFormats = m_supportedContainers.supportedCodecs();
-
- //if format is not in the list of supported gstreamer mime types,
- //try to find the mime type with matching extension
- if (!supportedFormats.contains(format)) {
- format.clear();
- QString extension = QGstUtils::fileExtensionForMimeType(m_actualFormat);
- for (const QString &formatCandidate : supportedFormats) {
- if (QGstUtils::fileExtensionForMimeType(formatCandidate) == extension) {
- format = formatCandidate;
- break;
- }
- }
- }
-
- if (format.isEmpty())
- return nullptr;
-
- caps = gst_caps_from_string(format.toLatin1());
-
- GstEncodingContainerProfile *profile = (GstEncodingContainerProfile *)gst_encoding_container_profile_new(
- "camerabin2_profile",
- (gchar *)"custom camera profile",
- caps,
- NULL); //preset
-
- gst_caps_unref(caps);
-
- return profile;
-}
-
-GstEncodingContainerProfile *QGStreamerContainerControl::fullProfile(QGStreamerAudioEncoderControl *audioEncoderControl,
- QGStreamerVideoEncoderControl *videoEncoderControl)
-{
- auto *containerProfile = createProfile();
- if (containerProfile) {
- GstEncodingProfile *audioProfile = audioEncoderControl ? audioEncoderControl->createProfile() : nullptr;
- GstEncodingProfile *videoProfile = videoEncoderControl ? videoEncoderControl->createProfile() : nullptr;
- qDebug() << "audio profile" << gst_caps_to_string(gst_encoding_profile_get_format(audioProfile));
- qDebug() << "video profile" << gst_caps_to_string(gst_encoding_profile_get_format(videoProfile));
- qDebug() << "conta profile" << gst_caps_to_string(gst_encoding_profile_get_format((GstEncodingProfile *)containerProfile));
-
- if (videoProfile) {
- if (!gst_encoding_container_profile_add_profile(containerProfile, videoProfile))
- gst_encoding_profile_unref(videoProfile);
- }
- if (audioProfile) {
- if (!gst_encoding_container_profile_add_profile(containerProfile, audioProfile))
- gst_encoding_profile_unref(audioProfile);
- }
- }
-
- return containerProfile;
-}
-
-void QGStreamerContainerControl::applySettings(QGStreamerAudioEncoderControl *audioEncoderControl, QGStreamerVideoEncoderControl *videoEncoderControl)
-{
- resetActualContainerFormat();
- audioEncoderControl->resetActualSettings();
- videoEncoderControl->resetActualSettings();
-
- //encodebin doesn't like the encoding profile with ANY caps,
- //if container and codecs are not specified,
- //try to find a commonly used supported combination
- if (containerFormat().isEmpty() &&
- audioEncoderControl->audioSettings().codec().isEmpty() &&
- videoEncoderControl->videoSettings().codec().isEmpty()) {
-
- QList<QStringList> candidates;
-
- // By order of preference
-
- // .mp4 (h264, AAC)
- candidates.append(QStringList() << "video/quicktime, variant=(string)iso" << "video/x-h264" << "audio/mpeg, mpegversion=(int)4");
-
- // .mp4 (h264, AC3)
- candidates.append(QStringList() << "video/quicktime, variant=(string)iso" << "video/x-h264" << "audio/x-ac3");
-
- // .mp4 (h264, MP3)
- candidates.append(QStringList() << "video/quicktime, variant=(string)iso" << "video/x-h264" << "audio/mpeg, mpegversion=(int)1, layer=(int)3");
-
- // .mkv (h264, AAC)
- candidates.append(QStringList() << "video/x-matroska" << "video/x-h264" << "audio/mpeg, mpegversion=(int)4");
-
- // .mkv (h264, AC3)
- candidates.append(QStringList() << "video/x-matroska" << "video/x-h264" << "audio/x-ac3");
-
- // .mkv (h264, MP3)
- candidates.append(QStringList() << "video/x-matroska" << "video/x-h264" << "audio/mpeg, mpegversion=(int)1, layer=(int)3");
-
- // .mov (h264, AAC)
- candidates.append(QStringList() << "video/quicktime" << "video/x-h264" << "audio/mpeg, mpegversion=(int)4");
-
- // .mov (h264, MP3)
- candidates.append(QStringList() << "video/quicktime" << "video/x-h264" << "audio/mpeg, mpegversion=(int)1, layer=(int)3");
-
- // .webm (VP8, Vorbis)
- candidates.append(QStringList() << "video/webm" << "video/x-vp8" << "audio/x-vorbis");
-
- // .ogg (Theora, Vorbis)
- candidates.append(QStringList() << "application/ogg" << "video/x-theora" << "audio/x-vorbis");
-
- // .avi (DivX, MP3)
- candidates.append(QStringList() << "video/x-msvideo" << "video/x-divx" << "audio/mpeg, mpegversion=(int)1, layer=(int)3");
-
- for (const QStringList &candidate : qAsConst(candidates)) {
- if (supportedContainers().contains(candidate[0]) &&
- videoEncoderControl->supportedVideoCodecs().contains(candidate[1]) &&
- audioEncoderControl->supportedAudioCodecs().contains(candidate[2])) {
- setActualContainerFormat(candidate[0]);
-
- QVideoEncoderSettings videoSettings = videoEncoderControl->videoSettings();
- videoSettings.setCodec(candidate[1]);
- videoEncoderControl->setActualVideoSettings(videoSettings);
-
- QAudioEncoderSettings audioSettings = audioEncoderControl->audioSettings();
- audioSettings.setCodec(candidate[2]);
- audioEncoderControl->setActualAudioSettings(audioSettings);
-
- break;
- }
- }
- }
-}
-
-QSet<QString> QGStreamerContainerControl::supportedStreamTypes(const QString &container) const
-{
- return m_supportedContainers.supportedStreamTypes(container);
-}
-
-QString QGStreamerContainerControl::containerExtension() const
-{
- return QGstUtils::fileExtensionForMimeType(m_format);
-}
-
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/platform/gstreamer/common/qgstreamercontainer_p.h b/src/multimedia/platform/gstreamer/common/qgstreamercontainer_p.h
deleted file mode 100644
index 524e921c1..000000000
--- a/src/multimedia/platform/gstreamer/common/qgstreamercontainer_p.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#ifndef QGSTREAMERCONTAINERCONTROL_H
-#define QGSTREAMERCONTAINERCONTROL_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtMultimedia/private/qtmultimediaglobal_p.h>
-#include <qmediacontainercontrol.h>
-#include <QtCore/qstringlist.h>
-#include <QtCore/qset.h>
-
-#include <gst/gst.h>
-#include <gst/pbutils/pbutils.h>
-
-#include <gst/pbutils/encoding-profile.h>
-#include <private/qgstcodecsinfo_p.h>
-
-QT_BEGIN_NAMESPACE
-
-class QGStreamerAudioEncoderControl;
-class QGStreamerVideoEncoderControl;
-
-class QGStreamerContainerControl : public QMediaContainerControl
-{
-Q_OBJECT
-public:
- QGStreamerContainerControl(QObject *parent);
- virtual ~QGStreamerContainerControl() {}
-
- QStringList supportedContainers() const override;
- QString containerDescription(const QString &formatMimeType) const override;
-
- QString containerFormat() const override;
- void setContainerFormat(const QString &format) override;
-
- QString actualContainerFormat() const;
- void setActualContainerFormat(const QString &containerFormat);
- void resetActualContainerFormat();
-
- GstEncodingContainerProfile *createProfile();
-
- GstEncodingContainerProfile *fullProfile(QGStreamerAudioEncoderControl *audioEncoderControl, QGStreamerVideoEncoderControl *videoEncoderControl);
-
- void applySettings(QGStreamerAudioEncoderControl *audioEncoderControl, QGStreamerVideoEncoderControl *videoEncoderControl);
-
- QByteArray formatElementName() const { return m_supportedContainers.codecElement(containerFormat()); }
- QSet<QString> supportedStreamTypes(const QString &container) const;
-
- QString containerExtension() const;
-
-Q_SIGNALS:
- void settingsChanged();
-
-private:
- QString m_format;
- QString m_actualFormat;
-
- QGstCodecsInfo m_supportedContainers;
-};
-
-QT_END_NAMESPACE
-
-#endif // CAMERABINMEDIACONTAINERCONTROL_H
diff --git a/src/multimedia/platform/gstreamer/common/qgstreamervideoencoder.cpp b/src/multimedia/platform/gstreamer/common/qgstreamervideoencoder.cpp
deleted file mode 100644
index eeec9a651..000000000
--- a/src/multimedia/platform/gstreamer/common/qgstreamervideoencoder.cpp
+++ /dev/null
@@ -1,355 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/private/qtmultimediaglobal_p.h>
-#include "qgstreamervideoencoder_p.h"
-#include "qgstreamercontainer_p.h"
-#include <private/qgstutils_p.h>
-
-#include <QtCore/qdebug.h>
-
-QT_BEGIN_NAMESPACE
-
-QGStreamerVideoEncoderControl::QGStreamerVideoEncoderControl()
- : QVideoEncoderSettingsControl()
- , m_codecs(QGstCodecsInfo::VideoEncoder)
-{
-}
-
-QGStreamerVideoEncoderControl::~QGStreamerVideoEncoderControl()
-{
-}
-
-QStringList QGStreamerVideoEncoderControl::supportedVideoCodecs() const
-{
- return m_codecs.supportedCodecs();
-}
-
-QString QGStreamerVideoEncoderControl::videoCodecDescription(const QString &codecName) const
-{
- return m_codecs.codecDescription(codecName);
-}
-
-QVideoEncoderSettings QGStreamerVideoEncoderControl::videoSettings() const
-{
- return m_videoSettings;
-}
-
-void QGStreamerVideoEncoderControl::setVideoSettings(const QVideoEncoderSettings &settings)
-{
- if (m_videoSettings != settings) {
- m_actualVideoSettings = settings;
- m_videoSettings = settings;
- emit settingsChanged();
- }
-}
-
-QVideoEncoderSettings QGStreamerVideoEncoderControl::actualVideoSettings() const
-{
- return m_actualVideoSettings;
-}
-
-void QGStreamerVideoEncoderControl::setActualVideoSettings(const QVideoEncoderSettings &settings)
-{
- m_actualVideoSettings = settings;
-}
-
-void QGStreamerVideoEncoderControl::resetActualSettings()
-{
- m_actualVideoSettings = m_videoSettings;
-}
-
-
-QPair<int,int> QGStreamerVideoEncoderControl::rateAsRational(qreal frameRate) const
-{
- if (frameRate < 0)
- frameRate = m_actualVideoSettings.frameRate();
-
- if (frameRate > 0.001) {
- //convert to rational number
- QList<int> denumCandidates;
- denumCandidates << 1 << 2 << 3 << 5 << 10 << 25 << 30 << 50 << 100 << 1001 << 1000;
-
- qreal error = 1.0;
- int num = 1;
- int denum = 1;
-
- for (int curDenum : qAsConst(denumCandidates)) {
- int curNum = qRound(frameRate*curDenum);
- qreal curError = qAbs(qreal(curNum)/curDenum - frameRate);
-
- if (curError < error) {
- error = curError;
- num = curNum;
- denum = curDenum;
- }
-
- if (curError < 1e-8)
- break;
- }
-
- return QPair<int,int>(num,denum);
- }
-
- return QPair<int,int>();
-}
-
-GstEncodingProfile *QGStreamerVideoEncoderControl::createProfile()
-{
- QString codec = m_actualVideoSettings.codec();
- GstCaps *caps = !codec.isEmpty() ? gst_caps_from_string(codec.toLatin1()) : nullptr;
-
- if (!caps)
- return nullptr;
-
- QString preset = m_actualVideoSettings.encodingOption(QStringLiteral("preset")).toString();
- GstEncodingVideoProfile *profile = gst_encoding_video_profile_new(
- caps,
- !preset.isEmpty() ? preset.toLatin1().constData() : NULL, //preset
- NULL, //restriction
- 0); //presence
-
- gst_caps_unref(caps);
-
- gst_encoding_video_profile_set_pass(profile, 0);
- gst_encoding_video_profile_set_variableframerate(profile, TRUE);
-
- return (GstEncodingProfile *)profile;
-}
-
-void QGStreamerVideoEncoderControl::applySettings(GstElement *encoder)
-{
- GObjectClass * const objectClass = G_OBJECT_GET_CLASS(encoder);
- const char * const name = qt_gst_element_get_factory_name(encoder);
-
- const int bitRate = m_actualVideoSettings.bitRate();
- if (bitRate == -1) {
- // Bit rate is invalid, don't evaluate the remaining conditions.
- } else if (g_object_class_find_property(objectClass, "bitrate")) {
- g_object_set(G_OBJECT(encoder), "bitrate", bitRate, NULL);
- } else if (g_object_class_find_property(objectClass, "target-bitrate")) {
- g_object_set(G_OBJECT(encoder), "target-bitrate", bitRate, NULL);
- }
-
- if (qstrcmp(name, "theoraenc") == 0) {
- static const int qualities[] = { 8, 16, 32, 45, 60 };
- g_object_set(G_OBJECT(encoder), "quality", qualities[m_actualVideoSettings.quality()], NULL);
- } else if (qstrncmp(name, "avenc_", 6) == 0) {
- if (g_object_class_find_property(objectClass, "pass")) {
- static const int modes[] = { 0, 2, 512, 1024 };
- g_object_set(G_OBJECT(encoder), "pass", modes[m_actualVideoSettings.encodingMode()], NULL);
- }
- if (g_object_class_find_property(objectClass, "quantizer")) {
- static const double qualities[] = { 20, 8.0, 3.0, 2.5, 2.0 };
- g_object_set(G_OBJECT(encoder), "quantizer", qualities[m_actualVideoSettings.quality()], NULL);
- }
- } else if (qstrncmp(name, "omx", 3) == 0) {
- if (!g_object_class_find_property(objectClass, "control-rate")) {
- } else switch (m_actualVideoSettings.encodingMode()) {
- case QMultimedia::ConstantBitRateEncoding:
- g_object_set(G_OBJECT(encoder), "control-rate", 2, NULL);
- break;
- case QMultimedia::AverageBitRateEncoding:
- g_object_set(G_OBJECT(encoder), "control-rate", 1, NULL);
- break;
- default:
- g_object_set(G_OBJECT(encoder), "control-rate", 0, NULL);
- }
- }
-}
-
-
-QSet<QString> QGStreamerVideoEncoderControl::supportedStreamTypes(const QString &codecName) const
-{
- return m_codecs.supportedStreamTypes(codecName);
-}
-
-
-GstElement *QGStreamerVideoEncoderControl::createEncoder()
-{
- QString codec = m_videoSettings.codec();
- GstElement *encoderElement = gst_element_factory_make(m_codecs.codecElement(codec).constData(), "video-encoder");
- if (!encoderElement)
- return 0;
-
- GstBin *encoderBin = GST_BIN(gst_bin_new("video-encoder-bin"));
-
- GstElement *sinkCapsFilter = gst_element_factory_make("capsfilter", "capsfilter-video-in");
- GstElement *srcCapsFilter = gst_element_factory_make("capsfilter", "capsfilter-video-out");
- gst_bin_add_many(encoderBin, sinkCapsFilter, srcCapsFilter, NULL);
-
- GstElement *colorspace = gst_element_factory_make("videoconvert", NULL);
- gst_bin_add(encoderBin, colorspace);
- gst_bin_add(encoderBin, encoderElement);
-
- gst_element_link_many(sinkCapsFilter, colorspace, encoderElement, srcCapsFilter, NULL);
-
- // add ghostpads
- GstPad *pad = gst_element_get_static_pad(sinkCapsFilter, "sink");
- gst_element_add_pad(GST_ELEMENT(encoderBin), gst_ghost_pad_new("sink", pad));
- gst_object_unref(GST_OBJECT(pad));
-
- pad = gst_element_get_static_pad(srcCapsFilter, "src");
- gst_element_add_pad(GST_ELEMENT(encoderBin), gst_ghost_pad_new("src", pad));
- gst_object_unref(GST_OBJECT(pad));
-
- if (encoderElement) {
- if (m_videoSettings.encodingMode() == QMultimedia::ConstantQualityEncoding) {
- QMultimedia::EncodingQuality qualityValue = m_videoSettings.quality();
-
- if (codec == QLatin1String("video/x-h264")) {
- //constant quantizer mode
- g_object_set(G_OBJECT(encoderElement), "pass", 4, NULL);
- int qualityTable[] = {
- 50, //VeryLow
- 35, //Low
- 21, //Normal
- 15, //High
- 8 //VeryHigh
- };
- g_object_set(G_OBJECT(encoderElement), "quantizer", qualityTable[qualityValue], NULL);
- } else if (codec == QLatin1String("video/x-xvid")) {
- //constant quantizer mode
- g_object_set(G_OBJECT(encoderElement), "pass", 3, NULL);
- int qualityTable[] = {
- 32, //VeryLow
- 12, //Low
- 5, //Normal
- 3, //High
- 2 //VeryHigh
- };
- int quant = qualityTable[qualityValue];
- g_object_set(G_OBJECT(encoderElement), "quantizer", quant, NULL);
- } else if (codec.startsWith(QLatin1String("video/mpeg"))) {
- //constant quantizer mode
- g_object_set(G_OBJECT(encoderElement), "pass", 2, NULL);
- //quant from 1 to 30, default ~3
- double qualityTable[] = {
- 20, //VeryLow
- 8.0, //Low
- 3.0, //Normal
- 2.5, //High
- 2.0 //VeryHigh
- };
- double quant = qualityTable[qualityValue];
- g_object_set(G_OBJECT(encoderElement), "quantizer", quant, NULL);
- } else if (codec == QLatin1String("video/x-theora")) {
- int qualityTable[] = {
- 8, //VeryLow
- 16, //Low
- 32, //Normal
- 45, //High
- 60 //VeryHigh
- };
- //quality from 0 to 63
- int quality = qualityTable[qualityValue];
- g_object_set(G_OBJECT(encoderElement), "quality", quality, NULL);
- }
- } else {
- int bitrate = m_videoSettings.bitRate();
- if (bitrate > 0) {
- g_object_set(G_OBJECT(encoderElement), "bitrate", bitrate, NULL);
- }
- }
-
-#if 0
- QMap<QString,QVariant> options = m_options.value(codec);
- for (auto it = options.cbegin(), end = options.cend(); it != end; ++it) {
- const QString &option = it.key();
- const QVariant &value = it.value();
-
- switch (value.typeId()) {
- case QMetaType::Int:
- g_object_set(G_OBJECT(encoderElement), option.toLatin1(), value.toInt(), NULL);
- break;
- case QMetaType::Bool:
- g_object_set(G_OBJECT(encoderElement), option.toLatin1(), value.toBool(), NULL);
- break;
- case QMetaType::Double:
- g_object_set(G_OBJECT(encoderElement), option.toLatin1(), value.toDouble(), NULL);
- break;
- case QMetaType::QString:
- g_object_set(G_OBJECT(encoderElement), option.toLatin1(), value.toString().toUtf8().constData(), NULL);
- break;
- default:
- qWarning() << "unsupported option type:" << option << value;
- break;
- }
-
- }
-#endif
- }
-
- if (!m_videoSettings.resolution().isEmpty() || m_videoSettings.frameRate() > 0.001) {
- GstCaps *caps = QGstUtils::videoFilterCaps();
-
- if (!m_videoSettings.resolution().isEmpty()) {
- gst_caps_set_simple(
- caps,
- "width", G_TYPE_INT, m_videoSettings.resolution().width(),
- "height", G_TYPE_INT, m_videoSettings.resolution().height(),
- NULL);
- }
-
- if (m_videoSettings.frameRate() > 0.001) {
- QPair<int,int> rate = rateAsRational();
- gst_caps_set_simple(
- caps,
- "framerate", GST_TYPE_FRACTION, rate.first, rate.second,
- NULL);
- }
-
- //qDebug() << "set video caps filter:" << gst_caps_to_string(caps);
-
- g_object_set(G_OBJECT(sinkCapsFilter), "caps", caps, NULL);
-
- gst_caps_unref(caps);
- }
-
- // Some encoders support several codecs. Setting a caps filter downstream with the desired
- // codec (which is actually a string representation of the caps) will make sure we use the
- // correct codec.
- GstCaps *caps = gst_caps_from_string(codec.toUtf8().constData());
- g_object_set(G_OBJECT(srcCapsFilter), "caps", caps, NULL);
- gst_caps_unref(caps);
-
- return GST_ELEMENT(encoderBin);
-}
-
-QT_END_NAMESPACE
diff --git a/src/multimedia/platform/gstreamer/common/qgstreamervideoencoder_p.h b/src/multimedia/platform/gstreamer/common/qgstreamervideoencoder_p.h
deleted file mode 100644
index ae0395f2d..000000000
--- a/src/multimedia/platform/gstreamer/common/qgstreamervideoencoder_p.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QGSTREAMERVIDEOENCODER_H
-#define QGSTREAMERVIDEOENCODER_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtMultimedia/private/qtmultimediaglobal_p.h>
-#include <qvideoencodersettingscontrol.h>
-
-#include <QtCore/qstringlist.h>
-#include <QtCore/qmap.h>
-#include <QtCore/qset.h>
-
-#include <gst/gst.h>
-#include <gst/pbutils/pbutils.h>
-
-#include <gst/pbutils/encoding-profile.h>
-#include <private/qgstcodecsinfo_p.h>
-
-QT_BEGIN_NAMESPACE
-
-class QGStreamerVideoEncoderControl : public QVideoEncoderSettingsControl
-{
- Q_OBJECT
-public:
- QGStreamerVideoEncoderControl();
- virtual ~QGStreamerVideoEncoderControl();
-
- QPair<int,int> rateAsRational(qreal = -1.) const;
-
- QStringList supportedVideoCodecs() const override;
- QString videoCodecDescription(const QString &codecName) const override;
-
- QVideoEncoderSettings videoSettings() const override;
- void setVideoSettings(const QVideoEncoderSettings &settings) override;
-
- QVideoEncoderSettings actualVideoSettings() const;
- void setActualVideoSettings(const QVideoEncoderSettings&);
- void resetActualSettings();
-
- GstEncodingProfile *createProfile();
-
- void applySettings(GstElement *encoder);
-
- QSet<QString> supportedStreamTypes(const QString &codecName) const;
- GstElement *createEncoder();
-
-Q_SIGNALS:
- void settingsChanged();
-
-private:
- QGstCodecsInfo m_codecs;
-
- QVideoEncoderSettings m_actualVideoSettings;
- QVideoEncoderSettings m_videoSettings;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/multimedia/platform/gstreamer/common/qgstutils.cpp b/src/multimedia/platform/gstreamer/common/qgstutils.cpp
index 694bc751f..2adcb65e7 100644
--- a/src/multimedia/platform/gstreamer/common/qgstutils.cpp
+++ b/src/multimedia/platform/gstreamer/common/qgstutils.cpp
@@ -999,6 +999,37 @@ void qt_gst_util_double_to_fraction(gdouble src, gint *dest_n, gint *dest_d)
gst_util_double_to_fraction(src, dest_n, dest_d);
}
+QPair<int,int> qt_gstRateAsRational(qreal frameRate)
+{
+ if (frameRate > 0.001) {
+ //convert to rational number
+ QList<int> denumCandidates;
+ denumCandidates << 1 << 2 << 3 << 5 << 10 << 25 << 30 << 50 << 100 << 1001 << 1000;
+
+ qreal error = 1.0;
+ int num = 1;
+ int denum = 1;
+
+ for (int curDenum : qAsConst(denumCandidates)) {
+ int curNum = qRound(frameRate*curDenum);
+ qreal curError = qAbs(qreal(curNum)/curDenum - frameRate);
+
+ if (curError < error) {
+ error = curError;
+ num = curNum;
+ denum = curDenum;
+ }
+
+ if (curError < 1e-8)
+ break;
+ }
+
+ return QPair<int,int>(num,denum);
+ }
+
+ return QPair<int,int>();
+}
+
QDebug operator <<(QDebug debug, GstCaps *caps)
{
if (caps) {
diff --git a/src/multimedia/platform/gstreamer/common/qgstutils_p.h b/src/multimedia/platform/gstreamer/common/qgstutils_p.h
index 75c525771..7b6b6ded1 100644
--- a/src/multimedia/platform/gstreamer/common/qgstutils_p.h
+++ b/src/multimedia/platform/gstreamer/common/qgstutils_p.h
@@ -213,6 +213,7 @@ Q_MULTIMEDIA_EXPORT const gchar *qt_gst_element_get_factory_name(GstElement *ele
Q_MULTIMEDIA_EXPORT gboolean qt_gst_caps_can_intersect(const GstCaps * caps1, const GstCaps * caps2);
Q_MULTIMEDIA_EXPORT GList *qt_gst_video_sinks();
Q_MULTIMEDIA_EXPORT void qt_gst_util_double_to_fraction(gdouble src, gint *dest_n, gint *dest_d);
+QPair<int,int> qt_gstRateAsRational(qreal frameRate);
Q_MULTIMEDIA_EXPORT QDebug operator <<(QDebug debug, GstCaps *caps);
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice.cpp
index f618541a0..7679c4647 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercaptureservice.cpp
@@ -40,9 +40,6 @@
#include "qgstreamercaptureservice_p.h"
#include "qgstreamercapturesession_p.h"
#include "qgstreamerrecordercontrol_p.h"
-#include "private/qgstreameraudioencoder_p.h"
-#include "private/qgstreamervideoencoder_p.h"
-#include "private/qgstreamercontainer_p.h"
#include "qgstreamerimageencode_p.h"
#include "qgstreamercameracontrol_p.h"
#include <private/qgstreamerbushelper_p.h>
@@ -104,19 +101,9 @@ QObject *QGstreamerCaptureService::requestControl(const char *name)
if (qstrcmp(name,QMediaRecorderControl_iid) == 0)
return m_captureSession->recorderControl();
- if (qstrcmp(name,QAudioEncoderSettingsControl_iid) == 0)
- return m_captureSession->audioEncodeControl();
-
- if (qstrcmp(name,QVideoEncoderSettingsControl_iid) == 0)
- return m_captureSession->videoEncodeControl();
-
if (qstrcmp(name,QImageEncoderControl_iid) == 0)
return m_captureSession->imageEncodeControl();
-
- if (qstrcmp(name,QMediaContainerControl_iid) == 0)
- return m_captureSession->mediaContainerControl();
-
if (qstrcmp(name,QCameraControl_iid) == 0)
return m_cameraControl;
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp
index 33b61ea10..193ccaa34 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession.cpp
@@ -39,9 +39,6 @@
#include "qgstreamercapturesession_p.h"
#include "qgstreamerrecordercontrol_p.h"
-#include "private/qgstreamercontainer_p.h"
-#include "private/qgstreameraudioencoder_p.h"
-#include "private/qgstreamervideoencoder_p.h"
#include "qgstreamerimageencode_p.h"
#include <qmediarecorder.h>
#include <qmediadevicemanager.h>
@@ -49,10 +46,12 @@
#include <private/qgstreamerbushelper_p.h>
#include <private/qaudiodeviceinfo_gstreamer_p.h>
#include <private/qgstutils_p.h>
-
+#include <private/qgstreamerintegration_p.h>
+#include <private/qgstreamerformatsinfo_p.h>
#include <gst/gsttagsetter.h>
#include <gst/gstversion.h>
#include <gst/video/video.h>
+#include <gst/pbutils/encoding-profile.h>
#include <QtCore/qdebug.h>
#include <QtCore/qurl.h>
@@ -98,14 +97,11 @@ QGstreamerCaptureSession::QGstreamerCaptureSession(QGstreamerCaptureSession::Cap
m_busHelper = new QGstreamerBusHelper(m_bus, this);
m_busHelper->installMessageFilter(this);
- m_audioEncodeControl = new QGStreamerAudioEncoderControl(this);
- m_videoEncodeControl = new QGStreamerVideoEncoderControl();
m_imageEncodeControl = new QGstreamerImageEncode(this);
m_recorderControl = new QGstreamerRecorderControl(this);
connect(m_recorderControl, &QGstreamerRecorderControl::error, [](int e, const QString &str) {
qWarning() << QMediaRecorder::Error(e) << ":" << str.toLatin1().constData();
});
- m_mediaContainerControl = new QGStreamerContainerControl(this);
}
QGstreamerCaptureSession::~QGstreamerCaptureSession()
@@ -130,6 +126,107 @@ GstElement *QGstreamerCaptureSession::buildFileSink()
return fileSink;
}
+
+static GstEncodingContainerProfile *createContainerProfile(const QMediaEncoderSettings &settings)
+{
+ GstCaps *caps = nullptr;
+
+ auto *formatInfo = QGstreamerIntegration::instance()->m_formatsInfo;
+
+ if (!formatInfo->encodableMediaContainers().contains(settings.format()))
+ return nullptr;
+
+ const char *format = formatInfo->nativeFormat(settings.format());
+ Q_ASSERT(format);
+
+ caps = gst_caps_from_string(format);
+
+ GstEncodingContainerProfile *profile = (GstEncodingContainerProfile *)gst_encoding_container_profile_new(
+ "container_profile",
+ (gchar *)"custom container profile",
+ caps,
+ NULL); //preset
+
+ gst_caps_unref(caps);
+
+ return profile;
+}
+
+static GstEncodingProfile *createVideoProfile(const QMediaEncoderSettings &settings)
+{
+ auto *formatInfo = QGstreamerIntegration::instance()->m_formatsInfo;
+
+ if (!formatInfo->encodableVideoCodecs().contains(settings.videoCodec()))
+ return nullptr;
+
+ const char *codec = formatInfo->nativeFormat(settings.videoCodec());
+ Q_ASSERT(codec);
+ GstCaps *caps = gst_caps_from_string(codec);
+
+ if (!caps)
+ return nullptr;
+
+ GstEncodingVideoProfile *profile = gst_encoding_video_profile_new(
+ caps,
+ nullptr,
+ NULL, //restriction
+ 0); //presence
+
+ gst_caps_unref(caps);
+
+ gst_encoding_video_profile_set_pass(profile, 0);
+ gst_encoding_video_profile_set_variableframerate(profile, TRUE);
+
+ return (GstEncodingProfile *)profile;
+}
+
+static GstEncodingProfile *createAudioProfile(const QMediaEncoderSettings &settings)
+{
+ auto *formatInfo = QGstreamerIntegration::instance()->m_formatsInfo;
+
+ if (!formatInfo->encodableAudioCodecs().contains(settings.audioCodec()))
+ return nullptr;
+
+ const char *codec = formatInfo->nativeFormat(settings.audioCodec());
+ Q_ASSERT(codec);
+
+ GstCaps *caps = gst_caps_from_string(codec);
+
+ GstEncodingProfile *profile = (GstEncodingProfile *)gst_encoding_audio_profile_new(
+ caps,
+ nullptr, //preset
+ NULL, //restriction
+ 0); //presence
+
+ gst_caps_unref(caps);
+
+ return profile;
+}
+
+
+static GstEncodingContainerProfile *createEncodingProfile(const QMediaEncoderSettings &settings, QGstreamerCaptureSession::CaptureMode mode)
+{
+ auto *containerProfile = createContainerProfile(settings);
+ if (containerProfile) {
+ GstEncodingProfile *audioProfile = mode & QGstreamerCaptureSession::Audio ? createAudioProfile(settings) : nullptr;
+ GstEncodingProfile *videoProfile = mode & QGstreamerCaptureSession::Video ? createVideoProfile(settings) : nullptr;
+ qDebug() << "audio profile" << gst_caps_to_string(gst_encoding_profile_get_format(audioProfile));
+ qDebug() << "video profile" << gst_caps_to_string(gst_encoding_profile_get_format(videoProfile));
+ qDebug() << "conta profile" << gst_caps_to_string(gst_encoding_profile_get_format((GstEncodingProfile *)containerProfile));
+
+ if (videoProfile) {
+ if (!gst_encoding_container_profile_add_profile(containerProfile, videoProfile))
+ gst_encoding_profile_unref(videoProfile);
+ }
+ if (audioProfile) {
+ if (!gst_encoding_container_profile_add_profile(containerProfile, audioProfile))
+ gst_encoding_profile_unref(audioProfile);
+ }
+ }
+
+ return containerProfile;
+}
+
GstElement *QGstreamerCaptureSession::buildEncodeBin()
{
GstElement *encoder = gst_element_factory_make("encodebin", "encoder");
@@ -138,10 +235,7 @@ GstElement *QGstreamerCaptureSession::buildEncodeBin()
return nullptr;
}
- m_mediaContainerControl->applySettings(m_audioEncodeControl, m_videoEncodeControl);
- auto *audioEncode = m_captureMode & Audio ? m_audioEncodeControl : nullptr;
- auto *videoEncode = m_captureMode & Video ? m_videoEncodeControl : nullptr;
- auto *encodingProfile = m_mediaContainerControl->fullProfile(audioEncode, videoEncode);
+ auto *encodingProfile = createEncodingProfile(m_recorderControl->resolvedEncoderSettings(), m_captureMode);
g_object_set (G_OBJECT(encoder),
"profile",
@@ -231,9 +325,9 @@ GstElement *QGstreamerCaptureSession::buildVideoPreview()
qreal frameRate = 0;
if (m_captureMode & Video) {
- QVideoEncoderSettings videoSettings = m_videoEncodeControl->videoSettings();
- resolution = videoSettings.resolution();
- frameRate = videoSettings.frameRate();
+ QMediaEncoderSettings videoSettings = m_recorderControl->resolvedEncoderSettings();
+ resolution = videoSettings.videoResolution();
+ frameRate = videoSettings.videoFrameRate();
} else if (m_captureMode & Image) {
resolution = m_imageEncodeControl->imageSettings().resolution();
}
@@ -245,7 +339,7 @@ GstElement *QGstreamerCaptureSession::buildVideoPreview()
gst_caps_set_simple(caps, "height", G_TYPE_INT, resolution.height(), NULL);
}
if (frameRate > 0.001) {
- QPair<int,int> rate = m_videoEncodeControl->rateAsRational();
+ QPair<int,int> rate = qt_gstRateAsRational(frameRate);
//qDebug() << "frame rate:" << num << denum;
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession_p.h
index 3f70659a8..09c650388 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession_p.h
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamercapturesession_p.h
@@ -68,11 +68,8 @@ QT_BEGIN_NAMESPACE
class QGstreamerMessage;
class QGstreamerBusHelper;
-class QGStreamerAudioEncoderControl;
-class QGStreamerVideoEncoderControl;
class QGstreamerImageEncode;
class QGstreamerRecorderControl;
-class QGStreamerContainerControl;
class QGstreamerVideoRendererInterface;
class QCameraInfo;
@@ -120,12 +117,9 @@ public:
QUrl outputLocation() const;
bool setOutputLocation(const QUrl& sink);
- QGStreamerAudioEncoderControl *audioEncodeControl() const { return m_audioEncodeControl; }
- QGStreamerVideoEncoderControl *videoEncodeControl() const { return m_videoEncodeControl; }
QGstreamerImageEncode *imageEncodeControl() const { return m_imageEncodeControl; }
QGstreamerRecorderControl *recorderControl() const { return m_recorderControl; }
- QGStreamerContainerControl *mediaContainerControl() const { return m_mediaContainerControl; }
QGstreamerElementFactory *audioPreview() const { return m_audioPreviewFactory; }
void setAudioPreview(QGstreamerElementFactory *audioPreview);
@@ -203,11 +197,8 @@ private:
QObject *m_viewfinder;
QGstreamerVideoRendererInterface *m_viewfinderInterface;
- QGStreamerAudioEncoderControl *m_audioEncodeControl;
- QGStreamerVideoEncoderControl *m_videoEncodeControl;
QGstreamerImageEncode *m_imageEncodeControl;
QGstreamerRecorderControl *m_recorderControl;
- QGStreamerContainerControl *m_mediaContainerControl;
QGstreamerBusHelper *m_busHelper;
GstBus* m_bus;
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp
index b1c433874..7c60ed4d1 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp
@@ -38,9 +38,6 @@
****************************************************************************/
#include "qgstreamerrecordercontrol_p.h"
-#include "private/qgstreameraudioencoder_p.h"
-#include "private/qgstreamervideoencoder_p.h"
-#include "private/qgstreamercontainer_p.h"
#include <QtCore/QDebug>
#include <QtGui/qdesktopservices.h>
#include <QStandardPaths>
@@ -157,7 +154,7 @@ void QGstreamerRecorderControl::record()
m_state = QMediaRecorder::RecordingState;
if (m_outputLocation.isEmpty()) {
- QString container = m_session->mediaContainerControl()->containerExtension();
+ QString container;// ### = m_session->mediaContainerControl()->containerExtension();
if (container.isEmpty())
container = "raw";
@@ -214,103 +211,6 @@ void QGstreamerRecorderControl::stop()
void QGstreamerRecorderControl::applySettings()
{
- //Check the codecs are compatible with container,
- //and choose the compatible codecs/container if omitted
- QGStreamerAudioEncoderControl *audioEncodeControl = m_session->audioEncodeControl();
- QGStreamerVideoEncoderControl *videoEncodeControl = m_session->videoEncodeControl();
- QGStreamerContainerControl *mediaContainerControl = m_session->mediaContainerControl();
-
-#if 0
- mediaContainerControl->applySettings(audioEncodeControl, videoEncodeControl);
-#else
- bool needAudio = m_session->captureMode() & QGstreamerCaptureSession::Audio;
- bool needVideo = m_session->captureMode() & QGstreamerCaptureSession::Video;
-
- QStringList containerCandidates;
- if (mediaContainerControl->containerFormat().isEmpty())
- containerCandidates = mediaContainerControl->supportedContainers();
- else
- containerCandidates << mediaContainerControl->containerFormat();
-
-
- QStringList audioCandidates;
- if (needAudio) {
- QAudioEncoderSettings audioSettings = audioEncodeControl->audioSettings();
- if (audioSettings.codec().isEmpty())
- audioCandidates = audioEncodeControl->supportedAudioCodecs();
- else
- audioCandidates << audioSettings.codec();
- }
-
- QStringList videoCandidates;
- if (needVideo) {
- QVideoEncoderSettings videoSettings = videoEncodeControl->videoSettings();
- if (videoSettings.codec().isEmpty())
- videoCandidates = videoEncodeControl->supportedVideoCodecs();
- else
- videoCandidates << videoSettings.codec();
- }
-
- QString container;
- QString audioCodec;
- QString videoCodec;
-
- for (const QString &containerCandidate : qAsConst(containerCandidates)) {
- QSet<QString> supportedTypes = mediaContainerControl->supportedStreamTypes(containerCandidate);
-
- audioCodec.clear();
- videoCodec.clear();
-
- if (needAudio) {
- bool found = false;
- for (const QString &audioCandidate : qAsConst(audioCandidates)) {
- QSet<QString> audioTypes = audioEncodeControl->supportedStreamTypes(audioCandidate);
- if (audioTypes.intersects(supportedTypes)) {
- found = true;
- audioCodec = audioCandidate;
- break;
- }
- }
- if (!found)
- continue;
- }
-
- if (needVideo) {
- bool found = false;
- for (const QString &videoCandidate : qAsConst(videoCandidates)) {
- QSet<QString> videoTypes = videoEncodeControl->supportedStreamTypes(videoCandidate);
- if (videoTypes.intersects(supportedTypes)) {
- found = true;
- videoCodec = videoCandidate;
- break;
- }
- }
- if (!found)
- continue;
- }
-
- container = containerCandidate;
- break;
- }
-
- if (container.isEmpty()) {
- emit error(QMediaRecorder::FormatError, tr("Not compatible codecs and container format."));
- } else {
- mediaContainerControl->setContainerFormat(container);
-
- if (needAudio) {
- QAudioEncoderSettings audioSettings = audioEncodeControl->audioSettings();
- audioSettings.setCodec(audioCodec);
- audioEncodeControl->setAudioSettings(audioSettings);
- }
-
- if (needVideo) {
- QVideoEncoderSettings videoSettings = videoEncodeControl->videoSettings();
- videoSettings.setCodec(videoCodec);
- videoEncodeControl->setVideoSettings(videoSettings);
- }
- }
-#endif
}
QAudioDeviceInfo QGstreamerRecorderControl::audioInput() const
@@ -324,6 +224,19 @@ bool QGstreamerRecorderControl::setAudioInput(const QAudioDeviceInfo &info)
return true;
}
+void QGstreamerRecorderControl::setEncoderSettings(const QMediaEncoderSettings &settings)
+{
+ m_settings = settings;
+}
+
+QMediaEncoderSettings QGstreamerRecorderControl::resolvedEncoderSettings() const
+{
+ QMediaEncoderSettings f = m_settings;
+ f.resolveFormat(m_session->captureMode() & QGstreamerCaptureSession::Video ?
+ QMediaEncoderSettings::AudioAndVideo : QMediaEncoderSettings::AudioOnly);
+ return f;
+}
+
bool QGstreamerRecorderControl::isMuted() const
{
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol_p.h
index 1225b76d2..667789b74 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol_p.h
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamerrecordercontrol_p.h
@@ -83,6 +83,10 @@ public:
QAudioDeviceInfo audioInput() const override;
bool setAudioInput(const QAudioDeviceInfo &id) override;
+ void setEncoderSettings(const QMediaEncoderSettings &settings) override;
+ QMediaEncoderSettings encoderSettings() const { return m_settings; }
+ QMediaEncoderSettings resolvedEncoderSettings() const;
+
public slots:
void setState(QMediaRecorder::State state) override;
void record();
@@ -100,6 +104,7 @@ private:
QString generateFileName(const QDir &dir, const QString &ext) const;
QUrl m_outputLocation;
+ QMediaEncoderSettings m_settings;
QGstreamerCaptureSession *m_session;
QMediaRecorder::State m_state;
QMediaRecorder::Status m_status;
diff --git a/src/multimedia/platform/gstreamer/qgstreamerformatsinfo.cpp b/src/multimedia/platform/gstreamer/qgstreamerformatsinfo.cpp
index 6f6b6913c..6b2744f3d 100644
--- a/src/multimedia/platform/gstreamer/qgstreamerformatsinfo.cpp
+++ b/src/multimedia/platform/gstreamer/qgstreamerformatsinfo.cpp
@@ -51,11 +51,11 @@ static struct {
{ "video/x-ms-asf", QMediaFormat::FileFormat::ASF },
{ "video/x-msvideo", QMediaFormat::FileFormat::AVI },
{ "video/x-matroska", QMediaFormat::FileFormat::Matroska },
- { "video/quicktime, variant=(string)iso", QMediaFormat::FileFormat::MPEG4 },
+ { "video/mpeg", QMediaFormat::FileFormat::MPEG4 },
{ "video/quicktime", QMediaFormat::FileFormat::QuickTime },
{ "video/ogg", QMediaFormat::FileFormat::Ogg },
{ "video/webm", QMediaFormat::FileFormat::WebM },
- { nullptr, QMediaFormat::FileFormat::MPEG4 }
+ { nullptr, QMediaFormat::FileFormat::UnspecifiedFormat }
};
static struct {
@@ -65,26 +65,25 @@ static struct {
{ "audio/mpeg, mpegversion=(int)1, layer=(int)3", QMediaFormat::FileFormat::MP3 },
{ "audio/mpeg, mpegversion=(int)4", QMediaFormat::FileFormat::AAC },
{ "audio/x-flac", QMediaFormat::FileFormat::FLAC },
- { "audio/x-wma, wmaversion=(int)1", QMediaFormat::FileFormat::WindowsMediaAudio },
- { "audio/x-wma, wmaversion=(int)2", QMediaFormat::FileFormat::WindowsMediaAudio },
- { nullptr, QMediaFormat::FileFormat::MPEG4 },
+ { "audio/x-wma", QMediaFormat::FileFormat::WindowsMediaAudio },
+ { nullptr, QMediaFormat::FileFormat::UnspecifiedFormat },
};
static struct {
const char *name;
QMediaFormat::VideoCodec value;
} videoCodecMap[] = {
- { "video/mpeg, mpegversion=(int)1, systemstream=(boolean)false", QMediaFormat::VideoCodec::MPEG1 },
- { "video/mpeg, mpegversion=(int)2, systemstream=(boolean)false", QMediaFormat::VideoCodec::MPEG2 },
- { "video/mpeg, mpegversion=(int)4, systemstream=(boolean)false", QMediaFormat::VideoCodec::MPEG4 },
+ { "video/mpeg, mpegversion=(int)1", QMediaFormat::VideoCodec::MPEG1 },
+ { "video/mpeg, mpegversion=(int)2", QMediaFormat::VideoCodec::MPEG2 },
+ { "video/mpeg, mpegversion=(int)4", QMediaFormat::VideoCodec::MPEG4 },
{ "video/x-h264", QMediaFormat::VideoCodec::H264 },
{ "video/x-h265", QMediaFormat::VideoCodec::H265 },
{ "video/x-vp8", QMediaFormat::VideoCodec::VP8 },
{ "video/x-vp9", QMediaFormat::VideoCodec::VP9 },
{ "video/x-av1", QMediaFormat::VideoCodec::AV1 },
{ "video/x-theora", QMediaFormat::VideoCodec::Theora },
- { "video/", QMediaFormat::VideoCodec::MotionJPEG },
- { nullptr, QMediaFormat::VideoCodec::Invalid }
+ { "video/x-jpeg", QMediaFormat::VideoCodec::MotionJPEG },
+ { nullptr, QMediaFormat::VideoCodec::Unspecified }
};
static struct {
@@ -96,25 +95,27 @@ static struct {
{ "audio/x-ac3", QMediaFormat::AudioCodec::AC3 },
{ "audio/x-eac3", QMediaFormat::AudioCodec::EAC3 },
{ "audio/x-flac", QMediaFormat::AudioCodec::FLAC },
- { "audio/x-wma, wmaversion=(int)1", QMediaFormat::AudioCodec::WindowsMediaAudio },
- { "audio/x-wma, wmaversion=(int)2", QMediaFormat::AudioCodec::WindowsMediaAudio },
+ { "audio/x-wma", QMediaFormat::AudioCodec::WindowsMediaAudio },
{ "audio/x-true-hd", QMediaFormat::AudioCodec::DolbyTrueHD },
{ "audio/x-vorbis", QMediaFormat::AudioCodec::Vorbis },
- { nullptr, QMediaFormat::AudioCodec::Invalid },
+ { nullptr, QMediaFormat::AudioCodec::Unspecified },
};
-template<typename Map>
-static auto getList(QGstCodecsInfo::ElementType type, Map *map)
+template<typename Map, typename Hash>
+static auto getList(QGstCodecsInfo::ElementType type, Map *map, Hash &hash)
{
using T = decltype(map->value);
QList<T> list;
QGstCodecsInfo info(type);
auto codecs = info.supportedCodecs();
for (const auto &c : codecs) {
+ if (type == QGstCodecsInfo::AudioDecoder)
+ qDebug() << "gst format" << c;
Map *m = map;
while (m->name) {
if (m->name == c.toLatin1()) {
list.append(m->value);
+ hash.insert(m->value, m->name);
break;
}
++m;
@@ -125,15 +126,15 @@ static auto getList(QGstCodecsInfo::ElementType type, Map *map)
QGstreamerFormatsInfo::QGstreamerFormatsInfo()
{
- m_decodableMediaContainers = getList(QGstCodecsInfo::Demuxer, videoFormatsMap);
- m_decodableMediaContainers.append(getList(QGstCodecsInfo::AudioDecoder, audioFormatsMap));
- m_decodableAudioCodecs = getList(QGstCodecsInfo::AudioDecoder, audioCodecMap);
- m_decodableVideoCodecs = getList(QGstCodecsInfo::VideoDecoder, videoCodecMap);
-
- m_encodableMediaContainers = getList(QGstCodecsInfo::Muxer, videoFormatsMap);
- m_encodableMediaContainers.append(getList(QGstCodecsInfo::AudioEncoder, audioFormatsMap));
- m_encodableAudioCodecs = getList(QGstCodecsInfo::AudioEncoder, audioCodecMap);
- m_encodableVideoCodecs = getList(QGstCodecsInfo::VideoEncoder, videoCodecMap);
+ m_decodableMediaContainers = getList(QGstCodecsInfo::Demuxer, videoFormatsMap, formatToCaps);
+ m_decodableMediaContainers.append(getList(QGstCodecsInfo::AudioDecoder, audioFormatsMap, formatToCaps));
+ m_decodableAudioCodecs = getList(QGstCodecsInfo::AudioDecoder, audioCodecMap, audioToCaps);
+ m_decodableVideoCodecs = getList(QGstCodecsInfo::VideoDecoder, videoCodecMap, videoToCaps);
+
+ m_encodableMediaContainers = getList(QGstCodecsInfo::Muxer, videoFormatsMap, formatToCaps);
+ m_encodableMediaContainers.append(getList(QGstCodecsInfo::AudioEncoder, audioFormatsMap, formatToCaps));
+ m_encodableAudioCodecs = getList(QGstCodecsInfo::AudioEncoder, audioCodecMap, audioToCaps);
+ m_encodableVideoCodecs = getList(QGstCodecsInfo::VideoEncoder, videoCodecMap, videoToCaps);
}
QGstreamerFormatsInfo::~QGstreamerFormatsInfo()
diff --git a/src/multimedia/platform/gstreamer/qgstreamerformatsinfo_p.h b/src/multimedia/platform/gstreamer/qgstreamerformatsinfo_p.h
index dff690fd6..e81319532 100644
--- a/src/multimedia/platform/gstreamer/qgstreamerformatsinfo_p.h
+++ b/src/multimedia/platform/gstreamer/qgstreamerformatsinfo_p.h
@@ -52,6 +52,7 @@
//
#include <private/qmediaplatformformatinfo_p.h>
+#include <qhash.h>
#include <qlist.h>
QT_BEGIN_NAMESPACE
@@ -70,6 +71,10 @@ public:
QList<QMediaFormat::AudioCodec> encodableAudioCodecs() const override;
QList<QMediaFormat::VideoCodec> encodableVideoCodecs() const override;
+ const char *nativeFormat(QMediaFormat::FileFormat f) const { return formatToCaps.value(f); }
+ const char *nativeFormat(QMediaFormat::AudioCodec c) const { return audioToCaps.value(c); }
+ const char *nativeFormat(QMediaFormat::VideoCodec c) const { return videoToCaps.value(c); }
+
private:
QList<QMediaFormat::FileFormat> m_decodableMediaContainers;
QList<QMediaFormat::AudioCodec> m_decodableAudioCodecs;
@@ -78,6 +83,10 @@ private:
QList<QMediaFormat::FileFormat> m_encodableMediaContainers;
QList<QMediaFormat::AudioCodec> m_encodableAudioCodecs;
QList<QMediaFormat::VideoCodec> m_encodableVideoCodecs;
+
+ QHash<QMediaFormat::FileFormat, const char *> formatToCaps;
+ QHash<QMediaFormat::AudioCodec, const char *> audioToCaps;
+ QHash<QMediaFormat::VideoCodec, const char *> videoToCaps;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/platform/gstreamer/qgstreamerintegration_p.h b/src/multimedia/platform/gstreamer/qgstreamerintegration_p.h
index 8a0106627..a06beb34a 100644
--- a/src/multimedia/platform/gstreamer/qgstreamerintegration_p.h
+++ b/src/multimedia/platform/gstreamer/qgstreamerintegration_p.h
@@ -57,6 +57,7 @@ QT_BEGIN_NAMESPACE
class QGstreamerDeviceManager;
class QGstreamerPlayerInterface;
+class QGstreamerFormatsInfo;
class QGstreamerIntegration : public QMediaPlatformIntegration
{
@@ -64,6 +65,7 @@ public:
QGstreamerIntegration();
~QGstreamerIntegration();
+ static QGstreamerIntegration *instance() { return static_cast<QGstreamerIntegration *>(QMediaPlatformIntegration::instance()); }
QMediaPlatformDeviceManager *deviceManager() override;
QMediaPlatformFormatInfo *formatInfo() override;
@@ -72,7 +74,7 @@ public:
QMediaPlatformPlayerInterface *createPlayerInterface() override;
QGstreamerDeviceManager *m_manager = nullptr;
- QMediaPlatformFormatInfo *m_formatsInfo = nullptr;
+ QGstreamerFormatsInfo *m_formatsInfo = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/qmediaformat.cpp b/src/multimedia/qmediaformat.cpp
index 43bd38d4b..0a5e9a27f 100644
--- a/src/multimedia/qmediaformat.cpp
+++ b/src/multimedia/qmediaformat.cpp
@@ -67,6 +67,11 @@ constexpr bool audioSupportMatrix[QMediaFormat::FileFormat::LastFileFormat + 1][
{ false, false, false, false, false, false, false, false, false, true }, // WindowsMediaAudio
};
+inline bool formatSupportsCodec(QMediaFormat::FileFormat format, QMediaFormat::AudioCodec codec)
+{
+ return audioSupportMatrix[format][(int)codec];
+}
+
// info from https://en.wikipedia.org/wiki/Comparison_of_video_container_formats
constexpr bool videoSupportMatrix[QMediaFormat::FileFormat::LastFileFormat + 1][(int)QMediaFormat::VideoCodec::LastVideoCodec + 1] =
{
@@ -89,6 +94,36 @@ constexpr bool videoSupportMatrix[QMediaFormat::FileFormat::LastFileFormat + 1][
{ false, false, false, false, false, false, false, false, false, false }, // WindowsMediaAudio
};
+inline bool formatSupportsCodec(QMediaFormat::FileFormat format, QMediaFormat::VideoCodec codec)
+{
+ return videoSupportMatrix[format][(int)codec];
+}
+
+
+constexpr QMediaFormat::FileFormat videoFormatPriorityList[] =
+{
+ QMediaFormat::MPEG4,
+ QMediaFormat::QuickTime,
+ QMediaFormat::AVI,
+ QMediaFormat::WebM,
+ QMediaFormat::ASF,
+ QMediaFormat::Matroska,
+ QMediaFormat::Ogg,
+ QMediaFormat::UnspecifiedFormat
+};
+
+constexpr QMediaFormat::FileFormat audioFormatPriorityList[] =
+{
+ QMediaFormat::AAC,
+ QMediaFormat::MP3,
+ QMediaFormat::Mpeg4Audio,
+ QMediaFormat::Opus,
+ QMediaFormat::FLAC,
+ QMediaFormat::WindowsMediaAudio,
+ QMediaFormat::Wave,
+ QMediaFormat::UnspecifiedFormat
+};
+
constexpr QMediaFormat::AudioCodec audioPriorityList[] =
{
QMediaFormat::AudioCodec::AAC,
@@ -101,7 +136,7 @@ constexpr QMediaFormat::AudioCodec audioPriorityList[] =
QMediaFormat::AudioCodec::FLAC,
QMediaFormat::AudioCodec::Vorbis,
QMediaFormat::AudioCodec::Wave,
- QMediaFormat::AudioCodec::Invalid
+ QMediaFormat::AudioCodec::Unspecified
};
constexpr QMediaFormat::VideoCodec videoPriorityList[] =
@@ -120,6 +155,84 @@ constexpr QMediaFormat::VideoCodec videoPriorityList[] =
}
+void QMediaFormatPrivate::resolveForEncoding(QMediaFormat *f, bool audioOnly)
+{
+ auto supportedFormats = QMediaEncoderInfo::supportedFileFormats();
+ auto supportedAudioCodecs = QMediaEncoderInfo::supportedAudioCodecs();
+ auto supportedVideoCodecs = QMediaEncoderInfo::supportedVideoCodecs();
+
+ auto bestSupportedFileFormat = [&](QMediaFormat::AudioCodec audio = QMediaFormat::AudioCodec::Unspecified,
+ QMediaFormat::VideoCodec video = QMediaFormat::VideoCodec::Unspecified)
+ {
+ auto *list = audioOnly ? audioFormatPriorityList : videoFormatPriorityList;
+ while (*list != QMediaFormat::UnspecifiedFormat) {
+ if (supportedFormats.contains(*list)) {
+ if ((audio == QMediaFormat::AudioCodec::Unspecified || formatSupportsCodec(f->fmt, audio)) &&
+ (video == QMediaFormat::VideoCodec::Unspecified || formatSupportsCodec(f->fmt, video)))
+ break;
+ }
+ ++list;
+ }
+ return *list;
+ };
+
+ // reset non supported formats and codecs
+ if (!supportedFormats.contains(f->fmt))
+ f->fmt = QMediaFormat::UnspecifiedFormat;
+ if (!supportedAudioCodecs.contains(f->audio))
+ f->audio = QMediaFormat::AudioCodec::Unspecified;
+ if (audioOnly || !supportedVideoCodecs.contains(f->video))
+ f->video = QMediaFormat::VideoCodec::Unspecified;
+
+ // try finding a file format that is supported
+ if (f->fmt == QMediaFormat::UnspecifiedFormat)
+ f->fmt = bestSupportedFileFormat(f->audio, f->video);
+ // try without the audio codec
+ if (f->fmt == QMediaFormat::UnspecifiedFormat)
+ f->fmt = bestSupportedFileFormat(QMediaFormat::AudioCodec::Unspecified, f->video);
+ // try without the video codec
+ if (f->fmt == QMediaFormat::UnspecifiedFormat)
+ f->fmt = bestSupportedFileFormat(f->audio);
+ // give me a format that's supported
+ if (f->fmt == QMediaFormat::UnspecifiedFormat)
+ f->fmt = bestSupportedFileFormat();
+ // still nothing? Give up
+ if (f->fmt == QMediaFormat::UnspecifiedFormat)
+ return;
+
+ // now that we have a format, reset codecs that won't work
+ if (f->audio != QMediaFormat::AudioCodec::Unspecified) {
+ if (!formatSupportsCodec(f->fmt, f->audio) || !supportedAudioCodecs.contains(f->audio))
+ f->audio = QMediaFormat::AudioCodec::Unspecified;
+ }
+ if (f->video != QMediaFormat::VideoCodec::Unspecified) {
+ if (!formatSupportsCodec(f->fmt, f->video) || !supportedVideoCodecs.contains(f->video))
+ f->video = QMediaFormat::VideoCodec::Unspecified;
+ }
+
+ // find a matching audio format
+ if (f->audio == QMediaFormat::AudioCodec::Unspecified) {
+ auto *list = audioPriorityList;
+ while (*list != QMediaFormat::AudioCodec::Unspecified) {
+ if (supportedAudioCodecs.contains(*list) && formatSupportsCodec(f->fmt, *list))
+ break;
+ ++list;
+ }
+ f->audio = *list;
+ }
+
+ // find a matching video format
+ if (!audioOnly && f->video == QMediaFormat::VideoCodec::Unspecified) {
+ auto *list = videoPriorityList;
+ while (*list != QMediaFormat::VideoCodec::Unspecified) {
+ if (supportedVideoCodecs.contains(*list) && formatSupportsCodec(f->fmt, *list))
+ break;
+ ++list;
+ }
+ f->video = *list;
+ }
+}
+
/*! \enum QMediaFormat::FileFormat
Describes the container format used in a multimedia file or stream.
@@ -148,21 +261,6 @@ QMediaFormat::QMediaFormat(FileFormat format)
: fmt(format)
{
Q_UNUSED(d);
- const QMediaFormat::VideoCodec *v = videoPriorityList;
- while (*v != QMediaFormat::VideoCodec::Invalid) {
- if (videoSupportMatrix[fmt][(int)*v])
- break;
- ++v;
- }
- video = *v;
-
- const QMediaFormat::AudioCodec *a = audioPriorityList;
- while (*a != QMediaFormat::AudioCodec::Invalid) {
- if (videoSupportMatrix[fmt][(int)*a])
- break;
- ++a;
- }
- audio = *a;
}
QMediaFormat::~QMediaFormat() = default;
@@ -240,13 +338,13 @@ bool QMediaFormat::canDecode() const
{
if (!QMediaDecoderInfo::supportedFileFormats().contains(fmt))
return false;
- if (audio == QMediaFormat::AudioCodec::Invalid && video == QMediaFormat::VideoCodec::Invalid)
+ if (audio == QMediaFormat::AudioCodec::Unspecified && video == QMediaFormat::VideoCodec::Unspecified)
return false;
- if (audio != QMediaFormat::AudioCodec::Invalid) {
+ if (audio != QMediaFormat::AudioCodec::Unspecified) {
if (!QMediaDecoderInfo::supportedAudioCodecs().contains(audio))
return false;
}
- if (video != QMediaFormat::VideoCodec::Invalid) {
+ if (video != QMediaFormat::VideoCodec::Unspecified) {
if (!QMediaDecoderInfo::supportedVideoCodecs().contains(video))
return false;
}
@@ -262,13 +360,13 @@ bool QMediaFormat::canEncode() const
{
if (!QMediaEncoderInfo::supportedFileFormats().contains(fmt))
return false;
- if (audio == QMediaFormat::AudioCodec::Invalid && video == QMediaFormat::VideoCodec::Invalid)
+ if (audio == QMediaFormat::AudioCodec::Unspecified && video == QMediaFormat::VideoCodec::Unspecified)
return false;
- if (audio != QMediaFormat::AudioCodec::Invalid) {
+ if (audio != QMediaFormat::AudioCodec::Unspecified) {
if (!QMediaEncoderInfo::supportedAudioCodecs().contains(audio))
return false;
}
- if (video != QMediaFormat::VideoCodec::Invalid) {
+ if (video != QMediaFormat::VideoCodec::Unspecified) {
if (!QMediaEncoderInfo::supportedVideoCodecs().contains(video))
return false;
}
@@ -344,6 +442,7 @@ QString QMediaFormat::videoCodecName(QMediaFormat::VideoCodec c)
QString QMediaFormat::fileFormatDescription(QMediaFormat::FileFormat c)
{
constexpr const char *descriptions[] = {
+ "Unspecified File Format",
"Windows Media Format (ASF)",
"Audio Video Interleave (AVI)",
"Matroska Multimedia Container",
@@ -360,13 +459,13 @@ QString QMediaFormat::fileFormatDescription(QMediaFormat::FileFormat c)
"Wave File",
"Windows Media Audio",
};
- return QString::fromUtf8(descriptions[int(c)]);
+ return QString::fromUtf8(descriptions[int(c) + 1]);
}
QString QMediaFormat::audioCodecDescription(QMediaFormat::AudioCodec c)
{
constexpr const char *descriptions[] = {
- "Invalid Audio Codec",
+ "Unspecified Audio Codec",
"MP3",
"Advanced Audio Codec (AAC)",
"Dolby Digital (AC3)",
@@ -384,7 +483,7 @@ QString QMediaFormat::audioCodecDescription(QMediaFormat::AudioCodec c)
QString QMediaFormat::videoCodecDescription(QMediaFormat::VideoCodec c)
{
constexpr const char *descriptions[] = {
- "Invalid",
+ "Unspecified Video Codec",
"MPEG-1 Video",
"MPEG-2 Video",
"MPEG-4 Video",
diff --git a/src/multimedia/qmediaformat.h b/src/multimedia/qmediaformat.h
index baf4d90eb..69e795545 100644
--- a/src/multimedia/qmediaformat.h
+++ b/src/multimedia/qmediaformat.h
@@ -46,11 +46,19 @@
QT_BEGIN_NAMESPACE
-class QMediaFormatPrivate;
+class QMediaFormat;
+class QMediaEncoderSettings;
+class QMediaFormatPrivate
+{
+ friend class QMediaEncoderSettings;
+ static void resolveForEncoding(QMediaFormat *fmt, bool audioOnly);
+};
+
class Q_MULTIMEDIA_EXPORT QMediaFormat
{
public:
enum FileFormat {
+ UnspecifiedFormat = -1,
// Video Formats
ASF,
AVI,
@@ -71,7 +79,7 @@ public:
};
enum class AudioCodec {
- Invalid = -1,
+ Unspecified = -1,
MP3,
AAC,
AC3,
@@ -86,7 +94,7 @@ public:
};
enum class VideoCodec {
- Invalid = -1,
+ Unspecified = -1,
MPEG1,
MPEG2,
MPEG4,
@@ -100,12 +108,13 @@ public:
LastVideoCodec = MotionJPEG
};
- QMediaFormat(FileFormat format);
+ QMediaFormat(FileFormat format = UnspecifiedFormat);
~QMediaFormat();
QMediaFormat(const QMediaFormat &other);
QMediaFormat &operator=(const QMediaFormat &other);
FileFormat format() const { return fmt; }
+ void setFormat(FileFormat f) { fmt = f; }
bool setVideoCodec(VideoCodec codec);
VideoCodec videoCodec() const { return video; }
@@ -126,10 +135,11 @@ public:
static QString audioCodecDescription(QMediaFormat::AudioCodec c);
static QString videoCodecDescription(QMediaFormat::VideoCodec c);
-private:
+protected:
+ friend class QMediaFormatPrivate;
FileFormat fmt;
- AudioCodec audio = AudioCodec::Invalid;
- VideoCodec video = VideoCodec::Invalid;
+ AudioCodec audio = AudioCodec::Unspecified;
+ VideoCodec video = VideoCodec::Unspecified;
QMediaFormatPrivate *d = nullptr;
};
diff --git a/src/multimedia/recording/qmediaencodersettings.cpp b/src/multimedia/recording/qmediaencodersettings.cpp
index 13b7f0e06..1c0414b8d 100644
--- a/src/multimedia/recording/qmediaencodersettings.cpp
+++ b/src/multimedia/recording/qmediaencodersettings.cpp
@@ -38,485 +38,164 @@
****************************************************************************/
#include "qmediaencodersettings.h"
+#include "qmediaformat.h"
QT_BEGIN_NAMESPACE
-static void qRegisterEncoderSettingsMetaTypes()
-{
- qRegisterMetaType<QAudioEncoderSettings>();
- qRegisterMetaType<QVideoEncoderSettings>();
- qRegisterMetaType<QImageEncoderSettings>();
-}
-
-Q_CONSTRUCTOR_FUNCTION(qRegisterEncoderSettingsMetaTypes)
-
-
-class QAudioEncoderSettingsPrivate : public QSharedData
-{
-public:
- bool isNull = true;
- QMultimedia::EncodingMode encodingMode = QMultimedia::ConstantQualityEncoding;
- QString codec;
- int bitrate = -1;
- int sampleRate = -1;
- int channels = -1;
- QMultimedia::EncodingQuality quality = QMultimedia::NormalQuality;
- QVariantMap encodingOptions;
-};
-
/*!
- \class QAudioEncoderSettings
+ \class QMediaEncoderSettings
- \brief The QAudioEncoderSettings class provides a set of audio encoder settings.
+ \brief The QMediaEncoderSettings class provides a settings to encode a media file.
\inmodule QtMultimedia
\ingroup multimedia
\ingroup multimedia_recording
- A audio encoder settings object is used to specify the audio encoder
- settings used by QMediaRecorder. Audio encoder settings are selected by
- constructing a QAudioEncoderSettings object, setting the desired properties
- and then passing it to a QMediaRecorder instance using the
- QMediaRecorder::setEncodingSettings() function.
+ A media encoder settings object is used to specify the encoder
+ settings used by QMediaRecorder. Settings are selected by
+ constructing a QMediaEncoderSettings object specifying an output file format,
+ setting the desired properties and then passing it to a QMediaRecorder instance
+ using the QMediaRecorder::setEncoderSettings() function.
\snippet multimedia-snippets/media.cpp Audio encoder settings
- \sa QMediaRecorder, QAudioEncoderSettingsControl
+ \sa QMediaRecorder
*/
-/*!
- Construct a null audio encoder settings object.
-*/
-QAudioEncoderSettings::QAudioEncoderSettings()
- :d(new QAudioEncoderSettingsPrivate)
+class QMediaEncoderSettingsPrivate : public QSharedData
{
-}
+public:
+ bool isNull = true;
+ QMultimedia::EncodingMode encodingMode = QMultimedia::ConstantQualityEncoding;
+ QMultimedia::EncodingQuality quality = QMultimedia::NormalQuality;
-/*!
- Constructs a copy of the audio encoder settings object \a other.
-*/
+ int audioBitrate = -1;
+ int audioSampleRate = -1;
+ int audioChannels = -1;
-QAudioEncoderSettings::QAudioEncoderSettings(const QAudioEncoderSettings& other)
- :d(other.d)
-{
-}
+ QSize videoResolution = QSize(-1, -1);
+ int videoFrameRate = -1;
+ int videoBitRate = -1;
+};
/*!
- Destroys an audio encoder settings object.
+ Creates andefault media encoder settings object. Qt will automatically try to
+ pick the best possible encoding for the content.
*/
-
-QAudioEncoderSettings::~QAudioEncoderSettings()
+QMediaEncoderSettings::QMediaEncoderSettings()
+ : QMediaEncoderSettings(QMediaFormat::UnspecifiedFormat)
{
}
+
/*!
- Assigns the value of \a other to an audio encoder settings object.
+ Creates an audio encoder settings object with a given \a format.
*/
-
-QAudioEncoderSettings& QAudioEncoderSettings::operator=(const QAudioEncoderSettings &other)
+QMediaEncoderSettings::QMediaEncoderSettings(FileFormat format)
+ : QMediaFormat(format),
+ d(new QMediaEncoderSettingsPrivate)
{
- d = other.d;
- return *this;
+
}
/*!
- Determines if \a other is of equal value to an audio encoder settings
- object.
-
- Returns true if the settings objects are of equal value, and false if they
- are not of equal value.
+ Creates a copy of the encoder settings object \a other.
*/
-
-bool QAudioEncoderSettings::operator==(const QAudioEncoderSettings &other) const
+QMediaEncoderSettings::QMediaEncoderSettings(const QMediaEncoderSettings &other)
+ : QMediaFormat(other),
+ d(other.d)
{
- return (d == other.d) ||
- (d->isNull == other.d->isNull &&
- d->encodingMode == other.d->encodingMode &&
- d->bitrate == other.d->bitrate &&
- d->sampleRate == other.d->sampleRate &&
- d->channels == other.d->channels &&
- d->quality == other.d->quality &&
- d->codec == other.d->codec &&
- d->encodingOptions == other.d->encodingOptions);
}
-/*!
- Determines if \a other is of equal value to an audio encoder settings
- object.
-
- Returns true if the settings objects are not of equal value, and true if
- they are of equal value.
-*/
-
-bool QAudioEncoderSettings::operator!=(const QAudioEncoderSettings &other) const
+QMediaEncoderSettings &QMediaEncoderSettings::operator=(const QMediaEncoderSettings &other)
{
- return !(*this == other);
+ QMediaFormat::operator=(other);
+ d = other.d;
+ return *this;
}
-/*!
- Identifies if an audio settings object is initialized.
-
- Returns true if the settings object is null, and false if it is not.
-*/
-
-bool QAudioEncoderSettings::isNull() const
+QMediaEncoderSettings::~QMediaEncoderSettings()
{
- return d->isNull;
}
/*!
- Returns the audio encoding mode.
+ Returns the encoding mode.
\sa QMultimedia::EncodingMode
*/
-QMultimedia::EncodingMode QAudioEncoderSettings::encodingMode() const
+QMultimedia::EncodingMode QMediaEncoderSettings::encodingMode() const
{
return d->encodingMode;
}
/*!
- Sets the audio encoding \a mode setting.
+ Sets the encoding \a mode setting.
If QMultimedia::ConstantQualityEncoding is set, the quality
- encoding parameter is used and bit rate is ignored,
- otherwise the bitrate is used.
-
- The audio codec, channels count and sample rate settings are used in all
- the encoding modes.
+ encoding parameter is used and bit rates are ignored,
+ otherwise the bitrates are used.
\sa encodingMode(), QMultimedia::EncodingMode
*/
-void QAudioEncoderSettings::setEncodingMode(QMultimedia::EncodingMode mode)
+void QMediaEncoderSettings::setEncodingMode(QMultimedia::EncodingMode mode)
{
d->encodingMode = mode;
}
-/*!
- Returns the audio codec.
-*/
-QString QAudioEncoderSettings::codec() const
-{
- return d->codec;
-}
-
-/*!
- Sets the audio \a codec.
-*/
-void QAudioEncoderSettings::setCodec(const QString& codec)
-{
- d->isNull = false;
- d->codec = codec;
-}
-
-/*!
- Returns the bit rate of the compressed audio stream in bits per second.
-*/
-int QAudioEncoderSettings::bitRate() const
-{
- return d->bitrate;
-}
-
-/*!
- Returns the number of audio channels.
-*/
-int QAudioEncoderSettings::channelCount() const
-{
- return d->channels;
-}
-
-/*!
- Sets the number of audio \a channels.
-
- A value of -1 indicates the encoder should make an optimal choice based on
- what is available from the audio source and the limitations of the codec.
-*/
-void QAudioEncoderSettings::setChannelCount(int channels)
-{
- d->isNull = false;
- d->channels = channels;
-}
-
-/*!
- Sets the audio bit \a rate in bits per second.
-*/
-void QAudioEncoderSettings::setBitRate(int rate)
-{
- d->isNull = false;
- d->bitrate = rate;
-}
-
-/*!
- Returns the audio sample rate in Hz.
-*/
-int QAudioEncoderSettings::sampleRate() const
-{
- return d->sampleRate;
-}
-
-/*!
- Sets the audio sample \a rate in Hz.
-
- A value of -1 indicates the encoder should make an optimal choice based on what is avaialbe
- from the audio source and the limitations of the codec.
- */
-void QAudioEncoderSettings::setSampleRate(int rate)
-{
- d->isNull = false;
- d->sampleRate = rate;
-}
-
-/*!
- Returns the audio encoding quality.
-*/
-
-QMultimedia::EncodingQuality QAudioEncoderSettings::quality() const
+QMultimedia::EncodingQuality QMediaEncoderSettings::quality() const
{
return d->quality;
}
-/*!
- Set the audio encoding \a quality.
-
- Setting the audio quality parameter allows backend to choose the balanced
- set of encoding parameters to achieve the desired quality level.
-
- The \a quality settings parameter is only used in the
- \l {QMultimedia::ConstantQualityEncoding}{constant quality} \l{encodingMode()}{encoding mode}.
-*/
-void QAudioEncoderSettings::setQuality(QMultimedia::EncodingQuality quality)
+void QMediaEncoderSettings::setQuality(QMultimedia::EncodingQuality quality)
{
- d->isNull = false;
d->quality = quality;
}
/*!
- Returns the value of encoding \a option.
+ Resolves the format to a format that is supported by QMediaRecorder.
- \sa setEncodingOption(), encodingOptions()
-*/
-QVariant QAudioEncoderSettings::encodingOption(const QString &option) const
+ This method tries to find the best possible match for unspecified settings.
+ Settings that are not supported by the encoder will be modified to the closest
+ match that is supported.
+ */
+void QMediaEncoderSettings::resolveFormat(QMediaEncoderSettings::ResolveMode mode)
{
- return d->encodingOptions.value(option);
+ QMediaFormatPrivate::resolveForEncoding(this, mode == AudioOnly);
}
/*!
- Returns the all the encoding options as QVariantMap.
-
- \sa encodingOption(), setEncodingOptions()
-*/
-QVariantMap QAudioEncoderSettings::encodingOptions() const
-{
- return d->encodingOptions;
-}
-
-/*!
- Set the encoding \a option to \a value.
-
- The supported set and meaning of encoding options are
- system and selected codec specific.
-
- \sa encodingOption(), setEncodingOptions()
-*/
-void QAudioEncoderSettings::setEncodingOption(const QString &option, const QVariant &value)
-{
- d->isNull = false;
- if (value.isNull())
- d->encodingOptions.remove(option);
- else
- d->encodingOptions.insert(option, value);
-}
-
-/*!
- Replace all the encoding options with \a options.
-
- The supported set and meaning of encoding options are
- system and selected codec specific.
-
- \sa encodingOption(), setEncodingOption()
-*/
-void QAudioEncoderSettings::setEncodingOptions(const QVariantMap &options)
-{
- d->isNull = false;
- d->encodingOptions = options;
-}
-
-class QVideoEncoderSettingsPrivate : public QSharedData
-{
-public:
- bool isNull = true;
- QMultimedia::EncodingMode encodingMode = QMultimedia::ConstantQualityEncoding;
- QString codec;
- int bitrate = -1;
- QSize resolution;
- qreal frameRate = 0;
- QMultimedia::EncodingQuality quality = QMultimedia::NormalQuality;
- QVariantMap encodingOptions;
-};
-
-/*!
- \class QVideoEncoderSettings
-
- \brief The QVideoEncoderSettings class provides a set of video encoder settings.
-
- \inmodule QtMultimedia
- \ingroup multimedia
- \ingroup multimedia_recording
-
- A video encoder settings object is used to specify the video encoder
- settings used by QMediaRecorder. Video encoder settings are selected by
- constructing a QVideoEncoderSettings object, setting the desired properties
- and then passing it to a QMediaRecorder instance using the
- QMediaRecorder::setEncodingSettings() function.
-
- \snippet multimedia-snippets/media.cpp Video encoder settings
-
- \sa QMediaRecorder, QVideoEncoderSettingsControl
-*/
-
-/*!
- Constructs a null video encoder settings object.
-*/
-
-QVideoEncoderSettings::QVideoEncoderSettings()
- :d(new QVideoEncoderSettingsPrivate)
-{
-}
-
-/*!
- Constructs a copy of the video encoder settings object \a other.
-*/
-
-QVideoEncoderSettings::QVideoEncoderSettings(const QVideoEncoderSettings& other)
- :d(other.d)
-{
-}
-
-/*!
- Destroys a video encoder settings object.
-*/
-
-QVideoEncoderSettings::~QVideoEncoderSettings()
-{
-}
-
-/*!
- Assigns the value of \a other to a video encoder settings object.
-*/
-QVideoEncoderSettings &QVideoEncoderSettings::operator=(const QVideoEncoderSettings &other)
-{
- d = other.d;
- return *this;
-}
-
-/*!
- Determines if \a other is of equal value to a video encoder settings object.
-
- Returns true if the settings objects are of equal value, and false if they
- are not of equal value.
-*/
-bool QVideoEncoderSettings::operator==(const QVideoEncoderSettings &other) const
-{
- return (d == other.d) ||
- (d->isNull == other.d->isNull &&
- d->encodingMode == other.d->encodingMode &&
- d->bitrate == other.d->bitrate &&
- d->quality == other.d->quality &&
- d->codec == other.d->codec &&
- d->resolution == other.d->resolution &&
- qFuzzyCompare(d->frameRate, other.d->frameRate) &&
- d->encodingOptions == other.d->encodingOptions);
-}
-
-/*!
- Determines if \a other is of equal value to a video encoder settings object.
-
- Returns true if the settings objects are not of equal value, and false if
- they are of equal value.
-*/
-bool QVideoEncoderSettings::operator!=(const QVideoEncoderSettings &other) const
-{
- return !(*this == other);
-}
-
-/*!
- Identifies if a video encoder settings object is uninitalized.
-
- Returns true if the settings are null, and false if they are not.
+ Returns the resolution of the encoded video.
*/
-bool QVideoEncoderSettings::isNull() const
+QSize QMediaEncoderSettings::videoResolution() const
{
- return d->isNull;
+ return d->videoResolution;
}
/*!
- Returns the video encoding mode.
-
- \sa QMultimedia::EncodingMode
-*/
-QMultimedia::EncodingMode QVideoEncoderSettings::encodingMode() const
-{
- return d->encodingMode;
-}
-
-/*!
- Sets the video encoding \a mode.
-
- If QMultimedia::ConstantQualityEncoding is set,
- the quality encoding parameter is used and bit rate is ignored,
- otherwise the bitrate is used.
-
- The rest of encoding settings are respected regardless of encoding mode.
-
- \sa QMultimedia::EncodingMode
-*/
-void QVideoEncoderSettings::setEncodingMode(QMultimedia::EncodingMode mode)
-{
- d->isNull = false;
- d->encodingMode = mode;
-}
+ Sets the \a resolution of the encoded video.
-/*!
- Returns the video codec.
+ An empty QSize indicates the encoder should make an optimal choice based on
+ what is available from the video source and the limitations of the codec.
*/
-
-QString QVideoEncoderSettings::codec() const
+void QMediaEncoderSettings::setVideoResolution(const QSize &size)
{
- return d->codec;
+ d->videoResolution = size;
}
-/*!
- Sets the video \a codec.
-*/
-void QVideoEncoderSettings::setCodec(const QString& codec)
-{
- d->isNull = false;
- d->codec = codec;
-}
+/*! \fn void QMediaEncoderSettings::setVideoResolution(int width, int height)
-/*!
- Returns bit rate of the encoded video stream in bits per second.
-*/
-int QVideoEncoderSettings::bitRate() const
-{
- return d->bitrate;
-}
+ Sets the \a width and \a height of the resolution of the encoded video.
-/*!
- Sets the bit rate of the encoded video stream to \a value.
+ \overload
*/
-void QVideoEncoderSettings::setBitRate(int value)
-{
- d->isNull = false;
- d->bitrate = value;
-}
-
/*!
Returns the video frame rate.
*/
-qreal QVideoEncoderSettings::frameRate() const
+qreal QMediaEncoderSettings::videoFrameRate() const
{
- return d->frameRate;
+ return d->videoFrameRate;
}
/*!
@@ -527,125 +206,94 @@ qreal QVideoEncoderSettings::frameRate() const
A value of 0 indicates the encoder should make an optimal choice based on what is available
from the video source and the limitations of the codec.
*/
-
-void QVideoEncoderSettings::setFrameRate(qreal rate)
+void QMediaEncoderSettings::setVideoFrameRate(qreal rate)
{
- d->isNull = false;
- d->frameRate = rate;
+ d->videoFrameRate = rate;
}
/*!
- Returns the resolution of the encoded video.
+ Returns the bit rate of the compressed video stream in bits per second.
*/
-
-QSize QVideoEncoderSettings::resolution() const
+int QMediaEncoderSettings::videoBitRate() const
{
- return d->resolution;
+ return d->videoBitRate;
}
/*!
- Sets the \a resolution of the encoded video.
-
- An empty QSize indicates the encoder should make an optimal choice based on
- what is available from the video source and the limitations of the codec.
+ Sets the video bit \a rate in bits per second.
*/
-
-void QVideoEncoderSettings::setResolution(const QSize &resolution)
+void QMediaEncoderSettings::setVideoBitRate(int bitrate)
{
- d->isNull = false;
- d->resolution = resolution;
+ d->videoBitRate = bitrate;
}
/*!
- Sets the \a width and \a height of the resolution of the encoded video.
-
- \overload
+ Returns the bit rate of the compressed audio stream in bits per second.
*/
-
-void QVideoEncoderSettings::setResolution(int width, int height)
+int QMediaEncoderSettings::audioBitRate() const
{
- d->isNull = false;
- d->resolution = QSize(width, height);
+ return d->audioBitrate;
}
/*!
- Returns the video encoding quality.
+ Sets the audio bit \a rate in bits per second.
*/
-
-QMultimedia::EncodingQuality QVideoEncoderSettings::quality() const
+void QMediaEncoderSettings::setAudioBitRate(int bitrate)
{
- return d->quality;
+ d->audioBitrate = bitrate;
}
/*!
- Sets the video encoding \a quality.
-
- Setting the video quality parameter allows backend to choose the balanced
- set of encoding parameters to achieve the desired quality level.
-
- The \a quality settings parameter is only used in the
- \l {QMultimedia::ConstantQualityEncoding}{constant quality} \l{encodingMode()}{encoding mode}.
- The \a quality settings parameter is only used in the \l
- {QMultimedia::ConstantQualityEncoding}{constant quality}
- \l{encodingMode()}{encoding mode}.
+ Returns the number of audio channels.
*/
-
-void QVideoEncoderSettings::setQuality(QMultimedia::EncodingQuality quality)
+int QMediaEncoderSettings::audioChannelCount() const
{
- d->isNull = false;
- d->quality = quality;
+ return d->audioChannels;
}
/*!
- Returns the value of encoding \a option.
+ Sets the number of audio \a channels.
- \sa setEncodingOption(), encodingOptions()
+ A value of -1 indicates the encoder should make an optimal choice based on
+ what is available from the audio source and the limitations of the codec.
*/
-QVariant QVideoEncoderSettings::encodingOption(const QString &option) const
+void QMediaEncoderSettings::setAudioChannelCount(int channels)
{
- return d->encodingOptions.value(option);
+ d->audioChannels = channels;
}
/*!
- Returns the all the encoding options as QVariantMap.
-
- \sa encodingOption(), setEncodingOptions()
+ Returns the audio sample rate in Hz.
*/
-QVariantMap QVideoEncoderSettings::encodingOptions() const
+int QMediaEncoderSettings::audioSampleRate() const
{
- return d->encodingOptions;
+ return d->audioSampleRate;
}
/*!
- Set the encoding \a option \a value.
-
- The supported set and meaning of encoding options are
- system and selected codec specific.
+ Sets the audio sample \a rate in Hz.
- \sa encodingOption(), setEncodingOptions()
+ A value of -1 indicates the encoder should make an optimal choice based on what is avaialbe
+ from the audio source and the limitations of the codec.
*/
-void QVideoEncoderSettings::setEncodingOption(const QString &option, const QVariant &value)
+void QMediaEncoderSettings::setAudioSampleRate(int rate)
{
- d->isNull = false;
- if (value.isNull())
- d->encodingOptions.remove(option);
- else
- d->encodingOptions.insert(option, value);
+ d->audioSampleRate = rate;
}
-/*!
- Replace all the encoding options with \a options.
-
- The supported set and meaning of encoding options are
- system and selected codec specific.
- \sa encodingOption(), setEncodingOption()
-*/
-void QVideoEncoderSettings::setEncodingOptions(const QVariantMap &options)
+class QAudioEncoderSettingsPrivate : public QSharedData
{
- d->isNull = false;
- d->encodingOptions = options;
-}
+public:
+ bool isNull = true;
+ QMultimedia::EncodingMode encodingMode = QMultimedia::ConstantQualityEncoding;
+ QString codec;
+ int bitrate = -1;
+ int sampleRate = -1;
+ int channels = -1;
+ QMultimedia::EncodingQuality quality = QMultimedia::NormalQuality;
+ QVariantMap encodingOptions;
+};
class QImageEncoderSettingsPrivate : public QSharedData
@@ -879,9 +527,3 @@ void QImageEncoderSettings::setEncodingOptions(const QVariantMap &options)
QT_END_NAMESPACE
-
-
-QMediaEncoderSettings::QMediaEncoderSettings()
-{
-
-}
diff --git a/src/multimedia/recording/qmediaencodersettings.h b/src/multimedia/recording/qmediaencodersettings.h
index 3bf57d70c..673c6f3a4 100644
--- a/src/multimedia/recording/qmediaencodersettings.h
+++ b/src/multimedia/recording/qmediaencodersettings.h
@@ -46,114 +46,36 @@
#include <QtCore/qvariant.h>
#include <QtMultimedia/qtmultimediaglobal.h>
#include <QtMultimedia/qmultimedia.h>
+#include <QtMultimedia/qmediaformat.h>
QT_BEGIN_NAMESPACE
-
-
-class QAudioEncoderSettingsPrivate;
-class Q_MULTIMEDIA_EXPORT QAudioEncoderSettings
-{
-public:
- QAudioEncoderSettings();
- QAudioEncoderSettings(const QAudioEncoderSettings& other);
-
- ~QAudioEncoderSettings();
-
- QAudioEncoderSettings& operator=(const QAudioEncoderSettings &other);
- bool operator==(const QAudioEncoderSettings &other) const;
- bool operator!=(const QAudioEncoderSettings &other) const;
-
- bool isNull() const;
-
- QMultimedia::EncodingMode encodingMode() const;
- void setEncodingMode(QMultimedia::EncodingMode);
-
- QString codec() const;
- void setCodec(const QString& codec);
-
- int bitRate() const;
- void setBitRate(int bitrate);
-
- int channelCount() const;
- void setChannelCount(int channels);
-
- int sampleRate() const;
- void setSampleRate(int rate);
-
- QMultimedia::EncodingQuality quality() const;
- void setQuality(QMultimedia::EncodingQuality quality);
-
- QVariant encodingOption(const QString &option) const;
- QVariantMap encodingOptions() const;
- void setEncodingOption(const QString &option, const QVariant &value);
- void setEncodingOptions(const QVariantMap &options);
-
-private:
- QSharedDataPointer<QAudioEncoderSettingsPrivate> d;
-};
-
-class QVideoEncoderSettingsPrivate;
-class Q_MULTIMEDIA_EXPORT QVideoEncoderSettings
+class QMediaEncoderSettingsPrivate;
+class Q_MULTIMEDIA_EXPORT QMediaEncoderSettings : public QMediaFormat
{
public:
- QVideoEncoderSettings();
- QVideoEncoderSettings(const QVideoEncoderSettings& other);
-
- ~QVideoEncoderSettings();
-
- QVideoEncoderSettings& operator=(const QVideoEncoderSettings &other);
- bool operator==(const QVideoEncoderSettings &other) const;
- bool operator!=(const QVideoEncoderSettings &other) const;
-
- bool isNull() const;
+ QMediaEncoderSettings();
+ QMediaEncoderSettings(FileFormat format);
+ QMediaEncoderSettings(const QMediaEncoderSettings& other);
+ QMediaEncoderSettings& operator=(const QMediaEncoderSettings &other);
+ ~QMediaEncoderSettings();
QMultimedia::EncodingMode encodingMode() const;
void setEncodingMode(QMultimedia::EncodingMode);
- QString codec() const;
- void setCodec(const QString &);
-
- QSize resolution() const;
- void setResolution(const QSize &);
- void setResolution(int width, int height);
-
- qreal frameRate() const;
- void setFrameRate(qreal rate);
-
- int bitRate() const;
- void setBitRate(int bitrate);
-
QMultimedia::EncodingQuality quality() const;
void setQuality(QMultimedia::EncodingQuality quality);
- QVariant encodingOption(const QString &option) const;
- QVariantMap encodingOptions() const;
- void setEncodingOption(const QString &option, const QVariant &value);
- void setEncodingOptions(const QVariantMap &options);
-
-private:
- QSharedDataPointer<QVideoEncoderSettingsPrivate> d;
-};
-
-class QMediaFormat;
-class Q_MULTIMEDIA_EXPORT QMediaEncoderSettings
-{
-
- QMediaEncoderSettings();
-
- QMediaFormat format();
- void setMediaFormat(const QMediaFormat &);
-
- QMultimedia::EncodingMode encodingMode() const;
- void setEncodingMode(QMultimedia::EncodingMode);
+ enum ResolveMode {
+ AudioOnly,
+ AudioAndVideo
+ };
- QMultimedia::EncodingQuality quality() const;
- void setQuality(QMultimedia::EncodingQuality quality);
+ void resolveFormat(ResolveMode mode = AudioAndVideo);
QSize videoResolution() const;
void setVideoResolution(const QSize &);
- void setVideoResolution(int width, int height);
+ void setVideoResolution(int width, int height) { setVideoResolution(QSize(width, height)); }
qreal videoFrameRate() const;
void setVideoFrameRate(qreal rate);
@@ -166,6 +88,12 @@ class Q_MULTIMEDIA_EXPORT QMediaEncoderSettings
int audioChannelCount() const;
void setAudioChannelCount(int channels);
+
+ int audioSampleRate() const;
+ void setAudioSampleRate(int rate);
+
+private:
+ QSharedDataPointer<QMediaEncoderSettingsPrivate> d;
};
class QImageEncoderSettingsPrivate;
@@ -204,9 +132,4 @@ private:
QT_END_NAMESPACE
-Q_DECLARE_METATYPE(QAudioEncoderSettings)
-Q_DECLARE_METATYPE(QVideoEncoderSettings)
-Q_DECLARE_METATYPE(QImageEncoderSettings)
-
-
#endif
diff --git a/src/multimedia/recording/qmediarecorder.cpp b/src/multimedia/recording/qmediarecorder.cpp
index e9e5b4660..d2ac3d1a0 100644
--- a/src/multimedia/recording/qmediarecorder.cpp
+++ b/src/multimedia/recording/qmediarecorder.cpp
@@ -44,10 +44,7 @@
#include "qmediasource_p.h"
#include <qmediaservice.h>
#include <qmetadatawritercontrol.h>
-#include <qaudioencodersettingscontrol.h>
-#include <qvideoencodersettingscontrol.h>
#include <qaudiodeviceinfo.h>
-#include <qmediacontainercontrol.h>
#include <qcamera.h>
#include <qcameracontrol.h>
#include <private/qmediaplatformintegration_p.h>
@@ -121,9 +118,6 @@ void QMediaRecorderPrivate::_q_serviceDestroyed()
{
mediaSource = nullptr;
control = nullptr;
- formatControl = nullptr;
- audioControl = nullptr;
- videoControl = nullptr;
metaDataControl = nullptr;
settingsChanged = true;
}
@@ -298,12 +292,6 @@ bool QMediaRecorder::setMediaSource(QMediaSource *object)
if (d->control)
service->releaseControl(d->control);
- if (d->formatControl)
- service->releaseControl(d->formatControl);
- if (d->audioControl)
- service->releaseControl(d->audioControl);
- if (d->videoControl)
- service->releaseControl(d->videoControl);
if (d->metaDataControl) {
disconnect(d->metaDataControl, SIGNAL(metaDataChanged()),
this, SIGNAL(metaDataChanged()));
@@ -320,9 +308,6 @@ bool QMediaRecorder::setMediaSource(QMediaSource *object)
}
d->control = nullptr;
- d->formatControl = nullptr;
- d->audioControl = nullptr;
- d->videoControl = nullptr;
d->metaDataControl = nullptr;
d->mediaSource = object;
@@ -337,10 +322,6 @@ bool QMediaRecorder::setMediaSource(QMediaSource *object)
d->control = qobject_cast<QMediaRecorderControl*>(service->requestControl(QMediaRecorderControl_iid));
if (d->control) {
- d->formatControl = qobject_cast<QMediaContainerControl *>(service->requestControl(QMediaContainerControl_iid));
- d->audioControl = qobject_cast<QAudioEncoderSettingsControl *>(service->requestControl(QAudioEncoderSettingsControl_iid));
- d->videoControl = qobject_cast<QVideoEncoderSettingsControl *>(service->requestControl(QVideoEncoderSettingsControl_iid));
-
QObject *control = service->requestControl(QMetaDataWriterControl_iid);
if (control) {
d->metaDataControl = qobject_cast<QMetaDataWriterControl *>(control);
@@ -552,311 +533,42 @@ qreal QMediaRecorder::volume() const
return d_func()->control ? d_func()->control->volume() : 1.0;
}
-
-void QMediaRecorder::setVolume(qreal volume)
-{
- Q_D(QMediaRecorder);
-
- if (d->control) {
- volume = qMax(qreal(0.0), volume);
- d->control->setVolume(volume);
- }
-}
-
-/*!
- Returns a list of supported container formats.
-*/
-QStringList QMediaRecorder::supportedContainers() const
-{
- return d_func()->formatControl ?
- d_func()->formatControl->supportedContainers() : QStringList();
-}
-
-/*!
- Returns a description of a container \a format.
-*/
-QString QMediaRecorder::containerDescription(const QString &format) const
-{
- return d_func()->formatControl ?
- d_func()->formatControl->containerDescription(format) : QString();
-}
-
-/*!
- Returns the selected container format.
-*/
-
-QString QMediaRecorder::containerFormat() const
-{
- return d_func()->formatControl ?
- d_func()->formatControl->containerFormat() : QString();
-}
-
-/*!
- Returns a list of supported audio codecs.
-*/
-QStringList QMediaRecorder::supportedAudioCodecs() const
-{
- return d_func()->audioControl ?
- d_func()->audioControl->supportedAudioCodecs() : QStringList();
-}
-
-/*!
- Returns a description of an audio \a codec.
-*/
-QString QMediaRecorder::audioCodecDescription(const QString &codec) const
-{
- return d_func()->audioControl ?
- d_func()->audioControl->codecDescription(codec) : QString();
-}
-
-/*!
- Returns a list of supported audio sample rates.
-
- If non null audio \a settings parameter is passed, the returned list is
- reduced to sample rates supported with partial settings applied.
-
- This can be used to query the list of sample rates, supported by specific
- audio codec.
-
- If the encoder supports arbitrary sample rates within the supported rates
- range, *\a continuous is set to true, otherwise *\a continuous is set to
- false.
-*/
-
-QList<int> QMediaRecorder::supportedAudioSampleRates(const QAudioEncoderSettings &settings, bool *continuous) const
-{
- if (continuous)
- *continuous = false;
-
- return d_func()->audioControl ?
- d_func()->audioControl->supportedSampleRates(settings, continuous) : QList<int>();
-}
-
-/*!
- Returns a list of resolutions video can be encoded at.
-
- If non null video \a settings parameter is passed, the returned list is
- reduced to resolution supported with partial settings like video codec or
- framerate applied.
-
- If the encoder supports arbitrary resolutions within the supported range,
- *\a continuous is set to true, otherwise *\a continuous is set to false.
-
- \sa QVideoEncoderSettings::resolution()
-*/
-QList<QSize> QMediaRecorder::supportedResolutions(const QVideoEncoderSettings &, bool *continuous) const
-{
- if (continuous)
- *continuous = true;
-
- QCamera *camera = qobject_cast<QCamera *>(mediaSource());
- if (!camera)
- return {};
-
- QCameraInfo info = camera->cameraInfo();
- const auto formats = info.videoFormats();
- QList<QSize> resolutions;
- for (const auto &f : formats)
- resolutions.append(f.resolution());
- return resolutions;
-}
-
-/*!
- Returns a list of frame rates video can be encoded at.
-
- If non null video \a settings parameter is passed, the returned list is
- reduced to frame rates supported with partial settings like video codec or
- resolution applied.
-
- If the encoder supports arbitrary frame rates within the supported range,
- *\a continuous is set to true, otherwise *\a continuous is set to false.
-
- \sa QVideoEncoderSettings::frameRate()
-*/
-QList<qreal> QMediaRecorder::supportedFrameRates(const QVideoEncoderSettings &settings, bool *continuous) const
-{
- if (continuous)
- *continuous = true;
-
- QSize resolution = settings.resolution();
-
- QCamera *camera = qobject_cast<QCamera *>(mediaSource());
- if (!camera)
- return {};
-
- QCameraInfo info = camera->cameraInfo();
- const auto formats = info.videoFormats();
- qreal min = 0.;
- qreal max = 1.e6;
- for (const auto &f : formats) {
- QSize formatResolution = f.resolution();
- if (formatResolution.width() >= resolution.width() || formatResolution.height() >= resolution.height()) {
- // we can downsample, framerates are usable
- min = qMin(min, f.minFrameRate());
- max = qMax(max, f.maxFrameRate());
- }
- }
-
- if (min == 0.)
- return {};
-
- return QList<qreal>() << min << max;
-}
-
-/*!
- Returns a list of supported video codecs.
-*/
-QStringList QMediaRecorder::supportedVideoCodecs() const
-{
- return d_func()->videoControl ?
- d_func()->videoControl->supportedVideoCodecs() : QStringList();
-}
-
-/*!
- Returns a description of a video \a codec.
-
- \sa setEncodingSettings()
-*/
-QString QMediaRecorder::videoCodecDescription(const QString &codec) const
-{
- return d_func()->videoControl ?
- d_func()->videoControl->videoCodecDescription(codec) : QString();
-}
-
/*!
- Returns the audio encoder settings being used.
+ Sets the encoder settings to \a settings.
- \sa setEncodingSettings()
+ \sa QMediaEncoderSettings
*/
-
-QAudioEncoderSettings QMediaRecorder::audioSettings() const
-{
- return d_func()->audioControl ?
- d_func()->audioControl->audioSettings() : QAudioEncoderSettings();
-}
-
-/*!
- Returns the video encoder settings being used.
-
- \sa setEncodingSettings()
-*/
-
-QVideoEncoderSettings QMediaRecorder::videoSettings() const
-{
- return d_func()->videoControl ?
- d_func()->videoControl->videoSettings() : QVideoEncoderSettings();
-}
-
-/*!
- Sets the audio encoder \a settings.
-
- If some parameters are not specified, or null settings are passed, the
- encoder will choose default encoding parameters, depending on media
- source properties.
-
- It's only possible to change settings when the encoder is in the
- QMediaEncoder::StoppedState state.
-
- \sa audioSettings(), videoSettings(), containerFormat()
-*/
-
-void QMediaRecorder::setAudioSettings(const QAudioEncoderSettings &settings)
+void QMediaRecorder::setEncoderSettings(const QMediaEncoderSettings &settings)
{
Q_D(QMediaRecorder);
- //restart camera if it can't apply new settings in the Active state
- d->restartCamera();
-
- if (d->audioControl) {
- d->audioControl->setAudioSettings(settings);
- d->applySettingsLater();
- }
+ d->encoderSettings = settings;
+ d->control->setEncoderSettings(settings);
+ d->applySettingsLater();
}
/*!
- Sets the video encoder \a settings.
-
- If some parameters are not specified, or null settings are passed, the
- encoder will choose default encoding parameters, depending on media
- source properties.
+ Returns the current encoder settings.
- It's only possible to change settings when the encoder is in the
- QMediaEncoder::StoppedState state.
-
- \sa audioSettings(), videoSettings(), containerFormat()
+ \sa QMediaEncoderSettings
*/
-
-void QMediaRecorder::setVideoSettings(const QVideoEncoderSettings &settings)
+QMediaEncoderSettings QMediaRecorder::encoderSettings() const
{
- Q_D(QMediaRecorder);
-
- d->restartCamera();
-
- if (d->videoControl) {
- d->videoControl->setVideoSettings(settings);
- d->applySettingsLater();
- }
+ return d_func()->encoderSettings;
}
-/*!
- Sets the media \a container format.
-
- If the container format is not specified, the
- encoder will choose format, depending on media source properties
- and encoding settings selected.
-
- It's only possible to change settings when the encoder is in the
- QMediaEncoder::StoppedState state.
- \sa audioSettings(), videoSettings(), containerFormat()
-*/
-
-void QMediaRecorder::setContainerFormat(const QString &container)
+void QMediaRecorder::setVolume(qreal volume)
{
Q_D(QMediaRecorder);
- d->restartCamera();
-
- if (d->formatControl) {
- d->formatControl->setContainerFormat(container);
- d->applySettingsLater();
+ if (d->control) {
+ volume = qMax(qreal(0.0), volume);
+ d->control->setVolume(volume);
}
}
/*!
- Sets the \a audio and \a video encoder settings and \a container format.
-
- If some parameters are not specified, or null settings are passed, the
- encoder will choose default encoding parameters, depending on media
- source properties.
-
- It's only possible to change settings when the encoder is in the
- QMediaEncoder::StoppedState state.
-
- \sa audioSettings(), videoSettings(), containerFormat()
-*/
-
-void QMediaRecorder::setEncodingSettings(const QAudioEncoderSettings &audio,
- const QVideoEncoderSettings &video,
- const QString &container)
-{
- Q_D(QMediaRecorder);
-
- d->restartCamera();
-
- if (d->audioControl)
- d->audioControl->setAudioSettings(audio);
-
- if (d->videoControl)
- d->videoControl->setVideoSettings(video);
-
- if (d->formatControl)
- d->formatControl->setContainerFormat(container);
-
- d->applySettingsLater();
-}
-
-/*!
Start recording.
While the recorder state is changed immediately to QMediaRecorder::RecordingState,
@@ -1108,7 +820,7 @@ QStringList QMediaRecorder::availableMetaData() const
*/
/*!
- Returns the active audio input name.
+ Returns the active audio input.
*/
QAudioDeviceInfo QMediaRecorder::audioInput() const
@@ -1119,6 +831,17 @@ QAudioDeviceInfo QMediaRecorder::audioInput() const
}
/*!
+ Returns information about the active video input.
+*/
+QCameraInfo QMediaRecorder::videoInput() const
+{
+ Q_D(const QMediaRecorder);
+
+ auto *camera = qobject_cast<QCamera *>(d->mediaSource);
+ return camera ? camera->cameraInfo() : QCameraInfo();
+}
+
+/*!
Set the active audio input to \a device.
*/
diff --git a/src/multimedia/recording/qmediarecorder.h b/src/multimedia/recording/qmediarecorder.h
index 5c633c2e2..65499398c 100644
--- a/src/multimedia/recording/qmediarecorder.h
+++ b/src/multimedia/recording/qmediarecorder.h
@@ -53,6 +53,7 @@ QT_BEGIN_NAMESPACE
class QUrl;
class QSize;
class QAudioFormat;
+class QCameraInfo;
QT_END_NAMESPACE
QT_BEGIN_NAMESPACE
@@ -139,35 +140,8 @@ public:
bool isMuted() const;
qreal volume() const;
- QStringList supportedContainers() const;
- QString containerDescription(const QString &format) const;
-
- QStringList supportedAudioCodecs() const;
- QString audioCodecDescription(const QString &codecName) const;
-
- QList<int> supportedAudioSampleRates(const QAudioEncoderSettings &settings = QAudioEncoderSettings(),
- bool *continuous = nullptr) const;
-
- QStringList supportedVideoCodecs() const;
- QString videoCodecDescription(const QString &codecName) const;
-
- QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings = QVideoEncoderSettings(),
- bool *continuous = nullptr) const;
-
- QList<qreal> supportedFrameRates(const QVideoEncoderSettings &settings = QVideoEncoderSettings(),
- bool *continuous = nullptr) const;
-
- QAudioEncoderSettings audioSettings() const;
- QVideoEncoderSettings videoSettings() const;
- QString containerFormat() const;
-
- void setAudioSettings(const QAudioEncoderSettings &audioSettings);
- void setVideoSettings(const QVideoEncoderSettings &videoSettings);
- void setContainerFormat(const QString &container);
-
- void setEncodingSettings(const QAudioEncoderSettings &audioSettings,
- const QVideoEncoderSettings &videoSettings = QVideoEncoderSettings(),
- const QString &containerMimeType = QString());
+ void setEncoderSettings(const QMediaEncoderSettings &);
+ QMediaEncoderSettings encoderSettings() const;
bool isMetaDataAvailable() const;
bool isMetaDataWritable() const;
@@ -177,6 +151,7 @@ public:
QStringList availableMetaData() const;
QAudioDeviceInfo audioInput() const;
+ QCameraInfo videoInput() const;
public Q_SLOTS:
void record();
diff --git a/src/multimedia/recording/qmediarecorder_p.h b/src/multimedia/recording/qmediarecorder_p.h
index ecfc030b1..6a7ae4039 100644
--- a/src/multimedia/recording/qmediarecorder_p.h
+++ b/src/multimedia/recording/qmediarecorder_p.h
@@ -77,9 +77,6 @@ public:
QPointer<QMediaSource> mediaSource;
QMediaRecorderControl *control = nullptr;
- QMediaContainerControl *formatControl = nullptr;
- QAudioEncoderSettingsControl *audioControl = nullptr;
- QVideoEncoderSettingsControl *videoControl = nullptr;
QMetaDataWriterControl *metaDataControl = nullptr;
bool settingsChanged = false;
@@ -90,6 +87,7 @@ public:
QMediaRecorder::Error error = QMediaRecorder::NoError;
QString errorString;
QUrl actualLocation;
+ QMediaEncoderSettings encoderSettings;
void _q_stateChanged(QMediaRecorder::State state);
void _q_error(int error, const QString &errorString);
diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
index 9b6bf700f..ccd799ef6 100644
--- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
+++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
@@ -546,9 +546,9 @@ void tst_QCameraBackend::testVideoRecording()
camera->setCaptureMode(QCamera::CaptureVideo);
- QVideoEncoderSettings videoSettings;
- videoSettings.setResolution(320, 240);
- recorder.setVideoSettings(videoSettings);
+ QMediaEncoderSettings videoSettings;
+ videoSettings.setVideoResolution(320, 240);
+ recorder.setEncoderSettings(videoSettings);
QCOMPARE(recorder.status(), QMediaRecorder::UnloadedStatus);
diff --git a/tests/auto/unit/mockbackend/CMakeLists.txt b/tests/auto/unit/mockbackend/CMakeLists.txt
index e1aa32433..8c152cecf 100644
--- a/tests/auto/unit/mockbackend/CMakeLists.txt
+++ b/tests/auto/unit/mockbackend/CMakeLists.txt
@@ -15,14 +15,12 @@ target_link_libraries(QtMultimediaMockBackend INTERFACE
target_sources(QtMultimediaMockBackend INTERFACE
mockaudiodecodercontrol.h
mockaudiodecoderservice.h
- mockaudioencodercontrol.h
mockcameracontrol.h
mockcameraexposurecontrol.h
mockcamerafocuscontrol.h
mockcameraimagecapturecontrol.h
mockcameraimageprocessingcontrol.h
mockimageencodercontrol.h
- mockmediacontainercontrol.h
mockmediaplayercontrol.h
mockmediaplayerservice.h
mockmediarecordercontrol.h
@@ -32,7 +30,6 @@ target_sources(QtMultimediaMockBackend INTERFACE
mockmediastreamscontrol.h
mockmetadatareadercontrol.h
mockmetadatawritercontrol.h
- mockvideoencodercontrol.h
mockvideorenderercontrol.h
mockvideosurface.h
mockvideowindowcontrol.h
diff --git a/tests/auto/unit/mockbackend/capture.pri b/tests/auto/unit/mockbackend/capture.pri
index 549ac7978..77e180c00 100644
--- a/tests/auto/unit/mockbackend/capture.pri
+++ b/tests/auto/unit/mockbackend/capture.pri
@@ -1,14 +1,11 @@
HEADERS *= \
- $$PWD/mockaudioencodercontrol.h \
$$PWD/mockcameracontrol.h \
$$PWD/mockcameraexposurecontrol.h \
$$PWD/mockcamerafocuscontrol.h \
$$PWD/mockcameraimagecapturecontrol.h \
$$PWD/mockcameraimageprocessingcontrol.h \
$$PWD/mockimageencodercontrol.h \
- $$PWD/mockmediacontainercontrol.h \
$$PWD/mockmediarecordercontrol.h \
$$PWD/mockmediarecorderservice.h \
$$PWD/mockmetadatawritercontrol.h \
$$PWD/mockvideodeviceselectorcontrol.h \
- $$PWD/mockvideoencodercontrol.h \
diff --git a/tests/auto/unit/mockbackend/mockaudioencodercontrol.h b/tests/auto/unit/mockbackend/mockaudioencodercontrol.h
deleted file mode 100644
index af8f3d0f8..000000000
--- a/tests/auto/unit/mockbackend/mockaudioencodercontrol.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef MOCKAUDIOENCODERCONTROL_H
-#define MOCKAUDIOENCODERCONTROL_H
-
-#include "qaudioencodersettingscontrol.h"
-
-class MockAudioEncoderControl : public QAudioEncoderSettingsControl
-{
- Q_OBJECT
-public:
- MockAudioEncoderControl(QObject *parent):
- QAudioEncoderSettingsControl(parent)
- {
- m_codecs << "audio/x-raw" << "audio/mpeg";
- m_descriptions << "Pulse Code Modulation" << "mp3 format";
- m_audioSettings.setCodec("audio/x-raw");
- m_audioSettings.setBitRate(128*1024);
- m_audioSettings.setSampleRate(8000);
- m_freqs << 8000 << 11025 << 22050 << 44100;
- }
-
- ~MockAudioEncoderControl() {}
-
- QAudioEncoderSettings audioSettings() const
- {
- return m_audioSettings;
- }
-
- void setAudioSettings(const QAudioEncoderSettings &settings)
- {
- m_audioSettings = settings;
- }
-
- QList<int> supportedChannelCounts(const QAudioEncoderSettings & = QAudioEncoderSettings()) const
- {
- QList<int> list; list << 1 << 2; return list;
- }
-
- QList<int> supportedSampleRates(const QAudioEncoderSettings & = QAudioEncoderSettings(), bool *continuous = 0) const
- {
- if (continuous)
- *continuous = false;
-
- return m_freqs;
- }
-
- QStringList supportedAudioCodecs() const
- {
- return m_codecs;
- }
-
- QString codecDescription(const QString &codecName) const
- {
- return m_descriptions.value(m_codecs.indexOf(codecName));
- }
-
-private:
- QAudioEncoderSettings m_audioSettings;
-
- QStringList m_codecs;
- QStringList m_descriptions;
-
- QList<int> m_freqs;
-
-};
-
-#endif // MOCKAUDIOENCODERCONTROL_H
diff --git a/tests/auto/unit/mockbackend/mockmediacontainercontrol.h b/tests/auto/unit/mockbackend/mockmediacontainercontrol.h
deleted file mode 100644
index 08562a469..000000000
--- a/tests/auto/unit/mockbackend/mockmediacontainercontrol.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef MOCKMEDIACONTAINERCONTROL_H
-#define MOCKMEDIACONTAINERCONTROL_H
-
-#include <QObject>
-#include "qmediacontainercontrol.h"
-#include <QMap>
-#include <QString>
-#include <QStringList>
-
-QT_USE_NAMESPACE
-class MockMediaContainerControl : public QMediaContainerControl
-{
- Q_OBJECT
-public:
- MockMediaContainerControl(QObject *parent):
- QMediaContainerControl(parent)
- {
- m_supportedContainers.append("wav");
- m_supportedContainers.append("mp3");
- m_supportedContainers.append("mov");
-
- m_descriptions.insert("wav", "WAV format");
- m_descriptions.insert("mp3", "MP3 format");
- m_descriptions.insert("mov", "MOV format");
- }
-
- virtual ~MockMediaContainerControl() {};
-
- QStringList supportedContainers() const
- {
- return m_supportedContainers;
- }
-
- QString containerFormat() const
- {
- return m_format;
- }
-
- void setContainerFormat(const QString &formatMimeType)
- {
- if (m_supportedContainers.contains(formatMimeType))
- m_format = formatMimeType;
- }
-
- QString containerDescription(const QString &formatMimeType) const
- {
- return m_descriptions.value(formatMimeType);
- }
-
-private:
- QStringList m_supportedContainers;
- QMap<QString, QString> m_descriptions;
- QString m_format;
-};
-
-#endif // MOCKMEDIACONTAINERCONTROL_H
diff --git a/tests/auto/unit/mockbackend/mockmediarecordercontrol.h b/tests/auto/unit/mockbackend/mockmediarecordercontrol.h
index 4c7b4d165..7c27861f7 100644
--- a/tests/auto/unit/mockbackend/mockmediarecordercontrol.h
+++ b/tests/auto/unit/mockbackend/mockmediarecordercontrol.h
@@ -101,6 +101,8 @@ public:
return true;
}
+ void setEncoderSettings(const QMediaEncoderSettings &) {}
+
using QMediaRecorderControl::error;
diff --git a/tests/auto/unit/mockbackend/mockmediarecorderservice.h b/tests/auto/unit/mockbackend/mockmediarecorderservice.h
index 38d1c387a..803b7bab0 100644
--- a/tests/auto/unit/mockbackend/mockmediarecorderservice.h
+++ b/tests/auto/unit/mockbackend/mockmediarecorderservice.h
@@ -31,10 +31,7 @@
#include "qmediaservice.h"
-#include "mockaudioencodercontrol.h"
#include "mockmediarecordercontrol.h"
-#include "mockvideoencodercontrol.h"
-#include "mockmediacontainercontrol.h"
#include "mockmetadatawritercontrol.h"
#include "mockcamerafocuscontrol.h"
#include "mockcameraimageprocessingcontrol.h"
@@ -54,9 +51,6 @@ public:
: hasControls(true)
{
mockControl = new MockMediaRecorderControl(this);
- mockAudioEncoderControl = new MockAudioEncoderControl(this);
- mockFormatControl = new MockMediaContainerControl(this);
- mockVideoEncoderControl = new MockVideoEncoderControl(this);
mockMetaDataControl = new MockMetaDataWriterControl(this);
mockCameraControl = new MockCameraControl(this);
mockExposureControl = new MockCameraExposureControl(this);
@@ -75,14 +69,8 @@ public:
if (!hasControls)
return nullptr;
- if (qstrcmp(name,QAudioEncoderSettingsControl_iid) == 0)
- return mockAudioEncoderControl;
if (qstrcmp(name,QMediaRecorderControl_iid) == 0)
return mockControl;
- if (qstrcmp(name,QMediaContainerControl_iid) == 0)
- return mockFormatControl;
- if (qstrcmp(name,QVideoEncoderSettingsControl_iid) == 0)
- return mockVideoEncoderControl;
if (qstrcmp(name, QMetaDataWriterControl_iid) == 0)
return mockMetaDataControl;
@@ -141,9 +129,6 @@ public:
int windowRef;
MockMediaRecorderControl *mockControl;
- QAudioEncoderSettingsControl *mockAudioEncoderControl;
- QMediaContainerControl *mockFormatControl;
- QVideoEncoderSettingsControl *mockVideoEncoderControl;
MockMetaDataWriterControl *mockMetaDataControl;
bool hasControls;
diff --git a/tests/auto/unit/mockbackend/mockvideoencodercontrol.h b/tests/auto/unit/mockbackend/mockvideoencodercontrol.h
deleted file mode 100644
index f98eed3df..000000000
--- a/tests/auto/unit/mockbackend/mockvideoencodercontrol.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef MOCKVIDEOENCODERCONTROL_H
-#define MOCKVIDEOENCODERCONTROL_H
-
-#include "qvideoencodersettingscontrol.h"
-
-class MockVideoEncoderControl : public QVideoEncoderSettingsControl
-{
- Q_OBJECT
-public:
- MockVideoEncoderControl(QObject *parent):
- QVideoEncoderSettingsControl(parent)
- {
- m_videoCodecs << "video/3gpp" << "video/H264";
- m_sizes << QSize(320,240) << QSize(640,480);
- m_framerates << 30 << 15 << 1;
- }
- ~MockVideoEncoderControl() {}
-
- QVideoEncoderSettings videoSettings() const { return m_videoSettings; }
- void setVideoSettings(const QVideoEncoderSettings &settings) { m_videoSettings = settings; };
-
- QStringList supportedVideoCodecs() const { return m_videoCodecs; }
- QString videoCodecDescription(const QString &codecName) const { return codecName; }
-
-private:
- QVideoEncoderSettings m_videoSettings;
-
- QStringList m_videoCodecs;
- QList<QSize> m_sizes;
- QList<qreal> m_framerates;
-};
-
-#endif // MOCKVIDEOENCODERCONTROL_H
diff --git a/tests/auto/unit/multimedia/CMakeLists.txt b/tests/auto/unit/multimedia/CMakeLists.txt
index bd3d0d236..37ebc2b86 100644
--- a/tests/auto/unit/multimedia/CMakeLists.txt
+++ b/tests/auto/unit/multimedia/CMakeLists.txt
@@ -9,7 +9,6 @@ add_subdirectory(qcamera)
add_subdirectory(qcamerainfo)
add_subdirectory(qcameraimagecapture)
add_subdirectory(qmediasink)
-add_subdirectory(qmediacontainercontrol)
add_subdirectory(qmediasource)
add_subdirectory(qmediaplayer)
add_subdirectory(qmediaplaylist)
@@ -19,7 +18,6 @@ add_subdirectory(qmediaservice)
add_subdirectory(qmediatimerange)
add_subdirectory(qmetadatareadercontrol)
add_subdirectory(qmetadatawritercontrol)
-add_subdirectory(qvideoencodersettingscontrol)
add_subdirectory(qvideoframe)
add_subdirectory(qvideosurfaceformat)
add_subdirectory(qaudiobuffer)
diff --git a/tests/auto/unit/multimedia/multimedia.pro b/tests/auto/unit/multimedia/multimedia.pro
index 1e2c09c79..d1be5e850 100644
--- a/tests/auto/unit/multimedia/multimedia.pro
+++ b/tests/auto/unit/multimedia/multimedia.pro
@@ -10,7 +10,6 @@ SUBDIRS += \
qcamerainfo \
qcameraimagecapture \
qmediasink \
- qmediacontainercontrol \
qmediasource \
qmediaplayer \
qmediaplaylist \
@@ -20,7 +19,6 @@ SUBDIRS += \
qmediatimerange \
qmetadatareadercontrol \
qmetadatawritercontrol \
- qvideoencodersettingscontrol \
qvideoframe \
qvideosurfaceformat \
# qwavedecoder \
diff --git a/tests/auto/unit/multimedia/qaudiorecorder/tst_qaudiorecorder.cpp b/tests/auto/unit/multimedia/qaudiorecorder/tst_qaudiorecorder.cpp
index 9d8629baf..599d87dca 100644
--- a/tests/auto/unit/multimedia/qaudiorecorder/tst_qaudiorecorder.cpp
+++ b/tests/auto/unit/multimedia/qaudiorecorder/tst_qaudiorecorder.cpp
@@ -32,7 +32,6 @@
#include <qaudioformat.h>
#include <qmediarecorder.h>
-#include <qaudioencodersettingscontrol.h>
#include <qmediarecordercontrol.h>
#include <qaudiodeviceinfo.h>
#include <qaudioinput.h>
diff --git a/tests/auto/unit/multimedia/qmediacontainercontrol/CMakeLists.txt b/tests/auto/unit/multimedia/qmediacontainercontrol/CMakeLists.txt
deleted file mode 100644
index c9d9c7bbb..000000000
--- a/tests/auto/unit/multimedia/qmediacontainercontrol/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-# Generated from qmediacontainercontrol.pro.
-
-#####################################################################
-## tst_qmediacontainercontrol Test:
-#####################################################################
-
-qt_add_test(tst_qmediacontainercontrol
- SOURCES
- tst_qmediacontainercontrol.cpp
- INCLUDE_DIRECTORIES
- ../../mockbackend
- PUBLIC_LIBRARIES
- # Remove: L${CMAKE_CURRENT_SOURCE_DIR}
- Qt::Gui
- Qt::MultimediaPrivate
- QtMultimediaMockBackend
-)
diff --git a/tests/auto/unit/multimedia/qmediacontainercontrol/qmediacontainercontrol.pro b/tests/auto/unit/multimedia/qmediacontainercontrol/qmediacontainercontrol.pro
deleted file mode 100644
index 7158bb5dc..000000000
--- a/tests/auto/unit/multimedia/qmediacontainercontrol/qmediacontainercontrol.pro
+++ /dev/null
@@ -1,9 +0,0 @@
-CONFIG += testcase
-TARGET = tst_qmediacontainercontrol
-
-QT += multimedia-private testlib
-
-SOURCES += tst_qmediacontainercontrol.cpp
-
-include (../../mockbackend/mockbackend.pri)
-
diff --git a/tests/auto/unit/multimedia/qmediacontainercontrol/tst_qmediacontainercontrol.cpp b/tests/auto/unit/multimedia/qmediacontainercontrol/tst_qmediacontainercontrol.cpp
deleted file mode 100644
index 616f8e3e3..000000000
--- a/tests/auto/unit/multimedia/qmediacontainercontrol/tst_qmediacontainercontrol.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//TESTED_COMPONENT=src/multimedia
-
-#include <QtTest/QtTest>
-#include "qmediacontainercontrol.h"
-#include "qmediarecorder.h"
-
-#include "mockmediacontainercontrol.h"
-
-//MaemoAPI-
-class tst_QMediaContainerControl :public QObject
-{
- Q_OBJECT
-
-private slots:
- //to test the constructor
- void tst_mediacontainercontrol()
- {
-
- QObject obj;
- MockMediaContainerControl control(&obj);
- QStringList strlist=control.supportedContainers();
- QStringList strlist1;
- strlist1 << "wav" << "mp3" << "mov";
- QVERIFY(strlist[0]==strlist1[0]); //checking with "wav" mime type
- QVERIFY(strlist[1]==strlist1[1]); //checking with "mp3" mime type
- QVERIFY(strlist[2]==strlist1[2]); //checking with "mov" mime type
-
- control.setContainerFormat("wav");
- const QString str("wav");
- QVERIFY2(control.containerFormat() == str,"Failed");
-
- const QString str1("WAV format");
- QVERIFY2(control.containerDescription("wav") == str1,"FAILED");
- }
-};
-
-QTEST_MAIN(tst_QMediaContainerControl);
-#include "tst_qmediacontainercontrol.moc"
diff --git a/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp b/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp
index 2fe2e6be4..baf1dd9a4 100644
--- a/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp
+++ b/tests/auto/unit/multimedia/qmediarecorder/tst_qmediarecorder.cpp
@@ -37,9 +37,6 @@
#include <qmediarecordercontrol.h>
#include <qmediarecorder.h>
#include <qmetadatawritercontrol.h>
-#include <qaudioencodersettingscontrol.h>
-#include <qmediacontainercontrol.h>
-#include <qvideoencodersettingscontrol.h>
#include <qaudioformat.h>
#include <qmockintegration_p.h>
@@ -67,9 +64,6 @@ private slots:
void testMute();
void testVolume();
void testAudioDeviceControl();
- void testAudioEncodeControl();
- void testMediaFormatsControl();
- void testVideoEncodeControl();
void testEncodingSettings();
void testAudioSettings();
void testVideoSettings();
@@ -142,22 +136,6 @@ void tst_QMediaRecorder::testNullService()
QCOMPARE(recorder.state(), QMediaRecorder::StoppedState);
QCOMPARE(recorder.error(), QMediaRecorder::NoError);
QCOMPARE(recorder.duration(), qint64(0));
- QCOMPARE(recorder.supportedContainers(), QStringList());
- QCOMPARE(recorder.containerDescription(id), QString());
- QCOMPARE(recorder.supportedAudioCodecs(), QStringList());
- QCOMPARE(recorder.audioCodecDescription(id), QString());
- QCOMPARE(recorder.supportedAudioSampleRates(), QList<int>());
- QCOMPARE(recorder.supportedVideoCodecs(), QStringList());
- QCOMPARE(recorder.videoCodecDescription(id), QString());
- bool continuous = true;
- QCOMPARE(recorder.supportedResolutions(QVideoEncoderSettings(), &continuous), QList<QSize>());
- QCOMPARE(continuous, false);
- continuous = true;
- QCOMPARE(recorder.supportedFrameRates(QVideoEncoderSettings(), &continuous), QList<qreal>());
- QCOMPARE(continuous, false);
- QCOMPARE(recorder.audioSettings(), QAudioEncoderSettings());
- QCOMPARE(recorder.videoSettings(), QVideoEncoderSettings());
- QCOMPARE(recorder.containerFormat(), QString());
QVERIFY(!recorder.isMuted());
recorder.setMuted(true);
QVERIFY(!recorder.isMuted());
@@ -165,8 +143,6 @@ void tst_QMediaRecorder::testNullService()
void tst_QMediaRecorder::testNullControls()
{
- const QString id(QLatin1String("application/x-format"));
-
service->hasControls = false;
MockMediaSource object(nullptr, service);
QMediaRecorder recorder(&object);
@@ -175,40 +151,24 @@ void tst_QMediaRecorder::testNullControls()
QCOMPARE(recorder.state(), QMediaRecorder::StoppedState);
QCOMPARE(recorder.error(), QMediaRecorder::NoError);
QCOMPARE(recorder.duration(), qint64(0));
- QCOMPARE(recorder.supportedContainers(), QStringList());
- QCOMPARE(recorder.containerDescription(id), QString());
- QCOMPARE(recorder.supportedAudioCodecs(), QStringList());
- QCOMPARE(recorder.audioCodecDescription(id), QString());
- QCOMPARE(recorder.supportedAudioSampleRates(), QList<int>());
- QCOMPARE(recorder.supportedVideoCodecs(), QStringList());
- QCOMPARE(recorder.videoCodecDescription(id), QString());
- bool continuous = true;
- QCOMPARE(recorder.supportedResolutions(QVideoEncoderSettings(), &continuous), QList<QSize>());
- QCOMPARE(continuous, false);
- continuous = true;
- QCOMPARE(recorder.supportedFrameRates(QVideoEncoderSettings(), &continuous), QList<qreal>());
- QCOMPARE(continuous, false);
- QCOMPARE(recorder.audioSettings(), QAudioEncoderSettings());
- QCOMPARE(recorder.videoSettings(), QVideoEncoderSettings());
- QCOMPARE(recorder.containerFormat(), QString());
recorder.setOutputLocation(QUrl("file://test/save/file.mp4"));
QCOMPARE(recorder.outputLocation(), QUrl());
QCOMPARE(recorder.actualLocation(), QUrl());
- QAudioEncoderSettings audio;
- audio.setCodec(id);
- audio.setQuality(QMultimedia::LowQuality);
+ QMediaEncoderSettings settings;
+ settings.setFormat(QMediaFormat::MPEG4);
+ settings.setAudioCodec(QMediaFormat::AudioCodec::AAC);
+ settings.setQuality(QMultimedia::LowQuality);
- QVideoEncoderSettings video;
- video.setCodec(id);
- video.setResolution(640, 480);
+ settings.setVideoCodec(QMediaFormat::VideoCodec::VP9);
+ settings.setVideoResolution(640, 480);
- recorder.setEncodingSettings(audio, video, id);
+ recorder.setEncoderSettings(settings);
- QCOMPARE(recorder.audioSettings(), QAudioEncoderSettings());
- QCOMPARE(recorder.videoSettings(), QVideoEncoderSettings());
- QCOMPARE(recorder.containerFormat(), QString());
+ QCOMPARE(recorder.encoderSettings().audioCodec(), QMediaFormat::AudioCodec::AAC);
+ QCOMPARE(recorder.encoderSettings().videoCodec(), QMediaFormat::VideoCodec::VP9);
+ QCOMPARE(recorder.encoderSettings().format(), QMediaFormat::MPEG4);
QSignalSpy spy(&recorder, SIGNAL(stateChanged(QMediaRecorder::State)));
@@ -387,422 +347,387 @@ void tst_QMediaRecorder::testAudioDeviceControl()
// QVERIFY(audio->inputDescription("device2").compare("dev2 comment") == 0);
}
-void tst_QMediaRecorder::testAudioEncodeControl()
-{
- QStringList codecs = capture->supportedAudioCodecs();
- QVERIFY(codecs.count() == 2);
- QVERIFY(capture->audioCodecDescription("audio/x-raw") == "Pulse Code Modulation");
- QList<int> rates;
- rates << 8000 << 11025 << 22050 << 44100;
- QCOMPARE(capture->supportedAudioSampleRates(), rates);
-}
-
-void tst_QMediaRecorder::testMediaFormatsControl()
-{
- QCOMPARE(capture->supportedContainers(), QStringList() << "wav" << "mp3" << "mov");
-
- QCOMPARE(capture->containerDescription("wav"), QString("WAV format"));
- QCOMPARE(capture->containerDescription("mp3"), QString("MP3 format"));
- QCOMPARE(capture->containerDescription("ogg"), QString());
-}
-
-void tst_QMediaRecorder::testVideoEncodeControl()
-{
- bool continuous = false;
- QList<QSize> sizes = capture->supportedResolutions(QVideoEncoderSettings(), &continuous);
- QCOMPARE(sizes.count(), 2);
- QCOMPARE(continuous, true);
-
- QList<qreal> rates = capture->supportedFrameRates(QVideoEncoderSettings(), &continuous);
- QCOMPARE(rates.count(), 3);
- QCOMPARE(continuous, false);
-
- QStringList vCodecs = capture->supportedVideoCodecs();
- QVERIFY(vCodecs.count() == 2);
- QCOMPARE(capture->videoCodecDescription("video/3gpp"), QString("video/3gpp"));
-}
-
void tst_QMediaRecorder::testEncodingSettings()
{
- QAudioEncoderSettings audioSettings = capture->audioSettings();
- QCOMPARE(audioSettings.codec(), QString("audio/x-raw"));
- QCOMPARE(audioSettings.bitRate(), 128*1024);
- QCOMPARE(audioSettings.sampleRate(), 8000);
- QCOMPARE(audioSettings.quality(), QMultimedia::NormalQuality);
- QCOMPARE(audioSettings.channelCount(), -1);
-
- QCOMPARE(audioSettings.encodingMode(), QMultimedia::ConstantQualityEncoding);
-
- QVideoEncoderSettings videoSettings = capture->videoSettings();
- QCOMPARE(videoSettings.codec(), QString());
- QCOMPARE(videoSettings.bitRate(), -1);
- QCOMPARE(videoSettings.resolution(), QSize());
- QCOMPARE(videoSettings.frameRate(), 0.0);
- QCOMPARE(videoSettings.quality(), QMultimedia::NormalQuality);
- QCOMPARE(videoSettings.encodingMode(), QMultimedia::ConstantQualityEncoding);
-
- QString format = capture->containerFormat();
- QCOMPARE(format, QString());
-
- audioSettings.setCodec("audio/mpeg");
- audioSettings.setSampleRate(44100);
- audioSettings.setBitRate(256*1024);
- audioSettings.setQuality(QMultimedia::HighQuality);
- audioSettings.setEncodingMode(QMultimedia::AverageBitRateEncoding);
-
- videoSettings.setCodec("video/3gpp");
- videoSettings.setBitRate(800);
- videoSettings.setFrameRate(24*1024);
- videoSettings.setResolution(QSize(800,600));
- videoSettings.setQuality(QMultimedia::HighQuality);
- audioSettings.setEncodingMode(QMultimedia::TwoPassEncoding);
-
- format = QString("mov");
-
- capture->setAudioSettings(audioSettings);
- capture->setVideoSettings(videoSettings);
- capture->setContainerFormat(format);
-
- QCOMPARE(capture->audioSettings(), audioSettings);
- QCOMPARE(capture->videoSettings(), videoSettings);
- QCOMPARE(capture->containerFormat(), format);
+// QAudioEncoderSettings audioSettings = capture->audioSettings();
+// QCOMPARE(audioSettings.codec(), QString("audio/x-raw"));
+// QCOMPARE(audioSettings.bitRate(), 128*1024);
+// QCOMPARE(audioSettings.sampleRate(), 8000);
+// QCOMPARE(audioSettings.quality(), QMultimedia::NormalQuality);
+// QCOMPARE(audioSettings.channelCount(), -1);
+
+// QCOMPARE(audioSettings.encodingMode(), QMultimedia::ConstantQualityEncoding);
+
+// QVideoEncoderSettings videoSettings = capture->videoSettings();
+// QCOMPARE(videoSettings.codec(), QString());
+// QCOMPARE(videoSettings.bitRate(), -1);
+// QCOMPARE(videoSettings.resolution(), QSize());
+// QCOMPARE(videoSettings.frameRate(), 0.0);
+// QCOMPARE(videoSettings.quality(), QMultimedia::NormalQuality);
+// QCOMPARE(videoSettings.encodingMode(), QMultimedia::ConstantQualityEncoding);
+
+// QString format = capture->containerFormat();
+// QCOMPARE(format, QString());
+
+// audioSettings.setCodec("audio/mpeg");
+// audioSettings.setSampleRate(44100);
+// audioSettings.setBitRate(256*1024);
+// audioSettings.setQuality(QMultimedia::HighQuality);
+// audioSettings.setEncodingMode(QMultimedia::AverageBitRateEncoding);
+
+// videoSettings.setCodec("video/3gpp");
+// videoSettings.setBitRate(800);
+// videoSettings.setFrameRate(24*1024);
+// videoSettings.setResolution(QSize(800,600));
+// videoSettings.setQuality(QMultimedia::HighQuality);
+// audioSettings.setEncodingMode(QMultimedia::TwoPassEncoding);
+
+// format = QString("mov");
+
+// capture->setAudioSettings(audioSettings);
+// capture->setVideoSettings(videoSettings);
+// capture->setContainerFormat(format);
+
+// QCOMPARE(capture->audioSettings(), audioSettings);
+// QCOMPARE(capture->videoSettings(), videoSettings);
+// QCOMPARE(capture->containerFormat(), format);
}
void tst_QMediaRecorder::testAudioSettings()
{
- QAudioEncoderSettings settings;
- QVERIFY(settings.isNull());
- QVERIFY(settings == QAudioEncoderSettings());
-
- QCOMPARE(settings.codec(), QString());
- settings.setCodec(QLatin1String("codecName"));
- QCOMPARE(settings.codec(), QLatin1String("codecName"));
- QVERIFY(!settings.isNull());
- QVERIFY(settings != QAudioEncoderSettings());
-
- settings = QAudioEncoderSettings();
- QCOMPARE(settings.bitRate(), -1);
- settings.setBitRate(128000);
- QCOMPARE(settings.bitRate(), 128000);
- QVERIFY(!settings.isNull());
-
- settings = QAudioEncoderSettings();
- QCOMPARE(settings.quality(), QMultimedia::NormalQuality);
- settings.setQuality(QMultimedia::HighQuality);
- QCOMPARE(settings.quality(), QMultimedia::HighQuality);
- QVERIFY(!settings.isNull());
-
- settings = QAudioEncoderSettings();
- QCOMPARE(settings.sampleRate(), -1);
- settings.setSampleRate(44100);
- QCOMPARE(settings.sampleRate(), 44100);
- QVERIFY(!settings.isNull());
-
- settings = QAudioEncoderSettings();
- QCOMPARE(settings.channelCount(), -1);
- settings.setChannelCount(2);
- QCOMPARE(settings.channelCount(), 2);
- QVERIFY(!settings.isNull());
-
- settings = QAudioEncoderSettings();
- settings.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
- QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant(1));
- QVariantMap options;
- options.insert(QLatin1String("encoderOption"), QVariant(1));
- QCOMPARE(settings.encodingOptions(), options);
- options.insert(QLatin1String("encoderOption2"), QVariant(2));
- options.remove(QLatin1String("encoderOption"));
- settings.setEncodingOptions(options);
- QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant());
- QCOMPARE(settings.encodingOption(QLatin1String("encoderOption2")), QVariant(2));
- QVERIFY(!settings.isNull());
- QVERIFY(settings != QAudioEncoderSettings());
-
- settings = QAudioEncoderSettings();
- QVERIFY(settings.isNull());
- QCOMPARE(settings.codec(), QString());
- QCOMPARE(settings.bitRate(), -1);
- QCOMPARE(settings.quality(), QMultimedia::NormalQuality);
- QCOMPARE(settings.sampleRate(), -1);
- QVERIFY(settings.encodingOptions().isEmpty());
-
- {
- QAudioEncoderSettings settings1;
- QAudioEncoderSettings settings2;
- QCOMPARE(settings2, settings1);
-
- settings2 = settings1;
- QCOMPARE(settings2, settings1);
- QVERIFY(settings2.isNull());
-
- settings1.setQuality(QMultimedia::HighQuality);
-
- QVERIFY(settings2.isNull());
- QVERIFY(!settings1.isNull());
- QVERIFY(settings1 != settings2);
- }
-
- {
- QAudioEncoderSettings settings1;
- QAudioEncoderSettings settings2(settings1);
- QCOMPARE(settings2, settings1);
-
- settings2 = settings1;
- QCOMPARE(settings2, settings1);
- QVERIFY(settings2.isNull());
-
- settings1.setQuality(QMultimedia::HighQuality);
-
- QVERIFY(settings2.isNull());
- QVERIFY(!settings1.isNull());
- QVERIFY(settings1 != settings2);
- }
-
- QAudioEncoderSettings settings1;
- settings1.setBitRate(1);
- QAudioEncoderSettings settings2;
- settings2.setBitRate(1);
- QVERIFY(settings1 == settings2);
- settings2.setBitRate(2);
- QVERIFY(settings1 != settings2);
-
- settings1 = QAudioEncoderSettings();
- settings1.setChannelCount(1);
- settings2 = QAudioEncoderSettings();
- settings2.setChannelCount(1);
- QVERIFY(settings1 == settings2);
- settings2.setChannelCount(2);
- QVERIFY(settings1 != settings2);
-
- settings1 = QAudioEncoderSettings();
- settings1.setCodec("codec1");
- settings2 = QAudioEncoderSettings();
- settings2.setCodec("codec1");
- QVERIFY(settings1 == settings2);
- settings2.setCodec("codec2");
- QVERIFY(settings1 != settings2);
-
- settings1 = QAudioEncoderSettings();
- settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- settings2 = QAudioEncoderSettings();
- settings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- QVERIFY(settings1 == settings2);
- settings2.setEncodingMode(QMultimedia::TwoPassEncoding);
- QVERIFY(settings1 != settings2);
-
- settings1 = QAudioEncoderSettings();
- settings1.setQuality(QMultimedia::NormalQuality);
- settings2 = QAudioEncoderSettings();
- settings2.setQuality(QMultimedia::NormalQuality);
- QVERIFY(settings1 == settings2);
- settings2.setQuality(QMultimedia::LowQuality);
- QVERIFY(settings1 != settings2);
-
- settings1 = QAudioEncoderSettings();
- settings1.setSampleRate(1);
- settings2 = QAudioEncoderSettings();
- settings2.setSampleRate(1);
- QVERIFY(settings1 == settings2);
- settings2.setSampleRate(2);
- QVERIFY(settings1 != settings2);
-
- settings1 = QAudioEncoderSettings();
- settings1.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
- settings2 = QAudioEncoderSettings();
- settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
- QVERIFY(settings1 == settings2);
- settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(2));
- QVERIFY(settings1 != settings2);
+// QAudioEncoderSettings settings;
+// QVERIFY(settings.isNull());
+// QVERIFY(settings == QAudioEncoderSettings());
+
+// QCOMPARE(settings.codec(), QString());
+// settings.setCodec(QLatin1String("codecName"));
+// QCOMPARE(settings.codec(), QLatin1String("codecName"));
+// QVERIFY(!settings.isNull());
+// QVERIFY(settings != QAudioEncoderSettings());
+
+// settings = QAudioEncoderSettings();
+// QCOMPARE(settings.bitRate(), -1);
+// settings.setBitRate(128000);
+// QCOMPARE(settings.bitRate(), 128000);
+// QVERIFY(!settings.isNull());
+
+// settings = QAudioEncoderSettings();
+// QCOMPARE(settings.quality(), QMultimedia::NormalQuality);
+// settings.setQuality(QMultimedia::HighQuality);
+// QCOMPARE(settings.quality(), QMultimedia::HighQuality);
+// QVERIFY(!settings.isNull());
+
+// settings = QAudioEncoderSettings();
+// QCOMPARE(settings.sampleRate(), -1);
+// settings.setSampleRate(44100);
+// QCOMPARE(settings.sampleRate(), 44100);
+// QVERIFY(!settings.isNull());
+
+// settings = QAudioEncoderSettings();
+// QCOMPARE(settings.channelCount(), -1);
+// settings.setChannelCount(2);
+// QCOMPARE(settings.channelCount(), 2);
+// QVERIFY(!settings.isNull());
+
+// settings = QAudioEncoderSettings();
+// settings.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
+// QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant(1));
+// QVariantMap options;
+// options.insert(QLatin1String("encoderOption"), QVariant(1));
+// QCOMPARE(settings.encodingOptions(), options);
+// options.insert(QLatin1String("encoderOption2"), QVariant(2));
+// options.remove(QLatin1String("encoderOption"));
+// settings.setEncodingOptions(options);
+// QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant());
+// QCOMPARE(settings.encodingOption(QLatin1String("encoderOption2")), QVariant(2));
+// QVERIFY(!settings.isNull());
+// QVERIFY(settings != QAudioEncoderSettings());
+
+// settings = QAudioEncoderSettings();
+// QVERIFY(settings.isNull());
+// QCOMPARE(settings.codec(), QString());
+// QCOMPARE(settings.bitRate(), -1);
+// QCOMPARE(settings.quality(), QMultimedia::NormalQuality);
+// QCOMPARE(settings.sampleRate(), -1);
+// QVERIFY(settings.encodingOptions().isEmpty());
+
+// {
+// QAudioEncoderSettings settings1;
+// QAudioEncoderSettings settings2;
+// QCOMPARE(settings2, settings1);
+
+// settings2 = settings1;
+// QCOMPARE(settings2, settings1);
+// QVERIFY(settings2.isNull());
+
+// settings1.setQuality(QMultimedia::HighQuality);
+
+// QVERIFY(settings2.isNull());
+// QVERIFY(!settings1.isNull());
+// QVERIFY(settings1 != settings2);
+// }
+
+// {
+// QAudioEncoderSettings settings1;
+// QAudioEncoderSettings settings2(settings1);
+// QCOMPARE(settings2, settings1);
+
+// settings2 = settings1;
+// QCOMPARE(settings2, settings1);
+// QVERIFY(settings2.isNull());
+
+// settings1.setQuality(QMultimedia::HighQuality);
+
+// QVERIFY(settings2.isNull());
+// QVERIFY(!settings1.isNull());
+// QVERIFY(settings1 != settings2);
+// }
+
+// QAudioEncoderSettings settings1;
+// settings1.setBitRate(1);
+// QAudioEncoderSettings settings2;
+// settings2.setBitRate(1);
+// QVERIFY(settings1 == settings2);
+// settings2.setBitRate(2);
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QAudioEncoderSettings();
+// settings1.setChannelCount(1);
+// settings2 = QAudioEncoderSettings();
+// settings2.setChannelCount(1);
+// QVERIFY(settings1 == settings2);
+// settings2.setChannelCount(2);
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QAudioEncoderSettings();
+// settings1.setCodec("codec1");
+// settings2 = QAudioEncoderSettings();
+// settings2.setCodec("codec1");
+// QVERIFY(settings1 == settings2);
+// settings2.setCodec("codec2");
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QAudioEncoderSettings();
+// settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// settings2 = QAudioEncoderSettings();
+// settings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// QVERIFY(settings1 == settings2);
+// settings2.setEncodingMode(QMultimedia::TwoPassEncoding);
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QAudioEncoderSettings();
+// settings1.setQuality(QMultimedia::NormalQuality);
+// settings2 = QAudioEncoderSettings();
+// settings2.setQuality(QMultimedia::NormalQuality);
+// QVERIFY(settings1 == settings2);
+// settings2.setQuality(QMultimedia::LowQuality);
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QAudioEncoderSettings();
+// settings1.setSampleRate(1);
+// settings2 = QAudioEncoderSettings();
+// settings2.setSampleRate(1);
+// QVERIFY(settings1 == settings2);
+// settings2.setSampleRate(2);
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QAudioEncoderSettings();
+// settings1.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
+// settings2 = QAudioEncoderSettings();
+// settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
+// QVERIFY(settings1 == settings2);
+// settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(2));
+// QVERIFY(settings1 != settings2);
}
void tst_QMediaRecorder::testVideoSettings()
{
- QVideoEncoderSettings settings;
- QVERIFY(settings.isNull());
- QVERIFY(settings == QVideoEncoderSettings());
-
- QCOMPARE(settings.codec(), QString());
- settings.setCodec(QLatin1String("codecName"));
- QCOMPARE(settings.codec(), QLatin1String("codecName"));
- QVERIFY(!settings.isNull());
- QVERIFY(settings != QVideoEncoderSettings());
-
- settings = QVideoEncoderSettings();
- QCOMPARE(settings.bitRate(), -1);
- settings.setBitRate(128000);
- QCOMPARE(settings.bitRate(), 128000);
- QVERIFY(!settings.isNull());
-
- settings = QVideoEncoderSettings();
- QCOMPARE(settings.quality(), QMultimedia::NormalQuality);
- settings.setQuality(QMultimedia::HighQuality);
- QCOMPARE(settings.quality(), QMultimedia::HighQuality);
- QVERIFY(!settings.isNull());
-
- settings = QVideoEncoderSettings();
- QCOMPARE(settings.frameRate(), qreal());
- settings.setFrameRate(30000.0/10001);
- QVERIFY(qFuzzyCompare(settings.frameRate(), qreal(30000.0/10001)));
- settings.setFrameRate(24.0);
- QVERIFY(qFuzzyCompare(settings.frameRate(), qreal(24.0)));
- QVERIFY(!settings.isNull());
-
- settings = QVideoEncoderSettings();
- QCOMPARE(settings.resolution(), QSize());
- settings.setResolution(QSize(320,240));
- QCOMPARE(settings.resolution(), QSize(320,240));
- settings.setResolution(800,600);
- QCOMPARE(settings.resolution(), QSize(800,600));
- QVERIFY(!settings.isNull());
-
- settings = QVideoEncoderSettings();
- settings.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
- QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant(1));
- QVariantMap options;
- options.insert(QLatin1String("encoderOption"), QVariant(1));
- QCOMPARE(settings.encodingOptions(), options);
- options.insert(QLatin1String("encoderOption2"), QVariant(2));
- options.remove(QLatin1String("encoderOption"));
- settings.setEncodingOptions(options);
- QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant());
- QCOMPARE(settings.encodingOption(QLatin1String("encoderOption2")), QVariant(2));
- QVERIFY(!settings.isNull());
- QVERIFY(settings != QVideoEncoderSettings());
-
- settings = QVideoEncoderSettings();
- QVERIFY(settings.isNull());
- QCOMPARE(settings.codec(), QString());
- QCOMPARE(settings.bitRate(), -1);
- QCOMPARE(settings.quality(), QMultimedia::NormalQuality);
- QCOMPARE(settings.frameRate(), qreal());
- QCOMPARE(settings.resolution(), QSize());
- QVERIFY(settings.encodingOptions().isEmpty());
-
- {
- QVideoEncoderSettings settings1;
- QVideoEncoderSettings settings2;
- QCOMPARE(settings2, settings1);
-
- settings2 = settings1;
- QCOMPARE(settings2, settings1);
- QVERIFY(settings2.isNull());
-
- settings1.setQuality(QMultimedia::HighQuality);
-
- QVERIFY(settings2.isNull());
- QVERIFY(!settings1.isNull());
- QVERIFY(settings1 != settings2);
- }
-
- {
- QVideoEncoderSettings settings1;
- QVideoEncoderSettings settings2(settings1);
- QCOMPARE(settings2, settings1);
-
- settings2 = settings1;
- QCOMPARE(settings2, settings1);
- QVERIFY(settings2.isNull());
-
- settings1.setQuality(QMultimedia::HighQuality);
-
- QVERIFY(settings2.isNull());
- QVERIFY(!settings1.isNull());
- QVERIFY(settings1 != settings2);
- }
-
- QVideoEncoderSettings settings1;
- settings1.setBitRate(1);
- QVideoEncoderSettings settings2;
- settings2.setBitRate(1);
- QVERIFY(settings1 == settings2);
- settings2.setBitRate(2);
- QVERIFY(settings1 != settings2);
-
- settings1 = QVideoEncoderSettings();
- settings1.setResolution(800,600);
- settings2 = QVideoEncoderSettings();
- settings2.setResolution(QSize(800,600));
- QVERIFY(settings1 == settings2);
- settings2.setResolution(QSize(400,300));
- QVERIFY(settings1 != settings2);
-
- settings1 = QVideoEncoderSettings();
- settings1.setCodec("codec1");
- settings2 = QVideoEncoderSettings();
- settings2.setCodec("codec1");
- QVERIFY(settings1 == settings2);
- settings2.setCodec("codec2");
- QVERIFY(settings1 != settings2);
-
- settings1 = QVideoEncoderSettings();
- settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- settings2 = QVideoEncoderSettings();
- settings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- QVERIFY(settings1 == settings2);
- settings2.setEncodingMode(QMultimedia::TwoPassEncoding);
- QVERIFY(settings1 != settings2);
-
- settings1 = QVideoEncoderSettings();
- settings1.setQuality(QMultimedia::NormalQuality);
- settings2 = QVideoEncoderSettings();
- settings2.setQuality(QMultimedia::NormalQuality);
- QVERIFY(settings1 == settings2);
- settings2.setQuality(QMultimedia::LowQuality);
- QVERIFY(settings1 != settings2);
-
- settings1 = QVideoEncoderSettings();
- settings1.setFrameRate(1);
- settings2 = QVideoEncoderSettings();
- settings2.setFrameRate(1);
- QVERIFY(settings1 == settings2);
- settings2.setFrameRate(2);
- QVERIFY(settings1 != settings2);
-
- settings1 = QVideoEncoderSettings();
- settings1.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
- settings2 = QVideoEncoderSettings();
- settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
- QVERIFY(settings1 == settings2);
- settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(2));
- QVERIFY(settings1 != settings2);
+// QVideoEncoderSettings settings;
+// QVERIFY(settings.isNull());
+// QVERIFY(settings == QVideoEncoderSettings());
+
+// QCOMPARE(settings.codec(), QString());
+// settings.setCodec(QLatin1String("codecName"));
+// QCOMPARE(settings.codec(), QLatin1String("codecName"));
+// QVERIFY(!settings.isNull());
+// QVERIFY(settings != QVideoEncoderSettings());
+
+// settings = QVideoEncoderSettings();
+// QCOMPARE(settings.bitRate(), -1);
+// settings.setBitRate(128000);
+// QCOMPARE(settings.bitRate(), 128000);
+// QVERIFY(!settings.isNull());
+
+// settings = QVideoEncoderSettings();
+// QCOMPARE(settings.quality(), QMultimedia::NormalQuality);
+// settings.setQuality(QMultimedia::HighQuality);
+// QCOMPARE(settings.quality(), QMultimedia::HighQuality);
+// QVERIFY(!settings.isNull());
+
+// settings = QVideoEncoderSettings();
+// QCOMPARE(settings.frameRate(), qreal());
+// settings.setFrameRate(30000.0/10001);
+// QVERIFY(qFuzzyCompare(settings.frameRate(), qreal(30000.0/10001)));
+// settings.setFrameRate(24.0);
+// QVERIFY(qFuzzyCompare(settings.frameRate(), qreal(24.0)));
+// QVERIFY(!settings.isNull());
+
+// settings = QVideoEncoderSettings();
+// QCOMPARE(settings.resolution(), QSize());
+// settings.setResolution(QSize(320,240));
+// QCOMPARE(settings.resolution(), QSize(320,240));
+// settings.setResolution(800,600);
+// QCOMPARE(settings.resolution(), QSize(800,600));
+// QVERIFY(!settings.isNull());
+
+// settings = QVideoEncoderSettings();
+// settings.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
+// QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant(1));
+// QVariantMap options;
+// options.insert(QLatin1String("encoderOption"), QVariant(1));
+// QCOMPARE(settings.encodingOptions(), options);
+// options.insert(QLatin1String("encoderOption2"), QVariant(2));
+// options.remove(QLatin1String("encoderOption"));
+// settings.setEncodingOptions(options);
+// QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant());
+// QCOMPARE(settings.encodingOption(QLatin1String("encoderOption2")), QVariant(2));
+// QVERIFY(!settings.isNull());
+// QVERIFY(settings != QVideoEncoderSettings());
+
+// settings = QVideoEncoderSettings();
+// QVERIFY(settings.isNull());
+// QCOMPARE(settings.codec(), QString());
+// QCOMPARE(settings.bitRate(), -1);
+// QCOMPARE(settings.quality(), QMultimedia::NormalQuality);
+// QCOMPARE(settings.frameRate(), qreal());
+// QCOMPARE(settings.resolution(), QSize());
+// QVERIFY(settings.encodingOptions().isEmpty());
+
+// {
+// QVideoEncoderSettings settings1;
+// QVideoEncoderSettings settings2;
+// QCOMPARE(settings2, settings1);
+
+// settings2 = settings1;
+// QCOMPARE(settings2, settings1);
+// QVERIFY(settings2.isNull());
+
+// settings1.setQuality(QMultimedia::HighQuality);
+
+// QVERIFY(settings2.isNull());
+// QVERIFY(!settings1.isNull());
+// QVERIFY(settings1 != settings2);
+// }
+
+// {
+// QVideoEncoderSettings settings1;
+// QVideoEncoderSettings settings2(settings1);
+// QCOMPARE(settings2, settings1);
+
+// settings2 = settings1;
+// QCOMPARE(settings2, settings1);
+// QVERIFY(settings2.isNull());
+
+// settings1.setQuality(QMultimedia::HighQuality);
+
+// QVERIFY(settings2.isNull());
+// QVERIFY(!settings1.isNull());
+// QVERIFY(settings1 != settings2);
+// }
+
+// QVideoEncoderSettings settings1;
+// settings1.setBitRate(1);
+// QVideoEncoderSettings settings2;
+// settings2.setBitRate(1);
+// QVERIFY(settings1 == settings2);
+// settings2.setBitRate(2);
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QVideoEncoderSettings();
+// settings1.setResolution(800,600);
+// settings2 = QVideoEncoderSettings();
+// settings2.setResolution(QSize(800,600));
+// QVERIFY(settings1 == settings2);
+// settings2.setResolution(QSize(400,300));
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QVideoEncoderSettings();
+// settings1.setCodec("codec1");
+// settings2 = QVideoEncoderSettings();
+// settings2.setCodec("codec1");
+// QVERIFY(settings1 == settings2);
+// settings2.setCodec("codec2");
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QVideoEncoderSettings();
+// settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// settings2 = QVideoEncoderSettings();
+// settings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// QVERIFY(settings1 == settings2);
+// settings2.setEncodingMode(QMultimedia::TwoPassEncoding);
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QVideoEncoderSettings();
+// settings1.setQuality(QMultimedia::NormalQuality);
+// settings2 = QVideoEncoderSettings();
+// settings2.setQuality(QMultimedia::NormalQuality);
+// QVERIFY(settings1 == settings2);
+// settings2.setQuality(QMultimedia::LowQuality);
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QVideoEncoderSettings();
+// settings1.setFrameRate(1);
+// settings2 = QVideoEncoderSettings();
+// settings2.setFrameRate(1);
+// QVERIFY(settings1 == settings2);
+// settings2.setFrameRate(2);
+// QVERIFY(settings1 != settings2);
+
+// settings1 = QVideoEncoderSettings();
+// settings1.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
+// settings2 = QVideoEncoderSettings();
+// settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
+// QVERIFY(settings1 == settings2);
+// settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(2));
+// QVERIFY(settings1 != settings2);
}
void tst_QMediaRecorder::testSettingsApplied()
{
- MockMediaSource object(nullptr, service);
+// MockMediaSource object(nullptr, service);
- //if the media recorder is not configured after construction
- //the settings are applied in the next event loop
- QMediaRecorder recorder(&object);
- QCOMPARE(mock->m_settingAppliedCount, 0);
- QTRY_COMPARE(mock->m_settingAppliedCount, 1);
+// //if the media recorder is not configured after construction
+// //the settings are applied in the next event loop
+// QMediaRecorder recorder(&object);
+// QCOMPARE(mock->m_settingAppliedCount, 0);
+// QTRY_COMPARE(mock->m_settingAppliedCount, 1);
- QVideoEncoderSettings videoSettings;
- videoSettings.setResolution(640,480);
- recorder.setVideoSettings(videoSettings);
+// QVideoEncoderSettings videoSettings;
+// videoSettings.setResolution(640,480);
+// recorder.setVideoSettings(videoSettings);
- QAudioEncoderSettings audioSettings;
- audioSettings.setQuality(QMultimedia::HighQuality);
- recorder.setAudioSettings(audioSettings);
+// QAudioEncoderSettings audioSettings;
+// audioSettings.setQuality(QMultimedia::HighQuality);
+// recorder.setAudioSettings(audioSettings);
- recorder.setContainerFormat("mkv");
+// recorder.setContainerFormat("mkv");
- QCOMPARE(mock->m_settingAppliedCount, 1);
- QTRY_COMPARE(mock->m_settingAppliedCount, 2);
+// QCOMPARE(mock->m_settingAppliedCount, 1);
+// QTRY_COMPARE(mock->m_settingAppliedCount, 2);
- //encoder settings are applied before recording if changed
- audioSettings.setQuality(QMultimedia::VeryHighQuality);
- recorder.setAudioSettings(audioSettings);
+// //encoder settings are applied before recording if changed
+// audioSettings.setQuality(QMultimedia::VeryHighQuality);
+// recorder.setAudioSettings(audioSettings);
- QCOMPARE(mock->m_settingAppliedCount, 2);
- recorder.record();
- QCOMPARE(mock->m_settingAppliedCount, 3);
+// QCOMPARE(mock->m_settingAppliedCount, 2);
+// recorder.record();
+// QCOMPARE(mock->m_settingAppliedCount, 3);
- recorder.stop();
+// recorder.stop();
- //applySettings is not called if setting has not changes
- recorder.record();
- QCOMPARE(mock->m_settingAppliedCount, 3);
+// //applySettings is not called if setting has not changes
+// recorder.record();
+// QCOMPARE(mock->m_settingAppliedCount, 3);
}
void tst_QMediaRecorder::nullMetaDataControl()
@@ -969,135 +894,135 @@ void tst_QMediaRecorder::setMetaData()
void tst_QMediaRecorder::testAudioSettingsCopyConstructor()
{
/* create an object for AudioEncodersettings */
- QAudioEncoderSettings audiosettings;
- QVERIFY(audiosettings.isNull());
-
- /* setting the desired properties for the AudioEncoder */
- audiosettings.setBitRate(128*1000);
- audiosettings.setChannelCount(4);
- audiosettings.setCodec("audio/x-raw");
- audiosettings.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- audiosettings.setQuality(QMultimedia::LowQuality);
- audiosettings.setSampleRate(44100);
-
- /* Copy constructor */
- QAudioEncoderSettings other(audiosettings);
- QVERIFY(!(other.isNull()));
-
- /* Verifying whether data is copied properly or not */
- QVERIFY(other.bitRate() == audiosettings.bitRate());
- QVERIFY(other.sampleRate() == audiosettings.sampleRate());
- QVERIFY(other.channelCount() == audiosettings.channelCount());
- QCOMPARE(other.codec(), audiosettings.codec());
- QVERIFY(other.encodingMode() == audiosettings.encodingMode());
- QVERIFY(other.quality() == audiosettings.quality());
+// QAudioEncoderSettings audiosettings;
+// QVERIFY(audiosettings.isNull());
+
+// /* setting the desired properties for the AudioEncoder */
+// audiosettings.setBitRate(128*1000);
+// audiosettings.setChannelCount(4);
+// audiosettings.setCodec("audio/x-raw");
+// audiosettings.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// audiosettings.setQuality(QMultimedia::LowQuality);
+// audiosettings.setSampleRate(44100);
+
+// /* Copy constructor */
+// QAudioEncoderSettings other(audiosettings);
+// QVERIFY(!(other.isNull()));
+
+// /* Verifying whether data is copied properly or not */
+// QVERIFY(other.bitRate() == audiosettings.bitRate());
+// QVERIFY(other.sampleRate() == audiosettings.sampleRate());
+// QVERIFY(other.channelCount() == audiosettings.channelCount());
+// QCOMPARE(other.codec(), audiosettings.codec());
+// QVERIFY(other.encodingMode() == audiosettings.encodingMode());
+// QVERIFY(other.quality() == audiosettings.quality());
}
void tst_QMediaRecorder::testAudioSettingsOperatorNotEqual()
{
/* create an object for AudioEncodersettings */
- QAudioEncoderSettings audiosettings1;
- QVERIFY(audiosettings1.isNull());
-
- QAudioEncoderSettings audiosettings2;
- QVERIFY(audiosettings2.isNull());
-
- /* setting the desired properties to for the AudioEncoder */
- audiosettings1.setBitRate(128*1000);
- audiosettings1.setChannelCount(4);
- audiosettings1.setCodec("audio/x-raw");
- audiosettings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- audiosettings1.setQuality(QMultimedia::LowQuality);
- audiosettings1.setSampleRate(44100);
-
- /* setting the desired properties for the AudioEncoder */
- audiosettings2.setBitRate(128*1000);
- audiosettings2.setChannelCount(4);
- audiosettings2.setCodec("audio/x-raw");
- audiosettings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- audiosettings2.setQuality(QMultimedia::LowQuality);
- audiosettings2.setSampleRate(44100);
-
- /* verify the both are equal or not */
- QVERIFY(!(audiosettings1 != audiosettings2));
-
- /* Modify the settings value for one object */
- audiosettings2.setBitRate(64*1000);
- audiosettings2.setEncodingMode(QMultimedia::ConstantQualityEncoding);
-
- /* verify the not equal opertor */
- QVERIFY(audiosettings1 != audiosettings2);
-
- QVERIFY(audiosettings2.bitRate() != audiosettings1.bitRate());
- QVERIFY(audiosettings2.encodingMode() != audiosettings1.encodingMode());
+// QAudioEncoderSettings audiosettings1;
+// QVERIFY(audiosettings1.isNull());
+
+// QAudioEncoderSettings audiosettings2;
+// QVERIFY(audiosettings2.isNull());
+
+// /* setting the desired properties to for the AudioEncoder */
+// audiosettings1.setBitRate(128*1000);
+// audiosettings1.setChannelCount(4);
+// audiosettings1.setCodec("audio/x-raw");
+// audiosettings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// audiosettings1.setQuality(QMultimedia::LowQuality);
+// audiosettings1.setSampleRate(44100);
+
+// /* setting the desired properties for the AudioEncoder */
+// audiosettings2.setBitRate(128*1000);
+// audiosettings2.setChannelCount(4);
+// audiosettings2.setCodec("audio/x-raw");
+// audiosettings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// audiosettings2.setQuality(QMultimedia::LowQuality);
+// audiosettings2.setSampleRate(44100);
+
+// /* verify the both are equal or not */
+// QVERIFY(!(audiosettings1 != audiosettings2));
+
+// /* Modify the settings value for one object */
+// audiosettings2.setBitRate(64*1000);
+// audiosettings2.setEncodingMode(QMultimedia::ConstantQualityEncoding);
+
+// /* verify the not equal opertor */
+// QVERIFY(audiosettings1 != audiosettings2);
+
+// QVERIFY(audiosettings2.bitRate() != audiosettings1.bitRate());
+// QVERIFY(audiosettings2.encodingMode() != audiosettings1.encodingMode());
}
void tst_QMediaRecorder::testAudioSettingsOperatorEqual()
{
/* create an object for AudioEncodersettings */
- QAudioEncoderSettings audiosettings1;
- QVERIFY(audiosettings1.isNull());
-
- /* setting the desired properties to for the AudioEncoder */
- audiosettings1.setBitRate(128*1000);
- audiosettings1.setChannelCount(4);
- audiosettings1.setCodec("audio/x-raw");
- audiosettings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- audiosettings1.setQuality(QMultimedia::LowQuality);
- audiosettings1.setSampleRate(44100);
-
- QAudioEncoderSettings audiosettings2;
- QVERIFY(audiosettings2.isNull());
-
- /* setting the desired properties for the AudioEncoder */
- audiosettings2.setBitRate(128*1000);
- audiosettings2.setChannelCount(4);
- audiosettings2.setCodec("audio/x-raw");
- audiosettings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- audiosettings2.setQuality(QMultimedia::LowQuality);
- audiosettings2.setSampleRate(44100);
-
- /* verify both the values are same or not */
- QVERIFY(audiosettings1 == audiosettings2);
- audiosettings2.setChannelCount(2);
- QVERIFY(audiosettings1 != audiosettings2);
+// QAudioEncoderSettings audiosettings1;
+// QVERIFY(audiosettings1.isNull());
+
+// /* setting the desired properties to for the AudioEncoder */
+// audiosettings1.setBitRate(128*1000);
+// audiosettings1.setChannelCount(4);
+// audiosettings1.setCodec("audio/x-raw");
+// audiosettings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// audiosettings1.setQuality(QMultimedia::LowQuality);
+// audiosettings1.setSampleRate(44100);
+
+// QAudioEncoderSettings audiosettings2;
+// QVERIFY(audiosettings2.isNull());
+
+// /* setting the desired properties for the AudioEncoder */
+// audiosettings2.setBitRate(128*1000);
+// audiosettings2.setChannelCount(4);
+// audiosettings2.setCodec("audio/x-raw");
+// audiosettings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// audiosettings2.setQuality(QMultimedia::LowQuality);
+// audiosettings2.setSampleRate(44100);
+
+// /* verify both the values are same or not */
+// QVERIFY(audiosettings1 == audiosettings2);
+// audiosettings2.setChannelCount(2);
+// QVERIFY(audiosettings1 != audiosettings2);
}
void tst_QMediaRecorder::testAudioSettingsOperatorAssign()
{
/* create an object for AudioEncodersettings */
- QAudioEncoderSettings audiosettings1;
- QVERIFY(audiosettings1.isNull());
-
- /* setting the desired properties for the AudioEncoder */
- audiosettings1.setBitRate(128*1000);
- audiosettings1.setChannelCount(4);
- audiosettings1.setCodec("audio/x-raw");
- audiosettings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- audiosettings1.setQuality(QMultimedia::LowQuality);
- audiosettings1.setSampleRate(44100);
-
- QAudioEncoderSettings audiosettings2;
- audiosettings2 = audiosettings1;
- /* Verifying whether data is copied properly or not */
- QVERIFY(audiosettings2.bitRate() == audiosettings1.bitRate());
- QVERIFY(audiosettings2.sampleRate() == audiosettings1.sampleRate());
- QVERIFY(audiosettings2.channelCount() == audiosettings1.channelCount());
- QCOMPARE(audiosettings2.codec(), audiosettings1.codec());
- QVERIFY(audiosettings2.encodingMode() == audiosettings1.encodingMode());
- QVERIFY(audiosettings2.quality() == audiosettings1.quality());
+// QAudioEncoderSettings audiosettings1;
+// QVERIFY(audiosettings1.isNull());
+
+// /* setting the desired properties for the AudioEncoder */
+// audiosettings1.setBitRate(128*1000);
+// audiosettings1.setChannelCount(4);
+// audiosettings1.setCodec("audio/x-raw");
+// audiosettings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// audiosettings1.setQuality(QMultimedia::LowQuality);
+// audiosettings1.setSampleRate(44100);
+
+// QAudioEncoderSettings audiosettings2;
+// audiosettings2 = audiosettings1;
+// /* Verifying whether data is copied properly or not */
+// QVERIFY(audiosettings2.bitRate() == audiosettings1.bitRate());
+// QVERIFY(audiosettings2.sampleRate() == audiosettings1.sampleRate());
+// QVERIFY(audiosettings2.channelCount() == audiosettings1.channelCount());
+// QCOMPARE(audiosettings2.codec(), audiosettings1.codec());
+// QVERIFY(audiosettings2.encodingMode() == audiosettings1.encodingMode());
+// QVERIFY(audiosettings2.quality() == audiosettings1.quality());
}
void tst_QMediaRecorder::testAudioSettingsDestructor()
{
/* Creating null object for the audioencodersettings */
- QAudioEncoderSettings * audiosettings = new QAudioEncoderSettings;
+// QAudioEncoderSettings * audiosettings = new QAudioEncoderSettings;
- /* Verifying the object is null or not */
- QVERIFY(audiosettings->isNull());
- /* delete the allocated memory */
- delete audiosettings;
+// /* Verifying the object is null or not */
+// QVERIFY(audiosettings->isNull());
+// /* delete the allocated memory */
+// delete audiosettings;
}
/* availability() API test. */
@@ -1180,269 +1105,269 @@ void tst_QMediaRecorder::testEnum()
/* Test the QVideoEncoderSettings quality API*/
void tst_QMediaRecorder::testVideoSettingsQuality()
{
- /* Create the instance*/
- QVideoEncoderSettings settings;
- QVERIFY(settings.isNull());
- QVERIFY(settings == QVideoEncoderSettings());
+// /* Create the instance*/
+// QVideoEncoderSettings settings;
+// QVERIFY(settings.isNull());
+// QVERIFY(settings == QVideoEncoderSettings());
- /* Verify the default value is intialised correctly*/
- QCOMPARE(settings.quality(), QMultimedia::NormalQuality);
+// /* Verify the default value is intialised correctly*/
+// QCOMPARE(settings.quality(), QMultimedia::NormalQuality);
- /* Set all types of Quality parameter and Verify if it is set correctly*/
- settings.setQuality(QMultimedia::HighQuality);
- QCOMPARE(settings.quality(), QMultimedia::HighQuality);
- QVERIFY(!settings.isNull());
+// /* Set all types of Quality parameter and Verify if it is set correctly*/
+// settings.setQuality(QMultimedia::HighQuality);
+// QCOMPARE(settings.quality(), QMultimedia::HighQuality);
+// QVERIFY(!settings.isNull());
- settings.setQuality(QMultimedia::VeryLowQuality);
- QCOMPARE(settings.quality(), QMultimedia::VeryLowQuality);
+// settings.setQuality(QMultimedia::VeryLowQuality);
+// QCOMPARE(settings.quality(), QMultimedia::VeryLowQuality);
- settings.setQuality(QMultimedia::LowQuality);
- QCOMPARE(settings.quality(), QMultimedia::LowQuality);
+// settings.setQuality(QMultimedia::LowQuality);
+// QCOMPARE(settings.quality(), QMultimedia::LowQuality);
- settings.setQuality(QMultimedia::VeryHighQuality);
- QCOMPARE(settings.quality(), QMultimedia::VeryHighQuality);
+// settings.setQuality(QMultimedia::VeryHighQuality);
+// QCOMPARE(settings.quality(), QMultimedia::VeryHighQuality);
}
/* Test QVideoEncoderSettings encodingMode */
void tst_QMediaRecorder::testVideoSettingsEncodingMode()
{
- /* Create the instance*/
- QVideoEncoderSettings settings;
- QVERIFY(settings.isNull());
- QVERIFY(settings == QVideoEncoderSettings());
+// /* Create the instance*/
+// QVideoEncoderSettings settings;
+// QVERIFY(settings.isNull());
+// QVERIFY(settings == QVideoEncoderSettings());
- /* Verify the default values are initialised correctly*/
- QCOMPARE(settings.encodingMode(), QMultimedia::ConstantQualityEncoding);
- QVERIFY(settings.isNull());
+// /* Verify the default values are initialised correctly*/
+// QCOMPARE(settings.encodingMode(), QMultimedia::ConstantQualityEncoding);
+// QVERIFY(settings.isNull());
- /* Set each type of encoding mode and Verify if it is set correctly*/
- settings.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- QCOMPARE(settings.encodingMode(),QMultimedia::ConstantBitRateEncoding);
- QVERIFY(!settings.isNull());
+// /* Set each type of encoding mode and Verify if it is set correctly*/
+// settings.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// QCOMPARE(settings.encodingMode(),QMultimedia::ConstantBitRateEncoding);
+// QVERIFY(!settings.isNull());
- settings.setEncodingMode(QMultimedia::AverageBitRateEncoding);
- QCOMPARE(settings.encodingMode(), QMultimedia::AverageBitRateEncoding);
+// settings.setEncodingMode(QMultimedia::AverageBitRateEncoding);
+// QCOMPARE(settings.encodingMode(), QMultimedia::AverageBitRateEncoding);
- settings.setEncodingMode(QMultimedia::TwoPassEncoding);
- QCOMPARE(settings.encodingMode(), QMultimedia::TwoPassEncoding);
+// settings.setEncodingMode(QMultimedia::TwoPassEncoding);
+// QCOMPARE(settings.encodingMode(), QMultimedia::TwoPassEncoding);
}
/* Test QVideoEncoderSettings copy constructor */
void tst_QMediaRecorder::testVideoSettingsCopyConstructor()
{
- /* Create the instance and initialise it*/
- QVideoEncoderSettings settings1;
- settings1.setCodec(QLatin1String("codecName"));
- settings1.setBitRate(128000);
- settings1.setQuality(QMultimedia::HighQuality);
- settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- settings1.setFrameRate(30000.0/10001);
- settings1.setResolution(QSize(320,240));
-
- /* Create another instance with instance1 as argument*/
- QVideoEncoderSettings settings2(settings1);
-
- /* Verify if all the parameters are copied correctly*/
- QCOMPARE(settings2 != settings1, false);
- QCOMPARE(settings2.codec(), QLatin1String("codecName"));
- QCOMPARE(settings2.bitRate(), 128000);
- QCOMPARE(settings2.encodingMode(), QMultimedia::ConstantBitRateEncoding);
- QVERIFY(qFuzzyCompare(settings2.frameRate(), qreal(30000.0/10001)));
- QCOMPARE(settings2.resolution(), QSize(320,240));
- QCOMPARE(settings2.quality(), QMultimedia::HighQuality);
-
- /* Verify both the instances are equal*/
- QCOMPARE(settings2, settings1);
- QVERIFY(!settings2.isNull());
+// /* Create the instance and initialise it*/
+// QVideoEncoderSettings settings1;
+// settings1.setCodec(QLatin1String("codecName"));
+// settings1.setBitRate(128000);
+// settings1.setQuality(QMultimedia::HighQuality);
+// settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// settings1.setFrameRate(30000.0/10001);
+// settings1.setResolution(QSize(320,240));
+
+// /* Create another instance with instance1 as argument*/
+// QVideoEncoderSettings settings2(settings1);
+
+// /* Verify if all the parameters are copied correctly*/
+// QCOMPARE(settings2 != settings1, false);
+// QCOMPARE(settings2.codec(), QLatin1String("codecName"));
+// QCOMPARE(settings2.bitRate(), 128000);
+// QCOMPARE(settings2.encodingMode(), QMultimedia::ConstantBitRateEncoding);
+// QVERIFY(qFuzzyCompare(settings2.frameRate(), qreal(30000.0/10001)));
+// QCOMPARE(settings2.resolution(), QSize(320,240));
+// QCOMPARE(settings2.quality(), QMultimedia::HighQuality);
+
+// /* Verify both the instances are equal*/
+// QCOMPARE(settings2, settings1);
+// QVERIFY(!settings2.isNull());
}
/* Test QVideoEncoderSettings Overloaded Operator assignment*/
void tst_QMediaRecorder::testVideoSettingsOperatorAssignment()
{
- /* Create two instances.*/
- QVideoEncoderSettings settings1;
- QVideoEncoderSettings settings2;
- QCOMPARE(settings2, settings1);
- QVERIFY(settings2.isNull());
-
- /* Initialize all the parameters */
- settings1.setCodec(QLatin1String("codecName"));
- settings1.setBitRate(128000);
- settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- settings1.setFrameRate(30000.0/10001);
- settings1.setResolution(QSize(320,240));
- settings1.setQuality(QMultimedia::HighQuality);
- /* Assign one object to other*/
- settings2 = settings1;
-
- /* Verify all the parameters are copied correctly*/
- QCOMPARE(settings2, settings1);
- QCOMPARE(settings2.codec(), QLatin1String("codecName"));
- QCOMPARE(settings2.bitRate(), 128000);
- QCOMPARE(settings2.encodingMode(), QMultimedia::ConstantBitRateEncoding);
- QVERIFY(qFuzzyCompare(settings2.frameRate(), qreal(30000.0/10001)));
- QCOMPARE(settings2.resolution(), QSize(320,240));
- QCOMPARE(settings2.quality(), QMultimedia::HighQuality);
- QCOMPARE(settings2, settings1);
- QVERIFY(!settings2.isNull());
+// /* Create two instances.*/
+// QVideoEncoderSettings settings1;
+// QVideoEncoderSettings settings2;
+// QCOMPARE(settings2, settings1);
+// QVERIFY(settings2.isNull());
+
+// /* Initialize all the parameters */
+// settings1.setCodec(QLatin1String("codecName"));
+// settings1.setBitRate(128000);
+// settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// settings1.setFrameRate(30000.0/10001);
+// settings1.setResolution(QSize(320,240));
+// settings1.setQuality(QMultimedia::HighQuality);
+// /* Assign one object to other*/
+// settings2 = settings1;
+
+// /* Verify all the parameters are copied correctly*/
+// QCOMPARE(settings2, settings1);
+// QCOMPARE(settings2.codec(), QLatin1String("codecName"));
+// QCOMPARE(settings2.bitRate(), 128000);
+// QCOMPARE(settings2.encodingMode(), QMultimedia::ConstantBitRateEncoding);
+// QVERIFY(qFuzzyCompare(settings2.frameRate(), qreal(30000.0/10001)));
+// QCOMPARE(settings2.resolution(), QSize(320,240));
+// QCOMPARE(settings2.quality(), QMultimedia::HighQuality);
+// QCOMPARE(settings2, settings1);
+// QVERIFY(!settings2.isNull());
}
/* Test QVideoEncoderSettings Overloaded OperatorNotEqual*/
void tst_QMediaRecorder::testVideoSettingsOperatorNotEqual()
{
- /* Create the instance and set the bit rate and Verify objects with OperatorNotEqual*/
- QVideoEncoderSettings settings1;
- settings1.setBitRate(1);
- QVideoEncoderSettings settings2;
- settings2.setBitRate(1);
- /* OperatorNotEqual returns false when both objects are equal*/
- QCOMPARE(settings1 != settings2, false);
- settings2.setBitRate(2);
- /* OperatorNotEqual returns true when both objects are not equal*/
- QVERIFY(settings1 != settings2);
-
- /* Verify Resolution with not equal operator*/
- settings1 = QVideoEncoderSettings();
- settings1.setResolution(800,600);
- settings2 = QVideoEncoderSettings();
- settings2.setResolution(QSize(800,600));
- /* OperatorNotEqual returns false when both objects are equal*/
- QCOMPARE(settings1 != settings2, false);
- settings2.setResolution(QSize(400,300));
- /* OperatorNotEqual returns true when both objects are not equal*/
- QVERIFY(settings1 != settings2);
-
- /* Verify Codec with not equal operator*/
- settings1 = QVideoEncoderSettings();
- settings1.setCodec("codec1");
- settings2 = QVideoEncoderSettings();
- settings2.setCodec("codec1");
- /* OperatorNotEqual returns false when both objects are equal*/
- QCOMPARE(settings1 != settings2, false);
- settings2.setCodec("codec2");
- /* OperatorNotEqual returns true when both objects are not equal*/
- QVERIFY(settings1 != settings2);
-
- /* Verify EncodingMode with not equal operator*/
- settings1 = QVideoEncoderSettings();
- settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- settings2 = QVideoEncoderSettings();
- settings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- /* OperatorNotEqual returns false when both objects are equal*/
- QCOMPARE(settings1 != settings2, false);
- settings2.setEncodingMode(QMultimedia::TwoPassEncoding);
- /* OperatorNotEqual returns true when both objects are not equal*/
- QVERIFY(settings1 != settings2);
-
- /* Verify Quality with not equal operator*/
- settings1 = QVideoEncoderSettings();
- settings1.setQuality(QMultimedia::NormalQuality);
- settings2 = QVideoEncoderSettings();
- settings2.setQuality(QMultimedia::NormalQuality);
- /* OperatorNotEqual returns false when both objects are equal*/
- QCOMPARE(settings1 != settings2, false);
- settings2.setQuality(QMultimedia::LowQuality);
- /* OperatorNotEqual returns true when both objects are not equal*/
- QVERIFY(settings1 != settings2);
-
- /* Verify FrameRate with not equal operator*/
- settings1 = QVideoEncoderSettings();
- settings1.setFrameRate(1);
- settings2 = QVideoEncoderSettings();
- settings2.setFrameRate(1);
- /* OperatorNotEqual returns false when both objects are equal*/
- QCOMPARE(settings1 != settings2, false);
- settings2.setFrameRate(2);
- /* OperatorNotEqual returns true when both objects are not equal*/
- QVERIFY(settings1 != settings2);
+// /* Create the instance and set the bit rate and Verify objects with OperatorNotEqual*/
+// QVideoEncoderSettings settings1;
+// settings1.setBitRate(1);
+// QVideoEncoderSettings settings2;
+// settings2.setBitRate(1);
+// /* OperatorNotEqual returns false when both objects are equal*/
+// QCOMPARE(settings1 != settings2, false);
+// settings2.setBitRate(2);
+// /* OperatorNotEqual returns true when both objects are not equal*/
+// QVERIFY(settings1 != settings2);
+
+// /* Verify Resolution with not equal operator*/
+// settings1 = QVideoEncoderSettings();
+// settings1.setResolution(800,600);
+// settings2 = QVideoEncoderSettings();
+// settings2.setResolution(QSize(800,600));
+// /* OperatorNotEqual returns false when both objects are equal*/
+// QCOMPARE(settings1 != settings2, false);
+// settings2.setResolution(QSize(400,300));
+// /* OperatorNotEqual returns true when both objects are not equal*/
+// QVERIFY(settings1 != settings2);
+
+// /* Verify Codec with not equal operator*/
+// settings1 = QVideoEncoderSettings();
+// settings1.setCodec("codec1");
+// settings2 = QVideoEncoderSettings();
+// settings2.setCodec("codec1");
+// /* OperatorNotEqual returns false when both objects are equal*/
+// QCOMPARE(settings1 != settings2, false);
+// settings2.setCodec("codec2");
+// /* OperatorNotEqual returns true when both objects are not equal*/
+// QVERIFY(settings1 != settings2);
+
+// /* Verify EncodingMode with not equal operator*/
+// settings1 = QVideoEncoderSettings();
+// settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// settings2 = QVideoEncoderSettings();
+// settings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// /* OperatorNotEqual returns false when both objects are equal*/
+// QCOMPARE(settings1 != settings2, false);
+// settings2.setEncodingMode(QMultimedia::TwoPassEncoding);
+// /* OperatorNotEqual returns true when both objects are not equal*/
+// QVERIFY(settings1 != settings2);
+
+// /* Verify Quality with not equal operator*/
+// settings1 = QVideoEncoderSettings();
+// settings1.setQuality(QMultimedia::NormalQuality);
+// settings2 = QVideoEncoderSettings();
+// settings2.setQuality(QMultimedia::NormalQuality);
+// /* OperatorNotEqual returns false when both objects are equal*/
+// QCOMPARE(settings1 != settings2, false);
+// settings2.setQuality(QMultimedia::LowQuality);
+// /* OperatorNotEqual returns true when both objects are not equal*/
+// QVERIFY(settings1 != settings2);
+
+// /* Verify FrameRate with not equal operator*/
+// settings1 = QVideoEncoderSettings();
+// settings1.setFrameRate(1);
+// settings2 = QVideoEncoderSettings();
+// settings2.setFrameRate(1);
+// /* OperatorNotEqual returns false when both objects are equal*/
+// QCOMPARE(settings1 != settings2, false);
+// settings2.setFrameRate(2);
+// /* OperatorNotEqual returns true when both objects are not equal*/
+// QVERIFY(settings1 != settings2);
}
/* Test QVideoEncoderSettings Overloaded comparison operator*/
void tst_QMediaRecorder::testVideoSettingsOperatorComparison()
{
- /* Create the instance and set the bit rate and Verify objects with comparison operator*/
- QVideoEncoderSettings settings1;
- settings1.setBitRate(1);
- QVideoEncoderSettings settings2;
- settings2.setBitRate(1);
-
- /* Comparison operator returns true when both objects are equal*/
- QVERIFY(settings1 == settings2);
- settings2.setBitRate(2);
- /* Comparison operator returns false when both objects are not equal*/
- QCOMPARE(settings1 == settings2, false);
-
- /* Verify resolution with comparison operator*/
- settings1 = QVideoEncoderSettings();
- settings1.setResolution(800,600);
- settings2 = QVideoEncoderSettings();
- settings2.setResolution(QSize(800,600));
- /* Comparison operator returns true when both objects are equal*/
- QVERIFY(settings1 == settings2);
- settings2.setResolution(QSize(400,300));
- /* Comparison operator returns false when both objects are not equal*/
- QCOMPARE(settings1 == settings2, false);
-
- /* Verify Codec with comparison operator*/
- settings1 = QVideoEncoderSettings();
- settings1.setCodec("codec1");
- settings2 = QVideoEncoderSettings();
- settings2.setCodec("codec1");
- /* Comparison operator returns true when both objects are equal*/
- QVERIFY(settings1 == settings2);
- settings2.setCodec("codec2");
- /* Comparison operator returns false when both objects are not equal*/
- QCOMPARE(settings1 == settings2, false);
-
- /* Verify EncodingMode with comparison operator*/
- settings1 = QVideoEncoderSettings();
- settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- settings2 = QVideoEncoderSettings();
- settings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
- /* Comparison operator returns true when both objects are equal*/
- QVERIFY(settings1 == settings2);
- settings2.setEncodingMode(QMultimedia::TwoPassEncoding);
- /* Comparison operator returns false when both objects are not equal*/
- QCOMPARE(settings1 == settings2, false);
-
- /* Verify Quality with comparison operator*/
- settings1 = QVideoEncoderSettings();
- settings1.setQuality(QMultimedia::NormalQuality);
- settings2 = QVideoEncoderSettings();
- settings2.setQuality(QMultimedia::NormalQuality);
- /* Comparison operator returns true when both objects are equal*/
- QVERIFY(settings1 == settings2);
- settings2.setQuality(QMultimedia::LowQuality);
- /* Comparison operator returns false when both objects are not equal*/
- QCOMPARE(settings1 == settings2, false);
-
- /* Verify FrameRate with comparison operator*/
- settings1 = QVideoEncoderSettings();
- settings1.setFrameRate(1);
- settings2 = QVideoEncoderSettings();
- settings2.setFrameRate(1);
- /* Comparison operator returns true when both objects are equal*/
- QVERIFY(settings1 == settings2);
- settings2.setFrameRate(2);
- /* Comparison operator returns false when both objects are not equal*/
- QCOMPARE(settings1 == settings2, false);
+// /* Create the instance and set the bit rate and Verify objects with comparison operator*/
+// QVideoEncoderSettings settings1;
+// settings1.setBitRate(1);
+// QVideoEncoderSettings settings2;
+// settings2.setBitRate(1);
+
+// /* Comparison operator returns true when both objects are equal*/
+// QVERIFY(settings1 == settings2);
+// settings2.setBitRate(2);
+// /* Comparison operator returns false when both objects are not equal*/
+// QCOMPARE(settings1 == settings2, false);
+
+// /* Verify resolution with comparison operator*/
+// settings1 = QVideoEncoderSettings();
+// settings1.setResolution(800,600);
+// settings2 = QVideoEncoderSettings();
+// settings2.setResolution(QSize(800,600));
+// /* Comparison operator returns true when both objects are equal*/
+// QVERIFY(settings1 == settings2);
+// settings2.setResolution(QSize(400,300));
+// /* Comparison operator returns false when both objects are not equal*/
+// QCOMPARE(settings1 == settings2, false);
+
+// /* Verify Codec with comparison operator*/
+// settings1 = QVideoEncoderSettings();
+// settings1.setCodec("codec1");
+// settings2 = QVideoEncoderSettings();
+// settings2.setCodec("codec1");
+// /* Comparison operator returns true when both objects are equal*/
+// QVERIFY(settings1 == settings2);
+// settings2.setCodec("codec2");
+// /* Comparison operator returns false when both objects are not equal*/
+// QCOMPARE(settings1 == settings2, false);
+
+// /* Verify EncodingMode with comparison operator*/
+// settings1 = QVideoEncoderSettings();
+// settings1.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// settings2 = QVideoEncoderSettings();
+// settings2.setEncodingMode(QMultimedia::ConstantBitRateEncoding);
+// /* Comparison operator returns true when both objects are equal*/
+// QVERIFY(settings1 == settings2);
+// settings2.setEncodingMode(QMultimedia::TwoPassEncoding);
+// /* Comparison operator returns false when both objects are not equal*/
+// QCOMPARE(settings1 == settings2, false);
+
+// /* Verify Quality with comparison operator*/
+// settings1 = QVideoEncoderSettings();
+// settings1.setQuality(QMultimedia::NormalQuality);
+// settings2 = QVideoEncoderSettings();
+// settings2.setQuality(QMultimedia::NormalQuality);
+// /* Comparison operator returns true when both objects are equal*/
+// QVERIFY(settings1 == settings2);
+// settings2.setQuality(QMultimedia::LowQuality);
+// /* Comparison operator returns false when both objects are not equal*/
+// QCOMPARE(settings1 == settings2, false);
+
+// /* Verify FrameRate with comparison operator*/
+// settings1 = QVideoEncoderSettings();
+// settings1.setFrameRate(1);
+// settings2 = QVideoEncoderSettings();
+// settings2.setFrameRate(1);
+// /* Comparison operator returns true when both objects are equal*/
+// QVERIFY(settings1 == settings2);
+// settings2.setFrameRate(2);
+// /* Comparison operator returns false when both objects are not equal*/
+// QCOMPARE(settings1 == settings2, false);
}
/* Test the destuctor of the QVideoEncoderSettings*/
void tst_QMediaRecorder::testVideoSettingsDestructor()
{
- /* Create the instance on heap and verify if object deleted correctly*/
- QVideoEncoderSettings *settings1 = new QVideoEncoderSettings();
- QVERIFY(settings1 != nullptr);
- QVERIFY(settings1->isNull());
- delete settings1;
-
- /* Create the instance on heap and initialise it and verify if object deleted correctly.*/
- QVideoEncoderSettings *settings2 = new QVideoEncoderSettings();
- QVERIFY(settings2 != nullptr);
- settings2->setCodec(QString("codec"));
- QVERIFY(!settings2->isNull());
- delete settings2;
+// /* Create the instance on heap and verify if object deleted correctly*/
+// QVideoEncoderSettings *settings1 = new QVideoEncoderSettings();
+// QVERIFY(settings1 != nullptr);
+// QVERIFY(settings1->isNull());
+// delete settings1;
+
+// /* Create the instance on heap and initialise it and verify if object deleted correctly.*/
+// QVideoEncoderSettings *settings2 = new QVideoEncoderSettings();
+// QVERIFY(settings2 != nullptr);
+// settings2->setCodec(QString("codec"));
+// QVERIFY(!settings2->isNull());
+// delete settings2;
}
QTEST_GUILESS_MAIN(tst_QMediaRecorder)
diff --git a/tests/auto/unit/multimedia/qmediasink/tst_qmediasink.cpp b/tests/auto/unit/multimedia/qmediasink/tst_qmediasink.cpp
index ea99964da..00cf54be9 100644
--- a/tests/auto/unit/multimedia/qmediasink/tst_qmediasink.cpp
+++ b/tests/auto/unit/multimedia/qmediasink/tst_qmediasink.cpp
@@ -35,12 +35,8 @@
#include <qmediarecordercontrol.h>
#include <qmediarecorder.h>
#include <qmetadatawritercontrol.h>
-#include <qaudioencodersettingscontrol.h>
-#include <qmediacontainercontrol.h>
-#include <qvideoencodersettingscontrol.h>
#include <qaudioformat.h>
-#include "mockmediacontainercontrol.h"
#include "mockmetadatawritercontrol.h"
#include "mockmediarecordercontrol.h"
#include "mockmediasource.h"
@@ -56,7 +52,6 @@ public:
mockControl(control),
hasControls(true)
{
- mockContainerControl = new MockMediaContainerControl(parent); //Creating the object for Media
mockMetaDataControl = new MockMetaDataWriterControl(parent); //Creating the object for MetaData
}
@@ -64,8 +59,6 @@ public:
{
if (hasControls && qstrcmp(name,QMediaRecorderControl_iid) == 0)
return mockControl;
- if (hasControls && qstrcmp(name,QMediaContainerControl_iid) == 0)
- return mockContainerControl;
if (hasControls && qstrcmp(name, QMetaDataWriterControl_iid) == 0)
return mockMetaDataControl;
@@ -75,7 +68,6 @@ public:
void releaseControl(QObject *) override {}
//Initialising the objects for the media
QObject *mockControl;
- QMediaContainerControl *mockContainerControl;
MockMetaDataWriterControl *mockMetaDataControl;
bool hasControls;
};
diff --git a/tests/auto/unit/multimedia/qvideoencodersettingscontrol/CMakeLists.txt b/tests/auto/unit/multimedia/qvideoencodersettingscontrol/CMakeLists.txt
deleted file mode 100644
index dce65b023..000000000
--- a/tests/auto/unit/multimedia/qvideoencodersettingscontrol/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-# Generated from qvideoencodersettingscontrol.pro.
-
-#####################################################################
-## tst_qvideoencodersettingscontrol Test:
-#####################################################################
-
-qt_add_test(tst_qvideoencodersettingscontrol
- SOURCES
- tst_qvideoencodersettingscontrol.cpp
- PUBLIC_LIBRARIES
- Qt::Gui
- Qt::MultimediaPrivate
-)
diff --git a/tests/auto/unit/multimedia/qvideoencodersettingscontrol/qvideoencodersettingscontrol.pro b/tests/auto/unit/multimedia/qvideoencodersettingscontrol/qvideoencodersettingscontrol.pro
deleted file mode 100644
index 7b7ef7679..000000000
--- a/tests/auto/unit/multimedia/qvideoencodersettingscontrol/qvideoencodersettingscontrol.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-CONFIG += testcase
-TARGET = tst_qvideoencodersettingscontrol
-
-QT += multimedia-private testlib
-
-SOURCES += \
- tst_qvideoencodersettingscontrol.cpp
-
diff --git a/tests/auto/unit/multimedia/qvideoencodersettingscontrol/tst_qvideoencodersettingscontrol.cpp b/tests/auto/unit/multimedia/qvideoencodersettingscontrol/tst_qvideoencodersettingscontrol.cpp
deleted file mode 100644
index cae624135..000000000
--- a/tests/auto/unit/multimedia/qvideoencodersettingscontrol/tst_qvideoencodersettingscontrol.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//TESTED_COMPONENT=src/multimedia
-
-#include <QtTest/QtTest>
-#include "qvideoencodersettingscontrol.h"
-class MyVideEncoderControl: public QVideoEncoderSettingsControl
-{
- Q_OBJECT
-
-public:
- MyVideEncoderControl(QObject *parent = nullptr ):QVideoEncoderSettingsControl(parent)
- {
-
- }
-
- ~MyVideEncoderControl() override
- {
-
- }
-
- [[nodiscard]] QStringList supportedVideoCodecs() const override
- {
- return QStringList();
-
- }
-
- [[nodiscard]] QString videoCodecDescription(const QString &codecName) const override
- {
- Q_UNUSED(codecName);
- return QString();
-
- }
-
- [[nodiscard]] QVideoEncoderSettings videoSettings() const override
- {
- return QVideoEncoderSettings();
- }
-
- void setVideoSettings(const QVideoEncoderSettings &settings) override
- {
- Q_UNUSED(settings);
- }
-};
-
-class tst_QVideoEncoderSettingsControl: public QObject
-{
- Q_OBJECT
-private slots:
- void constructor();
-};
-
-void tst_QVideoEncoderSettingsControl::constructor()
-{
- QObject parent;
- MyVideEncoderControl control(&parent);
-}
-
-QTEST_MAIN(tst_QVideoEncoderSettingsControl)
-#include "tst_qvideoencodersettingscontrol.moc"
-
-