summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVaL Doroshchuk <valentyn.doroshchuk@qt.io>2019-07-23 10:33:51 +0200
committerVaL Doroshchuk <valentyn.doroshchuk@qt.io>2019-07-23 10:33:51 +0200
commit14d6166b2790b37906fd76248d955659ff78622f (patch)
treef02ec37165b5ae47beb238aa23031e6e2106502f /src
parente99a2e1701179d0d28ef1d1eac696d480894f4bb (diff)
parent2eb0a98f1de07782004a5a4261cb5d2c46ca6d15 (diff)
Merge branch 'dev' of git://code.qt.io/qt/qtmultimedia into wip/qt6
Diffstat (limited to 'src')
-rw-r--r--src/gsttools/qgstappsrc.cpp4
-rw-r--r--src/gsttools/qgstreamerplayersession.cpp138
-rw-r--r--src/gsttools/qgstreamerplayersession_p.h3
-rw-r--r--src/gsttools/qgstutils.cpp6
-rw-r--r--src/gsttools/qgstvideorenderersink.cpp3
-rw-r--r--src/imports/multimedia/qdeclarativecamera.cpp2
-rw-r--r--src/multimedia/audio/qaudiobuffer.cpp6
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo.cpp17
-rw-r--r--src/multimedia/audio/qaudiodeviceinfo.h2
-rw-r--r--src/multimedia/audio/qsamplecache_p.cpp12
-rw-r--r--src/multimedia/camera/qcameraexposure.h4
-rw-r--r--src/multimedia/camera/qcamerafocus.h4
-rw-r--r--src/multimedia/camera/qcameraimageprocessing.h4
-rw-r--r--src/multimedia/doc/qtmultimedia.qdocconf1
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/audio.cpp3
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/camera.cpp12
-rw-r--r--src/multimedia/doc/snippets/multimedia-snippets/media.cpp4
-rw-r--r--src/multimedia/qmediatimerange.h1
-rw-r--r--src/multimediawidgets/qpaintervideosurface.cpp25
-rw-r--r--src/plugins/alsa/qalsaaudioinput.h6
-rw-r--r--src/plugins/alsa/qalsaaudiooutput.h6
-rw-r--r--src/plugins/android/src/wrappers/jni/androidcamera.cpp4
-rw-r--r--src/plugins/avfoundation/camera/avfcamerasession.mm2
-rw-r--r--src/plugins/avfoundation/camera/avfmediarecordercontrol.mm6
-rw-r--r--src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.mm2
-rw-r--r--src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h38
-rw-r--r--src/plugins/common/evr/evrcustompresenter.cpp2
-rw-r--r--src/plugins/common/evr/evrd3dpresentengine.cpp10
-rw-r--r--src/plugins/directshow/camera/dscameracontrol.cpp2
-rw-r--r--src/plugins/directshow/camera/dscameracontrol.h6
-rw-r--r--src/plugins/directshow/camera/dscameraservice.cpp6
-rw-r--r--src/plugins/directshow/camera/dscameraservice.h6
-rw-r--r--src/plugins/directshow/camera/dscamerasession.cpp101
-rw-r--r--src/plugins/directshow/camera/dscamerasession.h37
-rw-r--r--src/plugins/directshow/camera/dsvideodevicecontrol.cpp18
-rw-r--r--src/plugins/directshow/camera/dsvideodevicecontrol.h4
-rw-r--r--src/plugins/directshow/camera/dsvideorenderer.cpp1
-rw-r--r--src/plugins/directshow/camera/dsvideorenderer.h4
-rw-r--r--src/plugins/directshow/common/directshowbasefilter.cpp13
-rw-r--r--src/plugins/directshow/common/directshowbasefilter.h10
-rw-r--r--src/plugins/directshow/common/directshoweventloop.cpp11
-rw-r--r--src/plugins/directshow/common/directshoweventloop.h6
-rw-r--r--src/plugins/directshow/common/directshowglobal.h16
-rw-r--r--src/plugins/directshow/common/directshowmediatype.cpp2
-rw-r--r--src/plugins/directshow/common/directshowmediatypeenum.cpp8
-rw-r--r--src/plugins/directshow/common/directshowmediatypeenum.h4
-rw-r--r--src/plugins/directshow/common/directshowpin.cpp42
-rw-r--r--src/plugins/directshow/common/directshowpin.h14
-rw-r--r--src/plugins/directshow/common/directshowpinenum.cpp5
-rw-r--r--src/plugins/directshow/common/directshowpinenum.h4
-rw-r--r--src/plugins/directshow/common/directshowsamplegrabber.cpp10
-rw-r--r--src/plugins/directshow/common/directshowsamplegrabber.h8
-rw-r--r--src/plugins/directshow/common/directshowutils.cpp4
-rw-r--r--src/plugins/directshow/common/directshowvideobuffer.cpp4
-rw-r--r--src/plugins/directshow/directshow.pro4
-rw-r--r--src/plugins/directshow/dsserviceplugin.cpp4
-rw-r--r--src/plugins/directshow/player/directshowaudioendpointcontrol.cpp22
-rw-r--r--src/plugins/directshow/player/directshowaudioendpointcontrol.h6
-rw-r--r--src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp3
-rw-r--r--src/plugins/directshow/player/directshowevrvideowindowcontrol.h4
-rw-r--r--src/plugins/directshow/player/directshowioreader.cpp34
-rw-r--r--src/plugins/directshow/player/directshowioreader.h24
-rw-r--r--src/plugins/directshow/player/directshowiosource.cpp19
-rw-r--r--src/plugins/directshow/player/directshowiosource.h18
-rw-r--r--src/plugins/directshow/player/directshowmetadatacontrol.cpp21
-rw-r--r--src/plugins/directshow/player/directshowmetadatacontrol.h4
-rw-r--r--src/plugins/directshow/player/directshowplayercontrol.cpp16
-rw-r--r--src/plugins/directshow/player/directshowplayercontrol.h30
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.cpp139
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.h66
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.cpp13
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.h8
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.cpp32
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.h22
-rw-r--r--src/plugins/directshow/player/vmr9videowindowcontrol.cpp13
-rw-r--r--src/plugins/directshow/player/vmr9videowindowcontrol.h20
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp4
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp4
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp4
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp5
-rw-r--r--src/plugins/pulseaudio/qaudioinput_pulse.h6
-rw-r--r--src/plugins/windowsaudio/qwindowsaudiodeviceinfo.cpp5
-rw-r--r--src/plugins/windowsaudio/qwindowsaudioinput.cpp1
-rw-r--r--src/plugins/windowsaudio/qwindowsaudioinput.h6
-rw-r--r--src/plugins/windowsaudio/qwindowsaudiooutput.cpp1
-rw-r--r--src/plugins/windowsaudio/qwindowsaudiooutput.h6
-rw-r--r--src/plugins/wmf/player/mftvideo.cpp2
87 files changed, 561 insertions, 678 deletions
diff --git a/src/gsttools/qgstappsrc.cpp b/src/gsttools/qgstappsrc.cpp
index 823f95655..2d312862d 100644
--- a/src/gsttools/qgstappsrc.cpp
+++ b/src/gsttools/qgstappsrc.cpp
@@ -195,10 +195,10 @@ void QGstAppSrc::pushDataToAppSrc()
}
#endif
}
- } else {
+ } else if (!m_sequential) {
sendEOS();
}
- } else if (m_stream->atEnd()) {
+ } else if (m_stream->atEnd() && !m_sequential) {
sendEOS();
}
}
diff --git a/src/gsttools/qgstreamerplayersession.cpp b/src/gsttools/qgstreamerplayersession.cpp
index 24f9b788b..0e4fd2179 100644
--- a/src/gsttools/qgstreamerplayersession.cpp
+++ b/src/gsttools/qgstreamerplayersession.cpp
@@ -61,9 +61,9 @@
#include <QtCore/qdir.h>
#include <QtCore/qstandardpaths.h>
#include <qvideorenderercontrol.h>
+#include <QUrlQuery>
//#define DEBUG_PLAYBIN
-//#define DEBUG_VO_BIN_DUMP
QT_BEGIN_NAMESPACE
@@ -319,7 +319,7 @@ void QGstreamerPlayerSession::loadFromStream(const QNetworkRequest &request, QIO
m_appSrc = new QGstAppSrc(this);
m_appSrc->setStream(appSrcStream);
- if (m_playbin) {
+ if (!parsePipeline() && m_playbin) {
m_tags.clear();
emit tagsChanged();
@@ -351,28 +351,7 @@ void QGstreamerPlayerSession::loadFromUri(const QNetworkRequest &request)
}
#endif
- if (m_request.url().scheme() == QLatin1String("gst-pipeline")) {
- // Set current surface to video sink before creating a pipeline.
- auto renderer = qobject_cast<QVideoRendererControl*>(m_videoOutput);
- if (renderer)
- QVideoSurfaceGstSink::setSurface(renderer->surface());
-
- QString url = m_request.url().toString(QUrl::RemoveScheme);
- QString pipeline = QUrl::fromPercentEncoding(url.toLatin1().constData());
- GError *err = nullptr;
- GstElement *element = gst_parse_launch(pipeline.toLatin1().constData(), &err);
- if (err) {
- auto errstr = QLatin1String(err->message);
- qWarning() << "Error:" << pipeline << ":" << errstr;
- emit error(QMediaPlayer::FormatError, errstr);
- g_clear_error(&err);
- }
-
- setPipeline(element);
- return;
- }
-
- if (m_playbin) {
+ if (!parsePipeline() && m_playbin) {
m_tags.clear();
emit tagsChanged();
@@ -387,17 +366,61 @@ void QGstreamerPlayerSession::loadFromUri(const QNetworkRequest &request)
}
}
-void QGstreamerPlayerSession::setPipeline(GstElement *pipeline)
+bool QGstreamerPlayerSession::parsePipeline()
+{
+ if (m_request.url().scheme() != QLatin1String("gst-pipeline"))
+ return false;
+
+ // Set current surface to video sink before creating a pipeline.
+ auto renderer = qobject_cast<QVideoRendererControl *>(m_videoOutput);
+ if (renderer)
+ QVideoSurfaceGstSink::setSurface(renderer->surface());
+
+ QString url = m_request.url().toString(QUrl::RemoveScheme);
+ QString desc = QUrl::fromPercentEncoding(url.toLatin1().constData());
+ GError *err = nullptr;
+ GstElement *pipeline = gst_parse_launch(desc.toLatin1().constData(), &err);
+ if (err) {
+ auto errstr = QLatin1String(err->message);
+ qWarning() << "Error:" << desc << ":" << errstr;
+ emit error(QMediaPlayer::FormatError, errstr);
+ g_clear_error(&err);
+ }
+
+ return setPipeline(pipeline);
+}
+
+static void gst_foreach(GstIterator *it, const std::function<bool(GstElement *)> &cmp)
+{
+#if GST_CHECK_VERSION(1,0,0)
+ GValue value = G_VALUE_INIT;
+ while (gst_iterator_next (it, &value) == GST_ITERATOR_OK) {
+ auto child = static_cast<GstElement*>(g_value_get_object(&value));
+#else
+ GstElement *child = nullptr;
+ while (gst_iterator_next(it, reinterpret_cast<gpointer *>(&child)) == GST_ITERATOR_OK) {
+#endif
+ if (cmp(child))
+ break;
+ }
+
+ gst_iterator_free(it);
+#if GST_CHECK_VERSION(1,0,0)
+ g_value_unset(&value);
+#endif
+}
+
+bool QGstreamerPlayerSession::setPipeline(GstElement *pipeline)
{
GstBus *bus = pipeline ? gst_element_get_bus(pipeline) : nullptr;
if (!bus)
- return;
+ return false;
gst_object_unref(GST_OBJECT(m_pipeline));
m_pipeline = pipeline;
gst_object_unref(GST_OBJECT(m_bus));
m_bus = bus;
- delete m_busHelper;
+ m_busHelper->deleteLater();
m_busHelper = new QGstreamerBusHelper(m_bus, this);
m_busHelper->installMessageFilter(this);
@@ -414,24 +437,31 @@ void QGstreamerPlayerSession::setPipeline(GstElement *pipeline)
m_videoIdentity = nullptr;
if (m_renderer) {
- auto it = gst_bin_iterate_sinks(GST_BIN(pipeline));
-#if GST_CHECK_VERSION(1,0,0)
- GValue data = { 0, 0 };
- while (gst_iterator_next (it, &data) == GST_ITERATOR_OK) {
- auto child = static_cast<GstElement*>(g_value_get_object(&data));
-#else
- GstElement *child = nullptr;
- while (gst_iterator_next(it, reinterpret_cast<gpointer *>(&child)) == GST_ITERATOR_OK) {
-#endif
- if (QLatin1String(GST_OBJECT_NAME(child)) == QLatin1String("qtvideosink")) {
- m_renderer->setVideoSink(child);
- break;
- }
- }
- gst_iterator_free(it);
+ gst_foreach(gst_bin_iterate_sinks(GST_BIN(pipeline)),
+ [this](GstElement *child) {
+ if (qstrcmp(GST_OBJECT_NAME(child), "qtvideosink") == 0) {
+ m_renderer->setVideoSink(child);
+ return true;
+ }
+ return false;
+ });
+ }
+
+#if QT_CONFIG(gstreamer_app)
+ if (m_appSrc) {
+ gst_foreach(gst_bin_iterate_sources(GST_BIN(pipeline)),
+ [this](GstElement *child) {
+ if (qstrcmp(qt_gst_element_get_factory_name(child), "appsrc") == 0) {
+ m_appSrc->setup(child);
+ return true;
+ }
+ return false;
+ });
}
+#endif
emit pipelineChanged();
+ return true;
}
qint64 QGstreamerPlayerSession::duration() const
@@ -642,12 +672,6 @@ void QGstreamerPlayerSession::setVideoRenderer(QObject *videoOutput)
if (!m_playbin)
return;
-#ifdef DEBUG_VO_BIN_DUMP
- gst_debug_bin_to_dot_file_with_ts(GST_BIN(m_playbin),
- GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_ALL /* GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE | GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS | GST_DEBUG_GRAPH_SHOW_STATES*/),
- "playbin_set");
-#endif
-
GstElement *videoSink = 0;
if (m_renderer && m_renderer->isReady())
videoSink = m_renderer->videoSink();
@@ -908,11 +932,6 @@ void QGstreamerPlayerSession::finishVideoOutputChange()
gst_object_unref(GST_OBJECT(srcPad));
-#ifdef DEBUG_VO_BIN_DUMP
- gst_debug_bin_to_dot_file_with_ts(GST_BIN(m_playbin),
- GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_ALL /* | GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE | GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS | GST_DEBUG_GRAPH_SHOW_STATES */),
- "playbin_finish");
-#endif
}
#if !GST_CHECK_VERSION(1,0,0)
@@ -975,6 +994,11 @@ bool QGstreamerPlayerSession::isSeekable() const
bool QGstreamerPlayerSession::play()
{
+#if GST_CHECK_VERSION(1,0,0)
+ static bool dumpDot = qEnvironmentVariableIsSet("GST_DEBUG_DUMP_DOT_DIR");
+ if (dumpDot)
+ gst_debug_bin_to_dot_file_with_ts(GST_BIN(m_pipeline), GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_ALL), "gst.play");
+#endif
#ifdef DEBUG_PLAYBIN
qDebug() << Q_FUNC_INFO;
#endif
@@ -1650,6 +1674,14 @@ void QGstreamerPlayerSession::playbinNotifySource(GObject *o, GParamSpec *p, gpo
self->m_sourceType = UDPSrc;
//The udpsrc is always a live source.
self->m_isLiveSource = true;
+
+ QUrlQuery query(self->m_request.url());
+ const QString var = QLatin1String("udpsrc.caps");
+ if (query.hasQueryItem(var)) {
+ GstCaps *caps = gst_caps_from_string(query.queryItemValue(var).toLatin1().constData());
+ g_object_set(G_OBJECT(source), "caps", caps, NULL);
+ gst_caps_unref(caps);
+ }
} else if (qstrcmp(G_OBJECT_CLASS_NAME(G_OBJECT_GET_CLASS(source)), "GstSoupHTTPSrc") == 0) {
//souphttpsrc timeout unit = second
g_object_set(G_OBJECT(source), "timeout", guint(timeout), NULL);
diff --git a/src/gsttools/qgstreamerplayersession_p.h b/src/gsttools/qgstreamerplayersession_p.h
index b613793c4..d4b050272 100644
--- a/src/gsttools/qgstreamerplayersession_p.h
+++ b/src/gsttools/qgstreamerplayersession_p.h
@@ -208,7 +208,8 @@ private:
void addAudioBufferProbe();
void flushVideoProbes();
void resumeVideoProbes();
- void setPipeline(GstElement *pipeline);
+ bool parsePipeline();
+ bool setPipeline(GstElement *pipeline);
QNetworkRequest m_request;
QMediaPlayer::State m_state;
diff --git a/src/gsttools/qgstutils.cpp b/src/gsttools/qgstutils.cpp
index 82af0f1e2..ac8808115 100644
--- a/src/gsttools/qgstutils.cpp
+++ b/src/gsttools/qgstutils.cpp
@@ -649,7 +649,7 @@ QVector<QGstUtils::CameraInfo> QGstUtils::enumerateCameras(GstElementFactory *fa
for (; ::ioctl(fd, VIDIOC_ENUMINPUT, &input) >= 0; ++input.index) {
if (input.type == V4L2_INPUT_TYPE_CAMERA || input.type == 0) {
const int ret = ::ioctl(fd, VIDIOC_S_INPUT, &input.index);
- isCamera = (ret == 0 || errno == ENOTTY);
+ isCamera = (ret == 0 || errno == ENOTTY || errno == EBUSY);
break;
}
}
@@ -1307,9 +1307,7 @@ void QGstUtils::setMetaData(GstElement *element, const QMap<QByteArray, QVariant
gst_tag_setter_reset_tags(GST_TAG_SETTER(element));
- QMapIterator<QByteArray, QVariant> it(data);
- while (it.hasNext()) {
- it.next();
+ for (auto it = data.cbegin(), end = data.cend(); it != end; ++it) {
const QString tagName = QString::fromLatin1(it.key());
const QVariant tagValue = it.value();
diff --git a/src/gsttools/qgstvideorenderersink.cpp b/src/gsttools/qgstvideorenderersink.cpp
index 49016b952..5f71d342c 100644
--- a/src/gsttools/qgstvideorenderersink.cpp
+++ b/src/gsttools/qgstvideorenderersink.cpp
@@ -686,7 +686,8 @@ void QGstVideoRendererSink::handleShowPrerollChange(GObject *o, GParamSpec *p, g
if (!showPrerollFrame) {
GstState state = GST_STATE_VOID_PENDING;
- gst_element_get_state(GST_ELEMENT(sink), &state, NULL, GST_CLOCK_TIME_NONE);
+ GstClockTime timeout = 10000000; // 10 ms
+ gst_element_get_state(GST_ELEMENT(sink), &state, NULL, timeout);
// show-preroll-frame being set to 'false' while in GST_STATE_PAUSED means
// the QMediaPlayer was stopped from the paused state.
// We need to flush the current frame.
diff --git a/src/imports/multimedia/qdeclarativecamera.cpp b/src/imports/multimedia/qdeclarativecamera.cpp
index 63896c302..6d36e462d 100644
--- a/src/imports/multimedia/qdeclarativecamera.cpp
+++ b/src/imports/multimedia/qdeclarativecamera.cpp
@@ -138,7 +138,7 @@ void QDeclarativeCamera::_q_availabilityChanged(QMultimedia::AvailabilityStatus
\header \li Property \li Description
\row \li \l {CameraCapture} {imageCapture}
\li Methods and properties for capturing still images.
- \row \li \l {CameraRecorder} {videoRecording}
+ \row \li \l {CameraRecorder} {videoRecorder}
\li Methods and properties for capturing movies.
\row \li \l {CameraExposure} {exposure}
\li Methods and properties for adjusting exposure (aperture, shutter speed etc).
diff --git a/src/multimedia/audio/qaudiobuffer.cpp b/src/multimedia/audio/qaudiobuffer.cpp
index 1e43ebd00..999f280b3 100644
--- a/src/multimedia/audio/qaudiobuffer.cpp
+++ b/src/multimedia/audio/qaudiobuffer.cpp
@@ -164,7 +164,7 @@ QAudioBufferPrivate *QAudioBufferPrivate::clone()
// We want to create a single bufferprivate with a
// single qaab
// This should only be called when the count is > 1
- Q_ASSERT(mCount.load() > 1);
+ Q_ASSERT(mCount.loadRelaxed() > 1);
if (mProvider) {
QAbstractAudioBuffer *abuf = mProvider->clone();
@@ -458,7 +458,7 @@ void *QAudioBuffer::data()
if (!isValid())
return nullptr;
- if (d->mCount.load() != 1) {
+ if (d->mCount.loadRelaxed() != 1) {
// Can't share a writable buffer
// so we need to detach
QAudioBufferPrivate *newd = d->clone();
@@ -483,7 +483,7 @@ void *QAudioBuffer::data()
if (memBuffer) {
d->mProvider->release();
- d->mCount.store(1);
+ d->mCount.storeRelaxed(1);
d->mProvider = memBuffer;
return memBuffer->writableData();
diff --git a/src/multimedia/audio/qaudiodeviceinfo.cpp b/src/multimedia/audio/qaudiodeviceinfo.cpp
index b8cac18eb..051ef8b3f 100644
--- a/src/multimedia/audio/qaudiodeviceinfo.cpp
+++ b/src/multimedia/audio/qaudiodeviceinfo.cpp
@@ -328,16 +328,12 @@ QAudioFormat QAudioDeviceInfo::nearestFormat(const QAudioFormat &settings) const
nearest.setByteOrder(order);
for (QAudioFormat::SampleType sample : qAsConst(testSampleTypes)) {
nearest.setSampleType(sample);
- QMapIterator<int, int> sz(testSampleSizes);
- while (sz.hasNext()) {
- sz.next();
- nearest.setSampleSize(sz.value());
+ for (int sampleSize : qAsConst(testSampleSizes)) {
+ nearest.setSampleSize(sampleSize);
for (int channel : qAsConst(testChannels)) {
nearest.setChannelCount(channel);
- QMapIterator<int, int> i(testSampleRates);
- while (i.hasNext()) {
- i.next();
- nearest.setSampleRate(i.value());
+ for (int sampleRate : qAsConst(testSampleRates)) {
+ nearest.setSampleRate(sampleRate);
if (isFormatSupported(nearest))
return nearest;
}
@@ -449,7 +445,10 @@ QAudioDeviceInfo::QAudioDeviceInfo(const QString &realm, const QByteArray &handl
}
/*!
- \internal
+ Returns the key that represents the audio plugin.
+
+ \since 5.14
+ \sa QAudioSystemPlugin
*/
QString QAudioDeviceInfo::realm() const
{
diff --git a/src/multimedia/audio/qaudiodeviceinfo.h b/src/multimedia/audio/qaudiodeviceinfo.h
index 390458b39..015c8bad7 100644
--- a/src/multimedia/audio/qaudiodeviceinfo.h
+++ b/src/multimedia/audio/qaudiodeviceinfo.h
@@ -87,6 +87,7 @@ public:
QList<int> supportedSampleSizes() const;
QList<QAudioFormat::Endian> supportedByteOrders() const;
QList<QAudioFormat::SampleType> supportedSampleTypes() const;
+ QString realm() const;
static QAudioDeviceInfo defaultInputDevice();
static QAudioDeviceInfo defaultOutputDevice();
@@ -95,7 +96,6 @@ public:
private:
QAudioDeviceInfo(const QString &realm, const QByteArray &handle, QAudio::Mode mode);
- QString realm() const;
QByteArray handle() const;
QAudio::Mode mode() const;
diff --git a/src/multimedia/audio/qsamplecache_p.cpp b/src/multimedia/audio/qsamplecache_p.cpp
index 945fabe52..35234f8bb 100644
--- a/src/multimedia/audio/qsamplecache_p.cpp
+++ b/src/multimedia/audio/qsamplecache_p.cpp
@@ -295,9 +295,12 @@ void QSample::loadIfNecessary()
}
}
-// Called in both threads
+// Called in application thread
bool QSampleCache::notifyUnreferencedSample(QSample* sample)
{
+ if (m_loadingThread.isRunning())
+ m_loadingThread.wait();
+
QMutexLocker locker(&m_mutex);
if (m_capacity > 0)
return false;
@@ -306,16 +309,17 @@ bool QSampleCache::notifyUnreferencedSample(QSample* sample)
return true;
}
-// Called in application threadd
+// Called in application thread
void QSample::release()
{
QMutexLocker locker(&m_mutex);
#ifdef QT_SAMPLECACHE_DEBUG
qDebug() << "Sample:: release" << this << QThread::currentThread() << m_ref;
#endif
- m_ref--;
- if (m_ref == 0)
+ if (--m_ref == 0) {
+ locker.unlock();
m_parent->notifyUnreferencedSample(this);
+ }
}
// Called in dtor and when stream is loaded
diff --git a/src/multimedia/camera/qcameraexposure.h b/src/multimedia/camera/qcameraexposure.h
index f8eb68fbf..a1dc96701 100644
--- a/src/multimedia/camera/qcameraexposure.h
+++ b/src/multimedia/camera/qcameraexposure.h
@@ -165,11 +165,13 @@ Q_SIGNALS:
void isoSensitivityChanged(int);
void exposureCompensationChanged(qreal);
+protected:
+ virtual ~QCameraExposure();
+
private:
friend class QCamera;
friend class QCameraPrivate;
explicit QCameraExposure(QCamera *parent = nullptr);
- virtual ~QCameraExposure();
Q_DISABLE_COPY(QCameraExposure)
Q_DECLARE_PRIVATE(QCameraExposure)
diff --git a/src/multimedia/camera/qcamerafocus.h b/src/multimedia/camera/qcamerafocus.h
index 31d056de9..024f504e9 100644
--- a/src/multimedia/camera/qcamerafocus.h
+++ b/src/multimedia/camera/qcamerafocus.h
@@ -152,11 +152,13 @@ Q_SIGNALS:
void maximumOpticalZoomChanged(qreal);
void maximumDigitalZoomChanged(qreal);
+protected:
+ ~QCameraFocus();
+
private:
friend class QCamera;
friend class QCameraPrivate;
QCameraFocus(QCamera *camera);
- ~QCameraFocus();
Q_DISABLE_COPY(QCameraFocus)
Q_DECLARE_PRIVATE(QCameraFocus)
diff --git a/src/multimedia/camera/qcameraimageprocessing.h b/src/multimedia/camera/qcameraimageprocessing.h
index 3eb7c8569..e4ad00ff8 100644
--- a/src/multimedia/camera/qcameraimageprocessing.h
+++ b/src/multimedia/camera/qcameraimageprocessing.h
@@ -116,11 +116,13 @@ public:
void setColorFilter(ColorFilter filter);
bool isColorFilterSupported(ColorFilter filter) const;
+protected:
+ ~QCameraImageProcessing();
+
private:
friend class QCamera;
friend class QCameraPrivate;
QCameraImageProcessing(QCamera *camera);
- ~QCameraImageProcessing();
Q_DISABLE_COPY(QCameraImageProcessing)
Q_DECLARE_PRIVATE(QCameraImageProcessing)
diff --git a/src/multimedia/doc/qtmultimedia.qdocconf b/src/multimedia/doc/qtmultimedia.qdocconf
index 256ad261e..dfafd8715 100644
--- a/src/multimedia/doc/qtmultimedia.qdocconf
+++ b/src/multimedia/doc/qtmultimedia.qdocconf
@@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
+include($QT_INSTALL_DOCS/config/exampleurl-qtmultimedia.qdocconf)
project = QtMultimedia
description = Qt Multimedia Documentation
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/audio.cpp b/src/multimedia/doc/snippets/multimedia-snippets/audio.cpp
index 9646b708e..57d3adfb4 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/audio.cpp
+++ b/src/multimedia/doc/snippets/multimedia-snippets/audio.cpp
@@ -213,7 +213,8 @@ void AudioDeviceInfo()
//! [Setting audio format]
//! [Dumping audio formats]
- foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput))
+ const auto deviceInfos = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
+ for (const QAudioDeviceInfo &deviceInfo : deviceInfos)
qDebug() << "Device name: " << deviceInfo.deviceName();
//! [Dumping audio formats]
}
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp b/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp
index 52f3203be..f851caadd 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp
+++ b/src/multimedia/doc/snippets/multimedia-snippets/camera.cpp
@@ -179,8 +179,8 @@ void overview_movie()
void camera_listing()
{
//! [Camera listing]
- QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
- foreach (const QCameraInfo &cameraInfo, cameras)
+ const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
+ for (const QCameraInfo &cameraInfo : cameras)
qDebug() << cameraInfo.deviceName();
//! [Camera listing]
}
@@ -188,8 +188,8 @@ void camera_listing()
void camera_selection()
{
//! [Camera selection]
- QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
- foreach (const QCameraInfo &cameraInfo, cameras) {
+ const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
+ for (const QCameraInfo &cameraInfo : cameras) {
if (cameraInfo.deviceName() == "mycamera")
camera = new QCamera(cameraInfo);
}
@@ -269,8 +269,8 @@ void camerafocus()
//! [Camera focus zones]
focus->setFocusPointMode(QCameraFocus::FocusPointAuto);
- QList<QCameraFocusZone> zones = focus->focusZones();
- foreach (QCameraFocusZone zone, zones) {
+ const QList<QCameraFocusZone> zones = focus->focusZones();
+ for (const QCameraFocusZone &zone : zones) {
if (zone.status() == QCameraFocusZone::Focused) {
// Draw a green box at zone.area()
} else if (zone.status() == QCameraFocusZone::Selected) {
diff --git a/src/multimedia/doc/snippets/multimedia-snippets/media.cpp b/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
index 7cabfabf3..60097d917 100644
--- a/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
+++ b/src/multimedia/doc/snippets/multimedia-snippets/media.cpp
@@ -223,10 +223,10 @@ void MediaExample::AudioRecorder()
//! [Audio recorder]
//! [Audio recorder inputs]
- QStringList inputs = audioRecorder->audioInputs();
+ const QStringList inputs = audioRecorder->audioInputs();
QString selectedInput = audioRecorder->defaultAudioInput();
- foreach (QString input, inputs) {
+ for (const QString &input : inputs) {
QString description = audioRecorder->audioInputDescription(input);
// show descriptions to user and allow selection
selectedInput = input;
diff --git a/src/multimedia/qmediatimerange.h b/src/multimedia/qmediatimerange.h
index 0b4fe8e67..5b6d711af 100644
--- a/src/multimedia/qmediatimerange.h
+++ b/src/multimedia/qmediatimerange.h
@@ -55,6 +55,7 @@ public:
QMediaTimeInterval();
QMediaTimeInterval(qint64 start, qint64 end);
QMediaTimeInterval(const QMediaTimeInterval&);
+ QMediaTimeInterval &operator=(const QMediaTimeInterval&) = default;
qint64 start() const;
qint64 end() const;
diff --git a/src/multimediawidgets/qpaintervideosurface.cpp b/src/multimediawidgets/qpaintervideosurface.cpp
index e4762a7e1..6af0c7588 100644
--- a/src/multimediawidgets/qpaintervideosurface.cpp
+++ b/src/multimediawidgets/qpaintervideosurface.cpp
@@ -57,6 +57,15 @@
#ifndef GL_RGB8
#define GL_RGB8 0x8051
#endif
+
+static void makeCurrent(QGLContext *context)
+{
+ context->makeCurrent();
+
+ auto handle = context->contextHandle();
+ if (handle && QOpenGLContext::currentContext() != handle)
+ handle->makeCurrent(handle->surface());
+}
#endif
#include <QtDebug>
@@ -395,7 +404,7 @@ QAbstractVideoSurface::Error QVideoSurfaceGLPainter::setCurrentFrame(const QVide
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
} else if (m_frame.map(QAbstractVideoBuffer::ReadOnly)) {
- m_context->makeCurrent();
+ makeCurrent(m_context);
for (int i = 0; i < m_textureCount; ++i) {
glBindTexture(GL_TEXTURE_2D, m_textureIds[i]);
@@ -737,7 +746,7 @@ QAbstractVideoSurface::Error QVideoSurfaceArbFpPainter::start(const QVideoSurfac
QAbstractVideoSurface::Error error = QAbstractVideoSurface::NoError;
- m_context->makeCurrent();
+ makeCurrent(m_context);
const char *program = 0;
@@ -862,7 +871,7 @@ QAbstractVideoSurface::Error QVideoSurfaceArbFpPainter::start(const QVideoSurfac
void QVideoSurfaceArbFpPainter::stop()
{
if (m_context) {
- m_context->makeCurrent();
+ makeCurrent(m_context);
if (m_handleType != QAbstractVideoBuffer::GLTextureHandle)
glDeleteTextures(m_textureCount, m_textureIds);
@@ -1115,7 +1124,7 @@ QAbstractVideoSurface::Error QVideoSurfaceGlslPainter::start(const QVideoSurface
QAbstractVideoSurface::Error error = QAbstractVideoSurface::NoError;
- m_context->makeCurrent();
+ makeCurrent(m_context);
const char *fragmentProgram = 0;
@@ -1222,7 +1231,7 @@ QAbstractVideoSurface::Error QVideoSurfaceGlslPainter::start(const QVideoSurface
void QVideoSurfaceGlslPainter::stop()
{
if (m_context) {
- m_context->makeCurrent();
+ makeCurrent(m_context);
if (m_handleType != QAbstractVideoBuffer::GLTextureHandle)
glDeleteTextures(m_textureCount, m_textureIds);
@@ -1623,7 +1632,7 @@ void QPainterVideoSurface::setGLContext(QGLContext *context)
//Set a dynamic property to access the OpenGL context
this->setProperty("GLContext", QVariant::fromValue<QObject*>(m_glContext->contextHandle()));
- m_glContext->makeCurrent();
+ makeCurrent(m_glContext);
const QByteArray extensions(reinterpret_cast<const char *>(
context->contextHandle()->functions()->glGetString(GL_EXTENSIONS)));
@@ -1734,13 +1743,13 @@ void QPainterVideoSurface::createPainter()
#if !defined(QT_OPENGL_ES) && !defined(QT_OPENGL_DYNAMIC)
case FragmentProgramShader:
Q_ASSERT(m_glContext);
- m_glContext->makeCurrent();
+ makeCurrent(m_glContext);
m_painter = new QVideoSurfaceArbFpPainter(m_glContext);
break;
#endif // !QT_OPENGL_ES && !QT_OPENGL_DYNAMIC
case GlslShader:
Q_ASSERT(m_glContext);
- m_glContext->makeCurrent();
+ makeCurrent(m_glContext);
m_painter = new QVideoSurfaceGlslPainter(m_glContext);
break;
default:
diff --git a/src/plugins/alsa/qalsaaudioinput.h b/src/plugins/alsa/qalsaaudioinput.h
index 09f615fea..fa9c954d7 100644
--- a/src/plugins/alsa/qalsaaudioinput.h
+++ b/src/plugins/alsa/qalsaaudioinput.h
@@ -59,7 +59,7 @@
#include <QtCore/qtimer.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
-#include <QtCore/qdatetime.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qiodevice.h>
#include <QtMultimedia/qaudio.h>
@@ -144,8 +144,8 @@ private:
void drain();
QTimer* timer;
- QTime timeStamp;
- QTime clockStamp;
+ QElapsedTimer timeStamp;
+ QElapsedTimer clockStamp;
qint64 elapsedTimeOffset;
int intervalTime;
RingBuffer ringBuffer;
diff --git a/src/plugins/alsa/qalsaaudiooutput.h b/src/plugins/alsa/qalsaaudiooutput.h
index d38e3d5d4..8002322cb 100644
--- a/src/plugins/alsa/qalsaaudiooutput.h
+++ b/src/plugins/alsa/qalsaaudiooutput.h
@@ -58,7 +58,7 @@
#include <QtCore/qtimer.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
-#include <QtCore/qdatetime.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qiodevice.h>
#include <QtMultimedia/qaudio.h>
@@ -132,8 +132,8 @@ private:
QTimer* timer;
QByteArray m_device;
int bytesAvailable;
- QTime timeStamp;
- QTime clockStamp;
+ QElapsedTimer timeStamp;
+ QElapsedTimer clockStamp;
qint64 elapsedTimeOffset;
char* audioBuffer;
snd_pcm_t* handle;
diff --git a/src/plugins/android/src/wrappers/jni/androidcamera.cpp b/src/plugins/android/src/wrappers/jni/androidcamera.cpp
index 90af0119a..a92a3373a 100644
--- a/src/plugins/android/src/wrappers/jni/androidcamera.cpp
+++ b/src/plugins/android/src/wrappers/jni/androidcamera.cpp
@@ -942,7 +942,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPreviewSizes()
list.append(QSize(size.getField<jint>("width"), size.getField<jint>("height")));
}
- qSort(list.begin(), list.end(), qt_sizeLessThan);
+ std::sort(list.begin(), list.end(), qt_sizeLessThan);
}
return list;
@@ -1541,7 +1541,7 @@ QList<QSize> AndroidCameraPrivate::getSupportedPictureSizes()
list.append(QSize(size.getField<jint>("width"), size.getField<jint>("height")));
}
- qSort(list.begin(), list.end(), qt_sizeLessThan);
+ std::sort(list.begin(), list.end(), qt_sizeLessThan);
}
return list;
diff --git a/src/plugins/avfoundation/camera/avfcamerasession.mm b/src/plugins/avfoundation/camera/avfcamerasession.mm
index 8ed627774..a3263badc 100644
--- a/src/plugins/avfoundation/camera/avfcamerasession.mm
+++ b/src/plugins/avfoundation/camera/avfcamerasession.mm
@@ -234,7 +234,7 @@ void AVFCameraSession::updateCameraDevices()
break;
case AVCaptureDevicePositionFront:
info.position = QCamera::FrontFace;
- info.orientation = 90;
+ info.orientation = 270;
break;
default:
info.position = QCamera::UnspecifiedPosition;
diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm b/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm
index 9a6057e6b..f8f4500c1 100644
--- a/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm
+++ b/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm
@@ -294,6 +294,8 @@ void AVFMediaRecorderControl::setState(QMediaRecorder::State state)
m_recordingFinished = false;
Q_EMIT actualLocationChanged(actualLocation);
+ updateStatus();
+ Q_EMIT stateChanged(m_state);
} else {
Q_EMIT error(QMediaRecorder::FormatError, tr("Recorder not configured"));
}
@@ -312,10 +314,6 @@ void AVFMediaRecorderControl::setState(QMediaRecorder::State state)
unapplySettings();
}
}
-
- updateStatus();
- if (state != m_state)
- Q_EMIT stateChanged(m_state);
}
void AVFMediaRecorderControl::setMuted(bool muted)
diff --git a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.mm b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.mm
index bbb16e709..ddf833fd3 100644
--- a/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.mm
+++ b/src/plugins/avfoundation/camera/avfvideoencodersettingscontrol.mm
@@ -76,7 +76,7 @@ static bool format_supports_framerate(AVCaptureDeviceFormat *format, qreal fps)
static bool real_list_contains(const QList<qreal> &list, qreal value)
{
- Q_FOREACH (qreal r, list) {
+ for (qreal r : list) {
if (qFuzzyCompare(r, value))
return true;
}
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
index f6e0ef3bf..7a268a3d9 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayersession.h
@@ -125,43 +125,6 @@ Q_SIGNALS:
void error(int error, const QString &errorString);
private:
- class ResourceHandler {
- public:
- ResourceHandler() : resource(nullptr) {}
- ~ResourceHandler() { clear(); }
- void setResourceFile(const QString &file) {
- if (resource) {
- if (resource->fileName() == file)
- return;
- delete resource;
- rawData.clear();
- }
- resource = new QResource(file);
- }
- bool isValid() const { return resource && resource->isValid() && resource->data() != nullptr; }
- const uchar *data() {
- if (!isValid())
- return nullptr;
- if (resource->isCompressed()) {
- if (rawData.size() == 0)
- rawData = qUncompress(resource->data(), resource->size());
- return (const uchar *)rawData.constData();
- }
- return resource->data();
- }
- qint64 size() {
- if (data() == nullptr)
- return 0;
- return resource->isCompressed() ? rawData.size() : resource->size();
- }
- void clear() {
- delete resource;
- rawData.clear();
- }
- QResource *resource;
- QByteArray rawData;
- };
-
void setAudioAvailable(bool available);
void setVideoAvailable(bool available);
void setSeekable(bool seekable);
@@ -173,7 +136,6 @@ private:
QMediaPlayer::MediaStatus m_mediaStatus;
QIODevice *m_mediaStream;
QMediaContent m_resources;
- ResourceHandler m_resourceHandler;
bool m_muted;
bool m_tryingAsync;
diff --git a/src/plugins/common/evr/evrcustompresenter.cpp b/src/plugins/common/evr/evrcustompresenter.cpp
index 84786e9a9..3de8d3ac3 100644
--- a/src/plugins/common/evr/evrcustompresenter.cpp
+++ b/src/plugins/common/evr/evrcustompresenter.cpp
@@ -1029,7 +1029,7 @@ void EVRCustomPresenter::supportedFormatsChanged()
m_canRenderToSurface = true;
} else {
formats = m_surface->supportedPixelFormats(QAbstractVideoBuffer::NoHandle);
- Q_FOREACH (QVideoFrame::PixelFormat format, formats) {
+ for (QVideoFrame::PixelFormat format : qAsConst(formats)) {
if (SUCCEEDED(m_presentEngine->checkFormat(qt_evr_D3DFormatFromPixelFormat(format)))) {
m_canRenderToSurface = true;
break;
diff --git a/src/plugins/common/evr/evrd3dpresentengine.cpp b/src/plugins/common/evr/evrd3dpresentengine.cpp
index ab694b795..4ce5a99d7 100644
--- a/src/plugins/common/evr/evrd3dpresentengine.cpp
+++ b/src/plugins/common/evr/evrd3dpresentengine.cpp
@@ -593,16 +593,6 @@ QVideoFrame D3DPresentEngine::makeVideoFrame(IMFSample *sample)
m_surfaceFormat.frameSize(),
m_surfaceFormat.pixelFormat());
- // WMF uses 100-nanosecond units, Qt uses microseconds
- LONGLONG startTime = -1;
- if (SUCCEEDED(sample->GetSampleTime(&startTime))) {
- 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/dscameracontrol.cpp b/src/plugins/directshow/camera/dscameracontrol.cpp
index 67971d1b5..3f60ec848 100644
--- a/src/plugins/directshow/camera/dscameracontrol.cpp
+++ b/src/plugins/directshow/camera/dscameracontrol.cpp
@@ -47,8 +47,6 @@ QT_BEGIN_NAMESPACE
DSCameraControl::DSCameraControl(QObject *parent)
: QCameraControl(parent)
- , m_state(QCamera::UnloadedState)
- , m_captureMode(QCamera::CaptureStillImage)
{
m_session = qobject_cast<DSCameraSession*>(parent);
connect(m_session, &DSCameraSession::statusChanged, this,
diff --git a/src/plugins/directshow/camera/dscameracontrol.h b/src/plugins/directshow/camera/dscameracontrol.h
index b9fb2766d..2087623d1 100644
--- a/src/plugins/directshow/camera/dscameracontrol.h
+++ b/src/plugins/directshow/camera/dscameracontrol.h
@@ -52,7 +52,7 @@ class DSCameraControl : public QCameraControl
{
Q_OBJECT
public:
- DSCameraControl(QObject *parent = 0);
+ DSCameraControl(QObject *parent = nullptr);
~DSCameraControl() override;
QCamera::State state() const override { return m_state; }
@@ -69,8 +69,8 @@ public:
private:
DSCameraSession *m_session;
- QCamera::State m_state;
- QCamera::CaptureModes m_captureMode;
+ QCamera::State m_state = QCamera::UnloadedState;
+ QCamera::CaptureModes m_captureMode = QCamera::CaptureStillImage;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/camera/dscameraservice.cpp b/src/plugins/directshow/camera/dscameraservice.cpp
index 8115ef385..ff488cf09 100644
--- a/src/plugins/directshow/camera/dscameraservice.cpp
+++ b/src/plugins/directshow/camera/dscameraservice.cpp
@@ -62,14 +62,12 @@ DSCameraService::DSCameraService(QObject *parent):
, m_session(new DSCameraSession(this))
, m_control(new DSCameraControl(m_session))
, m_videoDevice(new DSVideoDeviceControl(m_session))
- , m_videoRenderer(0)
, m_imageCapture(new DSImageCaptureControl(m_session))
, m_viewfinderSettings(new DSCameraViewfinderSettingsControl(m_session))
, m_imageProcessingControl(new DSCameraImageProcessingControl(m_session))
, m_exposureControl(new DirectShowCameraExposureControl(m_session))
, m_captureDestinationControl(new DirectShowCameraCaptureDestinationControl(m_session))
, m_captureBufferFormatControl(new DirectShowCameraCaptureBufferFormatControl)
- , m_videoProbeControl(nullptr)
, m_zoomControl(new DirectShowCameraZoomControl(m_session))
, m_imageEncoderControl(new DirectShowCameraImageEncoderControl(m_session))
{
@@ -140,14 +138,14 @@ QMediaControl* DSCameraService::requestControl(const char *name)
if (qstrcmp(name, QImageEncoderControl_iid) == 0)
return m_imageEncoderControl;
- return 0;
+ return nullptr;
}
void DSCameraService::releaseControl(QMediaControl *control)
{
if (control == m_videoRenderer) {
delete m_videoRenderer;
- m_videoRenderer = 0;
+ m_videoRenderer = nullptr;
return;
}
diff --git a/src/plugins/directshow/camera/dscameraservice.h b/src/plugins/directshow/camera/dscameraservice.h
index 9a8f745f6..6ea85b725 100644
--- a/src/plugins/directshow/camera/dscameraservice.h
+++ b/src/plugins/directshow/camera/dscameraservice.h
@@ -64,7 +64,7 @@ class DSCameraService : public QMediaService
Q_OBJECT
public:
- DSCameraService(QObject *parent = 0);
+ DSCameraService(QObject *parent = nullptr);
~DSCameraService() override;
QMediaControl* requestControl(const char *name) override;
@@ -74,14 +74,14 @@ private:
DSCameraSession *m_session;
DSCameraControl *m_control;
DSVideoDeviceControl *m_videoDevice;
- QMediaControl *m_videoRenderer;
+ QMediaControl *m_videoRenderer = nullptr;
DSImageCaptureControl *m_imageCapture;
DSCameraViewfinderSettingsControl *m_viewfinderSettings;
DSCameraImageProcessingControl *m_imageProcessingControl;
DirectShowCameraExposureControl *m_exposureControl;
DirectShowCameraCaptureDestinationControl *m_captureDestinationControl;
DirectShowCameraCaptureBufferFormatControl *m_captureBufferFormatControl;
- DirectShowVideoProbeControl *m_videoProbeControl;
+ DirectShowVideoProbeControl *m_videoProbeControl = nullptr;
DirectShowCameraZoomControl *m_zoomControl;
DirectShowCameraImageEncoderControl *m_imageEncoderControl;
};
diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp
index 5ab9f67d8..27cdd84db 100644
--- a/src/plugins/directshow/camera/dscamerasession.cpp
+++ b/src/plugins/directshow/camera/dscamerasession.cpp
@@ -58,23 +58,6 @@ QT_BEGIN_NAMESPACE
DSCameraSession::DSCameraSession(QObject *parent)
: QObject(parent)
- , m_graphBuilder(nullptr)
- , m_filterGraph(nullptr)
- , m_sourceDeviceName(QLatin1String("default"))
- , m_sourceFilter(nullptr)
- , m_needsHorizontalMirroring(false)
- , m_previewSampleGrabber(nullptr)
- , m_nullRendererFilter(nullptr)
- , m_previewStarted(false)
- , m_surface(nullptr)
- , m_previewPixelFormat(QVideoFrame::Format_Invalid)
- , m_stride(-1)
- , m_readyForCapture(false)
- , m_imageIdCounter(0)
- , m_currentImageId(-1)
- , m_captureDestinations(QCameraImageCapture::CaptureToFile)
- , m_videoProbeControl(nullptr)
- , m_status(QCamera::UnloadedStatus)
{
connect(this, SIGNAL(statusChanged(QCamera::Status)),
this, SLOT(updateReadyForCapture()));
@@ -284,7 +267,7 @@ void DSCameraSession::setImageProcessingParameter(
ImageProcessingParameterInfo>::iterator sourceValueInfo =
m_imageProcessingParametersInfos.find(resultingParameter);
- if (sourceValueInfo == m_imageProcessingParametersInfos.constEnd())
+ if (sourceValueInfo == m_imageProcessingParametersInfos.end())
return;
LONG sourceValue = 0;
@@ -331,10 +314,10 @@ void DSCameraSession::setImageProcessingParameter(
return;
}
- IAMVideoProcAmp *pVideoProcAmp = NULL;
+ IAMVideoProcAmp *pVideoProcAmp = nullptr;
HRESULT hr = m_graphBuilder->FindInterface(
- NULL,
- NULL,
+ nullptr,
+ nullptr,
m_sourceFilter,
IID_IAMVideoProcAmp,
reinterpret_cast<void**>(&pVideoProcAmp)
@@ -464,7 +447,7 @@ bool DSCameraSession::startPreview()
QString errorString;
HRESULT hr = S_OK;
- IMediaControl* pControl = 0;
+ IMediaControl* pControl = nullptr;
if (!configurePreviewFormat()) {
errorString = tr("Failed to configure preview format");
@@ -516,7 +499,7 @@ bool DSCameraSession::stopPreview()
m_previewSampleGrabber->stop();
QString errorString;
- IMediaControl* pControl = 0;
+ IMediaControl* pControl = nullptr;
HRESULT hr = m_filterGraph->QueryInterface(IID_IMediaControl,
reinterpret_cast<void**>(&pControl));
if (FAILED(hr)) {
@@ -702,12 +685,12 @@ bool DSCameraSession::createFilterGraph()
QString errorString;
HRESULT hr;
- IMoniker* pMoniker = NULL;
- ICreateDevEnum* pDevEnum = NULL;
- IEnumMoniker* pEnum = NULL;
+ IMoniker* pMoniker = nullptr;
+ ICreateDevEnum* pDevEnum = nullptr;
+ IEnumMoniker* pEnum = nullptr;
// Create the filter graph
- hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,
+ hr = CoCreateInstance(CLSID_FilterGraph,nullptr,CLSCTX_INPROC,
IID_IGraphBuilder, reinterpret_cast<void**>(&m_filterGraph));
if (FAILED(hr)) {
errorString = tr("Failed to create filter graph");
@@ -715,7 +698,7 @@ bool DSCameraSession::createFilterGraph()
}
// Create the capture graph builder
- hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC,
+ hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, nullptr, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2,
reinterpret_cast<void**>(&m_graphBuilder));
if (FAILED(hr)) {
@@ -731,7 +714,7 @@ bool DSCameraSession::createFilterGraph()
}
// Find the Capture device
- hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,
+ hr = CoCreateInstance(CLSID_SystemDeviceEnum, nullptr,
CLSCTX_INPROC_SERVER, IID_ICreateDevEnum,
reinterpret_cast<void**>(&pDevEnum));
if (SUCCEEDED(hr)) {
@@ -740,13 +723,13 @@ bool DSCameraSession::createFilterGraph()
pDevEnum->Release();
if (S_OK == hr) {
pEnum->Reset();
- IMalloc *mallocInterface = 0;
+ IMalloc *mallocInterface = nullptr;
CoGetMalloc(1, (LPMALLOC*)&mallocInterface);
//go through and find all video capture devices
- while (pEnum->Next(1, &pMoniker, NULL) == S_OK) {
+ while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) {
- BSTR strName = 0;
- hr = pMoniker->GetDisplayName(NULL, NULL, &strName);
+ BSTR strName = nullptr;
+ hr = pMoniker->GetDisplayName(nullptr, nullptr, &strName);
if (SUCCEEDED(hr)) {
QString output = QString::fromWCharArray(strName);
mallocInterface->Free(strName);
@@ -762,14 +745,14 @@ bool DSCameraSession::createFilterGraph()
pMoniker->Release();
}
mallocInterface->Release();
- if (NULL == m_sourceFilter)
+ if (nullptr == m_sourceFilter)
{
if (m_sourceDeviceName.contains(QLatin1String("default")))
{
pEnum->Reset();
// still have to loop to discard bind to storage failure case
- while (pEnum->Next(1, &pMoniker, NULL) == S_OK) {
- IPropertyBag *pPropBag = 0;
+ while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) {
+ IPropertyBag *pPropBag = nullptr;
hr = pMoniker->BindToStorage(nullptr, nullptr, IID_IPropertyBag,
reinterpret_cast<void**>(&pPropBag));
@@ -780,17 +763,13 @@ bool DSCameraSession::createFilterGraph()
// No need to get the description, just grab it
- hr = pMoniker->BindToObject(0, 0, IID_IBaseFilter,
+ hr = pMoniker->BindToObject(nullptr, nullptr, IID_IBaseFilter,
reinterpret_cast<void**>(&m_sourceFilter));
pPropBag->Release();
pMoniker->Release();
- if (SUCCEEDED(hr)) {
+ if (SUCCEEDED(hr))
break; // done, stop looping through
- }
- else
- {
- qWarning() << "Object bind failed";
- }
+ qWarning("Object bind failed");
}
}
}
@@ -813,7 +792,7 @@ bool DSCameraSession::createFilterGraph()
// Null renderer. Input connected to the sample grabber's output. Simply
// discard the samples it receives.
- hr = CoCreateInstance(cLSID_NullRenderer, NULL, CLSCTX_INPROC,
+ hr = CoCreateInstance(cLSID_NullRenderer, nullptr, CLSCTX_INPROC,
IID_IBaseFilter, (void**)&m_nullRendererFilter);
if (FAILED(hr)) {
errorString = tr("Failed to create null renderer");
@@ -898,7 +877,7 @@ bool DSCameraSession::configurePreviewFormat()
m_stride = DirectShowMediaType::bytesPerLine(m_previewSurfaceFormat);
HRESULT hr;
- IAMStreamConfig* pConfig = 0;
+ IAMStreamConfig* pConfig = nullptr;
hr = m_graphBuilder->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
m_sourceFilter, IID_IAMStreamConfig,
reinterpret_cast<void**>(&pConfig));
@@ -931,10 +910,10 @@ void DSCameraSession::updateImageProcessingParametersInfos()
return;
}
- IAMVideoProcAmp *pVideoProcAmp = NULL;
+ IAMVideoProcAmp *pVideoProcAmp = nullptr;
const HRESULT hr = m_graphBuilder->FindInterface(
- NULL,
- NULL,
+ nullptr,
+ nullptr,
m_sourceFilter,
IID_IAMVideoProcAmp,
reinterpret_cast<void**>(&pVideoProcAmp)
@@ -1041,10 +1020,10 @@ void DSCameraSession::disconnectGraph()
{
// To avoid increasing the memory usage every time the graph is re-connected it's
// important that all filters are released; also the ones added by the "Intelligent Connect".
- IEnumFilters *enumFilters = NULL;
+ IEnumFilters *enumFilters = nullptr;
if (SUCCEEDED(m_filterGraph->EnumFilters(&enumFilters))) {
- IBaseFilter *filter = NULL;
- while (enumFilters->Next(1, &filter, NULL) == S_OK) {
+ IBaseFilter *filter = nullptr;
+ while (enumFilters->Next(1, &filter, nullptr) == S_OK) {
m_filterGraph->RemoveFilter(filter);
enumFilters->Reset();
filter->Release();
@@ -1061,24 +1040,24 @@ static bool qt_frameRateRangeGreaterThan(const QCamera::FrameRateRange &r1, cons
void DSCameraSession::updateSourceCapabilities()
{
HRESULT hr;
- AM_MEDIA_TYPE *pmt = NULL;
- VIDEOINFOHEADER *pvi = NULL;
+ AM_MEDIA_TYPE *pmt = nullptr;
+ VIDEOINFOHEADER *pvi = nullptr;
VIDEO_STREAM_CONFIG_CAPS scc;
- IAMStreamConfig* pConfig = 0;
+ IAMStreamConfig* pConfig = nullptr;
m_supportedViewfinderSettings.clear();
m_needsHorizontalMirroring = false;
m_supportedFormats.clear();
m_imageProcessingParametersInfos.clear();
- IAMVideoControl *pVideoControl = 0;
+ IAMVideoControl *pVideoControl = nullptr;
hr = m_graphBuilder->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
m_sourceFilter, IID_IAMVideoControl,
reinterpret_cast<void**>(&pVideoControl));
if (FAILED(hr)) {
qWarning() << "Failed to get the video control";
} else {
- IPin *pPin = 0;
+ IPin *pPin = nullptr;
if (!DirectShowUtils::getPin(m_sourceFilter, PINDIR_OUTPUT, &pPin, &hr)) {
qWarning() << "Failed to get the pin for the video control";
} else {
@@ -1130,15 +1109,15 @@ void DSCameraSession::updateSourceCapabilities()
QList<QCamera::FrameRateRange> frameRateRanges;
if (pVideoControl) {
- IPin *pPin = 0;
+ IPin *pPin = nullptr;
if (!DirectShowUtils::getPin(m_sourceFilter, PINDIR_OUTPUT, &pPin, &hr)) {
qWarning() << "Failed to get the pin for the video control";
} else {
long listSize = 0;
- LONGLONG *frameRates = 0;
+ LONGLONG *frameRates = nullptr;
SIZE size = { resolution.width(), resolution.height() };
- if (SUCCEEDED(pVideoControl->GetFrameRateList(pPin, iIndex, size,
- &listSize, &frameRates))) {
+ hr = pVideoControl->GetFrameRateList(pPin, iIndex, size, &listSize, &frameRates);
+ if (hr == S_OK && listSize > 0 && frameRates) {
for (long i = 0; i < listSize; ++i) {
qreal fr = qreal(10000000) / frameRates[i];
frameRateRanges.append(QCamera::FrameRateRange(fr, fr));
@@ -1147,6 +1126,8 @@ void DSCameraSession::updateSourceCapabilities()
// Make sure higher frame rates come first
std::sort(frameRateRanges.begin(), frameRateRanges.end(), qt_frameRateRangeGreaterThan);
}
+
+ CoTaskMemFree(frameRates);
pPin->Release();
}
}
diff --git a/src/plugins/directshow/camera/dscamerasession.h b/src/plugins/directshow/camera/dscamerasession.h
index 18fc0cca7..5e7d026c2 100644
--- a/src/plugins/directshow/camera/dscamerasession.h
+++ b/src/plugins/directshow/camera/dscamerasession.h
@@ -84,7 +84,7 @@ class DSCameraSession : public QObject
{
Q_OBJECT
public:
- DSCameraSession(QObject *parent = 0);
+ DSCameraSession(QObject *parent = nullptr);
~DSCameraSession() override;
QCamera::Status status() const { return m_status; }
@@ -185,49 +185,48 @@ private:
QMutex m_presentMutex;
QMutex m_captureMutex;
- // Capture Graph
- ICaptureGraphBuilder2* m_graphBuilder;
- IGraphBuilder* m_filterGraph;
+ ICaptureGraphBuilder2* m_graphBuilder = nullptr;
+ IGraphBuilder* m_filterGraph = nullptr;
// Source (camera)
- QString m_sourceDeviceName;
- IBaseFilter* m_sourceFilter;
- bool m_needsHorizontalMirroring;
+ QString m_sourceDeviceName = QLatin1String("default");
+ IBaseFilter* m_sourceFilter = nullptr;
+ bool m_needsHorizontalMirroring = false;
QList<DirectShowMediaType> m_supportedFormats;
QList<QCameraViewfinderSettings> m_supportedViewfinderSettings;
DirectShowMediaType m_sourceFormat;
QMap<QCameraImageProcessingControl::ProcessingParameter, ImageProcessingParameterInfo> m_imageProcessingParametersInfos;
// Preview
- DirectShowSampleGrabber *m_previewSampleGrabber;
- IBaseFilter *m_nullRendererFilter;
+ DirectShowSampleGrabber *m_previewSampleGrabber = nullptr;
+ IBaseFilter *m_nullRendererFilter = nullptr;
QVideoFrame m_currentFrame;
- bool m_previewStarted;
- QAbstractVideoSurface* m_surface;
+ bool m_previewStarted = false;
+ QAbstractVideoSurface* m_surface = nullptr;
QVideoSurfaceFormat m_previewSurfaceFormat;
- QVideoFrame::PixelFormat m_previewPixelFormat;
+ QVideoFrame::PixelFormat m_previewPixelFormat = QVideoFrame::Format_RGB32;
QSize m_previewSize;
- int m_stride;
+ int m_stride = -1;
QCameraViewfinderSettings m_viewfinderSettings;
QCameraViewfinderSettings m_actualViewfinderSettings;
// Image capture
QString m_imageCaptureFileName;
QMediaStorageLocation m_fileNameGenerator;
- bool m_readyForCapture;
- int m_imageIdCounter;
- int m_currentImageId;
+ bool m_readyForCapture = false;
+ int m_imageIdCounter = 0;
+ int m_currentImageId = -1;
QVideoFrame m_capturedFrame;
- QCameraImageCapture::CaptureDestinations m_captureDestinations;
+ QCameraImageCapture::CaptureDestinations m_captureDestinations = QCameraImageCapture::CaptureToFile;
// Video probe
QMutex m_probeMutex;
- DirectShowVideoProbeControl *m_videoProbeControl;
+ DirectShowVideoProbeControl *m_videoProbeControl = nullptr;
QImageEncoderSettings m_imageEncoderSettings;
// Internal state
- QCamera::Status m_status;
+ QCamera::Status m_status = QCamera::UnloadedStatus;
QTimer m_deviceLostEventTimer;
QMap<QCameraImageProcessingControl::ProcessingParameter, QVariant> m_pendingImageProcessingParametrs;
diff --git a/src/plugins/directshow/camera/dsvideodevicecontrol.cpp b/src/plugins/directshow/camera/dsvideodevicecontrol.cpp
index 2c1fab764..0f08154f1 100644
--- a/src/plugins/directshow/camera/dsvideodevicecontrol.cpp
+++ b/src/plugins/directshow/camera/dsvideodevicecontrol.cpp
@@ -129,10 +129,10 @@ void DSVideoDeviceControl::updateDevices()
deviceList->clear();
- ICreateDevEnum* pDevEnum = NULL;
- IEnumMoniker* pEnum = NULL;
+ ICreateDevEnum* pDevEnum = nullptr;
+ IEnumMoniker* pEnum = nullptr;
// Create the System device enumerator
- HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,
+ HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, nullptr,
CLSCTX_INPROC_SERVER, IID_ICreateDevEnum,
reinterpret_cast<void**>(&pDevEnum));
if (SUCCEEDED(hr)) {
@@ -142,12 +142,12 @@ void DSVideoDeviceControl::updateDevices()
if (S_OK == hr) {
pEnum->Reset();
// go through and find all video capture devices
- IMoniker* pMoniker = NULL;
- IMalloc *mallocInterface = 0;
+ IMoniker* pMoniker = nullptr;
+ IMalloc *mallocInterface = nullptr;
CoGetMalloc(1, (LPMALLOC*)&mallocInterface);
- while (pEnum->Next(1, &pMoniker, NULL) == S_OK) {
- BSTR strName = 0;
- hr = pMoniker->GetDisplayName(NULL, NULL, &strName);
+ while (pEnum->Next(1, &pMoniker, nullptr) == S_OK) {
+ BSTR strName = nullptr;
+ hr = pMoniker->GetDisplayName(nullptr, nullptr, &strName);
if (SUCCEEDED(hr)) {
QString output(QString::fromWCharArray(strName));
mallocInterface->Free(strName);
@@ -162,7 +162,7 @@ void DSVideoDeviceControl::updateDevices()
// Find the description
VARIANT varName;
varName.vt = VT_BSTR;
- hr = pPropBag->Read(L"FriendlyName", &varName, 0);
+ hr = pPropBag->Read(L"FriendlyName", &varName, nullptr);
if (SUCCEEDED(hr)) {
output = QString::fromWCharArray(varName.bstrVal);
}
diff --git a/src/plugins/directshow/camera/dsvideodevicecontrol.h b/src/plugins/directshow/camera/dsvideodevicecontrol.h
index 7a7a0af1e..24a5b61a1 100644
--- a/src/plugins/directshow/camera/dsvideodevicecontrol.h
+++ b/src/plugins/directshow/camera/dsvideodevicecontrol.h
@@ -48,13 +48,13 @@ class DSCameraSession;
//QTM_USE_NAMESPACE
-typedef QPair<QByteArray, QString> DSVideoDeviceInfo;
+using DSVideoDeviceInfo = QPair<QByteArray, QString>;
class DSVideoDeviceControl : public QVideoDeviceSelectorControl
{
Q_OBJECT
public:
- DSVideoDeviceControl(QObject *parent = 0);
+ DSVideoDeviceControl(QObject *parent = nullptr);
int deviceCount() const override;
QString deviceName(int index) const override;
diff --git a/src/plugins/directshow/camera/dsvideorenderer.cpp b/src/plugins/directshow/camera/dsvideorenderer.cpp
index bf0aa2684..cde63af65 100644
--- a/src/plugins/directshow/camera/dsvideorenderer.cpp
+++ b/src/plugins/directshow/camera/dsvideorenderer.cpp
@@ -45,7 +45,6 @@ QT_BEGIN_NAMESPACE
DSVideoRendererControl::DSVideoRendererControl(DSCameraSession* session, QObject *parent)
:QVideoRendererControl(parent),
- m_surface(0),
m_session(session)
{
}
diff --git a/src/plugins/directshow/camera/dsvideorenderer.h b/src/plugins/directshow/camera/dsvideorenderer.h
index 3a4570b4c..a6a1f8103 100644
--- a/src/plugins/directshow/camera/dsvideorenderer.h
+++ b/src/plugins/directshow/camera/dsvideorenderer.h
@@ -50,7 +50,7 @@ class DSVideoRendererControl : public QVideoRendererControl
{
Q_OBJECT
public:
- DSVideoRendererControl(DSCameraSession* session, QObject *parent = 0);
+ DSVideoRendererControl(DSCameraSession* session, QObject *parent = nullptr);
~DSVideoRendererControl() override;
QAbstractVideoSurface *surface() const override;
@@ -59,7 +59,7 @@ public:
void setSession(DSCameraSession* session);
private:
- QAbstractVideoSurface* m_surface;
+ QAbstractVideoSurface* m_surface = nullptr;
DSCameraSession* m_session;
};
diff --git a/src/plugins/directshow/common/directshowbasefilter.cpp b/src/plugins/directshow/common/directshowbasefilter.cpp
index 2792dc3c6..dfea2460f 100644
--- a/src/plugins/directshow/common/directshowbasefilter.cpp
+++ b/src/plugins/directshow/common/directshowbasefilter.cpp
@@ -45,10 +45,6 @@ QT_BEGIN_NAMESPACE
DirectShowBaseFilter::DirectShowBaseFilter()
: m_mutex(QMutex::Recursive)
- , m_state(State_Stopped)
- , m_graph(NULL)
- , m_clock(NULL)
- , m_sink(NULL)
{
}
@@ -57,7 +53,7 @@ DirectShowBaseFilter::~DirectShowBaseFilter()
{
if (m_clock) {
m_clock->Release();
- m_clock = NULL;
+ m_clock = nullptr;
}
}
@@ -75,9 +71,8 @@ HRESULT DirectShowBaseFilter::NotifyEvent(long eventCode, LONG_PTR eventParam1,
eventParam2 = (LONG_PTR)(IBaseFilter*)this;
return sink->Notify(eventCode, eventParam1, eventParam2);
- } else {
- return E_NOTIMPL;
}
+ return E_NOTIMPL;
}
HRESULT DirectShowBaseFilter::Run(REFERENCE_TIME tStart)
@@ -207,7 +202,7 @@ HRESULT DirectShowBaseFilter::FindPin(LPCWSTR Id, IPin **ppPin)
}
}
- *ppPin = 0;
+ *ppPin = nullptr;
return VFW_E_NOT_FOUND;
}
@@ -217,7 +212,7 @@ HRESULT DirectShowBaseFilter::JoinFilterGraph(IFilterGraph *pGraph, LPCWSTR pNam
m_filterName = QString::fromWCharArray(pName);
m_graph = pGraph;
- m_sink = NULL;
+ m_sink = nullptr;
if (m_graph) {
if (SUCCEEDED(m_graph->QueryInterface(IID_PPV_ARGS(&m_sink))))
diff --git a/src/plugins/directshow/common/directshowbasefilter.h b/src/plugins/directshow/common/directshowbasefilter.h
index fe78f96b2..ea5b8fafe 100644
--- a/src/plugins/directshow/common/directshowbasefilter.h
+++ b/src/plugins/directshow/common/directshowbasefilter.h
@@ -79,12 +79,12 @@ public:
protected:
QMutex m_mutex;
- FILTER_STATE m_state;
- IFilterGraph *m_graph;
- IReferenceClock *m_clock;
- IMediaEventSink *m_sink;
+ FILTER_STATE m_state = State_Stopped;
+ IFilterGraph *m_graph = nullptr;
+ IReferenceClock *m_clock = nullptr;
+ IMediaEventSink *m_sink = nullptr;
QString m_filterName;
- REFERENCE_TIME m_startTime;
+ REFERENCE_TIME m_startTime = 0;
private:
Q_DISABLE_COPY(DirectShowBaseFilter)
diff --git a/src/plugins/directshow/common/directshoweventloop.cpp b/src/plugins/directshow/common/directshoweventloop.cpp
index fbc7b8cee..a38c26ef4 100644
--- a/src/plugins/directshow/common/directshoweventloop.cpp
+++ b/src/plugins/directshow/common/directshoweventloop.cpp
@@ -51,7 +51,6 @@ public:
DirectShowPostedEvent(QObject *receiver, QEvent *event)
: receiver(receiver)
, event(event)
- , next(0)
{
}
@@ -62,15 +61,13 @@ public:
QObject *receiver;
QEvent *event;
- DirectShowPostedEvent *next;
+ DirectShowPostedEvent *next = nullptr;
};
DirectShowEventLoop::DirectShowEventLoop(QObject *parent)
: QObject(parent)
- , m_postsHead(0)
- , m_postsTail(0)
- , m_eventHandle(::CreateEvent(0, 0, 0, 0))
- , m_waitHandle(::CreateEvent(0, 0, 0, 0))
+ , m_eventHandle(::CreateEvent(nullptr, 0, 0, nullptr))
+ , m_waitHandle(::CreateEvent(nullptr, 0, 0, nullptr))
{
}
@@ -141,7 +138,7 @@ void DirectShowEventLoop::processEvents()
m_postsHead = m_postsHead->next;
if (!m_postsHead)
- m_postsTail = 0;
+ m_postsTail = nullptr;
locker.unlock();
QCoreApplication::sendEvent(post->receiver, post->event);
diff --git a/src/plugins/directshow/common/directshoweventloop.h b/src/plugins/directshow/common/directshoweventloop.h
index a29274b7b..984bd23a4 100644
--- a/src/plugins/directshow/common/directshoweventloop.h
+++ b/src/plugins/directshow/common/directshoweventloop.h
@@ -54,7 +54,7 @@ class DirectShowEventLoop : public QObject
{
Q_OBJECT
public:
- DirectShowEventLoop(QObject *parent = 0);
+ DirectShowEventLoop(QObject *parent = nullptr);
~DirectShowEventLoop() override;
void wait(QMutex *mutex);
@@ -68,8 +68,8 @@ protected:
private:
void processEvents();
- DirectShowPostedEvent *m_postsHead;
- DirectShowPostedEvent *m_postsTail;
+ DirectShowPostedEvent *m_postsHead = nullptr;
+ DirectShowPostedEvent *m_postsTail = nullptr;
HANDLE m_eventHandle;
HANDLE m_waitHandle;
QMutex m_mutex;
diff --git a/src/plugins/directshow/common/directshowglobal.h b/src/plugins/directshow/common/directshowglobal.h
index 5f391710e..12693e4f1 100644
--- a/src/plugins/directshow/common/directshowglobal.h
+++ b/src/plugins/directshow/common/directshowglobal.h
@@ -53,35 +53,35 @@ QT_END_NAMESPACE
template <typename T> T *com_cast(IUnknown *unknown, const IID &iid)
{
- T *iface = 0;
+ T *iface = nullptr;
return unknown && unknown->QueryInterface(iid, reinterpret_cast<void **>(&iface)) == S_OK
? iface
- : 0;
+ : nullptr;
}
template <typename T> T *com_new(const IID &clsid)
{
- T *object = 0;
+ T *object = nullptr;
return CoCreateInstance(
clsid,
- NULL,
+ nullptr,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&object)) == S_OK
? object
- : 0;
+ : nullptr;
}
template <typename T> T *com_new(const IID &clsid, const IID &iid)
{
- T *object = 0;
+ T *object = nullptr;
return CoCreateInstance(
clsid,
- NULL,
+ nullptr,
CLSCTX_INPROC_SERVER,
iid,
reinterpret_cast<void **>(&object)) == S_OK
? object
- : 0;
+ : nullptr;
}
DEFINE_GUID(MEDIASUBTYPE_I420,
diff --git a/src/plugins/directshow/common/directshowmediatype.cpp b/src/plugins/directshow/common/directshowmediatype.cpp
index fe86e0204..103f1ddc1 100644
--- a/src/plugins/directshow/common/directshowmediatype.cpp
+++ b/src/plugins/directshow/common/directshowmediatype.cpp
@@ -52,7 +52,7 @@ namespace
{
{ QVideoFrame::Format_ARGB32, MEDIASUBTYPE_ARGB32 },
{ QVideoFrame::Format_RGB32, MEDIASUBTYPE_RGB32 },
- { QVideoFrame::Format_RGB24, MEDIASUBTYPE_RGB24 },
+ { QVideoFrame::Format_BGR24, MEDIASUBTYPE_RGB24 },
{ QVideoFrame::Format_RGB565, MEDIASUBTYPE_RGB565 },
{ QVideoFrame::Format_RGB555, MEDIASUBTYPE_RGB555 },
{ QVideoFrame::Format_AYUV444, MEDIASUBTYPE_AYUV },
diff --git a/src/plugins/directshow/common/directshowmediatypeenum.cpp b/src/plugins/directshow/common/directshowmediatypeenum.cpp
index 10623a246..0ff147fea 100644
--- a/src/plugins/directshow/common/directshowmediatypeenum.cpp
+++ b/src/plugins/directshow/common/directshowmediatypeenum.cpp
@@ -42,17 +42,13 @@
#include "directshowpin.h"
DirectShowMediaTypeEnum::DirectShowMediaTypeEnum(DirectShowPin *pin)
- : m_pin(pin)
- , m_mediaTypes(pin->supportedMediaTypes())
- , m_index(0)
+ : m_mediaTypes(pin->supportedMediaTypes())
{
m_pin->AddRef();
}
DirectShowMediaTypeEnum::DirectShowMediaTypeEnum(const QList<DirectShowMediaType> &types)
- : m_pin(NULL)
- , m_mediaTypes(types)
- , m_index(0)
+ : m_mediaTypes(types)
{
}
diff --git a/src/plugins/directshow/common/directshowmediatypeenum.h b/src/plugins/directshow/common/directshowmediatypeenum.h
index e78e0a0f2..a5c347004 100644
--- a/src/plugins/directshow/common/directshowmediatypeenum.h
+++ b/src/plugins/directshow/common/directshowmediatypeenum.h
@@ -67,9 +67,9 @@ public:
private:
Q_DISABLE_COPY(DirectShowMediaTypeEnum)
- DirectShowPin *m_pin;
+ DirectShowPin *m_pin = nullptr;
QList<DirectShowMediaType> m_mediaTypes;
- int m_index;
+ int m_index = 0;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/common/directshowpin.cpp b/src/plugins/directshow/common/directshowpin.cpp
index 508a9b21d..390d410a4 100644
--- a/src/plugins/directshow/common/directshowpin.cpp
+++ b/src/plugins/directshow/common/directshowpin.cpp
@@ -52,7 +52,6 @@ DirectShowPin::DirectShowPin(DirectShowBaseFilter *filter, const QString &name,
, m_filter(filter)
, m_name(name)
, m_direction(direction)
- , m_peerPin(NULL)
{
}
@@ -76,11 +75,11 @@ HRESULT DirectShowPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
if (pd == m_direction)
return VFW_E_INVALID_DIRECTION;
- if (pmt != NULL && DirectShowMediaType::isPartiallySpecified(pmt)) {
+ if (pmt != nullptr && DirectShowMediaType::isPartiallySpecified(pmt)) {
// If the type is fully specified, use it
hr = tryConnect(pReceivePin, pmt);
} else {
- IEnumMediaTypes *enumMediaTypes = NULL;
+ IEnumMediaTypes *enumMediaTypes = nullptr;
// First, try the receiving pin's preferred types
if (SUCCEEDED(pReceivePin->EnumMediaTypes(&enumMediaTypes))) {
@@ -108,13 +107,13 @@ HRESULT DirectShowPin::tryMediaTypes(IPin *pin, const AM_MEDIA_TYPE *partialType
if (FAILED(hr))
return hr;
- AM_MEDIA_TYPE *mediaType = NULL;
+ AM_MEDIA_TYPE *mediaType = nullptr;
ULONG mediaCount = 0;
HRESULT hrFailure = VFW_E_NO_ACCEPTABLE_TYPES;
for (; enumMediaTypes->Next(1, &mediaType, &mediaCount) == S_OK;) {
- if (mediaType && (partialType == NULL || DirectShowMediaType::isCompatible(mediaType, partialType))) {
+ if (mediaType && (partialType == nullptr || DirectShowMediaType::isCompatible(mediaType, partialType))) {
hr = tryConnect(pin, mediaType);
if (FAILED(hr) && (hr != E_FAIL)
@@ -157,8 +156,8 @@ HRESULT DirectShowPin::tryConnect(IPin *pin, const AM_MEDIA_TYPE *type)
if (FAILED(hr)) {
connectionEnded();
m_peerPin->Release();
- m_peerPin = NULL;
- setMediaType(NULL);
+ m_peerPin = nullptr;
+ setMediaType(nullptr);
return hr;
}
@@ -197,8 +196,8 @@ HRESULT DirectShowPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *
if (FAILED(hr)) {
connectionEnded();
m_peerPin->Release();
- m_peerPin = NULL;
- setMediaType(NULL);
+ m_peerPin = nullptr;
+ setMediaType(nullptr);
return hr;
}
@@ -218,9 +217,9 @@ HRESULT DirectShowPin::Disconnect()
return hr;
m_peerPin->Release();
- m_peerPin = NULL;
+ m_peerPin = nullptr;
- setMediaType(NULL);
+ setMediaType(nullptr);
return S_OK;
}
@@ -235,7 +234,7 @@ HRESULT DirectShowPin::ConnectedTo(IPin **ppPin)
QMutexLocker locker(&m_mutex);
if (!m_peerPin) {
- *ppPin = 0;
+ *ppPin = nullptr;
return VFW_E_NOT_CONNECTED;
}
m_peerPin->AddRef();
@@ -380,8 +379,6 @@ HRESULT DirectShowPin::setActive(bool active)
DirectShowOutputPin::DirectShowOutputPin(DirectShowBaseFilter *filter, const QString &name)
: DirectShowPin(filter, name, PINDIR_OUTPUT)
- , m_allocator(NULL)
- , m_inputPin(NULL)
{
}
@@ -393,8 +390,8 @@ HRESULT DirectShowOutputPin::completeConnection(IPin *pin)
if (!pin)
return E_POINTER;
- Q_ASSERT(m_inputPin == NULL);
- Q_ASSERT(m_allocator == NULL);
+ Q_ASSERT(m_inputPin == nullptr);
+ Q_ASSERT(m_allocator == nullptr);
HRESULT hr = pin->QueryInterface(IID_PPV_ARGS(&m_inputPin));
if (FAILED(hr))
@@ -423,7 +420,7 @@ HRESULT DirectShowOutputPin::completeConnection(IPin *pin)
}
m_allocator->Release();
- m_allocator = NULL;
+ m_allocator = nullptr;
}
// Otherwise, allocate its own allocator
@@ -441,7 +438,7 @@ HRESULT DirectShowOutputPin::completeConnection(IPin *pin)
}
m_allocator->Release();
- m_allocator = NULL;
+ m_allocator = nullptr;
}
return hr;
@@ -455,12 +452,12 @@ HRESULT DirectShowOutputPin::connectionEnded()
return hr;
m_allocator->Release();
- m_allocator = NULL;
+ m_allocator = nullptr;
}
if (m_inputPin) {
m_inputPin->Release();
- m_inputPin = NULL;
+ m_inputPin = nullptr;
}
return S_OK;
@@ -485,9 +482,6 @@ HRESULT DirectShowOutputPin::EndOfStream()
DirectShowInputPin::DirectShowInputPin(DirectShowBaseFilter *filter, const QString &name)
: DirectShowPin(filter, name, PINDIR_INPUT)
- , m_allocator(NULL)
- , m_flushing(false)
- , m_inErrorState(false)
{
ZeroMemory(&m_sampleProperties, sizeof(m_sampleProperties));
}
@@ -502,7 +496,7 @@ HRESULT DirectShowInputPin::connectionEnded()
return hr;
m_allocator->Release();
- m_allocator = NULL;
+ m_allocator = nullptr;
}
return S_OK;
diff --git a/src/plugins/directshow/common/directshowpin.h b/src/plugins/directshow/common/directshowpin.h
index 5e513d002..bb5a07ad7 100644
--- a/src/plugins/directshow/common/directshowpin.h
+++ b/src/plugins/directshow/common/directshowpin.h
@@ -56,7 +56,7 @@ public:
virtual ~DirectShowPin();
QString name() const { return m_name; }
- bool isConnected() const { return m_peerPin != NULL; }
+ bool isConnected() const { return m_peerPin != nullptr; }
virtual bool isMediaTypeSupported(const AM_MEDIA_TYPE *type) = 0;
virtual QList<DirectShowMediaType> supportedMediaTypes();
@@ -102,7 +102,7 @@ protected:
QString m_name;
PIN_DIRECTION m_direction;
- IPin *m_peerPin;
+ IPin *m_peerPin = nullptr;
DirectShowMediaType m_mediaType;
private:
@@ -128,8 +128,8 @@ public:
protected:
DirectShowOutputPin(DirectShowBaseFilter *filter, const QString &name);
- IMemAllocator *m_allocator;
- IMemInputPin *m_inputPin;
+ IMemAllocator *m_allocator = nullptr;
+ IMemInputPin *m_inputPin = nullptr;
private:
Q_DISABLE_COPY(DirectShowOutputPin)
@@ -166,9 +166,9 @@ public:
protected:
DirectShowInputPin(DirectShowBaseFilter *filter, const QString &name);
- IMemAllocator *m_allocator;
- bool m_flushing;
- bool m_inErrorState;
+ IMemAllocator *m_allocator = nullptr;
+ bool m_flushing = false;
+ bool m_inErrorState = false;
AM_SAMPLE2_PROPERTIES m_sampleProperties;
private:
diff --git a/src/plugins/directshow/common/directshowpinenum.cpp b/src/plugins/directshow/common/directshowpinenum.cpp
index 20fa93d6e..7ba1bb6e9 100644
--- a/src/plugins/directshow/common/directshowpinenum.cpp
+++ b/src/plugins/directshow/common/directshowpinenum.cpp
@@ -44,7 +44,6 @@ QT_BEGIN_NAMESPACE
DirectShowPinEnum::DirectShowPinEnum(DirectShowBaseFilter *filter)
: m_filter(filter)
- , m_index(0)
{
m_filter->AddRef();
const QList<DirectShowPin *> pinList = filter->pins();
@@ -55,9 +54,7 @@ DirectShowPinEnum::DirectShowPinEnum(DirectShowBaseFilter *filter)
}
DirectShowPinEnum::DirectShowPinEnum(const QList<IPin *> &pins)
- : m_filter(NULL)
- , m_pins(pins)
- , m_index(0)
+ : m_pins(pins)
{
for (IPin *pin : qAsConst(m_pins))
pin->AddRef();
diff --git a/src/plugins/directshow/common/directshowpinenum.h b/src/plugins/directshow/common/directshowpinenum.h
index d89f140b1..aada1a71e 100644
--- a/src/plugins/directshow/common/directshowpinenum.h
+++ b/src/plugins/directshow/common/directshowpinenum.h
@@ -68,9 +68,9 @@ public:
private:
Q_DISABLE_COPY(DirectShowPinEnum)
- DirectShowBaseFilter *m_filter;
+ DirectShowBaseFilter *m_filter = nullptr;
QList<IPin *> m_pins;
- int m_index;
+ int m_index = 0;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/common/directshowsamplegrabber.cpp b/src/plugins/directshow/common/directshowsamplegrabber.cpp
index fec59b538..a9e74f9db 100644
--- a/src/plugins/directshow/common/directshowsamplegrabber.cpp
+++ b/src/plugins/directshow/common/directshowsamplegrabber.cpp
@@ -75,14 +75,15 @@ public:
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) override
{
- if (NULL == ppvObject)
+ if (nullptr == ppvObject)
return E_POINTER;
if (riid == IID_IUnknown /*__uuidof(IUnknown) */ ) {
AddRef();
*ppvObject = static_cast<IUnknown *>(this);
return S_OK;
- } else if (riid == IID_ISampleGrabberCB /*__uuidof(ISampleGrabberCB)*/ ) {
+ }
+ if (riid == IID_ISampleGrabberCB /*__uuidof(ISampleGrabberCB)*/ ) {
AddRef();
*ppvObject = static_cast<ISampleGrabberCB *>(this);
return S_OK;
@@ -115,12 +116,9 @@ private:
DirectShowSampleGrabber::DirectShowSampleGrabber(QObject *p)
: QObject(p)
- , m_sampleGrabber(nullptr)
- , m_sampleGabberCb(nullptr)
- , m_callbackType(CallbackMethod::BufferCB)
{
// Create sample grabber filter
- HRESULT hr = CoCreateInstance(cLSID_SampleGrabber, NULL, CLSCTX_INPROC, iID_ISampleGrabber, reinterpret_cast<void **>(&m_sampleGrabber));
+ HRESULT hr = CoCreateInstance(cLSID_SampleGrabber, nullptr, CLSCTX_INPROC, iID_ISampleGrabber, reinterpret_cast<void **>(&m_sampleGrabber));
if (FAILED(hr)) {
qCWarning(qtDirectShowPlugin, "Failed to create sample grabber");
diff --git a/src/plugins/directshow/common/directshowsamplegrabber.h b/src/plugins/directshow/common/directshowsamplegrabber.h
index a9b72fcd1..5fc61de14 100644
--- a/src/plugins/directshow/common/directshowsamplegrabber.h
+++ b/src/plugins/directshow/common/directshowsamplegrabber.h
@@ -78,10 +78,10 @@ Q_SIGNALS:
void bufferAvailable(double time, const QByteArray &data);
private:
- IBaseFilter *m_filter;
- ISampleGrabber *m_sampleGrabber;
- SampleGrabberCallbackPrivate *m_sampleGabberCb;
- CallbackMethod m_callbackType;
+ IBaseFilter *m_filter = nullptr;
+ ISampleGrabber *m_sampleGrabber = nullptr;
+ SampleGrabberCallbackPrivate *m_sampleGabberCb = nullptr;
+ CallbackMethod m_callbackType= CallbackMethod::BufferCB;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/common/directshowutils.cpp b/src/plugins/directshow/common/directshowutils.cpp
index d1c1d42ab..21b86926f 100644
--- a/src/plugins/directshow/common/directshowutils.cpp
+++ b/src/plugins/directshow/common/directshowutils.cpp
@@ -117,7 +117,7 @@ bool DirectShowUtils::getPin(IBaseFilter *filter, PIN_DIRECTION pinDirection, IP
enumPins->Reset();
IPin *nextPin = nullptr;
- while (enumPins->Next(1, &nextPin, NULL) == S_OK) {
+ while (enumPins->Next(1, &nextPin, nullptr) == S_OK) {
const ScopedSafeRelease<IPin> releasePin { &nextPin };
PIN_DIRECTION currentPinDir;
*hrOut = nextPin->QueryDirection(&currentPinDir);
@@ -300,7 +300,7 @@ bool DirectShowUtils::connectFilters(IGraphBuilder *graph,
}
IBaseFilter *nextFilter = nullptr;
- while (S_OK == filters->Next(1, &nextFilter, 0)) {
+ while (S_OK == filters->Next(1, &nextFilter, nullptr)) {
const ScopedSafeRelease<IBaseFilter> releaseNextFilter { &nextFilter };
if (nextFilter && findAndConnect(nextFilter))
return true;
diff --git a/src/plugins/directshow/common/directshowvideobuffer.cpp b/src/plugins/directshow/common/directshowvideobuffer.cpp
index 7f94da97e..fc329f58a 100644
--- a/src/plugins/directshow/common/directshowvideobuffer.cpp
+++ b/src/plugins/directshow/common/directshowvideobuffer.cpp
@@ -64,7 +64,7 @@ uchar *DirectShowVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine
if (bytesPerLine)
*bytesPerLine = m_bytesPerLine;
- BYTE *bytes = 0;
+ BYTE *bytes = nullptr;
if (m_sample->GetPointer(&bytes) == S_OK) {
m_mapMode = mode;
@@ -72,7 +72,7 @@ uchar *DirectShowVideoBuffer::map(MapMode mode, int *numBytes, int *bytesPerLine
return reinterpret_cast<uchar *>(bytes);
}
}
- return 0;
+ return nullptr;
}
void DirectShowVideoBuffer::unmap()
diff --git a/src/plugins/directshow/directshow.pro b/src/plugins/directshow/directshow.pro
index e531efc53..27bb3abb8 100644
--- a/src/plugins/directshow/directshow.pro
+++ b/src/plugins/directshow/directshow.pro
@@ -16,6 +16,10 @@ mingw {
DEFINES += NO_DSHOW_STRSAFE
}
+mingw {
+ LIBS_PRIVATE += -lamstrmid
+}
+
include(common/common.pri)
include(player/player.pri)
include(camera/camera.pri)
diff --git a/src/plugins/directshow/dsserviceplugin.cpp b/src/plugins/directshow/dsserviceplugin.cpp
index 727a11b55..e22bfe93b 100644
--- a/src/plugins/directshow/dsserviceplugin.cpp
+++ b/src/plugins/directshow/dsserviceplugin.cpp
@@ -78,7 +78,7 @@ static int g_refCount = 0;
void addRefCount()
{
if (++g_refCount == 1)
- CoInitialize(NULL);
+ CoInitialize(nullptr);
}
void releaseRefCount()
@@ -99,7 +99,7 @@ QMediaService* DSServicePlugin::create(QString const& key)
return new DirectShowPlayerService;
}
- return 0;
+ return nullptr;
}
void DSServicePlugin::release(QMediaService *service)
diff --git a/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp b/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp
index 78733972a..f4e45cdd8 100644
--- a/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp
+++ b/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp
@@ -48,8 +48,6 @@ DirectShowAudioEndpointControl::DirectShowAudioEndpointControl(
DirectShowPlayerService *service, QObject *parent)
: QAudioOutputSelectorControl(parent)
, m_service(service)
- , m_bindContext(0)
- , m_deviceEnumerator(0)
{
if (CreateBindCtx(0, &m_bindContext) == S_OK) {
m_deviceEnumerator = com_new<ICreateDevEnum>(CLSID_SystemDeviceEnum);
@@ -83,12 +81,12 @@ QString DirectShowAudioEndpointControl::outputDescription(const QString &name) c
QString description;
if (IMoniker *moniker = m_devices.value(name, 0)) {
- IPropertyBag *propertyBag = 0;
+ IPropertyBag *propertyBag = nullptr;
if (SUCCEEDED(moniker->BindToStorage(
- 0, 0, IID_IPropertyBag, reinterpret_cast<void **>(&propertyBag)))) {
+ nullptr, nullptr, IID_IPropertyBag, reinterpret_cast<void **>(&propertyBag)))) {
VARIANT name;
VariantInit(&name);
- if (SUCCEEDED(propertyBag->Read(L"FriendlyName", &name, 0)))
+ if (SUCCEEDED(propertyBag->Read(L"FriendlyName", &name, nullptr)))
description = QString::fromWCharArray(name.bstrVal);
VariantClear(&name);
propertyBag->Release();
@@ -117,11 +115,11 @@ void DirectShowAudioEndpointControl::setActiveOutput(const QString &name)
return;
if (IMoniker *moniker = m_devices.value(name, 0)) {
- IBaseFilter *filter = 0;
+ IBaseFilter *filter = nullptr;
if (moniker->BindToObject(
m_bindContext,
- 0,
+ nullptr,
IID_IBaseFilter,
reinterpret_cast<void **>(&filter)) == S_OK) {
m_service->setAudioOutput(filter);
@@ -133,15 +131,15 @@ void DirectShowAudioEndpointControl::setActiveOutput(const QString &name)
void DirectShowAudioEndpointControl::updateEndpoints()
{
- IMalloc *oleMalloc = 0;
+ IMalloc *oleMalloc = nullptr;
if (m_deviceEnumerator && CoGetMalloc(1, &oleMalloc) == S_OK) {
- IEnumMoniker *monikers = 0;
+ IEnumMoniker *monikers = nullptr;
if (m_deviceEnumerator->CreateClassEnumerator(
CLSID_AudioRendererCategory, &monikers, 0) == S_OK) {
- for (IMoniker *moniker = 0; monikers->Next(1, &moniker, 0) == S_OK; moniker->Release()) {
- OLECHAR *string = 0;
- if (moniker->GetDisplayName(m_bindContext, 0, &string) == S_OK) {
+ for (IMoniker *moniker = nullptr; monikers->Next(1, &moniker, nullptr) == S_OK; moniker->Release()) {
+ OLECHAR *string = nullptr;
+ if (moniker->GetDisplayName(m_bindContext, nullptr, &string) == S_OK) {
QString deviceId = QString::fromWCharArray(string);
oleMalloc->Free(string);
diff --git a/src/plugins/directshow/player/directshowaudioendpointcontrol.h b/src/plugins/directshow/player/directshowaudioendpointcontrol.h
index b6f8a6724..05c4eb990 100644
--- a/src/plugins/directshow/player/directshowaudioendpointcontrol.h
+++ b/src/plugins/directshow/player/directshowaudioendpointcontrol.h
@@ -52,7 +52,7 @@ class DirectShowAudioEndpointControl : public QAudioOutputSelectorControl
{
Q_OBJECT
public:
- DirectShowAudioEndpointControl(DirectShowPlayerService *service, QObject *parent = 0);
+ DirectShowAudioEndpointControl(DirectShowPlayerService *service, QObject *parent = nullptr);
~DirectShowAudioEndpointControl() override;
QList<QString> availableOutputs() const override;
@@ -68,8 +68,8 @@ private:
void updateEndpoints();
DirectShowPlayerService *m_service;
- IBindCtx *m_bindContext;
- ICreateDevEnum *m_deviceEnumerator;
+ IBindCtx *m_bindContext = nullptr;
+ ICreateDevEnum *m_deviceEnumerator = nullptr;
QMap<QString, IMoniker *> m_devices;
QString m_defaultEndpoint;
diff --git a/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp b/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp
index fc1058d57..89bfc1467 100644
--- a/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp
+++ b/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp
@@ -43,7 +43,6 @@
DirectShowEvrVideoWindowControl::DirectShowEvrVideoWindowControl(QObject *parent)
: EvrVideoWindowControl(parent)
- , m_evrFilter(NULL)
{
}
@@ -59,7 +58,7 @@ IBaseFilter *DirectShowEvrVideoWindowControl::filter()
m_evrFilter = com_new<IBaseFilter>(clsid_EnhancedVideoRenderer);
if (!setEvr(m_evrFilter)) {
m_evrFilter->Release();
- m_evrFilter = NULL;
+ m_evrFilter = nullptr;
}
}
diff --git a/src/plugins/directshow/player/directshowevrvideowindowcontrol.h b/src/plugins/directshow/player/directshowevrvideowindowcontrol.h
index fb661780f..edbde78d6 100644
--- a/src/plugins/directshow/player/directshowevrvideowindowcontrol.h
+++ b/src/plugins/directshow/player/directshowevrvideowindowcontrol.h
@@ -49,13 +49,13 @@ QT_BEGIN_NAMESPACE
class DirectShowEvrVideoWindowControl : public EvrVideoWindowControl
{
public:
- DirectShowEvrVideoWindowControl(QObject *parent = 0);
+ DirectShowEvrVideoWindowControl(QObject *parent = nullptr);
~DirectShowEvrVideoWindowControl();
IBaseFilter *filter();
private:
- IBaseFilter *m_evrFilter;
+ IBaseFilter *m_evrFilter = nullptr;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/player/directshowioreader.cpp b/src/plugins/directshow/player/directshowioreader.cpp
index 3482cee02..b903038ea 100644
--- a/src/plugins/directshow/player/directshowioreader.cpp
+++ b/src/plugins/directshow/player/directshowioreader.cpp
@@ -55,25 +55,23 @@ class DirectShowSampleRequest
public:
DirectShowSampleRequest(
IMediaSample *sample, DWORD_PTR userData, LONGLONG position, LONG length, BYTE *buffer)
- : next(0)
- , sample(sample)
+ : sample(sample)
, userData(userData)
, position(position)
, length(length)
, buffer(buffer)
- , result(S_FALSE)
{
}
DirectShowSampleRequest *remove() { DirectShowSampleRequest *n = next; delete this; return n; }
- DirectShowSampleRequest *next;
+ DirectShowSampleRequest *next = nullptr;
IMediaSample *sample;
DWORD_PTR userData;
LONGLONG position;
LONG length;
BYTE *buffer;
- HRESULT result;
+ HRESULT result = S_FALSE;
};
DirectShowIOReader::DirectShowIOReader(
@@ -81,18 +79,6 @@ DirectShowIOReader::DirectShowIOReader(
: m_source(source)
, m_device(device)
, m_loop(loop)
- , m_pendingHead(0)
- , m_pendingTail(0)
- , m_readyHead(0)
- , m_readyTail(0)
- , m_synchronousPosition(0)
- , m_synchronousLength(0)
- , m_synchronousBytesRead(0)
- , m_synchronousBuffer(0)
- , m_synchronousResult(S_OK)
- , m_totalLength(0)
- , m_availableLength(0)
- , m_flushing(false)
{
moveToThread(device->thread());
@@ -204,21 +190,21 @@ HRESULT DirectShowIOReader::WaitForNext(
m_readyHead = request->next;
if (!m_readyHead)
- m_readyTail = 0;
+ m_readyTail = nullptr;
delete request;
return hr;
}
if (m_flushing) {
- *ppSample = 0;
+ *ppSample = nullptr;
*pdwUser = 0;
return VFW_E_WRONG_STATE;
}
} while (m_wait.wait(&m_mutex, dwTimeout));
- *ppSample = 0;
+ *ppSample = nullptr;
*pdwUser = 0;
return VFW_E_TIMEOUT;
@@ -373,10 +359,10 @@ void DirectShowIOReader::readyRead()
m_pendingHead = m_pendingHead->next;
- m_readyTail->next = 0;
+ m_readyTail->next = nullptr;
if (!m_pendingHead)
- m_pendingTail = 0;
+ m_pendingTail = nullptr;
if (!m_readyHead)
m_readyHead = m_readyTail;
@@ -463,10 +449,10 @@ void DirectShowIOReader::flushRequests()
m_pendingHead = m_pendingHead->next;
- m_readyTail->next = 0;
+ m_readyTail->next = nullptr;
if (!m_pendingHead)
- m_pendingTail = 0;
+ m_pendingTail = nullptr;
if (!m_readyHead)
m_readyHead = m_readyTail;
diff --git a/src/plugins/directshow/player/directshowioreader.h b/src/plugins/directshow/player/directshowioreader.h
index 550990648..a0f2d7adb 100644
--- a/src/plugins/directshow/player/directshowioreader.h
+++ b/src/plugins/directshow/player/directshowioreader.h
@@ -99,18 +99,18 @@ private:
DirectShowIOSource *m_source;
QIODevice *m_device;
DirectShowEventLoop *m_loop;
- DirectShowSampleRequest *m_pendingHead;
- DirectShowSampleRequest *m_pendingTail;
- DirectShowSampleRequest *m_readyHead;
- DirectShowSampleRequest *m_readyTail;
- LONGLONG m_synchronousPosition;
- LONG m_synchronousLength;
- qint64 m_synchronousBytesRead;
- BYTE *m_synchronousBuffer;
- HRESULT m_synchronousResult;
- LONGLONG m_totalLength;
- LONGLONG m_availableLength;
- bool m_flushing;
+ DirectShowSampleRequest *m_pendingHead = nullptr;
+ DirectShowSampleRequest *m_pendingTail = nullptr;
+ DirectShowSampleRequest *m_readyHead = nullptr;
+ DirectShowSampleRequest *m_readyTail = nullptr;
+ LONGLONG m_synchronousPosition = 0;
+ LONG m_synchronousLength = 0;
+ qint64 m_synchronousBytesRead = 0;
+ BYTE *m_synchronousBuffer = nullptr;
+ HRESULT m_synchronousResult = S_OK;
+ LONGLONG m_totalLength = 0;
+ LONGLONG m_availableLength = 0;
+ bool m_flushing = false;
QMutex m_mutex;
QWaitCondition m_wait;
};
diff --git a/src/plugins/directshow/player/directshowiosource.cpp b/src/plugins/directshow/player/directshowiosource.cpp
index d5833fafc..5144710b7 100644
--- a/src/plugins/directshow/player/directshowiosource.cpp
+++ b/src/plugins/directshow/player/directshowiosource.cpp
@@ -66,16 +66,7 @@ static const GUID directshow_subtypes[] =
};
DirectShowIOSource::DirectShowIOSource(DirectShowEventLoop *loop)
- : m_ref(1)
- , m_state(State_Stopped)
- , m_reader(0)
- , m_loop(loop)
- , m_graph(0)
- , m_clock(0)
- , m_allocator(0)
- , m_peerPin(0)
- , m_pinId(QLatin1String("Data"))
- , m_queriedForAsyncReader(false)
+ : m_loop(loop)
{
// This filter has only one possible output type, that is, a stream of data
// with no particular subtype. The graph builder will try every demux/decode filters
@@ -92,9 +83,9 @@ DirectShowIOSource::DirectShowIOSource(DirectShowEventLoop *loop)
FALSE, // bTemporalCompression
1, // lSampleSize
GUID_NULL, // formattype
- 0, // pUnk
+ nullptr, // pUnk
0, // cbFormat
- 0, // pbFormat
+ nullptr, // pbFormat
};
for (const auto &directshowSubtype : directshow_subtypes) {
@@ -152,7 +143,7 @@ HRESULT DirectShowIOSource::QueryInterface(REFIID riid, void **ppvObject)
m_queriedForAsyncReader = true;
*ppvObject = static_cast<IAsyncReader *>(m_reader);
} else {
- *ppvObject = 0;
+ *ppvObject = nullptr;
return E_NOINTERFACE;
}
@@ -381,7 +372,7 @@ HRESULT DirectShowIOSource::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
pReceivePin->Disconnect();
if (m_allocator) {
m_allocator->Release();
- m_allocator = 0;
+ m_allocator = nullptr;
}
if (!m_queriedForAsyncReader)
hr = VFW_E_NO_TRANSPORT;
diff --git a/src/plugins/directshow/player/directshowiosource.h b/src/plugins/directshow/player/directshowiosource.h
index 02639de7c..837842518 100644
--- a/src/plugins/directshow/player/directshowiosource.h
+++ b/src/plugins/directshow/player/directshowiosource.h
@@ -119,19 +119,19 @@ public:
HRESULT STDMETHODCALLTYPE QueryDirection(PIN_DIRECTION *pPinDir) override;
private:
- volatile LONG m_ref;
- FILTER_STATE m_state;
- DirectShowIOReader *m_reader;
+ volatile LONG m_ref = 1;
+ FILTER_STATE m_state = State_Stopped;
+ DirectShowIOReader *m_reader = nullptr;
DirectShowEventLoop *m_loop;
- IFilterGraph *m_graph;
- IReferenceClock *m_clock;
- IMemAllocator *m_allocator;
- IPin *m_peerPin;
+ IFilterGraph *m_graph = nullptr;
+ IReferenceClock *m_clock = nullptr;
+ IMemAllocator *m_allocator = nullptr;
+ IPin *m_peerPin = nullptr;
DirectShowMediaType m_connectionMediaType;
QList<DirectShowMediaType> m_supportedMediaTypes;
QString m_filterName;
- const QString m_pinId;
- bool m_queriedForAsyncReader;
+ const QString m_pinId = QLatin1String("Data");
+ bool m_queriedForAsyncReader = false;
QMutex m_mutex;
};
diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.cpp b/src/plugins/directshow/player/directshowmetadatacontrol.cpp
index 52b73a7df..46674143e 100644
--- a/src/plugins/directshow/player/directshowmetadatacontrol.cpp
+++ b/src/plugins/directshow/player/directshowmetadatacontrol.cpp
@@ -209,7 +209,7 @@ static QString nameForGUIDString(const QString &guid)
}
typedef HRESULT (WINAPI *q_SHCreateItemFromParsingName)(PCWSTR, IBindCtx *, const GUID&, void **);
-static q_SHCreateItemFromParsingName sHCreateItemFromParsingName = 0;
+static q_SHCreateItemFromParsingName sHCreateItemFromParsingName = nullptr;
#endif
#if QT_CONFIG(wmsdk)
@@ -225,7 +225,7 @@ namespace
};
}
-typedef QList<QWMMetaDataKey> QWMMetaDataKeys;
+using QWMMetaDataKeys = QList<QWMMetaDataKey>;
Q_GLOBAL_STATIC(QWMMetaDataKeys, metadataKeys)
static const QWMMetaDataKeys *qt_wmMetaDataKeys()
@@ -299,7 +299,7 @@ static QVariant getValue(IWMHeaderInfo *header, const wchar_t *key)
WMT_ATTR_DATATYPE type = WMT_TYPE_DWORD;
WORD size = 0;
- if (header->GetAttributeByName(&streamNumber, key, &type, 0, &size) == S_OK) {
+ if (header->GetAttributeByName(&streamNumber, key, &type, nullptr, &size) == S_OK) {
switch (type) {
case WMT_TYPE_DWORD:
if (size == sizeof(DWORD)) {
@@ -445,7 +445,6 @@ static QVariant convertValue(const PROPVARIANT& var)
DirectShowMetaDataControl::DirectShowMetaDataControl(QObject *parent)
: QMetaDataReaderControl(parent)
- , m_available(false)
{
}
@@ -472,7 +471,7 @@ static QString convertBSTR(BSTR *string)
::SysStringLen(*string));
::SysFreeString(*string);
- string = 0;
+ string = nullptr;
return value;
}
@@ -492,11 +491,11 @@ void DirectShowMetaDataControl::updateMetadata(const QString &fileSrc, QVariantM
}
if (!fileSrc.isEmpty() && sHCreateItemFromParsingName) {
- IShellItem2* shellItem = 0;
+ IShellItem2* shellItem = nullptr;
if (sHCreateItemFromParsingName(reinterpret_cast<const WCHAR*>(fileSrc.utf16()),
- 0, IID_PPV_ARGS(&shellItem)) == S_OK) {
+ nullptr, IID_PPV_ARGS(&shellItem)) == S_OK) {
- IPropertyStore *pStore = 0;
+ IPropertyStore *pStore = nullptr;
if (shellItem->GetPropertyStore(GPS_DEFAULT, IID_PPV_ARGS(&pStore)) == S_OK) {
DWORD cProps;
if (SUCCEEDED(pStore->GetCount(&cProps))) {
@@ -651,17 +650,17 @@ void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter
return;
#endif
{
- IAMMediaContent *content = 0;
+ IAMMediaContent *content = nullptr;
if ((!graph || graph->QueryInterface(
IID_IAMMediaContent, reinterpret_cast<void **>(&content)) != S_OK)
&& (!source || source->QueryInterface(
IID_IAMMediaContent, reinterpret_cast<void **>(&content)) != S_OK)) {
- content = 0;
+ content = nullptr;
}
if (content) {
- BSTR string = 0;
+ BSTR string = nullptr;
if (content->get_AuthorName(&string) == S_OK)
metadata.insert(QMediaMetaData::Author, convertBSTR(&string));
diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.h b/src/plugins/directshow/player/directshowmetadatacontrol.h
index 4196a7950..e66127ab3 100644
--- a/src/plugins/directshow/player/directshowmetadatacontrol.h
+++ b/src/plugins/directshow/player/directshowmetadatacontrol.h
@@ -54,7 +54,7 @@ class DirectShowMetaDataControl : public QMetaDataReaderControl
{
Q_OBJECT
public:
- DirectShowMetaDataControl(QObject *parent = 0);
+ DirectShowMetaDataControl(QObject *parent = nullptr);
~DirectShowMetaDataControl() override;
bool isMetaDataAvailable() const override;
@@ -76,7 +76,7 @@ private:
};
QVariantMap m_metadata;
- bool m_available;
+ bool m_available = false;
};
QT_END_NAMESPACE
diff --git a/src/plugins/directshow/player/directshowplayercontrol.cpp b/src/plugins/directshow/player/directshowplayercontrol.cpp
index 2d0ee2d59..7e1413b56 100644
--- a/src/plugins/directshow/player/directshowplayercontrol.cpp
+++ b/src/plugins/directshow/player/directshowplayercontrol.cpp
@@ -50,19 +50,6 @@
DirectShowPlayerControl::DirectShowPlayerControl(DirectShowPlayerService *service, QObject *parent)
: QMediaPlayerControl(parent)
, m_service(service)
- , m_audio(0)
- , m_updateProperties(0)
- , m_state(QMediaPlayer::StoppedState)
- , m_status(QMediaPlayer::NoMedia)
- , m_error(QMediaPlayer::NoError)
- , m_streamTypes(0)
- , m_volume(100)
- , m_muted(false)
- , m_emitPosition(-1)
- , m_pendingPosition(-1)
- , m_duration(0)
- , m_playbackRate(0)
- , m_seekable(false)
{
}
@@ -219,6 +206,9 @@ const QIODevice *DirectShowPlayerControl::mediaStream() const
void DirectShowPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream)
{
+ if (m_media == media)
+ return;
+
m_pendingPosition = -1;
m_emitPosition = -1;
diff --git a/src/plugins/directshow/player/directshowplayercontrol.h b/src/plugins/directshow/player/directshowplayercontrol.h
index dba9ab9a0..122f5be2f 100644
--- a/src/plugins/directshow/player/directshowplayercontrol.h
+++ b/src/plugins/directshow/player/directshowplayercontrol.h
@@ -55,7 +55,7 @@ class DirectShowPlayerControl : public QMediaPlayerControl
{
Q_OBJECT
public:
- DirectShowPlayerControl(DirectShowPlayerService *service, QObject *parent = 0);
+ DirectShowPlayerControl(DirectShowPlayerService *service, QObject *parent = nullptr);
~DirectShowPlayerControl() override;
QMediaPlayer::State state() const override;
@@ -129,20 +129,20 @@ private:
void setVolumeHelper(int volume);
DirectShowPlayerService *m_service;
- IBasicAudio *m_audio;
- QIODevice *m_stream;
- int m_updateProperties;
- QMediaPlayer::State m_state;
- QMediaPlayer::MediaStatus m_status;
- QMediaPlayer::Error m_error;
- int m_streamTypes;
- int m_volume;
- bool m_muted;
- qint64 m_emitPosition;
- qint64 m_pendingPosition;
- qint64 m_duration;
- qreal m_playbackRate;
- bool m_seekable;
+ IBasicAudio *m_audio = nullptr;
+ QIODevice *m_stream = nullptr;
+ int m_updateProperties = 0;
+ QMediaPlayer::State m_state = QMediaPlayer::StoppedState;
+ QMediaPlayer::MediaStatus m_status = QMediaPlayer::NoMedia;
+ QMediaPlayer::Error m_error = QMediaPlayer::NoError;
+ int m_streamTypes = 0;
+ int m_volume = 100;
+ bool m_muted = false;
+ qint64 m_emitPosition = -1;
+ qint64 m_pendingPosition = -1;
+ qint64 m_duration = 0;
+ qreal m_playbackRate = 0;
+ bool m_seekable = false;
QMediaContent m_media;
QString m_errorString;
diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp
index 059e253f1..56a428028 100644
--- a/src/plugins/directshow/player/directshowplayerservice.cpp
+++ b/src/plugins/directshow/player/directshowplayerservice.cpp
@@ -123,37 +123,8 @@ private:
DirectShowPlayerService::DirectShowPlayerService(QObject *parent)
: QMediaService(parent)
- , m_playerControl(0)
- , m_metaDataControl(0)
- , m_videoRendererControl(0)
- , m_videoWindowControl(0)
- , m_audioEndpointControl(0)
- , m_audioProbeControl(nullptr)
- , m_videoProbeControl(nullptr)
- , m_audioSampleGrabber(nullptr)
- , m_videoSampleGrabber(nullptr)
- , m_taskThread(0)
, m_loop(qt_directShowEventLoop())
- , m_pendingTasks(0)
- , m_executingTask(0)
- , m_executedTasks(0)
- , m_taskHandle(::CreateEvent(0, 0, 0, 0))
- , m_eventHandle(0)
- , m_graphStatus(NoMedia)
- , m_stream(0)
- , m_graph(0)
- , m_graphBuilder(nullptr)
- , m_source(0)
- , m_audioOutput(0)
- , m_videoOutput(0)
- , m_rate(1.0)
- , m_position(0)
- , m_seekPosition(-1)
- , m_duration(0)
- , m_buffering(false)
- , m_seekable(false)
- , m_atEnd(false)
- , m_dontCacheNextSeekResult(false)
+ , m_taskHandle(::CreateEvent(nullptr, 0, 0, nullptr))
{
m_playerControl = new DirectShowPlayerControl(this);
m_metaDataControl = new DirectShowMetaDataControl(this);
@@ -179,12 +150,12 @@ DirectShowPlayerService::~DirectShowPlayerService()
if (m_audioOutput) {
m_audioOutput->Release();
- m_audioOutput = 0;
+ m_audioOutput = nullptr;
}
if (m_videoOutput) {
m_videoOutput->Release();
- m_videoOutput = 0;
+ m_videoOutput = nullptr;
}
delete m_playerControl;
@@ -200,13 +171,13 @@ DirectShowPlayerService::~DirectShowPlayerService()
QMediaControl *DirectShowPlayerService::requestControl(const char *name)
{
- if (qstrcmp(name, QMediaPlayerControl_iid) == 0) {
+ if (qstrcmp(name, QMediaPlayerControl_iid) == 0)
return m_playerControl;
- } else if (qstrcmp(name, QAudioOutputSelectorControl_iid) == 0) {
+ if (qstrcmp(name, QAudioOutputSelectorControl_iid) == 0)
return m_audioEndpointControl;
- } else if (qstrcmp(name, QMetaDataReaderControl_iid) == 0) {
+ if (qstrcmp(name, QMetaDataReaderControl_iid) == 0)
return m_metaDataControl;
- } else if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
+ if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
if (!m_videoRendererControl && !m_videoWindowControl) {
m_videoRendererControl = new DirectShowVideoRendererControl(m_loop);
@@ -215,7 +186,9 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name)
return m_videoRendererControl;
}
- } else if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
+ return nullptr;
+ }
+ if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
if (!m_videoRendererControl && !m_videoWindowControl) {
IBaseFilter *filter{};
@@ -239,20 +212,23 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name)
return m_videoWindowControl;
}
- } else if (qstrcmp(name, QMediaAudioProbeControl_iid) == 0) {
+ return nullptr;
+ }
+ if (qstrcmp(name, QMediaAudioProbeControl_iid) == 0) {
if (!m_audioProbeControl)
m_audioProbeControl = new DirectShowAudioProbeControl();
m_audioProbeControl->ref();
updateAudioProbe();
return m_audioProbeControl;
- } else if (qstrcmp(name, QMediaVideoProbeControl_iid) == 0) {
+ }
+ if (qstrcmp(name, QMediaVideoProbeControl_iid) == 0) {
if (!m_videoProbeControl)
m_videoProbeControl = new DirectShowVideoProbeControl();
m_videoProbeControl->ref();
updateVideoProbe();
return m_videoProbeControl;
}
- return 0;
+ return nullptr;
}
void DirectShowPlayerService::releaseControl(QMediaControl *control)
@@ -261,17 +237,17 @@ void DirectShowPlayerService::releaseControl(QMediaControl *control)
qWarning("QMediaService::releaseControl():"
" Attempted release of null control");
} else if (control == m_videoRendererControl) {
- setVideoOutput(0);
+ setVideoOutput(nullptr);
delete m_videoRendererControl;
- m_videoRendererControl = 0;
+ m_videoRendererControl = nullptr;
} else if (control == m_videoWindowControl) {
- setVideoOutput(0);
+ setVideoOutput(nullptr);
delete m_videoWindowControl;
- m_videoWindowControl = 0;
+ m_videoWindowControl = nullptr;
} else if (control == m_audioProbeControl) {
if (!m_audioProbeControl->deref()) {
DirectShowAudioProbeControl *old = m_audioProbeControl;
@@ -354,7 +330,7 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream
void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker)
{
- IBaseFilter *source = 0;
+ IBaseFilter *source = nullptr;
HRESULT hr = E_FAIL;
if (m_url.scheme() == QLatin1String("http") || m_url.scheme() == QLatin1String("https")) {
@@ -367,14 +343,14 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker)
if (IFileSourceFilter *fileSource = com_new<IFileSourceFilter>(clsid_WMAsfReader, iid_IFileSourceFilter)) {
locker->unlock();
- hr = fileSource->Load(reinterpret_cast<const OLECHAR *>(m_url.toString().utf16()), 0);
+ hr = fileSource->Load(reinterpret_cast<const OLECHAR *>(m_url.toString().utf16()), nullptr);
if (SUCCEEDED(hr)) {
source = com_cast<IBaseFilter>(fileSource, IID_IBaseFilter);
if (!SUCCEEDED(hr = m_graph->AddFilter(source, L"Source")) && source) {
source->Release();
- source = 0;
+ source = nullptr;
}
}
fileSource->Release();
@@ -408,8 +384,6 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker)
m_pendingTasks |= SetRate;
m_source = source;
- } else if (!m_url.isEmpty()) {
- m_pendingTasks |= SetUrlSource;
} else {
m_graphStatus = InvalidMedia;
@@ -511,18 +485,18 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker)
HRESULT renderHr = S_OK;
while (!filters.isEmpty()) {
- IEnumPins *pins = 0;
+ IEnumPins *pins = nullptr;
IBaseFilter *filter = filters[filters.size() - 1];
filters.removeLast();
if (!(m_pendingTasks & ReleaseFilters) && SUCCEEDED(filter->EnumPins(&pins))) {
int outputs = 0;
- for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) {
+ for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) {
PIN_DIRECTION direction;
if (pin->QueryDirection(&direction) == S_OK && direction == PINDIR_OUTPUT) {
++outputs;
- IPin *peer = 0;
+ IPin *peer = nullptr;
if (pin->ConnectedTo(&peer) == S_OK) {
PIN_INFO peerInfo;
if (SUCCEEDED(peer->QueryPinInfo(&peerInfo)))
@@ -530,10 +504,17 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker)
peer->Release();
} else {
locker->unlock();
- HRESULT hr = graph->RenderEx(pin, /*AM_RENDEREX_RENDERTOEXISTINGRENDERERS*/ 1, 0);
- // Do not return an error if no video output is set yet.
- if (SUCCEEDED(hr) || !(m_executedTasks & SetVideoOutput)) {
+ HRESULT hr = graph->RenderEx(pin, /*AM_RENDEREX_RENDERTOEXISTINGRENDERERS*/ 1, nullptr);
+ if (SUCCEEDED(hr)) {
+ rendered = true;
+ m_error = QMediaPlayer::NoError;
+ } else if (!(m_executedTasks & SetVideoOutput)) {
+ // Do not return an error if no video output is set yet.
rendered = true;
+ // Remember the error in this case.
+ // Handle it when playing is requested and no video output has been provided.
+ m_error = QMediaPlayer::ResourceError;
+ m_errorString = QString("%1: %2").arg(__FUNCTION__).arg(qt_error_string(hr));
} else if (renderHr == S_OK || renderHr == VFW_E_NO_DECOMPRESSOR){
renderHr = hr;
}
@@ -675,13 +656,13 @@ void DirectShowPlayerService::doReleaseGraph(QMutexLocker *locker)
if (m_source) {
m_source->Release();
- m_source = 0;
+ m_source = nullptr;
}
- m_eventHandle = 0;
+ m_eventHandle = nullptr;
m_graph->Release();
- m_graph = 0;
+ m_graph = nullptr;
if (m_graphBuilder) {
m_graphBuilder->Release();
@@ -819,17 +800,17 @@ int DirectShowPlayerService::findStreamTypes(IBaseFilter *source) const
int streamTypes = 0;
while (!filters.isEmpty()) {
- IEnumPins *pins = 0;
+ IEnumPins *pins = nullptr;
IBaseFilter *filter = filters[filters.size() - 1];
filters.removeLast();
if (SUCCEEDED(filter->EnumPins(&pins))) {
- for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) {
+ for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) {
PIN_DIRECTION direction;
if (pin->QueryDirection(&direction) == S_OK && direction == PINDIR_OUTPUT) {
DirectShowMediaType connectionType;
if (SUCCEEDED(pin->ConnectionMediaType(&connectionType))) {
- IPin *peer = 0;
+ IPin *peer = nullptr;
if (connectionType->majortype == MEDIATYPE_Audio) {
streamTypes |= AudioStream;
@@ -862,8 +843,8 @@ int DirectShowPlayerService::findStreamType(IPin *pin) const
bool audio = false;
bool other = false;
- for (AM_MEDIA_TYPE *type = 0;
- types->Next(1, &type, 0) == S_OK;
+ for (AM_MEDIA_TYPE *type = nullptr;
+ types->Next(1, &type, nullptr) == S_OK;
DirectShowMediaType::deleteType(type)) {
if (type->majortype == MEDIATYPE_Audio)
audio = true;
@@ -914,6 +895,16 @@ void DirectShowPlayerService::play()
void DirectShowPlayerService::doPlay(QMutexLocker *locker)
{
+ // Invalidate if there is an error while loading.
+ if (m_error != QMediaPlayer::NoError) {
+ m_graphStatus = InvalidMedia;
+ if (!m_errorString.isEmpty())
+ qWarning("%s", qPrintable(m_errorString));
+ m_errorString = QString();
+ QCoreApplication::postEvent(this, new QEvent(QEvent::Type(Error)));
+ return;
+ }
+
if (IMediaControl *control = com_cast<IMediaControl>(m_graph, IID_IMediaControl)) {
locker->unlock();
HRESULT hr = control->Run();
@@ -1165,7 +1156,7 @@ void DirectShowPlayerService::doSeek(QMutexLocker *locker)
locker->unlock();
seeking->SetPositions(
- &seekPosition, AM_SEEKING_AbsolutePositioning, 0, AM_SEEKING_NoPositioning);
+ &seekPosition, AM_SEEKING_AbsolutePositioning, nullptr, AM_SEEKING_NoPositioning);
locker->relock();
if (!m_dontCacheNextSeekResult) {
@@ -1191,7 +1182,7 @@ int DirectShowPlayerService::bufferStatus() const
m_source, IID_IWMReaderAdvanced2)) {
DWORD percentage = 0;
- reader->GetBufferProgress(&percentage, 0);
+ reader->GetBufferProgress(&percentage, nullptr);
reader->Release();
return percentage;
@@ -1364,7 +1355,7 @@ void DirectShowPlayerService::doReleaseVideoOutput(QMutexLocker *locker)
control->Release();
}
- IBaseFilter *intermediate = 0;
+ IBaseFilter *intermediate = nullptr;
if (!SUCCEEDED(m_graph->FindFilterByName(L"Color Space Converter", &intermediate))) {
intermediate = m_videoOutput;
intermediate->AddRef();
@@ -1615,7 +1606,7 @@ void DirectShowPlayerService::updateStatus()
m_playerControl->updateStatus(QMediaPlayer::LoadingMedia);
break;
case Loaded:
- if ((m_pendingTasks | m_executingTask | m_executedTasks) & (Play | Pause)) {
+ if ((m_executingTask | m_executedTasks) & (Play | Pause)) {
if (m_buffering)
m_playerControl->updateStatus(QMediaPlayer::BufferingMedia);
else
@@ -1636,13 +1627,13 @@ bool DirectShowPlayerService::isConnected(IBaseFilter *filter, PIN_DIRECTION dir
{
bool connected = false;
- IEnumPins *pins = 0;
+ IEnumPins *pins = nullptr;
if (SUCCEEDED(filter->EnumPins(&pins))) {
- for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) {
+ for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) {
PIN_DIRECTION dir;
if (SUCCEEDED(pin->QueryDirection(&dir)) && dir == direction) {
- IPin *peer = 0;
+ IPin *peer = nullptr;
if (SUCCEEDED(pin->ConnectedTo(&peer))) {
connected = true;
@@ -1658,15 +1649,15 @@ bool DirectShowPlayerService::isConnected(IBaseFilter *filter, PIN_DIRECTION dir
IBaseFilter *DirectShowPlayerService::getConnected(
IBaseFilter *filter, PIN_DIRECTION direction) const
{
- IBaseFilter *connected = 0;
+ IBaseFilter *connected = nullptr;
- IEnumPins *pins = 0;
+ IEnumPins *pins = nullptr;
if (SUCCEEDED(filter->EnumPins(&pins))) {
- for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) {
+ for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) {
PIN_DIRECTION dir;
if (SUCCEEDED(pin->QueryDirection(&dir)) && dir == direction) {
- IPin *peer = 0;
+ IPin *peer = nullptr;
if (SUCCEEDED(pin->ConnectedTo(&peer))) {
PIN_INFO info;
diff --git a/src/plugins/directshow/player/directshowplayerservice.h b/src/plugins/directshow/player/directshowplayerservice.h
index a6eeb8a77..69b4b0a6c 100644
--- a/src/plugins/directshow/player/directshowplayerservice.h
+++ b/src/plugins/directshow/player/directshowplayerservice.h
@@ -78,7 +78,7 @@ public:
VideoStream = 0x02
};
- DirectShowPlayerService(QObject *parent = 0);
+ DirectShowPlayerService(QObject *parent = nullptr);
~DirectShowPlayerService() override;
QMediaControl *requestControl(const char *name) override;
@@ -193,44 +193,44 @@ private:
InvalidMedia
};
- DirectShowPlayerControl *m_playerControl;
- DirectShowMetaDataControl *m_metaDataControl;
- DirectShowVideoRendererControl *m_videoRendererControl;
- QVideoWindowControl *m_videoWindowControl;
- DirectShowAudioEndpointControl *m_audioEndpointControl;
- DirectShowAudioProbeControl *m_audioProbeControl;
- DirectShowVideoProbeControl *m_videoProbeControl;
- DirectShowSampleGrabber *m_audioSampleGrabber;
- DirectShowSampleGrabber *m_videoSampleGrabber;
-
- QThread *m_taskThread;
+ DirectShowPlayerControl *m_playerControl = nullptr;
+ DirectShowMetaDataControl *m_metaDataControl = nullptr;
+ DirectShowVideoRendererControl *m_videoRendererControl = nullptr;
+ QVideoWindowControl *m_videoWindowControl = nullptr;
+ DirectShowAudioEndpointControl *m_audioEndpointControl = nullptr;
+ DirectShowAudioProbeControl *m_audioProbeControl = nullptr;
+ DirectShowVideoProbeControl *m_videoProbeControl = nullptr;
+ DirectShowSampleGrabber *m_audioSampleGrabber = nullptr;
+ DirectShowSampleGrabber *m_videoSampleGrabber = nullptr;
+
+ QThread *m_taskThread = nullptr;
DirectShowEventLoop *m_loop;
- int m_pendingTasks;
- int m_executingTask;
- int m_executedTasks;
- int m_streamTypes;
+ int m_pendingTasks = 0;
+ int m_executingTask = 0;
+ int m_executedTasks = 0;
+ int m_streamTypes = 0;
HANDLE m_taskHandle;
- HANDLE m_eventHandle;
- GraphStatus m_graphStatus;
- QMediaPlayer::Error m_error;
- QIODevice *m_stream;
- IFilterGraph2 *m_graph;
- ICaptureGraphBuilder2 *m_graphBuilder;
- IBaseFilter *m_source;
- IBaseFilter *m_audioOutput;
- IBaseFilter *m_videoOutput;
- qreal m_rate;
- qint64 m_position;
- qint64 m_seekPosition;
- qint64 m_duration;
+ HANDLE m_eventHandle = nullptr;
+ GraphStatus m_graphStatus = NoMedia;
+ QMediaPlayer::Error m_error = QMediaPlayer::NoError;
+ QIODevice *m_stream = nullptr;
+ IFilterGraph2 *m_graph = nullptr;
+ ICaptureGraphBuilder2 *m_graphBuilder = nullptr;
+ IBaseFilter *m_source = nullptr;
+ IBaseFilter *m_audioOutput = nullptr;
+ IBaseFilter *m_videoOutput = nullptr;
+ qreal m_rate = 1;
+ qint64 m_position = 0;
+ qint64 m_seekPosition = -1;
+ qint64 m_duration = 0;
QMediaTimeRange m_playbackRange;
QUrl m_url;
QString m_errorString;
QMutex m_mutex;
- bool m_buffering;
- bool m_seekable;
- bool m_atEnd;
- bool m_dontCacheNextSeekResult;
+ bool m_buffering = false;
+ bool m_seekable = false;
+ bool m_atEnd = false;
+ bool m_dontCacheNextSeekResult = false;
QVariantMap m_metadata;
friend class DirectShowPlayerServiceThread;
diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
index 88b5a51eb..19be82141 100644
--- a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
+++ b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp
@@ -51,11 +51,6 @@
DirectShowVideoRendererControl::DirectShowVideoRendererControl(DirectShowEventLoop *loop, QObject *parent)
: QVideoRendererControl(parent)
, m_loop(loop)
- , m_surface(0)
- , m_filter(0)
-#if QT_CONFIG(evr)
- , m_evrPresenter(0)
-#endif
{
}
@@ -85,13 +80,13 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
if (m_evrPresenter) {
m_evrPresenter->setSurface(nullptr);
m_evrPresenter->Release();
- m_evrPresenter = 0;
+ m_evrPresenter = nullptr;
}
#endif
if (m_filter) {
m_filter->Release();
- m_filter = 0;
+ m_filter = nullptr;
}
m_surface = surface;
@@ -103,9 +98,9 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
m_evrPresenter = new EVRCustomPresenter(m_surface);
if (!m_evrPresenter->isValid() || !qt_evr_setCustomPresenter(m_filter, m_evrPresenter)) {
m_filter->Release();
- m_filter = 0;
+ m_filter = nullptr;
m_evrPresenter->Release();
- m_evrPresenter = 0;
+ m_evrPresenter = nullptr;
}
}
diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.h b/src/plugins/directshow/player/directshowvideorenderercontrol.h
index b2abeeaed..dcbcadb4b 100644
--- a/src/plugins/directshow/player/directshowvideorenderercontrol.h
+++ b/src/plugins/directshow/player/directshowvideorenderercontrol.h
@@ -58,7 +58,7 @@ class DirectShowVideoRendererControl : public QVideoRendererControl
{
Q_OBJECT
public:
- DirectShowVideoRendererControl(DirectShowEventLoop *loop, QObject *parent = 0);
+ DirectShowVideoRendererControl(DirectShowEventLoop *loop, QObject *parent = nullptr);
~DirectShowVideoRendererControl() override;
QAbstractVideoSurface *surface() const override;
@@ -71,10 +71,10 @@ Q_SIGNALS:
private:
DirectShowEventLoop *m_loop;
- QAbstractVideoSurface *m_surface;
- IBaseFilter *m_filter;
+ QAbstractVideoSurface *m_surface = nullptr;
+ IBaseFilter *m_filter = nullptr;
#if QT_CONFIG(evr)
- EVRCustomPresenter *m_evrPresenter;
+ EVRCustomPresenter *m_evrPresenter = nullptr;
#endif
};
diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp
index 74d59231c..8dd18dc1b 100644
--- a/src/plugins/directshow/player/videosurfacefilter.cpp
+++ b/src/plugins/directshow/player/videosurfacefilter.cpp
@@ -222,20 +222,10 @@ HRESULT VideoSurfaceInputPin::Receive(IMediaSample *pMediaSample)
VideoSurfaceFilter::VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectShowEventLoop *loop, QObject *parent)
: QObject(parent)
, m_loop(loop)
- , m_pin(NULL)
, m_surface(surface)
- , m_bytesPerLine(0)
- , m_surfaceStarted(false)
, m_renderMutex(QMutex::Recursive)
- , m_running(false)
- , m_pendingSample(NULL)
- , m_pendingSampleEndTime(0)
- , m_renderEvent(CreateEvent(NULL, FALSE, FALSE, NULL))
- , m_flushEvent(CreateEvent(NULL, TRUE, FALSE, NULL))
- , m_adviseCookie(0)
- , m_EOS(false)
- , m_EOSDelivered(false)
- , m_EOSTimer(0)
+ , m_renderEvent(CreateEvent(nullptr, FALSE, FALSE, nullptr))
+ , m_flushEvent(CreateEvent(nullptr, TRUE, FALSE, nullptr))
{
supportedFormatsChanged();
connect(surface, &QAbstractVideoSurface::supportedFormatsChanged,
@@ -616,7 +606,7 @@ void VideoSurfaceFilter::clearPendingSample()
if (m_pendingSample) {
qCDebug(qLcRenderFilter, "clearPendingSample");
m_pendingSample->Release();
- m_pendingSample = NULL;
+ m_pendingSample = nullptr;
}
}
@@ -713,11 +703,10 @@ bool VideoSurfaceFilter::startSurface()
m_loop->postEvent(this, new QEvent(QEvent::Type(StartSurface)));
m_waitSurface.wait(&m_mutex);
return m_surfaceStarted;
- } else {
- m_surfaceStarted = m_surface->start(m_surfaceFormat);
- qCDebug(qLcRenderFilter, "startSurface %s", m_surfaceStarted ? "succeeded" : "failed");
- return m_surfaceStarted;
}
+ m_surfaceStarted = m_surface->start(m_surfaceFormat);
+ qCDebug(qLcRenderFilter, "startSurface %s", m_surfaceStarted ? "succeeded" : "failed");
+ return m_surfaceStarted;
}
void VideoSurfaceFilter::stopSurface()
@@ -741,12 +730,11 @@ bool VideoSurfaceFilter::restartSurface()
m_loop->postEvent(this, new QEvent(QEvent::Type(RestartSurface)));
m_waitSurface.wait(&m_mutex);
return m_surfaceStarted;
- } else {
- m_surface->stop();
- m_surfaceStarted = m_surface->start(m_surfaceFormat);
- qCDebug(qLcRenderFilter, "restartSurface %s", m_surfaceStarted ? "succeeded" : "failed");
- return m_surfaceStarted;
}
+ m_surface->stop();
+ m_surfaceStarted = m_surface->start(m_surfaceFormat);
+ qCDebug(qLcRenderFilter, "restartSurface %s", m_surfaceStarted ? "succeeded" : "failed");
+ return m_surfaceStarted;
}
void VideoSurfaceFilter::flushSurface()
diff --git a/src/plugins/directshow/player/videosurfacefilter.h b/src/plugins/directshow/player/videosurfacefilter.h
index 56791f270..f11d015f1 100644
--- a/src/plugins/directshow/player/videosurfacefilter.h
+++ b/src/plugins/directshow/player/videosurfacefilter.h
@@ -62,7 +62,7 @@ class VideoSurfaceFilter : public QObject
Q_OBJECT
COM_REF_MIXIN
public:
- VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectShowEventLoop *loop, QObject *parent = 0);
+ VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectShowEventLoop *loop, QObject *parent = nullptr);
~VideoSurfaceFilter();
STDMETHODIMP QueryInterface(REFIID riid, void **ppv) override;
@@ -130,28 +130,28 @@ private:
QMutex m_mutex;
DirectShowEventLoop *m_loop;
- VideoSurfaceInputPin *m_pin;
+ VideoSurfaceInputPin *m_pin = nullptr;
QWaitCondition m_waitSurface;
QAbstractVideoSurface *m_surface;
QVideoSurfaceFormat m_surfaceFormat;
- int m_bytesPerLine;
- bool m_surfaceStarted;
+ int m_bytesPerLine = 0;
+ bool m_surfaceStarted = false;
QList<GUID> m_supportedTypes;
QReadWriteLock m_typesLock;
QMutex m_renderMutex;
- bool m_running;
- IMediaSample *m_pendingSample;
- REFERENCE_TIME m_pendingSampleEndTime;
+ bool m_running = false;
+ IMediaSample *m_pendingSample = nullptr;
+ REFERENCE_TIME m_pendingSampleEndTime = 0;
HANDLE m_renderEvent;
HANDLE m_flushEvent;
- DWORD_PTR m_adviseCookie;
+ DWORD_PTR m_adviseCookie = 0;
- bool m_EOS;
- bool m_EOSDelivered;
- UINT m_EOSTimer;
+ bool m_EOS = false;
+ bool m_EOSDelivered = false;
+ UINT m_EOSTimer = 0;
friend class VideoSurfaceInputPin;
};
diff --git a/src/plugins/directshow/player/vmr9videowindowcontrol.cpp b/src/plugins/directshow/player/vmr9videowindowcontrol.cpp
index c026a12d8..63c945622 100644
--- a/src/plugins/directshow/player/vmr9videowindowcontrol.cpp
+++ b/src/plugins/directshow/player/vmr9videowindowcontrol.cpp
@@ -49,15 +49,6 @@
Vmr9VideoWindowControl::Vmr9VideoWindowControl(QObject *parent)
: QVideoWindowControl(parent)
, m_filter(com_new<IBaseFilter>(CLSID_VideoMixingRenderer9))
- , m_windowId(0)
- , m_windowColor(RGB(0, 0, 0))
- , m_dirtyValues(0)
- , m_aspectRatioMode(Qt::KeepAspectRatio)
- , m_brightness(0)
- , m_contrast(0)
- , m_hue(0)
- , m_saturation(0)
- , m_fullScreen(false)
{
if (IVMRFilterConfig9 *config = com_cast<IVMRFilterConfig9>(m_filter, IID_IVMRFilterConfig9)) {
config->SetRenderingMode(VMR9Mode_Windowless);
@@ -113,7 +104,7 @@ void Vmr9VideoWindowControl::setDisplayRect(const QRect &rect)
RECT sourceRect = { 0, 0, 0, 0 };
RECT displayRect = { rect.left(), rect.top(), rect.right() + 1, rect.bottom() + 1 };
- control->GetNativeVideoSize(&sourceRect.right, &sourceRect.bottom, 0, 0);
+ control->GetNativeVideoSize(&sourceRect.right, &sourceRect.bottom, nullptr, nullptr);
if (m_aspectRatioMode == Qt::KeepAspectRatioByExpanding) {
QSize clippedSize = rect.size();
@@ -182,7 +173,7 @@ QSize Vmr9VideoWindowControl::nativeSize() const
LONG width;
LONG height;
- if (control->GetNativeVideoSize(&width, &height, 0, 0) == S_OK)
+ if (control->GetNativeVideoSize(&width, &height, nullptr, nullptr) == S_OK)
size = QSize(width, height);
control->Release();
}
diff --git a/src/plugins/directshow/player/vmr9videowindowcontrol.h b/src/plugins/directshow/player/vmr9videowindowcontrol.h
index 8ab9bd506..2a6f008f3 100644
--- a/src/plugins/directshow/player/vmr9videowindowcontrol.h
+++ b/src/plugins/directshow/player/vmr9videowindowcontrol.h
@@ -52,7 +52,7 @@ class Vmr9VideoWindowControl : public QVideoWindowControl
{
Q_OBJECT
public:
- Vmr9VideoWindowControl(QObject *parent = 0);
+ Vmr9VideoWindowControl(QObject *parent = nullptr);
~Vmr9VideoWindowControl() override;
IBaseFilter *filter() const { return m_filter; }
@@ -91,16 +91,16 @@ private:
IVMRMixerControl9 *control, VMR9ProcAmpControlFlags property, int value) const;
IBaseFilter *m_filter;
- WId m_windowId;
- COLORREF m_windowColor;
- DWORD m_dirtyValues;
- Qt::AspectRatioMode m_aspectRatioMode;
+ WId m_windowId = 0;
+ COLORREF m_windowColor = RGB(0, 0, 0);
+ DWORD m_dirtyValues = 0;
+ Qt::AspectRatioMode m_aspectRatioMode = Qt::KeepAspectRatio;
QRect m_displayRect;
- int m_brightness;
- int m_contrast;
- int m_hue;
- int m_saturation;
- bool m_fullScreen;
+ int m_brightness = 0;
+ int m_contrast = 0;
+ int m_hue = 0;
+ int m_saturation = 0;
+ bool m_fullScreen = false;
};
QT_END_NAMESPACE
diff --git a/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp b/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp
index 29d7743ed..52ec75f44 100644
--- a/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp
@@ -149,9 +149,7 @@ gboolean CameraBinImageCapture::encoderEventProbe(
tags[QMediaMetaData::FNumber] = extendedTags.value("capturing-focal-ratio");
tags[QMediaMetaData::ExposureMode] = extendedTags.value("capturing-exposure-mode");
- QMapIterator<QString, QVariant> i(tags);
- while (i.hasNext()) {
- i.next();
+ for (auto i = tags.cbegin(), end = tags.cend(); i != end; ++i) {
if (i.value().isValid()) {
QMetaObject::invokeMethod(self, "imageMetadataAvailable",
Qt::QueuedConnection,
diff --git a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
index 40294214a..361a2369a 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp
@@ -214,9 +214,7 @@ GstElement *QGstreamerAudioEncode::createEncoder()
}
QMap<QString, QVariant> options = m_options.value(codec);
- QMapIterator<QString,QVariant> it(options);
- while (it.hasNext()) {
- it.next();
+ for (auto it = options.cbegin(), end = options.cend(); it != end; ++it) {
QString option = it.key();
QVariant value = it.value();
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
index 6b4dbe4b7..674e1034e 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp
@@ -204,9 +204,7 @@ GstElement *QGstreamerVideoEncode::createEncoder()
}
QMap<QString,QVariant> options = m_options.value(codec);
- QMapIterator<QString,QVariant> it(options);
- while (it.hasNext()) {
- it.next();
+ for (auto it = options.cbegin(), end = options.cend(); it != end; ++it) {
QString option = it.key();
QVariant value = it.value();
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
index 8f2f6643c..bd503d3a1 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
@@ -167,9 +167,8 @@ void QGstreamerMetaDataProvider::updateTags()
m_tags.clear();
bool changed = false;
- QMapIterator<QByteArray ,QVariant> i(m_session->tags());
- while (i.hasNext()) {
- i.next();
+ const auto tags = m_session->tags();
+ for (auto i = tags.cbegin(), end = tags.cend(); i != end; ++i) {
//use gstreamer native keys for elements not in our key map
QString key = qt_gstreamerMetaDataKeys()->value(i.key(), i.key());
m_tags.insert(key, i.value());
diff --git a/src/plugins/pulseaudio/qaudioinput_pulse.h b/src/plugins/pulseaudio/qaudioinput_pulse.h
index 32a2c031c..3a6cf03c4 100644
--- a/src/plugins/pulseaudio/qaudioinput_pulse.h
+++ b/src/plugins/pulseaudio/qaudioinput_pulse.h
@@ -55,7 +55,7 @@
#include <QtCore/qtimer.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
-#include <QtCore/qdatetime.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qiodevice.h>
#include "qaudio.h"
@@ -132,8 +132,8 @@ private:
QTimer *m_timer;
qint64 m_elapsedTimeOffset;
pa_stream *m_stream;
- QTime m_timeStamp;
- QTime m_clockStamp;
+ QElapsedTimer m_timeStamp;
+ QElapsedTimer m_clockStamp;
QByteArray m_streamName;
QByteArray m_device;
QByteArray m_tempBuffer;
diff --git a/src/plugins/windowsaudio/qwindowsaudiodeviceinfo.cpp b/src/plugins/windowsaudio/qwindowsaudiodeviceinfo.cpp
index c054c0f76..70e7fbce5 100644
--- a/src/plugins/windowsaudio/qwindowsaudiodeviceinfo.cpp
+++ b/src/plugins/windowsaudio/qwindowsaudiodeviceinfo.cpp
@@ -396,7 +396,7 @@ QList<QByteArray> QWindowsAudioDeviceInfo::availableDevices(QAudio::Mode mode)
QList<QByteArray> devices;
//enumerate device fullnames through directshow api
- CoInitialize(NULL);
+ auto hrCoInit = CoInitialize(nullptr);
ICreateDevEnum *pDevEnum = NULL;
IEnumMoniker *pEnum = NULL;
// Create the System device enumerator
@@ -447,7 +447,8 @@ QList<QByteArray> QWindowsAudioDeviceInfo::availableDevices(QAudio::Mode mode)
}
pDevEnum->Release();
}
- CoUninitialize();
+ if (SUCCEEDED(hrCoInit))
+ CoUninitialize();
return devices;
}
diff --git a/src/plugins/windowsaudio/qwindowsaudioinput.cpp b/src/plugins/windowsaudio/qwindowsaudioinput.cpp
index 717baaff0..3332e3067 100644
--- a/src/plugins/windowsaudio/qwindowsaudioinput.cpp
+++ b/src/plugins/windowsaudio/qwindowsaudioinput.cpp
@@ -52,6 +52,7 @@
#include "qwindowsaudioinput.h"
#include <QtCore/QDataStream>
+#include <QtCore/qtimer.h>
QT_BEGIN_NAMESPACE
diff --git a/src/plugins/windowsaudio/qwindowsaudioinput.h b/src/plugins/windowsaudio/qwindowsaudioinput.h
index a0feae257..817176731 100644
--- a/src/plugins/windowsaudio/qwindowsaudioinput.h
+++ b/src/plugins/windowsaudio/qwindowsaudioinput.h
@@ -55,7 +55,7 @@
#include <QtCore/qfile.h>
#include <QtCore/qdebug.h>
-#include <QtCore/qtimer.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
#include <QtCore/qdatetime.h>
@@ -120,9 +120,9 @@ private:
QByteArray m_device;
int bytesAvailable;
int intervalTime;
- QTime timeStamp;
+ QElapsedTimer timeStamp;
qint64 elapsedTimeOffset;
- QTime timeStampOpened;
+ QElapsedTimer timeStampOpened;
qint64 totalTimeValue;
bool pullMode;
bool resuming;
diff --git a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp
index f39e1694b..1182647fc 100644
--- a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp
+++ b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp
@@ -53,6 +53,7 @@
#include "qwindowsaudioutils.h"
#include <QtEndian>
#include <QtCore/QDataStream>
+#include <QtCore/qtimer.h>
#include <private/qaudiohelpers_p.h>
//#define DEBUG_AUDIO 1
diff --git a/src/plugins/windowsaudio/qwindowsaudiooutput.h b/src/plugins/windowsaudio/qwindowsaudiooutput.h
index 30ee1defe..d6e6998ec 100644
--- a/src/plugins/windowsaudio/qwindowsaudiooutput.h
+++ b/src/plugins/windowsaudio/qwindowsaudiooutput.h
@@ -54,7 +54,7 @@
#include "qwindowsaudioutils.h"
#include <QtCore/qdebug.h>
-#include <QtCore/qtimer.h>
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
#include <QtCore/qdatetime.h>
@@ -118,9 +118,9 @@ private:
void pauseAndSleep();
QByteArray m_device;
int bytesAvailable;
- QTime timeStamp;
+ QElapsedTimer timeStamp;
qint64 elapsedTimeOffset;
- QTime timeStampOpened;
+ QElapsedTimer timeStampOpened;
qint32 buffer_size;
qint32 period_size;
qint32 blocks_count;
diff --git a/src/plugins/wmf/player/mftvideo.cpp b/src/plugins/wmf/player/mftvideo.cpp
index 747fe6aea..879911d55 100644
--- a/src/plugins/wmf/player/mftvideo.cpp
+++ b/src/plugins/wmf/player/mftvideo.cpp
@@ -573,7 +573,7 @@ STDMETHODIMP MFTransform::ProcessOutput(DWORD dwFlags, DWORD cOutputBufferCount,
if (!m_videoProbes.isEmpty()) {
QVideoFrame frame = makeVideoFrame();
- foreach (MFVideoProbeControl* probe, m_videoProbes)
+ for (MFVideoProbeControl* probe : qAsConst(m_videoProbes))
probe->bufferProbed(frame);
}
m_videoProbeMutex.unlock();