summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf4
-rw-r--r--examples/multimedia/audiodevices/audiodevices.cpp2
-rw-r--r--examples/multimedia/audioinput/audioinput.cpp4
-rw-r--r--examples/multimedia/audiooutput/audiooutput.cpp4
-rw-r--r--examples/multimedia/spectrum/app/engine.cpp12
-rw-r--r--examples/multimedia/spectrum/app/levelmeter.h6
-rw-r--r--examples/multimedia/spectrum/app/mainwidget.cpp2
-rw-r--r--examples/multimedia/spectrum/app/settingsdialog.cpp5
-rw-r--r--examples/multimedia/spectrum/app/waveform.cpp5
-rw-r--r--examples/multimedia/video/android/android.pro5
-rw-r--r--examples/multimedia/video/android/gstreamer/gstreamer.pro23
-rw-r--r--examples/multimedia/video/android/gstreamer/main.cpp115
-rw-r--r--examples/multimedia/video/android/gstreamer/main.qml75
-rw-r--r--examples/multimedia/video/android/gstreamer/qml.qrc5
-rw-r--r--examples/multimedia/video/video.pro2
-rw-r--r--examples/multimediawidgets/customvideosurface/customvideoitem/videoplayer.cpp2
-rw-r--r--examples/multimediawidgets/customvideosurface/customvideowidget/videoplayer.cpp2
-rw-r--r--examples/multimediawidgets/player/player.cpp2
-rw-r--r--examples/multimediawidgets/player/playercontrols.cpp2
-rw-r--r--examples/multimediawidgets/player/playlistmodel.cpp2
-rw-r--r--examples/multimediawidgets/videographicsitem/videoplayer.cpp2
-rw-r--r--examples/multimediawidgets/videowidget/videoplayer.cpp2
-rw-r--r--src/gsttools/gsttools.pro18
-rw-r--r--src/gsttools/qgstappsrc.cpp4
-rw-r--r--src/gsttools/qgstreamermirtexturerenderer.cpp357
-rw-r--r--src/gsttools/qgstreamermirtexturerenderer_p.h119
-rw-r--r--src/gsttools/qgstreamerplayercontrol.cpp8
-rw-r--r--src/gsttools/qgstreamerplayersession.cpp15
-rw-r--r--src/gsttools/qgstreamervideooverlay.cpp9
-rw-r--r--src/gsttools/qgstreamervideowidget.cpp2
-rw-r--r--src/gsttools/qgstutils.cpp16
-rw-r--r--src/gsttools/qgstutils_p.h2
-rw-r--r--src/gsttools/qgstvideorenderersink.cpp184
-rw-r--r--src/gsttools/qgstvideorenderersink_p.h14
-rw-r--r--src/imports/audioengine/qdeclarative_attenuationmodel_p.cpp2
-rw-r--r--src/imports/audioengine/qdeclarative_audiocategory_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_audioengine_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_audiolistener_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_audiosample_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_playvariation_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_sound_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_soundinstance_p.cpp1
-rw-r--r--src/imports/multimedia/plugins.qmltypes276
-rw-r--r--src/imports/multimedia/qdeclarativeplaylist.cpp6
-rw-r--r--src/imports/multimedia/qdeclarativeradio.cpp1
-rw-r--r--src/multimedia/audio/qaudiobuffer.cpp6
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo.cpp17
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo.h2
-rw-r--r--src/multimedia/audio/qsamplecache_p.cpp18
-rw-r--r--src/multimedia/audio/qsamplecache_p.h2
-rw-r--r--src/multimedia/camera/qcameraexposure.h4
-rw-r--r--src/multimedia/camera/qcamerafocus.cpp8
-rw-r--r--src/multimedia/camera/qcamerafocus.h8
-rw-r--r--src/multimedia/camera/qcameraimageprocessing.cpp8
-rw-r--r--src/multimedia/camera/qcameraimageprocessing.h8
-rw-r--r--src/multimedia/configure.json22
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/audio.cpp3
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/camera.cpp12
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/media.cpp4
-rw-r--r--src/multimedia/doc/src/platform-notes-gstreamer-on-android.qdoc59
-rw-r--r--src/multimedia/multimedia.pro10
-rw-r--r--src/multimedia/playback/qmediacontent.cpp24
-rw-r--r--src/multimedia/playback/qmediacontent.h5
-rw-r--r--src/multimedia/playback/qmediaplayer.cpp15
-rw-r--r--src/multimedia/playback/qplaylistfileparser.cpp2
-rw-r--r--src/multimedia/qmediaobject.cpp16
-rw-r--r--src/multimedia/qmediaobject.h4
-rw-r--r--src/multimedia/qmediaobject_p.h7
-rw-r--r--src/multimedia/qmediaservice.cpp9
-rw-r--r--src/multimedia/qmediaservice.h4
-rw-r--r--src/multimedia/qmediaservice_p.h9
-rw-r--r--src/multimedia/qmediaserviceprovider.cpp8
-rw-r--r--src/multimedia/qmediatimerange.cpp2
-rw-r--r--src/multimedia/qmediatimerange.h4
-rw-r--r--src/multimedia/radio/qradiodata.cpp1
-rw-r--r--src/multimedia/radio/qradiotuner.cpp1
-rw-r--r--src/multimedia/video/qvideoframe.cpp18
-rw-r--r--src/multimedia/video/qvideoframe.h1
-rw-r--r--src/multimedia/video/qvideosurfaceformat.cpp12
-rw-r--r--src/multimediawidgets/qvideowidget.cpp6
-rw-r--r--src/multimediawidgets/qvideowidget.h4
-rw-r--r--src/plugins/alsa/qalsaaudiodeviceinfo.cpp2
-rw-r--r--src/plugins/alsa/qalsaaudiodeviceinfo.h2
-rw-r--r--src/plugins/alsa/qalsaaudioinput.h6
-rw-r--r--src/plugins/alsa/qalsaaudiooutput.h6
-rw-r--r--src/plugins/android/src/common/qandroidvideooutput.cpp2
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp2
-rw-r--r--src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.cpp4
-rw-r--r--src/plugins/android/src/wrappers/jni/androidcamera.cpp95
-rw-r--r--src/plugins/avfoundation/camera/avfcamerasession.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.mm2
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm6
-rw-r--r--src/plugins/common/evr/evrcustompresenter.cpp30
-rw-r--r--src/plugins/common/evr/evrcustompresenter.h2
-rw-r--r--src/plugins/directshow/camera/dscameracontrol.cpp2
-rw-r--r--src/plugins/directshow/camera/dscameracontrol.h6
-rw-r--r--src/plugins/directshow/camera/dscameraservice.cpp6
-rw-r--r--src/plugins/directshow/camera/dscameraservice.h6
-rw-r--r--src/plugins/directshow/camera/dscamerasession.cpp51
-rw-r--r--src/plugins/directshow/camera/dscamerasession.h37
-rw-r--r--src/plugins/directshow/camera/dsvideodevicecontrol.cpp6
-rw-r--r--src/plugins/directshow/camera/dsvideodevicecontrol.h4
-rw-r--r--src/plugins/directshow/camera/dsvideorenderer.cpp1
-rw-r--r--src/plugins/directshow/camera/dsvideorenderer.h4
-rw-r--r--src/plugins/directshow/common/directshowbasefilter.cpp30
-rw-r--r--src/plugins/directshow/common/directshowbasefilter.h12
-rw-r--r--src/plugins/directshow/common/directshoweventloop.cpp7
-rw-r--r--src/plugins/directshow/common/directshoweventloop.h6
-rw-r--r--src/plugins/directshow/common/directshowglobal.h12
-rw-r--r--src/plugins/directshow/common/directshowmediatypeenum.cpp8
-rw-r--r--src/plugins/directshow/common/directshowmediatypeenum.h4
-rw-r--r--src/plugins/directshow/common/directshowpin.cpp31
-rw-r--r--src/plugins/directshow/common/directshowpin.h14
-rw-r--r--src/plugins/directshow/common/directshowpinenum.cpp5
-rw-r--r--src/plugins/directshow/common/directshowpinenum.h4
-rw-r--r--src/plugins/directshow/common/directshowsamplegrabber.cpp6
-rw-r--r--src/plugins/directshow/common/directshowsamplegrabber.h8
-rw-r--r--src/plugins/directshow/common/directshowutils.cpp2
-rw-r--r--src/plugins/directshow/common/directshowvideobuffer.cpp4
-rw-r--r--src/plugins/directshow/dsserviceplugin.cpp2
-rw-r--r--src/plugins/directshow/player/directshowaudioendpointcontrol.cpp22
-rw-r--r--src/plugins/directshow/player/directshowaudioendpointcontrol.h6
-rw-r--r--src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp1
-rw-r--r--src/plugins/directshow/player/directshowevrvideowindowcontrol.h4
-rw-r--r--src/plugins/directshow/player/directshowioreader.cpp34
-rw-r--r--src/plugins/directshow/player/directshowioreader.h24
-rw-r--r--src/plugins/directshow/player/directshowiosource.cpp19
-rw-r--r--src/plugins/directshow/player/directshowiosource.h18
-rw-r--r--src/plugins/directshow/player/directshowmetadatacontrol.cpp21
-rw-r--r--src/plugins/directshow/player/directshowmetadatacontrol.h4
-rw-r--r--src/plugins/directshow/player/directshowplayercontrol.cpp14
-rw-r--r--src/plugins/directshow/player/directshowplayercontrol.h30
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.cpp114
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.h66
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.cpp13
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.h8
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.cpp61
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.h24
-rw-r--r--src/plugins/directshow/player/vmr9videowindowcontrol.cpp13
-rw-r--r--src/plugins/directshow/player/vmr9videowindowcontrol.h20
-rw-r--r--src/plugins/gstreamer/camerabin/camerabincontrol.cpp2
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp4
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp8
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp8
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp5
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp10
-rw-r--r--src/plugins/m3u/qm3uhandler.cpp2
-rw-r--r--src/plugins/pulseaudio/qaudioinput_pulse.h6
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp2
-rw-r--r--src/plugins/windowsaudio/qwindowsaudioinput.cpp1
-rw-r--r--src/plugins/windowsaudio/qwindowsaudioinput.h6
-rw-r--r--src/plugins/windowsaudio/qwindowsaudiooutput.cpp1
-rw-r--r--src/plugins/windowsaudio/qwindowsaudiooutput.h6
-rw-r--r--src/plugins/winrt/qwinrtmediaplayercontrol.cpp19
-rw-r--r--src/plugins/wmf/player/mfplayersession.cpp2
-rw-r--r--src/plugins/wmf/player/mftvideo.cpp2
-rw-r--r--src/qtmultimediaquicktools/qdeclarativevideooutput_backend_p.h (renamed from src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_backend_p.h)0
-rw-r--r--src/qtmultimediaquicktools/qdeclarativevideooutput_p.h (renamed from src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h)0
-rw-r--r--src/qtmultimediaquicktools/qsgvideonode_p.h (renamed from src/multimedia/qtmultimediaquicktools_headers/qsgvideonode_p.h)0
-rw-r--r--src/qtmultimediaquicktools/qsgvideonode_texture.cpp4
-rw-r--r--src/qtmultimediaquicktools/qsgvideonode_yuv.cpp19
-rw-r--r--src/qtmultimediaquicktools/qtmultimediaquickdefs_p.h (renamed from src/multimedia/qtmultimediaquicktools_headers/qtmultimediaquickdefs_p.h)0
-rw-r--r--src/qtmultimediaquicktools/qtmultimediaquicktools.pro5
-rw-r--r--tests/auto/integration/qaudiodeviceinfo/tst_qaudiodeviceinfo.cpp3
-rw-r--r--tests/auto/integration/qaudioinput/BLACKLIST2
-rw-r--r--tests/auto/integration/qaudioinput/tst_qaudioinput.cpp2
-rw-r--r--tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp2
-rw-r--r--tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp24
-rw-r--r--tests/auto/integration/qdeclarativevideooutput/qdeclarativevideooutput.pro2
-rw-r--r--tests/auto/integration/qdeclarativevideooutput/tst_qdeclarativevideooutput.cpp4
-rw-r--r--tests/auto/integration/qdeclarativevideooutput_window/qdeclarativevideooutput_window.pro2
-rw-r--r--tests/auto/integration/qmediaplayerbackend/BLACKLIST6
-rw-r--r--tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp3
-rw-r--r--tests/auto/integration/shared/mediafileselector.h2
-rw-r--r--tests/auto/unit/qcamera/tst_qcamera.cpp20
-rw-r--r--tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp6
-rw-r--r--tests/auto/unit/qmediacontent/tst_qmediacontent.cpp34
-rw-r--r--tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp6
-rw-r--r--tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp30
-rw-r--r--tests/auto/unit/qmediapluginloader/tst_qmediapluginloader.cpp4
-rw-r--r--tests/auto/unit/qmediarecorder/tst_qmediarecorder.cpp40
-rw-r--r--tests/auto/unit/qmediaresource/tst_qmediaresource.cpp10
-rw-r--r--tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.pro2
-rw-r--r--tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.pro2
-rw-r--r--tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.pro2
-rw-r--r--tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.pro2
-rw-r--r--tests/auto/unit/qmediaserviceprovider/mockserviceplugin5/mockserviceplugin5.pro2
-rw-r--r--tests/auto/unit/qmediaserviceprovider/test/test.pro2
-rw-r--r--tests/auto/unit/qmultimedia_common/mockcameraexposurecontrol.h21
-rw-r--r--tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h3
-rw-r--r--tests/auto/unit/qpaintervideosurface/tst_qpaintervideosurface.cpp22
-rw-r--r--tests/auto/unit/qvideosurfaceformat/tst_qvideosurfaceformat.cpp4
192 files changed, 1636 insertions, 1361 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 543d0a842..f6895bb09 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -1,3 +1,5 @@
load(qt_build_config)
-MODULE_VERSION = 5.13.2
+DEFINES += QT_NO_FOREACH QT_NO_JAVA_STYLE_ITERATORS QT_NO_LINKED_LIST
+
+MODULE_VERSION = 5.14.0
diff --git a/examples/multimedia/audiodevices/audiodevices.cpp b/examples/multimedia/audiodevices/audiodevices.cpp
index 468dbc659..52ff2176a 100644
--- a/examples/multimedia/audiodevices/audiodevices.cpp
+++ b/examples/multimedia/audiodevices/audiodevices.cpp
@@ -150,7 +150,7 @@ void AudioTest::modeChanged(int idx)
deviceBox->clear();
const QAudio::Mode mode = idx == 0 ? QAudio::AudioInput : QAudio::AudioOutput;
for (auto &deviceInfo: QAudioDeviceInfo::availableDevices(mode))
- deviceBox->addItem(deviceInfo.deviceName(), qVariantFromValue(deviceInfo));
+ deviceBox->addItem(deviceInfo.deviceName(), QVariant::fromValue(deviceInfo));
deviceBox->setCurrentIndex(0);
deviceChanged(0);
diff --git a/examples/multimedia/audioinput/audioinput.cpp b/examples/multimedia/audioinput/audioinput.cpp
index ec6088780..86da20d51 100644
--- a/examples/multimedia/audioinput/audioinput.cpp
+++ b/examples/multimedia/audioinput/audioinput.cpp
@@ -239,10 +239,10 @@ void InputTest::initializeWindow()
m_deviceBox = new QComboBox(this);
const QAudioDeviceInfo &defaultDeviceInfo = QAudioDeviceInfo::defaultInputDevice();
- m_deviceBox->addItem(defaultDeviceInfo.deviceName(), qVariantFromValue(defaultDeviceInfo));
+ m_deviceBox->addItem(defaultDeviceInfo.deviceName(), QVariant::fromValue(defaultDeviceInfo));
for (auto &deviceInfo: QAudioDeviceInfo::availableDevices(QAudio::AudioInput)) {
if (deviceInfo != defaultDeviceInfo)
- m_deviceBox->addItem(deviceInfo.deviceName(), qVariantFromValue(deviceInfo));
+ m_deviceBox->addItem(deviceInfo.deviceName(), QVariant::fromValue(deviceInfo));
}
connect(m_deviceBox, QOverload<int>::of(&QComboBox::activated), this, &InputTest::deviceChanged);
diff --git a/examples/multimedia/audiooutput/audiooutput.cpp b/examples/multimedia/audiooutput/audiooutput.cpp
index 229727422..69b4470be 100644
--- a/examples/multimedia/audiooutput/audiooutput.cpp
+++ b/examples/multimedia/audiooutput/audiooutput.cpp
@@ -169,10 +169,10 @@ void AudioTest::initializeWindow()
m_deviceBox = new QComboBox(this);
const QAudioDeviceInfo &defaultDeviceInfo = QAudioDeviceInfo::defaultOutputDevice();
- m_deviceBox->addItem(defaultDeviceInfo.deviceName(), qVariantFromValue(defaultDeviceInfo));
+ m_deviceBox->addItem(defaultDeviceInfo.deviceName(), QVariant::fromValue(defaultDeviceInfo));
for (auto &deviceInfo: QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) {
if (deviceInfo != defaultDeviceInfo)
- m_deviceBox->addItem(deviceInfo.deviceName(), qVariantFromValue(deviceInfo));
+ m_deviceBox->addItem(deviceInfo.deviceName(), QVariant::fromValue(deviceInfo));
}
connect(m_deviceBox, QOverload<int>::of(&QComboBox::activated), this, &AudioTest::deviceChanged);
layout->addWidget(m_deviceBox);
diff --git a/examples/multimedia/spectrum/app/engine.cpp b/examples/multimedia/spectrum/app/engine.cpp
index 7e11d012b..fd977785b 100644
--- a/examples/multimedia/spectrum/app/engine.cpp
+++ b/examples/multimedia/spectrum/app/engine.cpp
@@ -570,14 +570,14 @@ bool Engine::selectFormat()
sampleRatesList += m_audioOutputDevice.supportedSampleRates();
sampleRatesList = sampleRatesList.toSet().toList(); // remove duplicates
- qSort(sampleRatesList);
+ std::sort(sampleRatesList.begin(), sampleRatesList.end());
ENGINE_DEBUG << "Engine::initialize frequenciesList" << sampleRatesList;
QList<int> channelsList;
channelsList += m_audioInputDevice.supportedChannelCounts();
channelsList += m_audioOutputDevice.supportedChannelCounts();
channelsList = channelsList.toSet().toList();
- qSort(channelsList);
+ std::sort(channelsList.begin(), channelsList.end());
ENGINE_DEBUG << "Engine::initialize channelsList" << channelsList;
QAudioFormat format;
@@ -585,12 +585,11 @@ bool Engine::selectFormat()
format.setCodec("audio/pcm");
format.setSampleSize(16);
format.setSampleType(QAudioFormat::SignedInt);
- int sampleRate, channels;
- foreach (sampleRate, sampleRatesList) {
+ for (int sampleRate : qAsConst(sampleRatesList)) {
if (foundSupportedFormat)
break;
format.setSampleRate(sampleRate);
- foreach (channels, channelsList) {
+ for (int channels : qAsConst(channelsList)) {
format.setChannelCount(channels);
const bool inputSupport = m_generateTone ||
m_audioInputDevice.isFormatSupported(format);
@@ -752,8 +751,7 @@ void Engine::createOutputDir()
// Ensure output directory exists and is empty
if (m_outputDir.exists()) {
const QStringList files = m_outputDir.entryList(QDir::Files);
- QString file;
- foreach (file, files)
+ for (const QString &file : files)
m_outputDir.remove(file);
} else {
QDir::current().mkdir("output");
diff --git a/examples/multimedia/spectrum/app/levelmeter.h b/examples/multimedia/spectrum/app/levelmeter.h
index 860e07ffc..987f90e8f 100644
--- a/examples/multimedia/spectrum/app/levelmeter.h
+++ b/examples/multimedia/spectrum/app/levelmeter.h
@@ -51,7 +51,7 @@
#ifndef LEVELMETER_H
#define LEVELMETER_H
-#include <QTime>
+#include <QElapsedTimer>
#include <QWidget>
/**
@@ -99,7 +99,7 @@ private:
/**
* Time at which m_peakLevel was last changed.
*/
- QTime m_peakLevelChanged;
+ QElapsedTimer m_peakLevelChanged;
/**
* Rate at which peak level bar decays.
@@ -116,7 +116,7 @@ private:
/**
* Time at which m_peakHoldLevel was last changed.
*/
- QTime m_peakHoldLevelChanged;
+ QElapsedTimer m_peakHoldLevelChanged;
QTimer *m_redrawTimer;
diff --git a/examples/multimedia/spectrum/app/mainwidget.cpp b/examples/multimedia/spectrum/app/mainwidget.cpp
index 945313f32..235608a05 100644
--- a/examples/multimedia/spectrum/app/mainwidget.cpp
+++ b/examples/multimedia/spectrum/app/mainwidget.cpp
@@ -265,7 +265,7 @@ void MainWidget::createUi()
QScopedPointer<QHBoxLayout> waveformLayout(new QHBoxLayout);
waveformLayout->addWidget(m_progressBar);
m_progressBar->setMinimumHeight(m_waveform->minimumHeight());
- waveformLayout->setMargin(0);
+ waveformLayout->setContentsMargins(0, 0, 0, 0);
m_waveform->setLayout(waveformLayout.data());
waveformLayout.take();
windowLayout->addWidget(m_waveform);
diff --git a/examples/multimedia/spectrum/app/settingsdialog.cpp b/examples/multimedia/spectrum/app/settingsdialog.cpp
index f1723077e..889fcf639 100644
--- a/examples/multimedia/spectrum/app/settingsdialog.cpp
+++ b/examples/multimedia/spectrum/app/settingsdialog.cpp
@@ -72,11 +72,10 @@ SettingsDialog::SettingsDialog(
// Populate combo boxes
- QAudioDeviceInfo device;
- foreach (device, availableInputDevices)
+ for (const QAudioDeviceInfo &device : availableInputDevices)
m_inputDeviceComboBox->addItem(device.deviceName(),
QVariant::fromValue(device));
- foreach (device, availableOutputDevices)
+ for (const QAudioDeviceInfo &device : availableOutputDevices)
m_outputDeviceComboBox->addItem(device.deviceName(),
QVariant::fromValue(device));
diff --git a/examples/multimedia/spectrum/app/waveform.cpp b/examples/multimedia/spectrum/app/waveform.cpp
index 33e0297bc..d0058b2e3 100644
--- a/examples/multimedia/spectrum/app/waveform.cpp
+++ b/examples/multimedia/spectrum/app/waveform.cpp
@@ -243,10 +243,7 @@ void Waveform::audioPositionChanged(qint64 position)
void Waveform::deletePixmaps()
{
- QPixmap *pixmap;
- foreach (pixmap, m_pixmaps)
- delete pixmap;
- m_pixmaps.clear();
+ qDeleteAll(qExchange(m_pixmaps, {}));
}
void Waveform::createPixmaps(const QSize &widgetSize)
diff --git a/examples/multimedia/video/android/android.pro b/examples/multimedia/video/android/android.pro
new file mode 100644
index 000000000..95ed21e17
--- /dev/null
+++ b/examples/multimedia/video/android/android.pro
@@ -0,0 +1,5 @@
+TEMPLATE = subdirs
+
+QT_FOR_CONFIG += multimedia-private
+
+qtConfig(gstreamer): SUBDIRS += gstreamer
diff --git a/examples/multimedia/video/android/gstreamer/gstreamer.pro b/examples/multimedia/video/android/gstreamer/gstreamer.pro
new file mode 100644
index 000000000..edc040adc
--- /dev/null
+++ b/examples/multimedia/video/android/gstreamer/gstreamer.pro
@@ -0,0 +1,23 @@
+QT += quick multimedia multimediawidgets
+CONFIG += c++11
+
+SOURCES += main.cpp
+
+RESOURCES += qml.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/multimedia/video/android/gstreamer
+INSTALLS += target
+
+GSTREAMER_ROOT_ANDROID = $$(GSTREAMER_ROOT_ANDROID)
+isEmpty(GSTREAMER_ROOT_ANDROID): error("GSTREAMER_ROOT_ANDROID is empty")
+
+INCLUDEPATH += $(GSTREAMER_ROOT_ANDROID)/armv7/include/ $(GSTREAMER_ROOT_ANDROID)/armv7/include/gstreamer-1.0 $(GSTREAMER_ROOT_ANDROID)/armv7/include/glib-2.0 $(GSTREAMER_ROOT_ANDROID)/armv7/lib/glib-2.0/include
+
+QT+=multimediagsttools-private
+LIBS += -L$(GSTREAMER_ROOT_ANDROID)/armv7/lib/ -L$(GSTREAMER_ROOT_ANDROID)/armv7/lib/gstreamer-1.0 \
+-lgstcoreelements -lgstplayback -lgstvideotestsrc -lgstaudioconvert -lgstvideoconvert -lgstautodetect -lgsttypefindfunctions \
+#PLUGINS codecs
+-lgstvorbis -lvorbis -lgstivorbisdec -lvorbisenc -lvorbisfile -lgstsubparse -lgstaudioparsers \
+-lgstgio -lgstapp -lgstisomp4 -lgstavi -lgstogg -lgstwavenc -lgstwavpack -lgstwavparse -lgsttheora -lgstmpg123 -lgstx264 -lgstlibav \
+-lgsttcp -lgstsoup -logg -ltheora -lmpg123 -lx264 -lavfilter -lavformat -lavcodec -lavutil -lbz2 -lswresample \
+-lsoup-2.4 -lgio-2.0 -lgstrtp-1.0 -lgstriff-1.0 -lgstnet-1.0
diff --git a/examples/multimedia/video/android/gstreamer/main.cpp b/examples/multimedia/video/android/gstreamer/main.cpp
new file mode 100644
index 000000000..56037aece
--- /dev/null
+++ b/examples/multimedia/video/android/gstreamer/main.cpp
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** 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.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+
+#include <private/qgstutils_p.h>
+
+#include <gst/gstplugin.h>
+extern "C" {
+GST_PLUGIN_STATIC_DECLARE(coreelements);
+GST_PLUGIN_STATIC_DECLARE(playback);
+GST_PLUGIN_STATIC_DECLARE(videotestsrc);
+GST_PLUGIN_STATIC_DECLARE(audioconvert);
+GST_PLUGIN_STATIC_DECLARE(videoconvert);
+GST_PLUGIN_STATIC_DECLARE(autodetect);
+GST_PLUGIN_STATIC_DECLARE(gio);
+GST_PLUGIN_STATIC_DECLARE(soup);
+GST_PLUGIN_STATIC_DECLARE(app);
+GST_PLUGIN_STATIC_DECLARE(isomp4);
+GST_PLUGIN_STATIC_DECLARE(avi);
+GST_PLUGIN_STATIC_DECLARE(ogg);
+GST_PLUGIN_STATIC_DECLARE(vorbis);
+GST_PLUGIN_STATIC_DECLARE(tcp);
+GST_PLUGIN_STATIC_DECLARE(audioparsers);
+GST_PLUGIN_STATIC_DECLARE(theora);
+GST_PLUGIN_STATIC_DECLARE(mpg123);
+GST_PLUGIN_STATIC_DECLARE(typefindfunctions);
+GST_PLUGIN_STATIC_DECLARE(x264);
+GST_PLUGIN_STATIC_DECLARE(libav);
+};
+
+int main(int argc, char *argv[])
+{
+ QGstUtils::initializeGst();
+
+ GST_PLUGIN_STATIC_REGISTER(coreelements);
+ GST_PLUGIN_STATIC_REGISTER(playback);
+ GST_PLUGIN_STATIC_REGISTER(videotestsrc);
+ GST_PLUGIN_STATIC_REGISTER(audioconvert);
+ GST_PLUGIN_STATIC_REGISTER(videoconvert);
+ GST_PLUGIN_STATIC_REGISTER(autodetect);
+ GST_PLUGIN_STATIC_REGISTER(soup);
+ GST_PLUGIN_STATIC_REGISTER(gio);
+ GST_PLUGIN_STATIC_REGISTER(app);
+ GST_PLUGIN_STATIC_REGISTER(isomp4);
+ GST_PLUGIN_STATIC_REGISTER(avi);
+ GST_PLUGIN_STATIC_REGISTER(ogg);
+ GST_PLUGIN_STATIC_REGISTER(vorbis);
+ GST_PLUGIN_STATIC_REGISTER(tcp);
+ GST_PLUGIN_STATIC_REGISTER(audioparsers);
+ GST_PLUGIN_STATIC_REGISTER(theora);
+ GST_PLUGIN_STATIC_REGISTER(mpg123);
+ GST_PLUGIN_STATIC_REGISTER(typefindfunctions);
+ GST_PLUGIN_STATIC_REGISTER(x264);
+ GST_PLUGIN_STATIC_REGISTER(libav);
+
+ QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+
+ QGuiApplication app(argc, argv);
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QLatin1String("qrc:/main.qml")));
+ if (engine.rootObjects().isEmpty())
+ return -1;
+
+ return app.exec();
+}
diff --git a/examples/multimedia/video/android/gstreamer/main.qml b/examples/multimedia/video/android/gstreamer/main.qml
new file mode 100644
index 000000000..99acb558c
--- /dev/null
+++ b/examples/multimedia/video/android/gstreamer/main.qml
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** 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.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Controls 2.0
+import QtQuick.Layouts 1.3
+import QtMultimedia 5.12
+
+ApplicationWindow {
+ visible: true
+ width: 640
+ height: 480
+
+ Video {
+ id: video
+ anchors.fill: parent
+ autoPlay: true
+ autoLoad: true
+ source: "gst-pipeline: videotestsrc ! qtvideosink"
+ }
+
+ MouseArea {
+ anchors.fill: video
+ onClicked: {
+ video.play()
+ }
+ }
+}
diff --git a/examples/multimedia/video/android/gstreamer/qml.qrc b/examples/multimedia/video/android/gstreamer/qml.qrc
new file mode 100644
index 000000000..5f6483ac3
--- /dev/null
+++ b/examples/multimedia/video/android/gstreamer/qml.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/">
+ <file>main.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/multimedia/video/video.pro b/examples/multimedia/video/video.pro
index f38cbc124..ef5bc849d 100644
--- a/examples/multimedia/video/video.pro
+++ b/examples/multimedia/video/video.pro
@@ -5,3 +5,5 @@ SUBDIRS += qmlvideo qmlvideofx
EXAMPLE_FILES += \
qmlvideofilter_opencl \ # FIXME: this one should use a configure check instead
snippets
+
+android: SUBDIRS += android
diff --git a/examples/multimediawidgets/customvideosurface/customvideoitem/videoplayer.cpp b/examples/multimediawidgets/customvideosurface/customvideoitem/videoplayer.cpp
index 60b93a116..1fdd1c7f7 100644
--- a/examples/multimediawidgets/customvideosurface/customvideoitem/videoplayer.cpp
+++ b/examples/multimediawidgets/customvideosurface/customvideoitem/videoplayer.cpp
@@ -101,7 +101,7 @@ VideoPlayer::VideoPlayer(QWidget *parent)
this, &VideoPlayer::setPosition);
QBoxLayout *controlLayout = new QHBoxLayout;
- controlLayout->setMargin(0);
+ controlLayout->setContentsMargins(0, 0, 0, 0);
controlLayout->addWidget(openButton);
controlLayout->addWidget(playButton);
controlLayout->addWidget(positionSlider);
diff --git a/examples/multimediawidgets/customvideosurface/customvideowidget/videoplayer.cpp b/examples/multimediawidgets/customvideosurface/customvideowidget/videoplayer.cpp
index 7730f8140..5c1ca4221 100644
--- a/examples/multimediawidgets/customvideosurface/customvideowidget/videoplayer.cpp
+++ b/examples/multimediawidgets/customvideosurface/customvideowidget/videoplayer.cpp
@@ -81,7 +81,7 @@ VideoPlayer::VideoPlayer(QWidget *parent)
this, &VideoPlayer::setPosition);
QBoxLayout *controlLayout = new QHBoxLayout;
- controlLayout->setMargin(0);
+ controlLayout->setContentsMargins(0, 0, 0, 0);
controlLayout->addWidget(openButton);
controlLayout->addWidget(playButton);
controlLayout->addWidget(positionSlider);
diff --git a/examples/multimediawidgets/player/player.cpp b/examples/multimediawidgets/player/player.cpp
index 89246e65c..04da42587 100644
--- a/examples/multimediawidgets/player/player.cpp
+++ b/examples/multimediawidgets/player/player.cpp
@@ -158,7 +158,7 @@ Player::Player(QWidget *parent)
displayLayout->addWidget(m_playlistView);
QBoxLayout *controlLayout = new QHBoxLayout;
- controlLayout->setMargin(0);
+ controlLayout->setContentsMargins(0, 0, 0, 0);
controlLayout->addWidget(openButton);
controlLayout->addStretch(1);
controlLayout->addWidget(controls);
diff --git a/examples/multimediawidgets/player/playercontrols.cpp b/examples/multimediawidgets/player/playercontrols.cpp
index 2a1869b93..3c06c01c6 100644
--- a/examples/multimediawidgets/player/playercontrols.cpp
+++ b/examples/multimediawidgets/player/playercontrols.cpp
@@ -100,7 +100,7 @@ PlayerControls::PlayerControls(QWidget *parent)
connect(m_rateBox, QOverload<int>::of(&QComboBox::activated), this, &PlayerControls::updateRate);
QBoxLayout *layout = new QHBoxLayout;
- layout->setMargin(0);
+ layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(m_stopButton);
layout->addWidget(m_previousButton);
layout->addWidget(m_playButton);
diff --git a/examples/multimediawidgets/player/playlistmodel.cpp b/examples/multimediawidgets/player/playlistmodel.cpp
index e5246bc37..718c24d2d 100644
--- a/examples/multimediawidgets/player/playlistmodel.cpp
+++ b/examples/multimediawidgets/player/playlistmodel.cpp
@@ -94,7 +94,7 @@ QVariant PlaylistModel::data(const QModelIndex &index, int role) const
if (index.isValid() && role == Qt::DisplayRole) {
QVariant value = m_data[index];
if (!value.isValid() && index.column() == Title) {
- QUrl location = m_playlist->media(index.row()).canonicalUrl();
+ QUrl location = m_playlist->media(index.row()).request().url();
return QFileInfo(location.path()).fileName();
}
diff --git a/examples/multimediawidgets/videographicsitem/videoplayer.cpp b/examples/multimediawidgets/videographicsitem/videoplayer.cpp
index 995c86d3e..39c113fe5 100644
--- a/examples/multimediawidgets/videographicsitem/videoplayer.cpp
+++ b/examples/multimediawidgets/videographicsitem/videoplayer.cpp
@@ -90,7 +90,7 @@ VideoPlayer::VideoPlayer(QWidget *parent)
this, &VideoPlayer::setPosition);
QBoxLayout *controlLayout = new QHBoxLayout;
- controlLayout->setMargin(0);
+ controlLayout->setContentsMargins(0, 0, 0, 0);
controlLayout->addWidget(openButton);
controlLayout->addWidget(m_playButton);
controlLayout->addWidget(m_positionSlider);
diff --git a/examples/multimediawidgets/videowidget/videoplayer.cpp b/examples/multimediawidgets/videowidget/videoplayer.cpp
index e7ad670fa..1db269503 100644
--- a/examples/multimediawidgets/videowidget/videoplayer.cpp
+++ b/examples/multimediawidgets/videowidget/videoplayer.cpp
@@ -79,7 +79,7 @@ VideoPlayer::VideoPlayer(QWidget *parent)
m_errorLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
QBoxLayout *controlLayout = new QHBoxLayout;
- controlLayout->setMargin(0);
+ controlLayout->setContentsMargins(0, 0, 0, 0);
controlLayout->addWidget(openButton);
controlLayout->addWidget(m_playButton);
controlLayout->addWidget(m_positionSlider);
diff --git a/src/gsttools/gsttools.pro b/src/gsttools/gsttools.pro
index b13479ce7..0127cbe92 100644
--- a/src/gsttools/gsttools.pro
+++ b/src/gsttools/gsttools.pro
@@ -82,14 +82,7 @@ qtConfig(gstreamer_0_10) {
qgstvideorenderersink.cpp
}
-qtConfig(mirclient): {
- qtConfig(opengles2):qtHaveModule(widgets) {
- PRIVATE_HEADERS += qgstreamermirtexturerenderer_p.h
- SOURCES += qgstreamermirtexturerenderer.cpp
- QT += opengl quick
- LIBS += -lEGL
- }
-}
+qtConfig(gstreamer_gl): QMAKE_USE += gstreamer_gl
qtConfig(gstreamer_app) {
QMAKE_USE += gstreamer_app
@@ -97,6 +90,15 @@ qtConfig(gstreamer_app) {
SOURCES += qgstappsrc.cpp
}
+android {
+ LIBS_PRIVATE += \
+ -L$$(GSTREAMER_ROOT_ANDROID)/armv7/lib \
+ -Wl,--whole-archive \
+ -lgstapp-1.0 -lgstreamer-1.0 -lgstaudio-1.0 -lgsttag-1.0 -lgstvideo-1.0 -lgstbase-1.0 -lgstpbutils-1.0 \
+ -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lffi -lintl -liconv -lorc-0.4 \
+ -Wl,--no-whole-archive
+}
+
HEADERS += $$PRIVATE_HEADERS
load(qt_module)
diff --git a/src/gsttools/qgstappsrc.cpp b/src/gsttools/qgstappsrc.cpp
index 3e8b8b9b3..d5c44ec08 100644
--- a/src/gsttools/qgstappsrc.cpp
+++ b/src/gsttools/qgstappsrc.cpp
@@ -187,10 +187,10 @@ void QGstAppSrc::pushDataToAppSrc()
}
#endif
}
- } else {
+ } else if (!m_sequential) {
sendEOS();
}
- } else if (m_stream->atEnd()) {
+ } else if (m_stream->atEnd() && !m_sequential) {
sendEOS();
}
}
diff --git a/src/gsttools/qgstreamermirtexturerenderer.cpp b/src/gsttools/qgstreamermirtexturerenderer.cpp
deleted file mode 100644
index 35050db03..000000000
--- a/src/gsttools/qgstreamermirtexturerenderer.cpp
+++ /dev/null
@@ -1,357 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Canonical 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 "qgstreamermirtexturerenderer_p.h"
-
-#include <qgstreamerplayersession.h>
-#include <private/qvideosurfacegstsink_p.h>
-#include <private/qgstutils_p.h>
-#include <qabstractvideosurface.h>
-
-#include <QAbstractVideoBuffer>
-#include <QGuiApplication>
-#include <QDebug>
-#include <QtQuick/QQuickWindow>
-#include <QOpenGLContext>
-#include <QGLContext>
-#include <QGuiApplication>
-#include <qgl.h>
-
-#include <gst/gst.h>
-
-static QGstreamerMirTextureRenderer *rendererInstance = NULL;
-
-class QGstreamerMirTextureBuffer : public QAbstractVideoBuffer
-{
-public:
- QGstreamerMirTextureBuffer(GLuint textureId) :
- QAbstractVideoBuffer(QAbstractVideoBuffer::GLTextureHandle),
- m_textureId(textureId)
- {
- }
-
- MapMode mapMode() const { return NotMapped; }
-
- uchar *map(MapMode mode, int *numBytes, int *bytesPerLine)
- {
- qDebug() << Q_FUNC_INFO;
- Q_UNUSED(mode);
- Q_UNUSED(numBytes);
- Q_UNUSED(bytesPerLine);
-
- return NULL;
- }
-
- void unmap() { qDebug() << Q_FUNC_INFO; }
-
- QVariant handle() const { return QVariant::fromValue<unsigned int>(m_textureId); }
-
- GLuint textureId() { return m_textureId; }
-
-private:
- GLuint m_textureId;
-};
-
-QGstreamerMirTextureRenderer::QGstreamerMirTextureRenderer(QObject *parent
- , const QGstreamerPlayerSession *playerSession)
- : QVideoRendererControl(0), m_videoSink(0), m_surface(0),
- m_glSurface(0),
- m_context(0),
- m_glContext(0),
- m_textureId(0),
- m_offscreenSurface(0),
- m_textureBuffer(0)
-{
- Q_UNUSED(parent);
- setPlayerSession(playerSession);
-}
-
-QGstreamerMirTextureRenderer::~QGstreamerMirTextureRenderer()
-{
- if (m_videoSink)
- gst_object_unref(GST_OBJECT(m_videoSink));
-
- delete m_glContext;
- delete m_offscreenSurface;
-}
-
-GstElement *QGstreamerMirTextureRenderer::videoSink()
-{
- qDebug() << Q_FUNC_INFO;
-
- // FIXME: Ugly hack until I figure out why passing this segfaults in the g_signal handler
- rendererInstance = const_cast<QGstreamerMirTextureRenderer*>(this);
-
- if (!m_videoSink && m_surface) {
- qDebug() << Q_FUNC_INFO << ": using mirsink, (this: " << this << ")";
-
- m_videoSink = gst_element_factory_make("mirsink", "video-output");
-
- connect(QGuiApplication::instance(), SIGNAL(focusWindowChanged(QWindow*)),
- this, SLOT(handleFocusWindowChanged(QWindow*)), Qt::QueuedConnection);
-
- g_signal_connect(G_OBJECT(m_videoSink), "frame-ready", G_CALLBACK(handleFrameReady),
- (gpointer)this);
- }
-
- if (m_videoSink) {
- gst_object_ref_sink(GST_OBJECT(m_videoSink));
-
- GstPad *pad = gst_element_get_static_pad(m_videoSink, "sink");
- gst_pad_add_probe(pad, GST_PAD_PROBE_TYPE_BUFFER,
- padBufferProbe, this, NULL);
- }
-
- return m_videoSink;
-}
-
-QWindow *QGstreamerMirTextureRenderer::createOffscreenWindow(const QSurfaceFormat &format)
-{
- QWindow *w = new QWindow();
- w->setSurfaceType(QWindow::OpenGLSurface);
- w->setFormat(format);
- w->setGeometry(0, 0, 1, 1);
- w->setFlags(w->flags() | Qt::WindowTransparentForInput);
- w->create();
-
- return w;
-}
-
-void QGstreamerMirTextureRenderer::handleFrameReady(gpointer userData)
-{
- QGstreamerMirTextureRenderer *renderer = reinterpret_cast<QGstreamerMirTextureRenderer*>(userData);
-#if 1
- QMutexLocker locker(&rendererInstance->m_mutex);
- QMetaObject::invokeMethod(rendererInstance, "renderFrame", Qt::QueuedConnection);
-#else
- // FIXME!
- //QMutexLocker locker(&renderer->m_mutex);
- QMetaObject::invokeMethod(renderer, "renderFrame", Qt::QueuedConnection);
-#endif
-}
-
-void QGstreamerMirTextureRenderer::renderFrame()
-{
- //qDebug() << Q_FUNC_INFO;
-
- if (m_context)
- m_context->makeCurrent();
-
- GstState pendingState = GST_STATE_NULL;
- GstState newState = GST_STATE_NULL;
- // Don't block and return immediately:
- GstStateChangeReturn ret = gst_element_get_state(m_videoSink, &newState,
- &pendingState, 0);
- if (ret == GST_STATE_CHANGE_FAILURE || newState == GST_STATE_NULL||
- pendingState == GST_STATE_NULL) {
- qWarning() << "Invalid state change for renderer, aborting";
- stopRenderer();
- return;
- }
-
- if (!m_surface->isActive()) {
- qDebug() << "m_surface is not active";
- GstPad *pad = gst_element_get_static_pad(m_videoSink, "sink");
- GstCaps *caps = gst_pad_get_current_caps(pad);
-
- if (caps) {
- // Get the native video size from the video sink
- QSize newNativeSize = QGstUtils::capsCorrectedResolution(caps);
- if (m_nativeSize != newNativeSize) {
- m_nativeSize = newNativeSize;
- emit nativeSizeChanged();
- }
- gst_caps_unref(caps);
- }
-
- // Start the surface
- QVideoSurfaceFormat format(m_nativeSize, QVideoFrame::Format_RGB32, QAbstractVideoBuffer::GLTextureHandle);
- qDebug() << "m_nativeSize: " << m_nativeSize;
- qDebug() << "format: " << format;
- if (!m_surface->start(format)) {
- qWarning() << Q_FUNC_INFO << ": failed to start the video surface " << format;
- return;
- }
- }
-
- QGstreamerMirTextureBuffer *buffer = new QGstreamerMirTextureBuffer(m_textureId);
- //qDebug() << "frameSize: " << m_surface->surfaceFormat().frameSize();
- QVideoFrame frame(buffer, m_surface->surfaceFormat().frameSize(),
- m_surface->surfaceFormat().pixelFormat());
-
- frame.setMetaData("TextureId", m_textureId);
-
- // Display the video frame on the surface:
- m_surface->present(frame);
-}
-
-GstPadProbeReturn QGstreamerMirTextureRenderer::padBufferProbe(GstPad *pad, GstPadProbeInfo *info, gpointer userData)
-{
- Q_UNUSED(pad);
- Q_UNUSED(info);
-
- QGstreamerMirTextureRenderer *control = reinterpret_cast<QGstreamerMirTextureRenderer*>(userData);
- QMetaObject::invokeMethod(control, "updateNativeVideoSize", Qt::QueuedConnection);
-
- return GST_PAD_PROBE_REMOVE;
-}
-
-void QGstreamerMirTextureRenderer::stopRenderer()
-{
- if (m_surface)
- m_surface->stop();
-}
-
-QAbstractVideoSurface *QGstreamerMirTextureRenderer::surface() const
-{
- return m_surface;
-}
-
-void QGstreamerMirTextureRenderer::setSurface(QAbstractVideoSurface *surface)
-{
- qDebug() << Q_FUNC_INFO;
-
- if (m_surface != surface) {
- qDebug() << "Saving current QGLContext";
- m_context = const_cast<QGLContext*>(QGLContext::currentContext());
-
- if (m_videoSink)
- gst_object_unref(GST_OBJECT(m_videoSink));
-
- m_videoSink = 0;
-
- if (m_surface) {
- disconnect(m_surface.data(), SIGNAL(supportedFormatsChanged()),
- this, SLOT(handleFormatChange()));
- }
-
- bool wasReady = isReady();
-
- m_surface = surface;
-
- if (m_surface) {
- connect(m_surface.data(), SIGNAL(supportedFormatsChanged()),
- this, SLOT(handleFormatChange()));
- }
-
- if (wasReady != isReady())
- emit readyChanged(isReady());
-
- emit sinkChanged();
- }
-}
-
-void QGstreamerMirTextureRenderer::setPlayerSession(const QGstreamerPlayerSession *playerSession)
-{
- m_playerSession = const_cast<QGstreamerPlayerSession*>(playerSession);
-}
-
-void QGstreamerMirTextureRenderer::handleFormatChange()
-{
- qDebug() << "Supported formats list has changed, reload video output";
-
- if (m_videoSink)
- gst_object_unref(GST_OBJECT(m_videoSink));
-
- m_videoSink = 0;
- emit sinkChanged();
-}
-
-void QGstreamerMirTextureRenderer::updateNativeVideoSize()
-{
- //qDebug() << Q_FUNC_INFO;
- const QSize oldSize = m_nativeSize;
-
- if (m_videoSink) {
- // Find video native size to update video widget size hint
- GstPad *pad = gst_element_get_static_pad(m_videoSink,"sink");
- GstCaps *caps = gst_pad_get_current_caps(pad);
-
- if (caps) {
- m_nativeSize = QGstUtils::capsCorrectedResolution(caps);
- gst_caps_unref(caps);
- }
- } else {
- m_nativeSize = QSize();
- }
- qDebug() << Q_FUNC_INFO << oldSize << m_nativeSize << m_videoSink;
-
- if (m_nativeSize != oldSize)
- emit nativeSizeChanged();
-}
-
-void QGstreamerMirTextureRenderer::handleFocusWindowChanged(QWindow *window)
-{
- qDebug() << Q_FUNC_INFO;
-
- QOpenGLContext *currContext = QOpenGLContext::currentContext();
-
- QQuickWindow *w = dynamic_cast<QQuickWindow*>(window);
- // If we don't have a GL context in the current thread, create one and share it
- // with the render thread GL context
- if (!currContext && !m_glContext) {
- // This emulates the new QOffscreenWindow class with Qt5.1
- m_offscreenSurface = createOffscreenWindow(w->openglContext()->surface()->format());
- m_offscreenSurface->setParent(window);
-
- QOpenGLContext *shareContext = 0;
- if (m_surface)
- shareContext = qobject_cast<QOpenGLContext*>(m_surface->property("GLContext").value<QObject*>());
- m_glContext = new QOpenGLContext;
- m_glContext->setFormat(m_offscreenSurface->requestedFormat());
-
- if (shareContext)
- m_glContext->setShareContext(shareContext);
-
- if (!m_glContext->create())
- {
- qWarning() << "Failed to create new shared context.";
- return;
- }
- }
-
- if (m_glContext)
- m_glContext->makeCurrent(m_offscreenSurface);
-
- if (m_textureId == 0) {
- glGenTextures(1, &m_textureId);
- qDebug() << "texture_id (handleFocusWindowChanged): " << m_textureId << endl;
- g_object_set(G_OBJECT(m_videoSink), "texture-id", m_textureId, (char*)NULL);
- }
-}
diff --git a/src/gsttools/qgstreamermirtexturerenderer_p.h b/src/gsttools/qgstreamermirtexturerenderer_p.h
deleted file mode 100644
index 62150f7e1..000000000
--- a/src/gsttools/qgstreamermirtexturerenderer_p.h
+++ /dev/null
@@ -1,119 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Canonical 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 QGSTREAMERMIRTEXTURERENDERER_H
-#define QGSTREAMERMIRTEXTURERENDERER_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 <qmediaplayer.h>
-#include <qvideorenderercontrol.h>
-#include <private/qvideosurfacegstsink_p.h>
-#include <qabstractvideosurface.h>
-
-#include "qgstreamervideorendererinterface_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QGstreamerMirTextureBuffer;
-class QGstreamerPlayerSession;
-class QGLContext;
-class QOpenGLContext;
-class QSurfaceFormat;
-
-class QGstreamerMirTextureRenderer : public QVideoRendererControl, public QGstreamerVideoRendererInterface
-{
- Q_OBJECT
- Q_INTERFACES(QGstreamerVideoRendererInterface)
-public:
- QGstreamerMirTextureRenderer(QObject *parent = 0, const QGstreamerPlayerSession *playerSession = 0);
- virtual ~QGstreamerMirTextureRenderer();
-
- QAbstractVideoSurface *surface() const;
- void setSurface(QAbstractVideoSurface *surface);
-
- void setPlayerSession(const QGstreamerPlayerSession *playerSession);
-
- GstElement *videoSink();
-
- void stopRenderer();
- bool isReady() const { return m_surface != 0; }
-
-signals:
- void sinkChanged();
- void readyChanged(bool);
- void nativeSizeChanged();
-
-private slots:
- void handleFormatChange();
- void updateNativeVideoSize();
- void handleFocusWindowChanged(QWindow *window);
- void renderFrame();
-
-private:
- QWindow *createOffscreenWindow(const QSurfaceFormat &format);
- static void handleFrameReady(gpointer userData);
- static GstPadProbeReturn padBufferProbe(GstPad *pad, GstPadProbeInfo *info, gpointer userData);
-
- GstElement *m_videoSink;
- QPointer<QAbstractVideoSurface> m_surface;
- QPointer<QAbstractVideoSurface> m_glSurface;
- QGLContext *m_context;
- QOpenGLContext *m_glContext;
- unsigned int m_textureId;
- QWindow *m_offscreenSurface;
- QGstreamerPlayerSession *m_playerSession;
- QGstreamerMirTextureBuffer *m_textureBuffer;
- QSize m_nativeSize;
-
- QMutex m_mutex;
-};
-
-QT_END_NAMESPACE
-
-#endif // QGSTREAMERMIRTEXTURERENDRER_H
diff --git a/src/gsttools/qgstreamerplayercontrol.cpp b/src/gsttools/qgstreamerplayercontrol.cpp
index 7c96b682f..bd4c90ac5 100644
--- a/src/gsttools/qgstreamerplayercontrol.cpp
+++ b/src/gsttools/qgstreamerplayercontrol.cpp
@@ -362,14 +362,10 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent &content, QIODevice *
m_currentResource = content;
m_stream = stream;
- QNetworkRequest request;
+ QNetworkRequest request = content.request();
- if (m_stream) {
+ if (m_stream)
userStreamValid = stream->isOpen() && m_stream->isReadable();
- request = content.canonicalRequest();
- } else if (!content.isNull()) {
- request = content.canonicalRequest();
- }
#if !QT_CONFIG(gstreamer_app)
m_session->loadFromUri(request);
diff --git a/src/gsttools/qgstreamerplayersession.cpp b/src/gsttools/qgstreamerplayersession.cpp
index c0998d7ae..b9e1c084f 100644
--- a/src/gsttools/qgstreamerplayersession.cpp
+++ b/src/gsttools/qgstreamerplayersession.cpp
@@ -179,13 +179,26 @@ void QGstreamerPlayerSession::initPlaybin()
m_videoOutputBin = gst_bin_new("video-output-bin");
// might not get a parent, take ownership to avoid leak
qt_gst_object_ref_sink(GST_OBJECT(m_videoOutputBin));
+
+ GstElement *videoOutputSink = m_videoIdentity;
+#if QT_CONFIG(gstreamer_gl)
+ if (QGstUtils::useOpenGL()) {
+ videoOutputSink = gst_element_factory_make("glupload", NULL);
+ GstElement *colorConvert = gst_element_factory_make("glcolorconvert", NULL);
+ gst_bin_add_many(GST_BIN(m_videoOutputBin), videoOutputSink, colorConvert, m_videoIdentity, m_nullVideoSink, NULL);
+ gst_element_link_many(videoOutputSink, colorConvert, m_videoIdentity, NULL);
+ } else {
+ gst_bin_add_many(GST_BIN(m_videoOutputBin), m_videoIdentity, m_nullVideoSink, NULL);
+ }
+#else
gst_bin_add_many(GST_BIN(m_videoOutputBin), m_videoIdentity, m_nullVideoSink, NULL);
+#endif
gst_element_link(m_videoIdentity, m_nullVideoSink);
m_videoSink = m_nullVideoSink;
// add ghostpads
- GstPad *pad = gst_element_get_static_pad(m_videoIdentity,"sink");
+ GstPad *pad = gst_element_get_static_pad(videoOutputSink, "sink");
gst_element_add_pad(GST_ELEMENT(m_videoOutputBin), gst_ghost_pad_new("sink", pad));
gst_object_unref(GST_OBJECT(pad));
diff --git a/src/gsttools/qgstreamervideooverlay.cpp b/src/gsttools/qgstreamervideooverlay.cpp
index 1f3e28549..6b862e475 100644
--- a/src/gsttools/qgstreamervideooverlay.cpp
+++ b/src/gsttools/qgstreamervideooverlay.cpp
@@ -48,6 +48,8 @@
#include <gst/video/videooverlay.h>
#endif
+#include <QtMultimedia/private/qtmultimediaglobal_p.h>
+
QT_BEGIN_NAMESPACE
struct ElementMap
@@ -59,6 +61,9 @@ struct ElementMap
// Ordered by descending priority
static const ElementMap elementMap[] =
{
+#if QT_CONFIG(gstreamer_gl)
+ { "xcb", "glimagesink" },
+#endif
{ "xcb", "vaapisink" },
{ "xcb", "xvimagesink" },
{ "xcb", "ximagesink" }
@@ -340,6 +345,10 @@ static GstElement *findBestVideoSink()
// First, try some known video sinks, depending on the Qt platform plugin in use.
for (quint32 i = 0; i < (sizeof(elementMap) / sizeof(ElementMap)); ++i) {
+#if QT_CONFIG(gstreamer_gl)
+ if (!QGstUtils::useOpenGL() && qstrcmp(elementMap[i].gstreamerElement, "glimagesink") == 0)
+ continue;
+#endif
if (platform == QLatin1String(elementMap[i].qtPlatform)
&& (choice = gst_element_factory_make(elementMap[i].gstreamerElement, NULL))) {
diff --git a/src/gsttools/qgstreamervideowidget.cpp b/src/gsttools/qgstreamervideowidget.cpp
index 46432a0a1..164e62f86 100644
--- a/src/gsttools/qgstreamervideowidget.cpp
+++ b/src/gsttools/qgstreamervideowidget.cpp
@@ -169,6 +169,8 @@ bool QGstreamerVideoWidgetControl::eventFilter(QObject *object, QEvent *e)
}
if (e->type() == QEvent::Paint) {
+ // Update overlay by new size if any.
+ m_videoOverlay.setRenderRectangle(QRect(0, 0, m_widget->width(), m_widget->height()));
if (m_videoOverlay.isActive())
m_videoOverlay.expose(); // triggers a repaint of the last frame
else
diff --git a/src/gsttools/qgstutils.cpp b/src/gsttools/qgstutils.cpp
index 48781b0c7..f8a9d79c1 100644
--- a/src/gsttools/qgstutils.cpp
+++ b/src/gsttools/qgstutils.cpp
@@ -1034,6 +1034,7 @@ struct VideoFormat
static const VideoFormat qt_videoFormatLookup[] =
{
{ QVideoFrame::Format_YUV420P, GST_VIDEO_FORMAT_I420 },
+ { QVideoFrame::Format_YUV422P, GST_VIDEO_FORMAT_Y42B },
{ QVideoFrame::Format_YV12 , GST_VIDEO_FORMAT_YV12 },
{ QVideoFrame::Format_UYVY , GST_VIDEO_FORMAT_UYVY },
{ QVideoFrame::Format_YUYV , GST_VIDEO_FORMAT_YUY2 },
@@ -1044,11 +1045,13 @@ static const VideoFormat qt_videoFormatLookup[] =
{ QVideoFrame::Format_RGB32 , GST_VIDEO_FORMAT_BGRx },
{ QVideoFrame::Format_BGR32 , GST_VIDEO_FORMAT_RGBx },
{ QVideoFrame::Format_ARGB32, GST_VIDEO_FORMAT_BGRA },
+ { QVideoFrame::Format_ABGR32, GST_VIDEO_FORMAT_RGBA },
{ QVideoFrame::Format_BGRA32, GST_VIDEO_FORMAT_ARGB },
#else
{ QVideoFrame::Format_RGB32 , GST_VIDEO_FORMAT_xRGB },
{ QVideoFrame::Format_BGR32 , GST_VIDEO_FORMAT_xBGR },
{ QVideoFrame::Format_ARGB32, GST_VIDEO_FORMAT_ARGB },
+ { QVideoFrame::Format_ABGR32, GST_VIDEO_FORMAT_ABGR },
{ QVideoFrame::Format_BGRA32, GST_VIDEO_FORMAT_BGRA },
#endif
{ QVideoFrame::Format_RGB24 , GST_VIDEO_FORMAT_RGB },
@@ -1086,6 +1089,7 @@ struct YuvFormat
static const YuvFormat qt_yuvColorLookup[] =
{
{ QVideoFrame::Format_YUV420P, GST_MAKE_FOURCC('I','4','2','0'), 8 },
+ { QVideoFrame::Format_YUV422P, GST_MAKE_FOURCC('Y','4','2','B'), 8 },
{ QVideoFrame::Format_YV12, GST_MAKE_FOURCC('Y','V','1','2'), 8 },
{ QVideoFrame::Format_UYVY, GST_MAKE_FOURCC('U','Y','V','Y'), 16 },
{ QVideoFrame::Format_YUYV, GST_MAKE_FOURCC('Y','U','Y','2'), 16 },
@@ -1303,11 +1307,9 @@ void QGstUtils::setMetaData(GstElement *element, const QMap<QByteArray, QVariant
gst_tag_setter_reset_tags(GST_TAG_SETTER(element));
- QMapIterator<QByteArray, QVariant> it(data);
- while (it.hasNext()) {
- it.next();
+ for (auto it = data.cbegin(), end = data.cend(); it != end; ++it) {
const QString tagName = QString::fromLatin1(it.key());
- const QVariant tagValue = it.value();
+ const QVariant &tagValue = it.value();
switch (tagValue.type()) {
case QVariant::String:
@@ -1566,6 +1568,12 @@ QVariant QGstUtils::toGStreamerOrientation(const QVariant &value)
}
#endif
+bool QGstUtils::useOpenGL()
+{
+ static bool result = qEnvironmentVariableIntValue("QT_GSTREAMER_USE_OPENGL_PLUGIN");
+ return result;
+}
+
void qt_gst_object_ref_sink(gpointer object)
{
#if GST_CHECK_VERSION(0,10,24)
diff --git a/src/gsttools/qgstutils_p.h b/src/gsttools/qgstutils_p.h
index 387a2e27a..5a2feec17 100644
--- a/src/gsttools/qgstutils_p.h
+++ b/src/gsttools/qgstutils_p.h
@@ -153,6 +153,8 @@ namespace QGstUtils {
Q_GSTTOOLS_EXPORT QVariant fromGStreamerOrientation(const QVariant &value);
Q_GSTTOOLS_EXPORT QVariant toGStreamerOrientation(const QVariant &value);
#endif
+
+ Q_GSTTOOLS_EXPORT bool useOpenGL();
}
Q_GSTTOOLS_EXPORT void qt_gst_object_ref_sink(gpointer object);
diff --git a/src/gsttools/qgstvideorenderersink.cpp b/src/gsttools/qgstvideorenderersink.cpp
index 119fc55a1..3b458a978 100644
--- a/src/gsttools/qgstvideorenderersink.cpp
+++ b/src/gsttools/qgstvideorenderersink.cpp
@@ -54,6 +54,25 @@
#include "qgstutils_p.h"
+#if QT_CONFIG(gstreamer_gl)
+#include <QOpenGLContext>
+#include <QGuiApplication>
+#include <QWindow>
+#include <qpa/qplatformnativeinterface.h>
+
+#include <gst/gl/gstglconfig.h>
+
+#if GST_GL_HAVE_WINDOW_X11
+# include <gst/gl/x11/gstgldisplay_x11.h>
+#endif
+#if GST_GL_HAVE_PLATFORM_EGL
+# include <gst/gl/egl/gstgldisplay_egl.h>
+#endif
+#if GST_CHECK_VERSION(1,11,1) && GST_GL_HAVE_WINDOW_WAYLAND
+# include <gst/gl/wayland/gstgldisplay_wayland.h>
+#endif
+#endif // #if QT_CONFIG(gstreamer_gl)
+
//#define DEBUG_VIDEO_SURFACE_SINK
QT_BEGIN_NAMESPACE
@@ -68,13 +87,33 @@ QGstDefaultVideoRenderer::~QGstDefaultVideoRenderer()
GstCaps *QGstDefaultVideoRenderer::getCaps(QAbstractVideoSurface *surface)
{
- return QGstUtils::capsForFormats(surface->supportedPixelFormats());
+#if QT_CONFIG(gstreamer_gl)
+ if (QGstUtils::useOpenGL()) {
+ m_handleType = QAbstractVideoBuffer::GLTextureHandle;
+ auto formats = surface->supportedPixelFormats(m_handleType);
+ // Even if the surface does not support gl textures,
+ // glupload will be added to the pipeline and GLMemory will be requested.
+ // This will lead to upload data to gl textures
+ // and download it when the buffer will be used within rendering.
+ if (formats.isEmpty()) {
+ m_handleType = QAbstractVideoBuffer::NoHandle;
+ formats = surface->supportedPixelFormats(m_handleType);
+ }
+
+ GstCaps *caps = QGstUtils::capsForFormats(formats);
+ for (guint i = 0; i < gst_caps_get_size(caps); ++i)
+ gst_caps_set_features(caps, i, gst_caps_features_from_string("memory:GLMemory"));
+
+ return caps;
+ }
+#endif
+ return QGstUtils::capsForFormats(surface->supportedPixelFormats(QAbstractVideoBuffer::NoHandle));
}
bool QGstDefaultVideoRenderer::start(QAbstractVideoSurface *surface, GstCaps *caps)
{
m_flushed = true;
- m_format = QGstUtils::formatForCaps(caps, &m_videoInfo);
+ m_format = QGstUtils::formatForCaps(caps, &m_videoInfo, m_handleType);
return m_format.isValid() && surface->start(m_format);
}
@@ -89,8 +128,21 @@ void QGstDefaultVideoRenderer::stop(QAbstractVideoSurface *surface)
bool QGstDefaultVideoRenderer::present(QAbstractVideoSurface *surface, GstBuffer *buffer)
{
m_flushed = false;
+
+ QGstVideoBuffer *videoBuffer = nullptr;
+#if QT_CONFIG(gstreamer_gl)
+ if (m_format.handleType() == QAbstractVideoBuffer::GLTextureHandle) {
+ GstGLMemory *glmem = GST_GL_MEMORY_CAST(gst_buffer_peek_memory(buffer, 0));
+ guint textureId = gst_gl_memory_get_texture_id(glmem);
+ videoBuffer = new QGstVideoBuffer(buffer, m_videoInfo, m_format.handleType(), textureId);
+ }
+#endif
+
+ if (!videoBuffer)
+ videoBuffer = new QGstVideoBuffer(buffer, m_videoInfo);
+
QVideoFrame frame(
- new QGstVideoBuffer(buffer, m_videoInfo),
+ videoBuffer,
m_format.frameSize(),
m_format.pixelFormat());
QGstUtils::setFrameTimeStamps(&frame, buffer);
@@ -136,6 +188,10 @@ QVideoSurfaceGstDelegate::~QVideoSurfaceGstDelegate()
gst_caps_unref(m_surfaceCaps);
if (m_startCaps)
gst_caps_unref(m_startCaps);
+#if QT_CONFIG(gstreamer_gl)
+ if (m_gstGLDisplayContext)
+ gst_object_unref(m_gstGLDisplayContext);
+#endif
}
GstCaps *QVideoSurfaceGstDelegate::caps()
@@ -245,6 +301,118 @@ GstFlowReturn QVideoSurfaceGstDelegate::render(GstBuffer *buffer)
return m_renderReturn;
}
+#if QT_CONFIG(gstreamer_gl)
+static GstGLContext *gstGLDisplayContext(QAbstractVideoSurface *surface)
+{
+ QOpenGLContext *glContext = qobject_cast<QOpenGLContext*>(surface->property("GLContext").value<QObject*>());
+ // Context is not ready yet.
+ if (!glContext)
+ return nullptr;
+
+ GstGLDisplay *display = nullptr;
+ const QString platform = QGuiApplication::platformName();
+ const char *contextName = "eglcontext";
+ GstGLPlatform glPlatform = GST_GL_PLATFORM_EGL;
+ QPlatformNativeInterface *pni = QGuiApplication::platformNativeInterface();
+
+#if GST_GL_HAVE_WINDOW_X11
+ if (platform == QLatin1String("xcb")) {
+ if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) {
+ contextName = "glxcontext";
+ glPlatform = GST_GL_PLATFORM_GLX;
+ }
+
+ display = (GstGLDisplay *)gst_gl_display_x11_new_with_display(
+ (Display *)pni->nativeResourceForIntegration("display"));
+ }
+#endif
+
+#if GST_GL_HAVE_PLATFORM_EGL
+ if (!display && platform == QLatin1String("eglfs")) {
+ display = (GstGLDisplay *)gst_gl_display_egl_new_with_egl_display(
+ pni->nativeResourceForIntegration("egldisplay"));
+ }
+#endif
+
+#if GST_CHECK_VERSION(1,11,1)
+#if GST_GL_HAVE_WINDOW_WAYLAND
+ if (!display && platform.startsWith(QLatin1String("wayland"))) {
+ const char *displayName = (platform == QLatin1String("wayland"))
+ ? "display" : "egldisplay";
+
+ display = (GstGLDisplay *)gst_gl_display_wayland_new_with_display(
+ (struct wl_display *)pni->nativeResourceForIntegration(displayName));
+ }
+#endif
+#endif
+
+ if (!display) {
+ qWarning() << "Could not create GstGLDisplay";
+ return nullptr;
+ }
+
+ void *nativeContext = pni->nativeResourceForContext(contextName, glContext);
+ if (!nativeContext)
+ qWarning() << "Could not find resource for" << contextName;
+
+ GstGLContext *appContext = gst_gl_context_new_wrapped(display, (guintptr)nativeContext, glPlatform, GST_GL_API_ANY);
+ if (!appContext)
+ qWarning() << "Could not create wrappped context for platform:" << glPlatform;
+
+ GstGLContext *displayContext = nullptr;
+ GError *error = NULL;
+ gst_gl_display_create_context(display, appContext, &displayContext, &error);
+ if (error) {
+ qWarning() << "Could not create display context:" << error->message;
+ g_clear_error(&error);
+ }
+
+ if (appContext)
+ gst_object_unref(appContext);
+
+ gst_object_unref(display);
+
+ return displayContext;
+}
+#endif // #if QT_CONFIG(gstreamer_gl)
+
+bool QVideoSurfaceGstDelegate::query(GstQuery *query)
+{
+#if QT_CONFIG(gstreamer_gl)
+ if (GST_QUERY_TYPE(query) == GST_QUERY_CONTEXT) {
+ const gchar *type;
+ gst_query_parse_context_type(query, &type);
+
+ if (strcmp(type, "gst.gl.local_context") != 0)
+ return false;
+
+ if (!m_gstGLDisplayContext)
+ m_gstGLDisplayContext = gstGLDisplayContext(m_surface);
+
+ // No context yet.
+ if (!m_gstGLDisplayContext)
+ return false;
+
+ GstContext *context = NULL;
+ gst_query_parse_context(query, &context);
+ context = context ? gst_context_copy(context) : gst_context_new(type, FALSE);
+ GstStructure *structure = gst_context_writable_structure(context);
+#if GST_CHECK_VERSION(1,11,1)
+ gst_structure_set(structure, "context", GST_TYPE_GL_CONTEXT, m_gstGLDisplayContext, NULL);
+#else
+ gst_structure_set(structure, "context", GST_GL_TYPE_CONTEXT, m_gstGLDisplayContext, NULL);
+#endif
+ gst_query_set_context(query, context);
+ gst_context_unref(context);
+
+ return m_gstGLDisplayContext;
+ }
+#else
+ Q_UNUSED(query);
+#endif
+ return false;
+}
+
bool QVideoSurfaceGstDelegate::event(QEvent *event)
{
if (event->type() == QEvent::UpdateRequest) {
@@ -451,6 +619,7 @@ void QGstVideoRendererSink::class_init(gpointer g_class, gpointer class_data)
base_sink_class->propose_allocation = QGstVideoRendererSink::propose_allocation;
base_sink_class->stop = QGstVideoRendererSink::stop;
base_sink_class->unlock = QGstVideoRendererSink::unlock;
+ base_sink_class->query = QGstVideoRendererSink::query;
GstElementClass *element_class = reinterpret_cast<GstElementClass *>(g_class);
element_class->change_state = QGstVideoRendererSink::change_state;
@@ -616,4 +785,13 @@ GstFlowReturn QGstVideoRendererSink::show_frame(GstVideoSink *base, GstBuffer *b
return sink->delegate->render(buffer);
}
+gboolean QGstVideoRendererSink::query(GstBaseSink *base, GstQuery *query)
+{
+ VO_SINK(base);
+ if (sink->delegate->query(query))
+ return TRUE;
+
+ return GST_BASE_SINK_CLASS(sink_parent_class)->query(base, query);
+}
+
QT_END_NAMESPACE
diff --git a/src/gsttools/qgstvideorenderersink_p.h b/src/gsttools/qgstvideorenderersink_p.h
index b1e333566..84162814c 100644
--- a/src/gsttools/qgstvideorenderersink_p.h
+++ b/src/gsttools/qgstvideorenderersink_p.h
@@ -51,6 +51,7 @@
// We mean it.
//
+#include <QtMultimedia/private/qtmultimediaglobal_p.h>
#include <gst/video/gstvideosink.h>
#include <gst/video/video.h>
@@ -67,6 +68,13 @@
#include "qgstvideorendererplugin_p.h"
+#if QT_CONFIG(gstreamer_gl)
+#ifndef GST_USE_UNSTABLE_API
+#define GST_USE_UNSTABLE_API
+#endif
+#include <gst/gl/gl.h>
+#endif
+
QT_BEGIN_NAMESPACE
class QAbstractVideoSurface;
@@ -89,6 +97,7 @@ private:
QVideoSurfaceFormat m_format;
GstVideoInfo m_videoInfo;
bool m_flushed = true;
+ QAbstractVideoBuffer::HandleType m_handleType = QAbstractVideoBuffer::NoHandle;
};
class QVideoSurfaceGstDelegate : public QObject
@@ -110,6 +119,7 @@ public:
GstFlowReturn render(GstBuffer *buffer);
bool event(QEvent *event) override;
+ bool query(GstQuery *query);
private slots:
bool handleEvent(QMutexLocker *locker);
@@ -132,6 +142,9 @@ private:
GstCaps *m_surfaceCaps = nullptr;
GstCaps *m_startCaps = nullptr;
GstBuffer *m_renderBuffer = nullptr;
+#if QT_CONFIG(gstreamer_gl)
+ GstGLContext *m_gstGLDisplayContext = nullptr;
+#endif
bool m_notified = false;
bool m_stop = false;
@@ -168,6 +181,7 @@ private:
static gboolean unlock(GstBaseSink *sink);
static GstFlowReturn show_frame(GstVideoSink *sink, GstBuffer *buffer);
+ static gboolean query(GstBaseSink *element, GstQuery *query);
private:
QVideoSurfaceGstDelegate *delegate = nullptr;
diff --git a/src/imports/audioengine/qdeclarative_attenuationmodel_p.cpp b/src/imports/audioengine/qdeclarative_attenuationmodel_p.cpp
index 729558cd2..9d3c4fcb6 100644
--- a/src/imports/audioengine/qdeclarative_attenuationmodel_p.cpp
+++ b/src/imports/audioengine/qdeclarative_attenuationmodel_p.cpp
@@ -84,6 +84,7 @@ void QDeclarativeAttenuationModel::setName(const QString& name)
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
AttenuationModelLinear must be defined inside \l AudioEngine or be added to it using
\l{QtAudioEngine::AudioEngine::addAttenuationModel()}{AudioEngine.addAttenuationModel()}
@@ -213,6 +214,7 @@ qreal QDeclarativeAttenuationModelLinear::calculateGain(const QVector3D &listene
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
AttenuationModelInverse must be defined inside \l AudioEngine or be added to it using
\l{QtAudioEngine::AudioEngine::addAttenuationModel()}{AudioEngine.addAttenuationModel()}
diff --git a/src/imports/audioengine/qdeclarative_audiocategory_p.cpp b/src/imports/audioengine/qdeclarative_audiocategory_p.cpp
index 84ba6b190..3561e3800 100644
--- a/src/imports/audioengine/qdeclarative_audiocategory_p.cpp
+++ b/src/imports/audioengine/qdeclarative_audiocategory_p.cpp
@@ -53,6 +53,7 @@ QT_USE_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
An instance of AudioCategory can be accessed through \l {QtAudioEngine::AudioEngine::categories}
{AudioEngine.categories} with its unique name and must be defined inside AudioEngine or be added
diff --git a/src/imports/audioengine/qdeclarative_audioengine_p.cpp b/src/imports/audioengine/qdeclarative_audioengine_p.cpp
index 24d878dd8..96046fa31 100644
--- a/src/imports/audioengine/qdeclarative_audioengine_p.cpp
+++ b/src/imports/audioengine/qdeclarative_audioengine_p.cpp
@@ -62,6 +62,7 @@ QT_BEGIN_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
\qml
Rectangle {
diff --git a/src/imports/audioengine/qdeclarative_audiolistener_p.cpp b/src/imports/audioengine/qdeclarative_audiolistener_p.cpp
index 39a30171b..4ed305a72 100644
--- a/src/imports/audioengine/qdeclarative_audiolistener_p.cpp
+++ b/src/imports/audioengine/qdeclarative_audiolistener_p.cpp
@@ -54,6 +54,7 @@ QT_USE_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
AudioListener will have only one global instance and you can either access it through the
listener property of AudioEngine:
diff --git a/src/imports/audioengine/qdeclarative_audiosample_p.cpp b/src/imports/audioengine/qdeclarative_audiosample_p.cpp
index 4eccf5052..2e521edd9 100644
--- a/src/imports/audioengine/qdeclarative_audiosample_p.cpp
+++ b/src/imports/audioengine/qdeclarative_audiosample_p.cpp
@@ -56,6 +56,7 @@ QT_USE_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
It can be accessed through QtAudioEngine::AudioEngine::samples with its unique
name and must be defined inside AudioEngine or be added to it using
diff --git a/src/imports/audioengine/qdeclarative_playvariation_p.cpp b/src/imports/audioengine/qdeclarative_playvariation_p.cpp
index e6d3697d0..f0471d145 100644
--- a/src/imports/audioengine/qdeclarative_playvariation_p.cpp
+++ b/src/imports/audioengine/qdeclarative_playvariation_p.cpp
@@ -59,6 +59,7 @@ QT_USE_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
PlayVariation must be defined inside a \l Sound or be added to it using
\l{QtAudioEngine::Sound::addPlayVariation()}{Sound.addPlayVariation()}
diff --git a/src/imports/audioengine/qdeclarative_sound_p.cpp b/src/imports/audioengine/qdeclarative_sound_p.cpp
index 347198f61..f07468eec 100644
--- a/src/imports/audioengine/qdeclarative_sound_p.cpp
+++ b/src/imports/audioengine/qdeclarative_sound_p.cpp
@@ -166,6 +166,7 @@ void QDeclarativeSoundCone::setEngine(QDeclarativeAudioEngine *engine)
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
Sound can be accessed through QtAudioEngine::AudioEngine::sounds with its unique name
and must be defined inside AudioEngine or be added to it using
diff --git a/src/imports/audioengine/qdeclarative_soundinstance_p.cpp b/src/imports/audioengine/qdeclarative_soundinstance_p.cpp
index ad7480031..1bdb82343 100644
--- a/src/imports/audioengine/qdeclarative_soundinstance_p.cpp
+++ b/src/imports/audioengine/qdeclarative_soundinstance_p.cpp
@@ -57,6 +57,7 @@ QT_USE_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
There are two ways to create SoundInstance objects. You can obtain it by calling newInstance
method of a \l Sound:
diff --git a/src/imports/multimedia/plugins.qmltypes b/src/imports/multimedia/plugins.qmltypes
index 4b5298b6a..870544160 100644
--- a/src/imports/multimedia/plugins.qmltypes
+++ b/src/imports/multimedia/plugins.qmltypes
@@ -4,11 +4,285 @@ import QtQuick.tooling 1.2
// It is used for QML tooling purposes only.
//
// This file was auto-generated by:
-// 'qmlplugindump -nonrelocatable QtMultimedia 5.13'
+// 'qmlplugindump -nonrelocatable QtMultimedia 5.14'
Module {
dependencies: ["QtQuick 2.0"]
Component {
+ name: "QAbstractItemModel"
+ prototype: "QObject"
+ Enum {
+ name: "LayoutChangeHint"
+ values: {
+ "NoLayoutChangeHint": 0,
+ "VerticalSortHint": 1,
+ "HorizontalSortHint": 2
+ }
+ }
+ Enum {
+ name: "CheckIndexOption"
+ values: {
+ "NoOption": 0,
+ "IndexIsValid": 1,
+ "DoNotUseParent": 2,
+ "ParentIsInvalid": 4
+ }
+ }
+ Signal {
+ name: "dataChanged"
+ Parameter { name: "topLeft"; type: "QModelIndex" }
+ Parameter { name: "bottomRight"; type: "QModelIndex" }
+ Parameter { name: "roles"; type: "QVector<int>" }
+ }
+ Signal {
+ name: "dataChanged"
+ Parameter { name: "topLeft"; type: "QModelIndex" }
+ Parameter { name: "bottomRight"; type: "QModelIndex" }
+ }
+ Signal {
+ name: "headerDataChanged"
+ Parameter { name: "orientation"; type: "Qt::Orientation" }
+ Parameter { name: "first"; type: "int" }
+ Parameter { name: "last"; type: "int" }
+ }
+ Signal {
+ name: "layoutChanged"
+ Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
+ Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" }
+ }
+ Signal {
+ name: "layoutChanged"
+ Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
+ }
+ Signal { name: "layoutChanged" }
+ Signal {
+ name: "layoutAboutToBeChanged"
+ Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
+ Parameter { name: "hint"; type: "QAbstractItemModel::LayoutChangeHint" }
+ }
+ Signal {
+ name: "layoutAboutToBeChanged"
+ Parameter { name: "parents"; type: "QList<QPersistentModelIndex>" }
+ }
+ Signal { name: "layoutAboutToBeChanged" }
+ Signal {
+ name: "rowsAboutToBeInserted"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ Parameter { name: "first"; type: "int" }
+ Parameter { name: "last"; type: "int" }
+ }
+ Signal {
+ name: "rowsInserted"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ Parameter { name: "first"; type: "int" }
+ Parameter { name: "last"; type: "int" }
+ }
+ Signal {
+ name: "rowsAboutToBeRemoved"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ Parameter { name: "first"; type: "int" }
+ Parameter { name: "last"; type: "int" }
+ }
+ Signal {
+ name: "rowsRemoved"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ Parameter { name: "first"; type: "int" }
+ Parameter { name: "last"; type: "int" }
+ }
+ Signal {
+ name: "columnsAboutToBeInserted"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ Parameter { name: "first"; type: "int" }
+ Parameter { name: "last"; type: "int" }
+ }
+ Signal {
+ name: "columnsInserted"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ Parameter { name: "first"; type: "int" }
+ Parameter { name: "last"; type: "int" }
+ }
+ Signal {
+ name: "columnsAboutToBeRemoved"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ Parameter { name: "first"; type: "int" }
+ Parameter { name: "last"; type: "int" }
+ }
+ Signal {
+ name: "columnsRemoved"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ Parameter { name: "first"; type: "int" }
+ Parameter { name: "last"; type: "int" }
+ }
+ Signal { name: "modelAboutToBeReset" }
+ Signal { name: "modelReset" }
+ Signal {
+ name: "rowsAboutToBeMoved"
+ Parameter { name: "sourceParent"; type: "QModelIndex" }
+ Parameter { name: "sourceStart"; type: "int" }
+ Parameter { name: "sourceEnd"; type: "int" }
+ Parameter { name: "destinationParent"; type: "QModelIndex" }
+ Parameter { name: "destinationRow"; type: "int" }
+ }
+ Signal {
+ name: "rowsMoved"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ Parameter { name: "start"; type: "int" }
+ Parameter { name: "end"; type: "int" }
+ Parameter { name: "destination"; type: "QModelIndex" }
+ Parameter { name: "row"; type: "int" }
+ }
+ Signal {
+ name: "columnsAboutToBeMoved"
+ Parameter { name: "sourceParent"; type: "QModelIndex" }
+ Parameter { name: "sourceStart"; type: "int" }
+ Parameter { name: "sourceEnd"; type: "int" }
+ Parameter { name: "destinationParent"; type: "QModelIndex" }
+ Parameter { name: "destinationColumn"; type: "int" }
+ }
+ Signal {
+ name: "columnsMoved"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ Parameter { name: "start"; type: "int" }
+ Parameter { name: "end"; type: "int" }
+ Parameter { name: "destination"; type: "QModelIndex" }
+ Parameter { name: "column"; type: "int" }
+ }
+ Method { name: "submit"; type: "bool" }
+ Method { name: "revert" }
+ Method {
+ name: "hasIndex"
+ type: "bool"
+ Parameter { name: "row"; type: "int" }
+ Parameter { name: "column"; type: "int" }
+ Parameter { name: "parent"; type: "QModelIndex" }
+ }
+ Method {
+ name: "hasIndex"
+ type: "bool"
+ Parameter { name: "row"; type: "int" }
+ Parameter { name: "column"; type: "int" }
+ }
+ Method {
+ name: "index"
+ type: "QModelIndex"
+ Parameter { name: "row"; type: "int" }
+ Parameter { name: "column"; type: "int" }
+ Parameter { name: "parent"; type: "QModelIndex" }
+ }
+ Method {
+ name: "index"
+ type: "QModelIndex"
+ Parameter { name: "row"; type: "int" }
+ Parameter { name: "column"; type: "int" }
+ }
+ Method {
+ name: "parent"
+ type: "QModelIndex"
+ Parameter { name: "child"; type: "QModelIndex" }
+ }
+ Method {
+ name: "sibling"
+ type: "QModelIndex"
+ Parameter { name: "row"; type: "int" }
+ Parameter { name: "column"; type: "int" }
+ Parameter { name: "idx"; type: "QModelIndex" }
+ }
+ Method {
+ name: "rowCount"
+ type: "int"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ }
+ Method { name: "rowCount"; type: "int" }
+ Method {
+ name: "columnCount"
+ type: "int"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ }
+ Method { name: "columnCount"; type: "int" }
+ Method {
+ name: "hasChildren"
+ type: "bool"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ }
+ Method { name: "hasChildren"; type: "bool" }
+ Method {
+ name: "data"
+ type: "QVariant"
+ Parameter { name: "index"; type: "QModelIndex" }
+ Parameter { name: "role"; type: "int" }
+ }
+ Method {
+ name: "data"
+ type: "QVariant"
+ Parameter { name: "index"; type: "QModelIndex" }
+ }
+ Method {
+ name: "setData"
+ type: "bool"
+ Parameter { name: "index"; type: "QModelIndex" }
+ Parameter { name: "value"; type: "QVariant" }
+ Parameter { name: "role"; type: "int" }
+ }
+ Method {
+ name: "setData"
+ type: "bool"
+ Parameter { name: "index"; type: "QModelIndex" }
+ Parameter { name: "value"; type: "QVariant" }
+ }
+ Method {
+ name: "headerData"
+ type: "QVariant"
+ Parameter { name: "section"; type: "int" }
+ Parameter { name: "orientation"; type: "Qt::Orientation" }
+ Parameter { name: "role"; type: "int" }
+ }
+ Method {
+ name: "headerData"
+ type: "QVariant"
+ Parameter { name: "section"; type: "int" }
+ Parameter { name: "orientation"; type: "Qt::Orientation" }
+ }
+ Method {
+ name: "fetchMore"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ }
+ Method {
+ name: "canFetchMore"
+ type: "bool"
+ Parameter { name: "parent"; type: "QModelIndex" }
+ }
+ Method {
+ name: "flags"
+ type: "Qt::ItemFlags"
+ Parameter { name: "index"; type: "QModelIndex" }
+ }
+ Method {
+ name: "match"
+ type: "QModelIndexList"
+ Parameter { name: "start"; type: "QModelIndex" }
+ Parameter { name: "role"; type: "int" }
+ Parameter { name: "value"; type: "QVariant" }
+ Parameter { name: "hits"; type: "int" }
+ Parameter { name: "flags"; type: "Qt::MatchFlags" }
+ }
+ Method {
+ name: "match"
+ type: "QModelIndexList"
+ Parameter { name: "start"; type: "QModelIndex" }
+ Parameter { name: "role"; type: "int" }
+ Parameter { name: "value"; type: "QVariant" }
+ Parameter { name: "hits"; type: "int" }
+ }
+ Method {
+ name: "match"
+ type: "QModelIndexList"
+ Parameter { name: "start"; type: "QModelIndex" }
+ Parameter { name: "role"; type: "int" }
+ Parameter { name: "value"; type: "QVariant" }
+ }
+ }
+ Component { name: "QAbstractListModel"; prototype: "QAbstractItemModel" }
+ Component {
name: "QAbstractVideoFilter"
prototype: "QObject"
Property { name: "active"; type: "bool" }
diff --git a/src/imports/multimedia/qdeclarativeplaylist.cpp b/src/imports/multimedia/qdeclarativeplaylist.cpp
index b768f99e3..400e23467 100644
--- a/src/imports/multimedia/qdeclarativeplaylist.cpp
+++ b/src/imports/multimedia/qdeclarativeplaylist.cpp
@@ -232,7 +232,7 @@ void QDeclarativePlaylist::setPlaybackMode(PlaybackMode mode)
*/
QUrl QDeclarativePlaylist::currentItemSource() const
{
- return m_playlist->currentMedia().canonicalUrl();
+ return m_playlist->currentMedia().request().url();
}
/*!
@@ -316,7 +316,7 @@ QString QDeclarativePlaylist::errorString() const
*/
QUrl QDeclarativePlaylist::itemSource(int index)
{
- return m_playlist->media(index).canonicalUrl();
+ return m_playlist->media(index).request().url();
}
/*!
@@ -548,7 +548,7 @@ QVariant QDeclarativePlaylist::data(const QModelIndex &index, int role) const
if (!index.isValid())
return QVariant();
- return m_playlist->media(index.row()).canonicalUrl();
+ return m_playlist->media(index.row()).request().url();
}
QHash<int, QByteArray> QDeclarativePlaylist::roleNames() const
diff --git a/src/imports/multimedia/qdeclarativeradio.cpp b/src/imports/multimedia/qdeclarativeradio.cpp
index f92ddd91a..655b87ca5 100644
--- a/src/imports/multimedia/qdeclarativeradio.cpp
+++ b/src/imports/multimedia/qdeclarativeradio.cpp
@@ -50,6 +50,7 @@ QT_BEGIN_NAMESPACE
\ingroup multimedia_qml
\ingroup multimedia_radio_qml
\inherits Item
+ \deprecated
\qml
Rectangle {
diff --git a/src/multimedia/audio/qaudiobuffer.cpp b/src/multimedia/audio/qaudiobuffer.cpp
index 1e43ebd00..999f280b3 100644
--- a/src/multimedia/audio/qaudiobuffer.cpp
+++ b/src/multimedia/audio/qaudiobuffer.cpp
@@ -164,7 +164,7 @@ QAudioBufferPrivate *QAudioBufferPrivate::clone()
// We want to create a single bufferprivate with a
// single qaab
// This should only be called when the count is > 1
- Q_ASSERT(mCount.load() > 1);
+ Q_ASSERT(mCount.loadRelaxed() > 1);
if (mProvider) {
QAbstractAudioBuffer *abuf = mProvider->clone();
@@ -458,7 +458,7 @@ void *QAudioBuffer::data()
if (!isValid())
return nullptr;
- if (d->mCount.load() != 1) {
+ if (d->mCount.loadRelaxed() != 1) {
// Can't share a writable buffer
// so we need to detach
QAudioBufferPrivate *newd = d->clone();
@@ -483,7 +483,7 @@ void *QAudioBuffer::data()
if (memBuffer) {
d->mProvider->release();
- d->mCount.store(1);
+ d->mCount.storeRelaxed(1);
d->mProvider = memBuffer;
return memBuffer->writableData();
diff --git a/src/multimedia/audio/qaudiodeviceinfo.cpp b/src/multimedia/audio/qaudiodeviceinfo.cpp
index b8cac18eb..051ef8b3f 100644
--- a/src/multimedia/audio/qaudiodeviceinfo.cpp
+++ b/src/multimedia/audio/qaudiodeviceinfo.cpp
@@ -328,16 +328,12 @@ QAudioFormat QAudioDeviceInfo::nearestFormat(const QAudioFormat &settings) const
nearest.setByteOrder(order);
for (QAudioFormat::SampleType sample : qAsConst(testSampleTypes)) {
nearest.setSampleType(sample);
- QMapIterator<int, int> sz(testSampleSizes);
- while (sz.hasNext()) {
- sz.next();
- nearest.setSampleSize(sz.value());
+ for (int sampleSize : qAsConst(testSampleSizes)) {
+ nearest.setSampleSize(sampleSize);
for (int channel : qAsConst(testChannels)) {
nearest.setChannelCount(channel);
- QMapIterator<int, int> i(testSampleRates);
- while (i.hasNext()) {
- i.next();
- nearest.setSampleRate(i.value());
+ for (int sampleRate : qAsConst(testSampleRates)) {
+ nearest.setSampleRate(sampleRate);
if (isFormatSupported(nearest))
return nearest;
}
@@ -449,7 +445,10 @@ QAudioDeviceInfo::QAudioDeviceInfo(const QString &realm, const QByteArray &handl
}
/*!
- \internal
+ Returns the key that represents the audio plugin.
+
+ \since 5.14
+ \sa QAudioSystemPlugin
*/
QString QAudioDeviceInfo::realm() const
{
diff --git a/src/multimedia/audio/qaudiodeviceinfo.h b/src/multimedia/audio/qaudiodeviceinfo.h
index 390458b39..015c8bad7 100644
--- a/src/multimedia/audio/qaudiodeviceinfo.h
+++ b/src/multimedia/audio/qaudiodeviceinfo.h
@@ -87,6 +87,7 @@ public:
QList<int> supportedSampleSizes() const;
QList<QAudioFormat::Endian> supportedByteOrders() const;
QList<QAudioFormat::SampleType> supportedSampleTypes() const;
+ QString realm() const;
static QAudioDeviceInfo defaultInputDevice();
static QAudioDeviceInfo defaultOutputDevice();
@@ -95,7 +96,6 @@ public:
private:
QAudioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode);
- QString realm() const;
QByteArray handle() const;
QAudio::Mode mode() const;
diff --git a/src/multimedia/audio/qsamplecache_p.cpp b/src/multimedia/audio/qsamplecache_p.cpp
index 35234f8bb..8c4fdc210 100644
--- a/src/multimedia/audio/qsamplecache_p.cpp
+++ b/src/multimedia/audio/qsamplecache_p.cpp
@@ -47,6 +47,8 @@
#include <QtCore/QDebug>
//#define QT_SAMPLECACHE_DEBUG
+#include <mutex>
+
QT_BEGIN_NAMESPACE
@@ -98,7 +100,6 @@ QT_BEGIN_NAMESPACE
QSampleCache::QSampleCache(QObject *parent)
: QObject(parent)
, m_networkAccessManager(nullptr)
- , m_mutex(QMutex::Recursive)
, m_capacity(0)
, m_usage(0)
, m_loadingRefCount(0)
@@ -117,7 +118,7 @@ QNetworkAccessManager& QSampleCache::networkAccessManager()
QSampleCache::~QSampleCache()
{
- QMutexLocker m(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_loadingThread.quit();
m_loadingThread.wait();
@@ -157,7 +158,7 @@ bool QSampleCache::isLoading() const
bool QSampleCache::isCached(const QUrl &url) const
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
return m_samples.contains(url);
}
@@ -174,7 +175,7 @@ QSample* QSampleCache::requestSample(const QUrl& url)
#ifdef QT_SAMPLECACHE_DEBUG
qDebug() << "QSampleCache: request sample [" << url << "]";
#endif
- QMutexLocker locker(&m_mutex);
+ std::unique_lock<QRecursiveMutex> locker(m_mutex);
QMap<QUrl, QSample*>::iterator it = m_samples.find(url);
QSample* sample;
if (it == m_samples.end()) {
@@ -194,7 +195,7 @@ QSample* QSampleCache::requestSample(const QUrl& url)
void QSampleCache::setCapacity(qint64 capacity)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_capacity == capacity)
return;
#ifdef QT_SAMPLECACHE_DEBUG
@@ -227,7 +228,7 @@ void QSampleCache::unloadSample(QSample *sample)
// Called in both threads
void QSampleCache::refresh(qint64 usageChange)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_usage += usageChange;
if (m_capacity <= 0 || m_usage <= m_capacity)
return;
@@ -265,7 +266,7 @@ void QSampleCache::refresh(qint64 usageChange)
// Called in both threads
void QSampleCache::removeUnreferencedSample(QSample *sample)
{
- QMutexLocker m(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_staleSamples.remove(sample);
}
@@ -301,7 +302,8 @@ bool QSampleCache::notifyUnreferencedSample(QSample* sample)
if (m_loadingThread.isRunning())
m_loadingThread.wait();
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
+
if (m_capacity > 0)
return false;
m_samples.remove(sample->m_url);
diff --git a/src/multimedia/audio/qsamplecache_p.h b/src/multimedia/audio/qsamplecache_p.h
index 094e3281e..4c2384743 100644
--- a/src/multimedia/audio/qsamplecache_p.h
+++ b/src/multimedia/audio/qsamplecache_p.h
@@ -143,7 +143,7 @@ private:
QMap<QUrl, QSample*> m_samples;
QSet<QSample*> m_staleSamples;
QNetworkAccessManager *m_networkAccessManager;
- mutable QMutex m_mutex;
+ mutable QRecursiveMutex m_mutex;
qint64 m_capacity;
qint64 m_usage;
QThread m_loadingThread;
diff --git a/src/multimedia/camera/qcameraexposure.h b/src/multimedia/camera/qcameraexposure.h
index f8eb68fbf..a1dc96701 100644
--- a/src/multimedia/camera/qcameraexposure.h
+++ b/src/multimedia/camera/qcameraexposure.h
@@ -165,11 +165,13 @@ Q_SIGNALS:
void isoSensitivityChanged(int);
void exposureCompensationChanged(qreal);
+protected:
+ virtual ~QCameraExposure();
+
private:
friend class QCamera;
friend class QCameraPrivate;
explicit QCameraExposure(QCamera *parent = nullptr);
- virtual ~QCameraExposure();
Q_DISABLE_COPY(QCameraExposure)
Q_DECLARE_PRIVATE(QCameraExposure)
diff --git a/src/multimedia/camera/qcamerafocus.cpp b/src/multimedia/camera/qcamerafocus.cpp
index 33e280205..980b9dc93 100644
--- a/src/multimedia/camera/qcamerafocus.cpp
+++ b/src/multimedia/camera/qcamerafocus.cpp
@@ -325,8 +325,6 @@ class QCameraFocusPrivate : public QMediaObjectPrivate
public:
void initControls();
- QCameraFocus *q_ptr;
-
QCamera *camera;
QCameraFocusControl *focusControl;
@@ -373,12 +371,11 @@ void QCameraFocusPrivate::initControls()
Construct a QCameraFocus for \a camera.
*/
-QCameraFocus::QCameraFocus(QCamera *camera):
- QObject(camera), d_ptr(new QCameraFocusPrivate)
+QCameraFocus::QCameraFocus(QCamera *camera)
+ : QObject(*new QCameraFocusPrivate, camera)
{
Q_D(QCameraFocus);
d->camera = camera;
- d->q_ptr = this;
d->initControls();
}
@@ -389,7 +386,6 @@ QCameraFocus::QCameraFocus(QCamera *camera):
QCameraFocus::~QCameraFocus()
{
- delete d_ptr;
}
/*!
diff --git a/src/multimedia/camera/qcamerafocus.h b/src/multimedia/camera/qcamerafocus.h
index 31d056de9..a5d7725e3 100644
--- a/src/multimedia/camera/qcamerafocus.h
+++ b/src/multimedia/camera/qcamerafocus.h
@@ -152,15 +152,19 @@ Q_SIGNALS:
void maximumOpticalZoomChanged(qreal);
void maximumDigitalZoomChanged(qreal);
+protected:
+ ~QCameraFocus();
+
private:
friend class QCamera;
friend class QCameraPrivate;
QCameraFocus(QCamera *camera);
- ~QCameraFocus();
Q_DISABLE_COPY(QCameraFocus)
Q_DECLARE_PRIVATE(QCameraFocus)
- QCameraFocusPrivate *d_ptr;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QCameraFocusPrivate *d_ptr_deprecated;
+#endif
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QCameraFocus::FocusModes)
diff --git a/src/multimedia/camera/qcameraimageprocessing.cpp b/src/multimedia/camera/qcameraimageprocessing.cpp
index 27b7f05bd..af6c22391 100644
--- a/src/multimedia/camera/qcameraimageprocessing.cpp
+++ b/src/multimedia/camera/qcameraimageprocessing.cpp
@@ -114,8 +114,6 @@ class QCameraImageProcessingPrivate : public QMediaObjectPrivate
public:
void initControls();
- QCameraImageProcessing *q_ptr;
-
QCamera *camera;
QCameraImageProcessingControl *imageControl;
bool available;
@@ -140,12 +138,11 @@ void QCameraImageProcessingPrivate::initControls()
Construct a QCameraImageProcessing for \a camera.
*/
-QCameraImageProcessing::QCameraImageProcessing(QCamera *camera):
- QObject(camera), d_ptr(new QCameraImageProcessingPrivate)
+QCameraImageProcessing::QCameraImageProcessing(QCamera *camera)
+ : QObject(*new QCameraImageProcessingPrivate, camera)
{
Q_D(QCameraImageProcessing);
d->camera = camera;
- d->q_ptr = this;
d->initControls();
}
@@ -156,7 +153,6 @@ QCameraImageProcessing::QCameraImageProcessing(QCamera *camera):
QCameraImageProcessing::~QCameraImageProcessing()
{
- delete d_ptr;
}
diff --git a/src/multimedia/camera/qcameraimageprocessing.h b/src/multimedia/camera/qcameraimageprocessing.h
index 3eb7c8569..f76daf85e 100644
--- a/src/multimedia/camera/qcameraimageprocessing.h
+++ b/src/multimedia/camera/qcameraimageprocessing.h
@@ -116,15 +116,19 @@ public:
void setColorFilter(ColorFilter filter);
bool isColorFilterSupported(ColorFilter filter) const;
+protected:
+ ~QCameraImageProcessing();
+
private:
friend class QCamera;
friend class QCameraPrivate;
QCameraImageProcessing(QCamera *camera);
- ~QCameraImageProcessing();
Q_DISABLE_COPY(QCameraImageProcessing)
Q_DECLARE_PRIVATE(QCameraImageProcessing)
- QCameraImageProcessingPrivate *d_ptr;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QCameraImageProcessingPrivate *d_ptr_deprecated;
+#endif
};
QT_END_NAMESPACE
diff --git a/src/multimedia/configure.json b/src/multimedia/configure.json
index 2db8ce55c..0e9cfc9f7 100644
--- a/src/multimedia/configure.json
+++ b/src/multimedia/configure.json
@@ -55,7 +55,8 @@
{ "type": "pkgConfig",
"args": "gstreamer-1.0 gstreamer-base-1.0 gstreamer-audio-1.0 gstreamer-video-1.0 gstreamer-pbutils-1.0" },
{ "libs": "-lgstreamer-1.0 -lgstbase-1.0 -lgstaudio-1.0 -lgstvideo-1.0 -lgstpbutils-1.0 -lglib-2.0 -lgobject-2.0",
- "condition": "config.win32 || config.macos" }
+ "condition": "config.win32 || config.macos" },
+ { "libs": "", "condition": "config.android && input.gstreamer != ''" }
]
},
"gstreamer_app_0_10": {
@@ -74,7 +75,8 @@
"use": "gstreamer_1_0",
"sources": [
{ "type": "pkgConfig", "args": "gstreamer-app-1.0" },
- { "libs": "-lgstapp-1.0", "condition": "config.win32 || config.macos" }
+ { "libs": "-lgstapp-1.0", "condition": "config.win32 || config.macos" },
+ { "libs": "", "condition": "config.android && input.gstreamer != ''" }
]
},
"gstreamer_photography_0_10": {
@@ -95,6 +97,17 @@
{ "libs": "-lgstphotography-1.0" }
]
},
+ "gstreamer_gl_1_0": {
+ "label": "GStreamer OpenGL 1.0",
+ "export": "gstreamer_gl",
+ "test": {
+ "include": "gst/gl/gl.h"
+ },
+ "use": "gstreamer_1_0",
+ "sources": [
+ { "type": "pkgConfig", "args": "gstreamer-gl-1.0" }
+ ]
+ },
"gstreamer_imxcommon": {
"label": "GStreamer i.MX common",
"export": "gstreamer_imxcommon",
@@ -241,6 +254,11 @@
"condition": "(features.gstreamer_1_0 && libs.gstreamer_photography_1_0) || (features.gstreamer_0_10 && libs.gstreamer_photography_0_10)",
"output": [ "privateFeature" ]
},
+ "gstreamer_gl": {
+ "label": "GStreamer OpenGL",
+ "condition": "features.gstreamer_1_0 && libs.gstreamer_gl_1_0",
+ "output": [ "privateFeature" ]
+ },
"gstreamer_imxcommon": {
"label": "GStreamer i.MX common",
"condition": "(features.gstreamer_1_0 && libs.gstreamer_imxcommon)",
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/audio.cpp b/src/multimedia/doc/snippets/multimedia-snippets/audio.cpp
index 9646b708e..57d3adfb4 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/audio.cpp
+++ b/src/multimedia/doc/snippets/multimedia-snippets/audio.cpp
@@ -213,7 +213,8 @@ void AudioDeviceInfo()
//! [Setting audio format]
//! [Dumping audio formats]
- foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
+ const auto deviceInfos = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
+ for (const QAudioDeviceInfo &deviceInfo : deviceInfos)
qDebug() << "Device name: " << deviceInfo.deviceName();
//! [Dumping audio formats]
}
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp b/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp
index 52f3203be..f851caadd 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp
+++ b/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp
@@ -179,8 +179,8 @@ void overview_movie()
void camera_listing()
{
//! [Camera listing]
- QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
- foreach (const QCameraInfo &cameraInfo, cameras)
+ const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
+ for (const QCameraInfo &cameraInfo : cameras)
qDebug() << cameraInfo.deviceName();
//! [Camera listing]
}
@@ -188,8 +188,8 @@ void camera_listing()
void camera_selection()
{
//! [Camera selection]
- QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
- foreach (const QCameraInfo &cameraInfo, cameras) {
+ const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
+ for (const QCameraInfo &cameraInfo : cameras) {
if (cameraInfo.deviceName() == "mycamera")
camera = new QCamera(cameraInfo);
}
@@ -269,8 +269,8 @@ void camerafocus()
//! [Camera focus zones]
focus->setFocusPointMode(QCameraFocus::FocusPointAuto);
- QList<QCameraFocusZone> zones = focus->focusZones();
- foreach (QCameraFocusZone zone, zones) {
+ const QList<QCameraFocusZone> zones = focus->focusZones();
+ for (const QCameraFocusZone &zone : zones) {
if (zone.status() == QCameraFocusZone::Focused) {
// Draw a green box at zone.area()
} else if (zone.status() == QCameraFocusZone::Selected) {
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/media.cpp b/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
index 4e8c06409..8ec7cb072 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
+++ b/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
@@ -254,10 +254,10 @@ void MediaExample::AudioRecorder()
//! [Audio recorder]
//! [Audio recorder inputs]
- QStringList inputs = audioRecorder->audioInputs();
+ const QStringList inputs = audioRecorder->audioInputs();
QString selectedInput = audioRecorder->defaultAudioInput();
- foreach (QString input, inputs) {
+ for (const QString &input : inputs) {
QString description = audioRecorder->audioInputDescription(input);
// show descriptions to user and allow selection
selectedInput = input;
diff --git a/src/multimedia/doc/src/platform-notes-gstreamer-on-android.qdoc b/src/multimedia/doc/src/platform-notes-gstreamer-on-android.qdoc
new file mode 100644
index 000000000..51836d99a
--- /dev/null
+++ b/src/multimedia/doc/src/platform-notes-gstreamer-on-android.qdoc
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** 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 Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+\page platform-notes-gstreamer-on-android.html
+\title Qt Multimedia GStreamer on Android
+\brief Platform notes for GStreamer on Android
+\since 5.14
+
+This page covers the availability of GStreamer on Android.
+
+\section1 Limitations
+
+Since GStreamer is licensed under LGPL and distributed in archives (and should be statically linked),
+Qt Multimedia does not provide support of GStreamer on Android by default.
+
+Therefore GStreamer support must be explicitly enabled by configuring Qt with the \c -gstreamer option.
+
+\section1 Setup
+
+The GStreamer project provides prebuilt binaries which you can download and unzip into any location of your choice.
+
+The environment variable \c GSTREAMER_ROOT_ANDROID should be set to the location where you unzipped the downloaded package.
+
+\section1 Application
+
+Qt Multimedia does not contain any plugins and all needed plugins must be included
+and registered in applications manually by \c GST_PLUGIN_STATIC_DECLARE and \c GST_PLUGIN_STATIC_REGISTER
+after \c gst_init().
+
+Please refer to the official manual on how to statically link plugins to an application.
+
+https://gstreamer.freedesktop.org/documentation/gstreamer/gstplugin.html?gi-language=c#GST_PLUGIN_STATIC_REGISTER
+
+*/
diff --git a/src/multimedia/multimedia.pro b/src/multimedia/multimedia.pro
index 63c50f09e..6efee8040 100644
--- a/src/multimedia/multimedia.pro
+++ b/src/multimedia/multimedia.pro
@@ -69,7 +69,7 @@ include(video/video.pri)
ANDROID_BUNDLED_JAR_DEPENDENCIES = \
jar/QtMultimedia.jar:org.qtproject.qt5.android.multimedia.QtMultimediaUtils
ANDROID_LIB_DEPENDENCIES = \
- plugins/mediaservice/libqtmedia_android.so \
+ plugins/mediaservice/libplugins_mediaservice_qtmedia_android.so \
lib/libQt5MultimediaQuick.so:Qt5Quick
ANDROID_BUNDLED_FILES += \
lib/libQt5MultimediaQuick.so
@@ -85,6 +85,14 @@ MODULE_WINRT_CAPABILITIES_DEVICE += \
microphone \
webcam
+qtConfig(gstreamer) {
+ ANDROID_LIB_DEPENDENCIES += \
+ plugins/mediaservice/libgstcamerabin.so \
+ plugins/mediaservice/libgstmediacapture.so \
+ plugins/mediaservice/libgstmediaplayer.so \
+ plugins/mediaservice/libgstaudiodecoder.so
+}
+
win32: LIBS_PRIVATE += -luuid
HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
diff --git a/src/multimedia/playback/qmediacontent.cpp b/src/multimedia/playback/qmediacontent.cpp
index 95116d02f..6915ae7af 100644
--- a/src/multimedia/playback/qmediacontent.cpp
+++ b/src/multimedia/playback/qmediacontent.cpp
@@ -123,8 +123,7 @@ private:
which provides the URL of the content.
A non-null QMediaContent will always have a reference to
- the content available through the canonicalUrl() or canonicalRequest()
- methods.
+ the content available through the request() method.
Alternatively QMediaContent can represent a playlist and contain a pointer to a
valid QMediaPlaylist object. In this case URL is optional and can either be empty
@@ -259,24 +258,39 @@ bool QMediaContent::isNull() const
}
/*!
+ \since 5.14
+
+ Returns a QNetworkRequest that represents the resource for this media content.
+*/
+
+QNetworkRequest QMediaContent::request() const
+{
+ return (d && !d->requests.isEmpty()) ? d->requests.first() : QNetworkRequest();
+}
+
+#if QT_DEPRECATED_SINCE(6, 0)
+/*!
+ \obsolete
+
Returns a QUrl that represents that canonical resource for this media content.
*/
QUrl QMediaContent::canonicalUrl() const
{
- return canonicalRequest().url();
+ return request().url();
}
/*!
+ \obsolete
+
Returns a QNetworkRequest that represents that canonical resource for this media content.
*/
QNetworkRequest QMediaContent::canonicalRequest() const
{
- return (d && !d->requests.isEmpty()) ? d->requests.first() : QNetworkRequest();
+ return request();
}
-#if QT_DEPRECATED_SINCE(6, 0)
/*!
\obsolete
diff --git a/src/multimedia/playback/qmediacontent.h b/src/multimedia/playback/qmediacontent.h
index 5193a1fcc..244715b41 100644
--- a/src/multimedia/playback/qmediacontent.h
+++ b/src/multimedia/playback/qmediacontent.h
@@ -72,10 +72,11 @@ public:
bool operator!=(const QMediaContent &other) const;
bool isNull() const;
+ QNetworkRequest request() const;
- QUrl canonicalUrl() const;
- QNetworkRequest canonicalRequest() const;
#if QT_DEPRECATED_SINCE(6, 0)
+ QT_DEPRECATED_X("Use QMediaContent::request().url()") QUrl canonicalUrl() const;
+ QT_DEPRECATED_X("Use QMediaContent::request()") QNetworkRequest canonicalRequest() const;
QT_DEPRECATED QMediaResource canonicalResource() const;
QT_DEPRECATED QMediaResourceList resources() const;
#endif
diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp
index 6f8cbd6ed..48db0335e 100644
--- a/src/multimedia/playback/qmediaplayer.cpp
+++ b/src/multimedia/playback/qmediaplayer.cpp
@@ -183,7 +183,7 @@ bool QMediaPlayerPrivate::isInChain(const QUrl &url)
// Check whether a URL is already in the chain of playlists.
// Also see a comment in parentPlaylist().
for (QMediaPlaylist *current = rootMedia.playlist(); current && current != playlist; current = current->currentMedia().playlist())
- if (current->currentMedia().canonicalUrl() == url) {
+ if (current->currentMedia().request().url() == url) {
return true;
}
return false;
@@ -345,10 +345,10 @@ void QMediaPlayerPrivate::setMedia(const QMediaContent &media, QIODevice *stream
// Backends can't play qrc files directly.
// If the backend supports StreamPlayback, we pass a QFile for that resource.
// If it doesn't, we copy the data to a temporary file and pass its path.
- if (!media.isNull() && !stream && media.canonicalUrl().scheme() == QLatin1String("qrc")) {
+ if (!media.isNull() && !stream && media.request().url().scheme() == QLatin1String("qrc")) {
qrcMedia = media;
- file.reset(new QFile(QLatin1Char(':') + media.canonicalUrl().path()));
+ file.reset(new QFile(QLatin1Char(':') + media.request().url().path()));
if (!file->open(QFile::ReadOnly)) {
QMetaObject::invokeMethod(q, "_q_error", Qt::QueuedConnection,
Q_ARG(int, QMediaPlayer::ResourceError),
@@ -464,11 +464,14 @@ void QMediaPlayerPrivate::loadPlaylist()
// Do not load a playlist if there are more than MAX_NESTED_PLAYLISTS in the chain already,
// or if the playlist URL is already in the chain, i.e. do not allow recursive playlists and loops.
- if (nestedPlaylists < MAX_NESTED_PLAYLISTS && !q->currentMedia().canonicalUrl().isEmpty() && !isInChain(q->currentMedia().canonicalUrl())) {
- pendingPlaylist = QMediaContent(new QMediaPlaylist, q->currentMedia().canonicalUrl(), true);
+ if (nestedPlaylists < MAX_NESTED_PLAYLISTS
+ && !q->currentMedia().request().url().isEmpty()
+ && !isInChain(q->currentMedia().request().url()))
+ {
+ pendingPlaylist = QMediaContent(new QMediaPlaylist, q->currentMedia().request().url(), true);
QObject::connect(pendingPlaylist.playlist(), SIGNAL(loaded()), q, SLOT(_q_handlePlaylistLoaded()));
QObject::connect(pendingPlaylist.playlist(), SIGNAL(loadFailed()), q, SLOT(_q_handlePlaylistLoadFailed()));
- pendingPlaylist.playlist()->load(pendingPlaylist.canonicalRequest());
+ pendingPlaylist.playlist()->load(pendingPlaylist.request());
} else if (playlist) {
playlist->next();
}
diff --git a/src/multimedia/playback/qplaylistfileparser.cpp b/src/multimedia/playback/qplaylistfileparser.cpp
index 92e7f97e8..9af447032 100644
--- a/src/multimedia/playback/qplaylistfileparser.cpp
+++ b/src/multimedia/playback/qplaylistfileparser.cpp
@@ -504,7 +504,7 @@ void QPlaylistFileParser::start(const QMediaContent &media, QIODevice *stream, c
if (stream)
start(stream, mimeType);
else
- start(media.canonicalRequest(), mimeType);
+ start(media.request(), mimeType);
}
void QPlaylistFileParser::start(QIODevice *stream, const QString &mimeType)
diff --git a/src/multimedia/qmediaobject.cpp b/src/multimedia/qmediaobject.cpp
index ec2bebb34..a26433c8e 100644
--- a/src/multimedia/qmediaobject.cpp
+++ b/src/multimedia/qmediaobject.cpp
@@ -113,7 +113,6 @@ void QMediaObjectPrivate::_q_availabilityChanged()
QMediaObject::~QMediaObject()
{
- delete d_ptr;
}
/*!
@@ -230,15 +229,11 @@ void QMediaObject::unbind(QObject *object)
constructor is protected.
*/
-QMediaObject::QMediaObject(QObject *parent, QMediaService *service):
- QObject(parent),
- d_ptr(new QMediaObjectPrivate)
-
+QMediaObject::QMediaObject(QObject *parent, QMediaService *service)
+ : QObject(*new QMediaObjectPrivate, parent)
{
Q_D(QMediaObject);
- d->q_ptr = this;
-
d->notifyTimer = new QTimer(this);
d->notifyTimer->setInterval(1000);
connect(d->notifyTimer, SIGNAL(timeout()), SLOT(_q_notify()));
@@ -252,13 +247,10 @@ QMediaObject::QMediaObject(QObject *parent, QMediaService *service):
\internal
*/
-QMediaObject::QMediaObject(QMediaObjectPrivate &dd, QObject *parent,
- QMediaService *service):
- QObject(parent),
- d_ptr(&dd)
+QMediaObject::QMediaObject(QMediaObjectPrivate &dd, QObject *parent, QMediaService *service)
+ : QObject(dd, parent)
{
Q_D(QMediaObject);
- d->q_ptr = this;
d->notifyTimer = new QTimer(this);
d->notifyTimer->setInterval(1000);
diff --git a/src/multimedia/qmediaobject.h b/src/multimedia/qmediaobject.h
index 5788254b8..fabd015fe 100644
--- a/src/multimedia/qmediaobject.h
+++ b/src/multimedia/qmediaobject.h
@@ -93,7 +93,9 @@ protected:
void addPropertyWatch(QByteArray const &name);
void removePropertyWatch(QByteArray const &name);
- QMediaObjectPrivate *d_ptr;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QMediaObjectPrivate *d_ptr_deprecated;
+#endif
private:
void setupControls();
diff --git a/src/multimedia/qmediaobject_p.h b/src/multimedia/qmediaobject_p.h
index 85caf9a50..5067fa6d1 100644
--- a/src/multimedia/qmediaobject_p.h
+++ b/src/multimedia/qmediaobject_p.h
@@ -56,6 +56,7 @@
#include <QtCore/qtimer.h>
#include "qmediaobject.h"
+#include "private/qobject_p.h"
QT_BEGIN_NAMESPACE
@@ -68,12 +69,12 @@ class QMediaAvailabilityControl;
friend class Class;
-class QMediaObjectPrivate
+class QMediaObjectPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QMediaObject)
public:
- QMediaObjectPrivate() : service(nullptr), metaDataControl(nullptr), availabilityControl(nullptr), notifyTimer(nullptr), q_ptr(nullptr) {}
+ QMediaObjectPrivate() : service(nullptr), metaDataControl(nullptr), availabilityControl(nullptr), notifyTimer(nullptr) {}
virtual ~QMediaObjectPrivate() {}
void _q_notify();
@@ -85,8 +86,6 @@ public:
QTimer* notifyTimer;
QSet<int> notifyProperties;
-
- QMediaObject *q_ptr;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/qmediaservice.cpp b/src/multimedia/qmediaservice.cpp
index 7580ecce7..7ea24c6dc 100644
--- a/src/multimedia/qmediaservice.cpp
+++ b/src/multimedia/qmediaservice.cpp
@@ -87,20 +87,16 @@ QT_BEGIN_NAMESPACE
*/
QMediaService::QMediaService(QObject *parent)
- : QObject(parent)
- , d_ptr(new QMediaServicePrivate)
+ : QObject(*new QMediaServicePrivate, parent)
{
- d_ptr->q_ptr = this;
}
/*!
\internal
*/
QMediaService::QMediaService(QMediaServicePrivate &dd, QObject *parent)
- : QObject(parent)
- , d_ptr(&dd)
+ : QObject(dd, parent)
{
- d_ptr->q_ptr = this;
}
/*!
@@ -109,7 +105,6 @@ QMediaService::QMediaService(QMediaServicePrivate &dd, QObject *parent)
QMediaService::~QMediaService()
{
- delete d_ptr;
}
/*!
diff --git a/src/multimedia/qmediaservice.h b/src/multimedia/qmediaservice.h
index 9e653b2d8..019b86693 100644
--- a/src/multimedia/qmediaservice.h
+++ b/src/multimedia/qmediaservice.h
@@ -74,7 +74,9 @@ protected:
QMediaService(QObject* parent);
QMediaService(QMediaServicePrivate &dd, QObject *parent);
- QMediaServicePrivate *d_ptr;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QMediaServicePrivate *d_ptr_deprecated;
+#endif
private:
Q_DECLARE_PRIVATE(QMediaService)
diff --git a/src/multimedia/qmediaservice_p.h b/src/multimedia/qmediaservice_p.h
index 8c18ab1df..a9dbd5d29 100644
--- a/src/multimedia/qmediaservice_p.h
+++ b/src/multimedia/qmediaservice_p.h
@@ -51,18 +51,19 @@
// We mean it.
//
+#include "private/qobject_p.h"
+
QT_BEGIN_NAMESPACE
class QAudioDeviceControl;
-class QMediaServicePrivate
+class QMediaServicePrivate : public QObjectPrivate
{
+ Q_DECLARE_PUBLIC(QMediaService)
public:
- QMediaServicePrivate(): q_ptr(0) {}
+ QMediaServicePrivate() {}
virtual ~QMediaServicePrivate() {}
-
- QMediaService *q_ptr;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/qmediaserviceprovider.cpp b/src/multimedia/qmediaserviceprovider.cpp
index af09c406f..5731cf5be 100644
--- a/src/multimedia/qmediaserviceprovider.cpp
+++ b/src/multimedia/qmediaserviceprovider.cpp
@@ -85,6 +85,7 @@ public:
/*!
\class QMediaServiceProviderHint
+ \obsolete
\brief The QMediaServiceProviderHint class describes what is required of a QMediaService.
@@ -670,6 +671,7 @@ Q_GLOBAL_STATIC(QPluginServiceProvider, pluginProvider);
/*!
\class QMediaServiceProvider
+ \obsolete
\ingroup multimedia
\ingroup multimedia_control
\ingroup multimedia_core
@@ -827,6 +829,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceProviderPlugin
+ \obsolete
\inmodule QtMultimedia
\brief The QMediaServiceProviderPlugin class interface provides an interface for QMediaService
plug-ins.
@@ -854,6 +857,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceSupportedFormatsInterface
+ \obsolete
\inmodule QtMultimedia
\brief The QMediaServiceSupportedFormatsInterface class interface
identifies if a media service plug-in supports a media format.
@@ -882,6 +886,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceSupportedDevicesInterface
+ \obsolete
\inmodule QtMultimedia
\brief The QMediaServiceSupportedDevicesInterface class interface
identifies the devices supported by a media service plug-in.
@@ -909,6 +914,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceDefaultDeviceInterface
+ \obsolete
\inmodule QtMultimedia
\brief The QMediaServiceDefaultDeviceInterface class interface
identifies the default device used by a media service plug-in.
@@ -932,6 +938,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceCameraInfoInterface
+ \obsolete
\inmodule QtMultimedia
\since 5.3
\brief The QMediaServiceCameraInfoInterface class interface
@@ -961,6 +968,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceFeaturesInterface
+ \obsolete
\inmodule QtMultimedia
\brief The QMediaServiceFeaturesInterface class interface identifies
features supported by a media service plug-in.
diff --git a/src/multimedia/qmediatimerange.cpp b/src/multimedia/qmediatimerange.cpp
index 676d3d391..3a22e000f 100644
--- a/src/multimedia/qmediatimerange.cpp
+++ b/src/multimedia/qmediatimerange.cpp
@@ -94,6 +94,7 @@ QMediaTimeInterval::QMediaTimeInterval(qint64 start, qint64 end)
}
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
/*!
\fn QMediaTimeInterval::QMediaTimeInterval(const QMediaTimeInterval &other)
@@ -105,6 +106,7 @@ QMediaTimeInterval::QMediaTimeInterval(const QMediaTimeInterval &other)
{
}
+#endif
/*!
\fn QMediaTimeInterval::start() const
diff --git a/src/multimedia/qmediatimerange.h b/src/multimedia/qmediatimerange.h
index 5b6d711af..71145adde 100644
--- a/src/multimedia/qmediatimerange.h
+++ b/src/multimedia/qmediatimerange.h
@@ -54,8 +54,12 @@ class Q_MULTIMEDIA_EXPORT QMediaTimeInterval
public:
QMediaTimeInterval();
QMediaTimeInterval(qint64 start, qint64 end);
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QMediaTimeInterval(const QMediaTimeInterval&);
QMediaTimeInterval &operator=(const QMediaTimeInterval&) = default;
+ QMediaTimeInterval(QMediaTimeInterval &&) = default;
+ QMediaTimeInterval &operator=(QMediaTimeInterval &&) = default;
+#endif
qint64 start() const;
qint64 end() const;
diff --git a/src/multimedia/radio/qradiodata.cpp b/src/multimedia/radio/qradiodata.cpp
index 4c824a4f8..c795cf389 100644
--- a/src/multimedia/radio/qradiodata.cpp
+++ b/src/multimedia/radio/qradiodata.cpp
@@ -59,6 +59,7 @@ Q_CONSTRUCTOR_FUNCTION(qRegisterRadioDataMetaTypes)
/*!
\class QRadioData
+ \obsolete
\brief The QRadioData class provides interfaces to the RDS functionality of the system radio.
\inmodule QtMultimedia
diff --git a/src/multimedia/radio/qradiotuner.cpp b/src/multimedia/radio/qradiotuner.cpp
index 2af0d0f02..ea7fb35f5 100644
--- a/src/multimedia/radio/qradiotuner.cpp
+++ b/src/multimedia/radio/qradiotuner.cpp
@@ -64,6 +64,7 @@ Q_CONSTRUCTOR_FUNCTION(qRegisterRadioTunerMetaTypes)
/*!
\class QRadioTuner
+ \obsolete
\brief The QRadioTuner class provides an interface to the systems analog radio device.
\inmodule QtMultimedia
diff --git a/src/multimedia/video/qvideoframe.cpp b/src/multimedia/video/qvideoframe.cpp
index b466a3180..5e2d6df39 100644
--- a/src/multimedia/video/qvideoframe.cpp
+++ b/src/multimedia/video/qvideoframe.cpp
@@ -227,6 +227,11 @@ private:
horizontally and vertically sub-sampled, i.e. the height and width of the U and V planes are
half that of the Y plane.
+ \value Format_YUV422P
+ The frame is stored using an 8-bit per component planar YUV format with the U and V planes
+ horizontally sub-sampled, i.e. the width of the U and V planes are
+ half that of the Y plane, and height of U and V planes is the same as Y.
+
\value Format_YV12
The frame is stored using an 8-bit per component planar YVU format with the V and U planes
horizontally and vertically sub-sampled, i.e. the height and width of the V and U planes are
@@ -638,6 +643,7 @@ bool QVideoFrame::map(QAbstractVideoBuffer::MapMode mode)
// Single plane or opaque format.
break;
case Format_YUV420P:
+ case Format_YUV422P:
case Format_YV12: {
// The UV stride is usually half the Y stride and is 32-bit aligned.
// However it's not always the case, at least on Windows where the
@@ -646,13 +652,14 @@ bool QVideoFrame::map(QAbstractVideoBuffer::MapMode mode)
// have a correct stride.
const int height = d->size.height();
const int yStride = d->bytesPerLine[0];
- const int uvStride = (d->mappedBytes - (yStride * height)) / height;
+ const int uvHeight = d->pixelFormat == Format_YUV422P ? height : height / 2;
+ const int uvStride = (d->mappedBytes - (yStride * height)) / uvHeight / 2;
- // Three planes, the second and third vertically and horizontally subsampled.
+ // Three planes, the second and third vertically (and horizontally for other than Format_YUV422P formats) subsampled.
d->planeCount = 3;
d->bytesPerLine[2] = d->bytesPerLine[1] = uvStride;
d->data[1] = d->data[0] + (yStride * height);
- d->data[2] = d->data[1] + (uvStride * height / 2);
+ d->data[2] = d->data[1] + (uvStride * uvHeight);
break;
}
case Format_NV12:
@@ -1001,6 +1008,7 @@ QImage::Format QVideoFrame::imageFormatFromPixelFormat(PixelFormat format)
case Format_AYUV444_Premultiplied:
case Format_YUV444:
case Format_YUV420P:
+ case Format_YUV422P:
case Format_YV12:
case Format_UYVY:
case Format_YUYV:
@@ -1072,7 +1080,7 @@ static VideoFrameConvertFunc qConvertFuncs[QVideoFrame::NPixelFormats] = {
/* Format_CameraRaw */ nullptr,
/* Format_AdobeDng */ nullptr,
/* Format_ABGR32 */ nullptr, // ### Qt 6: reorder
-
+ /* Format_YUV422P */ nullptr,
};
static void qInitConvertFuncsAsm()
@@ -1192,6 +1200,8 @@ QDebug operator<<(QDebug dbg, QVideoFrame::PixelFormat pf)
return dbg << "Format_YUV444";
case QVideoFrame::Format_YUV420P:
return dbg << "Format_YUV420P";
+ case QVideoFrame::Format_YUV422P:
+ return dbg << "Format_YUV422P";
case QVideoFrame::Format_YV12:
return dbg << "Format_YV12";
case QVideoFrame::Format_UYVY:
diff --git a/src/multimedia/video/qvideoframe.h b/src/multimedia/video/qvideoframe.h
index 206658bc5..8fcf47fc4 100644
--- a/src/multimedia/video/qvideoframe.h
+++ b/src/multimedia/video/qvideoframe.h
@@ -102,6 +102,7 @@ public:
Format_CameraRaw,
Format_AdobeDng,
Format_ABGR32, // ### Qt 6: reorder
+ Format_YUV422P,
#ifndef Q_QDOC
NPixelFormats,
diff --git a/src/multimedia/video/qvideosurfaceformat.cpp b/src/multimedia/video/qvideosurfaceformat.cpp
index 7a703c260..77ea276c7 100644
--- a/src/multimedia/video/qvideosurfaceformat.cpp
+++ b/src/multimedia/video/qvideosurfaceformat.cpp
@@ -519,9 +519,9 @@ QList<QByteArray> QVideoSurfaceFormat::propertyNames() const
QVariant QVideoSurfaceFormat::property(const char *name) const
{
if (qstrcmp(name, "handleType") == 0) {
- return qVariantFromValue(d->handleType);
+ return QVariant::fromValue(d->handleType);
} else if (qstrcmp(name, "pixelFormat") == 0) {
- return qVariantFromValue(d->pixelFormat);
+ return QVariant::fromValue(d->pixelFormat);
} else if (qstrcmp(name, "frameSize") == 0) {
return d->frameSize;
} else if (qstrcmp(name, "frameWidth") == 0) {
@@ -531,15 +531,15 @@ QVariant QVideoSurfaceFormat::property(const char *name) const
} else if (qstrcmp(name, "viewport") == 0) {
return d->viewport;
} else if (qstrcmp(name, "scanLineDirection") == 0) {
- return qVariantFromValue(d->scanLineDirection);
+ return QVariant::fromValue(d->scanLineDirection);
} else if (qstrcmp(name, "frameRate") == 0) {
- return qVariantFromValue(d->frameRate);
+ return QVariant::fromValue(d->frameRate);
} else if (qstrcmp(name, "pixelAspectRatio") == 0) {
- return qVariantFromValue(d->pixelAspectRatio);
+ return QVariant::fromValue(d->pixelAspectRatio);
} else if (qstrcmp(name, "sizeHint") == 0) {
return sizeHint();
} else if (qstrcmp(name, "yCbCrColorSpace") == 0) {
- return qVariantFromValue(d->ycbcrColorSpace);
+ return QVariant::fromValue(d->ycbcrColorSpace);
} else if (qstrcmp(name, "mirrored") == 0) {
return d->mirrored;
} else {
diff --git a/src/multimediawidgets/qvideowidget.cpp b/src/multimediawidgets/qvideowidget.cpp
index bae0efd22..a7d3665f8 100644
--- a/src/multimediawidgets/qvideowidget.cpp
+++ b/src/multimediawidgets/qvideowidget.cpp
@@ -77,7 +77,7 @@ QVideoWidgetControlBackend::QVideoWidgetControlBackend(
connect(control, SIGNAL(fullScreenChanged(bool)), widget, SLOT(_q_fullScreenChanged(bool)));
QBoxLayout *layout = new QVBoxLayout;
- layout->setMargin(0);
+ layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
QWidget *videoWidget = control->videoWidget();
@@ -1007,7 +1007,11 @@ void QVideoWidget::paintEvent(QPaintEvent *event)
}
#if defined(Q_OS_WIN)
+# if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+bool QVideoWidget::nativeEvent(const QByteArray &eventType, void *message, qintptr *result)
+# else
bool QVideoWidget::nativeEvent(const QByteArray &eventType, void *message, long *result)
+# endif
{
Q_D(QVideoWidget);
Q_UNUSED(eventType);
diff --git a/src/multimediawidgets/qvideowidget.h b/src/multimediawidgets/qvideowidget.h
index 2a08b6fbd..fff1153ca 100644
--- a/src/multimediawidgets/qvideowidget.h
+++ b/src/multimediawidgets/qvideowidget.h
@@ -82,7 +82,11 @@ public:
QSize sizeHint() const override;
#if defined(Q_OS_WIN)
+# if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result) override;
+# else
bool nativeEvent(const QByteArray &eventType, void *message, long *result) override;
+# endif
#endif
public Q_SLOTS:
diff --git a/src/plugins/alsa/qalsaaudiodeviceinfo.cpp b/src/plugins/alsa/qalsaaudiodeviceinfo.cpp
index 5e8edc3fc..474fd6bde 100644
--- a/src/plugins/alsa/qalsaaudiodeviceinfo.cpp
+++ b/src/plugins/alsa/qalsaaudiodeviceinfo.cpp
@@ -54,7 +54,7 @@
QT_BEGIN_NAMESPACE
-QAlsaAudioDeviceInfo::QAlsaAudioDeviceInfo(QByteArray dev, QAudio::Mode mode)
+QAlsaAudioDeviceInfo::QAlsaAudioDeviceInfo(const QByteArray &dev, QAudio::Mode mode)
{
handle = 0;
diff --git a/src/plugins/alsa/qalsaaudiodeviceinfo.h b/src/plugins/alsa/qalsaaudiodeviceinfo.h
index 21e30f49b..65675df54 100644
--- a/src/plugins/alsa/qalsaaudiodeviceinfo.h
+++ b/src/plugins/alsa/qalsaaudiodeviceinfo.h
@@ -74,7 +74,7 @@ class QAlsaAudioDeviceInfo : public QAbstractAudioDeviceInfo
{
Q_OBJECT
public:
- QAlsaAudioDeviceInfo(QByteArray dev,QAudio::Mode mode);
+ QAlsaAudioDeviceInfo(const QByteArray &dev,QAudio::Mode mode);
~QAlsaAudioDeviceInfo();
bool testSettings(const QAudioFormat& format) const;
diff --git a/src/plugins/alsa/qalsaaudioinput.h b/src/plugins/alsa/qalsaaudioinput.h
index 09f615fea..fa9c954d7 100644
--- a/src/plugins/alsa/qalsaaudioinput.h
+++ b/src/plugins/alsa/qalsaaudioinput.h
@@ -59,7 +59,7 @@
#include <QtCore/qtimer.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
-#include <QtCore/qdatetime.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qiodevice.h>
#include <QtMultimedia/qaudio.h>
@@ -144,8 +144,8 @@ private:
void drain();
QTimer* timer;
- QTime timeStamp;
- QTime clockStamp;
+ QElapsedTimer timeStamp;
+ QElapsedTimer clockStamp;
qint64 elapsedTimeOffset;
int intervalTime;
RingBuffer ringBuffer;
diff --git a/src/plugins/alsa/qalsaaudiooutput.h b/src/plugins/alsa/qalsaaudiooutput.h
index d38e3d5d4..8002322cb 100644
--- a/src/plugins/alsa/qalsaaudiooutput.h
+++ b/src/plugins/alsa/qalsaaudiooutput.h
@@ -58,7 +58,7 @@
#include <QtCore/qtimer.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
-#include <QtCore/qdatetime.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qiodevice.h>
#include <QtMultimedia/qaudio.h>
@@ -132,8 +132,8 @@ private:
QTimer* timer;
QByteArray m_device;
int bytesAvailable;
- QTime timeStamp;
- QTime clockStamp;
+ QElapsedTimer timeStamp;
+ QElapsedTimer clockStamp;
qint64 elapsedTimeOffset;
char* audioBuffer;
snd_pcm_t* handle;
diff --git a/src/plugins/android/src/common/qandroidvideooutput.cpp b/src/plugins/android/src/common/qandroidvideooutput.cpp
index 083ceff24..25e67e865 100644
--- a/src/plugins/android/src/common/qandroidvideooutput.cpp
+++ b/src/plugins/android/src/common/qandroidvideooutput.cpp
@@ -110,7 +110,7 @@ public:
m_image = m_output->m_fbo->toImage();
if (numBytes)
- *numBytes = m_image.byteCount();
+ *numBytes = static_cast<int>(m_image.sizeInBytes());
if (bytesPerLine)
*bytesPerLine = m_image.bytesPerLine();
diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp
index 13a8cdbbb..82250b654 100644
--- a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp
+++ b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp
@@ -384,7 +384,7 @@ void QAndroidMediaPlayerControl::setMedia(const QMediaContent &mediaContent,
if ((mMediaPlayer->display() == 0) && mVideoOutput)
mMediaPlayer->setDisplay(mVideoOutput->surfaceTexture());
- mMediaPlayer->setDataSource(mediaContent.canonicalRequest());
+ mMediaPlayer->setDataSource(mediaContent.request());
mMediaPlayer->prepareAsync();
}
diff --git a/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.cpp b/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.cpp
index 1185e63dc..ef86af896 100644
--- a/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.cpp
+++ b/src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.cpp
@@ -126,7 +126,7 @@ void QAndroidMetaDataReaderControl::onUpdateMetaData()
if (m_mediaContent.isNull())
return;
- const QUrl &url = m_mediaContent.canonicalUrl();
+ const QUrl &url = m_mediaContent.request().url();
QtConcurrent::run(&extractMetadata, this, url);
}
@@ -134,7 +134,7 @@ void QAndroidMetaDataReaderControl::updateData(const QVariantMap &metadata, cons
{
const QMutexLocker l(&m_mtx);
- if (m_mediaContent.canonicalUrl() != url)
+ if (m_mediaContent.request().url() != url)
return;
const bool oldAvailable = m_available;
diff --git a/src/plugins/android/src/wrappers/jni/androidcamera.cpp b/src/plugins/android/src/wrappers/jni/androidcamera.cpp
index 90af0119a..2f32fb742 100644
--- a/src/plugins/android/src/wrappers/jni/androidcamera.cpp
+++ b/src/plugins/android/src/wrappers/jni/androidcamera.cpp
@@ -52,6 +52,8 @@
#include <QtCore/qmutex.h>
#include <QtMultimedia/private/qmemoryvideobuffer_p.h>
+#include <mutex>
+
QT_BEGIN_NAMESPACE
static const char QtCameraListenerClassName[] = "org/qtproject/qt5/android/multimedia/QtCameraListener";
@@ -263,7 +265,7 @@ public:
Q_INVOKABLE QStringList callParametersStringListMethod(const QByteArray &methodName);
int m_cameraId;
- QMutex m_parametersMutex;
+ QRecursiveMutex m_parametersMutex;
QSize m_previewSize;
int m_rotation;
QJNIObjectPrivate m_info;
@@ -823,8 +825,7 @@ void AndroidCamera::stopPreviewSynchronous()
}
AndroidCameraPrivate::AndroidCameraPrivate()
- : QObject(),
- m_parametersMutex(QMutex::Recursive)
+ : QObject()
{
}
@@ -911,7 +912,7 @@ int AndroidCameraPrivate::getNativeOrientation()
QSize AndroidCameraPrivate::getPreferredPreviewSizeForVideo()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return QSize();
@@ -929,7 +930,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPreviewSizes()
{
QList<QSize> list;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_parameters.isValid()) {
QJNIObjectPrivate sizeList = m_parameters.callObjectMethod("getSupportedPreviewSizes",
@@ -942,7 +943,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPreviewSizes()
list.append(QSize(size.getField<jint>("width"), size.getField<jint>("height")));
}
- qSort(list.begin(), list.end(), qt_sizeLessThan);
+ std::sort(list.begin(), list.end(), qt_sizeLessThan);
}
return list;
@@ -950,7 +951,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPreviewSizes()
QList<AndroidCamera::FpsRange> AndroidCameraPrivate::getSupportedPreviewFpsRange()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QJNIEnvironmentPrivate env;
@@ -987,7 +988,7 @@ QList<AndroidCamera::FpsRange> AndroidCameraPrivate::getSupportedPreviewFpsRange
AndroidCamera::FpsRange AndroidCameraPrivate::getPreviewFpsRange()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QJNIEnvironmentPrivate env;
@@ -1012,7 +1013,7 @@ AndroidCamera::FpsRange AndroidCameraPrivate::getPreviewFpsRange()
void AndroidCameraPrivate::setPreviewFpsRange(int min, int max)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1024,7 +1025,7 @@ void AndroidCameraPrivate::setPreviewFpsRange(int min, int max)
AndroidCamera::ImageFormat AndroidCameraPrivate::getPreviewFormat()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return AndroidCamera::UnknownImageFormat;
@@ -1034,7 +1035,7 @@ AndroidCamera::ImageFormat AndroidCameraPrivate::getPreviewFormat()
void AndroidCameraPrivate::setPreviewFormat(AndroidCamera::ImageFormat fmt)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1047,7 +1048,7 @@ QList<AndroidCamera::ImageFormat> AndroidCameraPrivate::getSupportedPreviewForma
{
QList<AndroidCamera::ImageFormat> list;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_parameters.isValid()) {
QJNIObjectPrivate formatList = m_parameters.callObjectMethod("getSupportedPreviewFormats",
@@ -1066,7 +1067,7 @@ QList<AndroidCamera::ImageFormat> AndroidCameraPrivate::getSupportedPreviewForma
QSize AndroidCameraPrivate::getPreviewSize()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return QSize();
@@ -1082,7 +1083,7 @@ QSize AndroidCameraPrivate::getPreviewSize()
void AndroidCameraPrivate::updatePreviewSize()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_previewSize.isValid()) {
m_parameters.callMethod<void>("setPreviewSize", "(II)V", m_previewSize.width(), m_previewSize.height());
@@ -1117,7 +1118,7 @@ void AndroidCameraPrivate::setDisplayOrientation(int degrees)
bool AndroidCameraPrivate::isZoomSupported()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1127,7 +1128,7 @@ bool AndroidCameraPrivate::isZoomSupported()
int AndroidCameraPrivate::getMaxZoom()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1137,7 +1138,7 @@ int AndroidCameraPrivate::getMaxZoom()
QList<int> AndroidCameraPrivate::getZoomRatios()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QList<int> ratios;
@@ -1159,7 +1160,7 @@ QList<int> AndroidCameraPrivate::getZoomRatios()
int AndroidCameraPrivate::getZoom()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1169,7 +1170,7 @@ int AndroidCameraPrivate::getZoom()
void AndroidCameraPrivate::setZoom(int value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1180,7 +1181,7 @@ void AndroidCameraPrivate::setZoom(int value)
QString AndroidCameraPrivate::getFlashMode()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1196,7 +1197,7 @@ QString AndroidCameraPrivate::getFlashMode()
void AndroidCameraPrivate::setFlashMode(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1209,7 +1210,7 @@ void AndroidCameraPrivate::setFlashMode(const QString &value)
QString AndroidCameraPrivate::getFocusMode()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1225,7 +1226,7 @@ QString AndroidCameraPrivate::getFocusMode()
void AndroidCameraPrivate::setFocusMode(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1241,7 +1242,7 @@ int AndroidCameraPrivate::getMaxNumFocusAreas()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return 0;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1256,7 +1257,7 @@ QList<QRect> AndroidCameraPrivate::getFocusAreas()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return areas;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_parameters.isValid()) {
QJNIObjectPrivate list = m_parameters.callObjectMethod("getFocusAreas",
@@ -1282,7 +1283,7 @@ void AndroidCameraPrivate::setFocusAreas(const QList<QRect> &areas)
if (QtAndroidPrivate::androidSdkVersion() < 14)
return;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1330,7 +1331,7 @@ bool AndroidCameraPrivate::isAutoExposureLockSupported()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1343,7 +1344,7 @@ bool AndroidCameraPrivate::getAutoExposureLock()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1356,7 +1357,7 @@ void AndroidCameraPrivate::setAutoExposureLock(bool toggle)
if (QtAndroidPrivate::androidSdkVersion() < 14)
return;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1370,7 +1371,7 @@ bool AndroidCameraPrivate::isAutoWhiteBalanceLockSupported()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1383,7 +1384,7 @@ bool AndroidCameraPrivate::getAutoWhiteBalanceLock()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1396,7 +1397,7 @@ void AndroidCameraPrivate::setAutoWhiteBalanceLock(bool toggle)
if (QtAndroidPrivate::androidSdkVersion() < 14)
return;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1407,7 +1408,7 @@ void AndroidCameraPrivate::setAutoWhiteBalanceLock(bool toggle)
int AndroidCameraPrivate::getExposureCompensation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1417,7 +1418,7 @@ int AndroidCameraPrivate::getExposureCompensation()
void AndroidCameraPrivate::setExposureCompensation(int value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1428,7 +1429,7 @@ void AndroidCameraPrivate::setExposureCompensation(int value)
float AndroidCameraPrivate::getExposureCompensationStep()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1438,7 +1439,7 @@ float AndroidCameraPrivate::getExposureCompensationStep()
int AndroidCameraPrivate::getMinExposureCompensation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1448,7 +1449,7 @@ int AndroidCameraPrivate::getMinExposureCompensation()
int AndroidCameraPrivate::getMaxExposureCompensation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1458,7 +1459,7 @@ int AndroidCameraPrivate::getMaxExposureCompensation()
QString AndroidCameraPrivate::getSceneMode()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1474,7 +1475,7 @@ QString AndroidCameraPrivate::getSceneMode()
void AndroidCameraPrivate::setSceneMode(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1487,7 +1488,7 @@ void AndroidCameraPrivate::setSceneMode(const QString &value)
QString AndroidCameraPrivate::getWhiteBalance()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1503,7 +1504,7 @@ QString AndroidCameraPrivate::getWhiteBalance()
void AndroidCameraPrivate::setWhiteBalance(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1518,7 +1519,7 @@ void AndroidCameraPrivate::setWhiteBalance(const QString &value)
void AndroidCameraPrivate::updateRotation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
m_parameters.callMethod<void>("setRotation", "(I)V", m_rotation);
applyParameters();
@@ -1526,7 +1527,7 @@ void AndroidCameraPrivate::updateRotation()
QList<QSize> AndroidCameraPrivate::getSupportedPictureSizes()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QList<QSize> list;
@@ -1541,7 +1542,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPictureSizes()
list.append(QSize(size.getField<jint>("width"), size.getField<jint>("height")));
}
- qSort(list.begin(), list.end(), qt_sizeLessThan);
+ std::sort(list.begin(), list.end(), qt_sizeLessThan);
}
return list;
@@ -1549,7 +1550,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPictureSizes()
void AndroidCameraPrivate::setPictureSize(const QSize &size)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1560,7 +1561,7 @@ void AndroidCameraPrivate::setPictureSize(const QSize &size)
void AndroidCameraPrivate::setJpegQuality(int quality)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1669,7 +1670,7 @@ void AndroidCameraPrivate::applyParameters()
QStringList AndroidCameraPrivate::callParametersStringListMethod(const QByteArray &methodName)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QStringList stringList;
diff --git a/src/plugins/avfoundation/camera/avfcamerasession.mm b/src/plugins/avfoundation/camera/avfcamerasession.mm
index 8ed627774..a3263badc 100644
--- a/src/plugins/avfoundation/camera/avfcamerasession.mm
+++ b/src/plugins/avfoundation/camera/avfcamerasession.mm
@@ -234,7 +234,7 @@ void AVFCameraSession::updateCameraDevices()
break;
case AVCaptureDevicePositionFront:
info.position = QCamera::FrontFace;
- info.orientation = 90;
+ info.orientation = 270;
break;
default:
info.position = QCamera::UnspecifiedPosition;
diff --git a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.mm b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.mm
index bbb16e709..ddf833fd3 100644
--- a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.mm
+++ b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.mm
@@ -76,7 +76,7 @@ static bool format_supports_framerate(AVCaptureDeviceFormat *format, qreal fps)
static bool real_list_contains(const QList<qreal> &list, qreal value)
{
- Q_FOREACH (qreal r, list) {
+ for (qreal r : list) {
if (qFuzzyCompare(r, value))
return true;
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
index 3b25a5801..3c59419e7 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.mm
@@ -491,7 +491,7 @@ const QIODevice *AVFMediaPlayerSession::mediaStream() const
void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *stream)
{
#ifdef QT_DEBUG_AVF
- qDebug() << Q_FUNC_INFO << content.canonicalUrl();
+ qDebug() << Q_FUNC_INFO << content.request().url();
#endif
[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) unloadMedia];
@@ -508,7 +508,7 @@ void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *st
const QMediaPlayer::MediaStatus oldMediaStatus = m_mediaStatus;
const QMediaPlayer::State oldState = m_state;
- if (content.isNull() || content.canonicalUrl().isEmpty()) {
+ if (content.isNull() || content.request().url().isEmpty()) {
m_mediaStatus = QMediaPlayer::NoMedia;
if (m_mediaStatus != oldMediaStatus)
Q_EMIT mediaStatusChanged(m_mediaStatus);
@@ -526,7 +526,7 @@ void AVFMediaPlayerSession::setMedia(const QMediaContent &content, QIODevice *st
//Load AVURLAsset
//initialize asset using content's URL
- NSString *urlString = [NSString stringWithUTF8String:content.canonicalUrl().toEncoded().constData()];
+ NSString *urlString = [NSString stringWithUTF8String:content.request().url().toEncoded().constData()];
NSURL *url = [NSURL URLWithString:urlString];
[static_cast<AVFMediaPlayerSessionObserver*>(m_observer) setURL:url];
diff --git a/src/plugins/common/evr/evrcustompresenter.cpp b/src/plugins/common/evr/evrcustompresenter.cpp
index 2bc761c45..b2dd0426c 100644
--- a/src/plugins/common/evr/evrcustompresenter.cpp
+++ b/src/plugins/common/evr/evrcustompresenter.cpp
@@ -50,6 +50,9 @@
#include <qcoreapplication.h>
#include <qmath.h>
#include <QtCore/qdebug.h>
+
+#include <mutex>
+
#include <float.h>
#include <evcode.h>
@@ -542,7 +545,6 @@ EVRCustomPresenter::EVRCustomPresenter(QAbstractVideoSurface *surface)
, m_sampleFreeCB(this, &EVRCustomPresenter::onSampleFree)
, m_refCount(1)
, m_renderState(RenderShutdown)
- , m_mutex(QMutex::Recursive)
, m_scheduler(this)
, m_tokenCounter(0)
, m_sampleNotify(false)
@@ -659,7 +661,7 @@ HRESULT EVRCustomPresenter::InitServicePointers(IMFTopologyServiceLookup *lookup
HRESULT hr = S_OK;
DWORD objectCount = 0;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
// Do not allow initializing when playing or paused.
if (isActive())
@@ -739,7 +741,7 @@ HRESULT EVRCustomPresenter::ProcessMessage(MFVP_MESSAGE_TYPE message, ULONG_PTR
{
HRESULT hr = S_OK;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
hr = checkShutdown();
if (FAILED(hr))
@@ -806,7 +808,7 @@ HRESULT EVRCustomPresenter::GetCurrentMediaType(IMFVideoMediaType **mediaType)
*mediaType = NULL;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
hr = checkShutdown();
if (FAILED(hr))
@@ -820,7 +822,7 @@ HRESULT EVRCustomPresenter::GetCurrentMediaType(IMFVideoMediaType **mediaType)
HRESULT EVRCustomPresenter::OnClockStart(MFTIME, LONGLONG clockStartOffset)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
// We cannot start after shutdown.
HRESULT hr = checkShutdown();
@@ -855,7 +857,7 @@ HRESULT EVRCustomPresenter::OnClockStart(MFTIME, LONGLONG clockStartOffset)
HRESULT EVRCustomPresenter::OnClockRestart(MFTIME)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
if (FAILED(hr))
@@ -879,7 +881,7 @@ HRESULT EVRCustomPresenter::OnClockRestart(MFTIME)
HRESULT EVRCustomPresenter::OnClockStop(MFTIME)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
if (FAILED(hr))
@@ -899,7 +901,7 @@ HRESULT EVRCustomPresenter::OnClockStop(MFTIME)
HRESULT EVRCustomPresenter::OnClockPause(MFTIME)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
// We cannot pause the clock after shutdown.
HRESULT hr = checkShutdown();
@@ -916,7 +918,7 @@ HRESULT EVRCustomPresenter::OnClockSetRate(MFTIME, float rate)
// The presenter reports its maximum rate through the IMFRateSupport interface.
// Here, we assume that the EVR honors the maximum rate.
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
if (FAILED(hr))
@@ -944,7 +946,7 @@ HRESULT EVRCustomPresenter::GetSlowestRate(MFRATE_DIRECTION, BOOL, float *rate)
if (!rate)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
@@ -961,7 +963,7 @@ HRESULT EVRCustomPresenter::GetFastestRate(MFRATE_DIRECTION direction, BOOL thin
if (!rate)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
float maxRate = 0.0f;
@@ -983,7 +985,7 @@ HRESULT EVRCustomPresenter::GetFastestRate(MFRATE_DIRECTION direction, BOOL thin
HRESULT EVRCustomPresenter::IsRateSupported(BOOL thin, float rate, float *nearestSupportedRate)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
float maxRate = 0.0f;
float nearestRate = rate; // If we support rate, that is the nearest.
@@ -1017,7 +1019,7 @@ HRESULT EVRCustomPresenter::IsRateSupported(BOOL thin, float rate, float *neares
void EVRCustomPresenter::supportedFormatsChanged()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_canRenderToSurface = false;
m_presentEngine->setHint(D3DPresentEngine::RenderToTexture, false);
@@ -1030,7 +1032,7 @@ void EVRCustomPresenter::supportedFormatsChanged()
m_canRenderToSurface = true;
} else {
formats = m_surface->supportedPixelFormats(QAbstractVideoBuffer::NoHandle);
- Q_FOREACH (QVideoFrame::PixelFormat format, formats) {
+ for (QVideoFrame::PixelFormat format : qAsConst(formats)) {
if (SUCCEEDED(m_presentEngine->checkFormat(qt_evr_D3DFormatFromPixelFormat(format)))) {
m_canRenderToSurface = true;
break;
diff --git a/src/plugins/common/evr/evrcustompresenter.h b/src/plugins/common/evr/evrcustompresenter.h
index 9e1ee88d6..c1c21580e 100644
--- a/src/plugins/common/evr/evrcustompresenter.h
+++ b/src/plugins/common/evr/evrcustompresenter.h
@@ -342,7 +342,7 @@ private:
RenderState m_renderState;
FrameStep m_frameStep;
- QMutex m_mutex;
+ QRecursiveMutex m_mutex;
// Samples and scheduling
Scheduler m_scheduler; // Manages scheduling of samples.
diff --git a/src/plugins/directshow/camera/dscameracontrol.cpp b/src/plugins/directshow/camera/dscameracontrol.cpp
index 67971d1b5..3f60ec848 100644
--- a/src/plugins/directshow/camera/dscameracontrol.cpp
+++ b/src/plugins/directshow/camera/dscameracontrol.cpp
@@ -47,8 +47,6 @@ QT_BEGIN_NAMESPACE
DSCameraControl::DSCameraControl(QObject *parent)
: QCameraControl(parent)
- , m_state(QCamera::UnloadedState)
- , m_captureMode(QCamera::CaptureStillImage)
{
m_session = qobject_cast<DSCameraSession*>(parent);
connect(m_session, &DSCameraSession::statusChanged, this,
diff --git a/src/plugins/directshow/camera/dscameracontrol.h b/src/plugins/directshow/camera/dscameracontrol.h
index b9fb2766d..2087623d1 100644
--- a/src/plugins/directshow/camera/dscameracontrol.h
+++ b/src/plugins/directshow/camera/dscameracontrol.h
@@ -52,7 +52,7 @@ class DSCameraControl : public QCameraControl
{
Q_OBJECT
public:
- DSCameraControl(QObject *parent = 0);
+ DSCameraControl(QObject *parent = nullptr);
~DSCameraControl() override;
QCamera::State state() const override { return m_state; }
@@ -69,8 +69,8 @@ public:
private:
DSCameraSession *m_session;
- QCamera::State m_state;
- QCamera::CaptureModes m_captureMode;
+ QCamera::State m_state = QCamera::UnloadedState;
+ QCamera::CaptureModes m_captureMode = QCamera::CaptureStillImage;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/camera/dscameraservice.cpp b/src/plugins/directshow/camera/dscameraservice.cpp
index 8115ef385..ff488cf09 100644
--- a/src/plugins/directshow/camera/dscameraservice.cpp
+++ b/src/plugins/directshow/camera/dscameraservice.cpp
@@ -62,14 +62,12 @@ DSCameraService::DSCameraService(QObject *parent):
, m_session(new DSCameraSession(this))
, m_control(new DSCameraControl(m_session))
, m_videoDevice(new DSVideoDeviceControl(m_session))
- , m_videoRenderer(0)
, m_imageCapture(new DSImageCaptureControl(m_session))
, m_viewfinderSettings(new DSCameraViewfinderSettingsControl(m_session))
, m_imageProcessingControl(new DSCameraImageProcessingControl(m_session))
, m_exposureControl(new DirectShowCameraExposureControl(m_session))
, m_captureDestinationControl(new DirectShowCameraCaptureDestinationControl(m_session))
, m_captureBufferFormatControl(new DirectShowCameraCaptureBufferFormatControl)
- , m_videoProbeControl(nullptr)
, m_zoomControl(new DirectShowCameraZoomControl(m_session))
, m_imageEncoderControl(new DirectShowCameraImageEncoderControl(m_session))
{
@@ -140,14 +138,14 @@ QMediaControl* DSCameraService::requestControl(const char *name)
if (qstrcmp(name, QImageEncoderControl_iid) == 0)
return m_imageEncoderControl;
- return 0;
+ return nullptr;
}
void DSCameraService::releaseControl(QMediaControl *control)
{
if (control == m_videoRenderer) {
delete m_videoRenderer;
- m_videoRenderer = 0;
+ m_videoRenderer = nullptr;
return;
}
diff --git a/src/plugins/directshow/camera/dscameraservice.h b/src/plugins/directshow/camera/dscameraservice.h
index 9a8f745f6..6ea85b725 100644
--- a/src/plugins/directshow/camera/dscameraservice.h
+++ b/src/plugins/directshow/camera/dscameraservice.h
@@ -64,7 +64,7 @@ class DSCameraService : public QMediaService
Q_OBJECT
public:
- DSCameraService(QObject *parent = 0);
+ DSCameraService(QObject *parent = nullptr);
~DSCameraService() override;
QMediaControl* requestControl(const char *name) override;
@@ -74,14 +74,14 @@ private:
DSCameraSession *m_session;
DSCameraControl *m_control;
DSVideoDeviceControl *m_videoDevice;
- QMediaControl *m_videoRenderer;
+ QMediaControl *m_videoRenderer = nullptr;
DSImageCaptureControl *m_imageCapture;
DSCameraViewfinderSettingsControl *m_viewfinderSettings;
DSCameraImageProcessingControl *m_imageProcessingControl;
DirectShowCameraExposureControl *m_exposureControl;
DirectShowCameraCaptureDestinationControl *m_captureDestinationControl;
DirectShowCameraCaptureBufferFormatControl *m_captureBufferFormatControl;
- DirectShowVideoProbeControl *m_videoProbeControl;
+ DirectShowVideoProbeControl *m_videoProbeControl = nullptr;
DirectShowCameraZoomControl *m_zoomControl;
DirectShowCameraImageEncoderControl *m_imageEncoderControl;
};
diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp
index 267e7a9a4..a0c120816 100644
--- a/src/plugins/directshow/camera/dscamerasession.cpp
+++ b/src/plugins/directshow/camera/dscamerasession.cpp
@@ -58,23 +58,6 @@ QT_BEGIN_NAMESPACE
DSCameraSession::DSCameraSession(QObject *parent)
: QObject(parent)
- , m_graphBuilder(nullptr)
- , m_filterGraph(nullptr)
- , m_sourceDeviceName(QLatin1String("default"))
- , m_sourceFilter(nullptr)
- , m_needsHorizontalMirroring(false)
- , m_previewSampleGrabber(nullptr)
- , m_nullRendererFilter(nullptr)
- , m_previewStarted(false)
- , m_surface(nullptr)
- , m_previewPixelFormat(QVideoFrame::Format_Invalid)
- , m_stride(-1)
- , m_readyForCapture(false)
- , m_imageIdCounter(0)
- , m_currentImageId(-1)
- , m_captureDestinations(QCameraImageCapture::CaptureToFile)
- , m_videoProbeControl(nullptr)
- , m_status(QCamera::UnloadedStatus)
{
connect(this, &DSCameraSession::statusChanged,
this, &DSCameraSession::updateReadyForCapture);
@@ -284,7 +267,7 @@ void DSCameraSession::setImageProcessingParameter(
ImageProcessingParameterInfo>::iterator sourceValueInfo =
m_imageProcessingParametersInfos.find(resultingParameter);
- if (sourceValueInfo == m_imageProcessingParametersInfos.constEnd())
+ if (sourceValueInfo == m_imageProcessingParametersInfos.end())
return;
LONG sourceValue = 0;
@@ -464,7 +447,7 @@ bool DSCameraSession::startPreview()
QString errorString;
HRESULT hr = S_OK;
- IMediaControl* pControl = 0;
+ IMediaControl* pControl = nullptr;
if (!configurePreviewFormat()) {
errorString = tr("Failed to configure preview format");
@@ -516,7 +499,7 @@ bool DSCameraSession::stopPreview()
m_previewSampleGrabber->stop();
QString errorString;
- IMediaControl* pControl = 0;
+ IMediaControl* pControl = nullptr;
HRESULT hr = m_filterGraph->QueryInterface(IID_IMediaControl,
reinterpret_cast<void**>(&pControl));
if (FAILED(hr)) {
@@ -740,12 +723,12 @@ bool DSCameraSession::createFilterGraph()
pDevEnum->Release();
if (S_OK == hr) {
pEnum->Reset();
- IMalloc *mallocInterface = 0;
+ IMalloc *mallocInterface = nullptr;
CoGetMalloc(1, (LPMALLOC*)&mallocInterface);
//go through and find all video capture devices
while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) {
- BSTR strName = 0;
+ BSTR strName = nullptr;
hr = pMoniker->GetDisplayName(nullptr, nullptr, &strName);
if (SUCCEEDED(hr)) {
QString output = QString::fromWCharArray(strName);
@@ -769,7 +752,7 @@ bool DSCameraSession::createFilterGraph()
pEnum->Reset();
// still have to loop to discard bind to storage failure case
while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) {
- IPropertyBag *pPropBag = 0;
+ IPropertyBag *pPropBag = nullptr;
hr = pMoniker->BindToStorage(nullptr, nullptr, IID_IPropertyBag,
reinterpret_cast<void**>(&pPropBag));
@@ -780,17 +763,13 @@ bool DSCameraSession::createFilterGraph()
// No need to get the description, just grab it
- hr = pMoniker->BindToObject(0, 0, IID_IBaseFilter,
+ hr = pMoniker->BindToObject(nullptr, nullptr, IID_IBaseFilter,
reinterpret_cast<void**>(&m_sourceFilter));
pPropBag->Release();
pMoniker->Release();
- if (SUCCEEDED(hr)) {
+ if (SUCCEEDED(hr))
break; // done, stop looping through
- }
- else
- {
- qWarning() << "Object bind failed";
- }
+ qWarning("Object bind failed");
}
}
}
@@ -898,7 +877,7 @@ bool DSCameraSession::configurePreviewFormat()
m_stride = DirectShowMediaType::bytesPerLine(m_previewSurfaceFormat);
HRESULT hr;
- IAMStreamConfig* pConfig = 0;
+ IAMStreamConfig* pConfig = nullptr;
hr = m_graphBuilder->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
m_sourceFilter, IID_IAMStreamConfig,
reinterpret_cast<void**>(&pConfig));
@@ -1064,21 +1043,21 @@ void DSCameraSession::updateSourceCapabilities()
AM_MEDIA_TYPE *pmt = nullptr;
VIDEOINFOHEADER *pvi = nullptr;
VIDEO_STREAM_CONFIG_CAPS scc;
- IAMStreamConfig* pConfig = 0;
+ IAMStreamConfig* pConfig = nullptr;
m_supportedViewfinderSettings.clear();
m_needsHorizontalMirroring = false;
m_supportedFormats.clear();
m_imageProcessingParametersInfos.clear();
- IAMVideoControl *pVideoControl = 0;
+ IAMVideoControl *pVideoControl = nullptr;
hr = m_graphBuilder->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
m_sourceFilter, IID_IAMVideoControl,
reinterpret_cast<void**>(&pVideoControl));
if (FAILED(hr)) {
qWarning() << "Failed to get the video control";
} else {
- IPin *pPin = 0;
+ IPin *pPin = nullptr;
if (!DirectShowUtils::getPin(m_sourceFilter, PINDIR_OUTPUT, &pPin, &hr)) {
qWarning() << "Failed to get the pin for the video control";
} else {
@@ -1130,12 +1109,12 @@ void DSCameraSession::updateSourceCapabilities()
QList<QCamera::FrameRateRange> frameRateRanges;
if (pVideoControl) {
- IPin *pPin = 0;
+ IPin *pPin = nullptr;
if (!DirectShowUtils::getPin(m_sourceFilter, PINDIR_OUTPUT, &pPin, &hr)) {
qWarning() << "Failed to get the pin for the video control";
} else {
long listSize = 0;
- LONGLONG *frameRates = 0;
+ LONGLONG *frameRates = nullptr;
SIZE size = { resolution.width(), resolution.height() };
hr = pVideoControl->GetFrameRateList(pPin, iIndex, size, &listSize, &frameRates);
if (hr == S_OK && listSize > 0 && frameRates) {
diff --git a/src/plugins/directshow/camera/dscamerasession.h b/src/plugins/directshow/camera/dscamerasession.h
index 18fc0cca7..5e7d026c2 100644
--- a/src/plugins/directshow/camera/dscamerasession.h
+++ b/src/plugins/directshow/camera/dscamerasession.h
@@ -84,7 +84,7 @@ class DSCameraSession : public QObject
{
Q_OBJECT
public:
- DSCameraSession(QObject *parent = 0);
+ DSCameraSession(QObject *parent = nullptr);
~DSCameraSession() override;
QCamera::Status status() const { return m_status; }
@@ -185,49 +185,48 @@ private:
QMutex m_presentMutex;
QMutex m_captureMutex;
- // Capture Graph
- ICaptureGraphBuilder2* m_graphBuilder;
- IGraphBuilder* m_filterGraph;
+ ICaptureGraphBuilder2* m_graphBuilder = nullptr;
+ IGraphBuilder* m_filterGraph = nullptr;
// Source (camera)
- QString m_sourceDeviceName;
- IBaseFilter* m_sourceFilter;
- bool m_needsHorizontalMirroring;
+ QString m_sourceDeviceName = QLatin1String("default");
+ IBaseFilter* m_sourceFilter = nullptr;
+ bool m_needsHorizontalMirroring = false;
QList<DirectShowMediaType> m_supportedFormats;
QList<QCameraViewfinderSettings> m_supportedViewfinderSettings;
DirectShowMediaType m_sourceFormat;
QMap<QCameraImageProcessingControl::ProcessingParameter, ImageProcessingParameterInfo> m_imageProcessingParametersInfos;
// Preview
- DirectShowSampleGrabber *m_previewSampleGrabber;
- IBaseFilter *m_nullRendererFilter;
+ DirectShowSampleGrabber *m_previewSampleGrabber = nullptr;
+ IBaseFilter *m_nullRendererFilter = nullptr;
QVideoFrame m_currentFrame;
- bool m_previewStarted;
- QAbstractVideoSurface* m_surface;
+ bool m_previewStarted = false;
+ QAbstractVideoSurface* m_surface = nullptr;
QVideoSurfaceFormat m_previewSurfaceFormat;
- QVideoFrame::PixelFormat m_previewPixelFormat;
+ QVideoFrame::PixelFormat m_previewPixelFormat = QVideoFrame::Format_RGB32;
QSize m_previewSize;
- int m_stride;
+ int m_stride = -1;
QCameraViewfinderSettings m_viewfinderSettings;
QCameraViewfinderSettings m_actualViewfinderSettings;
// Image capture
QString m_imageCaptureFileName;
QMediaStorageLocation m_fileNameGenerator;
- bool m_readyForCapture;
- int m_imageIdCounter;
- int m_currentImageId;
+ bool m_readyForCapture = false;
+ int m_imageIdCounter = 0;
+ int m_currentImageId = -1;
QVideoFrame m_capturedFrame;
- QCameraImageCapture::CaptureDestinations m_captureDestinations;
+ QCameraImageCapture::CaptureDestinations m_captureDestinations = QCameraImageCapture::CaptureToFile;
// Video probe
QMutex m_probeMutex;
- DirectShowVideoProbeControl *m_videoProbeControl;
+ DirectShowVideoProbeControl *m_videoProbeControl = nullptr;
QImageEncoderSettings m_imageEncoderSettings;
// Internal state
- QCamera::Status m_status;
+ QCamera::Status m_status = QCamera::UnloadedStatus;
QTimer m_deviceLostEventTimer;
QMap<QCameraImageProcessingControl::ProcessingParameter, QVariant> m_pendingImageProcessingParametrs;
diff --git a/src/plugins/directshow/camera/dsvideodevicecontrol.cpp b/src/plugins/directshow/camera/dsvideodevicecontrol.cpp
index 7285d0fb3..0f08154f1 100644
--- a/src/plugins/directshow/camera/dsvideodevicecontrol.cpp
+++ b/src/plugins/directshow/camera/dsvideodevicecontrol.cpp
@@ -143,10 +143,10 @@ void DSVideoDeviceControl::updateDevices()
pEnum->Reset();
// go through and find all video capture devices
IMoniker* pMoniker = nullptr;
- IMalloc *mallocInterface = 0;
+ IMalloc *mallocInterface = nullptr;
CoGetMalloc(1, (LPMALLOC*)&mallocInterface);
while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) {
- BSTR strName = 0;
+ BSTR strName = nullptr;
hr = pMoniker->GetDisplayName(nullptr, nullptr, &strName);
if (SUCCEEDED(hr)) {
QString output(QString::fromWCharArray(strName));
@@ -162,7 +162,7 @@ void DSVideoDeviceControl::updateDevices()
// Find the description
VARIANT varName;
varName.vt = VT_BSTR;
- hr = pPropBag->Read(L"FriendlyName", &varName, 0);
+ hr = pPropBag->Read(L"FriendlyName", &varName, nullptr);
if (SUCCEEDED(hr)) {
output = QString::fromWCharArray(varName.bstrVal);
}
diff --git a/src/plugins/directshow/camera/dsvideodevicecontrol.h b/src/plugins/directshow/camera/dsvideodevicecontrol.h
index 7a7a0af1e..24a5b61a1 100644
--- a/src/plugins/directshow/camera/dsvideodevicecontrol.h
+++ b/src/plugins/directshow/camera/dsvideodevicecontrol.h
@@ -48,13 +48,13 @@ class DSCameraSession;
//QTM_USE_NAMESPACE
-typedef QPair<QByteArray, QString> DSVideoDeviceInfo;
+using DSVideoDeviceInfo = QPair<QByteArray, QString>;
class DSVideoDeviceControl : public QVideoDeviceSelectorControl
{
Q_OBJECT
public:
- DSVideoDeviceControl(QObject *parent = 0);
+ DSVideoDeviceControl(QObject *parent = nullptr);
int deviceCount() const override;
QString deviceName(int index) const override;
diff --git a/src/plugins/directshow/camera/dsvideorenderer.cpp b/src/plugins/directshow/camera/dsvideorenderer.cpp
index bf0aa2684..cde63af65 100644
--- a/src/plugins/directshow/camera/dsvideorenderer.cpp
+++ b/src/plugins/directshow/camera/dsvideorenderer.cpp
@@ -45,7 +45,6 @@ QT_BEGIN_NAMESPACE
DSVideoRendererControl::DSVideoRendererControl(DSCameraSession* session, QObject *parent)
:QVideoRendererControl(parent),
- m_surface(0),
m_session(session)
{
}
diff --git a/src/plugins/directshow/camera/dsvideorenderer.h b/src/plugins/directshow/camera/dsvideorenderer.h
index 3a4570b4c..a6a1f8103 100644
--- a/src/plugins/directshow/camera/dsvideorenderer.h
+++ b/src/plugins/directshow/camera/dsvideorenderer.h
@@ -50,7 +50,7 @@ class DSVideoRendererControl : public QVideoRendererControl
{
Q_OBJECT
public:
- DSVideoRendererControl(DSCameraSession* session, QObject *parent = 0);
+ DSVideoRendererControl(DSCameraSession* session, QObject *parent = nullptr);
~DSVideoRendererControl() override;
QAbstractVideoSurface *surface() const override;
@@ -59,7 +59,7 @@ public:
void setSession(DSCameraSession* session);
private:
- QAbstractVideoSurface* m_surface;
+ QAbstractVideoSurface* m_surface = nullptr;
DSCameraSession* m_session;
};
diff --git a/src/plugins/directshow/common/directshowbasefilter.cpp b/src/plugins/directshow/common/directshowbasefilter.cpp
index d64021ed6..3a13dce0e 100644
--- a/src/plugins/directshow/common/directshowbasefilter.cpp
+++ b/src/plugins/directshow/common/directshowbasefilter.cpp
@@ -41,17 +41,12 @@
#include "directshowpinenum.h"
+#include <mutex>
+
QT_BEGIN_NAMESPACE
DirectShowBaseFilter::DirectShowBaseFilter()
- : m_mutex(QMutex::Recursive)
- , m_state(State_Stopped)
- , m_graph(nullptr)
- , m_clock(nullptr)
- , m_sink(nullptr)
-{
-
-}
+ = default;
DirectShowBaseFilter::~DirectShowBaseFilter()
{
@@ -75,15 +70,14 @@ HRESULT DirectShowBaseFilter::NotifyEvent(long eventCode, LONG_PTR eventParam1,
eventParam2 = (LONG_PTR)(IBaseFilter*)this;
return sink->Notify(eventCode, eventParam1, eventParam2);
- } else {
- return E_NOTIMPL;
}
+ return E_NOTIMPL;
}
HRESULT DirectShowBaseFilter::Run(REFERENCE_TIME tStart)
{
Q_UNUSED(tStart)
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_startTime = tStart;
@@ -100,7 +94,7 @@ HRESULT DirectShowBaseFilter::Run(REFERENCE_TIME tStart)
HRESULT DirectShowBaseFilter::Pause()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_state == State_Stopped) {
const QList<DirectShowPin *> pinList = pins();
@@ -120,7 +114,7 @@ HRESULT DirectShowBaseFilter::Pause()
HRESULT DirectShowBaseFilter::Stop()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = S_OK;
@@ -147,7 +141,7 @@ HRESULT DirectShowBaseFilter::GetState(DWORD dwMilliSecsTimeout, FILTER_STATE *p
if (!pState) {
return E_POINTER;
} else {
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
*pState = m_state;
@@ -157,7 +151,7 @@ HRESULT DirectShowBaseFilter::GetState(DWORD dwMilliSecsTimeout, FILTER_STATE *p
HRESULT DirectShowBaseFilter::SetSyncSource(IReferenceClock *pClock)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_clock)
m_clock->Release();
@@ -197,7 +191,7 @@ HRESULT DirectShowBaseFilter::FindPin(LPCWSTR Id, IPin **ppPin)
if (!ppPin || !Id)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
const QList<DirectShowPin *> pinList = pins();
for (DirectShowPin *pin : pinList) {
if (pin->name() == QStringView(Id)) {
@@ -207,13 +201,13 @@ HRESULT DirectShowBaseFilter::FindPin(LPCWSTR Id, IPin **ppPin)
}
}
- *ppPin = 0;
+ *ppPin = nullptr;
return VFW_E_NOT_FOUND;
}
HRESULT DirectShowBaseFilter::JoinFilterGraph(IFilterGraph *pGraph, LPCWSTR pName)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_filterName = QString::fromWCharArray(pName);
m_graph = pGraph;
diff --git a/src/plugins/directshow/common/directshowbasefilter.h b/src/plugins/directshow/common/directshowbasefilter.h
index fe78f96b2..ce30891d7 100644
--- a/src/plugins/directshow/common/directshowbasefilter.h
+++ b/src/plugins/directshow/common/directshowbasefilter.h
@@ -78,13 +78,13 @@ public:
STDMETHODIMP QueryVendorInfo(LPWSTR *pVendorInfo) override;
protected:
- QMutex m_mutex;
- FILTER_STATE m_state;
- IFilterGraph *m_graph;
- IReferenceClock *m_clock;
- IMediaEventSink *m_sink;
+ QRecursiveMutex m_mutex;
+ FILTER_STATE m_state = State_Stopped;
+ IFilterGraph *m_graph = nullptr;
+ IReferenceClock *m_clock = nullptr;
+ IMediaEventSink *m_sink = nullptr;
QString m_filterName;
- REFERENCE_TIME m_startTime;
+ REFERENCE_TIME m_startTime = 0;
private:
Q_DISABLE_COPY(DirectShowBaseFilter)
diff --git a/src/plugins/directshow/common/directshoweventloop.cpp b/src/plugins/directshow/common/directshoweventloop.cpp
index 843a78422..692c873cf 100644
--- a/src/plugins/directshow/common/directshoweventloop.cpp
+++ b/src/plugins/directshow/common/directshoweventloop.cpp
@@ -51,7 +51,6 @@ public:
DirectShowPostedEvent(QObject *receiver, QEvent *event)
: receiver(receiver)
, event(event)
- , next(0)
{
}
@@ -62,13 +61,11 @@ public:
QObject *receiver;
QEvent *event;
- DirectShowPostedEvent *next;
+ DirectShowPostedEvent *next = nullptr;
};
DirectShowEventLoop::DirectShowEventLoop(QObject *parent)
: QObject(parent)
- , m_postsHead(0)
- , m_postsTail(0)
, m_eventHandle(::CreateEvent(nullptr, FALSE, FALSE, nullptr))
, m_waitHandle(::CreateEvent(nullptr, FALSE, FALSE, nullptr))
{
@@ -141,7 +138,7 @@ void DirectShowEventLoop::processEvents()
m_postsHead = m_postsHead->next;
if (!m_postsHead)
- m_postsTail = 0;
+ m_postsTail = nullptr;
locker.unlock();
QCoreApplication::sendEvent(post->receiver, post->event);
diff --git a/src/plugins/directshow/common/directshoweventloop.h b/src/plugins/directshow/common/directshoweventloop.h
index a29274b7b..984bd23a4 100644
--- a/src/plugins/directshow/common/directshoweventloop.h
+++ b/src/plugins/directshow/common/directshoweventloop.h
@@ -54,7 +54,7 @@ class DirectShowEventLoop : public QObject
{
Q_OBJECT
public:
- DirectShowEventLoop(QObject *parent = 0);
+ DirectShowEventLoop(QObject *parent = nullptr);
~DirectShowEventLoop() override;
void wait(QMutex *mutex);
@@ -68,8 +68,8 @@ protected:
private:
void processEvents();
- DirectShowPostedEvent *m_postsHead;
- DirectShowPostedEvent *m_postsTail;
+ DirectShowPostedEvent *m_postsHead = nullptr;
+ DirectShowPostedEvent *m_postsTail = nullptr;
HANDLE m_eventHandle;
HANDLE m_waitHandle;
QMutex m_mutex;
diff --git a/src/plugins/directshow/common/directshowglobal.h b/src/plugins/directshow/common/directshowglobal.h
index d98dd36ee..12693e4f1 100644
--- a/src/plugins/directshow/common/directshowglobal.h
+++ b/src/plugins/directshow/common/directshowglobal.h
@@ -53,27 +53,27 @@ QT_END_NAMESPACE
template <typename T> T *com_cast(IUnknown *unknown, const IID &iid)
{
- T *iface = 0;
+ T *iface = nullptr;
return unknown && unknown->QueryInterface(iid, reinterpret_cast<void **>(&iface)) == S_OK
? iface
- : 0;
+ : nullptr;
}
template <typename T> T *com_new(const IID &clsid)
{
- T *object = 0;
+ T *object = nullptr;
return CoCreateInstance(
clsid,
nullptr,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&object)) == S_OK
? object
- : 0;
+ : nullptr;
}
template <typename T> T *com_new(const IID &clsid, const IID &iid)
{
- T *object = 0;
+ T *object = nullptr;
return CoCreateInstance(
clsid,
nullptr,
@@ -81,7 +81,7 @@ template <typename T> T *com_new(const IID &clsid, const IID &iid)
iid,
reinterpret_cast<void **>(&object)) == S_OK
? object
- : 0;
+ : nullptr;
}
DEFINE_GUID(MEDIASUBTYPE_I420,
diff --git a/src/plugins/directshow/common/directshowmediatypeenum.cpp b/src/plugins/directshow/common/directshowmediatypeenum.cpp
index 56716ed75..0ff147fea 100644
--- a/src/plugins/directshow/common/directshowmediatypeenum.cpp
+++ b/src/plugins/directshow/common/directshowmediatypeenum.cpp
@@ -42,17 +42,13 @@
#include "directshowpin.h"
DirectShowMediaTypeEnum::DirectShowMediaTypeEnum(DirectShowPin *pin)
- : m_pin(pin)
- , m_mediaTypes(pin->supportedMediaTypes())
- , m_index(0)
+ : m_mediaTypes(pin->supportedMediaTypes())
{
m_pin->AddRef();
}
DirectShowMediaTypeEnum::DirectShowMediaTypeEnum(const QList<DirectShowMediaType> &types)
- : m_pin(nullptr)
- , m_mediaTypes(types)
- , m_index(0)
+ : m_mediaTypes(types)
{
}
diff --git a/src/plugins/directshow/common/directshowmediatypeenum.h b/src/plugins/directshow/common/directshowmediatypeenum.h
index e78e0a0f2..a5c347004 100644
--- a/src/plugins/directshow/common/directshowmediatypeenum.h
+++ b/src/plugins/directshow/common/directshowmediatypeenum.h
@@ -67,9 +67,9 @@ public:
private:
Q_DISABLE_COPY(DirectShowMediaTypeEnum)
- DirectShowPin *m_pin;
+ DirectShowPin *m_pin = nullptr;
QList<DirectShowMediaType> m_mediaTypes;
- int m_index;
+ int m_index = 0;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/common/directshowpin.cpp b/src/plugins/directshow/common/directshowpin.cpp
index 617cc2cf2..d8129748c 100644
--- a/src/plugins/directshow/common/directshowpin.cpp
+++ b/src/plugins/directshow/common/directshowpin.cpp
@@ -45,14 +45,14 @@
#include <qdebug.h>
+#include <mutex>
+
QT_BEGIN_NAMESPACE
DirectShowPin::DirectShowPin(DirectShowBaseFilter *filter, const QString &name, PIN_DIRECTION direction)
- : m_mutex(QMutex::Recursive)
- , m_filter(filter)
+ : m_filter(filter)
, m_name(name)
, m_direction(direction)
- , m_peerPin(nullptr)
{
}
@@ -64,7 +64,7 @@ HRESULT DirectShowPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
return E_POINTER;
HRESULT hr = E_FAIL;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_peerPin)
return VFW_E_ALREADY_CONNECTED;
@@ -170,7 +170,7 @@ HRESULT DirectShowPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *
if (!pConnector || !pmt)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_peerPin)
return VFW_E_ALREADY_CONNECTED;
@@ -207,7 +207,7 @@ HRESULT DirectShowPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *
HRESULT DirectShowPin::Disconnect()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_filter->state() != State_Stopped)
return VFW_E_NOT_STOPPED;
@@ -233,9 +233,9 @@ HRESULT DirectShowPin::ConnectedTo(IPin **ppPin)
if (!ppPin)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (!m_peerPin) {
- *ppPin = 0;
+ *ppPin = nullptr;
return VFW_E_NOT_CONNECTED;
}
m_peerPin->AddRef();
@@ -248,7 +248,7 @@ HRESULT DirectShowPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt)
if (!pmt)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (!m_peerPin) {
DirectShowMediaType::init(pmt);
return VFW_E_NOT_CONNECTED;
@@ -380,8 +380,6 @@ HRESULT DirectShowPin::setActive(bool active)
DirectShowOutputPin::DirectShowOutputPin(DirectShowBaseFilter *filter, const QString &name)
: DirectShowPin(filter, name, PINDIR_OUTPUT)
- , m_allocator(nullptr)
- , m_inputPin(nullptr)
{
}
@@ -485,9 +483,6 @@ HRESULT DirectShowOutputPin::EndOfStream()
DirectShowInputPin::DirectShowInputPin(DirectShowBaseFilter *filter, const QString &name)
: DirectShowPin(filter, name, PINDIR_INPUT)
- , m_allocator(nullptr)
- , m_flushing(false)
- , m_inErrorState(false)
{
ZeroMemory(&m_sampleProperties, sizeof(m_sampleProperties));
}
@@ -537,14 +532,14 @@ HRESULT DirectShowInputPin::EndOfStream()
HRESULT DirectShowInputPin::BeginFlush()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_flushing = true;
return S_OK;
}
HRESULT DirectShowInputPin::EndFlush()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_flushing = false;
m_inErrorState = false;
return S_OK;
@@ -555,7 +550,7 @@ HRESULT DirectShowInputPin::GetAllocator(IMemAllocator **ppAllocator)
if (!ppAllocator)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (!m_allocator) {
m_allocator = com_new<IMemAllocator>(CLSID_MemoryAllocator);;
@@ -576,7 +571,7 @@ HRESULT DirectShowInputPin::NotifyAllocator(IMemAllocator *pAllocator, BOOL bRea
if (!pAllocator)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_allocator)
m_allocator->Release();
diff --git a/src/plugins/directshow/common/directshowpin.h b/src/plugins/directshow/common/directshowpin.h
index 6370fd367..160191ef3 100644
--- a/src/plugins/directshow/common/directshowpin.h
+++ b/src/plugins/directshow/common/directshowpin.h
@@ -96,13 +96,13 @@ public:
protected:
DirectShowPin(DirectShowBaseFilter *filter, const QString &name, PIN_DIRECTION direction);
- QMutex m_mutex;
+ QRecursiveMutex m_mutex;
DirectShowBaseFilter *m_filter;
QString m_name;
PIN_DIRECTION m_direction;
- IPin *m_peerPin;
+ IPin *m_peerPin = nullptr;
DirectShowMediaType m_mediaType;
private:
@@ -128,8 +128,8 @@ public:
protected:
DirectShowOutputPin(DirectShowBaseFilter *filter, const QString &name);
- IMemAllocator *m_allocator;
- IMemInputPin *m_inputPin;
+ IMemAllocator *m_allocator = nullptr;
+ IMemInputPin *m_inputPin = nullptr;
private:
Q_DISABLE_COPY(DirectShowOutputPin)
@@ -166,9 +166,9 @@ public:
protected:
DirectShowInputPin(DirectShowBaseFilter *filter, const QString &name);
- IMemAllocator *m_allocator;
- bool m_flushing;
- bool m_inErrorState;
+ IMemAllocator *m_allocator = nullptr;
+ bool m_flushing = false;
+ bool m_inErrorState = false;
AM_SAMPLE2_PROPERTIES m_sampleProperties;
private:
diff --git a/src/plugins/directshow/common/directshowpinenum.cpp b/src/plugins/directshow/common/directshowpinenum.cpp
index a340c0903..7ba1bb6e9 100644
--- a/src/plugins/directshow/common/directshowpinenum.cpp
+++ b/src/plugins/directshow/common/directshowpinenum.cpp
@@ -44,7 +44,6 @@ QT_BEGIN_NAMESPACE
DirectShowPinEnum::DirectShowPinEnum(DirectShowBaseFilter *filter)
: m_filter(filter)
- , m_index(0)
{
m_filter->AddRef();
const QList<DirectShowPin *> pinList = filter->pins();
@@ -55,9 +54,7 @@ DirectShowPinEnum::DirectShowPinEnum(DirectShowBaseFilter *filter)
}
DirectShowPinEnum::DirectShowPinEnum(const QList<IPin *> &pins)
- : m_filter(nullptr)
- , m_pins(pins)
- , m_index(0)
+ : m_pins(pins)
{
for (IPin *pin : qAsConst(m_pins))
pin->AddRef();
diff --git a/src/plugins/directshow/common/directshowpinenum.h b/src/plugins/directshow/common/directshowpinenum.h
index d89f140b1..aada1a71e 100644
--- a/src/plugins/directshow/common/directshowpinenum.h
+++ b/src/plugins/directshow/common/directshowpinenum.h
@@ -68,9 +68,9 @@ public:
private:
Q_DISABLE_COPY(DirectShowPinEnum)
- DirectShowBaseFilter *m_filter;
+ DirectShowBaseFilter *m_filter = nullptr;
QList<IPin *> m_pins;
- int m_index;
+ int m_index = 0;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/common/directshowsamplegrabber.cpp b/src/plugins/directshow/common/directshowsamplegrabber.cpp
index 254066d4e..a9e74f9db 100644
--- a/src/plugins/directshow/common/directshowsamplegrabber.cpp
+++ b/src/plugins/directshow/common/directshowsamplegrabber.cpp
@@ -82,7 +82,8 @@ public:
AddRef();
*ppvObject = static_cast<IUnknown *>(this);
return S_OK;
- } else if (riid == IID_ISampleGrabberCB /*__uuidof(ISampleGrabberCB)*/ ) {
+ }
+ if (riid == IID_ISampleGrabberCB /*__uuidof(ISampleGrabberCB)*/ ) {
AddRef();
*ppvObject = static_cast<ISampleGrabberCB *>(this);
return S_OK;
@@ -115,9 +116,6 @@ private:
DirectShowSampleGrabber::DirectShowSampleGrabber(QObject *p)
: QObject(p)
- , m_sampleGrabber(nullptr)
- , m_sampleGabberCb(nullptr)
- , m_callbackType(CallbackMethod::BufferCB)
{
// Create sample grabber filter
HRESULT hr = CoCreateInstance(cLSID_SampleGrabber, nullptr, CLSCTX_INPROC, iID_ISampleGrabber, reinterpret_cast<void **>(&m_sampleGrabber));
diff --git a/src/plugins/directshow/common/directshowsamplegrabber.h b/src/plugins/directshow/common/directshowsamplegrabber.h
index a9b72fcd1..5fc61de14 100644
--- a/src/plugins/directshow/common/directshowsamplegrabber.h
+++ b/src/plugins/directshow/common/directshowsamplegrabber.h
@@ -78,10 +78,10 @@ Q_SIGNALS:
void bufferAvailable(double time, const QByteArray &data);
private:
- IBaseFilter *m_filter;
- ISampleGrabber *m_sampleGrabber;
- SampleGrabberCallbackPrivate *m_sampleGabberCb;
- CallbackMethod m_callbackType;
+ IBaseFilter *m_filter = nullptr;
+ ISampleGrabber *m_sampleGrabber = nullptr;
+ SampleGrabberCallbackPrivate *m_sampleGabberCb = nullptr;
+ CallbackMethod m_callbackType= CallbackMethod::BufferCB;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/common/directshowutils.cpp b/src/plugins/directshow/common/directshowutils.cpp
index 13b51deb5..1457837ce 100644
--- a/src/plugins/directshow/common/directshowutils.cpp
+++ b/src/plugins/directshow/common/directshowutils.cpp
@@ -300,7 +300,7 @@ bool DirectShowUtils::connectFilters(IGraphBuilder *graph,
}
IBaseFilter *nextFilter = nullptr;
- while (S_OK == filters->Next(1, &nextFilter, 0)) {
+ while (S_OK == filters->Next(1, &nextFilter, nullptr)) {
const ScopedSafeRelease<IBaseFilter> releaseNextFilter { &nextFilter };
if (nextFilter && findAndConnect(nextFilter))
return true;
diff --git a/src/plugins/directshow/common/directshowvideobuffer.cpp b/src/plugins/directshow/common/directshowvideobuffer.cpp
index 7f94da97e..fc329f58a 100644
--- a/src/plugins/directshow/common/directshowvideobuffer.cpp
+++ b/src/plugins/directshow/common/directshowvideobuffer.cpp
@@ -64,7 +64,7 @@ uchar *DirectShowVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine
if (bytesPerLine)
*bytesPerLine = m_bytesPerLine;
- BYTE *bytes = 0;
+ BYTE *bytes = nullptr;
if (m_sample->GetPointer(&bytes) == S_OK) {
m_mapMode = mode;
@@ -72,7 +72,7 @@ uchar *DirectShowVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine
return reinterpret_cast<uchar *>(bytes);
}
}
- return 0;
+ return nullptr;
}
void DirectShowVideoBuffer::unmap()
diff --git a/src/plugins/directshow/dsserviceplugin.cpp b/src/plugins/directshow/dsserviceplugin.cpp
index cc25e35b7..18a807fd1 100644
--- a/src/plugins/directshow/dsserviceplugin.cpp
+++ b/src/plugins/directshow/dsserviceplugin.cpp
@@ -87,7 +87,7 @@ QMediaService* DSServicePlugin::create(QString const& key)
return new DirectShowPlayerService;
}
- return 0;
+ return nullptr;
}
void DSServicePlugin::release(QMediaService *service)
diff --git a/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp b/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp
index 78733972a..f4e45cdd8 100644
--- a/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp
+++ b/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp
@@ -48,8 +48,6 @@ DirectShowAudioEndpointControl::DirectShowAudioEndpointControl(
DirectShowPlayerService *service, QObject *parent)
: QAudioOutputSelectorControl(parent)
, m_service(service)
- , m_bindContext(0)
- , m_deviceEnumerator(0)
{
if (CreateBindCtx(0, &m_bindContext) == S_OK) {
m_deviceEnumerator = com_new<ICreateDevEnum>(CLSID_SystemDeviceEnum);
@@ -83,12 +81,12 @@ QString DirectShowAudioEndpointControl::outputDescription(const QString &name) c
QString description;
if (IMoniker *moniker = m_devices.value(name, 0)) {
- IPropertyBag *propertyBag = 0;
+ IPropertyBag *propertyBag = nullptr;
if (SUCCEEDED(moniker->BindToStorage(
- 0, 0, IID_IPropertyBag, reinterpret_cast<void **>(&propertyBag)))) {
+ nullptr, nullptr, IID_IPropertyBag, reinterpret_cast<void **>(&propertyBag)))) {
VARIANT name;
VariantInit(&name);
- if (SUCCEEDED(propertyBag->Read(L"FriendlyName", &name, 0)))
+ if (SUCCEEDED(propertyBag->Read(L"FriendlyName", &name, nullptr)))
description = QString::fromWCharArray(name.bstrVal);
VariantClear(&name);
propertyBag->Release();
@@ -117,11 +115,11 @@ void DirectShowAudioEndpointControl::setActiveOutput(const QString &name)
return;
if (IMoniker *moniker = m_devices.value(name, 0)) {
- IBaseFilter *filter = 0;
+ IBaseFilter *filter = nullptr;
if (moniker->BindToObject(
m_bindContext,
- 0,
+ nullptr,
IID_IBaseFilter,
reinterpret_cast<void **>(&filter)) == S_OK) {
m_service->setAudioOutput(filter);
@@ -133,15 +131,15 @@ void DirectShowAudioEndpointControl::setActiveOutput(const QString &name)
void DirectShowAudioEndpointControl::updateEndpoints()
{
- IMalloc *oleMalloc = 0;
+ IMalloc *oleMalloc = nullptr;
if (m_deviceEnumerator && CoGetMalloc(1, &oleMalloc) == S_OK) {
- IEnumMoniker *monikers = 0;
+ IEnumMoniker *monikers = nullptr;
if (m_deviceEnumerator->CreateClassEnumerator(
CLSID_AudioRendererCategory, &monikers, 0) == S_OK) {
- for (IMoniker *moniker = 0; monikers->Next(1, &moniker, 0) == S_OK; moniker->Release()) {
- OLECHAR *string = 0;
- if (moniker->GetDisplayName(m_bindContext, 0, &string) == S_OK) {
+ for (IMoniker *moniker = nullptr; monikers->Next(1, &moniker, nullptr) == S_OK; moniker->Release()) {
+ OLECHAR *string = nullptr;
+ if (moniker->GetDisplayName(m_bindContext, nullptr, &string) == S_OK) {
QString deviceId = QString::fromWCharArray(string);
oleMalloc->Free(string);
diff --git a/src/plugins/directshow/player/directshowaudioendpointcontrol.h b/src/plugins/directshow/player/directshowaudioendpointcontrol.h
index b6f8a6724..05c4eb990 100644
--- a/src/plugins/directshow/player/directshowaudioendpointcontrol.h
+++ b/src/plugins/directshow/player/directshowaudioendpointcontrol.h
@@ -52,7 +52,7 @@ class DirectShowAudioEndpointControl : public QAudioOutputSelectorControl
{
Q_OBJECT
public:
- DirectShowAudioEndpointControl(DirectShowPlayerService *service, QObject *parent = 0);
+ DirectShowAudioEndpointControl(DirectShowPlayerService *service, QObject *parent = nullptr);
~DirectShowAudioEndpointControl() override;
QList<QString> availableOutputs() const override;
@@ -68,8 +68,8 @@ private:
void updateEndpoints();
DirectShowPlayerService *m_service;
- IBindCtx *m_bindContext;
- ICreateDevEnum *m_deviceEnumerator;
+ IBindCtx *m_bindContext = nullptr;
+ ICreateDevEnum *m_deviceEnumerator = nullptr;
QMap<QString, IMoniker *> m_devices;
QString m_defaultEndpoint;
diff --git a/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp b/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp
index 57d88326c..89bfc1467 100644
--- a/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp
+++ b/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp
@@ -43,7 +43,6 @@
DirectShowEvrVideoWindowControl::DirectShowEvrVideoWindowControl(QObject *parent)
: EvrVideoWindowControl(parent)
- , m_evrFilter(nullptr)
{
}
diff --git a/src/plugins/directshow/player/directshowevrvideowindowcontrol.h b/src/plugins/directshow/player/directshowevrvideowindowcontrol.h
index fb661780f..edbde78d6 100644
--- a/src/plugins/directshow/player/directshowevrvideowindowcontrol.h
+++ b/src/plugins/directshow/player/directshowevrvideowindowcontrol.h
@@ -49,13 +49,13 @@ QT_BEGIN_NAMESPACE
class DirectShowEvrVideoWindowControl : public EvrVideoWindowControl
{
public:
- DirectShowEvrVideoWindowControl(QObject *parent = 0);
+ DirectShowEvrVideoWindowControl(QObject *parent = nullptr);
~DirectShowEvrVideoWindowControl();
IBaseFilter *filter();
private:
- IBaseFilter *m_evrFilter;
+ IBaseFilter *m_evrFilter = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/player/directshowioreader.cpp b/src/plugins/directshow/player/directshowioreader.cpp
index c10d9a239..ced10ea10 100644
--- a/src/plugins/directshow/player/directshowioreader.cpp
+++ b/src/plugins/directshow/player/directshowioreader.cpp
@@ -55,25 +55,23 @@ class DirectShowSampleRequest
public:
DirectShowSampleRequest(
IMediaSample *sample, DWORD_PTR userData, LONGLONG position, LONG length, BYTE *buffer)
- : next(0)
- , sample(sample)
+ : sample(sample)
, userData(userData)
, position(position)
, length(length)
, buffer(buffer)
- , result(S_FALSE)
{
}
DirectShowSampleRequest *remove() { DirectShowSampleRequest *n = next; delete this; return n; }
- DirectShowSampleRequest *next;
+ DirectShowSampleRequest *next = nullptr;
IMediaSample *sample;
DWORD_PTR userData;
LONGLONG position;
LONG length;
BYTE *buffer;
- HRESULT result;
+ HRESULT result = S_FALSE;
};
DirectShowIOReader::DirectShowIOReader(
@@ -81,18 +79,6 @@ DirectShowIOReader::DirectShowIOReader(
: m_source(source)
, m_device(device)
, m_loop(loop)
- , m_pendingHead(0)
- , m_pendingTail(0)
- , m_readyHead(0)
- , m_readyTail(0)
- , m_synchronousPosition(0)
- , m_synchronousLength(0)
- , m_synchronousBytesRead(0)
- , m_synchronousBuffer(0)
- , m_synchronousResult(S_OK)
- , m_totalLength(0)
- , m_availableLength(0)
- , m_flushing(false)
{
moveToThread(device->thread());
@@ -204,21 +190,21 @@ HRESULT DirectShowIOReader::WaitForNext(
m_readyHead = request->next;
if (!m_readyHead)
- m_readyTail = 0;
+ m_readyTail = nullptr;
delete request;
return hr;
}
if (m_flushing) {
- *ppSample = 0;
+ *ppSample = nullptr;
*pdwUser = 0;
return VFW_E_WRONG_STATE;
}
} while (m_wait.wait(&m_mutex, dwTimeout));
- *ppSample = 0;
+ *ppSample = nullptr;
*pdwUser = 0;
return VFW_E_TIMEOUT;
@@ -373,10 +359,10 @@ void DirectShowIOReader::readyRead()
m_pendingHead = m_pendingHead->next;
- m_readyTail->next = 0;
+ m_readyTail->next = nullptr;
if (!m_pendingHead)
- m_pendingTail = 0;
+ m_pendingTail = nullptr;
if (!m_readyHead)
m_readyHead = m_readyTail;
@@ -463,10 +449,10 @@ void DirectShowIOReader::flushRequests()
m_pendingHead = m_pendingHead->next;
- m_readyTail->next = 0;
+ m_readyTail->next = nullptr;
if (!m_pendingHead)
- m_pendingTail = 0;
+ m_pendingTail = nullptr;
if (!m_readyHead)
m_readyHead = m_readyTail;
diff --git a/src/plugins/directshow/player/directshowioreader.h b/src/plugins/directshow/player/directshowioreader.h
index 550990648..a0f2d7adb 100644
--- a/src/plugins/directshow/player/directshowioreader.h
+++ b/src/plugins/directshow/player/directshowioreader.h
@@ -99,18 +99,18 @@ private:
DirectShowIOSource *m_source;
QIODevice *m_device;
DirectShowEventLoop *m_loop;
- DirectShowSampleRequest *m_pendingHead;
- DirectShowSampleRequest *m_pendingTail;
- DirectShowSampleRequest *m_readyHead;
- DirectShowSampleRequest *m_readyTail;
- LONGLONG m_synchronousPosition;
- LONG m_synchronousLength;
- qint64 m_synchronousBytesRead;
- BYTE *m_synchronousBuffer;
- HRESULT m_synchronousResult;
- LONGLONG m_totalLength;
- LONGLONG m_availableLength;
- bool m_flushing;
+ DirectShowSampleRequest *m_pendingHead = nullptr;
+ DirectShowSampleRequest *m_pendingTail = nullptr;
+ DirectShowSampleRequest *m_readyHead = nullptr;
+ DirectShowSampleRequest *m_readyTail = nullptr;
+ LONGLONG m_synchronousPosition = 0;
+ LONG m_synchronousLength = 0;
+ qint64 m_synchronousBytesRead = 0;
+ BYTE *m_synchronousBuffer = nullptr;
+ HRESULT m_synchronousResult = S_OK;
+ LONGLONG m_totalLength = 0;
+ LONGLONG m_availableLength = 0;
+ bool m_flushing = false;
QMutex m_mutex;
QWaitCondition m_wait;
};
diff --git a/src/plugins/directshow/player/directshowiosource.cpp b/src/plugins/directshow/player/directshowiosource.cpp
index d5833fafc..5144710b7 100644
--- a/src/plugins/directshow/player/directshowiosource.cpp
+++ b/src/plugins/directshow/player/directshowiosource.cpp
@@ -66,16 +66,7 @@ static const GUID directshow_subtypes[] =
};
DirectShowIOSource::DirectShowIOSource(DirectShowEventLoop *loop)
- : m_ref(1)
- , m_state(State_Stopped)
- , m_reader(0)
- , m_loop(loop)
- , m_graph(0)
- , m_clock(0)
- , m_allocator(0)
- , m_peerPin(0)
- , m_pinId(QLatin1String("Data"))
- , m_queriedForAsyncReader(false)
+ : m_loop(loop)
{
// This filter has only one possible output type, that is, a stream of data
// with no particular subtype. The graph builder will try every demux/decode filters
@@ -92,9 +83,9 @@ DirectShowIOSource::DirectShowIOSource(DirectShowEventLoop *loop)
FALSE, // bTemporalCompression
1, // lSampleSize
GUID_NULL, // formattype
- 0, // pUnk
+ nullptr, // pUnk
0, // cbFormat
- 0, // pbFormat
+ nullptr, // pbFormat
};
for (const auto &directshowSubtype : directshow_subtypes) {
@@ -152,7 +143,7 @@ HRESULT DirectShowIOSource::QueryInterface(REFIID riid, void **ppvObject)
m_queriedForAsyncReader = true;
*ppvObject = static_cast<IAsyncReader *>(m_reader);
} else {
- *ppvObject = 0;
+ *ppvObject = nullptr;
return E_NOINTERFACE;
}
@@ -381,7 +372,7 @@ HRESULT DirectShowIOSource::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
pReceivePin->Disconnect();
if (m_allocator) {
m_allocator->Release();
- m_allocator = 0;
+ m_allocator = nullptr;
}
if (!m_queriedForAsyncReader)
hr = VFW_E_NO_TRANSPORT;
diff --git a/src/plugins/directshow/player/directshowiosource.h b/src/plugins/directshow/player/directshowiosource.h
index 02639de7c..837842518 100644
--- a/src/plugins/directshow/player/directshowiosource.h
+++ b/src/plugins/directshow/player/directshowiosource.h
@@ -119,19 +119,19 @@ public:
HRESULT STDMETHODCALLTYPE QueryDirection(PIN_DIRECTION *pPinDir) override;
private:
- volatile LONG m_ref;
- FILTER_STATE m_state;
- DirectShowIOReader *m_reader;
+ volatile LONG m_ref = 1;
+ FILTER_STATE m_state = State_Stopped;
+ DirectShowIOReader *m_reader = nullptr;
DirectShowEventLoop *m_loop;
- IFilterGraph *m_graph;
- IReferenceClock *m_clock;
- IMemAllocator *m_allocator;
- IPin *m_peerPin;
+ IFilterGraph *m_graph = nullptr;
+ IReferenceClock *m_clock = nullptr;
+ IMemAllocator *m_allocator = nullptr;
+ IPin *m_peerPin = nullptr;
DirectShowMediaType m_connectionMediaType;
QList<DirectShowMediaType> m_supportedMediaTypes;
QString m_filterName;
- const QString m_pinId;
- bool m_queriedForAsyncReader;
+ const QString m_pinId = QLatin1String("Data");
+ bool m_queriedForAsyncReader = false;
QMutex m_mutex;
};
diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.cpp b/src/plugins/directshow/player/directshowmetadatacontrol.cpp
index 52b73a7df..46674143e 100644
--- a/src/plugins/directshow/player/directshowmetadatacontrol.cpp
+++ b/src/plugins/directshow/player/directshowmetadatacontrol.cpp
@@ -209,7 +209,7 @@ static QString nameForGUIDString(const QString &guid)
}
typedef HRESULT (WINAPI *q_SHCreateItemFromParsingName)(PCWSTR, IBindCtx *, const GUID&, void **);
-static q_SHCreateItemFromParsingName sHCreateItemFromParsingName = 0;
+static q_SHCreateItemFromParsingName sHCreateItemFromParsingName = nullptr;
#endif
#if QT_CONFIG(wmsdk)
@@ -225,7 +225,7 @@ namespace
};
}
-typedef QList<QWMMetaDataKey> QWMMetaDataKeys;
+using QWMMetaDataKeys = QList<QWMMetaDataKey>;
Q_GLOBAL_STATIC(QWMMetaDataKeys, metadataKeys)
static const QWMMetaDataKeys *qt_wmMetaDataKeys()
@@ -299,7 +299,7 @@ static QVariant getValue(IWMHeaderInfo *header, const wchar_t *key)
WMT_ATTR_DATATYPE type = WMT_TYPE_DWORD;
WORD size = 0;
- if (header->GetAttributeByName(&streamNumber, key, &type, 0, &size) == S_OK) {
+ if (header->GetAttributeByName(&streamNumber, key, &type, nullptr, &size) == S_OK) {
switch (type) {
case WMT_TYPE_DWORD:
if (size == sizeof(DWORD)) {
@@ -445,7 +445,6 @@ static QVariant convertValue(const PROPVARIANT& var)
DirectShowMetaDataControl::DirectShowMetaDataControl(QObject *parent)
: QMetaDataReaderControl(parent)
- , m_available(false)
{
}
@@ -472,7 +471,7 @@ static QString convertBSTR(BSTR *string)
::SysStringLen(*string));
::SysFreeString(*string);
- string = 0;
+ string = nullptr;
return value;
}
@@ -492,11 +491,11 @@ void DirectShowMetaDataControl::updateMetadata(const QString &fileSrc, QVariantM
}
if (!fileSrc.isEmpty() && sHCreateItemFromParsingName) {
- IShellItem2* shellItem = 0;
+ IShellItem2* shellItem = nullptr;
if (sHCreateItemFromParsingName(reinterpret_cast<const WCHAR*>(fileSrc.utf16()),
- 0, IID_PPV_ARGS(&shellItem)) == S_OK) {
+ nullptr, IID_PPV_ARGS(&shellItem)) == S_OK) {
- IPropertyStore *pStore = 0;
+ IPropertyStore *pStore = nullptr;
if (shellItem->GetPropertyStore(GPS_DEFAULT, IID_PPV_ARGS(&pStore)) == S_OK) {
DWORD cProps;
if (SUCCEEDED(pStore->GetCount(&cProps))) {
@@ -651,17 +650,17 @@ void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter
return;
#endif
{
- IAMMediaContent *content = 0;
+ IAMMediaContent *content = nullptr;
if ((!graph || graph->QueryInterface(
IID_IAMMediaContent, reinterpret_cast<void **>(&content)) != S_OK)
&& (!source || source->QueryInterface(
IID_IAMMediaContent, reinterpret_cast<void **>(&content)) != S_OK)) {
- content = 0;
+ content = nullptr;
}
if (content) {
- BSTR string = 0;
+ BSTR string = nullptr;
if (content->get_AuthorName(&string) == S_OK)
metadata.insert(QMediaMetaData::Author, convertBSTR(&string));
diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.h b/src/plugins/directshow/player/directshowmetadatacontrol.h
index 4196a7950..e66127ab3 100644
--- a/src/plugins/directshow/player/directshowmetadatacontrol.h
+++ b/src/plugins/directshow/player/directshowmetadatacontrol.h
@@ -54,7 +54,7 @@ class DirectShowMetaDataControl : public QMetaDataReaderControl
{
Q_OBJECT
public:
- DirectShowMetaDataControl(QObject *parent = 0);
+ DirectShowMetaDataControl(QObject *parent = nullptr);
~DirectShowMetaDataControl() override;
bool isMetaDataAvailable() const override;
@@ -76,7 +76,7 @@ private:
};
QVariantMap m_metadata;
- bool m_available;
+ bool m_available = false;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/player/directshowplayercontrol.cpp b/src/plugins/directshow/player/directshowplayercontrol.cpp
index 8fddc2102..50e8d6421 100644
--- a/src/plugins/directshow/player/directshowplayercontrol.cpp
+++ b/src/plugins/directshow/player/directshowplayercontrol.cpp
@@ -50,20 +50,6 @@
DirectShowPlayerControl::DirectShowPlayerControl(DirectShowPlayerService *service, QObject *parent)
: QMediaPlayerControl(parent)
, m_service(service)
- , m_audio(0)
- , m_stream(0)
- , m_updateProperties(0)
- , m_state(QMediaPlayer::StoppedState)
- , m_status(QMediaPlayer::NoMedia)
- , m_error(QMediaPlayer::NoError)
- , m_streamTypes(0)
- , m_volume(100)
- , m_muted(false)
- , m_emitPosition(-1)
- , m_pendingPosition(-1)
- , m_duration(0)
- , m_playbackRate(0)
- , m_seekable(false)
{
}
diff --git a/src/plugins/directshow/player/directshowplayercontrol.h b/src/plugins/directshow/player/directshowplayercontrol.h
index dba9ab9a0..122f5be2f 100644
--- a/src/plugins/directshow/player/directshowplayercontrol.h
+++ b/src/plugins/directshow/player/directshowplayercontrol.h
@@ -55,7 +55,7 @@ class DirectShowPlayerControl : public QMediaPlayerControl
{
Q_OBJECT
public:
- DirectShowPlayerControl(DirectShowPlayerService *service, QObject *parent = 0);
+ DirectShowPlayerControl(DirectShowPlayerService *service, QObject *parent = nullptr);
~DirectShowPlayerControl() override;
QMediaPlayer::State state() const override;
@@ -129,20 +129,20 @@ private:
void setVolumeHelper(int volume);
DirectShowPlayerService *m_service;
- IBasicAudio *m_audio;
- QIODevice *m_stream;
- int m_updateProperties;
- QMediaPlayer::State m_state;
- QMediaPlayer::MediaStatus m_status;
- QMediaPlayer::Error m_error;
- int m_streamTypes;
- int m_volume;
- bool m_muted;
- qint64 m_emitPosition;
- qint64 m_pendingPosition;
- qint64 m_duration;
- qreal m_playbackRate;
- bool m_seekable;
+ IBasicAudio *m_audio = nullptr;
+ QIODevice *m_stream = nullptr;
+ int m_updateProperties = 0;
+ QMediaPlayer::State m_state = QMediaPlayer::StoppedState;
+ QMediaPlayer::MediaStatus m_status = QMediaPlayer::NoMedia;
+ QMediaPlayer::Error m_error = QMediaPlayer::NoError;
+ int m_streamTypes = 0;
+ int m_volume = 100;
+ bool m_muted = false;
+ qint64 m_emitPosition = -1;
+ qint64 m_pendingPosition = -1;
+ qint64 m_duration = 0;
+ qreal m_playbackRate = 0;
+ bool m_seekable = false;
QMediaContent m_media;
QString m_errorString;
diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp
index ed131f0bd..3cc42dc21 100644
--- a/src/plugins/directshow/player/directshowplayerservice.cpp
+++ b/src/plugins/directshow/player/directshowplayerservice.cpp
@@ -123,37 +123,8 @@ private:
DirectShowPlayerService::DirectShowPlayerService(QObject *parent)
: QMediaService(parent)
- , m_playerControl(0)
- , m_metaDataControl(0)
- , m_videoRendererControl(0)
- , m_videoWindowControl(0)
- , m_audioEndpointControl(0)
- , m_audioProbeControl(nullptr)
- , m_videoProbeControl(nullptr)
- , m_audioSampleGrabber(nullptr)
- , m_videoSampleGrabber(nullptr)
- , m_taskThread(0)
, m_loop(qt_directShowEventLoop())
- , m_pendingTasks(0)
- , m_executingTask(0)
- , m_executedTasks(0)
, m_taskHandle(::CreateEvent(nullptr, FALSE, FALSE, nullptr))
- , m_eventHandle(0)
- , m_graphStatus(NoMedia)
- , m_stream(0)
- , m_graph(0)
- , m_graphBuilder(nullptr)
- , m_source(0)
- , m_audioOutput(0)
- , m_videoOutput(0)
- , m_rate(1.0)
- , m_position(0)
- , m_seekPosition(-1)
- , m_duration(0)
- , m_buffering(false)
- , m_seekable(false)
- , m_atEnd(false)
- , m_dontCacheNextSeekResult(false)
{
m_playerControl = new DirectShowPlayerControl(this);
m_metaDataControl = new DirectShowMetaDataControl(this);
@@ -179,12 +150,12 @@ DirectShowPlayerService::~DirectShowPlayerService()
if (m_audioOutput) {
m_audioOutput->Release();
- m_audioOutput = 0;
+ m_audioOutput = nullptr;
}
if (m_videoOutput) {
m_videoOutput->Release();
- m_videoOutput = 0;
+ m_videoOutput = nullptr;
}
delete m_playerControl;
@@ -200,13 +171,13 @@ DirectShowPlayerService::~DirectShowPlayerService()
QMediaControl *DirectShowPlayerService::requestControl(const char *name)
{
- if (qstrcmp(name, QMediaPlayerControl_iid) == 0) {
+ if (qstrcmp(name, QMediaPlayerControl_iid) == 0)
return m_playerControl;
- } else if (qstrcmp(name, QAudioOutputSelectorControl_iid) == 0) {
+ if (qstrcmp(name, QAudioOutputSelectorControl_iid) == 0)
return m_audioEndpointControl;
- } else if (qstrcmp(name, QMetaDataReaderControl_iid) == 0) {
+ if (qstrcmp(name, QMetaDataReaderControl_iid) == 0)
return m_metaDataControl;
- } else if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
+ if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
if (!m_videoRendererControl && !m_videoWindowControl) {
m_videoRendererControl = new DirectShowVideoRendererControl(m_loop);
@@ -215,7 +186,9 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name)
return m_videoRendererControl;
}
- } else if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
+ return nullptr;
+ }
+ if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
if (!m_videoRendererControl && !m_videoWindowControl) {
IBaseFilter *filter{};
@@ -239,20 +212,23 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name)
return m_videoWindowControl;
}
- } else if (qstrcmp(name, QMediaAudioProbeControl_iid) == 0) {
+ return nullptr;
+ }
+ if (qstrcmp(name, QMediaAudioProbeControl_iid) == 0) {
if (!m_audioProbeControl)
m_audioProbeControl = new DirectShowAudioProbeControl();
m_audioProbeControl->ref();
updateAudioProbe();
return m_audioProbeControl;
- } else if (qstrcmp(name, QMediaVideoProbeControl_iid) == 0) {
+ }
+ if (qstrcmp(name, QMediaVideoProbeControl_iid) == 0) {
if (!m_videoProbeControl)
m_videoProbeControl = new DirectShowVideoProbeControl();
m_videoProbeControl->ref();
updateVideoProbe();
return m_videoProbeControl;
}
- return 0;
+ return nullptr;
}
void DirectShowPlayerService::releaseControl(QMediaControl *control)
@@ -261,17 +237,17 @@ void DirectShowPlayerService::releaseControl(QMediaControl *control)
qWarning("QMediaService::releaseControl():"
" Attempted release of null control");
} else if (control == m_videoRendererControl) {
- setVideoOutput(0);
+ setVideoOutput(nullptr);
delete m_videoRendererControl;
- m_videoRendererControl = 0;
+ m_videoRendererControl = nullptr;
} else if (control == m_videoWindowControl) {
- setVideoOutput(0);
+ setVideoOutput(nullptr);
delete m_videoWindowControl;
- m_videoWindowControl = 0;
+ m_videoWindowControl = nullptr;
} else if (control == m_audioProbeControl) {
if (!m_audioProbeControl->deref()) {
DirectShowAudioProbeControl *old = m_audioProbeControl;
@@ -298,7 +274,7 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
if (m_graph)
releaseGraph();
- m_url = media.canonicalUrl();
+ m_url = media.request().url();
m_stream = stream;
m_error = QMediaPlayer::NoError;
@@ -356,7 +332,7 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker)
{
- IBaseFilter *source = 0;
+ IBaseFilter *source = nullptr;
HRESULT hr = E_FAIL;
if (m_url.scheme() == QLatin1String("http") || m_url.scheme() == QLatin1String("https")) {
@@ -369,14 +345,14 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker)
if (IFileSourceFilter *fileSource = com_new<IFileSourceFilter>(clsid_WMAsfReader, iid_IFileSourceFilter)) {
locker->unlock();
- hr = fileSource->Load(reinterpret_cast<const OLECHAR *>(m_url.toString().utf16()), 0);
+ hr = fileSource->Load(reinterpret_cast<const OLECHAR *>(m_url.toString().utf16()), nullptr);
if (SUCCEEDED(hr)) {
source = com_cast<IBaseFilter>(fileSource, IID_IBaseFilter);
if (!SUCCEEDED(hr = m_graph->AddFilter(source, L"Source")) && source) {
source->Release();
- source = 0;
+ source = nullptr;
}
}
fileSource->Release();
@@ -511,18 +487,18 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker)
HRESULT renderHr = S_OK;
while (!filters.isEmpty()) {
- IEnumPins *pins = 0;
+ IEnumPins *pins = nullptr;
IBaseFilter *filter = filters[filters.size() - 1];
filters.removeLast();
if (!(m_pendingTasks & ReleaseFilters) && SUCCEEDED(filter->EnumPins(&pins))) {
int outputs = 0;
- for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) {
+ for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) {
PIN_DIRECTION direction;
if (pin->QueryDirection(&direction) == S_OK && direction == PINDIR_OUTPUT) {
++outputs;
- IPin *peer = 0;
+ IPin *peer = nullptr;
if (pin->ConnectedTo(&peer) == S_OK) {
PIN_INFO peerInfo;
if (SUCCEEDED(peer->QueryPinInfo(&peerInfo)))
@@ -530,7 +506,7 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker)
peer->Release();
} else {
locker->unlock();
- HRESULT hr = graph->RenderEx(pin, /*AM_RENDEREX_RENDERTOEXISTINGRENDERERS*/ 1, 0);
+ HRESULT hr = graph->RenderEx(pin, /*AM_RENDEREX_RENDERTOEXISTINGRENDERERS*/ 1, nullptr);
if (SUCCEEDED(hr)) {
rendered = true;
m_error = QMediaPlayer::NoError;
@@ -686,13 +662,13 @@ void DirectShowPlayerService::doReleaseGraph(QMutexLocker *locker)
if (m_source) {
m_source->Release();
- m_source = 0;
+ m_source = nullptr;
}
- m_eventHandle = 0;
+ m_eventHandle = nullptr;
m_graph->Release();
- m_graph = 0;
+ m_graph = nullptr;
if (m_graphBuilder) {
m_graphBuilder->Release();
@@ -830,17 +806,17 @@ int DirectShowPlayerService::findStreamTypes(IBaseFilter *source) const
int streamTypes = 0;
while (!filters.isEmpty()) {
- IEnumPins *pins = 0;
+ IEnumPins *pins = nullptr;
IBaseFilter *filter = filters[filters.size() - 1];
filters.removeLast();
if (SUCCEEDED(filter->EnumPins(&pins))) {
- for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) {
+ for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) {
PIN_DIRECTION direction;
if (pin->QueryDirection(&direction) == S_OK && direction == PINDIR_OUTPUT) {
DirectShowMediaType connectionType;
if (SUCCEEDED(pin->ConnectionMediaType(&connectionType))) {
- IPin *peer = 0;
+ IPin *peer = nullptr;
if (connectionType->majortype == MEDIATYPE_Audio) {
streamTypes |= AudioStream;
@@ -873,8 +849,8 @@ int DirectShowPlayerService::findStreamType(IPin *pin) const
bool audio = false;
bool other = false;
- for (AM_MEDIA_TYPE *type = 0;
- types->Next(1, &type, 0) == S_OK;
+ for (AM_MEDIA_TYPE *type = nullptr;
+ types->Next(1, &type, nullptr) == S_OK;
DirectShowMediaType::deleteType(type)) {
if (type->majortype == MEDIATYPE_Audio)
audio = true;
@@ -1188,7 +1164,7 @@ void DirectShowPlayerService::doSeek(QMutexLocker *locker)
locker->unlock();
seeking->SetPositions(
- &seekPosition, AM_SEEKING_AbsolutePositioning, 0, AM_SEEKING_NoPositioning);
+ &seekPosition, AM_SEEKING_AbsolutePositioning, nullptr, AM_SEEKING_NoPositioning);
locker->relock();
if (!m_dontCacheNextSeekResult) {
@@ -1214,7 +1190,7 @@ int DirectShowPlayerService::bufferStatus() const
m_source, IID_IWMReaderAdvanced2)) {
DWORD percentage = 0;
- reader->GetBufferProgress(&percentage, 0);
+ reader->GetBufferProgress(&percentage, nullptr);
reader->Release();
return percentage;
@@ -1387,7 +1363,7 @@ void DirectShowPlayerService::doReleaseVideoOutput(QMutexLocker *locker)
control->Release();
}
- IBaseFilter *intermediate = 0;
+ IBaseFilter *intermediate = nullptr;
if (!SUCCEEDED(m_graph->FindFilterByName(L"Color Space Converter", &intermediate))) {
intermediate = m_videoOutput;
intermediate->AddRef();
@@ -1664,13 +1640,13 @@ bool DirectShowPlayerService::isConnected(IBaseFilter *filter, PIN_DIRECTION dir
{
bool connected = false;
- IEnumPins *pins = 0;
+ IEnumPins *pins = nullptr;
if (SUCCEEDED(filter->EnumPins(&pins))) {
- for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) {
+ for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) {
PIN_DIRECTION dir;
if (SUCCEEDED(pin->QueryDirection(&dir)) && dir == direction) {
- IPin *peer = 0;
+ IPin *peer = nullptr;
if (SUCCEEDED(pin->ConnectedTo(&peer))) {
connected = true;
@@ -1686,15 +1662,15 @@ bool DirectShowPlayerService::isConnected(IBaseFilter *filter, PIN_DIRECTION dir
IBaseFilter *DirectShowPlayerService::getConnected(
IBaseFilter *filter, PIN_DIRECTION direction) const
{
- IBaseFilter *connected = 0;
+ IBaseFilter *connected = nullptr;
- IEnumPins *pins = 0;
+ IEnumPins *pins = nullptr;
if (SUCCEEDED(filter->EnumPins(&pins))) {
- for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) {
+ for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) {
PIN_DIRECTION dir;
if (SUCCEEDED(pin->QueryDirection(&dir)) && dir == direction) {
- IPin *peer = 0;
+ IPin *peer = nullptr;
if (SUCCEEDED(pin->ConnectedTo(&peer))) {
PIN_INFO info;
diff --git a/src/plugins/directshow/player/directshowplayerservice.h b/src/plugins/directshow/player/directshowplayerservice.h
index a6eeb8a77..69b4b0a6c 100644
--- a/src/plugins/directshow/player/directshowplayerservice.h
+++ b/src/plugins/directshow/player/directshowplayerservice.h
@@ -78,7 +78,7 @@ public:
VideoStream = 0x02
};
- DirectShowPlayerService(QObject *parent = 0);
+ DirectShowPlayerService(QObject *parent = nullptr);
~DirectShowPlayerService() override;
QMediaControl *requestControl(const char *name) override;
@@ -193,44 +193,44 @@ private:
InvalidMedia
};
- DirectShowPlayerControl *m_playerControl;
- DirectShowMetaDataControl *m_metaDataControl;
- DirectShowVideoRendererControl *m_videoRendererControl;
- QVideoWindowControl *m_videoWindowControl;
- DirectShowAudioEndpointControl *m_audioEndpointControl;
- DirectShowAudioProbeControl *m_audioProbeControl;
- DirectShowVideoProbeControl *m_videoProbeControl;
- DirectShowSampleGrabber *m_audioSampleGrabber;
- DirectShowSampleGrabber *m_videoSampleGrabber;
-
- QThread *m_taskThread;
+ DirectShowPlayerControl *m_playerControl = nullptr;
+ DirectShowMetaDataControl *m_metaDataControl = nullptr;
+ DirectShowVideoRendererControl *m_videoRendererControl = nullptr;
+ QVideoWindowControl *m_videoWindowControl = nullptr;
+ DirectShowAudioEndpointControl *m_audioEndpointControl = nullptr;
+ DirectShowAudioProbeControl *m_audioProbeControl = nullptr;
+ DirectShowVideoProbeControl *m_videoProbeControl = nullptr;
+ DirectShowSampleGrabber *m_audioSampleGrabber = nullptr;
+ DirectShowSampleGrabber *m_videoSampleGrabber = nullptr;
+
+ QThread *m_taskThread = nullptr;
DirectShowEventLoop *m_loop;
- int m_pendingTasks;
- int m_executingTask;
- int m_executedTasks;
- int m_streamTypes;
+ int m_pendingTasks = 0;
+ int m_executingTask = 0;
+ int m_executedTasks = 0;
+ int m_streamTypes = 0;
HANDLE m_taskHandle;
- HANDLE m_eventHandle;
- GraphStatus m_graphStatus;
- QMediaPlayer::Error m_error;
- QIODevice *m_stream;
- IFilterGraph2 *m_graph;
- ICaptureGraphBuilder2 *m_graphBuilder;
- IBaseFilter *m_source;
- IBaseFilter *m_audioOutput;
- IBaseFilter *m_videoOutput;
- qreal m_rate;
- qint64 m_position;
- qint64 m_seekPosition;
- qint64 m_duration;
+ HANDLE m_eventHandle = nullptr;
+ GraphStatus m_graphStatus = NoMedia;
+ QMediaPlayer::Error m_error = QMediaPlayer::NoError;
+ QIODevice *m_stream = nullptr;
+ IFilterGraph2 *m_graph = nullptr;
+ ICaptureGraphBuilder2 *m_graphBuilder = nullptr;
+ IBaseFilter *m_source = nullptr;
+ IBaseFilter *m_audioOutput = nullptr;
+ IBaseFilter *m_videoOutput = nullptr;
+ qreal m_rate = 1;
+ qint64 m_position = 0;
+ qint64 m_seekPosition = -1;
+ qint64 m_duration = 0;
QMediaTimeRange m_playbackRange;
QUrl m_url;
QString m_errorString;
QMutex m_mutex;
- bool m_buffering;
- bool m_seekable;
- bool m_atEnd;
- bool m_dontCacheNextSeekResult;
+ bool m_buffering = false;
+ bool m_seekable = false;
+ bool m_atEnd = false;
+ bool m_dontCacheNextSeekResult = false;
QVariantMap m_metadata;
friend class DirectShowPlayerServiceThread;
diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
index bbf7cf8b9..0b1f0de2f 100644
--- a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
+++ b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
@@ -51,11 +51,6 @@
DirectShowVideoRendererControl::DirectShowVideoRendererControl(DirectShowEventLoop *loop, QObject *parent)
: QVideoRendererControl(parent)
, m_loop(loop)
- , m_surface(0)
- , m_filter(0)
-#if QT_CONFIG(evr)
- , m_evrPresenter(0)
-#endif
{
}
@@ -85,13 +80,13 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
if (m_evrPresenter) {
m_evrPresenter->setSurface(nullptr);
m_evrPresenter->Release();
- m_evrPresenter = 0;
+ m_evrPresenter = nullptr;
}
#endif
if (m_filter) {
m_filter->Release();
- m_filter = 0;
+ m_filter = nullptr;
}
m_surface = surface;
@@ -104,9 +99,9 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
connect(this, &DirectShowVideoRendererControl::positionChanged, m_evrPresenter, &EVRCustomPresenter::positionChanged);
if (!m_evrPresenter->isValid() || !qt_evr_setCustomPresenter(m_filter, m_evrPresenter)) {
m_filter->Release();
- m_filter = 0;
+ m_filter = nullptr;
m_evrPresenter->Release();
- m_evrPresenter = 0;
+ m_evrPresenter = nullptr;
}
}
diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.h b/src/plugins/directshow/player/directshowvideorenderercontrol.h
index 930f8a6b1..9326a2748 100644
--- a/src/plugins/directshow/player/directshowvideorenderercontrol.h
+++ b/src/plugins/directshow/player/directshowvideorenderercontrol.h
@@ -58,7 +58,7 @@ class DirectShowVideoRendererControl : public QVideoRendererControl
{
Q_OBJECT
public:
- DirectShowVideoRendererControl(DirectShowEventLoop *loop, QObject *parent = 0);
+ DirectShowVideoRendererControl(DirectShowEventLoop *loop, QObject *parent = nullptr);
~DirectShowVideoRendererControl() override;
QAbstractVideoSurface *surface() const override;
@@ -72,10 +72,10 @@ Q_SIGNALS:
private:
DirectShowEventLoop *m_loop;
- QAbstractVideoSurface *m_surface;
- IBaseFilter *m_filter;
+ QAbstractVideoSurface *m_surface = nullptr;
+ IBaseFilter *m_filter = nullptr;
#if QT_CONFIG(evr)
- EVRCustomPresenter *m_evrPresenter;
+ EVRCustomPresenter *m_evrPresenter = nullptr;
#endif
};
diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp
index 4702d5908..4b7afc266 100644
--- a/src/plugins/directshow/player/videosurfacefilter.cpp
+++ b/src/plugins/directshow/player/videosurfacefilter.cpp
@@ -47,6 +47,8 @@
#include <QtCore/qloggingcategory.h>
#include <qabstractvideosurface.h>
+#include <mutex>
+
#include <initguid.h>
QT_BEGIN_NAMESPACE
@@ -154,7 +156,7 @@ HRESULT VideoSurfaceInputPin::Disconnect()
HRESULT VideoSurfaceInputPin::EndOfStream()
{
QMutexLocker lock(&m_videoSurfaceFilter->m_mutex);
- QMutexLocker renderLock(&m_videoSurfaceFilter->m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex);
HRESULT hr = DirectShowInputPin::EndOfStream();
if (hr != S_OK)
@@ -167,7 +169,7 @@ HRESULT VideoSurfaceInputPin::BeginFlush()
{
QMutexLocker lock(&m_videoSurfaceFilter->m_mutex);
{
- QMutexLocker renderLock(&m_videoSurfaceFilter->m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex);
DirectShowInputPin::BeginFlush();
m_videoSurfaceFilter->BeginFlush();
}
@@ -179,7 +181,7 @@ HRESULT VideoSurfaceInputPin::BeginFlush()
HRESULT VideoSurfaceInputPin::EndFlush()
{
QMutexLocker lock(&m_videoSurfaceFilter->m_mutex);
- QMutexLocker renderLock(&m_videoSurfaceFilter->m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex);
HRESULT hr = m_videoSurfaceFilter->EndFlush();
if (SUCCEEDED(hr))
@@ -207,7 +209,7 @@ HRESULT VideoSurfaceInputPin::Receive(IMediaSample *pMediaSample)
if (m_videoSurfaceFilter->state() != State_Stopped && !m_flushing && !m_inErrorState) {
m_videoSurfaceFilter->NotifyEvent(EC_ERRORABORT, hr, 0);
{
- QMutexLocker renderLocker(&m_videoSurfaceFilter->m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex);
if (m_videoSurfaceFilter->m_running && !m_videoSurfaceFilter->m_EOSDelivered)
m_videoSurfaceFilter->notifyEOS();
}
@@ -222,20 +224,9 @@ HRESULT VideoSurfaceInputPin::Receive(IMediaSample *pMediaSample)
VideoSurfaceFilter::VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectShowEventLoop *loop, QObject *parent)
: QObject(parent)
, m_loop(loop)
- , m_pin(nullptr)
, m_surface(surface)
- , m_bytesPerLine(0)
- , m_surfaceStarted(false)
- , m_renderMutex(QMutex::Recursive)
- , m_running(false)
- , m_pendingSample(nullptr)
- , m_pendingSampleEndTime(0)
, m_renderEvent(CreateEvent(nullptr, FALSE, FALSE, nullptr))
, m_flushEvent(CreateEvent(nullptr, TRUE, FALSE, nullptr))
- , m_adviseCookie(0)
- , m_EOS(false)
- , m_EOSDelivered(false)
- , m_EOSTimer(0)
{
supportedFormatsChanged();
connect(surface, &QAbstractVideoSurface::supportedFormatsChanged,
@@ -376,7 +367,7 @@ HRESULT VideoSurfaceFilter::Run(REFERENCE_TIME tStart)
allocator->Release();
}
- QMutexLocker renderLocker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_renderMutex);
m_running = true;
@@ -453,7 +444,7 @@ HRESULT VideoSurfaceFilter::Stop()
HRESULT VideoSurfaceFilter::EndOfStream()
{
- QMutexLocker renderLocker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_renderMutex);
qCDebug(qLcRenderFilter, "EndOfStream");
@@ -509,7 +500,7 @@ HRESULT VideoSurfaceFilter::Receive(IMediaSample *pMediaSample)
}
{
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (m_pendingSample || m_EOS)
return E_UNEXPECTED;
@@ -553,13 +544,13 @@ HRESULT VideoSurfaceFilter::Receive(IMediaSample *pMediaSample)
return S_OK;
}
- QMutexLocker renderLock(&m_renderMutex);
+ std::unique_lock<QRecursiveMutex> renderLocker(m_renderMutex);
// Flush or pause might have happened just before the lock
if (m_pendingSample && m_running) {
- renderLock.unlock();
+ renderLocker.unlock();
renderPendingSample();
- renderLock.relock();
+ renderLocker.lock();
} else {
qCDebug(qLcRenderFilter, " discarding sample (%p)", pMediaSample);
}
@@ -612,7 +603,7 @@ void VideoSurfaceFilter::unscheduleSample()
void VideoSurfaceFilter::clearPendingSample()
{
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (m_pendingSample) {
qCDebug(qLcRenderFilter, "clearPendingSample");
m_pendingSample->Release();
@@ -628,7 +619,7 @@ void QT_WIN_CALLBACK EOSTimerCallback(UINT, UINT, DWORD_PTR dwUser, DWORD_PTR, D
void VideoSurfaceFilter::onEOSTimerTimeout()
{
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (m_EOSTimer) {
m_EOSTimer = 0;
@@ -638,7 +629,7 @@ void VideoSurfaceFilter::onEOSTimerTimeout()
void VideoSurfaceFilter::checkEOS()
{
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (!m_EOS || m_EOSDelivered || m_EOSTimer)
return;
@@ -673,7 +664,7 @@ void VideoSurfaceFilter::checkEOS()
void VideoSurfaceFilter::notifyEOS()
{
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (!m_running)
return;
@@ -689,7 +680,7 @@ void VideoSurfaceFilter::resetEOS()
{
resetEOSTimer();
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (m_EOS)
qCDebug(qLcRenderFilter, "resetEOS (delivered=%s)", m_EOSDelivered ? "true" : "false");
@@ -713,11 +704,10 @@ bool VideoSurfaceFilter::startSurface()
m_loop->postEvent(this, new QEvent(QEvent::Type(StartSurface)));
m_waitSurface.wait(&m_mutex);
return m_surfaceStarted;
- } else {
- m_surfaceStarted = m_surface->start(m_surfaceFormat);
- qCDebug(qLcRenderFilter, "startSurface %s", m_surfaceStarted ? "succeeded" : "failed");
- return m_surfaceStarted;
}
+ m_surfaceStarted = m_surface->start(m_surfaceFormat);
+ qCDebug(qLcRenderFilter, "startSurface %s", m_surfaceStarted ? "succeeded" : "failed");
+ return m_surfaceStarted;
}
void VideoSurfaceFilter::stopSurface()
@@ -741,12 +731,11 @@ bool VideoSurfaceFilter::restartSurface()
m_loop->postEvent(this, new QEvent(QEvent::Type(RestartSurface)));
m_waitSurface.wait(&m_mutex);
return m_surfaceStarted;
- } else {
- m_surface->stop();
- m_surfaceStarted = m_surface->start(m_surfaceFormat);
- qCDebug(qLcRenderFilter, "restartSurface %s", m_surfaceStarted ? "succeeded" : "failed");
- return m_surfaceStarted;
}
+ m_surface->stop();
+ m_surfaceStarted = m_surface->start(m_surfaceFormat);
+ qCDebug(qLcRenderFilter, "restartSurface %s", m_surfaceStarted ? "succeeded" : "failed");
+ return m_surfaceStarted;
}
void VideoSurfaceFilter::flushSurface()
@@ -766,7 +755,7 @@ void VideoSurfaceFilter::renderPendingSample()
m_loop->postEvent(this, new QEvent(QEvent::Type(RenderSample)));
m_waitSurface.wait(&m_mutex);
} else {
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (!m_pendingSample)
return;
diff --git a/src/plugins/directshow/player/videosurfacefilter.h b/src/plugins/directshow/player/videosurfacefilter.h
index 56791f270..9e56f4b65 100644
--- a/src/plugins/directshow/player/videosurfacefilter.h
+++ b/src/plugins/directshow/player/videosurfacefilter.h
@@ -62,7 +62,7 @@ class VideoSurfaceFilter : public QObject
Q_OBJECT
COM_REF_MIXIN
public:
- VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectShowEventLoop *loop, QObject *parent = 0);
+ VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectShowEventLoop *loop, QObject *parent = nullptr);
~VideoSurfaceFilter();
STDMETHODIMP QueryInterface(REFIID riid, void **ppv) override;
@@ -130,28 +130,28 @@ private:
QMutex m_mutex;
DirectShowEventLoop *m_loop;
- VideoSurfaceInputPin *m_pin;
+ VideoSurfaceInputPin *m_pin = nullptr;
QWaitCondition m_waitSurface;
QAbstractVideoSurface *m_surface;
QVideoSurfaceFormat m_surfaceFormat;
- int m_bytesPerLine;
- bool m_surfaceStarted;
+ int m_bytesPerLine = 0;
+ bool m_surfaceStarted = false;
QList<GUID> m_supportedTypes;
QReadWriteLock m_typesLock;
- QMutex m_renderMutex;
- bool m_running;
- IMediaSample *m_pendingSample;
- REFERENCE_TIME m_pendingSampleEndTime;
+ QRecursiveMutex m_renderMutex;
+ bool m_running = false;
+ IMediaSample *m_pendingSample = nullptr;
+ REFERENCE_TIME m_pendingSampleEndTime = 0;
HANDLE m_renderEvent;
HANDLE m_flushEvent;
- DWORD_PTR m_adviseCookie;
+ DWORD_PTR m_adviseCookie = 0;
- bool m_EOS;
- bool m_EOSDelivered;
- UINT m_EOSTimer;
+ bool m_EOS = false;
+ bool m_EOSDelivered = false;
+ UINT m_EOSTimer = 0;
friend class VideoSurfaceInputPin;
};
diff --git a/src/plugins/directshow/player/vmr9videowindowcontrol.cpp b/src/plugins/directshow/player/vmr9videowindowcontrol.cpp
index c026a12d8..63c945622 100644
--- a/src/plugins/directshow/player/vmr9videowindowcontrol.cpp
+++ b/src/plugins/directshow/player/vmr9videowindowcontrol.cpp
@@ -49,15 +49,6 @@
Vmr9VideoWindowControl::Vmr9VideoWindowControl(QObject *parent)
: QVideoWindowControl(parent)
, m_filter(com_new<IBaseFilter>(CLSID_VideoMixingRenderer9))
- , m_windowId(0)
- , m_windowColor(RGB(0, 0, 0))
- , m_dirtyValues(0)
- , m_aspectRatioMode(Qt::KeepAspectRatio)
- , m_brightness(0)
- , m_contrast(0)
- , m_hue(0)
- , m_saturation(0)
- , m_fullScreen(false)
{
if (IVMRFilterConfig9 *config = com_cast<IVMRFilterConfig9>(m_filter, IID_IVMRFilterConfig9)) {
config->SetRenderingMode(VMR9Mode_Windowless);
@@ -113,7 +104,7 @@ void Vmr9VideoWindowControl::setDisplayRect(const QRect &rect)
RECT sourceRect = { 0, 0, 0, 0 };
RECT displayRect = { rect.left(), rect.top(), rect.right() + 1, rect.bottom() + 1 };
- control->GetNativeVideoSize(&sourceRect.right, &sourceRect.bottom, 0, 0);
+ control->GetNativeVideoSize(&sourceRect.right, &sourceRect.bottom, nullptr, nullptr);
if (m_aspectRatioMode == Qt::KeepAspectRatioByExpanding) {
QSize clippedSize = rect.size();
@@ -182,7 +173,7 @@ QSize Vmr9VideoWindowControl::nativeSize() const
LONG width;
LONG height;
- if (control->GetNativeVideoSize(&width, &height, 0, 0) == S_OK)
+ if (control->GetNativeVideoSize(&width, &height, nullptr, nullptr) == S_OK)
size = QSize(width, height);
control->Release();
}
diff --git a/src/plugins/directshow/player/vmr9videowindowcontrol.h b/src/plugins/directshow/player/vmr9videowindowcontrol.h
index 8ab9bd506..2a6f008f3 100644
--- a/src/plugins/directshow/player/vmr9videowindowcontrol.h
+++ b/src/plugins/directshow/player/vmr9videowindowcontrol.h
@@ -52,7 +52,7 @@ class Vmr9VideoWindowControl : public QVideoWindowControl
{
Q_OBJECT
public:
- Vmr9VideoWindowControl(QObject *parent = 0);
+ Vmr9VideoWindowControl(QObject *parent = nullptr);
~Vmr9VideoWindowControl() override;
IBaseFilter *filter() const { return m_filter; }
@@ -91,16 +91,16 @@ private:
IVMRMixerControl9 *control, VMR9ProcAmpControlFlags property, int value) const;
IBaseFilter *m_filter;
- WId m_windowId;
- COLORREF m_windowColor;
- DWORD m_dirtyValues;
- Qt::AspectRatioMode m_aspectRatioMode;
+ WId m_windowId = 0;
+ COLORREF m_windowColor = RGB(0, 0, 0);
+ DWORD m_dirtyValues = 0;
+ Qt::AspectRatioMode m_aspectRatioMode = Qt::KeepAspectRatio;
QRect m_displayRect;
- int m_brightness;
- int m_contrast;
- int m_hue;
- int m_saturation;
- bool m_fullScreen;
+ int m_brightness = 0;
+ int m_contrast = 0;
+ int m_hue = 0;
+ int m_saturation = 0;
+ bool m_fullScreen = false;
};
QT_END_NAMESPACE
diff --git a/src/plugins/gstreamer/camerabin/camerabincontrol.cpp b/src/plugins/gstreamer/camerabin/camerabincontrol.cpp
index a34315b8a..fdf3ff4ac 100644
--- a/src/plugins/gstreamer/camerabin/camerabincontrol.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabincontrol.cpp
@@ -121,7 +121,7 @@ void CameraBinControl::setState(QCamera::State state)
//special case for stopping the camera while it's busy,
//it should be delayed until the camera is idle
- if (state == QCamera::LoadedState &&
+ if ((state == QCamera::LoadedState || state == QCamera::UnloadedState) &&
m_session->status() == QCamera::ActiveStatus &&
m_session->isBusy()) {
#ifdef CAMEABIN_DEBUG
diff --git a/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp b/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp
index 29d7743ed..52ec75f44 100644
--- a/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp
@@ -149,9 +149,7 @@ gboolean CameraBinImageCapture::encoderEventProbe(
tags[QMediaMetaData::FNumber] = extendedTags.value("capturing-focal-ratio");
tags[QMediaMetaData::ExposureMode] = extendedTags.value("capturing-exposure-mode");
- QMapIterator<QString, QVariant> i(tags);
- while (i.hasNext()) {
- i.next();
+ for (auto i = tags.cbegin(), end = tags.cend(); i != end; ++i) {
if (i.value().isValid()) {
QMetaObject::invokeMethod(self, "imageMetadataAvailable",
Qt::QueuedConnection,
diff --git a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
index 6a0816343..1a35c5cf6 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
@@ -204,11 +204,9 @@ GstElement *QGstreamerAudioEncode::createEncoder()
}
QMap<QString, QVariant> options = m_options.value(codec);
- QMapIterator<QString,QVariant> it(options);
- while (it.hasNext()) {
- it.next();
- QString option = it.key();
- QVariant value = it.value();
+ for (auto it = options.cbegin(), end = options.cend(); it != end; ++it) {
+ const QString &option = it.key();
+ const QVariant &value = it.value();
switch (value.type()) {
case QVariant::Int:
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
index 62d9bbd8c..a2ed1d288 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
@@ -195,11 +195,9 @@ GstElement *QGstreamerVideoEncode::createEncoder()
}
QMap<QString,QVariant> options = m_options.value(codec);
- QMapIterator<QString,QVariant> it(options);
- while (it.hasNext()) {
- it.next();
- QString option = it.key();
- QVariant value = it.value();
+ for (auto it = options.cbegin(), end = options.cend(); it != end; ++it) {
+ const QString &option = it.key();
+ const QVariant &value = it.value();
switch (value.type()) {
case QVariant::Int:
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
index 8f2f6643c..bd503d3a1 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
@@ -167,9 +167,8 @@ void QGstreamerMetaDataProvider::updateTags()
m_tags.clear();
bool changed = false;
- QMapIterator<QByteArray ,QVariant> i(m_session->tags());
- while (i.hasNext()) {
- i.next();
+ const auto tags = m_session->tags();
+ for (auto i = tags.cbegin(), end = tags.cend(); i != end; ++i) {
//use gstreamer native keys for elements not in our key map
QString key = qt_gstreamerMetaDataKeys()->value(i.key(), i.key());
m_tags.insert(key, i.value());
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
index 44cb5439b..4bf4a0a57 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
@@ -55,10 +55,6 @@
#include <private/qgstreamervideowindow_p.h>
#include <private/qgstreamervideorenderer_p.h>
-#if QT_CONFIG(mirclient) && defined (__arm__)
-#include "private/qgstreamermirtexturerenderer_p.h"
-#endif
-
#include "qgstreamerstreamscontrol.h"
#include <private/qgstreameraudioprobecontrol_p.h>
#include <private/qgstreamervideoprobecontrol_p.h>
@@ -79,13 +75,7 @@ QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent)
m_metaData = new QGstreamerMetaDataProvider(m_session, this);
m_streamsControl = new QGstreamerStreamsControl(m_session,this);
m_availabilityControl = new QGStreamerAvailabilityControl(m_control->resources(), this);
-
-#if QT_CONFIG(mirclient) && defined (__arm__)
- m_videoRenderer = new QGstreamerMirTextureRenderer(this, m_session);
-#else
m_videoRenderer = new QGstreamerVideoRenderer(this);
-#endif
-
m_videoWindow = new QGstreamerVideoWindow(this);
// If the GStreamer video sink is not available, don't provide the video window control since
// it won't work anyway.
diff --git a/src/plugins/m3u/qm3uhandler.cpp b/src/plugins/m3u/qm3uhandler.cpp
index bc5366bf6..017c32d92 100644
--- a/src/plugins/m3u/qm3uhandler.cpp
+++ b/src/plugins/m3u/qm3uhandler.cpp
@@ -163,7 +163,7 @@ public:
virtual bool writeItem(const QMediaContent& item)
{
- *m_textStream << item.canonicalUrl().toString() << endl;
+ *m_textStream << item.request().url().toString() << endl;
return true;
}
diff --git a/src/plugins/pulseaudio/qaudioinput_pulse.h b/src/plugins/pulseaudio/qaudioinput_pulse.h
index 32a2c031c..3a6cf03c4 100644
--- a/src/plugins/pulseaudio/qaudioinput_pulse.h
+++ b/src/plugins/pulseaudio/qaudioinput_pulse.h
@@ -55,7 +55,7 @@
#include <QtCore/qtimer.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
-#include <QtCore/qdatetime.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qiodevice.h>
#include "qaudio.h"
@@ -132,8 +132,8 @@ private:
QTimer *m_timer;
qint64 m_elapsedTimeOffset;
pa_stream *m_stream;
- QTime m_timeStamp;
- QTime m_clockStamp;
+ QElapsedTimer m_timeStamp;
+ QElapsedTimer m_clockStamp;
QByteArray m_streamName;
QByteArray m_device;
QByteArray m_tempBuffer;
diff --git a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp
index c66ac937d..fc48ed818 100644
--- a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp
+++ b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp
@@ -230,7 +230,7 @@ void MmRendererMediaPlayerControl::attach()
}
}
- const QByteArray resourcePath = resourcePathForUrl(m_media.canonicalUrl());
+ const QByteArray resourcePath = resourcePathForUrl(m_media.request().url());
if (resourcePath.isEmpty()) {
detach();
return;
diff --git a/src/plugins/windowsaudio/qwindowsaudioinput.cpp b/src/plugins/windowsaudio/qwindowsaudioinput.cpp
index 717baaff0..3332e3067 100644
--- a/src/plugins/windowsaudio/qwindowsaudioinput.cpp
+++ b/src/plugins/windowsaudio/qwindowsaudioinput.cpp
@@ -52,6 +52,7 @@
#include "qwindowsaudioinput.h"
#include <QtCore/QDataStream>
+#include <QtCore/qtimer.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/windowsaudio/qwindowsaudioinput.h b/src/plugins/windowsaudio/qwindowsaudioinput.h
index a0feae257..817176731 100644
--- a/src/plugins/windowsaudio/qwindowsaudioinput.h
+++ b/src/plugins/windowsaudio/qwindowsaudioinput.h
@@ -55,7 +55,7 @@
#include <QtCore/qfile.h>
#include <QtCore/qdebug.h>
-#include <QtCore/qtimer.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
#include <QtCore/qdatetime.h>
@@ -120,9 +120,9 @@ private:
QByteArray m_device;
int bytesAvailable;
int intervalTime;
- QTime timeStamp;
+ QElapsedTimer timeStamp;
qint64 elapsedTimeOffset;
- QTime timeStampOpened;
+ QElapsedTimer timeStampOpened;
qint64 totalTimeValue;
bool pullMode;
bool resuming;
diff --git a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp
index f39e1694b..1182647fc 100644
--- a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp
+++ b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp
@@ -53,6 +53,7 @@
#include "qwindowsaudioutils.h"
#include <QtEndian>
#include <QtCore/QDataStream>
+#include <QtCore/qtimer.h>
#include <private/qaudiohelpers_p.h>
//#define DEBUG_AUDIO 1
diff --git a/src/plugins/windowsaudio/qwindowsaudiooutput.h b/src/plugins/windowsaudio/qwindowsaudiooutput.h
index 30ee1defe..d6e6998ec 100644
--- a/src/plugins/windowsaudio/qwindowsaudiooutput.h
+++ b/src/plugins/windowsaudio/qwindowsaudiooutput.h
@@ -54,7 +54,7 @@
#include "qwindowsaudioutils.h"
#include <QtCore/qdebug.h>
-#include <QtCore/qtimer.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
#include <QtCore/qdatetime.h>
@@ -118,9 +118,9 @@ private:
void pauseAndSleep();
QByteArray m_device;
int bytesAvailable;
- QTime timeStamp;
+ QElapsedTimer timeStamp;
qint64 elapsedTimeOffset;
- QTime timeStampOpened;
+ QElapsedTimer timeStampOpened;
qint32 buffer_size;
qint32 period_size;
qint32 blocks_count;
diff --git a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
index 779703392..ee916b750 100644
--- a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
+++ b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
@@ -759,20 +759,15 @@ void QWinRTMediaPlayerControl::setMedia(const QMediaContent &media, QIODevice *s
}
emit mediaChanged(media);
- QString urlString = media.canonicalUrl().toString();
+ QString urlString = media.request().url().toString();
if (!d->stream) {
// If we can read the file via Qt, use the byte stream approach
- const auto resources = media.resources();
- for (const QMediaResource &resource : resources) {
- const QUrl url = resource.url();
- if (url.isLocalFile()) {
- urlString = url.toLocalFile();
- QScopedPointer<QFile> file(new QFile(urlString));
- if (file->open(QFile::ReadOnly)) {
- file->setProperty(QT_WINRT_MEDIAPLAYER_STREAM_ID, true);
- d->stream.reset(file.take());
- break;
- }
+ if (media.request().url().isLocalFile()) {
+ urlString = media.request().url().toLocalFile();
+ QScopedPointer<QFile> file(new QFile(urlString));
+ if (file->open(QFile::ReadOnly)) {
+ file->setProperty(QT_WINRT_MEDIAPLAYER_STREAM_ID, true);
+ d->stream.reset(file.take());
}
}
}
diff --git a/src/plugins/wmf/player/mfplayersession.cpp b/src/plugins/wmf/player/mfplayersession.cpp
index 9f909252d..10ba25998 100644
--- a/src/plugins/wmf/player/mfplayersession.cpp
+++ b/src/plugins/wmf/player/mfplayersession.cpp
@@ -197,7 +197,7 @@ void MFPlayerSession::load(const QMediaContent &media, QIODevice *stream)
qDebug() << "load";
#endif
clear();
- QUrl url = media.canonicalUrl();
+ QUrl url = media.request().url();
if (m_status == QMediaPlayer::LoadingMedia && m_sourceResolver)
m_sourceResolver->cancel();
diff --git a/src/plugins/wmf/player/mftvideo.cpp b/src/plugins/wmf/player/mftvideo.cpp
index 747fe6aea..879911d55 100644
--- a/src/plugins/wmf/player/mftvideo.cpp
+++ b/src/plugins/wmf/player/mftvideo.cpp
@@ -573,7 +573,7 @@ STDMETHODIMP MFTransform::ProcessOutput(DWORD dwFlags, DWORD cOutputBufferCount,
if (!m_videoProbes.isEmpty()) {
QVideoFrame frame = makeVideoFrame();
- foreach (MFVideoProbeControl* probe, m_videoProbes)
+ for (MFVideoProbeControl* probe : qAsConst(m_videoProbes))
probe->bufferProbed(frame);
}
m_videoProbeMutex.unlock();
diff --git a/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_backend_p.h b/src/qtmultimediaquicktools/qdeclarativevideooutput_backend_p.h
index da99b387a..da99b387a 100644
--- a/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_backend_p.h
+++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_backend_p.h
diff --git a/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h b/src/qtmultimediaquicktools/qdeclarativevideooutput_p.h
index 8ea0dc338..8ea0dc338 100644
--- a/src/multimedia/qtmultimediaquicktools_headers/qdeclarativevideooutput_p.h
+++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_p.h
diff --git a/src/multimedia/qtmultimediaquicktools_headers/qsgvideonode_p.h b/src/qtmultimediaquicktools/qsgvideonode_p.h
index c094bed1f..c094bed1f 100644
--- a/src/multimedia/qtmultimediaquicktools_headers/qsgvideonode_p.h
+++ b/src/qtmultimediaquicktools/qsgvideonode_p.h
diff --git a/src/qtmultimediaquicktools/qsgvideonode_texture.cpp b/src/qtmultimediaquicktools/qsgvideonode_texture.cpp
index f5545afc7..473a4144f 100644
--- a/src/qtmultimediaquicktools/qsgvideonode_texture.cpp
+++ b/src/qtmultimediaquicktools/qsgvideonode_texture.cpp
@@ -44,6 +44,7 @@
#include <QtGui/QOpenGLFunctions>
#include <QtGui/QOpenGLShaderProgram>
#include <QtMultimedia/private/qmediaopenglhelper_p.h>
+#include <QtMultimedia/private/qtmultimediaglobal_p.h>
QT_BEGIN_NAMESPACE
@@ -58,6 +59,9 @@ QList<QVideoFrame::PixelFormat> QSGVideoNodeFactory_Texture::supportedPixelForma
pixelFormats.append(QVideoFrame::Format_ARGB32);
pixelFormats.append(QVideoFrame::Format_BGR32);
pixelFormats.append(QVideoFrame::Format_BGRA32);
+#if !QT_CONFIG(gpu_vivante)
+ pixelFormats.append(QVideoFrame::Format_ABGR32);
+#endif
}
return pixelFormats;
diff --git a/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp b/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp
index 8e4ea01a1..f07362bf1 100644
--- a/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp
+++ b/src/qtmultimediaquicktools/qsgvideonode_yuv.cpp
@@ -74,7 +74,7 @@ QList<QVideoFrame::PixelFormat> QSGVideoNodeFactory_YUV::supportedPixelFormats(
QList<QVideoFrame::PixelFormat> formats;
if (handleType == QAbstractVideoBuffer::NoHandle) {
- formats << QVideoFrame::Format_YUV420P << QVideoFrame::Format_YV12
+ formats << QVideoFrame::Format_YUV420P << QVideoFrame::Format_YV12 << QVideoFrame::Format_YUV422P
<< QVideoFrame::Format_NV12 << QVideoFrame::Format_NV21
<< QVideoFrame::Format_UYVY << QVideoFrame::Format_YUYV;
}
@@ -235,7 +235,7 @@ public:
return &uyvyType;
case QVideoFrame::Format_YUYV:
return &yuyvType;
- default: // Currently: YUV420P and YV12
+ default: // Currently: YUV420P, YUV422P and YV12
return &triPlanarType;
}
}
@@ -250,7 +250,7 @@ public:
return new QSGVideoMaterialShader_UYVY;
case QVideoFrame::Format_YUYV:
return new QSGVideoMaterialShader_YUYV;
- default: // Currently: YUV420P and YV12
+ default: // Currently: YUV420P, YUV422P and YV12
return new QSGVideoMaterialShader_YUV_TriPlanar;
}
}
@@ -308,6 +308,7 @@ QSGVideoMaterial_YUV::QSGVideoMaterial_YUV(const QVideoSurfaceFormat &format) :
break;
case QVideoFrame::Format_YUV420P:
case QVideoFrame::Format_YV12:
+ case QVideoFrame::Format_YUV422P:
m_planeCount = 3;
break;
case QVideoFrame::Format_UYVY:
@@ -408,18 +409,20 @@ void QSGVideoMaterial_YUV::bind()
functions->glActiveTexture(GL_TEXTURE0); // Finish with 0 as default texture unit
bindTexture(m_textureIds[0], m_frame.bytesPerLine(y), fh, m_frame.bits(y), texFormat1);
- } else { // YUV420P || YV12
+ } else { // YUV420P || YV12 || YUV422P
const int y = 0;
- const int u = m_frame.pixelFormat() == QVideoFrame::Format_YUV420P ? 1 : 2;
- const int v = m_frame.pixelFormat() == QVideoFrame::Format_YUV420P ? 2 : 1;
+ const int u = m_frame.pixelFormat() == QVideoFrame::Format_YV12 ? 2 : 1;
+ const int v = m_frame.pixelFormat() == QVideoFrame::Format_YV12 ? 1 : 2;
m_planeWidth[0] = qreal(fw) / m_frame.bytesPerLine(y);
m_planeWidth[1] = m_planeWidth[2] = qreal(fw) / (2 * m_frame.bytesPerLine(u));
+ const int uvHeight = m_frame.pixelFormat() == QVideoFrame::Format_YUV422P ? fh : fh / 2;
+
functions->glActiveTexture(GL_TEXTURE1);
- bindTexture(m_textureIds[1], m_frame.bytesPerLine(u), fh / 2, m_frame.bits(u), texFormat1);
+ bindTexture(m_textureIds[1], m_frame.bytesPerLine(u), uvHeight, m_frame.bits(u), texFormat1);
functions->glActiveTexture(GL_TEXTURE2);
- bindTexture(m_textureIds[2], m_frame.bytesPerLine(v), fh / 2, m_frame.bits(v), texFormat1);
+ bindTexture(m_textureIds[2], m_frame.bytesPerLine(v), uvHeight, m_frame.bits(v), texFormat1);
functions->glActiveTexture(GL_TEXTURE0); // Finish with 0 as default texture unit
bindTexture(m_textureIds[0], m_frame.bytesPerLine(y), fh, m_frame.bits(y), texFormat1);
}
diff --git a/src/multimedia/qtmultimediaquicktools_headers/qtmultimediaquickdefs_p.h b/src/qtmultimediaquicktools/qtmultimediaquickdefs_p.h
index 20188739c..20188739c 100644
--- a/src/multimedia/qtmultimediaquicktools_headers/qtmultimediaquickdefs_p.h
+++ b/src/qtmultimediaquicktools/qtmultimediaquickdefs_p.h
diff --git a/src/qtmultimediaquicktools/qtmultimediaquicktools.pro b/src/qtmultimediaquicktools/qtmultimediaquicktools.pro
index fd29ee5a4..cb1f8106b 100644
--- a/src/qtmultimediaquicktools/qtmultimediaquicktools.pro
+++ b/src/qtmultimediaquicktools/qtmultimediaquicktools.pro
@@ -3,11 +3,6 @@ TARGET = QtMultimediaQuick
QT = core quick multimedia-private
CONFIG += internal_module
-# Header files must go inside source directory of a module
-# to be installed by syncqt.
-INCLUDEPATH += ../multimedia/qtmultimediaquicktools_headers/
-VPATH += ../multimedia/qtmultimediaquicktools_headers/
-
PRIVATE_HEADERS += \
qdeclarativevideooutput_p.h \
qdeclarativevideooutput_backend_p.h \
diff --git a/tests/auto/integration/qaudiodeviceinfo/tst_qaudiodeviceinfo.cpp b/tests/auto/integration/qaudiodeviceinfo/tst_qaudiodeviceinfo.cpp
index 9d44dc16f..c946c0894 100644
--- a/tests/auto/integration/qaudiodeviceinfo/tst_qaudiodeviceinfo.cpp
+++ b/tests/auto/integration/qaudiodeviceinfo/tst_qaudiodeviceinfo.cpp
@@ -226,7 +226,8 @@ void tst_QAudioDeviceInfo::equalityOperator()
QVERIFY(!(dev1 != dev2));
// Make sure each available device is not equal to null
- foreach (const QAudioDeviceInfo info, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) {
+ const auto infos = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
+ for (const QAudioDeviceInfo info : infos) {
QVERIFY(dev1 != info);
QVERIFY(!(dev1 == info));
diff --git a/tests/auto/integration/qaudioinput/BLACKLIST b/tests/auto/integration/qaudioinput/BLACKLIST
index 994ea8f38..b7b86283b 100644
--- a/tests/auto/integration/qaudioinput/BLACKLIST
+++ b/tests/auto/integration/qaudioinput/BLACKLIST
@@ -5,5 +5,3 @@ linux
linux
[pullSuspendResume]
linux
-[push]
-linux
diff --git a/tests/auto/integration/qaudioinput/tst_qaudioinput.cpp b/tests/auto/integration/qaudioinput/tst_qaudioinput.cpp
index 64e872f27..bcc50f78a 100644
--- a/tests/auto/integration/qaudioinput/tst_qaudioinput.cpp
+++ b/tests/auto/integration/qaudioinput/tst_qaudioinput.cpp
@@ -220,7 +220,7 @@ void tst_QAudioInput::initTestCase()
QVERIFY(m_temporaryDir->isValid());
const QString temporaryAudioPath = m_temporaryDir->path() + slash;
- foreach (const QAudioFormat &format, testFormats) {
+ for (const QAudioFormat &format : qAsConst(testFormats)) {
const QString fileName = temporaryAudioPath + formatToFileName(format) + QStringLiteral(".wav");
audioFiles.append(FilePtr::create(fileName));
}
diff --git a/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp b/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp
index f167bf8ec..f3a676073 100644
--- a/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp
+++ b/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp
@@ -264,7 +264,7 @@ void tst_QAudioOutput::initTestCase()
QVERIFY(m_temporaryDir->isValid());
const QString temporaryAudioPath = m_temporaryDir->path() + slash;
- foreach (const QAudioFormat &format, testFormats) {
+ for (const QAudioFormat &format : qAsConst(testFormats)) {
qint64 len = (format.sampleRate()*format.channelCount()*(format.sampleSize()/8)*2); // 2 seconds
createSineWaveData(format, len);
// Write generate sine wave data to file
diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
index 80e2e693c..894486230 100644
--- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
+++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
@@ -69,8 +69,10 @@ public slots:
void cleanupTestCase();
private slots:
+#if QT_DEPRECATED_SINCE(5, 3)
void testAvailableDevices();
void testDeviceDescription();
+#endif
void testCameraInfo();
void testCtorWithDevice();
void testCtorWithCameraInfo();
@@ -101,6 +103,7 @@ void tst_QCameraBackend::cleanupTestCase()
{
}
+#if QT_DEPRECATED_SINCE(5, 3)
void tst_QCameraBackend::testAvailableDevices()
{
int deviceCount = QMediaServiceProvider::defaultServiceProvider()->devices(QByteArray(Q_MEDIASERVICE_CAMERA)).count();
@@ -114,22 +117,24 @@ void tst_QCameraBackend::testDeviceDescription()
if (deviceCount == 0)
QVERIFY(QCamera::deviceDescription(QByteArray("random")).isNull());
else {
- foreach (const QByteArray &device, QCamera::availableDevices())
+ const auto devices = QCamera::availableDevices();
+ for (const QByteArray &device : devices)
QVERIFY(QCamera::deviceDescription(device).length() > 0);
}
}
+#endif
void tst_QCameraBackend::testCameraInfo()
{
int deviceCount = QMediaServiceProvider::defaultServiceProvider()->devices(QByteArray(Q_MEDIASERVICE_CAMERA)).count();
- QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
+ const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
QCOMPARE(cameras.count(), deviceCount);
if (cameras.isEmpty()) {
QVERIFY(QCameraInfo::defaultCamera().isNull());
QSKIP("Camera selection is not supported");
}
- foreach (const QCameraInfo &info, cameras) {
+ for (const QCameraInfo &info : cameras) {
QVERIFY(!info.deviceName().isEmpty());
QVERIFY(!info.description().isEmpty());
QVERIFY(info.orientation() % 90 == 0);
@@ -138,10 +143,11 @@ void tst_QCameraBackend::testCameraInfo()
void tst_QCameraBackend::testCtorWithDevice()
{
- if (QCamera::availableDevices().isEmpty())
+ const auto availableCameras = QCameraInfo::availableCameras();
+ if (availableCameras.isEmpty())
QSKIP("Camera selection not supported");
- QCamera *camera = new QCamera(QCamera::availableDevices().first());
+ QCamera *camera = new QCamera(availableCameras.first().deviceName().toLatin1());
QCOMPARE(camera->error(), QCamera::NoError);
delete camera;
@@ -607,11 +613,11 @@ void tst_QCameraBackend::testVideoRecording_data()
{
QTest::addColumn<QByteArray>("device");
- QList<QByteArray> devices = QCamera::availableDevices();
+ const auto devices = QCameraInfo::availableCameras();
- foreach (const QByteArray &device, devices) {
- QTest::newRow(QCamera::deviceDescription(device).toUtf8())
- << device;
+ for (const auto &device : devices) {
+ QTest::newRow(device.description().toUtf8())
+ << device.deviceName().toLatin1();
}
if (devices.isEmpty())
diff --git a/tests/auto/integration/qdeclarativevideooutput/qdeclarativevideooutput.pro b/tests/auto/integration/qdeclarativevideooutput/qdeclarativevideooutput.pro
index 1f3a00b42..c4221232a 100644
--- a/tests/auto/integration/qdeclarativevideooutput/qdeclarativevideooutput.pro
+++ b/tests/auto/integration/qdeclarativevideooutput/qdeclarativevideooutput.pro
@@ -1,6 +1,6 @@
TARGET = tst_qdeclarativevideooutput
-QT += multimedia-private qml testlib quick
+QT += multimedia-private qml testlib quick qtmultimediaquicktools-private
CONFIG += testcase
RESOURCES += qml.qrc
diff --git a/tests/auto/integration/qdeclarativevideooutput/tst_qdeclarativevideooutput.cpp b/tests/auto/integration/qdeclarativevideooutput/tst_qdeclarativevideooutput.cpp
index 5b9fdd03c..798b63f96 100644
--- a/tests/auto/integration/qdeclarativevideooutput/tst_qdeclarativevideooutput.cpp
+++ b/tests/auto/integration/qdeclarativevideooutput/tst_qdeclarativevideooutput.cpp
@@ -280,11 +280,11 @@ void tst_QDeclarativeVideoOutput::surfaceSource()
QVERIFY(holder.videoSurface() != 0);
// Now we could do things with the surface..
- QList<QVideoFrame::PixelFormat> formats = holder.videoSurface()->supportedPixelFormats();
+ const QList<QVideoFrame::PixelFormat> formats = holder.videoSurface()->supportedPixelFormats();
QVERIFY(formats.count() > 0);
// See if we can start and stop each pixel format (..)
- foreach (QVideoFrame::PixelFormat format, formats) {
+ for (QVideoFrame::PixelFormat format : formats) {
QVideoSurfaceFormat surfaceFormat(QSize(200,100), format);
QVERIFY(holder.videoSurface()->isFormatSupported(surfaceFormat)); // This does kind of depend on node factories
diff --git a/tests/auto/integration/qdeclarativevideooutput_window/qdeclarativevideooutput_window.pro b/tests/auto/integration/qdeclarativevideooutput_window/qdeclarativevideooutput_window.pro
index 82108d220..eeb1c0135 100644
--- a/tests/auto/integration/qdeclarativevideooutput_window/qdeclarativevideooutput_window.pro
+++ b/tests/auto/integration/qdeclarativevideooutput_window/qdeclarativevideooutput_window.pro
@@ -1,6 +1,6 @@
TARGET = tst_qdeclarativevideooutput_window
-QT += multimedia-private qml testlib quick
+QT += multimedia-private qml testlib quick qtmultimediaquicktools-private
CONFIG += testcase
RESOURCES += qml.qrc
diff --git a/tests/auto/integration/qmediaplayerbackend/BLACKLIST b/tests/auto/integration/qmediaplayerbackend/BLACKLIST
index c81f6c24f..c2833f1f7 100644
--- a/tests/auto/integration/qmediaplayerbackend/BLACKLIST
+++ b/tests/auto/integration/qmediaplayerbackend/BLACKLIST
@@ -1,8 +1,10 @@
# QTBUG-46368
osx
-windows
-
+windows-7
+windows-7sp1
+windows-10 msvc-2015
+windows-10 msvc-2017
# Media player plugin not built at the moment on this platform
opensuse-13.1 64bit
diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
index df218be7f..9cd3b7fa9 100644
--- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
+++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
@@ -154,7 +154,7 @@ QMediaContent tst_QMediaPlayerBackend::selectVideoFile(const QStringList& mediaC
QSignalSpy errorSpy(&player, SIGNAL(error(QMediaPlayer::Error)));
- foreach (QString s, mediaCandidates) {
+ for (const QString &s : mediaCandidates) {
QFileInfo videoFile(s);
if (!videoFile.exists())
continue;
@@ -1354,6 +1354,7 @@ void tst_QMediaPlayerBackend::surfaceTest_data()
QList<QVideoFrame::PixelFormat> formatsYUV;
formatsYUV << QVideoFrame::Format_YUV420P
+ << QVideoFrame::Format_YUV422P
<< QVideoFrame::Format_YV12
<< QVideoFrame::Format_UYVY
<< QVideoFrame::Format_YUYV
diff --git a/tests/auto/integration/shared/mediafileselector.h b/tests/auto/integration/shared/mediafileselector.h
index 8b88d14a4..984da6e2b 100644
--- a/tests/auto/integration/shared/mediafileselector.h
+++ b/tests/auto/integration/shared/mediafileselector.h
@@ -42,7 +42,7 @@ static QMediaContent selectMediaFile(const QStringList& mediaCandidates)
QSignalSpy errorSpy(&player, SIGNAL(error(QMediaPlayer::Error)));
- foreach (QString s, mediaCandidates) {
+ for (const QString &s : mediaCandidates) {
QFileInfo mediaFile(s);
if (!mediaFile.exists())
continue;
diff --git a/tests/auto/unit/qcamera/tst_qcamera.cpp b/tests/auto/unit/qcamera/tst_qcamera.cpp
index fa5e7187b..4b6202173 100644
--- a/tests/auto/unit/qcamera/tst_qcamera.cpp
+++ b/tests/auto/unit/qcamera/tst_qcamera.cpp
@@ -794,16 +794,16 @@ void tst_QCamera::testImageSettings()
QVERIFY(!settings.isNull());
settings = QImageEncoderSettings();
- settings.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
- QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant(1));
+ settings.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
+ QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant(1));
QVariantMap options;
- options.insert(QLatin1Literal("encoderOption"), QVariant(1));
+ options.insert(QLatin1String("encoderOption"), QVariant(1));
QCOMPARE(settings.encodingOptions(), options);
- options.insert(QLatin1Literal("encoderOption2"), QVariant(2));
- options.remove(QLatin1Literal("encoderOption"));
+ options.insert(QLatin1String("encoderOption2"), QVariant(2));
+ options.remove(QLatin1String("encoderOption"));
settings.setEncodingOptions(options);
- QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant());
- QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption2")), QVariant(2));
+ QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant());
+ QCOMPARE(settings.encodingOption(QLatin1String("encoderOption2")), QVariant(2));
QVERIFY(!settings.isNull());
QVERIFY(settings != QImageEncoderSettings());
@@ -874,11 +874,11 @@ void tst_QCamera::testImageSettings()
QVERIFY(settings1 != settings2);
settings1 = QImageEncoderSettings();
- settings1.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ settings1.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
settings2 = QImageEncoderSettings();
- settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
QVERIFY(settings1 == settings2);
- settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(2));
+ settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(2));
QVERIFY(settings1 != settings2);
}
diff --git a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
index b270e93eb..87c72521c 100644
--- a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
+++ b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
@@ -411,17 +411,17 @@ void tst_QDeclarativeAudio::source()
audio.setSource(url1);
QCOMPARE(audio.source(), url1);
- QCOMPARE(provider.playerControl()->media().canonicalUrl(), url1);
+ QCOMPARE(provider.playerControl()->media().request().url(), url1);
QCOMPARE(spy.count(), 1);
audio.setSource(url2);
QCOMPARE(audio.source(), url2);
- QCOMPARE(provider.playerControl()->media().canonicalUrl(), url2);
+ QCOMPARE(provider.playerControl()->media().request().url(), url2);
QCOMPARE(spy.count(), 2);
audio.setSource(url3);
QCOMPARE(audio.source(), url3);
- QCOMPARE(provider.playerControl()->media().canonicalUrl(), url3);
+ QCOMPARE(provider.playerControl()->media().request().url(), url3);
QCOMPARE(spy.count(), 3);
}
diff --git a/tests/auto/unit/qmediacontent/tst_qmediacontent.cpp b/tests/auto/unit/qmediacontent/tst_qmediacontent.cpp
index d10257c19..3c68a32b1 100644
--- a/tests/auto/unit/qmediacontent/tst_qmediacontent.cpp
+++ b/tests/auto/unit/qmediacontent/tst_qmediacontent.cpp
@@ -43,12 +43,16 @@ private slots:
void testNull();
void testUrlCtor();
void testRequestCtor();
+#if QT_DEPRECATED_SINCE(6, 0)
void testResourceCtor();
void testResourceListCtor();
+#endif
void testCopy();
void testAssignment();
void testEquality();
+#if QT_DEPRECATED_SINCE(6, 0)
void testResources();
+#endif
void testPlaylist();
};
@@ -57,17 +61,23 @@ void tst_QMediaContent::testNull()
QMediaContent media;
QCOMPARE(media.isNull(), true);
+ QCOMPARE(media.request().url(), QUrl());
+#if QT_DEPRECATED_SINCE(6, 0)
QCOMPARE(media.canonicalUrl(), QUrl());
QCOMPARE(media.canonicalResource(), QMediaResource());
QCOMPARE(media.resources(), QMediaResourceList());
+#endif
}
void tst_QMediaContent::testUrlCtor()
{
QMediaContent media(QUrl("http://example.com/movie.mov"));
+ QCOMPARE(media.request().url(), QUrl("http://example.com/movie.mov"));
+#if QT_DEPRECATED_SINCE(6, 0)
QCOMPARE(media.canonicalUrl(), QUrl("http://example.com/movie.mov"));
QCOMPARE(media.canonicalResource().url(), QUrl("http://example.com/movie.mov"));
+#endif
}
void tst_QMediaContent::testRequestCtor()
@@ -76,13 +86,18 @@ void tst_QMediaContent::testRequestCtor()
request.setAttribute(QNetworkRequest::User, QVariant(1234));
QMediaContent media(request);
+ QCOMPARE(media.request().url(), QUrl("http://example.com/movie.mov"));
+ QCOMPARE(media.request(), request);
+#if QT_DEPRECATED_SINCE(6, 0)
QCOMPARE(media.canonicalUrl(), QUrl("http://example.com/movie.mov"));
QCOMPARE(media.canonicalRequest(),request);
QCOMPARE(media.canonicalResource().request(), request);
QCOMPARE(media.canonicalResource().url(), QUrl("http://example.com/movie.mov"));
+#endif
}
+#if QT_DEPRECATED_SINCE(6, 0)
void tst_QMediaContent::testResourceCtor()
{
QMediaContent media(QMediaResource(QUrl("http://example.com/movie.mov")));
@@ -100,10 +115,11 @@ void tst_QMediaContent::testResourceListCtor()
QCOMPARE(media.canonicalUrl(), QUrl("http://example.com/movie.mov"));
QCOMPARE(media.canonicalResource().url(), QUrl("http://example.com/movie.mov"));
}
+#endif
void tst_QMediaContent::testCopy()
{
- QMediaContent media1(QMediaResource(QUrl("http://example.com/movie.mov")));
+ QMediaContent media1(QUrl("http://example.com/movie.mov"));
QMediaContent media2(media1);
QVERIFY(media1 == media2);
@@ -111,7 +127,7 @@ void tst_QMediaContent::testCopy()
void tst_QMediaContent::testAssignment()
{
- QMediaContent media1(QMediaResource(QUrl("http://example.com/movie.mov")));
+ QMediaContent media1(QUrl("http://example.com/movie.mov"));
QMediaContent media2;
QMediaContent media3;
@@ -126,9 +142,9 @@ void tst_QMediaContent::testEquality()
{
QMediaContent media1;
QMediaContent media2;
- QMediaContent media3(QMediaResource(QUrl("http://example.com/movie.mov")));
- QMediaContent media4(QMediaResource(QUrl("http://example.com/movie.mov")));
- QMediaContent media5(QMediaResource(QUrl("file:///some/where/over/the/rainbow.mp3")));
+ QMediaContent media3(QUrl("http://example.com/movie.mov"));
+ QMediaContent media4(QUrl("http://example.com/movie.mov"));
+ QMediaContent media5(QUrl("file:///some/where/over/the/rainbow.mp3"));
// null == null
QCOMPARE(media1 == media2, true);
@@ -147,6 +163,7 @@ void tst_QMediaContent::testEquality()
QCOMPARE(media4 != media5, true);
}
+#if QT_DEPRECATED_SINCE(6, 0)
void tst_QMediaContent::testResources()
{
QMediaResourceList resourceList;
@@ -160,17 +177,18 @@ void tst_QMediaContent::testResources()
QCOMPARE(res[0], QMediaResource(QUrl("http://example.com/movie-main.mov")));
QCOMPARE(res[1], QMediaResource(QUrl("http://example.com/movie-big.mov")));
}
+#endif
void tst_QMediaContent::testPlaylist()
{
QMediaContent media(QUrl("http://example.com/movie.mov"));
- QVERIFY(media.canonicalUrl().isValid());
+ QVERIFY(media.request().url().isValid());
QVERIFY(!media.playlist());
{
QPointer<QMediaPlaylist> playlist(new QMediaPlaylist);
media = QMediaContent(playlist.data(), QUrl("http://example.com/sample.m3u"), true);
- QVERIFY(media.canonicalUrl().isValid());
+ QVERIFY(media.request().url().isValid());
QCOMPARE(media.playlist(), playlist.data());
media = QMediaContent();
// Make sure playlist is destroyed by QMediaContent
@@ -189,7 +207,7 @@ void tst_QMediaContent::testPlaylist()
{
QPointer<QMediaPlaylist> playlist(new QMediaPlaylist);
media = QMediaContent(playlist.data(), QUrl(), false);
- QVERIFY(!media.canonicalUrl().isValid());
+ QVERIFY(!media.request().url().isValid());
QCOMPARE(media.playlist(), playlist.data());
media = QMediaContent();
QVERIFY(playlist);
diff --git a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
index 94d297ad0..f2b993722 100644
--- a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
+++ b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
@@ -1293,7 +1293,7 @@ void tst_QMediaPlayer::testQrc()
}
// Check the media actually passed to the backend
- QCOMPARE(mockService->mockControl->media().canonicalUrl().scheme(), backendMediaContentScheme);
+ QCOMPARE(mockService->mockControl->media().request().url().scheme(), backendMediaContentScheme);
QCOMPARE(bool(mockService->mockControl->mediaStream()), backendHasStream);
}
@@ -1329,7 +1329,7 @@ void tst_QMediaPlayer::testAudioRole()
spy.clear();
- player.setProperty("audioRole", qVariantFromValue(QAudio::AlarmRole));
+ player.setProperty("audioRole", QVariant::fromValue(QAudio::AlarmRole));
QCOMPARE(qvariant_cast<QAudio::Role>(player.property("audioRole")), QAudio::AlarmRole);
QCOMPARE(mockService->mockAudioRoleControl->audioRole(), QAudio::AlarmRole);
QCOMPARE(spy.count(), 1);
@@ -1397,7 +1397,7 @@ void tst_QMediaPlayer::testCustomAudioRole()
spyCustomRole.clear();
QString customRole2(QStringLiteral("customRole2"));
- player.setProperty("customAudioRole", qVariantFromValue(customRole2));
+ player.setProperty("customAudioRole", QVariant::fromValue(customRole2));
QCOMPARE(qvariant_cast<QString>(player.property("customAudioRole")), customRole2);
QCOMPARE(mockService->mockCustomAudioRoleControl->customAudioRole(), customRole2);
QCOMPARE(spyRole.count(), 0);
diff --git a/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp b/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp
index 3a59823ca..9b1385dac 100644
--- a/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp
+++ b/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp
@@ -542,19 +542,19 @@ void tst_QMediaPlaylist::loadM3uFile()
QCOMPARE(playlist.error(), QMediaPlaylist::NoError);
QCOMPARE(playlist.mediaCount(), 7);
- QCOMPARE(playlist.media(0).canonicalUrl(), QUrl(QLatin1String("http://test.host/path")));
- QCOMPARE(playlist.media(1).canonicalUrl(), QUrl(QLatin1String("http://test.host/path")));
+ QCOMPARE(playlist.media(0).request().url(), QUrl(QLatin1String("http://test.host/path")));
+ QCOMPARE(playlist.media(1).request().url(), QUrl(QLatin1String("http://test.host/path")));
testFileName = QFINDTESTDATA("testdata/testfile");
- QCOMPARE(playlist.media(2).canonicalUrl(),
+ QCOMPARE(playlist.media(2).request().url(),
QUrl::fromLocalFile(testFileName));
testFileName = QFINDTESTDATA("testdata");
- QCOMPARE(playlist.media(3).canonicalUrl(),
+ QCOMPARE(playlist.media(3).request().url(),
QUrl::fromLocalFile(testFileName + "/testdir/testfile"));
- QCOMPARE(playlist.media(4).canonicalUrl(), QUrl(QLatin1String("file:///testdir/testfile")));
- QCOMPARE(playlist.media(5).canonicalUrl(), QUrl(QLatin1String("file://path/name#suffix")));
+ QCOMPARE(playlist.media(4).request().url(), QUrl(QLatin1String("file:///testdir/testfile")));
+ QCOMPARE(playlist.media(5).request().url(), QUrl(QLatin1String("file://path/name#suffix")));
//ensure #2 suffix is not stripped from path
testFileName = QFINDTESTDATA("testdata/testfile2#suffix");
- QCOMPARE(playlist.media(6).canonicalUrl(), QUrl::fromLocalFile(testFileName));
+ QCOMPARE(playlist.media(6).request().url(), QUrl::fromLocalFile(testFileName));
// check ability to load from QNetworkRequest
loadSpy.clear();
@@ -597,19 +597,19 @@ void tst_QMediaPlaylist::loadPLSFile()
QCOMPARE(playlist.error(), QMediaPlaylist::NoError);
QCOMPARE(playlist.mediaCount(), 7);
- QCOMPARE(playlist.media(0).canonicalUrl(), QUrl(QLatin1String("http://test.host/path")));
- QCOMPARE(playlist.media(1).canonicalUrl(), QUrl(QLatin1String("http://test.host/path")));
+ QCOMPARE(playlist.media(0).request().url(), QUrl(QLatin1String("http://test.host/path")));
+ QCOMPARE(playlist.media(1).request().url(), QUrl(QLatin1String("http://test.host/path")));
testFileName = QFINDTESTDATA("testdata/testfile");
- QCOMPARE(playlist.media(2).canonicalUrl(),
+ QCOMPARE(playlist.media(2).request().url(),
QUrl::fromLocalFile(testFileName));
testFileName = QFINDTESTDATA("testdata");
- QCOMPARE(playlist.media(3).canonicalUrl(),
+ QCOMPARE(playlist.media(3).request().url(),
QUrl::fromLocalFile(testFileName + "/testdir/testfile"));
- QCOMPARE(playlist.media(4).canonicalUrl(), QUrl(QLatin1String("file:///testdir/testfile")));
- QCOMPARE(playlist.media(5).canonicalUrl(), QUrl(QLatin1String("file://path/name#suffix")));
+ QCOMPARE(playlist.media(4).request().url(), QUrl(QLatin1String("file:///testdir/testfile")));
+ QCOMPARE(playlist.media(5).request().url(), QUrl(QLatin1String("file://path/name#suffix")));
//ensure #2 suffix is not stripped from path
testFileName = QFINDTESTDATA("testdata/testfile2#suffix");
- QCOMPARE(playlist.media(6).canonicalUrl(), QUrl::fromLocalFile(testFileName));
+ QCOMPARE(playlist.media(6).request().url(), QUrl::fromLocalFile(testFileName));
// Try to load a totem-pl generated playlist
// (Format doesn't respect the spec)
@@ -622,7 +622,7 @@ void tst_QMediaPlaylist::loadPLSFile()
QVERIFY(loadFailedSpy.isEmpty());
QCOMPARE(playlist.error(), QMediaPlaylist::NoError);
QCOMPARE(playlist.mediaCount(), 1);
- QCOMPARE(playlist.media(0).canonicalUrl(), QUrl(QLatin1String("http://test.host/path")));
+ QCOMPARE(playlist.media(0).request().url(), QUrl(QLatin1String("http://test.host/path")));
// check ability to load from QNetworkRequest
diff --git a/tests/auto/unit/qmediapluginloader/tst_qmediapluginloader.cpp b/tests/auto/unit/qmediapluginloader/tst_qmediapluginloader.cpp
index 3a7b661df..ce1b2b9d0 100644
--- a/tests/auto/unit/qmediapluginloader/tst_qmediapluginloader.cpp
+++ b/tests/auto/unit/qmediapluginloader/tst_qmediapluginloader.cpp
@@ -72,7 +72,7 @@ void tst_QMediaPluginLoader::testInstance()
if (keys.isEmpty()) // Test is invalidated, skip.
QSKIP("No plug-ins available");
- foreach (const QString &key, keys)
+ for (const QString &key : keys)
QVERIFY(loader->instance(key) != 0);
}
@@ -83,7 +83,7 @@ void tst_QMediaPluginLoader::testInstances()
if (keys.isEmpty()) // Test is invalidated, skip.
QSKIP("No plug-ins available");
- foreach (const QString &key, keys)
+ for (const QString &key : keys)
QVERIFY(loader->instances(key).size() > 0);
}
diff --git a/tests/auto/unit/qmediarecorder/tst_qmediarecorder.cpp b/tests/auto/unit/qmediarecorder/tst_qmediarecorder.cpp
index 2bcf2011d..944207dfe 100644
--- a/tests/auto/unit/qmediarecorder/tst_qmediarecorder.cpp
+++ b/tests/auto/unit/qmediarecorder/tst_qmediarecorder.cpp
@@ -512,16 +512,16 @@ void tst_QMediaRecorder::testAudioSettings()
QVERIFY(!settings.isNull());
settings = QAudioEncoderSettings();
- settings.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
- QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant(1));
+ settings.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
+ QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant(1));
QVariantMap options;
- options.insert(QLatin1Literal("encoderOption"), QVariant(1));
+ options.insert(QLatin1String("encoderOption"), QVariant(1));
QCOMPARE(settings.encodingOptions(), options);
- options.insert(QLatin1Literal("encoderOption2"), QVariant(2));
- options.remove(QLatin1Literal("encoderOption"));
+ options.insert(QLatin1String("encoderOption2"), QVariant(2));
+ options.remove(QLatin1String("encoderOption"));
settings.setEncodingOptions(options);
- QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant());
- QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption2")), QVariant(2));
+ QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant());
+ QCOMPARE(settings.encodingOption(QLatin1String("encoderOption2")), QVariant(2));
QVERIFY(!settings.isNull());
QVERIFY(settings != QAudioEncoderSettings());
@@ -614,11 +614,11 @@ void tst_QMediaRecorder::testAudioSettings()
QVERIFY(settings1 != settings2);
settings1 = QAudioEncoderSettings();
- settings1.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ settings1.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
settings2 = QAudioEncoderSettings();
- settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
QVERIFY(settings1 == settings2);
- settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(2));
+ settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(2));
QVERIFY(settings1 != settings2);
}
@@ -663,16 +663,16 @@ void tst_QMediaRecorder::testVideoSettings()
QVERIFY(!settings.isNull());
settings = QVideoEncoderSettings();
- settings.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
- QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant(1));
+ settings.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
+ QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant(1));
QVariantMap options;
- options.insert(QLatin1Literal("encoderOption"), QVariant(1));
+ options.insert(QLatin1String("encoderOption"), QVariant(1));
QCOMPARE(settings.encodingOptions(), options);
- options.insert(QLatin1Literal("encoderOption2"), QVariant(2));
- options.remove(QLatin1Literal("encoderOption"));
+ options.insert(QLatin1String("encoderOption2"), QVariant(2));
+ options.remove(QLatin1String("encoderOption"));
settings.setEncodingOptions(options);
- QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption")), QVariant());
- QCOMPARE(settings.encodingOption(QLatin1Literal("encoderOption2")), QVariant(2));
+ QCOMPARE(settings.encodingOption(QLatin1String("encoderOption")), QVariant());
+ QCOMPARE(settings.encodingOption(QLatin1String("encoderOption2")), QVariant(2));
QVERIFY(!settings.isNull());
QVERIFY(settings != QVideoEncoderSettings());
@@ -766,11 +766,11 @@ void tst_QMediaRecorder::testVideoSettings()
QVERIFY(settings1 != settings2);
settings1 = QVideoEncoderSettings();
- settings1.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ settings1.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
settings2 = QVideoEncoderSettings();
- settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(1));
+ settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(1));
QVERIFY(settings1 == settings2);
- settings2.setEncodingOption(QLatin1Literal("encoderOption"), QVariant(2));
+ settings2.setEncodingOption(QLatin1String("encoderOption"), QVariant(2));
QVERIFY(settings1 != settings2);
}
diff --git a/tests/auto/unit/qmediaresource/tst_qmediaresource.cpp b/tests/auto/unit/qmediaresource/tst_qmediaresource.cpp
index cfb6b44e9..786570bec 100644
--- a/tests/auto/unit/qmediaresource/tst_qmediaresource.cpp
+++ b/tests/auto/unit/qmediaresource/tst_qmediaresource.cpp
@@ -37,6 +37,7 @@ class tst_QMediaResource : public QObject
{
Q_OBJECT
private slots:
+#if QT_DEPRECATED_SINCE(6, 0)
void constructNull();
void construct_data();
void construct();
@@ -47,8 +48,15 @@ private slots:
void constructorRequest();
void copyConstructor();
+#else
+ void initTestCase()
+ {
+ QSKIP("Skipping this test, QMediaResource is deprecated.");
+ }
+#endif
};
+#if QT_DEPRECATED_SINCE(6, 0)
void tst_QMediaResource::constructNull()
{
QMediaResource resource;
@@ -682,6 +690,8 @@ void tst_QMediaResource::copyConstructor()
QCOMPARE(original1 == copy1, true);
}
+#endif // QT_DEPRECATED_SINCE(6, 0)
+
QTEST_MAIN(tst_QMediaResource)
#include "tst_qmediaresource.moc"
diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.pro b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.pro
index 7fcaadbc2..813d102cb 100644
--- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.pro
+++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.pro
@@ -11,7 +11,7 @@ PLUGIN_CLASS_NAME = MockServicePlugin1
load(qt_plugin)
DESTDIR = ../$${PLUGIN_TYPE}
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
DESTDIR = ../debug/$${PLUGIN_TYPE}
} else {
diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.pro b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.pro
index 4ac001ec9..f2ac3291d 100644
--- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.pro
+++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.pro
@@ -11,7 +11,7 @@ PLUGIN_CLASS_NAME = MockServicePlugin2
load(qt_plugin)
DESTDIR = ../$${PLUGIN_TYPE}
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
DESTDIR = ../debug/$${PLUGIN_TYPE}
} else {
diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.pro b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.pro
index 34cd2fed1..51f87d9da 100644
--- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.pro
+++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.pro
@@ -11,7 +11,7 @@ PLUGIN_CLASS_NAME = MockServicePlugin3
load(qt_plugin)
DESTDIR = ../$${PLUGIN_TYPE}
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
DESTDIR = ../debug/$${PLUGIN_TYPE}
} else {
diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.pro b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.pro
index 0900bfc40..c3834ab03 100644
--- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.pro
+++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.pro
@@ -11,7 +11,7 @@ PLUGIN_CLASS_NAME = MockServicePlugin4
load(qt_plugin)
DESTDIR = ../$${PLUGIN_TYPE}
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
DESTDIR = ../debug/$${PLUGIN_TYPE}
} else {
diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin5/mockserviceplugin5.pro b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin5/mockserviceplugin5.pro
index 37f287f9d..b273c6b15 100644
--- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin5/mockserviceplugin5.pro
+++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin5/mockserviceplugin5.pro
@@ -11,7 +11,7 @@ PLUGIN_CLASS_NAME = MockServicePlugin5
load(qt_plugin)
DESTDIR = ../$${PLUGIN_TYPE}
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
DESTDIR = ../debug/$${PLUGIN_TYPE}
} else {
diff --git a/tests/auto/unit/qmediaserviceprovider/test/test.pro b/tests/auto/unit/qmediaserviceprovider/test/test.pro
index 2cf78c100..94f7f259a 100644
--- a/tests/auto/unit/qmediaserviceprovider/test/test.pro
+++ b/tests/auto/unit/qmediaserviceprovider/test/test.pro
@@ -5,7 +5,7 @@ QT += multimedia-private testlib
SOURCES += ../tst_qmediaserviceprovider.cpp
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
TARGET = ../../debug/tst_qmediaserviceprovider
} else {
diff --git a/tests/auto/unit/qmultimedia_common/mockcameraexposurecontrol.h b/tests/auto/unit/qmultimedia_common/mockcameraexposurecontrol.h
index 017615aa9..1b2372cf5 100644
--- a/tests/auto/unit/qmultimedia_common/mockcameraexposurecontrol.h
+++ b/tests/auto/unit/qmultimedia_common/mockcameraexposurecontrol.h
@@ -51,13 +51,22 @@ public:
m_shutterRanges << 0.001 << 0.01 << 0.1 << 1.0;
m_exposureRanges << -2.0 << 2.0;
- QList<QCameraExposure::ExposureMode> exposureModes;
- exposureModes << QCameraExposure::ExposureAuto << QCameraExposure::ExposureManual << QCameraExposure::ExposureBacklight
- << QCameraExposure::ExposureNight << QCameraExposure::ExposureSpotlight << QCameraExposure::ExposureSports
- << QCameraExposure::ExposureSnow << QCameraExposure:: ExposureLargeAperture << QCameraExposure::ExposureSmallAperture
- << QCameraExposure::ExposurePortrait << QCameraExposure::ExposureModeVendor << QCameraExposure::ExposureBeach;
+ const QCameraExposure::ExposureMode exposureModes[] = {
+ QCameraExposure::ExposureAuto,
+ QCameraExposure::ExposureManual,
+ QCameraExposure::ExposureBacklight,
+ QCameraExposure::ExposureNight,
+ QCameraExposure::ExposureSpotlight,
+ QCameraExposure::ExposureSports,
+ QCameraExposure::ExposureSnow,
+ QCameraExposure:: ExposureLargeAperture,
+ QCameraExposure::ExposureSmallAperture,
+ QCameraExposure::ExposurePortrait,
+ QCameraExposure::ExposureModeVendor,
+ QCameraExposure::ExposureBeach,
+ };
- foreach (QCameraExposure::ExposureMode mode, exposureModes)
+ for (QCameraExposure::ExposureMode mode : exposureModes)
m_exposureModes << QVariant::fromValue<QCameraExposure::ExposureMode>(mode);
m_meteringModes << QVariant::fromValue<QCameraExposure::MeteringMode>(QCameraExposure::MeteringMatrix)
diff --git a/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h b/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h
index 229f70ea8..cc56e9adb 100644
--- a/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h
+++ b/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h
@@ -82,7 +82,8 @@ public:
bool bMediaContentChanged = false;
int i = 0;
for (; i < playlistProvider()->mediaCount(); i++) {
- if (playlistProvider()->media(i).canonicalUrl().toString() != newProvider->media(i).canonicalUrl().toString()) {
+ if (playlistProvider()->media(i).request().url().toString()
+ != newProvider->media(i).request().url().toString()) {
bMediaContentChanged = true;
break;
}
diff --git a/tests/auto/unit/qpaintervideosurface/tst_qpaintervideosurface.cpp b/tests/auto/unit/qpaintervideosurface/tst_qpaintervideosurface.cpp
index 43dc52022..7ba631e58 100644
--- a/tests/auto/unit/qpaintervideosurface/tst_qpaintervideosurface.cpp
+++ b/tests/auto/unit/qpaintervideosurface/tst_qpaintervideosurface.cpp
@@ -730,16 +730,14 @@ void tst_QPainterVideoSurface::shaderSupportedFormat_data()
QTest::addColumn<bool>("supportedPixelFormat");
QTest::addColumn<bool>("supportedFormat");
- QList<QPair<QPainterVideoSurface::ShaderType, QByteArray> > types;
-
-
+ const QPair<QPainterVideoSurface::ShaderType, QByteArray> types[] = {
#if !defined(QT_OPENGL_ES)
- types << qMakePair(QPainterVideoSurface::FragmentProgramShader, QByteArray("ARBfp: "));
+ qMakePair(QPainterVideoSurface::FragmentProgramShader, QByteArray("ARBfp: ")),
#endif
- types << qMakePair(QPainterVideoSurface::GlslShader, QByteArray("GLSL: "));
+ qMakePair(QPainterVideoSurface::GlslShader, QByteArray("GLSL: ")),
+ };
- QPair<QPainterVideoSurface::ShaderType, QByteArray> type;
- foreach (type, types) {
+ for (const auto &type : types) {
QTest::newRow((type.second + "rgb32 640x480").constData())
<< type.first
<< QAbstractVideoBuffer::NoHandle
@@ -952,14 +950,14 @@ void tst_QPainterVideoSurface::shaderPresent_data()
QTest::addColumn<int>("bytesB");
QTest::addColumn<int>("bytesPerLineB");
- QList<QPair<QPainterVideoSurface::ShaderType, QByteArray> > types;
+ const QPair<QPainterVideoSurface::ShaderType, QByteArray> types[] = {
#if !defined(QT_OPENGL_ES)
- types << qMakePair(QPainterVideoSurface::FragmentProgramShader, QByteArray("ARBfp: "));
+ qMakePair(QPainterVideoSurface::FragmentProgramShader, QByteArray("ARBfp: ")),
#endif
- types << qMakePair(QPainterVideoSurface::GlslShader, QByteArray("GLSL: "));
+ qMakePair(QPainterVideoSurface::GlslShader, QByteArray("GLSL: ")),
+ };
- QPair<QPainterVideoSurface::ShaderType, QByteArray> type;
- foreach (type, types) {
+ for (const auto &type : types) {
QTest::newRow((type.second + "rgb32 -> argb32").constData())
<< type.first
<< QVideoFrame::Format_RGB32
diff --git a/tests/auto/unit/qvideosurfaceformat/tst_qvideosurfaceformat.cpp b/tests/auto/unit/qvideosurfaceformat/tst_qvideosurfaceformat.cpp
index 5412a838d..4fa754a45 100644
--- a/tests/auto/unit/qvideosurfaceformat/tst_qvideosurfaceformat.cpp
+++ b/tests/auto/unit/qvideosurfaceformat/tst_qvideosurfaceformat.cpp
@@ -321,7 +321,7 @@ void tst_QVideoSurfaceFormat::scanLineDirection()
{
QVideoSurfaceFormat format(QSize(16, 16), QVideoFrame::Format_RGB32);
- format.setProperty("scanLineDirection", qVariantFromValue(direction));
+ format.setProperty("scanLineDirection", QVariant::fromValue(direction));
QCOMPARE(format.scanLineDirection(), direction);
QCOMPARE(
@@ -363,7 +363,7 @@ void tst_QVideoSurfaceFormat::yCbCrColorSpaceEnum()
}
{
QVideoSurfaceFormat format(QSize(64, 64), QVideoFrame::Format_RGB32);
- format.setProperty("yCbCrColorSpace", qVariantFromValue(colorspace));
+ format.setProperty("yCbCrColorSpace", QVariant::fromValue(colorspace));
QCOMPARE(format.yCbCrColorSpace(), colorspace);
QCOMPARE(qvariant_cast<QVideoSurfaceFormat::YCbCrColorSpace>(format.property("yCbCrColorSpace")),