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/settingsdialog.cpp5
-rw-r--r--examples/multimedia/spectrum/app/waveform.cpp5
-rw-r--r--examples/multimediawidgets/player/playlistmodel.cpp2
-rw-r--r--src/gsttools/gsttools.pro9
-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.cpp14
-rw-r--r--src/gsttools/qgstutils_p.h2
-rw-r--r--src/gsttools/qgstvideorenderersink.cpp185
-rw-r--r--src/gsttools/qgstvideorenderersink_p.h14
-rw-r--r--src/imports/multimedia/qdeclarativeplaylist.cpp6
-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/camera/qcameraexposure.h4
-rw-r--r--src/multimedia/camera/qcamerafocus.h4
-rw-r--r--src/multimedia/camera/qcameraimageprocessing.h4
-rw-r--r--src/multimedia/configure.json16
-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/playback/qmediacontent.cpp18
-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/video/qvideoframe.cpp17
-rw-r--r--src/multimedia/video/qvideoframe.h1
-rw-r--r--src/multimedia/video/qvideosurfaceformat.cpp12
-rw-r--r--src/multimediawidgets/qvideowidget.cpp4
-rw-r--r--src/multimediawidgets/qvideowidget.h4
-rw-r--r--src/plugins/alsa/qalsaaudioinput.h6
-rw-r--r--src/plugins/alsa/qalsaaudiooutput.h6
-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.cpp4
-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.cpp2
-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.cpp95
-rw-r--r--src/plugins/directshow/camera/dscamerasession.h37
-rw-r--r--src/plugins/directshow/camera/dsvideodevicecontrol.cpp18
-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.cpp13
-rw-r--r--src/plugins/directshow/common/directshowbasefilter.h10
-rw-r--r--src/plugins/directshow/common/directshoweventloop.cpp11
-rw-r--r--src/plugins/directshow/common/directshoweventloop.h6
-rw-r--r--src/plugins/directshow/common/directshowglobal.h16
-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.cpp42
-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.cpp10
-rw-r--r--src/plugins/directshow/common/directshowsamplegrabber.h8
-rw-r--r--src/plugins/directshow/common/directshowutils.cpp4
-rw-r--r--src/plugins/directshow/common/directshowvideobuffer.cpp4
-rw-r--r--src/plugins/directshow/dsserviceplugin.cpp4
-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.cpp3
-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.cpp13
-rw-r--r--src/plugins/directshow/player/directshowplayercontrol.h30
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.cpp116
-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.cpp32
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.h22
-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.cpp4
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp4
-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.cpp2
-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.cpp1
-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.cpp11
-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/qmediaplayer/tst_qmediaplayer.cpp4
-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/qmultimedia_common/mockcameraexposurecontrol.h21
-rw-r--r--tests/auto/unit/qpaintervideosurface/tst_qpaintervideosurface.cpp22
-rw-r--r--tests/auto/unit/qvideosurfaceformat/tst_qvideosurfaceformat.cpp4
137 files changed, 842 insertions, 1198 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 1ed62c5ac..f6895bb09 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -1,3 +1,5 @@
load(qt_build_config)
-MODULE_VERSION = 5.13.1
+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/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/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/src/gsttools/gsttools.pro b/src/gsttools/gsttools.pro
index b13479ce7..fff039b3b 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
diff --git a/src/gsttools/qgstappsrc.cpp b/src/gsttools/qgstappsrc.cpp
index 823f95655..2d312862d 100644
--- a/src/gsttools/qgstappsrc.cpp
+++ b/src/gsttools/qgstappsrc.cpp
@@ -195,10 +195,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 73f43f0b9..03350a432 100644
--- a/src/gsttools/qgstreamerplayercontrol.cpp
+++ b/src/gsttools/qgstreamerplayercontrol.cpp
@@ -377,14 +377,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 15587f0ce..0e4fd2179 100644
--- a/src/gsttools/qgstreamerplayersession.cpp
+++ b/src/gsttools/qgstreamerplayersession.cpp
@@ -206,13 +206,26 @@ QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
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 bb85e1eb7..288a9c9c0 100644
--- a/src/gsttools/qgstreamervideowidget.cpp
+++ b/src/gsttools/qgstreamervideowidget.cpp
@@ -173,6 +173,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..ac8808115 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,9 +1307,7 @@ 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();
@@ -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 c3a7a5988..5f71d342c 100644
--- a/src/gsttools/qgstvideorenderersink.cpp
+++ b/src/gsttools/qgstvideorenderersink.cpp
@@ -54,12 +54,32 @@
#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
QGstDefaultVideoRenderer::QGstDefaultVideoRenderer()
: m_flushed(true)
+ , m_handleType(QAbstractVideoBuffer::NoHandle)
{
}
@@ -69,13 +89,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);
}
@@ -90,8 +130,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);
@@ -145,6 +198,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()
@@ -254,6 +311,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) {
@@ -460,6 +629,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;
@@ -603,4 +773,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 d2417a7c9..38854291a 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;
+ QAbstractVideoBuffer::HandleType m_handleType;
};
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;
GstCaps *m_startCaps;
GstBuffer *m_renderBuffer;
+#if QT_CONFIG(gstreamer_gl)
+ GstGLContext *m_gstGLDisplayContext = nullptr;
+#endif
bool m_notified;
bool m_stop;
@@ -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;
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/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/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.h b/src/multimedia/camera/qcamerafocus.h
index 31d056de9..024f504e9 100644
--- a/src/multimedia/camera/qcamerafocus.h
+++ b/src/multimedia/camera/qcamerafocus.h
@@ -152,11 +152,13 @@ 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)
diff --git a/src/multimedia/camera/qcameraimageprocessing.h b/src/multimedia/camera/qcameraimageprocessing.h
index 3eb7c8569..e4ad00ff8 100644
--- a/src/multimedia/camera/qcameraimageprocessing.h
+++ b/src/multimedia/camera/qcameraimageprocessing.h
@@ -116,11 +116,13 @@ 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)
diff --git a/src/multimedia/configure.json b/src/multimedia/configure.json
index 6d56af5ed..ca2839cea 100644
--- a/src/multimedia/configure.json
+++ b/src/multimedia/configure.json
@@ -95,6 +95,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" }
+ ]
+ },
"libresourceqt5": {
"label": "libresourceqt5",
"test": "resourcepolicy",
@@ -229,6 +240,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" ]
+ },
"gpu_vivante": {
"label": "Vivante GPU",
"condition": "features.gui && features.opengles2 && tests.gpu_vivante",
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 7cabfabf3..60097d917 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
+++ b/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
@@ -223,10 +223,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/playback/qmediacontent.cpp b/src/multimedia/playback/qmediacontent.cpp
index 95116d02f..f61511f1c 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
@@ -258,25 +257,34 @@ bool QMediaContent::isNull() const
return d.constData() == nullptr;
}
+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 81d525ea8..6ff3fc7df 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/video/qvideoframe.cpp b/src/multimedia/video/qvideoframe.cpp
index e94b838f9..dfc6ad3ee 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:
@@ -1058,6 +1066,7 @@ static VideoFrameConvertFunc qConvertFuncs[QVideoFrame::NPixelFormats] = {
/* Format_AYUV444_Premultiplied */ nullptr,
/* Format_YUV444 */ qt_convert_YUV444_to_ARGB32,
/* Format_YUV420P */ qt_convert_YUV420P_to_ARGB32,
+ /* Format_YUV422P */ nullptr,
/* Format_YV12 */ qt_convert_YV12_to_ARGB32,
/* Format_UYVY */ qt_convert_UYVY_to_ARGB32,
/* Format_YUYV */ qt_convert_YUYV_to_ARGB32,
@@ -1191,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 375f80dac..b0710cd27 100644
--- a/src/multimedia/video/qvideoframe.h
+++ b/src/multimedia/video/qvideoframe.h
@@ -86,6 +86,7 @@ public:
Format_AYUV444_Premultiplied,
Format_YUV444,
Format_YUV420P,
+ Format_YUV422P,
Format_YV12,
Format_UYVY,
Format_YUYV,
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 7d26a8534..991901097 100644
--- a/src/multimediawidgets/qvideowidget.cpp
+++ b/src/multimediawidgets/qvideowidget.cpp
@@ -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/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/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..a92a3373a 100644
--- a/src/plugins/android/src/wrappers/jni/androidcamera.cpp
+++ b/src/plugins/android/src/wrappers/jni/androidcamera.cpp
@@ -942,7 +942,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;
@@ -1541,7 +1541,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;
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 2309221c2..3b3f47a43 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 84786e9a9..3de8d3ac3 100644
--- a/src/plugins/common/evr/evrcustompresenter.cpp
+++ b/src/plugins/common/evr/evrcustompresenter.cpp
@@ -1029,7 +1029,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/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 a237811ae..27cdd84db 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, SIGNAL(statusChanged(QCamera::Status)),
this, SLOT(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;
@@ -331,10 +314,10 @@ void DSCameraSession::setImageProcessingParameter(
return;
}
- IAMVideoProcAmp *pVideoProcAmp = NULL;
+ IAMVideoProcAmp *pVideoProcAmp = nullptr;
HRESULT hr = m_graphBuilder->FindInterface(
- NULL,
- NULL,
+ nullptr,
+ nullptr,
m_sourceFilter,
IID_IAMVideoProcAmp,
reinterpret_cast<void**>(&pVideoProcAmp)
@@ -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)) {
@@ -702,12 +685,12 @@ bool DSCameraSession::createFilterGraph()
QString errorString;
HRESULT hr;
- IMoniker* pMoniker = NULL;
- ICreateDevEnum* pDevEnum = NULL;
- IEnumMoniker* pEnum = NULL;
+ IMoniker* pMoniker = nullptr;
+ ICreateDevEnum* pDevEnum = nullptr;
+ IEnumMoniker* pEnum = nullptr;
// Create the filter graph
- hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,
+ hr = CoCreateInstance(CLSID_FilterGraph,nullptr,CLSCTX_INPROC,
IID_IGraphBuilder, reinterpret_cast<void**>(&m_filterGraph));
if (FAILED(hr)) {
errorString = tr("Failed to create filter graph");
@@ -715,7 +698,7 @@ bool DSCameraSession::createFilterGraph()
}
// Create the capture graph builder
- hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC,
+ hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, nullptr, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2,
reinterpret_cast<void**>(&m_graphBuilder));
if (FAILED(hr)) {
@@ -731,7 +714,7 @@ bool DSCameraSession::createFilterGraph()
}
// Find the Capture device
- hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,
+ hr = CoCreateInstance(CLSID_SystemDeviceEnum, nullptr,
CLSCTX_INPROC_SERVER, IID_ICreateDevEnum,
reinterpret_cast<void**>(&pDevEnum));
if (SUCCEEDED(hr)) {
@@ -740,13 +723,13 @@ 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, NULL) == S_OK) {
+ while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) {
- BSTR strName = 0;
- hr = pMoniker->GetDisplayName(NULL, NULL, &strName);
+ BSTR strName = nullptr;
+ hr = pMoniker->GetDisplayName(nullptr, nullptr, &strName);
if (SUCCEEDED(hr)) {
QString output = QString::fromWCharArray(strName);
mallocInterface->Free(strName);
@@ -762,14 +745,14 @@ bool DSCameraSession::createFilterGraph()
pMoniker->Release();
}
mallocInterface->Release();
- if (NULL == m_sourceFilter)
+ if (nullptr == m_sourceFilter)
{
if (m_sourceDeviceName.contains(QLatin1String("default")))
{
pEnum->Reset();
// still have to loop to discard bind to storage failure case
- while (pEnum->Next(1, &pMoniker, NULL) == S_OK) {
- IPropertyBag *pPropBag = 0;
+ while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) {
+ 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");
}
}
}
@@ -813,7 +792,7 @@ bool DSCameraSession::createFilterGraph()
// Null renderer. Input connected to the sample grabber's output. Simply
// discard the samples it receives.
- hr = CoCreateInstance(cLSID_NullRenderer, NULL, CLSCTX_INPROC,
+ hr = CoCreateInstance(cLSID_NullRenderer, nullptr, CLSCTX_INPROC,
IID_IBaseFilter, (void**)&m_nullRendererFilter);
if (FAILED(hr)) {
errorString = tr("Failed to create null renderer");
@@ -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));
@@ -931,10 +910,10 @@ void DSCameraSession::updateImageProcessingParametersInfos()
return;
}
- IAMVideoProcAmp *pVideoProcAmp = NULL;
+ IAMVideoProcAmp *pVideoProcAmp = nullptr;
const HRESULT hr = m_graphBuilder->FindInterface(
- NULL,
- NULL,
+ nullptr,
+ nullptr,
m_sourceFilter,
IID_IAMVideoProcAmp,
reinterpret_cast<void**>(&pVideoProcAmp)
@@ -1041,10 +1020,10 @@ void DSCameraSession::disconnectGraph()
{
// To avoid increasing the memory usage every time the graph is re-connected it's
// important that all filters are released; also the ones added by the "Intelligent Connect".
- IEnumFilters *enumFilters = NULL;
+ IEnumFilters *enumFilters = nullptr;
if (SUCCEEDED(m_filterGraph->EnumFilters(&enumFilters))) {
- IBaseFilter *filter = NULL;
- while (enumFilters->Next(1, &filter, NULL) == S_OK) {
+ IBaseFilter *filter = nullptr;
+ while (enumFilters->Next(1, &filter, nullptr) == S_OK) {
m_filterGraph->RemoveFilter(filter);
enumFilters->Reset();
filter->Release();
@@ -1061,24 +1040,24 @@ static bool qt_frameRateRangeGreaterThan(const QCamera::FrameRateRange &r1, cons
void DSCameraSession::updateSourceCapabilities()
{
HRESULT hr;
- AM_MEDIA_TYPE *pmt = NULL;
- VIDEOINFOHEADER *pvi = NULL;
+ 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 2c1fab764..0f08154f1 100644
--- a/src/plugins/directshow/camera/dsvideodevicecontrol.cpp
+++ b/src/plugins/directshow/camera/dsvideodevicecontrol.cpp
@@ -129,10 +129,10 @@ void DSVideoDeviceControl::updateDevices()
deviceList->clear();
- ICreateDevEnum* pDevEnum = NULL;
- IEnumMoniker* pEnum = NULL;
+ ICreateDevEnum* pDevEnum = nullptr;
+ IEnumMoniker* pEnum = nullptr;
// Create the System device enumerator
- HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,
+ HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, nullptr,
CLSCTX_INPROC_SERVER, IID_ICreateDevEnum,
reinterpret_cast<void**>(&pDevEnum));
if (SUCCEEDED(hr)) {
@@ -142,12 +142,12 @@ void DSVideoDeviceControl::updateDevices()
if (S_OK == hr) {
pEnum->Reset();
// go through and find all video capture devices
- IMoniker* pMoniker = NULL;
- IMalloc *mallocInterface = 0;
+ IMoniker* pMoniker = nullptr;
+ IMalloc *mallocInterface = nullptr;
CoGetMalloc(1, (LPMALLOC*)&mallocInterface);
- while (pEnum->Next(1, &pMoniker, NULL) == S_OK) {
- BSTR strName = 0;
- hr = pMoniker->GetDisplayName(NULL, NULL, &strName);
+ while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) {
+ BSTR strName = nullptr;
+ hr = pMoniker->GetDisplayName(nullptr, nullptr, &strName);
if (SUCCEEDED(hr)) {
QString output(QString::fromWCharArray(strName));
mallocInterface->Free(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 2792dc3c6..dfea2460f 100644
--- a/src/plugins/directshow/common/directshowbasefilter.cpp
+++ b/src/plugins/directshow/common/directshowbasefilter.cpp
@@ -45,10 +45,6 @@ QT_BEGIN_NAMESPACE
DirectShowBaseFilter::DirectShowBaseFilter()
: m_mutex(QMutex::Recursive)
- , m_state(State_Stopped)
- , m_graph(NULL)
- , m_clock(NULL)
- , m_sink(NULL)
{
}
@@ -57,7 +53,7 @@ DirectShowBaseFilter::~DirectShowBaseFilter()
{
if (m_clock) {
m_clock->Release();
- m_clock = NULL;
+ m_clock = nullptr;
}
}
@@ -75,9 +71,8 @@ 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)
@@ -207,7 +202,7 @@ HRESULT DirectShowBaseFilter::FindPin(LPCWSTR Id, IPin **ppPin)
}
}
- *ppPin = 0;
+ *ppPin = nullptr;
return VFW_E_NOT_FOUND;
}
@@ -217,7 +212,7 @@ HRESULT DirectShowBaseFilter::JoinFilterGraph(IFilterGraph *pGraph, LPCWSTR pNam
m_filterName = QString::fromWCharArray(pName);
m_graph = pGraph;
- m_sink = NULL;
+ m_sink = nullptr;
if (m_graph) {
if (SUCCEEDED(m_graph->QueryInterface(IID_PPV_ARGS(&m_sink))))
diff --git a/src/plugins/directshow/common/directshowbasefilter.h b/src/plugins/directshow/common/directshowbasefilter.h
index fe78f96b2..ea5b8fafe 100644
--- a/src/plugins/directshow/common/directshowbasefilter.h
+++ b/src/plugins/directshow/common/directshowbasefilter.h
@@ -79,12 +79,12 @@ public:
protected:
QMutex m_mutex;
- FILTER_STATE m_state;
- IFilterGraph *m_graph;
- IReferenceClock *m_clock;
- IMediaEventSink *m_sink;
+ 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 fbc7b8cee..a38c26ef4 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,15 +61,13 @@ 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(0, 0, 0, 0))
- , m_waitHandle(::CreateEvent(0, 0, 0, 0))
+ , m_eventHandle(::CreateEvent(nullptr, 0, 0, nullptr))
+ , m_waitHandle(::CreateEvent(nullptr, 0, 0, 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 5f391710e..12693e4f1 100644
--- a/src/plugins/directshow/common/directshowglobal.h
+++ b/src/plugins/directshow/common/directshowglobal.h
@@ -53,35 +53,35 @@ 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,
- NULL,
+ 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,
- NULL,
+ nullptr,
CLSCTX_INPROC_SERVER,
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 10623a246..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(NULL)
- , 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 508a9b21d..390d410a4 100644
--- a/src/plugins/directshow/common/directshowpin.cpp
+++ b/src/plugins/directshow/common/directshowpin.cpp
@@ -52,7 +52,6 @@ DirectShowPin::DirectShowPin(DirectShowBaseFilter *filter, const QString &name,
, m_filter(filter)
, m_name(name)
, m_direction(direction)
- , m_peerPin(NULL)
{
}
@@ -76,11 +75,11 @@ HRESULT DirectShowPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
if (pd == m_direction)
return VFW_E_INVALID_DIRECTION;
- if (pmt != NULL && DirectShowMediaType::isPartiallySpecified(pmt)) {
+ if (pmt != nullptr && DirectShowMediaType::isPartiallySpecified(pmt)) {
// If the type is fully specified, use it
hr = tryConnect(pReceivePin, pmt);
} else {
- IEnumMediaTypes *enumMediaTypes = NULL;
+ IEnumMediaTypes *enumMediaTypes = nullptr;
// First, try the receiving pin's preferred types
if (SUCCEEDED(pReceivePin->EnumMediaTypes(&enumMediaTypes))) {
@@ -108,13 +107,13 @@ HRESULT DirectShowPin::tryMediaTypes(IPin *pin, const AM_MEDIA_TYPE *partialType
if (FAILED(hr))
return hr;
- AM_MEDIA_TYPE *mediaType = NULL;
+ AM_MEDIA_TYPE *mediaType = nullptr;
ULONG mediaCount = 0;
HRESULT hrFailure = VFW_E_NO_ACCEPTABLE_TYPES;
for (; enumMediaTypes->Next(1, &mediaType, &mediaCount) == S_OK;) {
- if (mediaType && (partialType == NULL || DirectShowMediaType::isCompatible(mediaType, partialType))) {
+ if (mediaType && (partialType == nullptr || DirectShowMediaType::isCompatible(mediaType, partialType))) {
hr = tryConnect(pin, mediaType);
if (FAILED(hr) && (hr != E_FAIL)
@@ -157,8 +156,8 @@ HRESULT DirectShowPin::tryConnect(IPin *pin, const AM_MEDIA_TYPE *type)
if (FAILED(hr)) {
connectionEnded();
m_peerPin->Release();
- m_peerPin = NULL;
- setMediaType(NULL);
+ m_peerPin = nullptr;
+ setMediaType(nullptr);
return hr;
}
@@ -197,8 +196,8 @@ HRESULT DirectShowPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *
if (FAILED(hr)) {
connectionEnded();
m_peerPin->Release();
- m_peerPin = NULL;
- setMediaType(NULL);
+ m_peerPin = nullptr;
+ setMediaType(nullptr);
return hr;
}
@@ -218,9 +217,9 @@ HRESULT DirectShowPin::Disconnect()
return hr;
m_peerPin->Release();
- m_peerPin = NULL;
+ m_peerPin = nullptr;
- setMediaType(NULL);
+ setMediaType(nullptr);
return S_OK;
}
@@ -235,7 +234,7 @@ HRESULT DirectShowPin::ConnectedTo(IPin **ppPin)
QMutexLocker locker(&m_mutex);
if (!m_peerPin) {
- *ppPin = 0;
+ *ppPin = nullptr;
return VFW_E_NOT_CONNECTED;
}
m_peerPin->AddRef();
@@ -380,8 +379,6 @@ HRESULT DirectShowPin::setActive(bool active)
DirectShowOutputPin::DirectShowOutputPin(DirectShowBaseFilter *filter, const QString &name)
: DirectShowPin(filter, name, PINDIR_OUTPUT)
- , m_allocator(NULL)
- , m_inputPin(NULL)
{
}
@@ -393,8 +390,8 @@ HRESULT DirectShowOutputPin::completeConnection(IPin *pin)
if (!pin)
return E_POINTER;
- Q_ASSERT(m_inputPin == NULL);
- Q_ASSERT(m_allocator == NULL);
+ Q_ASSERT(m_inputPin == nullptr);
+ Q_ASSERT(m_allocator == nullptr);
HRESULT hr = pin->QueryInterface(IID_PPV_ARGS(&m_inputPin));
if (FAILED(hr))
@@ -423,7 +420,7 @@ HRESULT DirectShowOutputPin::completeConnection(IPin *pin)
}
m_allocator->Release();
- m_allocator = NULL;
+ m_allocator = nullptr;
}
// Otherwise, allocate its own allocator
@@ -441,7 +438,7 @@ HRESULT DirectShowOutputPin::completeConnection(IPin *pin)
}
m_allocator->Release();
- m_allocator = NULL;
+ m_allocator = nullptr;
}
return hr;
@@ -455,12 +452,12 @@ HRESULT DirectShowOutputPin::connectionEnded()
return hr;
m_allocator->Release();
- m_allocator = NULL;
+ m_allocator = nullptr;
}
if (m_inputPin) {
m_inputPin->Release();
- m_inputPin = NULL;
+ m_inputPin = nullptr;
}
return S_OK;
@@ -485,9 +482,6 @@ HRESULT DirectShowOutputPin::EndOfStream()
DirectShowInputPin::DirectShowInputPin(DirectShowBaseFilter *filter, const QString &name)
: DirectShowPin(filter, name, PINDIR_INPUT)
- , m_allocator(NULL)
- , m_flushing(false)
- , m_inErrorState(false)
{
ZeroMemory(&m_sampleProperties, sizeof(m_sampleProperties));
}
@@ -502,7 +496,7 @@ HRESULT DirectShowInputPin::connectionEnded()
return hr;
m_allocator->Release();
- m_allocator = NULL;
+ m_allocator = nullptr;
}
return S_OK;
diff --git a/src/plugins/directshow/common/directshowpin.h b/src/plugins/directshow/common/directshowpin.h
index 5e513d002..bb5a07ad7 100644
--- a/src/plugins/directshow/common/directshowpin.h
+++ b/src/plugins/directshow/common/directshowpin.h
@@ -56,7 +56,7 @@ public:
virtual ~DirectShowPin();
QString name() const { return m_name; }
- bool isConnected() const { return m_peerPin != NULL; }
+ bool isConnected() const { return m_peerPin != nullptr; }
virtual bool isMediaTypeSupported(const AM_MEDIA_TYPE *type) = 0;
virtual QList<DirectShowMediaType> supportedMediaTypes();
@@ -102,7 +102,7 @@ protected:
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 20fa93d6e..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(NULL)
- , 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 fec59b538..a9e74f9db 100644
--- a/src/plugins/directshow/common/directshowsamplegrabber.cpp
+++ b/src/plugins/directshow/common/directshowsamplegrabber.cpp
@@ -75,14 +75,15 @@ public:
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) override
{
- if (NULL == ppvObject)
+ if (nullptr == ppvObject)
return E_POINTER;
if (riid == IID_IUnknown /*__uuidof(IUnknown) */ ) {
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,12 +116,9 @@ 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, NULL, CLSCTX_INPROC, iID_ISampleGrabber, reinterpret_cast<void **>(&m_sampleGrabber));
+ HRESULT hr = CoCreateInstance(cLSID_SampleGrabber, nullptr, CLSCTX_INPROC, iID_ISampleGrabber, reinterpret_cast<void **>(&m_sampleGrabber));
if (FAILED(hr)) {
qCWarning(qtDirectShowPlugin, "Failed to create sample grabber");
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 d1c1d42ab..21b86926f 100644
--- a/src/plugins/directshow/common/directshowutils.cpp
+++ b/src/plugins/directshow/common/directshowutils.cpp
@@ -117,7 +117,7 @@ bool DirectShowUtils::getPin(IBaseFilter *filter, PIN_DIRECTION pinDirection, IP
enumPins->Reset();
IPin *nextPin = nullptr;
- while (enumPins->Next(1, &nextPin, NULL) == S_OK) {
+ while (enumPins->Next(1, &nextPin, nullptr) == S_OK) {
const ScopedSafeRelease<IPin> releasePin { &nextPin };
PIN_DIRECTION currentPinDir;
*hrOut = nextPin->QueryDirection(&currentPinDir);
@@ -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 727a11b55..e22bfe93b 100644
--- a/src/plugins/directshow/dsserviceplugin.cpp
+++ b/src/plugins/directshow/dsserviceplugin.cpp
@@ -78,7 +78,7 @@ static int g_refCount = 0;
void addRefCount()
{
if (++g_refCount == 1)
- CoInitialize(NULL);
+ CoInitialize(nullptr);
}
void releaseRefCount()
@@ -99,7 +99,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 fc1058d57..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(NULL)
{
}
@@ -59,7 +58,7 @@ IBaseFilter *DirectShowEvrVideoWindowControl::filter()
m_evrFilter = com_new<IBaseFilter>(clsid_EnhancedVideoRenderer);
if (!setEvr(m_evrFilter)) {
m_evrFilter->Release();
- m_evrFilter = NULL;
+ 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 3482cee02..b903038ea 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 7de0a686f..7e1413b56 100644
--- a/src/plugins/directshow/player/directshowplayercontrol.cpp
+++ b/src/plugins/directshow/player/directshowplayercontrol.cpp
@@ -50,19 +50,6 @@
DirectShowPlayerControl::DirectShowPlayerControl(DirectShowPlayerService *service, QObject *parent)
: QMediaPlayerControl(parent)
, m_service(service)
- , m_audio(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 5f7c65ad0..56a428028 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(0, 0, 0, 0))
- , 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_taskHandle(::CreateEvent(nullptr, 0, 0, nullptr))
{
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;
m_errorString = QString();
@@ -354,7 +330,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")) {
@@ -367,14 +343,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();
@@ -509,18 +485,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)))
@@ -528,7 +504,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;
@@ -680,13 +656,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();
@@ -824,17 +800,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;
@@ -867,8 +843,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;
@@ -1180,7 +1156,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) {
@@ -1206,7 +1182,7 @@ int DirectShowPlayerService::bufferStatus() const
m_source, IID_IWMReaderAdvanced2)) {
DWORD percentage = 0;
- reader->GetBufferProgress(&percentage, 0);
+ reader->GetBufferProgress(&percentage, nullptr);
reader->Release();
return percentage;
@@ -1379,7 +1355,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();
@@ -1651,13 +1627,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;
@@ -1673,15 +1649,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 88b5a51eb..19be82141 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;
@@ -103,9 +98,9 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
m_evrPresenter = new EVRCustomPresenter(m_surface);
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 b2abeeaed..dcbcadb4b 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;
@@ -71,10 +71,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 74d59231c..8dd18dc1b 100644
--- a/src/plugins/directshow/player/videosurfacefilter.cpp
+++ b/src/plugins/directshow/player/videosurfacefilter.cpp
@@ -222,20 +222,10 @@ HRESULT VideoSurfaceInputPin::Receive(IMediaSample *pMediaSample)
VideoSurfaceFilter::VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectShowEventLoop *loop, QObject *parent)
: QObject(parent)
, m_loop(loop)
- , m_pin(NULL)
, m_surface(surface)
- , m_bytesPerLine(0)
- , m_surfaceStarted(false)
, m_renderMutex(QMutex::Recursive)
- , m_running(false)
- , m_pendingSample(NULL)
- , m_pendingSampleEndTime(0)
- , m_renderEvent(CreateEvent(NULL, FALSE, FALSE, NULL))
- , m_flushEvent(CreateEvent(NULL, TRUE, FALSE, NULL))
- , m_adviseCookie(0)
- , m_EOS(false)
- , m_EOSDelivered(false)
- , m_EOSTimer(0)
+ , m_renderEvent(CreateEvent(nullptr, FALSE, FALSE, nullptr))
+ , m_flushEvent(CreateEvent(nullptr, TRUE, FALSE, nullptr))
{
supportedFormatsChanged();
connect(surface, &QAbstractVideoSurface::supportedFormatsChanged,
@@ -616,7 +606,7 @@ void VideoSurfaceFilter::clearPendingSample()
if (m_pendingSample) {
qCDebug(qLcRenderFilter, "clearPendingSample");
m_pendingSample->Release();
- m_pendingSample = NULL;
+ m_pendingSample = nullptr;
}
}
@@ -713,11 +703,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 +730,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()
diff --git a/src/plugins/directshow/player/videosurfacefilter.h b/src/plugins/directshow/player/videosurfacefilter.h
index 56791f270..f11d015f1 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;
+ 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 40294214a..361a2369a 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
@@ -214,9 +214,7 @@ GstElement *QGstreamerAudioEncode::createEncoder()
}
QMap<QString, QVariant> options = m_options.value(codec);
- QMapIterator<QString,QVariant> it(options);
- while (it.hasNext()) {
- it.next();
+ for (auto it = options.cbegin(), end = options.cend(); it != end; ++it) {
QString option = it.key();
QVariant value = it.value();
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
index 6b4dbe4b7..674e1034e 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
@@ -204,9 +204,7 @@ GstElement *QGstreamerVideoEncode::createEncoder()
}
QMap<QString,QVariant> options = m_options.value(codec);
- QMapIterator<QString,QVariant> it(options);
- while (it.hasNext()) {
- it.next();
+ for (auto it = options.cbegin(), end = options.cend(); it != end; ++it) {
QString option = it.key();
QVariant value = it.value();
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 0712f6e6c..a28968145 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>
@@ -88,13 +84,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 7991f435b..374ff2831 100644
--- a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
+++ b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
@@ -759,7 +759,7 @@ 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();
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..318e4cef5 100644
--- a/src/qtmultimediaquicktools/qsgvideonode_texture.cpp
+++ b/src/qtmultimediaquicktools/qsgvideonode_texture.cpp
@@ -58,6 +58,7 @@ QList<QVideoFrame::PixelFormat> QSGVideoNodeFactory_Texture::supportedPixelForma
pixelFormats.append(QVideoFrame::Format_ARGB32);
pixelFormats.append(QVideoFrame::Format_BGR32);
pixelFormats.append(QVideoFrame::Format_BGRA32);
+ pixelFormats.append(QVideoFrame::Format_ABGR32);
}
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 bffdc6ec2..7c8d07647 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 b8d501c12..b0497be2f 100644
--- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
+++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
@@ -113,7 +113,8 @@ 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);
}
}
@@ -121,14 +122,14 @@ void tst_QCameraBackend::testDeviceDescription()
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);
@@ -624,9 +625,9 @@ void tst_QCameraBackend::testVideoRecording_data()
{
QTest::addColumn<QByteArray>("device");
- QList<QByteArray> devices = QCamera::availableDevices();
+ const QList<QByteArray> devices = QCamera::availableDevices();
- foreach (const QByteArray &device, devices) {
+ for (const QByteArray &device : devices) {
QTest::newRow(QCamera::deviceDescription(device).toUtf8())
<< device;
}
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 25430a189..a61352a18 100644
--- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
+++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
@@ -152,7 +152,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;
@@ -1348,6 +1348,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/qmediaplayer/tst_qmediaplayer.cpp b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
index 94d297ad0..871ff3cc7 100644
--- a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
+++ b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
@@ -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/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/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/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")),