summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf1
-rw-r--r--dist/changes-5.12.535
-rw-r--r--dist/changes-5.13.146
-rw-r--r--examples/multimedia/spectrum/app/mainwidget.cpp2
-rw-r--r--examples/multimediawidgets/customvideosurface/customvideoitem/videoplayer.cpp2
-rw-r--r--examples/multimediawidgets/customvideosurface/customvideowidget/videoplayer.cpp2
-rw-r--r--examples/multimediawidgets/player/player.cpp2
-rw-r--r--examples/multimediawidgets/player/playercontrols.cpp2
-rw-r--r--examples/multimediawidgets/videographicsitem/videoplayer.cpp2
-rw-r--r--examples/multimediawidgets/videowidget/videoplayer.cpp2
-rw-r--r--src/gsttools/qgstappsrc.cpp10
-rw-r--r--src/gsttools/qgstappsrc_p.h18
-rw-r--r--src/gsttools/qgstcodecsinfo.cpp55
-rw-r--r--src/gsttools/qgstcodecsinfo_p.h4
-rw-r--r--src/gsttools/qgstreamerbufferprobe.cpp8
-rw-r--r--src/gsttools/qgstreamerbufferprobe_p.h6
-rw-r--r--src/gsttools/qgstreamerbushelper_p.h2
-rw-r--r--src/gsttools/qgstreamermessage.cpp6
-rw-r--r--src/gsttools/qgstreamermessage_p.h4
-rw-r--r--src/gsttools/qgstreamerplayercontrol.cpp13
-rw-r--r--src/gsttools/qgstreamerplayercontrol_p.h18
-rw-r--r--src/gsttools/qgstreamerplayersession.cpp40
-rw-r--r--src/gsttools/qgstreamerplayersession_p.h68
-rw-r--r--src/gsttools/qgstreamervideoinputdevicecontrol.cpp5
-rw-r--r--src/gsttools/qgstreamervideoinputdevicecontrol_p.h4
-rw-r--r--src/gsttools/qgstreamervideoprobecontrol.cpp2
-rw-r--r--src/gsttools/qgstreamervideoprobecontrol_p.h6
-rw-r--r--src/gsttools/qgstreamervideowidget.cpp4
-rw-r--r--src/gsttools/qgstreamervideowidget_p.h8
-rw-r--r--src/gsttools/qgstreamervideowindow.cpp3
-rw-r--r--src/gsttools/qgstreamervideowindow_p.h6
-rw-r--r--src/gsttools/qgstvideobuffer.cpp2
-rw-r--r--src/gsttools/qgstvideobuffer_p.h6
-rw-r--r--src/gsttools/qgstvideorenderersink.cpp34
-rw-r--r--src/gsttools/qgstvideorenderersink_p.h24
-rw-r--r--src/gsttools/qvideosurfacegstsink.cpp4
-rw-r--r--src/gsttools/qvideosurfacegstsink_p.h18
-rw-r--r--src/imports/audioengine/qdeclarative_attenuationmodel_p.cpp2
-rw-r--r--src/imports/audioengine/qdeclarative_audiocategory_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_audioengine_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_audiolistener_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_audiosample_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_playvariation_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_sound_p.cpp1
-rw-r--r--src/imports/audioengine/qdeclarative_soundinstance_p.cpp1
-rw-r--r--src/imports/multimedia/qdeclarativeaudio.cpp10
-rw-r--r--src/multimedia/audio/qaudiodecoder.cpp2
-rw-r--r--src/multimedia/audio/qaudioprobe.cpp13
-rw-r--r--src/multimedia/audio/qsamplecache_p.cpp18
-rw-r--r--src/multimedia/audio/qsamplecache_p.h2
-rw-r--r--src/multimedia/camera/qcamera.cpp2
-rw-r--r--src/multimedia/camera/qcameraexposure.cpp3
-rw-r--r--src/multimedia/camera/qcamerafocus.cpp10
-rw-r--r--src/multimedia/camera/qcamerafocus.h4
-rw-r--r--src/multimedia/camera/qcameraimagecapture.cpp3
-rw-r--r--src/multimedia/camera/qcameraimageprocessing.cpp10
-rw-r--r--src/multimedia/camera/qcameraimageprocessing.h4
-rw-r--r--src/multimedia/controls/qaudiodecodercontrol.cpp2
-rw-r--r--src/multimedia/controls/qaudioencodersettingscontrol.cpp2
-rw-r--r--src/multimedia/controls/qaudioinputselectorcontrol.cpp2
-rw-r--r--src/multimedia/controls/qaudiooutputselectorcontrol.cpp2
-rw-r--r--src/multimedia/controls/qaudiorolecontrol.cpp2
-rw-r--r--src/multimedia/controls/qcameracapturebufferformatcontrol.cpp2
-rw-r--r--src/multimedia/controls/qcameracapturedestinationcontrol.cpp2
-rw-r--r--src/multimedia/controls/qcameracontrol.cpp3
-rw-r--r--src/multimedia/controls/qcameraexposurecontrol.cpp3
-rw-r--r--src/multimedia/controls/qcameraflashcontrol.cpp2
-rw-r--r--src/multimedia/controls/qcamerafocuscontrol.cpp2
-rw-r--r--src/multimedia/controls/qcameraimagecapturecontrol.cpp2
-rw-r--r--src/multimedia/controls/qcameraimageprocessingcontrol.cpp2
-rw-r--r--src/multimedia/controls/qcamerainfocontrol.cpp4
-rw-r--r--src/multimedia/controls/qcameralockscontrol.cpp3
-rw-r--r--src/multimedia/controls/qcameraviewfindersettingscontrol.cpp2
-rw-r--r--src/multimedia/controls/qcamerazoomcontrol.cpp2
-rw-r--r--src/multimedia/controls/qcustomaudiorolecontrol.cpp3
-rw-r--r--src/multimedia/controls/qimageencodercontrol.cpp2
-rw-r--r--src/multimedia/controls/qmediaaudioprobecontrol.cpp4
-rw-r--r--src/multimedia/controls/qmediaavailabilitycontrol.cpp3
-rw-r--r--src/multimedia/controls/qmediacontainercontrol.cpp2
-rw-r--r--src/multimedia/controls/qmedianetworkaccesscontrol.cpp3
-rw-r--r--src/multimedia/controls/qmediaplayercontrol.cpp2
-rw-r--r--src/multimedia/controls/qmediaplaylistcontrol.cpp2
-rw-r--r--src/multimedia/controls/qmediaplaylistsourcecontrol.cpp2
-rw-r--r--src/multimedia/controls/qmediarecordercontrol.cpp2
-rw-r--r--src/multimedia/controls/qmediastreamscontrol.cpp2
-rw-r--r--src/multimedia/controls/qmediavideoprobecontrol.cpp4
-rw-r--r--src/multimedia/controls/qmetadatareadercontrol.cpp2
-rw-r--r--src/multimedia/controls/qmetadatawritercontrol.cpp2
-rw-r--r--src/multimedia/controls/qradiodatacontrol.cpp2
-rw-r--r--src/multimedia/controls/qradiotunercontrol.cpp2
-rw-r--r--src/multimedia/controls/qvideodeviceselectorcontrol.cpp2
-rw-r--r--src/multimedia/controls/qvideoencodersettingscontrol.cpp2
-rw-r--r--src/multimedia/controls/qvideorenderercontrol.cpp2
-rw-r--r--src/multimedia/controls/qvideowindowcontrol.cpp2
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/images/qt-logo.pngbin0 -> 1301 bytes
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/media.cpp31
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/multimedia-snippets.pro3
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/qaudioprobe.cpp51
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/qtvideosink.qml61
-rw-r--r--src/multimedia/playback/qmediacontent.cpp6
-rw-r--r--src/multimedia/playback/qmedianetworkplaylistprovider.cpp3
-rw-r--r--src/multimedia/playback/qmediaplayer.cpp36
-rw-r--r--src/multimedia/playback/qmediaplaylist.cpp4
-rw-r--r--src/multimedia/playback/qmediaplaylistioplugin.cpp2
-rw-r--r--src/multimedia/playback/qmediaplaylistnavigator.cpp2
-rw-r--r--src/multimedia/playback/qmediaplaylistprovider.cpp2
-rw-r--r--src/multimedia/qmediacontrol.cpp2
-rw-r--r--src/multimedia/qmediaobject.cpp19
-rw-r--r--src/multimedia/qmediaobject.h4
-rw-r--r--src/multimedia/qmediaobject_p.h7
-rw-r--r--src/multimedia/qmediaservice.cpp12
-rw-r--r--src/multimedia/qmediaservice.h4
-rw-r--r--src/multimedia/qmediaservice_p.h9
-rw-r--r--src/multimedia/qmediaserviceprovider.cpp12
-rw-r--r--src/multimedia/qmediatimerange.cpp2
-rw-r--r--src/multimedia/qmediatimerange.h4
-rw-r--r--src/multimedia/radio/qradiodata.cpp2
-rw-r--r--src/multimedia/radio/qradiotuner.cpp2
-rw-r--r--src/multimedia/recording/qaudiorecorder.cpp4
-rw-r--r--src/multimedia/recording/qmediarecorder.cpp2
-rw-r--r--src/multimedia/video/qvideoframe.h2
-rw-r--r--src/multimediawidgets/qgraphicsvideoitem.cpp3
-rw-r--r--src/multimediawidgets/qpaintervideosurface.cpp3
-rw-r--r--src/multimediawidgets/qpaintervideosurface_p.h2
-rw-r--r--src/multimediawidgets/qvideowidget.cpp6
-rw-r--r--src/multimediawidgets/qvideowidgetcontrol.cpp2
-rw-r--r--src/plugins/android/src/common/qandroidvideooutput.cpp2
-rw-r--r--src/plugins/android/src/wrappers/jni/androidcamera.cpp91
-rw-r--r--src/plugins/avfoundation/camera/avfcamerautility.mm13
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm9
-rw-r--r--src/plugins/common/evr/evrcustompresenter.cpp45
-rw-r--r--src/plugins/common/evr/evrcustompresenter.h6
-rw-r--r--src/plugins/common/evr/evrd3dpresentengine.cpp11
-rw-r--r--src/plugins/directshow/camera/directshowcameraglobal.h2
-rw-r--r--src/plugins/directshow/camera/dscamerasession.cpp6
-rw-r--r--src/plugins/directshow/camera/dsimagecapturecontrol.cpp20
-rw-r--r--src/plugins/directshow/common/directshowbasefilter.cpp21
-rw-r--r--src/plugins/directshow/common/directshowbasefilter.h2
-rw-r--r--src/plugins/directshow/common/directshoweventloop.cpp4
-rw-r--r--src/plugins/directshow/common/directshowpin.cpp23
-rw-r--r--src/plugins/directshow/common/directshowpin.h2
-rw-r--r--src/plugins/directshow/common/directshowutils.cpp13
-rw-r--r--src/plugins/directshow/common/directshowutils.h4
-rw-r--r--src/plugins/directshow/dsserviceplugin.cpp32
-rw-r--r--src/plugins/directshow/player/directshowioreader.cpp2
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.cpp12
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.cpp1
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.h1
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.cpp35
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.h2
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinv4limageprocessing.cpp13
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp12
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h2
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp38
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h3
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp11
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h1
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreameravailabilitycontrol.h2
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h2
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp13
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h24
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerstreamscontrol.h2
-rw-r--r--src/plugins/winrt/qwinrtmediaplayercontrol.cpp17
-rw-r--r--src/qtmultimediaquicktools/qdeclarativevideooutput.cpp9
-rw-r--r--src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp4
-rw-r--r--tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp17
-rw-r--r--tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp6
-rw-r--r--tests/auto/unit/qmediacontent/tst_qmediacontent.cpp34
-rw-r--r--tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp2
-rw-r--r--tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp30
-rw-r--r--tests/auto/unit/qmediaresource/tst_qmediaresource.cpp10
-rw-r--r--tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.pro2
-rw-r--r--tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.pro2
-rw-r--r--tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.pro2
-rw-r--r--tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.pro2
-rw-r--r--tests/auto/unit/qmediaserviceprovider/mockserviceplugin5/mockserviceplugin5.pro2
-rw-r--r--tests/auto/unit/qmediaserviceprovider/test/test.pro2
-rw-r--r--tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h3
178 files changed, 929 insertions, 651 deletions
diff --git a/.qmake.conf b/.qmake.conf
index e139c9b87..85f18db7a 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -3,4 +3,3 @@ load(qt_build_config)
DEFINES += QT_NO_FOREACH QT_NO_JAVA_STYLE_ITERATORS QT_NO_LINKED_LIST
MODULE_VERSION = 6.0.0
-
diff --git a/dist/changes-5.12.5 b/dist/changes-5.12.5
new file mode 100644
index 000000000..34cf7eed4
--- /dev/null
+++ b/dist/changes-5.12.5
@@ -0,0 +1,35 @@
+Qt 5.12.5 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.12.0 through 5.12.4.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.12 series is binary compatible with the 5.11.x series.
+Applications compiled for 5.11 will continue to run with 5.12.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+ - This release contains only minor code improvements.
+
+****************************************************************************
+* Platform Specific Changes *
+****************************************************************************
+
+- GStreamer:
+ * Added "audio/x-raw" codec to use "audio/x-wav" container in QAudioRecorder.
+ * Fixed bug where a player, without its own video surface, would end up using
+ another players video surface.
+ * [QTBUG-65399] Added fix to prevent seeking to the beginning when playback
+ is started.
+
+- AVFoundation:
+ * [QTBUG-77270] Added fix to avoid showing black frames when the current
+ OpenGL context changes.
diff --git a/dist/changes-5.13.1 b/dist/changes-5.13.1
new file mode 100644
index 000000000..5167a49b8
--- /dev/null
+++ b/dist/changes-5.13.1
@@ -0,0 +1,46 @@
+Qt 5.13.1 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.13.0.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+https://doc.qt.io/qt-5/index.html
+
+The Qt version 5.13 series is binary compatible with the 5.12.x series.
+Applications compiled for 5.12 will continue to run with 5.13.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+https://bugreports.qt.io/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* Qt 5.13.1 Changes *
+****************************************************************************
+
+- [QTBUG-76090] Fixed crash when an app is destroyed before QSample::load finishes.
+- [QTBUG-76205] Added fix to only update the VideoOutput's geometry when the surface is active.
+
+****************************************************************************
+* Platform Specific Changes *
+****************************************************************************
+
+ - DirectShow:
+ * [QTBUG-65574] Added error when attempting to play a video without a video output set.
+ * [QTBUG-65574] Added fix to prevent the same media content from being set twice.
+ * [QTBUG-65574] Returns QMediaPlayer::NoMedia if an empty url is provided.
+ * [QTBUG-75959] Mapped MEDIASUBTYPE_RGB24 to QVideoFrame::Format_BGR24.
+ * [QTBUG-70655] Fixed build issues with newer MinGW versions.
+ * Fixed memory leak introduced by using GetFrameRateList.
+
+ - AVFoundation:
+ * [QTBUG-75287] QMediaRecorder will now only send state changes when the state actually changes.
+
+ - GStreamer:
+ * [QTBUG-76236] Now busy cameras are also returned in availableCameras.
+ * Fixed a crash when the bus helper is destroyed but is still receiving events.
+ * GstUDPSrc caps can now be passed via the url's query item.
+ * Added implementation for fetching audio/video codecs by container and vice versa.
diff --git a/examples/multimedia/spectrum/app/mainwidget.cpp b/examples/multimedia/spectrum/app/mainwidget.cpp
index 945313f32..235608a05 100644
--- a/examples/multimedia/spectrum/app/mainwidget.cpp
+++ b/examples/multimedia/spectrum/app/mainwidget.cpp
@@ -265,7 +265,7 @@ void MainWidget::createUi()
QScopedPointer<QHBoxLayout> waveformLayout(new QHBoxLayout);
waveformLayout->addWidget(m_progressBar);
m_progressBar->setMinimumHeight(m_waveform->minimumHeight());
- waveformLayout->setMargin(0);
+ waveformLayout->setContentsMargins(0, 0, 0, 0);
m_waveform->setLayout(waveformLayout.data());
waveformLayout.take();
windowLayout->addWidget(m_waveform);
diff --git a/examples/multimediawidgets/customvideosurface/customvideoitem/videoplayer.cpp b/examples/multimediawidgets/customvideosurface/customvideoitem/videoplayer.cpp
index 60b93a116..1fdd1c7f7 100644
--- a/examples/multimediawidgets/customvideosurface/customvideoitem/videoplayer.cpp
+++ b/examples/multimediawidgets/customvideosurface/customvideoitem/videoplayer.cpp
@@ -101,7 +101,7 @@ VideoPlayer::VideoPlayer(QWidget *parent)
this, &VideoPlayer::setPosition);
QBoxLayout *controlLayout = new QHBoxLayout;
- controlLayout->setMargin(0);
+ controlLayout->setContentsMargins(0, 0, 0, 0);
controlLayout->addWidget(openButton);
controlLayout->addWidget(playButton);
controlLayout->addWidget(positionSlider);
diff --git a/examples/multimediawidgets/customvideosurface/customvideowidget/videoplayer.cpp b/examples/multimediawidgets/customvideosurface/customvideowidget/videoplayer.cpp
index 7730f8140..5c1ca4221 100644
--- a/examples/multimediawidgets/customvideosurface/customvideowidget/videoplayer.cpp
+++ b/examples/multimediawidgets/customvideosurface/customvideowidget/videoplayer.cpp
@@ -81,7 +81,7 @@ VideoPlayer::VideoPlayer(QWidget *parent)
this, &VideoPlayer::setPosition);
QBoxLayout *controlLayout = new QHBoxLayout;
- controlLayout->setMargin(0);
+ controlLayout->setContentsMargins(0, 0, 0, 0);
controlLayout->addWidget(openButton);
controlLayout->addWidget(playButton);
controlLayout->addWidget(positionSlider);
diff --git a/examples/multimediawidgets/player/player.cpp b/examples/multimediawidgets/player/player.cpp
index 89246e65c..04da42587 100644
--- a/examples/multimediawidgets/player/player.cpp
+++ b/examples/multimediawidgets/player/player.cpp
@@ -158,7 +158,7 @@ Player::Player(QWidget *parent)
displayLayout->addWidget(m_playlistView);
QBoxLayout *controlLayout = new QHBoxLayout;
- controlLayout->setMargin(0);
+ controlLayout->setContentsMargins(0, 0, 0, 0);
controlLayout->addWidget(openButton);
controlLayout->addStretch(1);
controlLayout->addWidget(controls);
diff --git a/examples/multimediawidgets/player/playercontrols.cpp b/examples/multimediawidgets/player/playercontrols.cpp
index 2a1869b93..3c06c01c6 100644
--- a/examples/multimediawidgets/player/playercontrols.cpp
+++ b/examples/multimediawidgets/player/playercontrols.cpp
@@ -100,7 +100,7 @@ PlayerControls::PlayerControls(QWidget *parent)
connect(m_rateBox, QOverload<int>::of(&QComboBox::activated), this, &PlayerControls::updateRate);
QBoxLayout *layout = new QHBoxLayout;
- layout->setMargin(0);
+ layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(m_stopButton);
layout->addWidget(m_previousButton);
layout->addWidget(m_playButton);
diff --git a/examples/multimediawidgets/videographicsitem/videoplayer.cpp b/examples/multimediawidgets/videographicsitem/videoplayer.cpp
index 995c86d3e..39c113fe5 100644
--- a/examples/multimediawidgets/videographicsitem/videoplayer.cpp
+++ b/examples/multimediawidgets/videographicsitem/videoplayer.cpp
@@ -90,7 +90,7 @@ VideoPlayer::VideoPlayer(QWidget *parent)
this, &VideoPlayer::setPosition);
QBoxLayout *controlLayout = new QHBoxLayout;
- controlLayout->setMargin(0);
+ controlLayout->setContentsMargins(0, 0, 0, 0);
controlLayout->addWidget(openButton);
controlLayout->addWidget(m_playButton);
controlLayout->addWidget(m_positionSlider);
diff --git a/examples/multimediawidgets/videowidget/videoplayer.cpp b/examples/multimediawidgets/videowidget/videoplayer.cpp
index e7ad670fa..1db269503 100644
--- a/examples/multimediawidgets/videowidget/videoplayer.cpp
+++ b/examples/multimediawidgets/videowidget/videoplayer.cpp
@@ -79,7 +79,7 @@ VideoPlayer::VideoPlayer(QWidget *parent)
m_errorLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
QBoxLayout *controlLayout = new QHBoxLayout;
- controlLayout->setMargin(0);
+ controlLayout->setContentsMargins(0, 0, 0, 0);
controlLayout->addWidget(openButton);
controlLayout->addWidget(m_playButton);
controlLayout->addWidget(m_positionSlider);
diff --git a/src/gsttools/qgstappsrc.cpp b/src/gsttools/qgstappsrc.cpp
index 2d312862d..d5c44ec08 100644
--- a/src/gsttools/qgstappsrc.cpp
+++ b/src/gsttools/qgstappsrc.cpp
@@ -42,15 +42,7 @@
#include "qgstappsrc_p.h"
QGstAppSrc::QGstAppSrc(QObject *parent)
- :QObject(parent)
- ,m_stream(0)
- ,m_appSrc(0)
- ,m_sequential(false)
- ,m_maxBytes(0)
- ,m_dataRequestSize(~0)
- ,m_dataRequested(false)
- ,m_enoughData(false)
- ,m_forceData(false)
+ : QObject(parent)
{
m_callbacks.need_data = &QGstAppSrc::on_need_data;
m_callbacks.enough_data = &QGstAppSrc::on_enough_data;
diff --git a/src/gsttools/qgstappsrc_p.h b/src/gsttools/qgstappsrc_p.h
index c7e87037d..c1c8cdabe 100644
--- a/src/gsttools/qgstappsrc_p.h
+++ b/src/gsttools/qgstappsrc_p.h
@@ -104,16 +104,16 @@ private:
void sendEOS();
- QIODevice *m_stream;
- GstAppSrc *m_appSrc;
- bool m_sequential;
- GstAppStreamType m_streamType;
+ QIODevice *m_stream = nullptr;
+ GstAppSrc *m_appSrc = nullptr;
+ bool m_sequential = false;
+ GstAppStreamType m_streamType = GST_APP_STREAM_TYPE_RANDOM_ACCESS;
GstAppSrcCallbacks m_callbacks;
- qint64 m_maxBytes;
- unsigned int m_dataRequestSize;
- bool m_dataRequested;
- bool m_enoughData;
- bool m_forceData;
+ qint64 m_maxBytes = 0;
+ unsigned int m_dataRequestSize = ~0;
+ bool m_dataRequested = false;
+ bool m_enoughData = false;
+ bool m_forceData = false;
};
QT_END_NAMESPACE
diff --git a/src/gsttools/qgstcodecsinfo.cpp b/src/gsttools/qgstcodecsinfo.cpp
index ca43d489b..c6e61f824 100644
--- a/src/gsttools/qgstcodecsinfo.cpp
+++ b/src/gsttools/qgstcodecsinfo.cpp
@@ -43,9 +43,36 @@
#include <gst/pbutils/pbutils.h>
+static QSet<QString> streamTypes(GstElementFactory *factory, GstPadDirection direction)
+{
+ QSet<QString> types;
+ const GList *pads = gst_element_factory_get_static_pad_templates(factory);
+ for (const GList *pad = pads; pad; pad = g_list_next(pad)) {
+ GstStaticPadTemplate *templ = reinterpret_cast<GstStaticPadTemplate *>(pad->data);
+ if (templ->direction == direction) {
+ GstCaps *caps = gst_static_caps_get(&templ->static_caps);
+ for (uint i = 0; i < gst_caps_get_size(caps); ++i) {
+ GstStructure *structure = gst_caps_get_structure(caps, i);
+ types.insert(QString::fromUtf8(gst_structure_get_name(structure)));
+ }
+ gst_caps_unref(caps);
+ }
+ }
+
+ return types;
+}
+
QGstCodecsInfo::QGstCodecsInfo(QGstCodecsInfo::ElementType elementType)
{
updateCodecs(elementType);
+ for (auto &codec : supportedCodecs()) {
+ GstElementFactory *factory = gst_element_factory_find(codecElement(codec).constData());
+ if (factory) {
+ GstPadDirection direction = elementType == Muxer ? GST_PAD_SINK : GST_PAD_SRC;
+ m_streamTypes.insert(codec, streamTypes(factory, direction));
+ gst_object_unref(GST_OBJECT(factory));
+ }
+ }
}
QStringList QGstCodecsInfo::supportedCodecs() const
@@ -236,7 +263,16 @@ GList *QGstCodecsInfo::elementFactories(ElementType elementType) const
break;
}
- return gst_element_factory_list_get_elements(gstElementType, GST_RANK_MARGINAL);
+ GList *list = gst_element_factory_list_get_elements(gstElementType, GST_RANK_MARGINAL);
+ if (elementType == AudioEncoder) {
+ // Manually add "audioconvert" to the list
+ // to allow linking with various containers.
+ auto factory = gst_element_factory_find("audioconvert");
+ if (factory)
+ list = g_list_prepend(list, factory);
+ }
+
+ return list;
#else
GList *result = gst_registry_feature_filter(gst_registry_get_default(),
element_filter,
@@ -245,3 +281,20 @@ GList *QGstCodecsInfo::elementFactories(ElementType elementType) const
return result;
#endif
}
+
+QSet<QString> QGstCodecsInfo::supportedStreamTypes(const QString &codec) const
+{
+ return m_streamTypes.value(codec);
+}
+
+QStringList QGstCodecsInfo::supportedCodecs(const QSet<QString> &types) const
+{
+ QStringList result;
+ for (auto &candidate : supportedCodecs()) {
+ auto candidateTypes = supportedStreamTypes(candidate);
+ if (candidateTypes.intersects(types))
+ result << candidate;
+ }
+
+ return result;
+}
diff --git a/src/gsttools/qgstcodecsinfo_p.h b/src/gsttools/qgstcodecsinfo_p.h
index 33ab3de4b..d7aadef21 100644
--- a/src/gsttools/qgstcodecsinfo_p.h
+++ b/src/gsttools/qgstcodecsinfo_p.h
@@ -54,6 +54,7 @@
#include <private/qgsttools_global_p.h>
#include <QtCore/qmap.h>
#include <QtCore/qstringlist.h>
+#include <QSet>
#include <gst/gst.h>
@@ -76,6 +77,8 @@ public:
QString codecDescription(const QString &codec) const;
QByteArray codecElement(const QString &codec) const;
QStringList codecOptions(const QString &codec) const;
+ QSet<QString> supportedStreamTypes(const QString &codec) const;
+ QStringList supportedCodecs(const QSet<QString> &types) const;
private:
void updateCodecs(ElementType elementType);
@@ -83,6 +86,7 @@ private:
QStringList m_codecs;
QMap<QString, CodecInfo> m_codecInfo;
+ QMap<QString, QSet<QString>> m_streamTypes;
};
Q_DECLARE_TYPEINFO(QGstCodecsInfo::CodecInfo, Q_MOVABLE_TYPE);
diff --git a/src/gsttools/qgstreamerbufferprobe.cpp b/src/gsttools/qgstreamerbufferprobe.cpp
index f420290ce..d95de4c63 100644
--- a/src/gsttools/qgstreamerbufferprobe.cpp
+++ b/src/gsttools/qgstreamerbufferprobe.cpp
@@ -43,13 +43,7 @@
QT_BEGIN_NAMESPACE
QGstreamerBufferProbe::QGstreamerBufferProbe(Flags flags)
-#if GST_CHECK_VERSION(1,0,0)
- : m_capsProbeId(-1)
-#else
- : m_caps(0)
-#endif
- , m_bufferProbeId(-1)
- , m_flags(flags)
+ : m_flags(flags)
{
}
diff --git a/src/gsttools/qgstreamerbufferprobe_p.h b/src/gsttools/qgstreamerbufferprobe_p.h
index 35644f934..2dda73e40 100644
--- a/src/gsttools/qgstreamerbufferprobe_p.h
+++ b/src/gsttools/qgstreamerbufferprobe_p.h
@@ -83,12 +83,12 @@ private:
#if GST_CHECK_VERSION(1,0,0)
static GstPadProbeReturn capsProbe(GstPad *pad, GstPadProbeInfo *info, gpointer user_data);
static GstPadProbeReturn bufferProbe(GstPad *pad, GstPadProbeInfo *info, gpointer user_data);
- int m_capsProbeId;
+ int m_capsProbeId = -1;
#else
static gboolean bufferProbe(GstElement *element, GstBuffer *buffer, gpointer user_data);
- GstCaps *m_caps;
+ GstCaps *m_caps = nullptr;
#endif
- int m_bufferProbeId;
+ int m_bufferProbeId = -1;
const Flags m_flags;
};
diff --git a/src/gsttools/qgstreamerbushelper_p.h b/src/gsttools/qgstreamerbushelper_p.h
index c7d06faf8..e784f6e41 100644
--- a/src/gsttools/qgstreamerbushelper_p.h
+++ b/src/gsttools/qgstreamerbushelper_p.h
@@ -96,7 +96,7 @@ signals:
void message(QGstreamerMessage const& message);
private:
- QGstreamerBusHelperPrivate* d;
+ QGstreamerBusHelperPrivate *d = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/gsttools/qgstreamermessage.cpp b/src/gsttools/qgstreamermessage.cpp
index 6855c285c..7191565e1 100644
--- a/src/gsttools/qgstreamermessage.cpp
+++ b/src/gsttools/qgstreamermessage.cpp
@@ -51,12 +51,6 @@ static int wuchi = qRegisterMetaType<QGstreamerMessage>();
\internal
*/
-QGstreamerMessage::QGstreamerMessage():
- m_message(0)
-{
- Q_UNUSED(wuchi);
-}
-
QGstreamerMessage::QGstreamerMessage(GstMessage* message):
m_message(message)
{
diff --git a/src/gsttools/qgstreamermessage_p.h b/src/gsttools/qgstreamermessage_p.h
index 2f9d1745c..baeecc360 100644
--- a/src/gsttools/qgstreamermessage_p.h
+++ b/src/gsttools/qgstreamermessage_p.h
@@ -64,7 +64,7 @@ class QString;
class Q_GSTTOOLS_EXPORT QGstreamerMessage
{
public:
- QGstreamerMessage();
+ QGstreamerMessage() = default;
QGstreamerMessage(GstMessage* message);
QGstreamerMessage(QGstreamerMessage const& m);
~QGstreamerMessage();
@@ -74,7 +74,7 @@ public:
QGstreamerMessage& operator=(QGstreamerMessage const& rhs);
private:
- GstMessage* m_message;
+ GstMessage* m_message = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/gsttools/qgstreamerplayercontrol.cpp b/src/gsttools/qgstreamerplayercontrol.cpp
index 03350a432..b49ec479f 100644
--- a/src/gsttools/qgstreamerplayercontrol.cpp
+++ b/src/gsttools/qgstreamerplayercontrol.cpp
@@ -60,13 +60,6 @@ QT_BEGIN_NAMESPACE
QGstreamerPlayerControl::QGstreamerPlayerControl(QGstreamerPlayerSession *session, QObject *parent)
: QMediaPlayerControl(parent)
, m_session(session)
- , m_userRequestedState(QMediaPlayer::StoppedState)
- , m_currentState(QMediaPlayer::StoppedState)
- , m_mediaStatus(QMediaPlayer::NoMedia)
- , m_bufferProgress(-1)
- , m_pendingSeekPosition(-1)
- , m_setMediaPending(false)
- , m_stream(0)
{
m_resources = QMediaResourcePolicy::createResourceSet<QMediaPlayerResourceSetInterface>();
Q_ASSERT(m_resources);
@@ -225,6 +218,10 @@ void QGstreamerPlayerControl::pause()
qDebug() << Q_FUNC_INFO;
#endif
m_userRequestedState = QMediaPlayer::PausedState;
+ // If the playback has not been started yet but pause is requested.
+ // Seek to the beginning to show first frame.
+ if (m_pendingSeekPosition == -1 && m_session->position() == 0)
+ m_pendingSeekPosition = 0;
playOrPause(QMediaPlayer::PausedState);
}
@@ -354,7 +351,7 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent &content, QIODevice *
m_currentState = QMediaPlayer::StoppedState;
QMediaContent oldMedia = m_currentResource;
- m_pendingSeekPosition = 0;
+ m_pendingSeekPosition = -1;
m_session->showPrerollFrames(false); // do not show prerolled frames until pause() or play() explicitly called
m_setMediaPending = false;
diff --git a/src/gsttools/qgstreamerplayercontrol_p.h b/src/gsttools/qgstreamerplayercontrol_p.h
index e2252ea52..ef94df925 100644
--- a/src/gsttools/qgstreamerplayercontrol_p.h
+++ b/src/gsttools/qgstreamerplayercontrol_p.h
@@ -124,20 +124,20 @@ private:
void pushState();
void popAndNotifyState();
- QGstreamerPlayerSession *m_session;
- QMediaPlayer::State m_userRequestedState;
- QMediaPlayer::State m_currentState;
- QMediaPlayer::MediaStatus m_mediaStatus;
+ QGstreamerPlayerSession *m_session = nullptr;
+ QMediaPlayer::State m_userRequestedState = QMediaPlayer::StoppedState;
+ QMediaPlayer::State m_currentState = QMediaPlayer::StoppedState;
+ QMediaPlayer::MediaStatus m_mediaStatus = QMediaPlayer::NoMedia;
QStack<QMediaPlayer::State> m_stateStack;
QStack<QMediaPlayer::MediaStatus> m_mediaStatusStack;
- int m_bufferProgress;
- qint64 m_pendingSeekPosition;
- bool m_setMediaPending;
+ int m_bufferProgress = -1;
+ qint64 m_pendingSeekPosition = -1;
+ bool m_setMediaPending = false;
QMediaContent m_currentResource;
- QIODevice *m_stream;
+ QIODevice *m_stream = nullptr;
- QMediaPlayerResourceSetInterface *m_resources;
+ QMediaPlayerResourceSetInterface *m_resources = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/gsttools/qgstreamerplayersession.cpp b/src/gsttools/qgstreamerplayersession.cpp
index 0e4fd2179..891eecbb0 100644
--- a/src/gsttools/qgstreamerplayersession.cpp
+++ b/src/gsttools/qgstreamerplayersession.cpp
@@ -111,39 +111,7 @@ static GstStaticCaps static_RawCaps = GST_STATIC_CAPS(DEFAULT_RAW_CAPS);
#endif
QGstreamerPlayerSession::QGstreamerPlayerSession(QObject *parent)
- :QObject(parent),
- m_state(QMediaPlayer::StoppedState),
- m_pendingState(QMediaPlayer::StoppedState),
- m_busHelper(0),
- m_videoSink(0),
-#if !GST_CHECK_VERSION(1,0,0)
- m_usingColorspaceElement(false),
-#endif
- m_pendingVideoSink(0),
- m_nullVideoSink(0),
- m_audioSink(0),
- m_volumeElement(0),
- m_bus(0),
- m_videoOutput(0),
- m_renderer(0),
-#if QT_CONFIG(gstreamer_app)
- m_appSrc(0),
-#endif
- m_videoProbe(0),
- m_audioProbe(0),
- m_volume(100),
- m_playbackRate(1.0),
- m_muted(false),
- m_audioAvailable(false),
- m_videoAvailable(false),
- m_seekable(false),
- m_lastPosition(0),
- m_duration(0),
- m_durationQueries(0),
- m_displayPrerolledFrame(true),
- m_sourceType(UnknownSrc),
- m_everPlayed(false),
- m_isLiveSource(false)
+ : QObject(parent)
{
m_playbin = gst_element_factory_make(QT_GSTREAMER_PLAYBIN_ELEMENT_NAME, NULL);
if (m_playbin) {
@@ -1188,9 +1156,11 @@ bool QGstreamerPlayerSession::processBusMessage(const QGstreamerMessage &message
#ifdef DEBUG_PLAYBIN
QStringList states;
- states << "GST_STATE_VOID_PENDING" << "GST_STATE_NULL" << "GST_STATE_READY" << "GST_STATE_PAUSED" << "GST_STATE_PLAYING";
+ states << QStringLiteral("GST_STATE_VOID_PENDING") << QStringLiteral("GST_STATE_NULL")
+ << QStringLiteral("GST_STATE_READY") << QStringLiteral("GST_STATE_PAUSED")
+ << QStringLiteral("GST_STATE_PLAYING");
- qDebug() << QString("state changed: old: %1 new: %2 pending: %3") \
+ qDebug() << QStringLiteral("state changed: old: %1 new: %2 pending: %3") \
.arg(states[oldState]) \
.arg(states[newState]) \
.arg(states[pending]);
diff --git a/src/gsttools/qgstreamerplayersession_p.h b/src/gsttools/qgstreamerplayersession_p.h
index d4b050272..69027eeb2 100644
--- a/src/gsttools/qgstreamerplayersession_p.h
+++ b/src/gsttools/qgstreamerplayersession_p.h
@@ -212,32 +212,32 @@ private:
bool setPipeline(GstElement *pipeline);
QNetworkRequest m_request;
- QMediaPlayer::State m_state;
- QMediaPlayer::State m_pendingState;
- QGstreamerBusHelper* m_busHelper;
- GstElement *m_playbin = nullptr; // Can be null
- GstElement *m_pipeline = nullptr; // Never null
+ QMediaPlayer::State m_state = QMediaPlayer::StoppedState;
+ QMediaPlayer::State m_pendingState = QMediaPlayer::StoppedState;
+ QGstreamerBusHelper *m_busHelper = nullptr;
+ GstElement *m_playbin = nullptr;
+ GstElement *m_pipeline = nullptr;
- GstElement* m_videoSink;
+ GstElement *m_videoSink = nullptr;
- GstElement* m_videoOutputBin;
- GstElement* m_videoIdentity;
+ GstElement *m_videoOutputBin = nullptr;
+ GstElement *m_videoIdentity = nullptr;
#if !GST_CHECK_VERSION(1,0,0)
- GstElement* m_colorSpace;
- bool m_usingColorspaceElement;
+ GstElement *m_colorSpace = nullptr;
+ bool m_usingColorspaceElement = false;
#endif
- GstElement* m_pendingVideoSink;
- GstElement* m_nullVideoSink;
+ GstElement *m_pendingVideoSink = nullptr;
+ GstElement *m_nullVideoSink = nullptr;
- GstElement* m_audioSink;
- GstElement* m_volumeElement;
+ GstElement *m_audioSink = nullptr;
+ GstElement *m_volumeElement = nullptr;
- GstBus* m_bus;
- QObject *m_videoOutput;
- QGstreamerVideoRendererInterface *m_renderer;
+ GstBus *m_bus = nullptr;
+ QObject *m_videoOutput = nullptr;
+ QGstreamerVideoRendererInterface *m_renderer = nullptr;
#if QT_CONFIG(gstreamer_app)
- QGstAppSrc *m_appSrc;
+ QGstAppSrc *m_appSrc = nullptr;
#endif
QMap<QByteArray, QVariant> m_tags;
@@ -245,21 +245,21 @@ private:
QList<QMediaStreamsControl::StreamType> m_streamTypes;
QMap<QMediaStreamsControl::StreamType, int> m_playbin2StreamOffset;
- QGstreamerVideoProbeControl *m_videoProbe;
- QGstreamerAudioProbeControl *m_audioProbe;
+ QGstreamerVideoProbeControl *m_videoProbe = nullptr;
+ QGstreamerAudioProbeControl *m_audioProbe = nullptr;
- int m_volume;
- qreal m_playbackRate;
- bool m_muted;
- bool m_audioAvailable;
- bool m_videoAvailable;
- bool m_seekable;
+ int m_volume = 100;
+ qreal m_playbackRate = 1.0;
+ bool m_muted = false;
+ bool m_audioAvailable = false;
+ bool m_videoAvailable = false;
+ bool m_seekable = false;
- mutable qint64 m_lastPosition;
- qint64 m_duration;
- int m_durationQueries;
+ mutable qint64 m_lastPosition = 0;
+ qint64 m_duration = 0;
+ int m_durationQueries = 0;
- bool m_displayPrerolledFrame;
+ bool m_displayPrerolledFrame = true;
enum SourceType
{
@@ -269,11 +269,11 @@ private:
MMSSrc,
RTSPSrc,
};
- SourceType m_sourceType;
- bool m_everPlayed;
- bool m_isLiveSource;
+ SourceType m_sourceType = UnknownSrc;
+ bool m_everPlayed = false;
+ bool m_isLiveSource = false;
- gulong pad_probe_id;
+ gulong pad_probe_id = 0;
};
QT_END_NAMESPACE
diff --git a/src/gsttools/qgstreamervideoinputdevicecontrol.cpp b/src/gsttools/qgstreamervideoinputdevicecontrol.cpp
index 86e6772b7..4d98afa62 100644
--- a/src/gsttools/qgstreamervideoinputdevicecontrol.cpp
+++ b/src/gsttools/qgstreamervideoinputdevicecontrol.cpp
@@ -45,13 +45,14 @@
#include <private/qgstutils_p.h>
QGstreamerVideoInputDeviceControl::QGstreamerVideoInputDeviceControl(QObject *parent)
- :QVideoDeviceSelectorControl(parent), m_factory(0), m_selectedDevice(0)
+ : QVideoDeviceSelectorControl(parent)
{
}
QGstreamerVideoInputDeviceControl::QGstreamerVideoInputDeviceControl(
GstElementFactory *factory, QObject *parent)
- : QVideoDeviceSelectorControl(parent), m_factory(factory), m_selectedDevice(0)
+ : QVideoDeviceSelectorControl(parent)
+ , m_factory(factory)
{
if (m_factory)
gst_object_ref(GST_OBJECT(m_factory));
diff --git a/src/gsttools/qgstreamervideoinputdevicecontrol_p.h b/src/gsttools/qgstreamervideoinputdevicecontrol_p.h
index b660cc7b3..9d8dffd72 100644
--- a/src/gsttools/qgstreamervideoinputdevicecontrol_p.h
+++ b/src/gsttools/qgstreamervideoinputdevicecontrol_p.h
@@ -83,9 +83,9 @@ public Q_SLOTS:
void setSelectedDevice(int index) override;
private:
- GstElementFactory *m_factory;
+ GstElementFactory *m_factory = nullptr;
- int m_selectedDevice;
+ int m_selectedDevice = 0;
};
QT_END_NAMESPACE
diff --git a/src/gsttools/qgstreamervideoprobecontrol.cpp b/src/gsttools/qgstreamervideoprobecontrol.cpp
index e18da2b4d..f9ce4e412 100644
--- a/src/gsttools/qgstreamervideoprobecontrol.cpp
+++ b/src/gsttools/qgstreamervideoprobecontrol.cpp
@@ -44,8 +44,6 @@
QGstreamerVideoProbeControl::QGstreamerVideoProbeControl(QObject *parent)
: QMediaVideoProbeControl(parent)
- , m_flushing(false)
- , m_frameProbed(false)
{
}
diff --git a/src/gsttools/qgstreamervideoprobecontrol_p.h b/src/gsttools/qgstreamervideoprobecontrol_p.h
index b15b6099c..8f2101d74 100644
--- a/src/gsttools/qgstreamervideoprobecontrol_p.h
+++ b/src/gsttools/qgstreamervideoprobecontrol_p.h
@@ -89,10 +89,10 @@ private:
#if GST_CHECK_VERSION(1,0,0)
GstVideoInfo m_videoInfo;
#else
- int m_bytesPerLine;
+ int m_bytesPerLine = 0;
#endif
- bool m_flushing;
- bool m_frameProbed; // true if at least one frame was probed
+ bool m_flushing = false;
+ bool m_frameProbed = false; // true if at least one frame was probed
};
QT_END_NAMESPACE
diff --git a/src/gsttools/qgstreamervideowidget.cpp b/src/gsttools/qgstreamervideowidget.cpp
index 288a9c9c0..164e62f86 100644
--- a/src/gsttools/qgstreamervideowidget.cpp
+++ b/src/gsttools/qgstreamervideowidget.cpp
@@ -95,10 +95,6 @@ protected:
QGstreamerVideoWidgetControl::QGstreamerVideoWidgetControl(QObject *parent, const QByteArray &elementName)
: QVideoWidgetControl(parent)
, m_videoOverlay(this, !elementName.isEmpty() ? elementName : qgetenv("QT_GSTREAMER_WIDGET_VIDEOSINK"))
- , m_widget(0)
- , m_stopped(false)
- , m_windowId(0)
- , m_fullScreen(false)
{
connect(&m_videoOverlay, &QGstreamerVideoOverlay::activeChanged,
this, &QGstreamerVideoWidgetControl::onOverlayActiveChanged);
diff --git a/src/gsttools/qgstreamervideowidget_p.h b/src/gsttools/qgstreamervideowidget_p.h
index 1ddb738df..6eec6ae52 100644
--- a/src/gsttools/qgstreamervideowidget_p.h
+++ b/src/gsttools/qgstreamervideowidget_p.h
@@ -117,10 +117,10 @@ private:
bool processBusMessage(const QGstreamerMessage &message) override;
QGstreamerVideoOverlay m_videoOverlay;
- QGstreamerVideoWidget *m_widget;
- bool m_stopped;
- WId m_windowId;
- bool m_fullScreen;
+ QGstreamerVideoWidget *m_widget = nullptr;
+ bool m_stopped = false;
+ WId m_windowId = 0;
+ bool m_fullScreen = false;
};
QT_END_NAMESPACE
diff --git a/src/gsttools/qgstreamervideowindow.cpp b/src/gsttools/qgstreamervideowindow.cpp
index f872df964..e7e3c5044 100644
--- a/src/gsttools/qgstreamervideowindow.cpp
+++ b/src/gsttools/qgstreamervideowindow.cpp
@@ -45,9 +45,6 @@
QGstreamerVideoWindow::QGstreamerVideoWindow(QObject *parent, const QByteArray &elementName)
: QVideoWindowControl(parent)
, m_videoOverlay(this, !elementName.isEmpty() ? elementName : qgetenv("QT_GSTREAMER_WINDOW_VIDEOSINK"))
- , m_windowId(0)
- , m_fullScreen(false)
- , m_colorKey(QColor::Invalid)
{
connect(&m_videoOverlay, &QGstreamerVideoOverlay::nativeVideoSizeChanged,
this, &QGstreamerVideoWindow::nativeSizeChanged);
diff --git a/src/gsttools/qgstreamervideowindow_p.h b/src/gsttools/qgstreamervideowindow_p.h
index 5f893f10e..a0ed8599b 100644
--- a/src/gsttools/qgstreamervideowindow_p.h
+++ b/src/gsttools/qgstreamervideowindow_p.h
@@ -116,10 +116,10 @@ signals:
private:
QGstreamerVideoOverlay m_videoOverlay;
- WId m_windowId;
+ WId m_windowId = 0;
QRect m_displayRect;
- bool m_fullScreen;
- mutable QColor m_colorKey;
+ bool m_fullScreen = false;
+ mutable QColor m_colorKey = QColor::Invalid;
};
QT_END_NAMESPACE
diff --git a/src/gsttools/qgstvideobuffer.cpp b/src/gsttools/qgstvideobuffer.cpp
index e174ab75d..245b7e024 100644
--- a/src/gsttools/qgstvideobuffer.cpp
+++ b/src/gsttools/qgstvideobuffer.cpp
@@ -51,7 +51,6 @@ QGstVideoBuffer::QGstVideoBuffer(GstBuffer *buffer, int bytesPerLine)
, m_bytesPerLine(bytesPerLine)
#endif
, m_buffer(buffer)
- , m_mode(NotMapped)
{
gst_buffer_ref(m_buffer);
}
@@ -70,7 +69,6 @@ QGstVideoBuffer::QGstVideoBuffer(GstBuffer *buffer, int bytesPerLine,
, m_bytesPerLine(bytesPerLine)
#endif
, m_buffer(buffer)
- , m_mode(NotMapped)
, m_handle(handle)
{
gst_buffer_ref(m_buffer);
diff --git a/src/gsttools/qgstvideobuffer_p.h b/src/gsttools/qgstvideobuffer_p.h
index 6681070da..b7de17e19 100644
--- a/src/gsttools/qgstvideobuffer_p.h
+++ b/src/gsttools/qgstvideobuffer_p.h
@@ -95,10 +95,10 @@ private:
GstVideoInfo m_videoInfo;
GstVideoFrame m_frame;
#else
- int m_bytesPerLine;
+ int m_bytesPerLine = 0;
#endif
- GstBuffer *m_buffer;
- MapMode m_mode;
+ GstBuffer *m_buffer = nullptr;
+ MapMode m_mode = NotMapped;
QVariant m_handle;
};
diff --git a/src/gsttools/qgstvideorenderersink.cpp b/src/gsttools/qgstvideorenderersink.cpp
index 5f71d342c..3b458a978 100644
--- a/src/gsttools/qgstvideorenderersink.cpp
+++ b/src/gsttools/qgstvideorenderersink.cpp
@@ -78,8 +78,6 @@
QT_BEGIN_NAMESPACE
QGstDefaultVideoRenderer::QGstDefaultVideoRenderer()
- : m_flushed(true)
- , m_handleType(QAbstractVideoBuffer::NoHandle)
{
}
@@ -169,14 +167,6 @@ Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, rendererLoader,
QVideoSurfaceGstDelegate::QVideoSurfaceGstDelegate(QAbstractVideoSurface *surface)
: m_surface(surface)
- , m_renderer(0)
- , m_activeRenderer(0)
- , m_surfaceCaps(0)
- , m_startCaps(0)
- , m_renderBuffer(0)
- , m_notified(false)
- , m_stop(false)
- , m_flush(false)
{
const auto instances = rendererLoader()->instances(QGstVideoRendererPluginKey);
for (QObject *instance : instances) {
@@ -656,13 +646,35 @@ void QGstVideoRendererSink::base_init(gpointer g_class)
GST_ELEMENT_CLASS(g_class), gst_static_pad_template_get(&sink_pad_template));
}
+struct NullSurface : QAbstractVideoSurface
+{
+ NullSurface(QObject *parent = nullptr) : QAbstractVideoSurface(parent) { }
+
+ QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType) const override
+ {
+ return QList<QVideoFrame::PixelFormat>() << QVideoFrame::Format_RGB32;
+ }
+
+ bool present(const QVideoFrame &) override
+ {
+ return true;
+ }
+};
+
void QGstVideoRendererSink::instance_init(GTypeInstance *instance, gpointer g_class)
{
+ Q_UNUSED(g_class);
VO_SINK(instance);
- Q_UNUSED(g_class);
+ if (!current_surface) {
+ qWarning() << "Using qtvideosink element without video surface";
+ static NullSurface nullSurface;
+ current_surface = &nullSurface;
+ }
+
sink->delegate = new QVideoSurfaceGstDelegate(current_surface);
sink->delegate->moveToThread(current_surface->thread());
+ current_surface = nullptr;
}
void QGstVideoRendererSink::finalize(GObject *object)
diff --git a/src/gsttools/qgstvideorenderersink_p.h b/src/gsttools/qgstvideorenderersink_p.h
index 38854291a..84162814c 100644
--- a/src/gsttools/qgstvideorenderersink_p.h
+++ b/src/gsttools/qgstvideorenderersink_p.h
@@ -96,8 +96,8 @@ public:
private:
QVideoSurfaceFormat m_format;
GstVideoInfo m_videoInfo;
- bool m_flushed;
- QAbstractVideoBuffer::HandleType m_handleType;
+ bool m_flushed = true;
+ QAbstractVideoBuffer::HandleType m_handleType = QAbstractVideoBuffer::NoHandle;
};
class QVideoSurfaceGstDelegate : public QObject
@@ -134,21 +134,21 @@ private:
QMutex m_mutex;
QWaitCondition m_setupCondition;
QWaitCondition m_renderCondition;
- GstFlowReturn m_renderReturn;
+ GstFlowReturn m_renderReturn = GST_FLOW_OK;
QList<QGstVideoRenderer *> m_renderers;
- QGstVideoRenderer *m_renderer;
- QGstVideoRenderer *m_activeRenderer;
+ QGstVideoRenderer *m_renderer = nullptr;
+ QGstVideoRenderer *m_activeRenderer = nullptr;
- GstCaps *m_surfaceCaps;
- GstCaps *m_startCaps;
- GstBuffer *m_renderBuffer;
+ GstCaps *m_surfaceCaps = nullptr;
+ GstCaps *m_startCaps = nullptr;
+ GstBuffer *m_renderBuffer = nullptr;
#if QT_CONFIG(gstreamer_gl)
GstGLContext *m_gstGLDisplayContext = nullptr;
#endif
- bool m_notified;
- bool m_stop;
- bool m_flush;
+ bool m_notified = false;
+ bool m_stop = false;
+ bool m_flush = false;
};
class Q_GSTTOOLS_EXPORT QGstVideoRendererSink
@@ -184,7 +184,7 @@ private:
static gboolean query(GstBaseSink *element, GstQuery *query);
private:
- QVideoSurfaceGstDelegate *delegate;
+ QVideoSurfaceGstDelegate *delegate = nullptr;
};
diff --git a/src/gsttools/qvideosurfacegstsink.cpp b/src/gsttools/qvideosurfacegstsink.cpp
index 9655a2191..c63eea9a6 100644
--- a/src/gsttools/qvideosurfacegstsink.cpp
+++ b/src/gsttools/qvideosurfacegstsink.cpp
@@ -65,10 +65,6 @@ Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, bufferPoolLoader,
QVideoSurfaceGstDelegate::QVideoSurfaceGstDelegate(
QAbstractVideoSurface *surface)
: m_surface(surface)
- , m_pool(0)
- , m_renderReturn(GST_FLOW_ERROR)
- , m_bytesPerLine(0)
- , m_startCanceled(false)
{
if (m_surface) {
const auto instances = bufferPoolLoader()->instances(QGstBufferPoolPluginKey);
diff --git a/src/gsttools/qvideosurfacegstsink_p.h b/src/gsttools/qvideosurfacegstsink_p.h
index 961cf91d2..dd758ff82 100644
--- a/src/gsttools/qvideosurfacegstsink_p.h
+++ b/src/gsttools/qvideosurfacegstsink_p.h
@@ -119,7 +119,7 @@ private:
QList<QVideoFrame::PixelFormat> m_supportedPixelFormats;
//pixel formats of buffers pool native type
QList<QVideoFrame::PixelFormat> m_supportedPoolPixelFormats;
- QGstBufferPoolInterface *m_pool;
+ QGstBufferPoolInterface *m_pool = nullptr;
QList<QGstBufferPoolInterface *> m_pools;
QMutex m_poolMutex;
QMutex m_mutex;
@@ -127,10 +127,10 @@ private:
QWaitCondition m_renderCondition;
QVideoSurfaceFormat m_format;
QVideoFrame m_frame;
- GstFlowReturn m_renderReturn;
- int m_bytesPerLine;
- bool m_started;
- bool m_startCanceled;
+ GstFlowReturn m_renderReturn = GST_FLOW_ERROR;
+ int m_bytesPerLine = 0;
+ bool m_started = false;
+ bool m_startCanceled = false;
};
class QVideoSurfaceGstSink
@@ -172,11 +172,11 @@ private:
#endif
private:
- QVideoSurfaceGstDelegate *delegate;
+ QVideoSurfaceGstDelegate *delegate = nullptr;
- GstCaps *lastRequestedCaps;
- GstCaps *lastBufferCaps;
- QVideoSurfaceFormat *lastSurfaceFormat;
+ GstCaps *lastRequestedCaps = nullptr;
+ GstCaps *lastBufferCaps = nullptr;
+ QVideoSurfaceFormat *lastSurfaceFormat = nullptr;
};
class QVideoSurfaceGstSinkClass
diff --git a/src/imports/audioengine/qdeclarative_attenuationmodel_p.cpp b/src/imports/audioengine/qdeclarative_attenuationmodel_p.cpp
index 729558cd2..9d3c4fcb6 100644
--- a/src/imports/audioengine/qdeclarative_attenuationmodel_p.cpp
+++ b/src/imports/audioengine/qdeclarative_attenuationmodel_p.cpp
@@ -84,6 +84,7 @@ void QDeclarativeAttenuationModel::setName(const QString& name)
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
AttenuationModelLinear must be defined inside \l AudioEngine or be added to it using
\l{QtAudioEngine::AudioEngine::addAttenuationModel()}{AudioEngine.addAttenuationModel()}
@@ -213,6 +214,7 @@ qreal QDeclarativeAttenuationModelLinear::calculateGain(const QVector3D &listene
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
AttenuationModelInverse must be defined inside \l AudioEngine or be added to it using
\l{QtAudioEngine::AudioEngine::addAttenuationModel()}{AudioEngine.addAttenuationModel()}
diff --git a/src/imports/audioengine/qdeclarative_audiocategory_p.cpp b/src/imports/audioengine/qdeclarative_audiocategory_p.cpp
index 84ba6b190..3561e3800 100644
--- a/src/imports/audioengine/qdeclarative_audiocategory_p.cpp
+++ b/src/imports/audioengine/qdeclarative_audiocategory_p.cpp
@@ -53,6 +53,7 @@ QT_USE_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
An instance of AudioCategory can be accessed through \l {QtAudioEngine::AudioEngine::categories}
{AudioEngine.categories} with its unique name and must be defined inside AudioEngine or be added
diff --git a/src/imports/audioengine/qdeclarative_audioengine_p.cpp b/src/imports/audioengine/qdeclarative_audioengine_p.cpp
index 24d878dd8..96046fa31 100644
--- a/src/imports/audioengine/qdeclarative_audioengine_p.cpp
+++ b/src/imports/audioengine/qdeclarative_audioengine_p.cpp
@@ -62,6 +62,7 @@ QT_BEGIN_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
\qml
Rectangle {
diff --git a/src/imports/audioengine/qdeclarative_audiolistener_p.cpp b/src/imports/audioengine/qdeclarative_audiolistener_p.cpp
index 39a30171b..4ed305a72 100644
--- a/src/imports/audioengine/qdeclarative_audiolistener_p.cpp
+++ b/src/imports/audioengine/qdeclarative_audiolistener_p.cpp
@@ -54,6 +54,7 @@ QT_USE_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
AudioListener will have only one global instance and you can either access it through the
listener property of AudioEngine:
diff --git a/src/imports/audioengine/qdeclarative_audiosample_p.cpp b/src/imports/audioengine/qdeclarative_audiosample_p.cpp
index 4eccf5052..2e521edd9 100644
--- a/src/imports/audioengine/qdeclarative_audiosample_p.cpp
+++ b/src/imports/audioengine/qdeclarative_audiosample_p.cpp
@@ -56,6 +56,7 @@ QT_USE_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
It can be accessed through QtAudioEngine::AudioEngine::samples with its unique
name and must be defined inside AudioEngine or be added to it using
diff --git a/src/imports/audioengine/qdeclarative_playvariation_p.cpp b/src/imports/audioengine/qdeclarative_playvariation_p.cpp
index e6d3697d0..f0471d145 100644
--- a/src/imports/audioengine/qdeclarative_playvariation_p.cpp
+++ b/src/imports/audioengine/qdeclarative_playvariation_p.cpp
@@ -59,6 +59,7 @@ QT_USE_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
PlayVariation must be defined inside a \l Sound or be added to it using
\l{QtAudioEngine::Sound::addPlayVariation()}{Sound.addPlayVariation()}
diff --git a/src/imports/audioengine/qdeclarative_sound_p.cpp b/src/imports/audioengine/qdeclarative_sound_p.cpp
index 347198f61..f07468eec 100644
--- a/src/imports/audioengine/qdeclarative_sound_p.cpp
+++ b/src/imports/audioengine/qdeclarative_sound_p.cpp
@@ -166,6 +166,7 @@ void QDeclarativeSoundCone::setEngine(QDeclarativeAudioEngine *engine)
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
Sound can be accessed through QtAudioEngine::AudioEngine::sounds with its unique name
and must be defined inside AudioEngine or be added to it using
diff --git a/src/imports/audioengine/qdeclarative_soundinstance_p.cpp b/src/imports/audioengine/qdeclarative_soundinstance_p.cpp
index ad7480031..1bdb82343 100644
--- a/src/imports/audioengine/qdeclarative_soundinstance_p.cpp
+++ b/src/imports/audioengine/qdeclarative_soundinstance_p.cpp
@@ -57,6 +57,7 @@ QT_USE_NAMESPACE
\ingroup multimedia_audioengine
\inherits Item
\preliminary
+ \deprecated
There are two ways to create SoundInstance objects. You can obtain it by calling newInstance
method of a \l Sound:
diff --git a/src/imports/multimedia/qdeclarativeaudio.cpp b/src/imports/multimedia/qdeclarativeaudio.cpp
index 692aec2d0..9d41c77fa 100644
--- a/src/imports/multimedia/qdeclarativeaudio.cpp
+++ b/src/imports/multimedia/qdeclarativeaudio.cpp
@@ -1303,6 +1303,16 @@ void QDeclarativeAudio::_q_mediaChanged(const QMediaContent &media)
This property holds the source URL of the media.
Setting the \l source property clears the current \l playlist, if any.
+
+ Since Qt 5.12.2, the url scheme \c gst-pipeline provides custom pipelines
+ for the GStreamer backend.
+
+ If the pipeline contains a \c qtvideosink element,
+ the current VideoOutput will be used for rendering video.
+
+ \snippet multimedia-snippets/qtvideosink.qml complete
+
+ \sa QMediaPlayer::setMedia()
*/
/*!
diff --git a/src/multimedia/audio/qaudiodecoder.cpp b/src/multimedia/audio/qaudiodecoder.cpp
index b4ba854e1..0286e9a85 100644
--- a/src/multimedia/audio/qaudiodecoder.cpp
+++ b/src/multimedia/audio/qaudiodecoder.cpp
@@ -545,6 +545,6 @@ QAudioBuffer QAudioDecoder::read() const
\brief whether there is a decoded audio buffer available
*/
-#include "moc_qaudiodecoder.cpp"
QT_END_NAMESPACE
+#include "moc_qaudiodecoder.cpp"
diff --git a/src/multimedia/audio/qaudioprobe.cpp b/src/multimedia/audio/qaudioprobe.cpp
index b6fe86b11..7fb57242f 100644
--- a/src/multimedia/audio/qaudioprobe.cpp
+++ b/src/multimedia/audio/qaudioprobe.cpp
@@ -46,18 +46,7 @@
\brief The QAudioProbe class allows you to monitor audio being played or recorded.
- \code
- QAudioRecorder *recorder = new QAudioRecorder();
- QAudioProbe *probe = new QAudioProbe;
-
- // ... configure the audio recorder (skipped)
-
- connect(probe, SIGNAL(audioBufferProbed(QAudioBuffer)), this, SLOT(processBuffer(QAudioBuffer)));
-
- probe->setSource(recorder); // Returns true, hopefully.
-
- recorder->record(); // Now we can do things like calculating levels or performing an FFT
- \endcode
+ \snippet multimedia-snippets/qaudioprobe.cpp desc
\sa QVideoProbe, QMediaPlayer, QCamera
*/
diff --git a/src/multimedia/audio/qsamplecache_p.cpp b/src/multimedia/audio/qsamplecache_p.cpp
index 35234f8bb..8c4fdc210 100644
--- a/src/multimedia/audio/qsamplecache_p.cpp
+++ b/src/multimedia/audio/qsamplecache_p.cpp
@@ -47,6 +47,8 @@
#include <QtCore/QDebug>
//#define QT_SAMPLECACHE_DEBUG
+#include <mutex>
+
QT_BEGIN_NAMESPACE
@@ -98,7 +100,6 @@ QT_BEGIN_NAMESPACE
QSampleCache::QSampleCache(QObject *parent)
: QObject(parent)
, m_networkAccessManager(nullptr)
- , m_mutex(QMutex::Recursive)
, m_capacity(0)
, m_usage(0)
, m_loadingRefCount(0)
@@ -117,7 +118,7 @@ QNetworkAccessManager& QSampleCache::networkAccessManager()
QSampleCache::~QSampleCache()
{
- QMutexLocker m(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_loadingThread.quit();
m_loadingThread.wait();
@@ -157,7 +158,7 @@ bool QSampleCache::isLoading() const
bool QSampleCache::isCached(const QUrl &url) const
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
return m_samples.contains(url);
}
@@ -174,7 +175,7 @@ QSample* QSampleCache::requestSample(const QUrl& url)
#ifdef QT_SAMPLECACHE_DEBUG
qDebug() << "QSampleCache: request sample [" << url << "]";
#endif
- QMutexLocker locker(&m_mutex);
+ std::unique_lock<QRecursiveMutex> locker(m_mutex);
QMap<QUrl, QSample*>::iterator it = m_samples.find(url);
QSample* sample;
if (it == m_samples.end()) {
@@ -194,7 +195,7 @@ QSample* QSampleCache::requestSample(const QUrl& url)
void QSampleCache::setCapacity(qint64 capacity)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_capacity == capacity)
return;
#ifdef QT_SAMPLECACHE_DEBUG
@@ -227,7 +228,7 @@ void QSampleCache::unloadSample(QSample *sample)
// Called in both threads
void QSampleCache::refresh(qint64 usageChange)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_usage += usageChange;
if (m_capacity <= 0 || m_usage <= m_capacity)
return;
@@ -265,7 +266,7 @@ void QSampleCache::refresh(qint64 usageChange)
// Called in both threads
void QSampleCache::removeUnreferencedSample(QSample *sample)
{
- QMutexLocker m(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_staleSamples.remove(sample);
}
@@ -301,7 +302,8 @@ bool QSampleCache::notifyUnreferencedSample(QSample* sample)
if (m_loadingThread.isRunning())
m_loadingThread.wait();
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
+
if (m_capacity > 0)
return false;
m_samples.remove(sample->m_url);
diff --git a/src/multimedia/audio/qsamplecache_p.h b/src/multimedia/audio/qsamplecache_p.h
index 094e3281e..4c2384743 100644
--- a/src/multimedia/audio/qsamplecache_p.h
+++ b/src/multimedia/audio/qsamplecache_p.h
@@ -143,7 +143,7 @@ private:
QMap<QUrl, QSample*> m_samples;
QSet<QSample*> m_staleSamples;
QNetworkAccessManager *m_networkAccessManager;
- mutable QMutex m_mutex;
+ mutable QRecursiveMutex m_mutex;
qint64 m_capacity;
qint64 m_usage;
QThread m_loadingThread;
diff --git a/src/multimedia/camera/qcamera.cpp b/src/multimedia/camera/qcamera.cpp
index 46c6af9ff..e23193f11 100644
--- a/src/multimedia/camera/qcamera.cpp
+++ b/src/multimedia/camera/qcamera.cpp
@@ -644,7 +644,7 @@ void QCamera::setViewfinderSettings(const QCameraViewfinderSettings &settings)
If \a settings is non null, the returned list is reduced to settings matching the given partial
\a settings.
- The camera must be loaded before calling this function, otherwise the returned list
+ The status of the camera must be LoadedStatus before calling this function, otherwise the returned list
is empty.
\sa setViewfinderSettings(), supportedViewfinderResolutions(), supportedViewfinderFrameRateRanges(),
diff --git a/src/multimedia/camera/qcameraexposure.cpp b/src/multimedia/camera/qcameraexposure.cpp
index 91950c7d2..022dea28c 100644
--- a/src/multimedia/camera/qcameraexposure.cpp
+++ b/src/multimedia/camera/qcameraexposure.cpp
@@ -702,5 +702,6 @@ void QCameraExposure::setAutoShutterSpeed()
Signal emitted when the exposure compensation changes to \a value.
*/
-#include "moc_qcameraexposure.cpp"
QT_END_NAMESPACE
+
+#include "moc_qcameraexposure.cpp"
diff --git a/src/multimedia/camera/qcamerafocus.cpp b/src/multimedia/camera/qcamerafocus.cpp
index e73a8ea46..980b9dc93 100644
--- a/src/multimedia/camera/qcamerafocus.cpp
+++ b/src/multimedia/camera/qcamerafocus.cpp
@@ -325,8 +325,6 @@ class QCameraFocusPrivate : public QMediaObjectPrivate
public:
void initControls();
- QCameraFocus *q_ptr;
-
QCamera *camera;
QCameraFocusControl *focusControl;
@@ -373,12 +371,11 @@ void QCameraFocusPrivate::initControls()
Construct a QCameraFocus for \a camera.
*/
-QCameraFocus::QCameraFocus(QCamera *camera):
- QObject(camera), d_ptr(new QCameraFocusPrivate)
+QCameraFocus::QCameraFocus(QCamera *camera)
+ : QObject(*new QCameraFocusPrivate, camera)
{
Q_D(QCameraFocus);
d->camera = camera;
- d->q_ptr = this;
d->initControls();
}
@@ -389,7 +386,6 @@ QCameraFocus::QCameraFocus(QCamera *camera):
QCameraFocus::~QCameraFocus()
{
- delete d_ptr;
}
/*!
@@ -613,6 +609,6 @@ void QCameraFocus::zoomTo(qreal optical, qreal digital)
have been detected.
*/
+QT_END_NAMESPACE
#include "moc_qcamerafocus.cpp"
-QT_END_NAMESPACE
diff --git a/src/multimedia/camera/qcamerafocus.h b/src/multimedia/camera/qcamerafocus.h
index 024f504e9..a5d7725e3 100644
--- a/src/multimedia/camera/qcamerafocus.h
+++ b/src/multimedia/camera/qcamerafocus.h
@@ -162,7 +162,9 @@ private:
Q_DISABLE_COPY(QCameraFocus)
Q_DECLARE_PRIVATE(QCameraFocus)
- QCameraFocusPrivate *d_ptr;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QCameraFocusPrivate *d_ptr_deprecated;
+#endif
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QCameraFocus::FocusModes)
diff --git a/src/multimedia/camera/qcameraimagecapture.cpp b/src/multimedia/camera/qcameraimagecapture.cpp
index 8f364a686..502812f76 100644
--- a/src/multimedia/camera/qcameraimagecapture.cpp
+++ b/src/multimedia/camera/qcameraimagecapture.cpp
@@ -643,7 +643,6 @@ void QCameraImageCapture::cancelCapture()
Signal emitted when the frame with request \a id was saved to \a fileName.
*/
-
-#include "moc_qcameraimagecapture.cpp"
QT_END_NAMESPACE
+#include "moc_qcameraimagecapture.cpp"
diff --git a/src/multimedia/camera/qcameraimageprocessing.cpp b/src/multimedia/camera/qcameraimageprocessing.cpp
index c2cefeae7..af6c22391 100644
--- a/src/multimedia/camera/qcameraimageprocessing.cpp
+++ b/src/multimedia/camera/qcameraimageprocessing.cpp
@@ -114,8 +114,6 @@ class QCameraImageProcessingPrivate : public QMediaObjectPrivate
public:
void initControls();
- QCameraImageProcessing *q_ptr;
-
QCamera *camera;
QCameraImageProcessingControl *imageControl;
bool available;
@@ -140,12 +138,11 @@ void QCameraImageProcessingPrivate::initControls()
Construct a QCameraImageProcessing for \a camera.
*/
-QCameraImageProcessing::QCameraImageProcessing(QCamera *camera):
- QObject(camera), d_ptr(new QCameraImageProcessingPrivate)
+QCameraImageProcessing::QCameraImageProcessing(QCamera *camera)
+ : QObject(*new QCameraImageProcessingPrivate, camera)
{
Q_D(QCameraImageProcessing);
d->camera = camera;
- d->q_ptr = this;
d->initControls();
}
@@ -156,7 +153,6 @@ QCameraImageProcessing::QCameraImageProcessing(QCamera *camera):
QCameraImageProcessing::~QCameraImageProcessing()
{
- delete d_ptr;
}
@@ -400,6 +396,6 @@ bool QCameraImageProcessing::isColorFilterSupported(QCameraImageProcessing::Colo
}
+QT_END_NAMESPACE
#include "moc_qcameraimageprocessing.cpp"
-QT_END_NAMESPACE
diff --git a/src/multimedia/camera/qcameraimageprocessing.h b/src/multimedia/camera/qcameraimageprocessing.h
index e4ad00ff8..f76daf85e 100644
--- a/src/multimedia/camera/qcameraimageprocessing.h
+++ b/src/multimedia/camera/qcameraimageprocessing.h
@@ -126,7 +126,9 @@ private:
Q_DISABLE_COPY(QCameraImageProcessing)
Q_DECLARE_PRIVATE(QCameraImageProcessing)
- QCameraImageProcessingPrivate *d_ptr;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QCameraImageProcessingPrivate *d_ptr_deprecated;
+#endif
};
QT_END_NAMESPACE
diff --git a/src/multimedia/controls/qaudiodecodercontrol.cpp b/src/multimedia/controls/qaudiodecodercontrol.cpp
index 09448ca41..4d6d36a2f 100644
--- a/src/multimedia/controls/qaudiodecodercontrol.cpp
+++ b/src/multimedia/controls/qaudiodecodercontrol.cpp
@@ -261,6 +261,6 @@ QAudioDecoderControl::QAudioDecoderControl(QObject *parent):
or -1 if not available.
*/
-#include "moc_qaudiodecodercontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qaudiodecodercontrol.cpp"
diff --git a/src/multimedia/controls/qaudioencodersettingscontrol.cpp b/src/multimedia/controls/qaudioencodersettingscontrol.cpp
index ad0437c6e..42f20201c 100644
--- a/src/multimedia/controls/qaudioencodersettingscontrol.cpp
+++ b/src/multimedia/controls/qaudioencodersettingscontrol.cpp
@@ -134,6 +134,6 @@ QAudioEncoderSettingsControl::~QAudioEncoderSettingsControl()
Sets the selected audio \a settings.
*/
-#include "moc_qaudioencodersettingscontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qaudioencodersettingscontrol.cpp"
diff --git a/src/multimedia/controls/qaudioinputselectorcontrol.cpp b/src/multimedia/controls/qaudioinputselectorcontrol.cpp
index 7f32de3e4..0f8843808 100644
--- a/src/multimedia/controls/qaudioinputselectorcontrol.cpp
+++ b/src/multimedia/controls/qaudioinputselectorcontrol.cpp
@@ -125,6 +125,6 @@ QAudioInputSelectorControl::~QAudioInputSelectorControl()
Signals that list of available inputs has changed.
*/
-#include "moc_qaudioinputselectorcontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qaudioinputselectorcontrol.cpp"
diff --git a/src/multimedia/controls/qaudiooutputselectorcontrol.cpp b/src/multimedia/controls/qaudiooutputselectorcontrol.cpp
index 728ec22ce..20c792f8d 100644
--- a/src/multimedia/controls/qaudiooutputselectorcontrol.cpp
+++ b/src/multimedia/controls/qaudiooutputselectorcontrol.cpp
@@ -125,6 +125,6 @@ QAudioOutputSelectorControl::~QAudioOutputSelectorControl()
Signals that list of available outputs has changed.
*/
-#include "moc_qaudiooutputselectorcontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qaudiooutputselectorcontrol.cpp"
diff --git a/src/multimedia/controls/qaudiorolecontrol.cpp b/src/multimedia/controls/qaudiorolecontrol.cpp
index 0ea2aea53..7b2341846 100644
--- a/src/multimedia/controls/qaudiorolecontrol.cpp
+++ b/src/multimedia/controls/qaudiorolecontrol.cpp
@@ -112,6 +112,6 @@ QAudioRoleControl::~QAudioRoleControl()
Signal emitted when the audio \a role has changed.
*/
+QT_END_NAMESPACE
#include "moc_qaudiorolecontrol.cpp"
-QT_END_NAMESPACE
diff --git a/src/multimedia/controls/qcameracapturebufferformatcontrol.cpp b/src/multimedia/controls/qcameracapturebufferformatcontrol.cpp
index e513e1416..553414681 100644
--- a/src/multimedia/controls/qcameracapturebufferformatcontrol.cpp
+++ b/src/multimedia/controls/qcameracapturebufferformatcontrol.cpp
@@ -107,6 +107,6 @@ QCameraCaptureBufferFormatControl::~QCameraCaptureBufferFormatControl()
Signals the buffer image capture format changed to \a format.
*/
-#include "moc_qcameracapturebufferformatcontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qcameracapturebufferformatcontrol.cpp"
diff --git a/src/multimedia/controls/qcameracapturedestinationcontrol.cpp b/src/multimedia/controls/qcameracapturedestinationcontrol.cpp
index e3ec10374..e037ab5a9 100644
--- a/src/multimedia/controls/qcameracapturedestinationcontrol.cpp
+++ b/src/multimedia/controls/qcameracapturedestinationcontrol.cpp
@@ -109,6 +109,6 @@ QCameraCaptureDestinationControl::~QCameraCaptureDestinationControl()
Signals the image capture \a destination changed.
*/
-#include "moc_qcameracapturedestinationcontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qcameracapturedestinationcontrol.cpp"
diff --git a/src/multimedia/controls/qcameracontrol.cpp b/src/multimedia/controls/qcameracontrol.cpp
index 0e562c853..03a7a073c 100644
--- a/src/multimedia/controls/qcameracontrol.cpp
+++ b/src/multimedia/controls/qcameracontrol.cpp
@@ -199,5 +199,6 @@ QCameraControl::~QCameraControl()
\value ViewfinderSettings Viewfinder settings are changed.
*/
-#include "moc_qcameracontrol.cpp"
QT_END_NAMESPACE
+
+#include "moc_qcameracontrol.cpp"
diff --git a/src/multimedia/controls/qcameraexposurecontrol.cpp b/src/multimedia/controls/qcameraexposurecontrol.cpp
index c13be0d5d..1434f0976 100644
--- a/src/multimedia/controls/qcameraexposurecontrol.cpp
+++ b/src/multimedia/controls/qcameraexposurecontrol.cpp
@@ -201,7 +201,6 @@ QCameraExposureControl::~QCameraExposureControl()
\since 5.0
*/
-
-#include "moc_qcameraexposurecontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qcameraexposurecontrol.cpp"
diff --git a/src/multimedia/controls/qcameraflashcontrol.cpp b/src/multimedia/controls/qcameraflashcontrol.cpp
index d77984dad..d5d9b564f 100644
--- a/src/multimedia/controls/qcameraflashcontrol.cpp
+++ b/src/multimedia/controls/qcameraflashcontrol.cpp
@@ -128,6 +128,6 @@ QCameraFlashControl::~QCameraFlashControl()
Signal emitted when flash state changes to \a ready.
*/
-#include "moc_qcameraflashcontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qcameraflashcontrol.cpp"
diff --git a/src/multimedia/controls/qcamerafocuscontrol.cpp b/src/multimedia/controls/qcamerafocuscontrol.cpp
index 6884ab617..d963c95d4 100644
--- a/src/multimedia/controls/qcamerafocuscontrol.cpp
+++ b/src/multimedia/controls/qcamerafocuscontrol.cpp
@@ -192,6 +192,6 @@ QCameraFocusControl::~QCameraFocusControl()
-#include "moc_qcamerafocuscontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qcamerafocuscontrol.cpp"
diff --git a/src/multimedia/controls/qcameraimagecapturecontrol.cpp b/src/multimedia/controls/qcameraimagecapturecontrol.cpp
index bfc973aba..3c110eb68 100644
--- a/src/multimedia/controls/qcameraimagecapturecontrol.cpp
+++ b/src/multimedia/controls/qcameraimagecapturecontrol.cpp
@@ -189,6 +189,6 @@ QCameraImageCaptureControl::~QCameraImageCaptureControl()
*/
-#include "moc_qcameraimagecapturecontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qcameraimagecapturecontrol.cpp"
diff --git a/src/multimedia/controls/qcameraimageprocessingcontrol.cpp b/src/multimedia/controls/qcameraimageprocessingcontrol.cpp
index a72fc7bb5..a39846642 100644
--- a/src/multimedia/controls/qcameraimageprocessingcontrol.cpp
+++ b/src/multimedia/controls/qcameraimageprocessingcontrol.cpp
@@ -183,6 +183,6 @@ QCameraImageProcessingControl::~QCameraImageProcessingControl()
The base value for platform specific extended parameters.
*/
-#include "moc_qcameraimageprocessingcontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qcameraimageprocessingcontrol.cpp"
diff --git a/src/multimedia/controls/qcamerainfocontrol.cpp b/src/multimedia/controls/qcamerainfocontrol.cpp
index e69e0c3eb..de6dc4277 100644
--- a/src/multimedia/controls/qcamerainfocontrol.cpp
+++ b/src/multimedia/controls/qcamerainfocontrol.cpp
@@ -97,6 +97,6 @@ QCameraInfoControl::~QCameraInfoControl()
in relation to the display in its natural orientation.
*/
-#include "moc_qcamerainfocontrol.cpp"
-
QT_END_NAMESPACE
+
+#include "moc_qcamerainfocontrol.cpp"
diff --git a/src/multimedia/controls/qcameralockscontrol.cpp b/src/multimedia/controls/qcameralockscontrol.cpp
index d8d6e61cd..436b3b9c9 100644
--- a/src/multimedia/controls/qcameralockscontrol.cpp
+++ b/src/multimedia/controls/qcameralockscontrol.cpp
@@ -122,7 +122,6 @@ QCameraLocksControl::~QCameraLocksControl()
Signals the lock \a type \a status was changed with the specified \a reason.
*/
-
+QT_END_NAMESPACE
#include "moc_qcameralockscontrol.cpp"
-QT_END_NAMESPACE
diff --git a/src/multimedia/controls/qcameraviewfindersettingscontrol.cpp b/src/multimedia/controls/qcameraviewfindersettingscontrol.cpp
index c7610dd8f..6fa0ded82 100644
--- a/src/multimedia/controls/qcameraviewfindersettingscontrol.cpp
+++ b/src/multimedia/controls/qcameraviewfindersettingscontrol.cpp
@@ -200,6 +200,6 @@ QCameraViewfinderSettingsControl2::~QCameraViewfinderSettingsControl2()
Sets the camera viewfinder \a settings.
*/
-#include "moc_qcameraviewfindersettingscontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qcameraviewfindersettingscontrol.cpp"
diff --git a/src/multimedia/controls/qcamerazoomcontrol.cpp b/src/multimedia/controls/qcamerazoomcontrol.cpp
index 9a3de0542..9c8d8d289 100644
--- a/src/multimedia/controls/qcamerazoomcontrol.cpp
+++ b/src/multimedia/controls/qcamerazoomcontrol.cpp
@@ -182,6 +182,6 @@ QCameraZoomControl::~QCameraZoomControl()
like capture mode or resolution.
*/
-#include "moc_qcamerazoomcontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qcamerazoomcontrol.cpp"
diff --git a/src/multimedia/controls/qcustomaudiorolecontrol.cpp b/src/multimedia/controls/qcustomaudiorolecontrol.cpp
index 39431be01..046219687 100644
--- a/src/multimedia/controls/qcustomaudiorolecontrol.cpp
+++ b/src/multimedia/controls/qcustomaudiorolecontrol.cpp
@@ -113,5 +113,6 @@ QCustomAudioRoleControl::~QCustomAudioRoleControl()
Signal emitted when the audio \a role has changed.
*/
-#include "moc_qcustomaudiorolecontrol.cpp"
QT_END_NAMESPACE
+
+#include "moc_qcustomaudiorolecontrol.cpp"
diff --git a/src/multimedia/controls/qimageencodercontrol.cpp b/src/multimedia/controls/qimageencodercontrol.cpp
index 1d5c23441..c29a61662 100644
--- a/src/multimedia/controls/qimageencodercontrol.cpp
+++ b/src/multimedia/controls/qimageencodercontrol.cpp
@@ -131,6 +131,6 @@ QImageEncoderControl::~QImageEncoderControl()
Sets the selected image encoder \a settings.
*/
-#include "moc_qimageencodercontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qimageencodercontrol.cpp"
diff --git a/src/multimedia/controls/qmediaaudioprobecontrol.cpp b/src/multimedia/controls/qmediaaudioprobecontrol.cpp
index f71763c96..296f01888 100644
--- a/src/multimedia/controls/qmediaaudioprobecontrol.cpp
+++ b/src/multimedia/controls/qmediaaudioprobecontrol.cpp
@@ -97,6 +97,6 @@ QMediaAudioProbeControl::~QMediaAudioProbeControl()
This signal should be emitted when it is required to release all frames.
*/
-#include "moc_qmediaaudioprobecontrol.cpp"
-
QT_END_NAMESPACE
+
+#include "moc_qmediaaudioprobecontrol.cpp"
diff --git a/src/multimedia/controls/qmediaavailabilitycontrol.cpp b/src/multimedia/controls/qmediaavailabilitycontrol.cpp
index 163d71a3f..1a6d73a8a 100644
--- a/src/multimedia/controls/qmediaavailabilitycontrol.cpp
+++ b/src/multimedia/controls/qmediaavailabilitycontrol.cpp
@@ -103,5 +103,6 @@ QMediaAvailabilityControl::~QMediaAvailabilityControl()
Signal emitted when the current \a availability value changed.
*/
-#include "moc_qmediaavailabilitycontrol.cpp"
QT_END_NAMESPACE
+
+#include "moc_qmediaavailabilitycontrol.cpp"
diff --git a/src/multimedia/controls/qmediacontainercontrol.cpp b/src/multimedia/controls/qmediacontainercontrol.cpp
index 0f130645f..b15c8acdc 100644
--- a/src/multimedia/controls/qmediacontainercontrol.cpp
+++ b/src/multimedia/controls/qmediacontainercontrol.cpp
@@ -116,6 +116,6 @@ QMediaContainerControl::~QMediaContainerControl()
Returns a description of the container \a formatMimeType.
*/
-#include "moc_qmediacontainercontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qmediacontainercontrol.cpp"
diff --git a/src/multimedia/controls/qmedianetworkaccesscontrol.cpp b/src/multimedia/controls/qmedianetworkaccesscontrol.cpp
index 222bee216..9e9ad239d 100644
--- a/src/multimedia/controls/qmedianetworkaccesscontrol.cpp
+++ b/src/multimedia/controls/qmedianetworkaccesscontrol.cpp
@@ -96,7 +96,6 @@ QMediaNetworkAccessControl::~QMediaNetworkAccessControl()
to \a configuration.
*/
-
+QT_END_NAMESPACE
#include "moc_qmedianetworkaccesscontrol.cpp"
-QT_END_NAMESPACE
diff --git a/src/multimedia/controls/qmediaplayercontrol.cpp b/src/multimedia/controls/qmediaplayercontrol.cpp
index 15f9e7d49..28b217af8 100644
--- a/src/multimedia/controls/qmediaplayercontrol.cpp
+++ b/src/multimedia/controls/qmediaplayercontrol.cpp
@@ -380,6 +380,6 @@ QMediaPlayerControl::QMediaPlayerControl(QObject *parent):
Signal emitted when playback rate changes to \a rate.
*/
-#include "moc_qmediaplayercontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qmediaplayercontrol.cpp"
diff --git a/src/multimedia/controls/qmediaplaylistcontrol.cpp b/src/multimedia/controls/qmediaplaylistcontrol.cpp
index a9144e404..61e20e170 100644
--- a/src/multimedia/controls/qmediaplaylistcontrol.cpp
+++ b/src/multimedia/controls/qmediaplaylistcontrol.cpp
@@ -201,6 +201,6 @@ QMediaPlaylistControl::~QMediaPlaylistControl()
Signal emitted when current media changes to \a content.
*/
-#include "moc_qmediaplaylistcontrol_p.cpp"
QT_END_NAMESPACE
+#include "moc_qmediaplaylistcontrol_p.cpp"
diff --git a/src/multimedia/controls/qmediaplaylistsourcecontrol.cpp b/src/multimedia/controls/qmediaplaylistsourcecontrol.cpp
index 3c1ee4565..f95c4b508 100644
--- a/src/multimedia/controls/qmediaplaylistsourcecontrol.cpp
+++ b/src/multimedia/controls/qmediaplaylistsourcecontrol.cpp
@@ -121,6 +121,6 @@ QMediaPlaylistSourceControl::~QMediaPlaylistSourceControl()
Signal emitted when the playlist has changed to \a playlist.
*/
-#include "moc_qmediaplaylistsourcecontrol_p.cpp"
QT_END_NAMESPACE
+#include "moc_qmediaplaylistsourcecontrol_p.cpp"
diff --git a/src/multimedia/controls/qmediarecordercontrol.cpp b/src/multimedia/controls/qmediarecordercontrol.cpp
index e4667d369..f078073ef 100644
--- a/src/multimedia/controls/qmediarecordercontrol.cpp
+++ b/src/multimedia/controls/qmediarecordercontrol.cpp
@@ -217,6 +217,6 @@ QMediaRecorderControl::~QMediaRecorderControl()
Signals that an \a error has occurred. The \a errorString describes the error.
*/
-#include "moc_qmediarecordercontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qmediarecordercontrol.cpp"
diff --git a/src/multimedia/controls/qmediastreamscontrol.cpp b/src/multimedia/controls/qmediastreamscontrol.cpp
index 2daf50de8..aa5fe007d 100644
--- a/src/multimedia/controls/qmediastreamscontrol.cpp
+++ b/src/multimedia/controls/qmediastreamscontrol.cpp
@@ -155,6 +155,6 @@ QMediaStreamsControl::~QMediaStreamsControl()
The signal is emitted when the active streams list is changed.
*/
-#include "moc_qmediastreamscontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qmediastreamscontrol.cpp"
diff --git a/src/multimedia/controls/qmediavideoprobecontrol.cpp b/src/multimedia/controls/qmediavideoprobecontrol.cpp
index 57bfbc78b..ea27ab057 100644
--- a/src/multimedia/controls/qmediavideoprobecontrol.cpp
+++ b/src/multimedia/controls/qmediavideoprobecontrol.cpp
@@ -96,6 +96,6 @@ QMediaVideoProbeControl::~QMediaVideoProbeControl()
This signal should be emitted when it is required to release all frames.
*/
-#include "moc_qmediavideoprobecontrol.cpp"
-
QT_END_NAMESPACE
+
+#include "moc_qmediavideoprobecontrol.cpp"
diff --git a/src/multimedia/controls/qmetadatareadercontrol.cpp b/src/multimedia/controls/qmetadatareadercontrol.cpp
index 8e9880c68..e728353f6 100644
--- a/src/multimedia/controls/qmetadatareadercontrol.cpp
+++ b/src/multimedia/controls/qmetadatareadercontrol.cpp
@@ -143,6 +143,6 @@ QMetaDataReaderControl::~QMetaDataReaderControl()
be true if the multimedia object has meta-data.
*/
-#include "moc_qmetadatareadercontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qmetadatareadercontrol.cpp"
diff --git a/src/multimedia/controls/qmetadatawritercontrol.cpp b/src/multimedia/controls/qmetadatawritercontrol.cpp
index e9d7dc793..053597b88 100644
--- a/src/multimedia/controls/qmetadatawritercontrol.cpp
+++ b/src/multimedia/controls/qmetadatawritercontrol.cpp
@@ -163,6 +163,6 @@ QMetaDataWriterControl::~QMetaDataWriterControl()
true if meta-data elements can be added or adjusted.
*/
-#include "moc_qmetadatawritercontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qmetadatawritercontrol.cpp"
diff --git a/src/multimedia/controls/qradiodatacontrol.cpp b/src/multimedia/controls/qradiodatacontrol.cpp
index eaa9aaed6..df0046b5e 100644
--- a/src/multimedia/controls/qradiodatacontrol.cpp
+++ b/src/multimedia/controls/qradiodatacontrol.cpp
@@ -187,6 +187,6 @@ QRadioDataControl::~QRadioDataControl()
Signals that the Radio Text \a radioText has changed
*/
-#include "moc_qradiodatacontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qradiodatacontrol.cpp"
diff --git a/src/multimedia/controls/qradiotunercontrol.cpp b/src/multimedia/controls/qradiotunercontrol.cpp
index 8b9e865e1..ea2126319 100644
--- a/src/multimedia/controls/qradiotunercontrol.cpp
+++ b/src/multimedia/controls/qradiotunercontrol.cpp
@@ -339,6 +339,6 @@ QRadioTunerControl::~QRadioTunerControl()
reflected with the \a connectionStatus.
*/
-#include "moc_qradiotunercontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qradiotunercontrol.cpp"
diff --git a/src/multimedia/controls/qvideodeviceselectorcontrol.cpp b/src/multimedia/controls/qvideodeviceselectorcontrol.cpp
index ccdb3e798..8c4ee7ba4 100644
--- a/src/multimedia/controls/qvideodeviceselectorcontrol.cpp
+++ b/src/multimedia/controls/qvideodeviceselectorcontrol.cpp
@@ -137,6 +137,6 @@ QVideoDeviceSelectorControl::~QVideoDeviceSelectorControl()
Signals that the selected video device \a name has changed.
*/
-#include "moc_qvideodeviceselectorcontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qvideodeviceselectorcontrol.cpp"
diff --git a/src/multimedia/controls/qvideoencodersettingscontrol.cpp b/src/multimedia/controls/qvideoencodersettingscontrol.cpp
index c06bf7387..52ae51382 100644
--- a/src/multimedia/controls/qvideoencodersettingscontrol.cpp
+++ b/src/multimedia/controls/qvideoencodersettingscontrol.cpp
@@ -155,6 +155,6 @@ QVideoEncoderSettingsControl::~QVideoEncoderSettingsControl()
Sets the selected video encoder \a settings.
*/
-#include "moc_qvideoencodersettingscontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qvideoencodersettingscontrol.cpp"
diff --git a/src/multimedia/controls/qvideorenderercontrol.cpp b/src/multimedia/controls/qvideorenderercontrol.cpp
index 92973e5f8..e722dfa38 100644
--- a/src/multimedia/controls/qvideorenderercontrol.cpp
+++ b/src/multimedia/controls/qvideorenderercontrol.cpp
@@ -103,6 +103,6 @@ QVideoRendererControl::~QVideoRendererControl()
Sets the \a surface a video producer renders to.
*/
-#include "moc_qvideorenderercontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qvideorenderercontrol.cpp"
diff --git a/src/multimedia/controls/qvideowindowcontrol.cpp b/src/multimedia/controls/qvideowindowcontrol.cpp
index c41490694..e971a6925 100644
--- a/src/multimedia/controls/qvideowindowcontrol.cpp
+++ b/src/multimedia/controls/qvideowindowcontrol.cpp
@@ -253,6 +253,6 @@ QVideoWindowControl::~QVideoWindowControl()
Signals that a video overlay's \a saturation adjustment has changed.
*/
-#include "moc_qvideowindowcontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qvideowindowcontrol.cpp"
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/images/qt-logo.png b/src/multimedia/doc/snippets/multimedia-snippets/images/qt-logo.png
new file mode 100644
index 000000000..dff772951
--- /dev/null
+++ b/src/multimedia/doc/snippets/multimedia-snippets/images/qt-logo.png
Binary files differ
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/media.cpp b/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
index 60097d917..8ec7cb072 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
+++ b/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
@@ -40,6 +40,7 @@
/* Media related snippets */
#include <QFile>
#include <QTimer>
+#include <QBuffer>
#include "qmediaplaylist.h"
#include "qmediarecorder.h"
@@ -189,6 +190,36 @@ void MediaExample::MediaPlayer()
player->play();
//! [Movie playlist]
+
+ //! [Pipeline]
+ player = new QMediaPlayer;
+ player->setMedia(QUrl("gst-pipeline: videotestsrc ! autovideosink"));
+ player->play();
+ //! [Pipeline]
+
+ //! [Pipeline appsrc]
+ QImage img("images/qt-logo.png");
+ img = img.convertToFormat(QImage::Format_ARGB32);
+ QByteArray ba(reinterpret_cast<const char *>(img.bits()), img.sizeInBytes());
+ QBuffer buffer(&ba);
+ buffer.open(QIODevice::ReadOnly);
+ player = new QMediaPlayer;
+ player->setMedia(QUrl("gst-pipeline: appsrc blocksize=4294967295 ! \
+ video/x-raw,format=BGRx,framerate=30/1,width=200,height=147 ! \
+ coloreffects preset=heat ! videoconvert ! video/x-raw,format=I420 ! jpegenc ! rtpjpegpay ! \
+ udpsink host=127.0.0.1 port=5000"), &buffer);
+ player->play();
+
+ QMediaPlayer *receiver = new QMediaPlayer;
+ videoWidget = new QVideoWidget;
+ receiver->setVideoOutput(videoWidget);
+ receiver->setMedia(QUrl("gst-pipeline: udpsrc port=5000 ! \
+ application/x-rtp,encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! \
+ xvimagesink name=qtvideosink"));
+ receiver->play();
+ // Content will be shown in this widget.
+ videoWidget->show();
+ //! [Pipeline appsrc]
}
void MediaExample::MediaRecorder()
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/multimedia-snippets.pro b/src/multimedia/doc/snippets/multimedia-snippets/multimedia-snippets.pro
index 9571b026e..c13090a79 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/multimedia-snippets.pro
+++ b/src/multimedia/doc/snippets/multimedia-snippets/multimedia-snippets.pro
@@ -21,4 +21,5 @@ SOURCES += \
qsound.cpp
OTHER_FILES += \
- soundeffect.qml
+ soundeffect.qml \
+ qtvideosink.qml
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/qaudioprobe.cpp b/src/multimedia/doc/snippets/multimedia-snippets/qaudioprobe.cpp
new file mode 100644
index 000000000..8543395f3
--- /dev/null
+++ b/src/multimedia/doc/snippets/multimedia-snippets/qaudioprobe.cpp
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//! [desc]
+QAudioRecorder *recorder = new QAudioRecorder();
+QAudioProbe *probe = new QAudioProbe;
+
+// ... configure the audio recorder (skipped)
+
+connect(probe, SIGNAL(audioBufferProbed(QAudioBuffer)), this, SLOT(processBuffer(QAudioBuffer)));
+
+probe->setSource(recorder); // Returns true, hopefully.
+
+recorder->record(); // Now we can do things like calculating levels or performing an FFT
+//! [desc]
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/qtvideosink.qml b/src/multimedia/doc/snippets/multimedia-snippets/qtvideosink.qml
new file mode 100644
index 000000000..a4ae07f30
--- /dev/null
+++ b/src/multimedia/doc/snippets/multimedia-snippets/qtvideosink.qml
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtMultimedia 5.12
+
+//! [complete]
+Item {
+ MediaPlayer {
+ id: mediaplayer
+ source: "gst-pipeline: videotestsrc ! qtvideosink"
+ }
+
+ VideoOutput {
+ anchors.fill: parent
+ source: mediaplayer
+ }
+
+ MouseArea {
+ id: playArea
+ anchors.fill: parent
+ onPressed: mediaplayer.play();
+ }
+}
+//! [complete]
diff --git a/src/multimedia/playback/qmediacontent.cpp b/src/multimedia/playback/qmediacontent.cpp
index f61511f1c..6915ae7af 100644
--- a/src/multimedia/playback/qmediacontent.cpp
+++ b/src/multimedia/playback/qmediacontent.cpp
@@ -257,6 +257,12 @@ bool QMediaContent::isNull() const
return d.constData() == nullptr;
}
+/*!
+ \since 5.14
+
+ Returns a QNetworkRequest that represents the resource for this media content.
+*/
+
QNetworkRequest QMediaContent::request() const
{
return (d && !d->requests.isEmpty()) ? d->requests.first() : QNetworkRequest();
diff --git a/src/multimedia/playback/qmedianetworkplaylistprovider.cpp b/src/multimedia/playback/qmedianetworkplaylistprovider.cpp
index 3f24d0f55..3156081e7 100644
--- a/src/multimedia/playback/qmedianetworkplaylistprovider.cpp
+++ b/src/multimedia/playback/qmedianetworkplaylistprovider.cpp
@@ -276,7 +276,6 @@ void QMediaNetworkPlaylistProvider::shuffle()
}
-#include "moc_qmedianetworkplaylistprovider_p.cpp"
-
QT_END_NAMESPACE
+#include "moc_qmedianetworkplaylistprovider_p.cpp"
diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp
index 6ff3fc7df..48db0335e 100644
--- a/src/multimedia/playback/qmediaplayer.cpp
+++ b/src/multimedia/playback/qmediaplayer.cpp
@@ -598,15 +598,15 @@ QMediaPlayer::QMediaPlayer(QObject *parent, QMediaPlayer::Flags flags):
SLOT(_q_mediaStatusChanged(QMediaPlayer::MediaStatus)));
connect(d->control, SIGNAL(error(int,QString)), SLOT(_q_error(int,QString)));
- connect(d->control, SIGNAL(durationChanged(qint64)), SIGNAL(durationChanged(qint64)));
- connect(d->control, SIGNAL(positionChanged(qint64)), SIGNAL(positionChanged(qint64)));
- connect(d->control, SIGNAL(audioAvailableChanged(bool)), SIGNAL(audioAvailableChanged(bool)));
- connect(d->control, SIGNAL(videoAvailableChanged(bool)), SIGNAL(videoAvailableChanged(bool)));
- connect(d->control, SIGNAL(volumeChanged(int)), SIGNAL(volumeChanged(int)));
- connect(d->control, SIGNAL(mutedChanged(bool)), SIGNAL(mutedChanged(bool)));
- connect(d->control, SIGNAL(seekableChanged(bool)), SIGNAL(seekableChanged(bool)));
- connect(d->control, SIGNAL(playbackRateChanged(qreal)), SIGNAL(playbackRateChanged(qreal)));
- connect(d->control, SIGNAL(bufferStatusChanged(int)), SIGNAL(bufferStatusChanged(int)));
+ connect(d->control, &QMediaPlayerControl::durationChanged, this, &QMediaPlayer::durationChanged);
+ connect(d->control, &QMediaPlayerControl::positionChanged, this, &QMediaPlayer::positionChanged);
+ connect(d->control, &QMediaPlayerControl::audioAvailableChanged, this, &QMediaPlayer::audioAvailableChanged);
+ connect(d->control, &QMediaPlayerControl::videoAvailableChanged, this, &QMediaPlayer::videoAvailableChanged);
+ connect(d->control, &QMediaPlayerControl::volumeChanged, this, &QMediaPlayer::volumeChanged);
+ connect(d->control, &QMediaPlayerControl::mutedChanged, this, &QMediaPlayer::mutedChanged);
+ connect(d->control, &QMediaPlayerControl::seekableChanged, this, &QMediaPlayer::seekableChanged);
+ connect(d->control, &QMediaPlayerControl::playbackRateChanged, this, &QMediaPlayer::playbackRateChanged);
+ connect(d->control, &QMediaPlayerControl::bufferStatusChanged, this, &QMediaPlayer::bufferStatusChanged);
d->state = d->control->state();
d->status = d->control->mediaStatus();
@@ -635,8 +635,8 @@ QMediaPlayer::QMediaPlayer(QObject *parent, QMediaPlayer::Flags flags):
}
}
if (d->networkAccessControl != nullptr) {
- connect(d->networkAccessControl, SIGNAL(configurationChanged(QNetworkConfiguration)),
- this, SIGNAL(networkConfigurationChanged(QNetworkConfiguration)));
+ connect(d->networkAccessControl, &QMediaNetworkAccessControl::configurationChanged,
+ this, &QMediaPlayer::networkConfigurationChanged);
}
}
}
@@ -1008,6 +1008,18 @@ void QMediaPlayer::setPlaybackRate(qreal rate)
It does not wait for the media to finish loading and does not check for errors. Listen for
the mediaStatusChanged() and error() signals to be notified when the media is loaded and
when an error occurs during loading.
+
+ Since Qt 5.12.2, the url scheme \c gst-pipeline provides custom pipelines
+ for the GStreamer backend.
+
+ \snippet multimedia-snippets/media.cpp Pipeline
+
+ If the pipeline contains a video sink element named \c qtvideosink,
+ current QVideoWidget can be used to render the video.
+
+ If the pipeline contains appsrc element, it will be used to push data from \a stream.
+
+ \snippet multimedia-snippets/media.cpp Pipeline appsrc
*/
void QMediaPlayer::setMedia(const QMediaContent &media, QIODevice *stream)
@@ -1634,6 +1646,6 @@ QStringList QMediaPlayer::supportedCustomAudioRoles() const
QAbstractVideoSurface \l {setVideoOutput()}{output}.
*/
-#include "moc_qmediaplayer.cpp"
QT_END_NAMESPACE
+#include "moc_qmediaplayer.cpp"
diff --git a/src/multimedia/playback/qmediaplaylist.cpp b/src/multimedia/playback/qmediaplaylist.cpp
index 7618827da..7c21a599b 100644
--- a/src/multimedia/playback/qmediaplaylist.cpp
+++ b/src/multimedia/playback/qmediaplaylist.cpp
@@ -818,7 +818,7 @@ void QMediaPlaylist::setCurrentIndex(int playlistPosition)
\value AccessDeniedError Access denied error.
*/
-#include "moc_qmediaplaylist.cpp"
-#include "moc_qmediaplaylist_p.cpp"
QT_END_NAMESPACE
+#include "moc_qmediaplaylist.cpp"
+#include "moc_qmediaplaylist_p.cpp"
diff --git a/src/multimedia/playback/qmediaplaylistioplugin.cpp b/src/multimedia/playback/qmediaplaylistioplugin.cpp
index a0f0e8321..957c7c79d 100644
--- a/src/multimedia/playback/qmediaplaylistioplugin.cpp
+++ b/src/multimedia/playback/qmediaplaylistioplugin.cpp
@@ -183,6 +183,6 @@ QMediaPlaylistIOPlugin::~QMediaPlaylistIOPlugin()
If the device is invalid or the format is unsupported this will return a null pointer.
*/
-#include "moc_qmediaplaylistioplugin_p.cpp"
QT_END_NAMESPACE
+#include "moc_qmediaplaylistioplugin_p.cpp"
diff --git a/src/multimedia/playback/qmediaplaylistnavigator.cpp b/src/multimedia/playback/qmediaplaylistnavigator.cpp
index 120f621f5..9b25f968a 100644
--- a/src/multimedia/playback/qmediaplaylistnavigator.cpp
+++ b/src/multimedia/playback/qmediaplaylistnavigator.cpp
@@ -539,6 +539,6 @@ void QMediaPlaylistNavigatorPrivate::_q_mediaChanged(int start, int end)
Signals that media immediately surrounding the current position has changed.
*/
-#include "moc_qmediaplaylistnavigator_p.cpp"
QT_END_NAMESPACE
+#include "moc_qmediaplaylistnavigator_p.cpp"
diff --git a/src/multimedia/playback/qmediaplaylistprovider.cpp b/src/multimedia/playback/qmediaplaylistprovider.cpp
index f441052c1..b146fb7b3 100644
--- a/src/multimedia/playback/qmediaplaylistprovider.cpp
+++ b/src/multimedia/playback/qmediaplaylistprovider.cpp
@@ -316,6 +316,6 @@ void QMediaPlaylistProvider::shuffle()
Signals that a load failed() due to an \a error. The \a errorMessage provides more information.
*/
-#include "moc_qmediaplaylistprovider_p.cpp"
QT_END_NAMESPACE
+#include "moc_qmediaplaylistprovider_p.cpp"
diff --git a/src/multimedia/qmediacontrol.cpp b/src/multimedia/qmediacontrol.cpp
index 939b9f393..b8f980aa0 100644
--- a/src/multimedia/qmediacontrol.cpp
+++ b/src/multimedia/qmediacontrol.cpp
@@ -130,6 +130,6 @@ QMediaControl::QMediaControl(QMediaControlPrivate &dd, QObject *parent)
d_ptr->q_ptr = this;
}
-#include "moc_qmediacontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qmediacontrol.cpp"
diff --git a/src/multimedia/qmediaobject.cpp b/src/multimedia/qmediaobject.cpp
index a12cab404..a26433c8e 100644
--- a/src/multimedia/qmediaobject.cpp
+++ b/src/multimedia/qmediaobject.cpp
@@ -113,7 +113,6 @@ void QMediaObjectPrivate::_q_availabilityChanged()
QMediaObject::~QMediaObject()
{
- delete d_ptr;
}
/*!
@@ -230,15 +229,11 @@ void QMediaObject::unbind(QObject *object)
constructor is protected.
*/
-QMediaObject::QMediaObject(QObject *parent, QMediaService *service):
- QObject(parent),
- d_ptr(new QMediaObjectPrivate)
-
+QMediaObject::QMediaObject(QObject *parent, QMediaService *service)
+ : QObject(*new QMediaObjectPrivate, parent)
{
Q_D(QMediaObject);
- d->q_ptr = this;
-
d->notifyTimer = new QTimer(this);
d->notifyTimer->setInterval(1000);
connect(d->notifyTimer, SIGNAL(timeout()), SLOT(_q_notify()));
@@ -252,13 +247,10 @@ QMediaObject::QMediaObject(QObject *parent, QMediaService *service):
\internal
*/
-QMediaObject::QMediaObject(QMediaObjectPrivate &dd, QObject *parent,
- QMediaService *service):
- QObject(parent),
- d_ptr(&dd)
+QMediaObject::QMediaObject(QMediaObjectPrivate &dd, QObject *parent, QMediaService *service)
+ : QObject(dd, parent)
{
Q_D(QMediaObject);
- d->q_ptr = this;
d->notifyTimer = new QTimer(this);
d->notifyTimer->setInterval(1000);
@@ -430,7 +422,6 @@ void QMediaObject::setupControls()
Signal emitted when the availability of the service has changed to \a availability.
*/
-
-#include "moc_qmediaobject.cpp"
QT_END_NAMESPACE
+#include "moc_qmediaobject.cpp"
diff --git a/src/multimedia/qmediaobject.h b/src/multimedia/qmediaobject.h
index 5788254b8..fabd015fe 100644
--- a/src/multimedia/qmediaobject.h
+++ b/src/multimedia/qmediaobject.h
@@ -93,7 +93,9 @@ protected:
void addPropertyWatch(QByteArray const &name);
void removePropertyWatch(QByteArray const &name);
- QMediaObjectPrivate *d_ptr;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QMediaObjectPrivate *d_ptr_deprecated;
+#endif
private:
void setupControls();
diff --git a/src/multimedia/qmediaobject_p.h b/src/multimedia/qmediaobject_p.h
index 85caf9a50..5067fa6d1 100644
--- a/src/multimedia/qmediaobject_p.h
+++ b/src/multimedia/qmediaobject_p.h
@@ -56,6 +56,7 @@
#include <QtCore/qtimer.h>
#include "qmediaobject.h"
+#include "private/qobject_p.h"
QT_BEGIN_NAMESPACE
@@ -68,12 +69,12 @@ class QMediaAvailabilityControl;
friend class Class;
-class QMediaObjectPrivate
+class QMediaObjectPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QMediaObject)
public:
- QMediaObjectPrivate() : service(nullptr), metaDataControl(nullptr), availabilityControl(nullptr), notifyTimer(nullptr), q_ptr(nullptr) {}
+ QMediaObjectPrivate() : service(nullptr), metaDataControl(nullptr), availabilityControl(nullptr), notifyTimer(nullptr) {}
virtual ~QMediaObjectPrivate() {}
void _q_notify();
@@ -85,8 +86,6 @@ public:
QTimer* notifyTimer;
QSet<int> notifyProperties;
-
- QMediaObject *q_ptr;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/qmediaservice.cpp b/src/multimedia/qmediaservice.cpp
index 4d6b3c039..7ea24c6dc 100644
--- a/src/multimedia/qmediaservice.cpp
+++ b/src/multimedia/qmediaservice.cpp
@@ -87,20 +87,16 @@ QT_BEGIN_NAMESPACE
*/
QMediaService::QMediaService(QObject *parent)
- : QObject(parent)
- , d_ptr(new QMediaServicePrivate)
+ : QObject(*new QMediaServicePrivate, parent)
{
- d_ptr->q_ptr = this;
}
/*!
\internal
*/
QMediaService::QMediaService(QMediaServicePrivate &dd, QObject *parent)
- : QObject(parent)
- , d_ptr(&dd)
+ : QObject(dd, parent)
{
- d_ptr->q_ptr = this;
}
/*!
@@ -109,7 +105,6 @@ QMediaService::QMediaService(QMediaServicePrivate &dd, QObject *parent)
QMediaService::~QMediaService()
{
- delete d_ptr;
}
/*!
@@ -142,7 +137,6 @@ QMediaService::~QMediaService()
Releases a \a control back to the service.
*/
-#include "moc_qmediaservice.cpp"
-
QT_END_NAMESPACE
+#include "moc_qmediaservice.cpp"
diff --git a/src/multimedia/qmediaservice.h b/src/multimedia/qmediaservice.h
index 9e653b2d8..019b86693 100644
--- a/src/multimedia/qmediaservice.h
+++ b/src/multimedia/qmediaservice.h
@@ -74,7 +74,9 @@ protected:
QMediaService(QObject* parent);
QMediaService(QMediaServicePrivate &dd, QObject *parent);
- QMediaServicePrivate *d_ptr;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QMediaServicePrivate *d_ptr_deprecated;
+#endif
private:
Q_DECLARE_PRIVATE(QMediaService)
diff --git a/src/multimedia/qmediaservice_p.h b/src/multimedia/qmediaservice_p.h
index 8c18ab1df..a9dbd5d29 100644
--- a/src/multimedia/qmediaservice_p.h
+++ b/src/multimedia/qmediaservice_p.h
@@ -51,18 +51,19 @@
// We mean it.
//
+#include "private/qobject_p.h"
+
QT_BEGIN_NAMESPACE
class QAudioDeviceControl;
-class QMediaServicePrivate
+class QMediaServicePrivate : public QObjectPrivate
{
+ Q_DECLARE_PUBLIC(QMediaService)
public:
- QMediaServicePrivate(): q_ptr(0) {}
+ QMediaServicePrivate() {}
virtual ~QMediaServicePrivate() {}
-
- QMediaService *q_ptr;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/qmediaserviceprovider.cpp b/src/multimedia/qmediaserviceprovider.cpp
index 023c13008..5731cf5be 100644
--- a/src/multimedia/qmediaserviceprovider.cpp
+++ b/src/multimedia/qmediaserviceprovider.cpp
@@ -85,6 +85,7 @@ public:
/*!
\class QMediaServiceProviderHint
+ \obsolete
\brief The QMediaServiceProviderHint class describes what is required of a QMediaService.
@@ -670,6 +671,7 @@ Q_GLOBAL_STATIC(QPluginServiceProvider, pluginProvider);
/*!
\class QMediaServiceProvider
+ \obsolete
\ingroup multimedia
\ingroup multimedia_control
\ingroup multimedia_core
@@ -827,6 +829,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceProviderPlugin
+ \obsolete
\inmodule QtMultimedia
\brief The QMediaServiceProviderPlugin class interface provides an interface for QMediaService
plug-ins.
@@ -854,6 +857,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceSupportedFormatsInterface
+ \obsolete
\inmodule QtMultimedia
\brief The QMediaServiceSupportedFormatsInterface class interface
identifies if a media service plug-in supports a media format.
@@ -882,6 +886,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceSupportedDevicesInterface
+ \obsolete
\inmodule QtMultimedia
\brief The QMediaServiceSupportedDevicesInterface class interface
identifies the devices supported by a media service plug-in.
@@ -909,6 +914,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceDefaultDeviceInterface
+ \obsolete
\inmodule QtMultimedia
\brief The QMediaServiceDefaultDeviceInterface class interface
identifies the default device used by a media service plug-in.
@@ -932,6 +938,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceCameraInfoInterface
+ \obsolete
\inmodule QtMultimedia
\since 5.3
\brief The QMediaServiceCameraInfoInterface class interface
@@ -961,6 +968,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
/*!
\class QMediaServiceFeaturesInterface
+ \obsolete
\inmodule QtMultimedia
\brief The QMediaServiceFeaturesInterface class interface identifies
features supported by a media service plug-in.
@@ -979,7 +987,7 @@ QMediaServiceProvider *QMediaServiceProvider::defaultServiceProvider()
Returns a set of features supported by a plug-in \a service.
*/
-#include "moc_qmediaserviceprovider_p.cpp"
-#include "moc_qmediaserviceproviderplugin.cpp"
QT_END_NAMESPACE
+#include "moc_qmediaserviceprovider_p.cpp"
+#include "moc_qmediaserviceproviderplugin.cpp"
diff --git a/src/multimedia/qmediatimerange.cpp b/src/multimedia/qmediatimerange.cpp
index 676d3d391..3a22e000f 100644
--- a/src/multimedia/qmediatimerange.cpp
+++ b/src/multimedia/qmediatimerange.cpp
@@ -94,6 +94,7 @@ QMediaTimeInterval::QMediaTimeInterval(qint64 start, qint64 end)
}
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
/*!
\fn QMediaTimeInterval::QMediaTimeInterval(const QMediaTimeInterval &other)
@@ -105,6 +106,7 @@ QMediaTimeInterval::QMediaTimeInterval(const QMediaTimeInterval &other)
{
}
+#endif
/*!
\fn QMediaTimeInterval::start() const
diff --git a/src/multimedia/qmediatimerange.h b/src/multimedia/qmediatimerange.h
index 5b6d711af..71145adde 100644
--- a/src/multimedia/qmediatimerange.h
+++ b/src/multimedia/qmediatimerange.h
@@ -54,8 +54,12 @@ class Q_MULTIMEDIA_EXPORT QMediaTimeInterval
public:
QMediaTimeInterval();
QMediaTimeInterval(qint64 start, qint64 end);
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QMediaTimeInterval(const QMediaTimeInterval&);
QMediaTimeInterval &operator=(const QMediaTimeInterval&) = default;
+ QMediaTimeInterval(QMediaTimeInterval &&) = default;
+ QMediaTimeInterval &operator=(QMediaTimeInterval &&) = default;
+#endif
qint64 start() const;
qint64 end() const;
diff --git a/src/multimedia/radio/qradiodata.cpp b/src/multimedia/radio/qradiodata.cpp
index d71488b52..4c824a4f8 100644
--- a/src/multimedia/radio/qradiodata.cpp
+++ b/src/multimedia/radio/qradiodata.cpp
@@ -473,6 +473,6 @@ QString QRadioData::errorString() const
\value College
*/
-#include "moc_qradiodata.cpp"
QT_END_NAMESPACE
+#include "moc_qradiodata.cpp"
diff --git a/src/multimedia/radio/qradiotuner.cpp b/src/multimedia/radio/qradiotuner.cpp
index cc9abdbf8..2af0d0f02 100644
--- a/src/multimedia/radio/qradiotuner.cpp
+++ b/src/multimedia/radio/qradiotuner.cpp
@@ -654,6 +654,6 @@ QRadioData *QRadioTuner::radioData() const
This signal is emitted when the state changes to \a state.
*/
-#include "moc_qradiotuner.cpp"
QT_END_NAMESPACE
+#include "moc_qradiotuner.cpp"
diff --git a/src/multimedia/recording/qaudiorecorder.cpp b/src/multimedia/recording/qaudiorecorder.cpp
index dcbdabc17..1db5c54a2 100644
--- a/src/multimedia/recording/qaudiorecorder.cpp
+++ b/src/multimedia/recording/qaudiorecorder.cpp
@@ -243,8 +243,6 @@ void QAudioRecorder::setAudioInput(const QString& name)
Signal is emitted when the available audio inputs change.
*/
-
-
-#include "moc_qaudiorecorder.cpp"
QT_END_NAMESPACE
+#include "moc_qaudiorecorder.cpp"
diff --git a/src/multimedia/recording/qmediarecorder.cpp b/src/multimedia/recording/qmediarecorder.cpp
index 2b7729481..1d562a00e 100644
--- a/src/multimedia/recording/qmediarecorder.cpp
+++ b/src/multimedia/recording/qmediarecorder.cpp
@@ -1105,6 +1105,6 @@ QStringList QMediaRecorder::availableMetaData() const
Signal the changes of one meta-data element \a value with the given \a key.
*/
-#include "moc_qmediarecorder.cpp"
QT_END_NAMESPACE
+#include "moc_qmediarecorder.cpp"
diff --git a/src/multimedia/video/qvideoframe.h b/src/multimedia/video/qvideoframe.h
index b0710cd27..617b0a1d9 100644
--- a/src/multimedia/video/qvideoframe.h
+++ b/src/multimedia/video/qvideoframe.h
@@ -86,7 +86,6 @@ public:
Format_AYUV444_Premultiplied,
Format_YUV444,
Format_YUV420P,
- Format_YUV422P,
Format_YV12,
Format_UYVY,
Format_YUYV,
@@ -103,6 +102,7 @@ public:
Format_CameraRaw,
Format_AdobeDng,
+ Format_YUV422P, // ### Qt 6: reorder
#ifndef Q_QDOC
NPixelFormats,
diff --git a/src/multimediawidgets/qgraphicsvideoitem.cpp b/src/multimediawidgets/qgraphicsvideoitem.cpp
index 38f5c0e5b..2db8987fb 100644
--- a/src/multimediawidgets/qgraphicsvideoitem.cpp
+++ b/src/multimediawidgets/qgraphicsvideoitem.cpp
@@ -415,5 +415,6 @@ void QGraphicsVideoItem::timerEvent(QTimerEvent *event)
QGraphicsObject::timerEvent(event);
}
-#include "moc_qgraphicsvideoitem.cpp"
QT_END_NAMESPACE
+
+#include "moc_qgraphicsvideoitem.cpp"
diff --git a/src/multimediawidgets/qpaintervideosurface.cpp b/src/multimediawidgets/qpaintervideosurface.cpp
index 6af0c7588..944ea23a7 100644
--- a/src/multimediawidgets/qpaintervideosurface.cpp
+++ b/src/multimediawidgets/qpaintervideosurface.cpp
@@ -1761,7 +1761,6 @@ void QPainterVideoSurface::createPainter()
#endif
}
-#include "moc_qpaintervideosurface_p.cpp"
QT_END_NAMESPACE
-
+#include "moc_qpaintervideosurface_p.cpp"
diff --git a/src/multimediawidgets/qpaintervideosurface_p.h b/src/multimediawidgets/qpaintervideosurface_p.h
index bf0a0ac5c..990d20cbe 100644
--- a/src/multimediawidgets/qpaintervideosurface_p.h
+++ b/src/multimediawidgets/qpaintervideosurface_p.h
@@ -68,7 +68,7 @@ QT_USE_NAMESPACE
QT_BEGIN_NAMESPACE
-class QVideoSurfacePainter
+class Q_AUTOTEST_EXPORT QVideoSurfacePainter
{
public:
virtual ~QVideoSurfacePainter();
diff --git a/src/multimediawidgets/qvideowidget.cpp b/src/multimediawidgets/qvideowidget.cpp
index 991901097..a7d3665f8 100644
--- a/src/multimediawidgets/qvideowidget.cpp
+++ b/src/multimediawidgets/qvideowidget.cpp
@@ -77,7 +77,7 @@ QVideoWidgetControlBackend::QVideoWidgetControlBackend(
connect(control, SIGNAL(fullScreenChanged(bool)), widget, SLOT(_q_fullScreenChanged(bool)));
QBoxLayout *layout = new QVBoxLayout;
- layout->setMargin(0);
+ layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
QWidget *videoWidget = control->videoWidget();
@@ -1027,7 +1027,7 @@ bool QVideoWidget::nativeEvent(const QByteArray &eventType, void *message, long
}
#endif
-#include "moc_qvideowidget.cpp"
-#include "moc_qvideowidget_p.cpp"
QT_END_NAMESPACE
+#include "moc_qvideowidget.cpp"
+#include "moc_qvideowidget_p.cpp"
diff --git a/src/multimediawidgets/qvideowidgetcontrol.cpp b/src/multimediawidgets/qvideowidgetcontrol.cpp
index a71500dbd..7f72c620e 100644
--- a/src/multimediawidgets/qvideowidgetcontrol.cpp
+++ b/src/multimediawidgets/qvideowidgetcontrol.cpp
@@ -219,6 +219,6 @@ QVideoWidgetControl::~QVideoWidgetControl()
Returns the QWidget.
*/
-#include "moc_qvideowidgetcontrol.cpp"
QT_END_NAMESPACE
+#include "moc_qvideowidgetcontrol.cpp"
diff --git a/src/plugins/android/src/common/qandroidvideooutput.cpp b/src/plugins/android/src/common/qandroidvideooutput.cpp
index 083ceff24..25e67e865 100644
--- a/src/plugins/android/src/common/qandroidvideooutput.cpp
+++ b/src/plugins/android/src/common/qandroidvideooutput.cpp
@@ -110,7 +110,7 @@ public:
m_image = m_output->m_fbo->toImage();
if (numBytes)
- *numBytes = m_image.byteCount();
+ *numBytes = static_cast<int>(m_image.sizeInBytes());
if (bytesPerLine)
*bytesPerLine = m_image.bytesPerLine();
diff --git a/src/plugins/android/src/wrappers/jni/androidcamera.cpp b/src/plugins/android/src/wrappers/jni/androidcamera.cpp
index a92a3373a..2f32fb742 100644
--- a/src/plugins/android/src/wrappers/jni/androidcamera.cpp
+++ b/src/plugins/android/src/wrappers/jni/androidcamera.cpp
@@ -52,6 +52,8 @@
#include <QtCore/qmutex.h>
#include <QtMultimedia/private/qmemoryvideobuffer_p.h>
+#include <mutex>
+
QT_BEGIN_NAMESPACE
static const char QtCameraListenerClassName[] = "org/qtproject/qt5/android/multimedia/QtCameraListener";
@@ -263,7 +265,7 @@ public:
Q_INVOKABLE QStringList callParametersStringListMethod(const QByteArray &methodName);
int m_cameraId;
- QMutex m_parametersMutex;
+ QRecursiveMutex m_parametersMutex;
QSize m_previewSize;
int m_rotation;
QJNIObjectPrivate m_info;
@@ -823,8 +825,7 @@ void AndroidCamera::stopPreviewSynchronous()
}
AndroidCameraPrivate::AndroidCameraPrivate()
- : QObject(),
- m_parametersMutex(QMutex::Recursive)
+ : QObject()
{
}
@@ -911,7 +912,7 @@ int AndroidCameraPrivate::getNativeOrientation()
QSize AndroidCameraPrivate::getPreferredPreviewSizeForVideo()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return QSize();
@@ -929,7 +930,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPreviewSizes()
{
QList<QSize> list;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_parameters.isValid()) {
QJNIObjectPrivate sizeList = m_parameters.callObjectMethod("getSupportedPreviewSizes",
@@ -950,7 +951,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPreviewSizes()
QList<AndroidCamera::FpsRange> AndroidCameraPrivate::getSupportedPreviewFpsRange()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QJNIEnvironmentPrivate env;
@@ -987,7 +988,7 @@ QList<AndroidCamera::FpsRange> AndroidCameraPrivate::getSupportedPreviewFpsRange
AndroidCamera::FpsRange AndroidCameraPrivate::getPreviewFpsRange()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QJNIEnvironmentPrivate env;
@@ -1012,7 +1013,7 @@ AndroidCamera::FpsRange AndroidCameraPrivate::getPreviewFpsRange()
void AndroidCameraPrivate::setPreviewFpsRange(int min, int max)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1024,7 +1025,7 @@ void AndroidCameraPrivate::setPreviewFpsRange(int min, int max)
AndroidCamera::ImageFormat AndroidCameraPrivate::getPreviewFormat()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return AndroidCamera::UnknownImageFormat;
@@ -1034,7 +1035,7 @@ AndroidCamera::ImageFormat AndroidCameraPrivate::getPreviewFormat()
void AndroidCameraPrivate::setPreviewFormat(AndroidCamera::ImageFormat fmt)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1047,7 +1048,7 @@ QList<AndroidCamera::ImageFormat> AndroidCameraPrivate::getSupportedPreviewForma
{
QList<AndroidCamera::ImageFormat> list;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_parameters.isValid()) {
QJNIObjectPrivate formatList = m_parameters.callObjectMethod("getSupportedPreviewFormats",
@@ -1066,7 +1067,7 @@ QList<AndroidCamera::ImageFormat> AndroidCameraPrivate::getSupportedPreviewForma
QSize AndroidCameraPrivate::getPreviewSize()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return QSize();
@@ -1082,7 +1083,7 @@ QSize AndroidCameraPrivate::getPreviewSize()
void AndroidCameraPrivate::updatePreviewSize()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_previewSize.isValid()) {
m_parameters.callMethod<void>("setPreviewSize", "(II)V", m_previewSize.width(), m_previewSize.height());
@@ -1117,7 +1118,7 @@ void AndroidCameraPrivate::setDisplayOrientation(int degrees)
bool AndroidCameraPrivate::isZoomSupported()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1127,7 +1128,7 @@ bool AndroidCameraPrivate::isZoomSupported()
int AndroidCameraPrivate::getMaxZoom()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1137,7 +1138,7 @@ int AndroidCameraPrivate::getMaxZoom()
QList<int> AndroidCameraPrivate::getZoomRatios()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QList<int> ratios;
@@ -1159,7 +1160,7 @@ QList<int> AndroidCameraPrivate::getZoomRatios()
int AndroidCameraPrivate::getZoom()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1169,7 +1170,7 @@ int AndroidCameraPrivate::getZoom()
void AndroidCameraPrivate::setZoom(int value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1180,7 +1181,7 @@ void AndroidCameraPrivate::setZoom(int value)
QString AndroidCameraPrivate::getFlashMode()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1196,7 +1197,7 @@ QString AndroidCameraPrivate::getFlashMode()
void AndroidCameraPrivate::setFlashMode(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1209,7 +1210,7 @@ void AndroidCameraPrivate::setFlashMode(const QString &value)
QString AndroidCameraPrivate::getFocusMode()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1225,7 +1226,7 @@ QString AndroidCameraPrivate::getFocusMode()
void AndroidCameraPrivate::setFocusMode(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1241,7 +1242,7 @@ int AndroidCameraPrivate::getMaxNumFocusAreas()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return 0;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1256,7 +1257,7 @@ QList<QRect> AndroidCameraPrivate::getFocusAreas()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return areas;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (m_parameters.isValid()) {
QJNIObjectPrivate list = m_parameters.callObjectMethod("getFocusAreas",
@@ -1282,7 +1283,7 @@ void AndroidCameraPrivate::setFocusAreas(const QList<QRect> &areas)
if (QtAndroidPrivate::androidSdkVersion() < 14)
return;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1330,7 +1331,7 @@ bool AndroidCameraPrivate::isAutoExposureLockSupported()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1343,7 +1344,7 @@ bool AndroidCameraPrivate::getAutoExposureLock()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1356,7 +1357,7 @@ void AndroidCameraPrivate::setAutoExposureLock(bool toggle)
if (QtAndroidPrivate::androidSdkVersion() < 14)
return;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1370,7 +1371,7 @@ bool AndroidCameraPrivate::isAutoWhiteBalanceLockSupported()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1383,7 +1384,7 @@ bool AndroidCameraPrivate::getAutoWhiteBalanceLock()
if (QtAndroidPrivate::androidSdkVersion() < 14)
return false;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return false;
@@ -1396,7 +1397,7 @@ void AndroidCameraPrivate::setAutoWhiteBalanceLock(bool toggle)
if (QtAndroidPrivate::androidSdkVersion() < 14)
return;
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1407,7 +1408,7 @@ void AndroidCameraPrivate::setAutoWhiteBalanceLock(bool toggle)
int AndroidCameraPrivate::getExposureCompensation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1417,7 +1418,7 @@ int AndroidCameraPrivate::getExposureCompensation()
void AndroidCameraPrivate::setExposureCompensation(int value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1428,7 +1429,7 @@ void AndroidCameraPrivate::setExposureCompensation(int value)
float AndroidCameraPrivate::getExposureCompensationStep()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1438,7 +1439,7 @@ float AndroidCameraPrivate::getExposureCompensationStep()
int AndroidCameraPrivate::getMinExposureCompensation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1448,7 +1449,7 @@ int AndroidCameraPrivate::getMinExposureCompensation()
int AndroidCameraPrivate::getMaxExposureCompensation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return 0;
@@ -1458,7 +1459,7 @@ int AndroidCameraPrivate::getMaxExposureCompensation()
QString AndroidCameraPrivate::getSceneMode()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1474,7 +1475,7 @@ QString AndroidCameraPrivate::getSceneMode()
void AndroidCameraPrivate::setSceneMode(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1487,7 +1488,7 @@ void AndroidCameraPrivate::setSceneMode(const QString &value)
QString AndroidCameraPrivate::getWhiteBalance()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QString value;
@@ -1503,7 +1504,7 @@ QString AndroidCameraPrivate::getWhiteBalance()
void AndroidCameraPrivate::setWhiteBalance(const QString &value)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1518,7 +1519,7 @@ void AndroidCameraPrivate::setWhiteBalance(const QString &value)
void AndroidCameraPrivate::updateRotation()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
m_parameters.callMethod<void>("setRotation", "(I)V", m_rotation);
applyParameters();
@@ -1526,7 +1527,7 @@ void AndroidCameraPrivate::updateRotation()
QList<QSize> AndroidCameraPrivate::getSupportedPictureSizes()
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QList<QSize> list;
@@ -1549,7 +1550,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPictureSizes()
void AndroidCameraPrivate::setPictureSize(const QSize &size)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1560,7 +1561,7 @@ void AndroidCameraPrivate::setPictureSize(const QSize &size)
void AndroidCameraPrivate::setJpegQuality(int quality)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
if (!m_parameters.isValid())
return;
@@ -1669,7 +1670,7 @@ void AndroidCameraPrivate::applyParameters()
QStringList AndroidCameraPrivate::callParametersStringListMethod(const QByteArray &methodName)
{
- QMutexLocker parametersLocker(&m_parametersMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_parametersMutex);
QStringList stringList;
diff --git a/src/plugins/avfoundation/camera/avfcamerautility.mm b/src/plugins/avfoundation/camera/avfcamerautility.mm
index e68fc703b..8c743dcbc 100644
--- a/src/plugins/avfoundation/camera/avfcamerautility.mm
+++ b/src/plugins/avfoundation/camera/avfcamerautility.mm
@@ -47,6 +47,7 @@
#include <functional>
#include <algorithm>
#include <limits>
+#include <tuple>
QT_BEGIN_NAMESPACE
@@ -85,14 +86,18 @@ inline bool qt_area_sane(const QSize &size)
&& std::numeric_limits<int>::max() / size.width() >= size.height();
}
-struct ResolutionPredicate : std::binary_function<AVCaptureDeviceFormat *, AVCaptureDeviceFormat *, bool>
+template <template <typename...> class Comp> // std::less or std::greater (or std::equal_to)
+struct ByResolution
{
bool operator() (AVCaptureDeviceFormat *f1, AVCaptureDeviceFormat *f2)const
{
Q_ASSERT(f1 && f2);
const QSize r1(qt_device_format_resolution(f1));
const QSize r2(qt_device_format_resolution(f2));
- return r1.width() < r2.width() || (r2.width() == r1.width() && r1.height() < r2.height());
+ // use std::tuple for lexicograpical sorting:
+ const Comp<std::tuple<int, int>> op = {};
+ return op(std::make_tuple(r1.width(), r1.height()),
+ std::make_tuple(r2.width(), r2.height()));
}
};
@@ -143,7 +148,7 @@ QVector<AVCaptureDeviceFormat *> qt_unique_device_formats(AVCaptureDevice *captu
if (!formats.size())
return formats;
- std::sort(formats.begin(), formats.end(), ResolutionPredicate());
+ std::sort(formats.begin(), formats.end(), ByResolution<std::less>());
QSize size(qt_device_format_resolution(formats[0]));
FourCharCode codec = CMVideoFormatDescriptionGetCodecType(formats[0].formatDescription);
@@ -309,7 +314,7 @@ AVCaptureDeviceFormat *qt_find_best_framerate_match(AVCaptureDevice *captureDevi
QVector<AVCaptureDeviceFormat *>sorted(qt_unique_device_formats(captureDevice, filter));
// Sort formats by their resolution in decreasing order:
- std::sort(sorted.begin(), sorted.end(), std::not2(ResolutionPredicate()));
+ std::sort(sorted.begin(), sorted.end(), ByResolution<std::greater>());
// We can use only formats with framerate ranges:
sorted.erase(std::remove_if(sorted.begin(), sorted.end(), FormatHasNoFPSRange()), sorted.end());
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm
index b2c6638cc..51f961729 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideoframerenderer.mm
@@ -135,12 +135,14 @@ QOpenGLFramebufferObject *AVFVideoFrameRenderer::initRenderer(AVPlayerLayer *lay
|| (!QOpenGLContext::currentContext() && !m_glContext)) {
//Create Hidden QWindow surface to create context in this thread
+ delete m_offscreenSurface;
m_offscreenSurface = new QWindow();
m_offscreenSurface->setSurfaceType(QWindow::OpenGLSurface);
//Needs geometry to be a valid surface, but size is not important
m_offscreenSurface->setGeometry(0, 0, 1, 1);
m_offscreenSurface->create();
+ delete m_glContext;
m_glContext = new QOpenGLContext();
m_glContext->setFormat(m_offscreenSurface->requestedFormat());
@@ -157,6 +159,13 @@ QOpenGLFramebufferObject *AVFVideoFrameRenderer::initRenderer(AVPlayerLayer *lay
qWarning("failed to create QOpenGLContext");
return nullptr;
}
+
+ // CARenderer must be re-created with different current context, so release it now.
+ // See lines below where m_videoLayerRenderer is constructed.
+ if (m_videoLayerRenderer) {
+ [m_videoLayerRenderer release];
+ m_videoLayerRenderer = nullptr;
+ }
}
//Need current context
diff --git a/src/plugins/common/evr/evrcustompresenter.cpp b/src/plugins/common/evr/evrcustompresenter.cpp
index 3de8d3ac3..b2dd0426c 100644
--- a/src/plugins/common/evr/evrcustompresenter.cpp
+++ b/src/plugins/common/evr/evrcustompresenter.cpp
@@ -50,6 +50,9 @@
#include <qcoreapplication.h>
#include <qmath.h>
#include <QtCore/qdebug.h>
+
+#include <mutex>
+
#include <float.h>
#include <evcode.h>
@@ -542,7 +545,6 @@ EVRCustomPresenter::EVRCustomPresenter(QAbstractVideoSurface *surface)
, m_sampleFreeCB(this, &EVRCustomPresenter::onSampleFree)
, m_refCount(1)
, m_renderState(RenderShutdown)
- , m_mutex(QMutex::Recursive)
, m_scheduler(this)
, m_tokenCounter(0)
, m_sampleNotify(false)
@@ -557,6 +559,7 @@ EVRCustomPresenter::EVRCustomPresenter(QAbstractVideoSurface *surface)
, m_mediaType(0)
, m_surface(0)
, m_canRenderToSurface(false)
+ , m_positionOffset(0)
{
// Initial source rectangle = (0,0,1,1)
m_sourceRect.top = 0;
@@ -658,7 +661,7 @@ HRESULT EVRCustomPresenter::InitServicePointers(IMFTopologyServiceLookup *lookup
HRESULT hr = S_OK;
DWORD objectCount = 0;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
// Do not allow initializing when playing or paused.
if (isActive())
@@ -738,7 +741,7 @@ HRESULT EVRCustomPresenter::ProcessMessage(MFVP_MESSAGE_TYPE message, ULONG_PTR
{
HRESULT hr = S_OK;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
hr = checkShutdown();
if (FAILED(hr))
@@ -805,7 +808,7 @@ HRESULT EVRCustomPresenter::GetCurrentMediaType(IMFVideoMediaType **mediaType)
*mediaType = NULL;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
hr = checkShutdown();
if (FAILED(hr))
@@ -819,7 +822,7 @@ HRESULT EVRCustomPresenter::GetCurrentMediaType(IMFVideoMediaType **mediaType)
HRESULT EVRCustomPresenter::OnClockStart(MFTIME, LONGLONG clockStartOffset)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
// We cannot start after shutdown.
HRESULT hr = checkShutdown();
@@ -854,7 +857,7 @@ HRESULT EVRCustomPresenter::OnClockStart(MFTIME, LONGLONG clockStartOffset)
HRESULT EVRCustomPresenter::OnClockRestart(MFTIME)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
if (FAILED(hr))
@@ -878,7 +881,7 @@ HRESULT EVRCustomPresenter::OnClockRestart(MFTIME)
HRESULT EVRCustomPresenter::OnClockStop(MFTIME)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
if (FAILED(hr))
@@ -898,7 +901,7 @@ HRESULT EVRCustomPresenter::OnClockStop(MFTIME)
HRESULT EVRCustomPresenter::OnClockPause(MFTIME)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
// We cannot pause the clock after shutdown.
HRESULT hr = checkShutdown();
@@ -915,7 +918,7 @@ HRESULT EVRCustomPresenter::OnClockSetRate(MFTIME, float rate)
// The presenter reports its maximum rate through the IMFRateSupport interface.
// Here, we assume that the EVR honors the maximum rate.
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
if (FAILED(hr))
@@ -943,7 +946,7 @@ HRESULT EVRCustomPresenter::GetSlowestRate(MFRATE_DIRECTION, BOOL, float *rate)
if (!rate)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = checkShutdown();
@@ -960,7 +963,7 @@ HRESULT EVRCustomPresenter::GetFastestRate(MFRATE_DIRECTION direction, BOOL thin
if (!rate)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
float maxRate = 0.0f;
@@ -982,7 +985,7 @@ HRESULT EVRCustomPresenter::GetFastestRate(MFRATE_DIRECTION direction, BOOL thin
HRESULT EVRCustomPresenter::IsRateSupported(BOOL thin, float rate, float *nearestSupportedRate)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
float maxRate = 0.0f;
float nearestRate = rate; // If we support rate, that is the nearest.
@@ -1016,7 +1019,7 @@ HRESULT EVRCustomPresenter::IsRateSupported(BOOL thin, float rate, float *neares
void EVRCustomPresenter::supportedFormatsChanged()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_canRenderToSurface = false;
m_presentEngine->setHint(D3DPresentEngine::RenderToTexture, false);
@@ -1143,7 +1146,7 @@ HRESULT EVRCustomPresenter::flush()
sample->Release();
m_frameStep.samples.clear();
- if (m_renderState == RenderStopped && m_surface->isActive()) {
+ if (m_renderState == RenderStopped && m_surface && m_surface->isActive()) {
// Repaint with black.
presentSample(NULL);
}
@@ -1932,6 +1935,15 @@ void EVRCustomPresenter::presentSample(IMFSample *sample)
QVideoFrame frame = m_presentEngine->makeVideoFrame(sample);
+ // Since start/end times are related to a position when the clock is started,
+ // to have times from the beginning, need to adjust it by adding seeked position.
+ if (m_positionOffset) {
+ if (frame.startTime())
+ frame.setStartTime(frame.startTime() + m_positionOffset);
+ if (frame.endTime())
+ frame.setEndTime(frame.endTime() + m_positionOffset);
+ }
+
if (!m_surface->isActive() || m_surface->surfaceFormat() != m_presentEngine->videoSurfaceFormat()) {
m_surface->stop();
if (!m_surface->start(m_presentEngine->videoSurfaceFormat()))
@@ -1941,6 +1953,11 @@ void EVRCustomPresenter::presentSample(IMFSample *sample)
m_surface->present(frame);
}
+void EVRCustomPresenter::positionChanged(qint64 position)
+{
+ m_positionOffset = position * 1000;
+}
+
HRESULT setDesiredSampleTime(IMFSample *sample, const LONGLONG &sampleTime, const LONGLONG &duration)
{
if (!sample)
diff --git a/src/plugins/common/evr/evrcustompresenter.h b/src/plugins/common/evr/evrcustompresenter.h
index bd04bd952..c1c21580e 100644
--- a/src/plugins/common/evr/evrcustompresenter.h
+++ b/src/plugins/common/evr/evrcustompresenter.h
@@ -264,6 +264,9 @@ public:
bool event(QEvent *) override;
+public Q_SLOTS:
+ void positionChanged(qint64 position);
+
private:
HRESULT checkShutdown() const
{
@@ -339,7 +342,7 @@ private:
RenderState m_renderState;
FrameStep m_frameStep;
- QMutex m_mutex;
+ QRecursiveMutex m_mutex;
// Samples and scheduling
Scheduler m_scheduler; // Manages scheduling of samples.
@@ -364,6 +367,7 @@ private:
QAbstractVideoSurface *m_surface;
bool m_canRenderToSurface;
+ qint64 m_positionOffset; // Seek position in microseconds.
};
bool qt_evr_setCustomPresenter(IUnknown *evr, EVRCustomPresenter *presenter);
diff --git a/src/plugins/common/evr/evrd3dpresentengine.cpp b/src/plugins/common/evr/evrd3dpresentengine.cpp
index 4ce5a99d7..d8e2da6d3 100644
--- a/src/plugins/common/evr/evrd3dpresentengine.cpp
+++ b/src/plugins/common/evr/evrd3dpresentengine.cpp
@@ -593,6 +593,17 @@ QVideoFrame D3DPresentEngine::makeVideoFrame(IMFSample *sample)
m_surfaceFormat.frameSize(),
m_surfaceFormat.pixelFormat());
+ // WMF uses 100-nanosecond units, Qt uses microseconds
+ LONGLONG startTime = 0;
+ auto hr = sample->GetSampleTime(&startTime);
+ if (SUCCEEDED(hr)) {
+ frame.setStartTime(startTime * 0.1);
+
+ LONGLONG duration = -1;
+ if (SUCCEEDED(sample->GetSampleDuration(&duration)))
+ frame.setEndTime((startTime + duration) * 0.1);
+ }
+
return frame;
}
diff --git a/src/plugins/directshow/camera/directshowcameraglobal.h b/src/plugins/directshow/camera/directshowcameraglobal.h
index 8df387b4a..917ae2dc7 100644
--- a/src/plugins/directshow/camera/directshowcameraglobal.h
+++ b/src/plugins/directshow/camera/directshowcameraglobal.h
@@ -65,7 +65,7 @@ extern const CLSID CLSID_VideoInputDeviceCategory;
extern const CLSID CLSID_SampleGrabber;
extern const CLSID CLSID_CaptureGraphBuilder2;
-#define SAFE_RELEASE(x) { if(x) x->Release(); x = NULL; }
+#define SAFE_RELEASE(x) { if (x) x->Release(); x = nullptr; }
typedef struct IFileSinkFilter *LPFILESINKFILTER;
typedef struct IAMCopyCaptureFileProgress *LPAMCOPYCAPTUREFILEPROGRESS;
diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp
index 27cdd84db..a0c120816 100644
--- a/src/plugins/directshow/camera/dscamerasession.cpp
+++ b/src/plugins/directshow/camera/dscamerasession.cpp
@@ -59,8 +59,8 @@ QT_BEGIN_NAMESPACE
DSCameraSession::DSCameraSession(QObject *parent)
: QObject(parent)
{
- connect(this, SIGNAL(statusChanged(QCamera::Status)),
- this, SLOT(updateReadyForCapture()));
+ connect(this, &DSCameraSession::statusChanged,
+ this, &DSCameraSession::updateReadyForCapture);
m_deviceLostEventTimer.setSingleShot(true);
connect(&m_deviceLostEventTimer, &QTimer::timeout, [&]() {
@@ -690,7 +690,7 @@ bool DSCameraSession::createFilterGraph()
IEnumMoniker* pEnum = nullptr;
// Create the filter graph
- hr = CoCreateInstance(CLSID_FilterGraph,nullptr,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");
diff --git a/src/plugins/directshow/camera/dsimagecapturecontrol.cpp b/src/plugins/directshow/camera/dsimagecapturecontrol.cpp
index 2a6a794d5..e4d2eee30 100644
--- a/src/plugins/directshow/camera/dsimagecapturecontrol.cpp
+++ b/src/plugins/directshow/camera/dsimagecapturecontrol.cpp
@@ -47,16 +47,16 @@ DSImageCaptureControl::DSImageCaptureControl(DSCameraSession *session)
: QCameraImageCaptureControl(session)
, m_session(session)
{
- connect(m_session, SIGNAL(imageExposed(int)),
- this, SIGNAL(imageExposed(int)));
- connect(m_session, SIGNAL(imageCaptured(int,QImage)),
- this, SIGNAL(imageCaptured(int,QImage)));
- connect(m_session, SIGNAL(imageSaved(int,QString)),
- this, SIGNAL(imageSaved(int,QString)));
- connect(m_session, SIGNAL(readyForCaptureChanged(bool)),
- this, SIGNAL(readyForCaptureChanged(bool)));
- connect(m_session, SIGNAL(captureError(int,int,QString)),
- this, SIGNAL(error(int,int,QString)));
+ connect(m_session, &DSCameraSession::imageExposed,
+ this, &DSImageCaptureControl::imageExposed);
+ connect(m_session, &DSCameraSession::imageCaptured,
+ this, &DSImageCaptureControl::imageCaptured);
+ connect(m_session, &DSCameraSession::imageSaved,
+ this, &DSImageCaptureControl::imageSaved);
+ connect(m_session, &DSCameraSession::readyForCaptureChanged,
+ this, &DSImageCaptureControl::readyForCaptureChanged);
+ connect(m_session, &DSCameraSession::captureError,
+ this, &DSImageCaptureControl::error);
connect(m_session, &DSCameraSession::imageAvailable,
this, &DSImageCaptureControl::imageAvailable);
}
diff --git a/src/plugins/directshow/common/directshowbasefilter.cpp b/src/plugins/directshow/common/directshowbasefilter.cpp
index dfea2460f..3a13dce0e 100644
--- a/src/plugins/directshow/common/directshowbasefilter.cpp
+++ b/src/plugins/directshow/common/directshowbasefilter.cpp
@@ -41,13 +41,12 @@
#include "directshowpinenum.h"
+#include <mutex>
+
QT_BEGIN_NAMESPACE
DirectShowBaseFilter::DirectShowBaseFilter()
- : m_mutex(QMutex::Recursive)
-{
-
-}
+ = default;
DirectShowBaseFilter::~DirectShowBaseFilter()
{
@@ -78,7 +77,7 @@ HRESULT DirectShowBaseFilter::NotifyEvent(long eventCode, LONG_PTR eventParam1,
HRESULT DirectShowBaseFilter::Run(REFERENCE_TIME tStart)
{
Q_UNUSED(tStart)
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_startTime = tStart;
@@ -95,7 +94,7 @@ HRESULT DirectShowBaseFilter::Run(REFERENCE_TIME tStart)
HRESULT DirectShowBaseFilter::Pause()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_state == State_Stopped) {
const QList<DirectShowPin *> pinList = pins();
@@ -115,7 +114,7 @@ HRESULT DirectShowBaseFilter::Pause()
HRESULT DirectShowBaseFilter::Stop()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
HRESULT hr = S_OK;
@@ -142,7 +141,7 @@ HRESULT DirectShowBaseFilter::GetState(DWORD dwMilliSecsTimeout, FILTER_STATE *p
if (!pState) {
return E_POINTER;
} else {
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
*pState = m_state;
@@ -152,7 +151,7 @@ HRESULT DirectShowBaseFilter::GetState(DWORD dwMilliSecsTimeout, FILTER_STATE *p
HRESULT DirectShowBaseFilter::SetSyncSource(IReferenceClock *pClock)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_clock)
m_clock->Release();
@@ -192,7 +191,7 @@ HRESULT DirectShowBaseFilter::FindPin(LPCWSTR Id, IPin **ppPin)
if (!ppPin || !Id)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
const QList<DirectShowPin *> pinList = pins();
for (DirectShowPin *pin : pinList) {
if (pin->name() == QStringView(Id)) {
@@ -208,7 +207,7 @@ HRESULT DirectShowBaseFilter::FindPin(LPCWSTR Id, IPin **ppPin)
HRESULT DirectShowBaseFilter::JoinFilterGraph(IFilterGraph *pGraph, LPCWSTR pName)
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_filterName = QString::fromWCharArray(pName);
m_graph = pGraph;
diff --git a/src/plugins/directshow/common/directshowbasefilter.h b/src/plugins/directshow/common/directshowbasefilter.h
index ea5b8fafe..ce30891d7 100644
--- a/src/plugins/directshow/common/directshowbasefilter.h
+++ b/src/plugins/directshow/common/directshowbasefilter.h
@@ -78,7 +78,7 @@ public:
STDMETHODIMP QueryVendorInfo(LPWSTR *pVendorInfo) override;
protected:
- QMutex m_mutex;
+ QRecursiveMutex m_mutex;
FILTER_STATE m_state = State_Stopped;
IFilterGraph *m_graph = nullptr;
IReferenceClock *m_clock = nullptr;
diff --git a/src/plugins/directshow/common/directshoweventloop.cpp b/src/plugins/directshow/common/directshoweventloop.cpp
index a38c26ef4..692c873cf 100644
--- a/src/plugins/directshow/common/directshoweventloop.cpp
+++ b/src/plugins/directshow/common/directshoweventloop.cpp
@@ -66,8 +66,8 @@ public:
DirectShowEventLoop::DirectShowEventLoop(QObject *parent)
: QObject(parent)
- , m_eventHandle(::CreateEvent(nullptr, 0, 0, nullptr))
- , m_waitHandle(::CreateEvent(nullptr, 0, 0, nullptr))
+ , m_eventHandle(::CreateEvent(nullptr, FALSE, FALSE, nullptr))
+ , m_waitHandle(::CreateEvent(nullptr, FALSE, FALSE, nullptr))
{
}
diff --git a/src/plugins/directshow/common/directshowpin.cpp b/src/plugins/directshow/common/directshowpin.cpp
index 390d410a4..d8129748c 100644
--- a/src/plugins/directshow/common/directshowpin.cpp
+++ b/src/plugins/directshow/common/directshowpin.cpp
@@ -45,11 +45,12 @@
#include <qdebug.h>
+#include <mutex>
+
QT_BEGIN_NAMESPACE
DirectShowPin::DirectShowPin(DirectShowBaseFilter *filter, const QString &name, PIN_DIRECTION direction)
- : m_mutex(QMutex::Recursive)
- , m_filter(filter)
+ : m_filter(filter)
, m_name(name)
, m_direction(direction)
{
@@ -63,7 +64,7 @@ HRESULT DirectShowPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
return E_POINTER;
HRESULT hr = E_FAIL;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_peerPin)
return VFW_E_ALREADY_CONNECTED;
@@ -169,7 +170,7 @@ HRESULT DirectShowPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *
if (!pConnector || !pmt)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_peerPin)
return VFW_E_ALREADY_CONNECTED;
@@ -206,7 +207,7 @@ HRESULT DirectShowPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *
HRESULT DirectShowPin::Disconnect()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_filter->state() != State_Stopped)
return VFW_E_NOT_STOPPED;
@@ -232,7 +233,7 @@ HRESULT DirectShowPin::ConnectedTo(IPin **ppPin)
if (!ppPin)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (!m_peerPin) {
*ppPin = nullptr;
return VFW_E_NOT_CONNECTED;
@@ -247,7 +248,7 @@ HRESULT DirectShowPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt)
if (!pmt)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (!m_peerPin) {
DirectShowMediaType::init(pmt);
return VFW_E_NOT_CONNECTED;
@@ -531,14 +532,14 @@ HRESULT DirectShowInputPin::EndOfStream()
HRESULT DirectShowInputPin::BeginFlush()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_flushing = true;
return S_OK;
}
HRESULT DirectShowInputPin::EndFlush()
{
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
m_flushing = false;
m_inErrorState = false;
return S_OK;
@@ -549,7 +550,7 @@ HRESULT DirectShowInputPin::GetAllocator(IMemAllocator **ppAllocator)
if (!ppAllocator)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (!m_allocator) {
m_allocator = com_new<IMemAllocator>(CLSID_MemoryAllocator);;
@@ -570,7 +571,7 @@ HRESULT DirectShowInputPin::NotifyAllocator(IMemAllocator *pAllocator, BOOL bRea
if (!pAllocator)
return E_POINTER;
- QMutexLocker locker(&m_mutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_mutex);
if (m_allocator)
m_allocator->Release();
diff --git a/src/plugins/directshow/common/directshowpin.h b/src/plugins/directshow/common/directshowpin.h
index bb5a07ad7..160191ef3 100644
--- a/src/plugins/directshow/common/directshowpin.h
+++ b/src/plugins/directshow/common/directshowpin.h
@@ -96,7 +96,7 @@ public:
protected:
DirectShowPin(DirectShowBaseFilter *filter, const QString &name, PIN_DIRECTION direction);
- QMutex m_mutex;
+ QRecursiveMutex m_mutex;
DirectShowBaseFilter *m_filter;
QString m_name;
diff --git a/src/plugins/directshow/common/directshowutils.cpp b/src/plugins/directshow/common/directshowutils.cpp
index 21b86926f..1457837ce 100644
--- a/src/plugins/directshow/common/directshowutils.cpp
+++ b/src/plugins/directshow/common/directshowutils.cpp
@@ -309,4 +309,17 @@ bool DirectShowUtils::connectFilters(IGraphBuilder *graph,
return false;
}
+thread_local static int g_refCount = 0;
+void DirectShowUtils::CoInitializeIfNeeded()
+{
+ if (++g_refCount == 1)
+ ::CoInitialize(nullptr);
+}
+
+void DirectShowUtils::CoUninitializeIfNeeded()
+{
+ if (--g_refCount == 0)
+ ::CoUninitialize();
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/common/directshowutils.h b/src/plugins/directshow/common/directshowutils.h
index 09c81c257..5f2cfaa23 100644
--- a/src/plugins/directshow/common/directshowutils.h
+++ b/src/plugins/directshow/common/directshowutils.h
@@ -80,6 +80,10 @@ bool connectFilters(IGraphBuilder *graph,
IBaseFilter *downstreamFilter,
bool autoConnect = false,
HRESULT *hrOut = nullptr);
+
+void CoInitializeIfNeeded();
+void CoUninitializeIfNeeded();
+
}
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/dsserviceplugin.cpp b/src/plugins/directshow/dsserviceplugin.cpp
index e22bfe93b..18a807fd1 100644
--- a/src/plugins/directshow/dsserviceplugin.cpp
+++ b/src/plugins/directshow/dsserviceplugin.cpp
@@ -54,6 +54,7 @@
#include "directshowplayerservice.h"
#include <qmediaserviceproviderplugin.h>
+#include "directshowutils.h"
extern const CLSID CLSID_VideoInputDeviceCategory;
@@ -74,28 +75,15 @@ extern const CLSID CLSID_VideoInputDeviceCategory;
QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(qtDirectShowPlugin, "qt.multimedia.plugins.directshow")
-static int g_refCount = 0;
-void addRefCount()
-{
- if (++g_refCount == 1)
- CoInitialize(nullptr);
-}
-
-void releaseRefCount()
-{
- if (--g_refCount == 0)
- CoUninitialize();
-}
-
QMediaService* DSServicePlugin::create(QString const& key)
{
if (key == QLatin1String(Q_MEDIASERVICE_CAMERA)) {
- addRefCount();
+ DirectShowUtils::CoInitializeIfNeeded();
return new DSCameraService;
}
if (key == QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER)) {
- addRefCount();
+ DirectShowUtils::CoInitializeIfNeeded();
return new DirectShowPlayerService;
}
@@ -105,7 +93,7 @@ QMediaService* DSServicePlugin::create(QString const& key)
void DSServicePlugin::release(QMediaService *service)
{
delete service;
- releaseRefCount();
+ DirectShowUtils::CoUninitializeIfNeeded();
}
QMediaServiceProviderHint::Features DSServicePlugin::supportedFeatures(
@@ -119,9 +107,9 @@ QMediaServiceProviderHint::Features DSServicePlugin::supportedFeatures(
QByteArray DSServicePlugin::defaultDevice(const QByteArray &service) const
{
if (service == Q_MEDIASERVICE_CAMERA) {
- addRefCount();
+ DirectShowUtils::CoInitializeIfNeeded();
const QList<DSVideoDeviceInfo> &devs = DSVideoDeviceControl::availableDevices();
- releaseRefCount();
+ DirectShowUtils::CoUninitializeIfNeeded();
if (!devs.isEmpty())
return devs.first().first;
}
@@ -133,9 +121,9 @@ QList<QByteArray> DSServicePlugin::devices(const QByteArray &service) const
QList<QByteArray> result;
if (service == Q_MEDIASERVICE_CAMERA) {
- addRefCount();
+ DirectShowUtils::CoInitializeIfNeeded();
const QList<DSVideoDeviceInfo> &devs = DSVideoDeviceControl::availableDevices();
- releaseRefCount();
+ DirectShowUtils::CoUninitializeIfNeeded();
for (const DSVideoDeviceInfo &info : devs)
result.append(info.first);
}
@@ -146,9 +134,9 @@ QList<QByteArray> DSServicePlugin::devices(const QByteArray &service) const
QString DSServicePlugin::deviceDescription(const QByteArray &service, const QByteArray &device)
{
if (service == Q_MEDIASERVICE_CAMERA) {
- addRefCount();
+ DirectShowUtils::CoInitializeIfNeeded();
const QList<DSVideoDeviceInfo> &devs = DSVideoDeviceControl::availableDevices();
- releaseRefCount();
+ DirectShowUtils::CoUninitializeIfNeeded();
for (const DSVideoDeviceInfo &info : devs) {
if (info.first == device)
return info.second;
diff --git a/src/plugins/directshow/player/directshowioreader.cpp b/src/plugins/directshow/player/directshowioreader.cpp
index b903038ea..ced10ea10 100644
--- a/src/plugins/directshow/player/directshowioreader.cpp
+++ b/src/plugins/directshow/player/directshowioreader.cpp
@@ -82,7 +82,7 @@ DirectShowIOReader::DirectShowIOReader(
{
moveToThread(device->thread());
- connect(device, SIGNAL(readyRead()), this, SLOT(readyRead()));
+ connect(device, &QIODevice::readyRead, this, &DirectShowIOReader::readyRead);
}
DirectShowIOReader::~DirectShowIOReader()
diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp
index 56a428028..42105c471 100644
--- a/src/plugins/directshow/player/directshowplayerservice.cpp
+++ b/src/plugins/directshow/player/directshowplayerservice.cpp
@@ -124,7 +124,7 @@ private:
DirectShowPlayerService::DirectShowPlayerService(QObject *parent)
: QMediaService(parent)
, m_loop(qt_directShowEventLoop())
- , m_taskHandle(::CreateEvent(nullptr, 0, 0, nullptr))
+ , m_taskHandle(::CreateEvent(nullptr, FALSE, FALSE, nullptr))
{
m_playerControl = new DirectShowPlayerControl(this);
m_metaDataControl = new DirectShowMetaDataControl(this);
@@ -181,8 +181,8 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name)
if (!m_videoRendererControl && !m_videoWindowControl) {
m_videoRendererControl = new DirectShowVideoRendererControl(m_loop);
- connect(m_videoRendererControl, SIGNAL(filterChanged()),
- this, SLOT(videoOutputChanged()));
+ connect(m_videoRendererControl, &DirectShowVideoRendererControl::filterChanged,
+ this, &DirectShowPlayerService::videoOutputChanged);
return m_videoRendererControl;
}
@@ -275,6 +275,7 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
releaseGraph();
m_url = media.request().url();
+
m_stream = stream;
m_error = QMediaPlayer::NoError;
m_errorString = QString();
@@ -302,6 +303,7 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
0x36b73882, 0xc2c8, 0x11cf, {0x8b, 0x46, 0x00, 0x80, 0x5f, 0x6c, 0xef, 0x60} };
m_graphStatus = Loading;
+ DirectShowUtils::CoInitializeIfNeeded();
m_graph = com_new<IFilterGraph2>(CLSID_FilterGraph, iid_IFilterGraph2);
m_graphBuilder = com_new<ICaptureGraphBuilder2>(CLSID_CaptureGraphBuilder2, IID_ICaptureGraphBuilder2);
@@ -639,6 +641,7 @@ void DirectShowPlayerService::releaseGraph()
::SetEvent(m_taskHandle);
m_loop->wait(&m_mutex);
+ DirectShowUtils::CoUninitializeIfNeeded();
}
}
@@ -1435,6 +1438,9 @@ void DirectShowPlayerService::customEvent(QEvent *event)
if (m_playerControl->mediaStatus() == QMediaPlayer::EndOfMedia)
m_playerControl->updateStatus(QMediaPlayer::LoadedMedia);
m_playerControl->updatePosition(m_position);
+ // Emits only when seek has been performed.
+ if (m_videoRendererControl)
+ emit m_videoRendererControl->positionChanged(m_position);
} else {
QMediaService::customEvent(event);
}
diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
index 19be82141..0b1f0de2f 100644
--- a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
+++ b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
@@ -96,6 +96,7 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
if (!qgetenv("QT_DIRECTSHOW_NO_EVR").toInt()) {
m_filter = com_new<IBaseFilter>(clsid_EnhancedVideoRenderer);
m_evrPresenter = new EVRCustomPresenter(m_surface);
+ connect(this, &DirectShowVideoRendererControl::positionChanged, m_evrPresenter, &EVRCustomPresenter::positionChanged);
if (!m_evrPresenter->isValid() || !qt_evr_setCustomPresenter(m_filter, m_evrPresenter)) {
m_filter->Release();
m_filter = nullptr;
diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.h b/src/plugins/directshow/player/directshowvideorenderercontrol.h
index dcbcadb4b..9326a2748 100644
--- a/src/plugins/directshow/player/directshowvideorenderercontrol.h
+++ b/src/plugins/directshow/player/directshowvideorenderercontrol.h
@@ -68,6 +68,7 @@ public:
Q_SIGNALS:
void filterChanged();
+ void positionChanged(qint64 position);
private:
DirectShowEventLoop *m_loop;
diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp
index 8dd18dc1b..4b7afc266 100644
--- a/src/plugins/directshow/player/videosurfacefilter.cpp
+++ b/src/plugins/directshow/player/videosurfacefilter.cpp
@@ -47,6 +47,8 @@
#include <QtCore/qloggingcategory.h>
#include <qabstractvideosurface.h>
+#include <mutex>
+
#include <initguid.h>
QT_BEGIN_NAMESPACE
@@ -154,7 +156,7 @@ HRESULT VideoSurfaceInputPin::Disconnect()
HRESULT VideoSurfaceInputPin::EndOfStream()
{
QMutexLocker lock(&m_videoSurfaceFilter->m_mutex);
- QMutexLocker renderLock(&m_videoSurfaceFilter->m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex);
HRESULT hr = DirectShowInputPin::EndOfStream();
if (hr != S_OK)
@@ -167,7 +169,7 @@ HRESULT VideoSurfaceInputPin::BeginFlush()
{
QMutexLocker lock(&m_videoSurfaceFilter->m_mutex);
{
- QMutexLocker renderLock(&m_videoSurfaceFilter->m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex);
DirectShowInputPin::BeginFlush();
m_videoSurfaceFilter->BeginFlush();
}
@@ -179,7 +181,7 @@ HRESULT VideoSurfaceInputPin::BeginFlush()
HRESULT VideoSurfaceInputPin::EndFlush()
{
QMutexLocker lock(&m_videoSurfaceFilter->m_mutex);
- QMutexLocker renderLock(&m_videoSurfaceFilter->m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex);
HRESULT hr = m_videoSurfaceFilter->EndFlush();
if (SUCCEEDED(hr))
@@ -207,7 +209,7 @@ HRESULT VideoSurfaceInputPin::Receive(IMediaSample *pMediaSample)
if (m_videoSurfaceFilter->state() != State_Stopped && !m_flushing && !m_inErrorState) {
m_videoSurfaceFilter->NotifyEvent(EC_ERRORABORT, hr, 0);
{
- QMutexLocker renderLocker(&m_videoSurfaceFilter->m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_videoSurfaceFilter->m_renderMutex);
if (m_videoSurfaceFilter->m_running && !m_videoSurfaceFilter->m_EOSDelivered)
m_videoSurfaceFilter->notifyEOS();
}
@@ -223,7 +225,6 @@ VideoSurfaceFilter::VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectSho
: QObject(parent)
, m_loop(loop)
, m_surface(surface)
- , m_renderMutex(QMutex::Recursive)
, m_renderEvent(CreateEvent(nullptr, FALSE, FALSE, nullptr))
, m_flushEvent(CreateEvent(nullptr, TRUE, FALSE, nullptr))
{
@@ -366,7 +367,7 @@ HRESULT VideoSurfaceFilter::Run(REFERENCE_TIME tStart)
allocator->Release();
}
- QMutexLocker renderLocker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_renderMutex);
m_running = true;
@@ -443,7 +444,7 @@ HRESULT VideoSurfaceFilter::Stop()
HRESULT VideoSurfaceFilter::EndOfStream()
{
- QMutexLocker renderLocker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> renderLocker(m_renderMutex);
qCDebug(qLcRenderFilter, "EndOfStream");
@@ -499,7 +500,7 @@ HRESULT VideoSurfaceFilter::Receive(IMediaSample *pMediaSample)
}
{
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (m_pendingSample || m_EOS)
return E_UNEXPECTED;
@@ -543,13 +544,13 @@ HRESULT VideoSurfaceFilter::Receive(IMediaSample *pMediaSample)
return S_OK;
}
- QMutexLocker renderLock(&m_renderMutex);
+ std::unique_lock<QRecursiveMutex> renderLocker(m_renderMutex);
// Flush or pause might have happened just before the lock
if (m_pendingSample && m_running) {
- renderLock.unlock();
+ renderLocker.unlock();
renderPendingSample();
- renderLock.relock();
+ renderLocker.lock();
} else {
qCDebug(qLcRenderFilter, " discarding sample (%p)", pMediaSample);
}
@@ -602,7 +603,7 @@ void VideoSurfaceFilter::unscheduleSample()
void VideoSurfaceFilter::clearPendingSample()
{
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (m_pendingSample) {
qCDebug(qLcRenderFilter, "clearPendingSample");
m_pendingSample->Release();
@@ -618,7 +619,7 @@ void QT_WIN_CALLBACK EOSTimerCallback(UINT, UINT, DWORD_PTR dwUser, DWORD_PTR, D
void VideoSurfaceFilter::onEOSTimerTimeout()
{
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (m_EOSTimer) {
m_EOSTimer = 0;
@@ -628,7 +629,7 @@ void VideoSurfaceFilter::onEOSTimerTimeout()
void VideoSurfaceFilter::checkEOS()
{
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (!m_EOS || m_EOSDelivered || m_EOSTimer)
return;
@@ -663,7 +664,7 @@ void VideoSurfaceFilter::checkEOS()
void VideoSurfaceFilter::notifyEOS()
{
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (!m_running)
return;
@@ -679,7 +680,7 @@ void VideoSurfaceFilter::resetEOS()
{
resetEOSTimer();
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (m_EOS)
qCDebug(qLcRenderFilter, "resetEOS (delivered=%s)", m_EOSDelivered ? "true" : "false");
@@ -754,7 +755,7 @@ void VideoSurfaceFilter::renderPendingSample()
m_loop->postEvent(this, new QEvent(QEvent::Type(RenderSample)));
m_waitSurface.wait(&m_mutex);
} else {
- QMutexLocker locker(&m_renderMutex);
+ const std::lock_guard<QRecursiveMutex> locker(m_renderMutex);
if (!m_pendingSample)
return;
diff --git a/src/plugins/directshow/player/videosurfacefilter.h b/src/plugins/directshow/player/videosurfacefilter.h
index f11d015f1..9e56f4b65 100644
--- a/src/plugins/directshow/player/videosurfacefilter.h
+++ b/src/plugins/directshow/player/videosurfacefilter.h
@@ -141,7 +141,7 @@ private:
QList<GUID> m_supportedTypes;
QReadWriteLock m_typesLock;
- QMutex m_renderMutex;
+ QRecursiveMutex m_renderMutex;
bool m_running = false;
IMediaSample *m_pendingSample = nullptr;
REFERENCE_TIME m_pendingSampleEndTime = 0;
diff --git a/src/plugins/gstreamer/camerabin/camerabinv4limageprocessing.cpp b/src/plugins/gstreamer/camerabin/camerabinv4limageprocessing.cpp
index 6ca1dbe94..5b0c0d234 100644
--- a/src/plugins/gstreamer/camerabin/camerabinv4limageprocessing.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinv4limageprocessing.cpp
@@ -124,7 +124,8 @@ QVariant CameraBinV4LImageProcessing::parameter(
QMap<ProcessingParameter, SourceParameterValueInfo>::const_iterator sourceValueInfo =
m_parametersInfo.constFind(parameter);
if (sourceValueInfo == m_parametersInfo.constEnd()) {
- qWarning() << "Unable to get the parameter value: the parameter is not supported.";
+ if (!m_parametersInfo.empty())
+ qWarning() << "Unable to get the unsupported parameter:" << parameter;
return QVariant();
}
@@ -145,7 +146,7 @@ QVariant CameraBinV4LImageProcessing::parameter(
qt_safe_close(fd);
if (!ret) {
- qWarning() << "Unable to get the parameter value:" << qt_error_string(errno);
+ qWarning() << "Unable to get the parameter value:" << parameter << ":" << qt_error_string(errno);
return QVariant();
}
@@ -178,7 +179,8 @@ void CameraBinV4LImageProcessing::setParameter(
QMap<ProcessingParameter, SourceParameterValueInfo>::const_iterator sourceValueInfo =
m_parametersInfo.constFind(parameter);
if (sourceValueInfo == m_parametersInfo.constEnd()) {
- qWarning() << "Unable to set the parameter value: the parameter is not supported.";
+ if (!m_parametersInfo.empty())
+ qWarning() << "Unable to set the unsupported parameter:" << parameter;
return;
}
@@ -227,7 +229,7 @@ void CameraBinV4LImageProcessing::setParameter(
}
if (::ioctl(fd, VIDIOC_S_CTRL, &control) != 0)
- qWarning() << "Unable to set the parameter value:" << qt_error_string(errno);
+ qWarning() << "Unable to set the parameter value:" << parameter << ":" << qt_error_string(errno);
qt_safe_close(fd);
}
@@ -264,7 +266,8 @@ void CameraBinV4LImageProcessing::updateParametersInfo(
queryControl.id = supportedParametersEntries[i].cid;
if (::ioctl(fd, VIDIOC_QUERYCTRL, &queryControl) != 0) {
- qWarning() << "Unable to query the parameter info:" << qt_error_string(errno);
+ qWarning() << "Unable to query the parameter info:" << supportedParametersEntries[i].parameter
+ << ":" << qt_error_string(errno);
continue;
}
diff --git a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
index 361a2369a..98aaded72 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
@@ -50,16 +50,6 @@ QGstreamerAudioEncode::QGstreamerAudioEncode(QObject *parent)
:QAudioEncoderSettingsControl(parent)
, m_codecs(QGstCodecsInfo::AudioEncoder)
{
- for (const QString& codecName : m_codecs.supportedCodecs()) {
- GstElementFactory *factory = gst_element_factory_find(m_codecs.codecElement(codecName).constData());
-
- if (factory) {
- m_streamTypes.insert(codecName,
- QGstreamerMediaContainerControl::supportedStreamTypes(factory, GST_PAD_SRC));
-
- gst_object_unref(GST_OBJECT(factory));
- }
- }
}
QGstreamerAudioEncode::~QGstreamerAudioEncode()
@@ -245,5 +235,5 @@ GstElement *QGstreamerAudioEncode::createEncoder()
QSet<QString> QGstreamerAudioEncode::supportedStreamTypes(const QString &codecName) const
{
- return m_streamTypes.value(codecName);
+ return m_codecs.supportedStreamTypes(codecName);
}
diff --git a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h
index 04de602ad..0cfbb4e91 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h
+++ b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.h
@@ -86,8 +86,6 @@ private:
QMap<QString, QMap<QString, QVariant> > m_options;
- QMap<QString, QSet<QString> > m_streamTypes;
-
QAudioEncoderSettings m_audioSettings;
};
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp
index 05f1c8af5..33351476d 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.cpp
@@ -47,47 +47,11 @@ QGstreamerMediaContainerControl::QGstreamerMediaContainerControl(QObject *parent
:QMediaContainerControl(parent)
, m_containers(QGstCodecsInfo::Muxer)
{
- QSet<QString> allTypes;
-
- for (const QString& formatName : supportedContainers()) {
- GstElementFactory *factory = gst_element_factory_find(m_containers.codecElement(formatName).constData());
- if (factory) {
- if (formatName == QByteArray("raw")) {
- m_streamTypes.insert(formatName, allTypes);
- } else {
- QSet<QString> types = supportedStreamTypes(factory, GST_PAD_SINK);
- m_streamTypes.insert(formatName, types);
- allTypes.unite(types);
- }
-
- gst_object_unref(GST_OBJECT(factory));
- }
- }
}
-QSet<QString> QGstreamerMediaContainerControl::supportedStreamTypes(GstElementFactory *factory, GstPadDirection direction)
-{
- QSet<QString> types;
- const GList *pads = gst_element_factory_get_static_pad_templates(factory);
- for (const GList *pad = pads; pad; pad = g_list_next(pad)) {
- GstStaticPadTemplate *templ = (GstStaticPadTemplate*)pad->data;
- if (templ->direction == direction) {
- GstCaps *caps = gst_static_caps_get(&templ->static_caps);
- for (uint i=0; i<gst_caps_get_size(caps); i++) {
- GstStructure *structure = gst_caps_get_structure(caps, i);
- types.insert( QString::fromUtf8(gst_structure_get_name(structure)) );
- }
- gst_caps_unref(caps);
- }
- }
-
- return types;
-}
-
-
QSet<QString> QGstreamerMediaContainerControl::supportedStreamTypes(const QString &container) const
{
- return m_streamTypes.value(container);
+ return m_containers.supportedStreamTypes(container);
}
QString QGstreamerMediaContainerControl::containerExtension() const
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h
index 5c730b21d..02c7346b1 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h
+++ b/src/plugins/gstreamer/mediacapture/qgstreamermediacontainercontrol.h
@@ -68,14 +68,11 @@ public:
QSet<QString> supportedStreamTypes(const QString &container) const;
- static QSet<QString> supportedStreamTypes(GstElementFactory *factory, GstPadDirection direction);
-
QString containerExtension() const;
private:
QString m_format;
QGstCodecsInfo m_containers;
- QMap<QString, QSet<QString> > m_streamTypes;
};
QT_END_NAMESPACE
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
index 674e1034e..4cc0e5f25 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
@@ -49,15 +49,6 @@ QGstreamerVideoEncode::QGstreamerVideoEncode(QGstreamerCaptureSession *session)
:QVideoEncoderSettingsControl(session), m_session(session)
, m_codecs(QGstCodecsInfo::VideoEncoder)
{
- for (const QString& codecName : supportedVideoCodecs()) {
- GstElementFactory *factory = gst_element_factory_find(m_codecs.codecElement(codecName).constData());
- if (factory) {
- m_streamTypes.insert(codecName,
- QGstreamerMediaContainerControl::supportedStreamTypes(factory, GST_PAD_SRC));
-
- gst_object_unref(GST_OBJECT(factory));
- }
- }
}
QGstreamerVideoEncode::~QGstreamerVideoEncode()
@@ -301,5 +292,5 @@ QPair<int,int> QGstreamerVideoEncode::rateAsRational() const
QSet<QString> QGstreamerVideoEncode::supportedStreamTypes(const QString &codecName) const
{
- return m_streamTypes.value(codecName);
+ return m_codecs.supportedStreamTypes(codecName);
}
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h
index bc6636012..a35e2b456 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h
+++ b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.h
@@ -90,7 +90,6 @@ private:
QVideoEncoderSettings m_videoSettings;
QMap<QString, QMap<QString, QVariant> > m_options;
- QMap<QString, QSet<QString> > m_streamTypes;
};
QT_END_NAMESPACE
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreameravailabilitycontrol.h b/src/plugins/gstreamer/mediaplayer/qgstreameravailabilitycontrol.h
index 78299b608..e100fccc8 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreameravailabilitycontrol.h
+++ b/src/plugins/gstreamer/mediaplayer/qgstreameravailabilitycontrol.h
@@ -57,7 +57,7 @@ private Q_SLOTS:
void handleAvailabilityChanged();
private:
- QMediaPlayerResourceSetInterface *m_resources;
+ QMediaPlayerResourceSetInterface *m_resources = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h
index bf8f7e842..691453a42 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h
@@ -63,7 +63,7 @@ private slots:
void updateTags();
private:
- QGstreamerPlayerSession *m_session;
+ QGstreamerPlayerSession *m_session = nullptr;
QVariantMap m_tags;
};
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
index a28968145..4bf4a0a57 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
@@ -67,17 +67,8 @@
QT_BEGIN_NAMESPACE
-QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent):
- QMediaService(parent)
- , m_audioProbeControl(0)
- , m_videoProbeControl(0)
- , m_videoOutput(0)
- , m_videoRenderer(0)
- , m_videoWindow(0)
-#if defined(HAVE_WIDGETS)
- , m_videoWidget(0)
-#endif
- , m_videoReferenceCount(0)
+QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent)
+ : QMediaService(parent)
{
m_session = new QGstreamerPlayerSession(this);
m_control = new QGstreamerPlayerControl(m_session, this);
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h
index ec0c0944b..f88f0ae38 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h
@@ -73,25 +73,25 @@ public:
void releaseControl(QMediaControl *control) override;
private:
- QGstreamerPlayerControl *m_control;
- QGstreamerPlayerSession *m_session;
- QGstreamerMetaDataProvider *m_metaData;
- QGstreamerStreamsControl *m_streamsControl;
- QGStreamerAvailabilityControl *m_availabilityControl;
+ QGstreamerPlayerControl *m_control = nullptr;
+ QGstreamerPlayerSession *m_session = nullptr;
+ QGstreamerMetaDataProvider *m_metaData = nullptr;
+ QGstreamerStreamsControl *m_streamsControl = nullptr;
+ QGStreamerAvailabilityControl *m_availabilityControl = nullptr;
- QGstreamerAudioProbeControl *m_audioProbeControl;
- QGstreamerVideoProbeControl *m_videoProbeControl;
+ QGstreamerAudioProbeControl *m_audioProbeControl = nullptr;
+ QGstreamerVideoProbeControl *m_videoProbeControl = nullptr;
- QMediaControl *m_videoOutput;
- QMediaControl *m_videoRenderer;
- QGstreamerVideoWindow *m_videoWindow;
+ QMediaControl *m_videoOutput = nullptr;
+ QMediaControl *m_videoRenderer = nullptr;
+ QGstreamerVideoWindow *m_videoWindow = nullptr;
#if defined(HAVE_WIDGETS)
- QGstreamerVideoWidgetControl *m_videoWidget;
+ QGstreamerVideoWidgetControl *m_videoWidget = nullptr;
#endif
void increaseVideoRef();
void decreaseVideoRef();
- int m_videoReferenceCount;
+ int m_videoReferenceCount = 0;
};
QT_END_NAMESPACE
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerstreamscontrol.h b/src/plugins/gstreamer/mediaplayer/qgstreamerstreamscontrol.h
index 6f332c160..41932095c 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerstreamscontrol.h
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerstreamscontrol.h
@@ -62,7 +62,7 @@ public:
void setActive(int streamNumber, bool state) override;
private:
- QGstreamerPlayerSession *m_session;
+ QGstreamerPlayerSession *m_session = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
index 374ff2831..02d956b5b 100644
--- a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
+++ b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
@@ -762,17 +762,12 @@ void QWinRTMediaPlayerControl::setMedia(const QMediaContent &media, QIODevice *s
QString urlString = media.request().url().toString();
if (!d->stream) {
// If we can read the file via Qt, use the byte stream approach
- const auto resources = media.resources();
- for (const QMediaResource &resource : resources) {
- const QUrl url = resource.url();
- if (url.isLocalFile()) {
- urlString = url.toLocalFile();
- QScopedPointer<QFile> file(new QFile(urlString));
- if (file->open(QFile::ReadOnly)) {
- file->setProperty(QT_WINRT_MEDIAPLAYER_STREAM_ID, true);
- d->stream.reset(file.take());
- break;
- }
+ if (media.request().url().isLocalFile()) {
+ urlString = media.request().url().toLocalFile();
+ QScopedPointer<QFile> file(new QFile(urlString));
+ if (file->open(QFile::ReadOnly)) {
+ file->setProperty(QT_WINRT_MEDIAPLAYER_STREAM_ID, true);
+ d->stream.reset(file.take());
}
}
}
diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
index 4ef605e28..18cf0e927 100644
--- a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
+++ b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
@@ -411,8 +411,13 @@ void QDeclarativeVideoOutput::_q_updateGeometry()
m_contentRect.moveCenter(rect.center());
}
- if (m_backend)
- m_backend->updateGeometry();
+ if (m_backend) {
+ if (!m_backend->videoSurface() || m_backend->videoSurface()->isActive())
+ m_backend->updateGeometry();
+ else
+ m_geometryDirty = true;
+ }
+
if (m_contentRect != oldContentRect)
emit contentRectChanged();
diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp
index 5cb4689cc..40568d118 100644
--- a/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp
+++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp
@@ -390,8 +390,8 @@ QAbstractVideoSurface *QDeclarativeVideoRendererBackend::videoSurface() const
QRectF QDeclarativeVideoRendererBackend::adjustedViewport() const
{
- const QRectF viewport = m_surface->surfaceFormat().viewport();
- const QSizeF pixelAspectRatio = m_surface->surfaceFormat().pixelAspectRatio();
+ const QRectF viewport = m_surfaceFormat.viewport();
+ const QSizeF pixelAspectRatio = m_surfaceFormat.pixelAspectRatio();
if (pixelAspectRatio.isValid()) {
const qreal ratio = pixelAspectRatio.width() / pixelAspectRatio.height();
diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
index b0497be2f..ccd68aeec 100644
--- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
+++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
@@ -68,8 +68,10 @@ public slots:
void cleanupTestCase();
private slots:
+#if QT_DEPRECATED_SINCE(5, 3)
void testAvailableDevices();
void testDeviceDescription();
+#endif
void testCameraInfo();
void testCtorWithDevice();
void testCtorWithCameraInfo();
@@ -100,6 +102,7 @@ void tst_QCameraBackend::cleanupTestCase()
{
}
+#if QT_DEPRECATED_SINCE(5, 3)
void tst_QCameraBackend::testAvailableDevices()
{
int deviceCount = QMediaServiceProvider::defaultServiceProvider()->devices(QByteArray(Q_MEDIASERVICE_CAMERA)).count();
@@ -118,6 +121,7 @@ void tst_QCameraBackend::testDeviceDescription()
QVERIFY(QCamera::deviceDescription(device).length() > 0);
}
}
+#endif
void tst_QCameraBackend::testCameraInfo()
{
@@ -138,10 +142,11 @@ void tst_QCameraBackend::testCameraInfo()
void tst_QCameraBackend::testCtorWithDevice()
{
- if (QCamera::availableDevices().isEmpty())
+ const auto availableCameras = QCameraInfo::availableCameras();
+ if (availableCameras.isEmpty())
QSKIP("Camera selection not supported");
- QCamera *camera = new QCamera(QCamera::availableDevices().first());
+ QCamera *camera = new QCamera(availableCameras.first().deviceName().toLatin1());
QCOMPARE(camera->error(), QCamera::NoError);
delete camera;
@@ -625,11 +630,11 @@ void tst_QCameraBackend::testVideoRecording_data()
{
QTest::addColumn<QByteArray>("device");
- const QList<QByteArray> devices = QCamera::availableDevices();
+ const auto devices = QCameraInfo::availableCameras();
- for (const QByteArray &device : devices) {
- QTest::newRow(QCamera::deviceDescription(device).toUtf8())
- << device;
+ for (const auto &device : devices) {
+ QTest::newRow(device.description().toUtf8())
+ << device.deviceName().toLatin1();
}
if (devices.isEmpty())
diff --git a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
index b270e93eb..87c72521c 100644
--- a/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
+++ b/tests/auto/unit/qdeclarativeaudio/tst_qdeclarativeaudio.cpp
@@ -411,17 +411,17 @@ void tst_QDeclarativeAudio::source()
audio.setSource(url1);
QCOMPARE(audio.source(), url1);
- QCOMPARE(provider.playerControl()->media().canonicalUrl(), url1);
+ QCOMPARE(provider.playerControl()->media().request().url(), url1);
QCOMPARE(spy.count(), 1);
audio.setSource(url2);
QCOMPARE(audio.source(), url2);
- QCOMPARE(provider.playerControl()->media().canonicalUrl(), url2);
+ QCOMPARE(provider.playerControl()->media().request().url(), url2);
QCOMPARE(spy.count(), 2);
audio.setSource(url3);
QCOMPARE(audio.source(), url3);
- QCOMPARE(provider.playerControl()->media().canonicalUrl(), url3);
+ QCOMPARE(provider.playerControl()->media().request().url(), url3);
QCOMPARE(spy.count(), 3);
}
diff --git a/tests/auto/unit/qmediacontent/tst_qmediacontent.cpp b/tests/auto/unit/qmediacontent/tst_qmediacontent.cpp
index d10257c19..3c68a32b1 100644
--- a/tests/auto/unit/qmediacontent/tst_qmediacontent.cpp
+++ b/tests/auto/unit/qmediacontent/tst_qmediacontent.cpp
@@ -43,12 +43,16 @@ private slots:
void testNull();
void testUrlCtor();
void testRequestCtor();
+#if QT_DEPRECATED_SINCE(6, 0)
void testResourceCtor();
void testResourceListCtor();
+#endif
void testCopy();
void testAssignment();
void testEquality();
+#if QT_DEPRECATED_SINCE(6, 0)
void testResources();
+#endif
void testPlaylist();
};
@@ -57,17 +61,23 @@ void tst_QMediaContent::testNull()
QMediaContent media;
QCOMPARE(media.isNull(), true);
+ QCOMPARE(media.request().url(), QUrl());
+#if QT_DEPRECATED_SINCE(6, 0)
QCOMPARE(media.canonicalUrl(), QUrl());
QCOMPARE(media.canonicalResource(), QMediaResource());
QCOMPARE(media.resources(), QMediaResourceList());
+#endif
}
void tst_QMediaContent::testUrlCtor()
{
QMediaContent media(QUrl("http://example.com/movie.mov"));
+ QCOMPARE(media.request().url(), QUrl("http://example.com/movie.mov"));
+#if QT_DEPRECATED_SINCE(6, 0)
QCOMPARE(media.canonicalUrl(), QUrl("http://example.com/movie.mov"));
QCOMPARE(media.canonicalResource().url(), QUrl("http://example.com/movie.mov"));
+#endif
}
void tst_QMediaContent::testRequestCtor()
@@ -76,13 +86,18 @@ void tst_QMediaContent::testRequestCtor()
request.setAttribute(QNetworkRequest::User, QVariant(1234));
QMediaContent media(request);
+ QCOMPARE(media.request().url(), QUrl("http://example.com/movie.mov"));
+ QCOMPARE(media.request(), request);
+#if QT_DEPRECATED_SINCE(6, 0)
QCOMPARE(media.canonicalUrl(), QUrl("http://example.com/movie.mov"));
QCOMPARE(media.canonicalRequest(),request);
QCOMPARE(media.canonicalResource().request(), request);
QCOMPARE(media.canonicalResource().url(), QUrl("http://example.com/movie.mov"));
+#endif
}
+#if QT_DEPRECATED_SINCE(6, 0)
void tst_QMediaContent::testResourceCtor()
{
QMediaContent media(QMediaResource(QUrl("http://example.com/movie.mov")));
@@ -100,10 +115,11 @@ void tst_QMediaContent::testResourceListCtor()
QCOMPARE(media.canonicalUrl(), QUrl("http://example.com/movie.mov"));
QCOMPARE(media.canonicalResource().url(), QUrl("http://example.com/movie.mov"));
}
+#endif
void tst_QMediaContent::testCopy()
{
- QMediaContent media1(QMediaResource(QUrl("http://example.com/movie.mov")));
+ QMediaContent media1(QUrl("http://example.com/movie.mov"));
QMediaContent media2(media1);
QVERIFY(media1 == media2);
@@ -111,7 +127,7 @@ void tst_QMediaContent::testCopy()
void tst_QMediaContent::testAssignment()
{
- QMediaContent media1(QMediaResource(QUrl("http://example.com/movie.mov")));
+ QMediaContent media1(QUrl("http://example.com/movie.mov"));
QMediaContent media2;
QMediaContent media3;
@@ -126,9 +142,9 @@ void tst_QMediaContent::testEquality()
{
QMediaContent media1;
QMediaContent media2;
- QMediaContent media3(QMediaResource(QUrl("http://example.com/movie.mov")));
- QMediaContent media4(QMediaResource(QUrl("http://example.com/movie.mov")));
- QMediaContent media5(QMediaResource(QUrl("file:///some/where/over/the/rainbow.mp3")));
+ QMediaContent media3(QUrl("http://example.com/movie.mov"));
+ QMediaContent media4(QUrl("http://example.com/movie.mov"));
+ QMediaContent media5(QUrl("file:///some/where/over/the/rainbow.mp3"));
// null == null
QCOMPARE(media1 == media2, true);
@@ -147,6 +163,7 @@ void tst_QMediaContent::testEquality()
QCOMPARE(media4 != media5, true);
}
+#if QT_DEPRECATED_SINCE(6, 0)
void tst_QMediaContent::testResources()
{
QMediaResourceList resourceList;
@@ -160,17 +177,18 @@ void tst_QMediaContent::testResources()
QCOMPARE(res[0], QMediaResource(QUrl("http://example.com/movie-main.mov")));
QCOMPARE(res[1], QMediaResource(QUrl("http://example.com/movie-big.mov")));
}
+#endif
void tst_QMediaContent::testPlaylist()
{
QMediaContent media(QUrl("http://example.com/movie.mov"));
- QVERIFY(media.canonicalUrl().isValid());
+ QVERIFY(media.request().url().isValid());
QVERIFY(!media.playlist());
{
QPointer<QMediaPlaylist> playlist(new QMediaPlaylist);
media = QMediaContent(playlist.data(), QUrl("http://example.com/sample.m3u"), true);
- QVERIFY(media.canonicalUrl().isValid());
+ QVERIFY(media.request().url().isValid());
QCOMPARE(media.playlist(), playlist.data());
media = QMediaContent();
// Make sure playlist is destroyed by QMediaContent
@@ -189,7 +207,7 @@ void tst_QMediaContent::testPlaylist()
{
QPointer<QMediaPlaylist> playlist(new QMediaPlaylist);
media = QMediaContent(playlist.data(), QUrl(), false);
- QVERIFY(!media.canonicalUrl().isValid());
+ QVERIFY(!media.request().url().isValid());
QCOMPARE(media.playlist(), playlist.data());
media = QMediaContent();
QVERIFY(playlist);
diff --git a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
index 871ff3cc7..f2b993722 100644
--- a/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
+++ b/tests/auto/unit/qmediaplayer/tst_qmediaplayer.cpp
@@ -1293,7 +1293,7 @@ void tst_QMediaPlayer::testQrc()
}
// Check the media actually passed to the backend
- QCOMPARE(mockService->mockControl->media().canonicalUrl().scheme(), backendMediaContentScheme);
+ QCOMPARE(mockService->mockControl->media().request().url().scheme(), backendMediaContentScheme);
QCOMPARE(bool(mockService->mockControl->mediaStream()), backendHasStream);
}
diff --git a/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp b/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp
index 3a59823ca..9b1385dac 100644
--- a/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp
+++ b/tests/auto/unit/qmediaplaylist/tst_qmediaplaylist.cpp
@@ -542,19 +542,19 @@ void tst_QMediaPlaylist::loadM3uFile()
QCOMPARE(playlist.error(), QMediaPlaylist::NoError);
QCOMPARE(playlist.mediaCount(), 7);
- QCOMPARE(playlist.media(0).canonicalUrl(), QUrl(QLatin1String("http://test.host/path")));
- QCOMPARE(playlist.media(1).canonicalUrl(), QUrl(QLatin1String("http://test.host/path")));
+ QCOMPARE(playlist.media(0).request().url(), QUrl(QLatin1String("http://test.host/path")));
+ QCOMPARE(playlist.media(1).request().url(), QUrl(QLatin1String("http://test.host/path")));
testFileName = QFINDTESTDATA("testdata/testfile");
- QCOMPARE(playlist.media(2).canonicalUrl(),
+ QCOMPARE(playlist.media(2).request().url(),
QUrl::fromLocalFile(testFileName));
testFileName = QFINDTESTDATA("testdata");
- QCOMPARE(playlist.media(3).canonicalUrl(),
+ QCOMPARE(playlist.media(3).request().url(),
QUrl::fromLocalFile(testFileName + "/testdir/testfile"));
- QCOMPARE(playlist.media(4).canonicalUrl(), QUrl(QLatin1String("file:///testdir/testfile")));
- QCOMPARE(playlist.media(5).canonicalUrl(), QUrl(QLatin1String("file://path/name#suffix")));
+ QCOMPARE(playlist.media(4).request().url(), QUrl(QLatin1String("file:///testdir/testfile")));
+ QCOMPARE(playlist.media(5).request().url(), QUrl(QLatin1String("file://path/name#suffix")));
//ensure #2 suffix is not stripped from path
testFileName = QFINDTESTDATA("testdata/testfile2#suffix");
- QCOMPARE(playlist.media(6).canonicalUrl(), QUrl::fromLocalFile(testFileName));
+ QCOMPARE(playlist.media(6).request().url(), QUrl::fromLocalFile(testFileName));
// check ability to load from QNetworkRequest
loadSpy.clear();
@@ -597,19 +597,19 @@ void tst_QMediaPlaylist::loadPLSFile()
QCOMPARE(playlist.error(), QMediaPlaylist::NoError);
QCOMPARE(playlist.mediaCount(), 7);
- QCOMPARE(playlist.media(0).canonicalUrl(), QUrl(QLatin1String("http://test.host/path")));
- QCOMPARE(playlist.media(1).canonicalUrl(), QUrl(QLatin1String("http://test.host/path")));
+ QCOMPARE(playlist.media(0).request().url(), QUrl(QLatin1String("http://test.host/path")));
+ QCOMPARE(playlist.media(1).request().url(), QUrl(QLatin1String("http://test.host/path")));
testFileName = QFINDTESTDATA("testdata/testfile");
- QCOMPARE(playlist.media(2).canonicalUrl(),
+ QCOMPARE(playlist.media(2).request().url(),
QUrl::fromLocalFile(testFileName));
testFileName = QFINDTESTDATA("testdata");
- QCOMPARE(playlist.media(3).canonicalUrl(),
+ QCOMPARE(playlist.media(3).request().url(),
QUrl::fromLocalFile(testFileName + "/testdir/testfile"));
- QCOMPARE(playlist.media(4).canonicalUrl(), QUrl(QLatin1String("file:///testdir/testfile")));
- QCOMPARE(playlist.media(5).canonicalUrl(), QUrl(QLatin1String("file://path/name#suffix")));
+ QCOMPARE(playlist.media(4).request().url(), QUrl(QLatin1String("file:///testdir/testfile")));
+ QCOMPARE(playlist.media(5).request().url(), QUrl(QLatin1String("file://path/name#suffix")));
//ensure #2 suffix is not stripped from path
testFileName = QFINDTESTDATA("testdata/testfile2#suffix");
- QCOMPARE(playlist.media(6).canonicalUrl(), QUrl::fromLocalFile(testFileName));
+ QCOMPARE(playlist.media(6).request().url(), QUrl::fromLocalFile(testFileName));
// Try to load a totem-pl generated playlist
// (Format doesn't respect the spec)
@@ -622,7 +622,7 @@ void tst_QMediaPlaylist::loadPLSFile()
QVERIFY(loadFailedSpy.isEmpty());
QCOMPARE(playlist.error(), QMediaPlaylist::NoError);
QCOMPARE(playlist.mediaCount(), 1);
- QCOMPARE(playlist.media(0).canonicalUrl(), QUrl(QLatin1String("http://test.host/path")));
+ QCOMPARE(playlist.media(0).request().url(), QUrl(QLatin1String("http://test.host/path")));
// check ability to load from QNetworkRequest
diff --git a/tests/auto/unit/qmediaresource/tst_qmediaresource.cpp b/tests/auto/unit/qmediaresource/tst_qmediaresource.cpp
index cfb6b44e9..786570bec 100644
--- a/tests/auto/unit/qmediaresource/tst_qmediaresource.cpp
+++ b/tests/auto/unit/qmediaresource/tst_qmediaresource.cpp
@@ -37,6 +37,7 @@ class tst_QMediaResource : public QObject
{
Q_OBJECT
private slots:
+#if QT_DEPRECATED_SINCE(6, 0)
void constructNull();
void construct_data();
void construct();
@@ -47,8 +48,15 @@ private slots:
void constructorRequest();
void copyConstructor();
+#else
+ void initTestCase()
+ {
+ QSKIP("Skipping this test, QMediaResource is deprecated.");
+ }
+#endif
};
+#if QT_DEPRECATED_SINCE(6, 0)
void tst_QMediaResource::constructNull()
{
QMediaResource resource;
@@ -682,6 +690,8 @@ void tst_QMediaResource::copyConstructor()
QCOMPARE(original1 == copy1, true);
}
+#endif // QT_DEPRECATED_SINCE(6, 0)
+
QTEST_MAIN(tst_QMediaResource)
#include "tst_qmediaresource.moc"
diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.pro b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.pro
index 7fcaadbc2..813d102cb 100644
--- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.pro
+++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin1/mockserviceplugin1.pro
@@ -11,7 +11,7 @@ PLUGIN_CLASS_NAME = MockServicePlugin1
load(qt_plugin)
DESTDIR = ../$${PLUGIN_TYPE}
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
DESTDIR = ../debug/$${PLUGIN_TYPE}
} else {
diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.pro b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.pro
index 4ac001ec9..f2ac3291d 100644
--- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.pro
+++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin2/mockserviceplugin2.pro
@@ -11,7 +11,7 @@ PLUGIN_CLASS_NAME = MockServicePlugin2
load(qt_plugin)
DESTDIR = ../$${PLUGIN_TYPE}
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
DESTDIR = ../debug/$${PLUGIN_TYPE}
} else {
diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.pro b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.pro
index 34cd2fed1..51f87d9da 100644
--- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.pro
+++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin3/mockserviceplugin3.pro
@@ -11,7 +11,7 @@ PLUGIN_CLASS_NAME = MockServicePlugin3
load(qt_plugin)
DESTDIR = ../$${PLUGIN_TYPE}
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
DESTDIR = ../debug/$${PLUGIN_TYPE}
} else {
diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.pro b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.pro
index 0900bfc40..c3834ab03 100644
--- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.pro
+++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin4/mockserviceplugin4.pro
@@ -11,7 +11,7 @@ PLUGIN_CLASS_NAME = MockServicePlugin4
load(qt_plugin)
DESTDIR = ../$${PLUGIN_TYPE}
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
DESTDIR = ../debug/$${PLUGIN_TYPE}
} else {
diff --git a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin5/mockserviceplugin5.pro b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin5/mockserviceplugin5.pro
index 37f287f9d..b273c6b15 100644
--- a/tests/auto/unit/qmediaserviceprovider/mockserviceplugin5/mockserviceplugin5.pro
+++ b/tests/auto/unit/qmediaserviceprovider/mockserviceplugin5/mockserviceplugin5.pro
@@ -11,7 +11,7 @@ PLUGIN_CLASS_NAME = MockServicePlugin5
load(qt_plugin)
DESTDIR = ../$${PLUGIN_TYPE}
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
DESTDIR = ../debug/$${PLUGIN_TYPE}
} else {
diff --git a/tests/auto/unit/qmediaserviceprovider/test/test.pro b/tests/auto/unit/qmediaserviceprovider/test/test.pro
index 2cf78c100..94f7f259a 100644
--- a/tests/auto/unit/qmediaserviceprovider/test/test.pro
+++ b/tests/auto/unit/qmediaserviceprovider/test/test.pro
@@ -5,7 +5,7 @@ QT += multimedia-private testlib
SOURCES += ../tst_qmediaserviceprovider.cpp
-win32 {
+win32:debug_and_release {
CONFIG(debug, debug|release) {
TARGET = ../../debug/tst_qmediaserviceprovider
} else {
diff --git a/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h b/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h
index 229f70ea8..cc56e9adb 100644
--- a/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h
+++ b/tests/auto/unit/qmultimedia_common/mockmediaplaylistcontrol.h
@@ -82,7 +82,8 @@ public:
bool bMediaContentChanged = false;
int i = 0;
for (; i < playlistProvider()->mediaCount(); i++) {
- if (playlistProvider()->media(i).canonicalUrl().toString() != newProvider->media(i).canonicalUrl().toString()) {
+ if (playlistProvider()->media(i).request().url().toString()
+ != newProvider->media(i).request().url().toString()) {
bMediaContentChanged = true;
break;
}