From 1cc12b8cdda2f9a0477be987824540af84deeb53 Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Fri, 12 Apr 2019 09:37:38 +0200 Subject: DirectShow: Don't set the same media MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes tst_QMediaPlayerBackend::playlistObject() Actual (currentMediaSpy.count()): 2 Expected (1) : 1 .\tst_qmediaplayerbackend.cpp(1224) : failure location Task-number: QTBUG-65574 Change-Id: Ia7cbcb4a22ee43df9e1efff065910b084bdbf00e Reviewed-by: Oliver Wolff Reviewed-by: Christian Strømme --- src/plugins/directshow/player/directshowplayercontrol.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src') diff --git a/src/plugins/directshow/player/directshowplayercontrol.cpp b/src/plugins/directshow/player/directshowplayercontrol.cpp index 2d0ee2d59..7de0a686f 100644 --- a/src/plugins/directshow/player/directshowplayercontrol.cpp +++ b/src/plugins/directshow/player/directshowplayercontrol.cpp @@ -219,6 +219,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; -- cgit v1.2.3 From 14d68efadc43265c640dcd6796d947890d14f15e Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Wed, 10 Apr 2019 16:03:17 +0200 Subject: DirectShow: Don't update status on pending tasks when graph is loaded MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The tests expect to see updated playback position together with QMediaPlayer::BufferedMedia. But currently QMediaPlayer::BufferedMedia is emitted before updating the position. Removed updating the status if the graph is already loaded but a task is still pending. Fixes tst_QMediaPlayerBackend::seekInStoppedState Task-number: QTBUG-65574 Change-Id: I66d214312dbf31973a13b5154a52599aa517f38c Reviewed-by: Oliver Wolff Reviewed-by: Christian Strømme --- src/plugins/directshow/player/directshowplayerservice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp index 3974c59a5..bf7cbbfe4 100644 --- a/src/plugins/directshow/player/directshowplayerservice.cpp +++ b/src/plugins/directshow/player/directshowplayerservice.cpp @@ -1617,7 +1617,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 -- cgit v1.2.3 From c4de056a6aa44567cdbf2ce91a464e597ad4af8f Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Wed, 10 Apr 2019 15:50:48 +0200 Subject: EVR: Remove setting of start/end times in QVideoFrame MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Due to unknown bug in IMFTransform->ProcessOutput() when after seeking sample times are not set correctly to provided IMFSample. This causes current playback position to be not respected in video samples. Even if you seeked to higher/lower position, sample time is always counted from beginning. Which makes no sense to use this feature because video frame's sample times are not related to current position. To test it, need just seek to arbitrary position and check how startTime is not correlated to new position. Fixes tst_QMediaPlayerBackend::seekPauseSeek Task-number: QTBUG-65574 Change-Id: I897d75c055347cdcca38a84dc18f91800d070c09 Reviewed-by: Christian Strømme --- src/plugins/common/evr/evrd3dpresentengine.cpp | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'src') 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; } -- cgit v1.2.3 From 72101558b3afc40ef41132e66ce789b92929e911 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Thu, 25 Apr 2019 12:24:15 +0200 Subject: Gstreamer: Fix deadlock when state is requested in ASYNC mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When new media is set to the player, updating of "show-preroll-frame" property from the video sink is also requested: g_object_set(G_OBJECT(m_videoSink), "show-preroll-frame", value, NULL); This produces emitting of a signal: g_signal_connect(G_OBJECT(sink), "notify::show-preroll-frame", G_CALLBACK(handleShowPrerollChange), sink); Inside handleShowPrerollChange() the state of the video sink is requested with infinite timeout: gst_element_get_state(GST_ELEMENT(sink), &state, NULL, GST_CLOCK_TIME_NONE); In case if the video sink performed an ASYNC state change, means changing of the state is pending and need to wait, this function will block up for infinite timeout. But probably changing of the state is requested (and should be performed) on the same thread where it is waiting for this change, it produces a deadlock. Changing timeout to 10ms to avoid this block. Fixes: QTBUG-72468 Change-Id: I06235ccfb8f76423f65ed192d5e8de6e60723e72 Reviewed-by: Christian Strømme --- src/gsttools/qgstvideorenderersink.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gsttools/qgstvideorenderersink.cpp b/src/gsttools/qgstvideorenderersink.cpp index 09fdd42a6..c3a7a5988 100644 --- a/src/gsttools/qgstvideorenderersink.cpp +++ b/src/gsttools/qgstvideorenderersink.cpp @@ -516,7 +516,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. -- cgit v1.2.3 From 19232dbe27521f60bdd265dbac0419d93c7ea5de Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Tue, 12 Mar 2019 10:28:46 +0100 Subject: Use QOpenGLContext::makeCurrent if QGLContext::makeCurrent failed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If QPainterVideoSurface::setGLContext(QGLContext::currentContext()) is used and no valid paint device has been provided to QGLContext, it fails to make the context current. Thus there might be no available current context which might also produce crashes. QGLContext::currentContext() creates QGLContext based on current QOpenGLContext instance, and no paint device is available in QGLContext::device() in this case. Currently QVideoWidget and QGraphicsVideoItem are effected. It is relevant when a renderer calls currentContext->doneCurrent() before using the QPainterVideoSurface. After this there is no any current context which could cause a crash, e.g. within compiling the shaders. Task-number: QTBUG-74277 Change-Id: Ia28f4f6843a82a897399fd1ce2463e3b087b6437 Reviewed-by: Christian Strømme --- src/multimediawidgets/qpaintervideosurface.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/multimediawidgets/qpaintervideosurface.cpp b/src/multimediawidgets/qpaintervideosurface.cpp index e4762a7e1..440d5c858 100644 --- a/src/multimediawidgets/qpaintervideosurface.cpp +++ b/src/multimediawidgets/qpaintervideosurface.cpp @@ -62,6 +62,15 @@ #include QT_BEGIN_NAMESPACE +static void makeCurrent(QGLContext *context) +{ + context->makeCurrent(); + + auto handle = context->contextHandle(); + if (handle && QOpenGLContext::currentContext() != handle) + handle->makeCurrent(handle->surface()); +} + QVideoSurfacePainter::~QVideoSurfacePainter() { } @@ -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(m_glContext->contextHandle())); - m_glContext->makeCurrent(); + makeCurrent(m_glContext); const QByteArray extensions(reinterpret_cast( 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: -- cgit v1.2.3 From 7aeebc07b0566b2cf18f3f1f5656eac4d6386aaf Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Mon, 15 Apr 2019 15:21:08 +0200 Subject: Gstreamer: Allow streams in custom pipelines MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduced pushing buffers from QIODevice to appsrc gstreamer element: player->setMedia("gst-pipeline: appsrc ! ...", io_device); Also ported to gst 0.10. Change-Id: I1a84d22c0d5c56fe433d494413c5ab23da7c6bf3 Reviewed-by: Christian Strømme --- src/gsttools/qgstreamerplayersession.cpp | 110 +++++++++++++-------- .../gsttools_headers/qgstreamerplayersession_p.h | 3 +- 2 files changed, 72 insertions(+), 41 deletions(-) (limited to 'src') diff --git a/src/gsttools/qgstreamerplayersession.cpp b/src/gsttools/qgstreamerplayersession.cpp index 1e099fc89..bd28afb91 100644 --- a/src/gsttools/qgstreamerplayersession.cpp +++ b/src/gsttools/qgstreamerplayersession.cpp @@ -306,7 +306,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(); @@ -338,28 +338,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(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(); @@ -374,11 +353,55 @@ 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(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 &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(g_value_get_object(&value)); +#else + GstElement *child = nullptr; + while (gst_iterator_next(it, reinterpret_cast(&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; @@ -401,24 +424,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(g_value_get_object(&data)); -#else - GstElement *child = nullptr; - while (gst_iterator_next(it, reinterpret_cast(&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 diff --git a/src/multimedia/gsttools_headers/qgstreamerplayersession_p.h b/src/multimedia/gsttools_headers/qgstreamerplayersession_p.h index b613793c4..d4b050272 100644 --- a/src/multimedia/gsttools_headers/qgstreamerplayersession_p.h +++ b/src/multimedia/gsttools_headers/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; -- cgit v1.2.3 From 1835a9f398c1400a254b5df8f8da2f1e357a45a0 Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Fri, 12 Apr 2019 09:28:12 +0200 Subject: DirectShow: Report about an error for wrong urls If wrong url is passed, no need to try it again. But report an error instead. Also there cannot be empty url, because if an url is empty, NoMedia should be emitted. Fixes tst_QMediaPlayerBackend::playlistObject() Task-number: QTBUG-65574 Change-Id: I658b16cfe7b96c202715651d6b20d01a9af6c746 Reviewed-by: Andy Shaw --- src/plugins/directshow/player/directshowplayerservice.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src') diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp index bf7cbbfe4..2eeb06159 100644 --- a/src/plugins/directshow/player/directshowplayerservice.cpp +++ b/src/plugins/directshow/player/directshowplayerservice.cpp @@ -403,8 +403,6 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker) m_pendingTasks |= SetRate; m_source = source; - } else if (!m_resources.isEmpty()) { - m_pendingTasks |= SetUrlSource; } else { m_graphStatus = InvalidMedia; -- cgit v1.2.3 From 2508aa870167e86fa7e71e982388d5265f11fad1 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Tue, 21 May 2019 06:42:46 +0200 Subject: Only call CoUnitialize() if calling CoInitialize() was necessary As CoInitialize() may have been called by something else beforehand then it should only call CoUnitialize() if it returns S_OK which indicates it was not already called. That ensures it is only uninitalized if it did the initialization. Change-Id: I1b723e0b69fe5f9ff7c2c6ef083e9196f21812b2 Reviewed-by: VaL Doroshchuk --- src/plugins/windowsaudio/qwindowsaudiodeviceinfo.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') 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 QWindowsAudioDeviceInfo::availableDevices(QAudio::Mode mode) QList 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 QWindowsAudioDeviceInfo::availableDevices(QAudio::Mode mode) } pDevEnum->Release(); } - CoUninitialize(); + if (SUCCEEDED(hrCoInit)) + CoUninitialize(); return devices; } -- cgit v1.2.3 From 7a4478a4a411df9f21e1499d2301049f9045b7d6 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Mon, 20 May 2019 12:49:28 +0200 Subject: GStreamer: Fix crash when the bus helper is destroyed Called deleteLater() on the bus helper to ensure the cleanup is handled gracefully. QGstreamerBusHelperPrivate::doProcessMessage is called on a message from gst, which it calls QGstreamerPlayerSession::processBusMessage where new media is set and current helper object is destroyed. When for loop is ended in doProcessMessage, current object is freed and produces a crash. Change-Id: Ic9cde97c284406450d4723f1f7f71fa1ea2c0648 Reviewed-by: Andy Shaw --- src/gsttools/qgstreamerplayersession.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/gsttools/qgstreamerplayersession.cpp b/src/gsttools/qgstreamerplayersession.cpp index bd28afb91..5c9eebca2 100644 --- a/src/gsttools/qgstreamerplayersession.cpp +++ b/src/gsttools/qgstreamerplayersession.cpp @@ -407,7 +407,7 @@ bool QGstreamerPlayerSession::setPipeline(GstElement *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); -- cgit v1.2.3 From 80cc653364fe330dfa4bf310f98d98d4cef0698b Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Mon, 20 May 2019 10:37:32 +0200 Subject: GStreamer: Dump dot file if GST_DEBUG_DUMP_DOT_DIR is set MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dump dot file on play only. Change-Id: Ide7fe0cad56f06a89604cf40b59b858c9c9d09f2 Reviewed-by: Christian Strømme --- src/gsttools/qgstreamerplayersession.cpp | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/gsttools/qgstreamerplayersession.cpp b/src/gsttools/qgstreamerplayersession.cpp index 5c9eebca2..56f78cb9f 100644 --- a/src/gsttools/qgstreamerplayersession.cpp +++ b/src/gsttools/qgstreamerplayersession.cpp @@ -63,7 +63,6 @@ #include //#define DEBUG_PLAYBIN -//#define DEBUG_VO_BIN_DUMP QT_BEGIN_NAMESPACE @@ -659,12 +658,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(); @@ -925,11 +918,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) @@ -992,6 +980,9 @@ bool QGstreamerPlayerSession::isSeekable() const bool QGstreamerPlayerSession::play() { + 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), "session.play"); #ifdef DEBUG_PLAYBIN qDebug() << Q_FUNC_INFO; #endif -- cgit v1.2.3 From 2b34e3355c8943f41c84f39ad9a838f6edb80429 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Thu, 2 May 2019 09:42:39 +0200 Subject: Gstreamer: Pass GstUDPSrc's caps via "udpsrc.caps=" url's query item MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sometimes it is needed to configure udpsrc element to play a stream, means to set some caps to GstUDPSrc element. But currently there are no any ways to pass such caps. Added parsing of the requested url to find "udpsrc.caps" query item and to use it as the caps for udpsrc source element. It allows to show streams by passing caps within url. E.g. if the stream is created using $ gst-launch-1.0 v4l2src ! videoconvert ! video/x-raw,format=I420,width=800,height=600 ! \ jpegenc ! rtpjpegpay ! udpsink host=127.0.0.1 port=5001 it could be shown via QMediaPlayer like: MediaPlayer { source: "udp://127.0.0.1:5001/?udpsrc.caps=application/x-rtp,media=video,clock-rate=90000,encoding=JPEG,payload=26" } Change-Id: I6f9c20c6004a34bce5fd1d0073311b7c62a8010f Reviewed-by: Christian Strømme --- src/gsttools/qgstreamerplayersession.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src') diff --git a/src/gsttools/qgstreamerplayersession.cpp b/src/gsttools/qgstreamerplayersession.cpp index 56f78cb9f..5ede8a1c9 100644 --- a/src/gsttools/qgstreamerplayersession.cpp +++ b/src/gsttools/qgstreamerplayersession.cpp @@ -61,6 +61,7 @@ #include #include #include +#include //#define DEBUG_PLAYBIN @@ -1658,6 +1659,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); -- cgit v1.2.3 From 3bbeae539854c1474844c65025d40b813cec286c Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Thu, 11 Apr 2019 13:54:58 +0200 Subject: DirectShow: Don't hide returned error when video output was not provided Since the video output could be set after doRender(), we do not report an error in this case. But need to report the error when the video output has not been submitted at all. Otherwise it hides the error and not possible to determine playback issues. Added a fix to remember an error while rendering without the video output and handle it if playing is requested. That means, if it is required, the video output must be set before play() is called. Not all medias require valid video output, but if there is an error, we need to report about it. Fixes tst_QMediaPlayerBackend::playlist() Task-number: QTBUG-65574 Change-Id: I9faae19c08ad0273545bb7617ea3a11539084f1f Reviewed-by: Andy Shaw --- .../directshow/player/directshowplayerservice.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp index 2eeb06159..78b4be35b 100644 --- a/src/plugins/directshow/player/directshowplayerservice.cpp +++ b/src/plugins/directshow/player/directshowplayerservice.cpp @@ -524,9 +524,16 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker) } 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)) { + 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; } @@ -918,6 +925,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(m_graph, IID_IMediaControl)) { locker->unlock(); HRESULT hr = control->Run(); -- cgit v1.2.3 From f252ad92526c73c4df05798a4ab699853908edc2 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Tue, 7 May 2019 14:40:51 +0200 Subject: AVFoundation: Fix sending proper state in QMediaRecorder Need to send the state if it has been applied. Currently it happens when Recording is requested. If Stopped is requested, the state will be changed in handleRecordingFinished callback. Change-Id: I6911f2cebb2d1cc8a08eee17e7b91654b5d6e4c7 Fixes: QTBUG-75287 Reviewed-by: Andy Shaw --- src/plugins/avfoundation/camera/avfmediarecordercontrol.mm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm b/src/plugins/avfoundation/camera/avfmediarecordercontrol.mm index 546eabf89..a67918bbc 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) -- cgit v1.2.3 From edbc8cb39130410801bffefb59d5c3a3c383e84b Mon Sep 17 00:00:00 2001 From: Paul Wicking Date: Tue, 4 Jun 2019 14:12:50 +0200 Subject: Doc: Use correct property name for videoRecorder Fixes: QTBUG-75623 Change-Id: I9a072d1d3056f58657b8b44e9350ae3506139117 Reviewed-by: VaL Doroshchuk --- src/imports/multimedia/qdeclarativecamera.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/imports/multimedia/qdeclarativecamera.cpp b/src/imports/multimedia/qdeclarativecamera.cpp index e9c708a21..c499de3b6 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). -- cgit v1.2.3 From 8933a59719a5f0c33d47f202d220a566765ec6d4 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Fri, 7 Jun 2019 10:48:44 +0200 Subject: GStreamer: Return busy cameras in QCameraInfo::availableCameras If the camera has been already opened, ioctl returns EBUSY, and this camera is not listed in available cameras. Change-Id: I1ee6e067a3d080fe82a528f576ba13e03d5f816e Fixes: QTBUG-76236 Reviewed-by: Andy Shaw --- src/gsttools/qgstutils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/gsttools/qgstutils.cpp b/src/gsttools/qgstutils.cpp index 58dd6e5fe..2cc7663b8 100644 --- a/src/gsttools/qgstutils.cpp +++ b/src/gsttools/qgstutils.cpp @@ -649,7 +649,7 @@ QVector 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; } } -- cgit v1.2.3 From bb5cb0fb0af9695d97854961742f5e57f45522c1 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 12 Jun 2019 12:38:03 +0200 Subject: DirectShow: Replace typedef by using Apply some fixits by Qt Creator. Change-Id: I20b62c70b5ed0e79ca735f1ab9b048023eb9dc7d Reviewed-by: VaL Doroshchuk --- src/plugins/directshow/camera/dsvideodevicecontrol.h | 2 +- src/plugins/directshow/player/directshowmetadatacontrol.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/plugins/directshow/camera/dsvideodevicecontrol.h b/src/plugins/directshow/camera/dsvideodevicecontrol.h index 7a7a0af1e..26655f431 100644 --- a/src/plugins/directshow/camera/dsvideodevicecontrol.h +++ b/src/plugins/directshow/camera/dsvideodevicecontrol.h @@ -48,7 +48,7 @@ class DSCameraSession; //QTM_USE_NAMESPACE -typedef QPair DSVideoDeviceInfo; +using DSVideoDeviceInfo = QPair; class DSVideoDeviceControl : public QVideoDeviceSelectorControl { diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.cpp b/src/plugins/directshow/player/directshowmetadatacontrol.cpp index 52b73a7df..915fa1c71 100644 --- a/src/plugins/directshow/player/directshowmetadatacontrol.cpp +++ b/src/plugins/directshow/player/directshowmetadatacontrol.cpp @@ -225,7 +225,7 @@ namespace }; } -typedef QList QWMMetaDataKeys; +using QWMMetaDataKeys = QList; Q_GLOBAL_STATIC(QWMMetaDataKeys, metadataKeys) static const QWMMetaDataKeys *qt_wmMetaDataKeys() -- cgit v1.2.3 From 0c34934549349d296d0b137072b51ec1f6532c4b Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 12 Jun 2019 12:51:54 +0200 Subject: DirectShow: Fix clang-warning about mixing const/non-const iterators Change-Id: Iadaae490ff88737cf8a73ef8024617f60773a631 Reviewed-by: VaL Doroshchuk --- src/plugins/directshow/camera/dscamerasession.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index 5ab9f67d8..f69c0d624 100644 --- a/src/plugins/directshow/camera/dscamerasession.cpp +++ b/src/plugins/directshow/camera/dscamerasession.cpp @@ -284,7 +284,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; -- cgit v1.2.3 From 451bdd16caba3483139ed49f035caa1731510bf7 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Wed, 12 Jun 2019 18:35:10 +0200 Subject: Convert uses of QTime as a timer to QElapsedTimer It was deprecated by qtbase/ed99a591a83a399458f12341d0a1c0b3152f247a. Change-Id: I87bf219c05a62e1deeb9d3df558e5084318a2a69 Reviewed-by: Friedemann Kleint Reviewed-by: VaL Doroshchuk --- src/plugins/alsa/qalsaaudioinput.h | 6 +++--- src/plugins/alsa/qalsaaudiooutput.h | 6 +++--- src/plugins/pulseaudio/qaudioinput_pulse.h | 6 +++--- src/plugins/windowsaudio/qwindowsaudioinput.cpp | 1 + src/plugins/windowsaudio/qwindowsaudioinput.h | 6 +++--- src/plugins/windowsaudio/qwindowsaudiooutput.cpp | 1 + src/plugins/windowsaudio/qwindowsaudiooutput.h | 6 +++--- 7 files changed, 17 insertions(+), 15 deletions(-) (limited to 'src') 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 #include #include -#include +#include #include #include @@ -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 #include #include -#include +#include #include #include @@ -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/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 #include #include -#include +#include #include #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/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 +#include 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 #include -#include +#include #include #include #include @@ -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 #include +#include #include //#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 -#include +#include #include #include #include @@ -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; -- cgit v1.2.3 From 282356e3a1b1d95fd5d9433fb633a9692b84c8d7 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 12 Jun 2019 12:51:54 +0200 Subject: DirectShow: Clang warnings about else after return, break MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Disentangle code of DirectShowPlayerService::requestControl(). Change-Id: I2e90d5c86acdbe2f20f421f43929e0e9c5580eaf Reviewed-by: André de la Rocha --- src/plugins/directshow/camera/dscamerasession.cpp | 8 ++------ .../directshow/common/directshowbasefilter.cpp | 3 +-- .../directshow/common/directshowsamplegrabber.cpp | 3 ++- .../directshow/player/directshowplayerservice.cpp | 19 ++++++++++++------- src/plugins/directshow/player/videosurfacefilter.cpp | 16 +++++++--------- 5 files changed, 24 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index f69c0d624..4c9100282 100644 --- a/src/plugins/directshow/camera/dscamerasession.cpp +++ b/src/plugins/directshow/camera/dscamerasession.cpp @@ -784,13 +784,9 @@ bool DSCameraSession::createFilterGraph() reinterpret_cast(&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"); } } } diff --git a/src/plugins/directshow/common/directshowbasefilter.cpp b/src/plugins/directshow/common/directshowbasefilter.cpp index 2792dc3c6..b792c4d3f 100644 --- a/src/plugins/directshow/common/directshowbasefilter.cpp +++ b/src/plugins/directshow/common/directshowbasefilter.cpp @@ -75,9 +75,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) diff --git a/src/plugins/directshow/common/directshowsamplegrabber.cpp b/src/plugins/directshow/common/directshowsamplegrabber.cpp index fec59b538..5744aea16 100644 --- a/src/plugins/directshow/common/directshowsamplegrabber.cpp +++ b/src/plugins/directshow/common/directshowsamplegrabber.cpp @@ -82,7 +82,8 @@ public: AddRef(); *ppvObject = static_cast(this); return S_OK; - } else if (riid == IID_ISampleGrabberCB /*__uuidof(ISampleGrabberCB)*/ ) { + } + if (riid == IID_ISampleGrabberCB /*__uuidof(ISampleGrabberCB)*/ ) { AddRef(); *ppvObject = static_cast(this); return S_OK; diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp index d5b8bef26..4b57cdcd2 100644 --- a/src/plugins/directshow/player/directshowplayerservice.cpp +++ b/src/plugins/directshow/player/directshowplayerservice.cpp @@ -200,13 +200,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 +215,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,13 +241,16 @@ 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(); diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp index 74d59231c..70159d5e3 100644 --- a/src/plugins/directshow/player/videosurfacefilter.cpp +++ b/src/plugins/directshow/player/videosurfacefilter.cpp @@ -713,11 +713,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 +740,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() -- cgit v1.2.3 From 8849979754d45dc911e10e9b4942615352e5f3a0 Mon Sep 17 00:00:00 2001 From: Sona Kurazyan Date: Thu, 20 Jun 2019 17:46:44 +0200 Subject: Remove usages of deprecated qSort Task-number: QTBUG-76491 Change-Id: I7a22d6612848e25bb780d205c6cdbb314cd4762d Reviewed-by: Volker Hilsheimer --- src/plugins/android/src/wrappers/jni/androidcamera.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') 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 AndroidCameraPrivate::getSupportedPreviewSizes() list.append(QSize(size.getField("width"), size.getField("height"))); } - qSort(list.begin(), list.end(), qt_sizeLessThan); + std::sort(list.begin(), list.end(), qt_sizeLessThan); } return list; @@ -1541,7 +1541,7 @@ QList AndroidCameraPrivate::getSupportedPictureSizes() list.append(QSize(size.getField("width"), size.getField("height"))); } - qSort(list.begin(), list.end(), qt_sizeLessThan); + std::sort(list.begin(), list.end(), qt_sizeLessThan); } return list; -- cgit v1.2.3 From d25ed5222aec9e642ac534aea463a91c1952f229 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 12 Jun 2019 10:59:51 +0200 Subject: DirectShow: Use member initialization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I4e696083c2ed78b374f2df64706ecb2297f122dd Reviewed-by: André de la Rocha --- src/plugins/directshow/camera/dscameracontrol.cpp | 2 - src/plugins/directshow/camera/dscameracontrol.h | 4 +- src/plugins/directshow/camera/dscameraservice.cpp | 2 - src/plugins/directshow/camera/dscameraservice.h | 4 +- src/plugins/directshow/camera/dscamerasession.cpp | 17 ------ src/plugins/directshow/camera/dscamerasession.h | 35 ++++++------ src/plugins/directshow/camera/dsvideorenderer.cpp | 1 - src/plugins/directshow/camera/dsvideorenderer.h | 2 +- .../directshow/common/directshowbasefilter.cpp | 4 -- .../directshow/common/directshowbasefilter.h | 10 ++-- .../directshow/common/directshoweventloop.cpp | 5 +- .../directshow/common/directshoweventloop.h | 4 +- .../directshow/common/directshowmediatypeenum.cpp | 8 +-- .../directshow/common/directshowmediatypeenum.h | 4 +- src/plugins/directshow/common/directshowpin.cpp | 6 -- src/plugins/directshow/common/directshowpin.h | 12 ++-- .../directshow/common/directshowpinenum.cpp | 5 +- src/plugins/directshow/common/directshowpinenum.h | 4 +- .../directshow/common/directshowsamplegrabber.cpp | 3 - .../directshow/common/directshowsamplegrabber.h | 8 +-- .../player/directshowaudioendpointcontrol.cpp | 2 - .../player/directshowaudioendpointcontrol.h | 4 +- .../player/directshowevrvideowindowcontrol.cpp | 1 - .../player/directshowevrvideowindowcontrol.h | 2 +- .../directshow/player/directshowioreader.cpp | 20 +------ src/plugins/directshow/player/directshowioreader.h | 24 ++++---- .../directshow/player/directshowiosource.cpp | 11 +--- src/plugins/directshow/player/directshowiosource.h | 18 +++--- .../player/directshowmetadatacontrol.cpp | 1 - .../directshow/player/directshowmetadatacontrol.h | 2 +- .../directshow/player/directshowplayercontrol.cpp | 13 ----- .../directshow/player/directshowplayercontrol.h | 28 +++++----- .../directshow/player/directshowplayerservice.cpp | 29 ---------- .../directshow/player/directshowplayerservice.h | 64 +++++++++++----------- .../player/directshowvideorenderercontrol.cpp | 5 -- .../player/directshowvideorenderercontrol.h | 6 +- .../directshow/player/videosurfacefilter.cpp | 10 ---- src/plugins/directshow/player/videosurfacefilter.h | 20 +++---- .../directshow/player/vmr9videowindowcontrol.cpp | 9 --- .../directshow/player/vmr9videowindowcontrol.h | 18 +++--- 40 files changed, 144 insertions(+), 283 deletions(-) (limited to 'src') 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(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..2ad737008 100644 --- a/src/plugins/directshow/camera/dscameracontrol.h +++ b/src/plugins/directshow/camera/dscameracontrol.h @@ -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..bb1691c20 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)) { diff --git a/src/plugins/directshow/camera/dscameraservice.h b/src/plugins/directshow/camera/dscameraservice.h index 9a8f745f6..239a9b55e 100644 --- a/src/plugins/directshow/camera/dscameraservice.h +++ b/src/plugins/directshow/camera/dscameraservice.h @@ -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 4c9100282..c3fa8d226 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())); diff --git a/src/plugins/directshow/camera/dscamerasession.h b/src/plugins/directshow/camera/dscamerasession.h index 18fc0cca7..a19345777 100644 --- a/src/plugins/directshow/camera/dscamerasession.h +++ b/src/plugins/directshow/camera/dscamerasession.h @@ -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 m_supportedFormats; QList m_supportedViewfinderSettings; DirectShowMediaType m_sourceFormat; QMap 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 m_pendingImageProcessingParametrs; 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..96cf74483 100644 --- a/src/plugins/directshow/camera/dsvideorenderer.h +++ b/src/plugins/directshow/camera/dsvideorenderer.h @@ -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 b792c4d3f..fd86cc3da 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) { } 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..a848f41e7 100644 --- a/src/plugins/directshow/common/directshoweventloop.cpp +++ b/src/plugins/directshow/common/directshoweventloop.cpp @@ -51,7 +51,6 @@ public: DirectShowPostedEvent(QObject *receiver, QEvent *event) : receiver(receiver) , event(event) - , next(0) { } @@ -62,13 +61,11 @@ public: QObject *receiver; QEvent *event; - DirectShowPostedEvent *next; + DirectShowPostedEvent *next = nullptr; }; DirectShowEventLoop::DirectShowEventLoop(QObject *parent) : QObject(parent) - , m_postsHead(0) - , m_postsTail(0) , m_eventHandle(::CreateEvent(0, 0, 0, 0)) , m_waitHandle(::CreateEvent(0, 0, 0, 0)) { diff --git a/src/plugins/directshow/common/directshoweventloop.h b/src/plugins/directshow/common/directshoweventloop.h index a29274b7b..b9003209e 100644 --- a/src/plugins/directshow/common/directshoweventloop.h +++ b/src/plugins/directshow/common/directshoweventloop.h @@ -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/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 &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 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..a9a1d829a 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) { } @@ -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) { } @@ -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)); } diff --git a/src/plugins/directshow/common/directshowpin.h b/src/plugins/directshow/common/directshowpin.h index 5e513d002..419276c9c 100644 --- a/src/plugins/directshow/common/directshowpin.h +++ b/src/plugins/directshow/common/directshowpin.h @@ -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 pinList = filter->pins(); @@ -55,9 +54,7 @@ DirectShowPinEnum::DirectShowPinEnum(DirectShowBaseFilter *filter) } DirectShowPinEnum::DirectShowPinEnum(const QList &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 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 5744aea16..80d3f1c16 100644 --- a/src/plugins/directshow/common/directshowsamplegrabber.cpp +++ b/src/plugins/directshow/common/directshowsamplegrabber.cpp @@ -116,9 +116,6 @@ private: DirectShowSampleGrabber::DirectShowSampleGrabber(QObject *p) : QObject(p) - , m_sampleGrabber(nullptr) - , m_sampleGabberCb(nullptr) - , m_callbackType(CallbackMethod::BufferCB) { // Create sample grabber filter HRESULT hr = CoCreateInstance(cLSID_SampleGrabber, NULL, CLSCTX_INPROC, iID_ISampleGrabber, reinterpret_cast(&m_sampleGrabber)); diff --git a/src/plugins/directshow/common/directshowsamplegrabber.h b/src/plugins/directshow/common/directshowsamplegrabber.h index a9b72fcd1..5fc61de14 100644 --- a/src/plugins/directshow/common/directshowsamplegrabber.h +++ b/src/plugins/directshow/common/directshowsamplegrabber.h @@ -78,10 +78,10 @@ Q_SIGNALS: void bufferAvailable(double time, const QByteArray &data); private: - IBaseFilter *m_filter; - ISampleGrabber *m_sampleGrabber; - SampleGrabberCallbackPrivate *m_sampleGabberCb; - CallbackMethod m_callbackType; + IBaseFilter *m_filter = nullptr; + ISampleGrabber *m_sampleGrabber = nullptr; + SampleGrabberCallbackPrivate *m_sampleGabberCb = nullptr; + CallbackMethod m_callbackType= CallbackMethod::BufferCB; }; QT_END_NAMESPACE diff --git a/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp b/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp index 78733972a..3af9a5a2a 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(CLSID_SystemDeviceEnum); diff --git a/src/plugins/directshow/player/directshowaudioendpointcontrol.h b/src/plugins/directshow/player/directshowaudioendpointcontrol.h index b6f8a6724..1004489d4 100644 --- a/src/plugins/directshow/player/directshowaudioendpointcontrol.h +++ b/src/plugins/directshow/player/directshowaudioendpointcontrol.h @@ -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 m_devices; QString m_defaultEndpoint; diff --git a/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp b/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp index fc1058d57..8ef5fd6c6 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) { } diff --git a/src/plugins/directshow/player/directshowevrvideowindowcontrol.h b/src/plugins/directshow/player/directshowevrvideowindowcontrol.h index fb661780f..314aee3eb 100644 --- a/src/plugins/directshow/player/directshowevrvideowindowcontrol.h +++ b/src/plugins/directshow/player/directshowevrvideowindowcontrol.h @@ -55,7 +55,7 @@ public: 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..5fff295fa 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()); 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..934ac97f3 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 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 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 915fa1c71..c87ce82cf 100644 --- a/src/plugins/directshow/player/directshowmetadatacontrol.cpp +++ b/src/plugins/directshow/player/directshowmetadatacontrol.cpp @@ -445,7 +445,6 @@ static QVariant convertValue(const PROPVARIANT& var) DirectShowMetaDataControl::DirectShowMetaDataControl(QObject *parent) : QMetaDataReaderControl(parent) - , m_available(false) { } diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.h b/src/plugins/directshow/player/directshowmetadatacontrol.h index 4196a7950..36a3ba845 100644 --- a/src/plugins/directshow/player/directshowmetadatacontrol.h +++ b/src/plugins/directshow/player/directshowmetadatacontrol.h @@ -76,7 +76,7 @@ private: }; QVariantMap m_metadata; - bool m_available; + bool m_available = false; }; QT_END_NAMESPACE diff --git a/src/plugins/directshow/player/directshowplayercontrol.cpp b/src/plugins/directshow/player/directshowplayercontrol.cpp index 7de0a686f..7e1413b56 100644 --- a/src/plugins/directshow/player/directshowplayercontrol.cpp +++ b/src/plugins/directshow/player/directshowplayercontrol.cpp @@ -50,19 +50,6 @@ DirectShowPlayerControl::DirectShowPlayerControl(DirectShowPlayerService *service, QObject *parent) : QMediaPlayerControl(parent) , m_service(service) - , m_audio(0) - , m_updateProperties(0) - , m_state(QMediaPlayer::StoppedState) - , m_status(QMediaPlayer::NoMedia) - , m_error(QMediaPlayer::NoError) - , m_streamTypes(0) - , m_volume(100) - , m_muted(false) - , m_emitPosition(-1) - , m_pendingPosition(-1) - , m_duration(0) - , m_playbackRate(0) - , m_seekable(false) { } diff --git a/src/plugins/directshow/player/directshowplayercontrol.h b/src/plugins/directshow/player/directshowplayercontrol.h index dba9ab9a0..7b235b91c 100644 --- a/src/plugins/directshow/player/directshowplayercontrol.h +++ b/src/plugins/directshow/player/directshowplayercontrol.h @@ -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 4b57cdcd2..ad0dfabf8 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_playerControl = new DirectShowPlayerControl(this); m_metaDataControl = new DirectShowMetaDataControl(this); diff --git a/src/plugins/directshow/player/directshowplayerservice.h b/src/plugins/directshow/player/directshowplayerservice.h index a6eeb8a77..329a463ed 100644 --- a/src/plugins/directshow/player/directshowplayerservice.h +++ b/src/plugins/directshow/player/directshowplayerservice.h @@ -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..18eb92189 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 { } diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.h b/src/plugins/directshow/player/directshowvideorenderercontrol.h index b2abeeaed..09d66b137 100644 --- a/src/plugins/directshow/player/directshowvideorenderercontrol.h +++ b/src/plugins/directshow/player/directshowvideorenderercontrol.h @@ -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 70159d5e3..bb06d1878 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) { supportedFormatsChanged(); connect(surface, &QAbstractVideoSurface::supportedFormatsChanged, diff --git a/src/plugins/directshow/player/videosurfacefilter.h b/src/plugins/directshow/player/videosurfacefilter.h index 56791f270..91f1b28a5 100644 --- a/src/plugins/directshow/player/videosurfacefilter.h +++ b/src/plugins/directshow/player/videosurfacefilter.h @@ -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 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..76444be02 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(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(m_filter, IID_IVMRFilterConfig9)) { config->SetRenderingMode(VMR9Mode_Windowless); diff --git a/src/plugins/directshow/player/vmr9videowindowcontrol.h b/src/plugins/directshow/player/vmr9videowindowcontrol.h index 8ab9bd506..c814c2c85 100644 --- a/src/plugins/directshow/player/vmr9videowindowcontrol.h +++ b/src/plugins/directshow/player/vmr9videowindowcontrol.h @@ -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 -- cgit v1.2.3 From 0c9bc813c6dabbed8d57843ad1e7ea21fe1008f1 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 12 Jun 2019 11:43:51 +0200 Subject: DirectShow: Introduce nullptr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apply Fixits by Qt Creator. Change-Id: Idbd52ceaac6ee02f23d05f5a9b1ab6d58298b6a5 Reviewed-by: André de la Rocha --- src/plugins/directshow/camera/dscameracontrol.h | 2 +- src/plugins/directshow/camera/dscameraservice.cpp | 4 +- src/plugins/directshow/camera/dscameraservice.h | 2 +- src/plugins/directshow/camera/dscamerasession.cpp | 68 +++++++++++----------- src/plugins/directshow/camera/dscamerasession.h | 2 +- .../directshow/camera/dsvideodevicecontrol.cpp | 18 +++--- .../directshow/camera/dsvideodevicecontrol.h | 2 +- src/plugins/directshow/camera/dsvideorenderer.h | 2 +- .../directshow/common/directshowbasefilter.cpp | 6 +- .../directshow/common/directshoweventloop.cpp | 6 +- .../directshow/common/directshoweventloop.h | 2 +- src/plugins/directshow/common/directshowglobal.h | 16 ++--- src/plugins/directshow/common/directshowpin.cpp | 36 ++++++------ src/plugins/directshow/common/directshowpin.h | 2 +- .../directshow/common/directshowsamplegrabber.cpp | 4 +- src/plugins/directshow/common/directshowutils.cpp | 4 +- .../directshow/common/directshowvideobuffer.cpp | 4 +- src/plugins/directshow/dsserviceplugin.cpp | 4 +- .../player/directshowaudioendpointcontrol.cpp | 20 +++---- .../player/directshowaudioendpointcontrol.h | 2 +- .../player/directshowevrvideowindowcontrol.cpp | 2 +- .../player/directshowevrvideowindowcontrol.h | 2 +- .../directshow/player/directshowioreader.cpp | 14 ++--- .../directshow/player/directshowiosource.cpp | 8 +-- .../player/directshowmetadatacontrol.cpp | 18 +++--- .../directshow/player/directshowmetadatacontrol.h | 2 +- .../directshow/player/directshowplayercontrol.h | 2 +- .../directshow/player/directshowplayerservice.cpp | 66 ++++++++++----------- .../directshow/player/directshowplayerservice.h | 2 +- .../player/directshowvideorenderercontrol.cpp | 8 +-- .../player/directshowvideorenderercontrol.h | 2 +- .../directshow/player/videosurfacefilter.cpp | 6 +- src/plugins/directshow/player/videosurfacefilter.h | 2 +- .../directshow/player/vmr9videowindowcontrol.cpp | 4 +- .../directshow/player/vmr9videowindowcontrol.h | 2 +- 35 files changed, 173 insertions(+), 173 deletions(-) (limited to 'src') diff --git a/src/plugins/directshow/camera/dscameracontrol.h b/src/plugins/directshow/camera/dscameracontrol.h index 2ad737008..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; } diff --git a/src/plugins/directshow/camera/dscameraservice.cpp b/src/plugins/directshow/camera/dscameraservice.cpp index bb1691c20..ff488cf09 100644 --- a/src/plugins/directshow/camera/dscameraservice.cpp +++ b/src/plugins/directshow/camera/dscameraservice.cpp @@ -138,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 239a9b55e..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; diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index c3fa8d226..4bf448c31 100644 --- a/src/plugins/directshow/camera/dscamerasession.cpp +++ b/src/plugins/directshow/camera/dscamerasession.cpp @@ -314,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(&pVideoProcAmp) @@ -447,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"); @@ -499,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(&pControl)); if (FAILED(hr)) { @@ -685,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(&m_filterGraph)); if (FAILED(hr)) { errorString = tr("Failed to create filter graph"); @@ -698,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(&m_graphBuilder)); if (FAILED(hr)) { @@ -714,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(&pDevEnum)); if (SUCCEEDED(hr)) { @@ -723,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); @@ -745,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(&pPropBag)); @@ -763,7 +763,7 @@ 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(&m_sourceFilter)); pPropBag->Release(); pMoniker->Release(); @@ -792,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"); @@ -877,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(&pConfig)); @@ -910,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(&pVideoProcAmp) @@ -1020,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(); @@ -1040,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(&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 { @@ -1109,12 +1109,12 @@ void DSCameraSession::updateSourceCapabilities() QList 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))) { diff --git a/src/plugins/directshow/camera/dscamerasession.h b/src/plugins/directshow/camera/dscamerasession.h index a19345777..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; } 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(&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 26655f431..24a5b61a1 100644 --- a/src/plugins/directshow/camera/dsvideodevicecontrol.h +++ b/src/plugins/directshow/camera/dsvideodevicecontrol.h @@ -54,7 +54,7 @@ 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.h b/src/plugins/directshow/camera/dsvideorenderer.h index 96cf74483..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; diff --git a/src/plugins/directshow/common/directshowbasefilter.cpp b/src/plugins/directshow/common/directshowbasefilter.cpp index fd86cc3da..dfea2460f 100644 --- a/src/plugins/directshow/common/directshowbasefilter.cpp +++ b/src/plugins/directshow/common/directshowbasefilter.cpp @@ -53,7 +53,7 @@ DirectShowBaseFilter::~DirectShowBaseFilter() { if (m_clock) { m_clock->Release(); - m_clock = NULL; + m_clock = nullptr; } } @@ -202,7 +202,7 @@ HRESULT DirectShowBaseFilter::FindPin(LPCWSTR Id, IPin **ppPin) } } - *ppPin = 0; + *ppPin = nullptr; return VFW_E_NOT_FOUND; } @@ -212,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/directshoweventloop.cpp b/src/plugins/directshow/common/directshoweventloop.cpp index a848f41e7..a38c26ef4 100644 --- a/src/plugins/directshow/common/directshoweventloop.cpp +++ b/src/plugins/directshow/common/directshoweventloop.cpp @@ -66,8 +66,8 @@ public: DirectShowEventLoop::DirectShowEventLoop(QObject *parent) : QObject(parent) - , m_eventHandle(::CreateEvent(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)) { } @@ -138,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 b9003209e..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); 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 T *com_cast(IUnknown *unknown, const IID &iid) { - T *iface = 0; + T *iface = nullptr; return unknown && unknown->QueryInterface(iid, reinterpret_cast(&iface)) == S_OK ? iface - : 0; + : nullptr; } template 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 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(&object)) == S_OK ? object - : 0; + : nullptr; } DEFINE_GUID(MEDIASUBTYPE_I420, diff --git a/src/plugins/directshow/common/directshowpin.cpp b/src/plugins/directshow/common/directshowpin.cpp index a9a1d829a..390d410a4 100644 --- a/src/plugins/directshow/common/directshowpin.cpp +++ b/src/plugins/directshow/common/directshowpin.cpp @@ -75,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))) { @@ -107,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) @@ -156,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; } @@ -196,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; } @@ -217,9 +217,9 @@ HRESULT DirectShowPin::Disconnect() return hr; m_peerPin->Release(); - m_peerPin = NULL; + m_peerPin = nullptr; - setMediaType(NULL); + setMediaType(nullptr); return S_OK; } @@ -234,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(); @@ -390,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)) @@ -420,7 +420,7 @@ HRESULT DirectShowOutputPin::completeConnection(IPin *pin) } m_allocator->Release(); - m_allocator = NULL; + m_allocator = nullptr; } // Otherwise, allocate its own allocator @@ -438,7 +438,7 @@ HRESULT DirectShowOutputPin::completeConnection(IPin *pin) } m_allocator->Release(); - m_allocator = NULL; + m_allocator = nullptr; } return hr; @@ -452,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; @@ -496,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 419276c9c..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 supportedMediaTypes(); diff --git a/src/plugins/directshow/common/directshowsamplegrabber.cpp b/src/plugins/directshow/common/directshowsamplegrabber.cpp index 80d3f1c16..a9e74f9db 100644 --- a/src/plugins/directshow/common/directshowsamplegrabber.cpp +++ b/src/plugins/directshow/common/directshowsamplegrabber.cpp @@ -75,7 +75,7 @@ public: STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) override { - if (NULL == ppvObject) + if (nullptr == ppvObject) return E_POINTER; if (riid == IID_IUnknown /*__uuidof(IUnknown) */ ) { @@ -118,7 +118,7 @@ DirectShowSampleGrabber::DirectShowSampleGrabber(QObject *p) : QObject(p) { // Create sample grabber filter - HRESULT hr = CoCreateInstance(cLSID_SampleGrabber, NULL, CLSCTX_INPROC, iID_ISampleGrabber, reinterpret_cast(&m_sampleGrabber)); + HRESULT hr = CoCreateInstance(cLSID_SampleGrabber, nullptr, CLSCTX_INPROC, iID_ISampleGrabber, reinterpret_cast(&m_sampleGrabber)); if (FAILED(hr)) { qCWarning(qtDirectShowPlugin, "Failed to create sample grabber"); 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 releasePin { &nextPin }; PIN_DIRECTION currentPinDir; *hrOut = nextPin->QueryDirection(¤tPinDir); @@ -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 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(bytes); } } - return 0; + return nullptr; } void DirectShowVideoBuffer::unmap() diff --git a/src/plugins/directshow/dsserviceplugin.cpp b/src/plugins/directshow/dsserviceplugin.cpp index 727a11b55..e22bfe93b 100644 --- a/src/plugins/directshow/dsserviceplugin.cpp +++ b/src/plugins/directshow/dsserviceplugin.cpp @@ -78,7 +78,7 @@ static int g_refCount = 0; void addRefCount() { if (++g_refCount == 1) - CoInitialize(NULL); + CoInitialize(nullptr); } void releaseRefCount() @@ -99,7 +99,7 @@ QMediaService* DSServicePlugin::create(QString const& key) return new DirectShowPlayerService; } - return 0; + return nullptr; } void DSServicePlugin::release(QMediaService *service) diff --git a/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp b/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp index 3af9a5a2a..f4e45cdd8 100644 --- a/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp +++ b/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp @@ -81,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(&propertyBag)))) { + nullptr, nullptr, IID_IPropertyBag, reinterpret_cast(&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(); @@ -115,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(&filter)) == S_OK) { m_service->setAudioOutput(filter); @@ -131,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 1004489d4..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 availableOutputs() const override; diff --git a/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp b/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp index 8ef5fd6c6..89bfc1467 100644 --- a/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp +++ b/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp @@ -58,7 +58,7 @@ IBaseFilter *DirectShowEvrVideoWindowControl::filter() m_evrFilter = com_new(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 314aee3eb..edbde78d6 100644 --- a/src/plugins/directshow/player/directshowevrvideowindowcontrol.h +++ b/src/plugins/directshow/player/directshowevrvideowindowcontrol.h @@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE class DirectShowEvrVideoWindowControl : public EvrVideoWindowControl { public: - DirectShowEvrVideoWindowControl(QObject *parent = 0); + DirectShowEvrVideoWindowControl(QObject *parent = nullptr); ~DirectShowEvrVideoWindowControl(); IBaseFilter *filter(); diff --git a/src/plugins/directshow/player/directshowioreader.cpp b/src/plugins/directshow/player/directshowioreader.cpp index 5fff295fa..b903038ea 100644 --- a/src/plugins/directshow/player/directshowioreader.cpp +++ b/src/plugins/directshow/player/directshowioreader.cpp @@ -190,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; @@ -359,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; @@ -449,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/directshowiosource.cpp b/src/plugins/directshow/player/directshowiosource.cpp index 934ac97f3..5144710b7 100644 --- a/src/plugins/directshow/player/directshowiosource.cpp +++ b/src/plugins/directshow/player/directshowiosource.cpp @@ -83,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) { @@ -143,7 +143,7 @@ HRESULT DirectShowIOSource::QueryInterface(REFIID riid, void **ppvObject) m_queriedForAsyncReader = true; *ppvObject = static_cast(m_reader); } else { - *ppvObject = 0; + *ppvObject = nullptr; return E_NOINTERFACE; } @@ -372,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/directshowmetadatacontrol.cpp b/src/plugins/directshow/player/directshowmetadatacontrol.cpp index c87ce82cf..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) @@ -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)) { @@ -471,7 +471,7 @@ static QString convertBSTR(BSTR *string) ::SysStringLen(*string)); ::SysFreeString(*string); - string = 0; + string = nullptr; return value; } @@ -491,11 +491,11 @@ void DirectShowMetaDataControl::updateMetadata(const QString &fileSrc, QVariantM } if (!fileSrc.isEmpty() && sHCreateItemFromParsingName) { - IShellItem2* shellItem = 0; + IShellItem2* shellItem = nullptr; if (sHCreateItemFromParsingName(reinterpret_cast(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))) { @@ -650,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(&content)) != S_OK) && (!source || source->QueryInterface( IID_IAMMediaContent, reinterpret_cast(&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 36a3ba845..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; diff --git a/src/plugins/directshow/player/directshowplayercontrol.h b/src/plugins/directshow/player/directshowplayercontrol.h index 7b235b91c..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; diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp index ad0dfabf8..56a428028 100644 --- a/src/plugins/directshow/player/directshowplayerservice.cpp +++ b/src/plugins/directshow/player/directshowplayerservice.cpp @@ -124,7 +124,7 @@ private: DirectShowPlayerService::DirectShowPlayerService(QObject *parent) : QMediaService(parent) , m_loop(qt_directShowEventLoop()) - , m_taskHandle(::CreateEvent(0, 0, 0, 0)) + , m_taskHandle(::CreateEvent(nullptr, 0, 0, nullptr)) { m_playerControl = new DirectShowPlayerControl(this); m_metaDataControl = new DirectShowMetaDataControl(this); @@ -150,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; @@ -228,7 +228,7 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name) updateVideoProbe(); return m_videoProbeControl; } - return 0; + return nullptr; } void DirectShowPlayerService::releaseControl(QMediaControl *control) @@ -237,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; @@ -330,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")) { @@ -343,14 +343,14 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker) if (IFileSourceFilter *fileSource = com_new(clsid_WMAsfReader, iid_IFileSourceFilter)) { locker->unlock(); - hr = fileSource->Load(reinterpret_cast(m_url.toString().utf16()), 0); + hr = fileSource->Load(reinterpret_cast(m_url.toString().utf16()), nullptr); if (SUCCEEDED(hr)) { source = com_cast(fileSource, IID_IBaseFilter); if (!SUCCEEDED(hr = m_graph->AddFilter(source, L"Source")) && source) { source->Release(); - source = 0; + source = nullptr; } } fileSource->Release(); @@ -485,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))) @@ -504,7 +504,7 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker) peer->Release(); } else { locker->unlock(); - HRESULT hr = graph->RenderEx(pin, /*AM_RENDEREX_RENDERTOEXISTINGRENDERERS*/ 1, 0); + HRESULT hr = graph->RenderEx(pin, /*AM_RENDEREX_RENDERTOEXISTINGRENDERERS*/ 1, nullptr); if (SUCCEEDED(hr)) { rendered = true; m_error = QMediaPlayer::NoError; @@ -656,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(); @@ -800,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; @@ -843,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; @@ -1156,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) { @@ -1182,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; @@ -1355,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(); @@ -1627,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; @@ -1649,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 329a463ed..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; diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp index 18eb92189..19be82141 100644 --- a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp +++ b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp @@ -80,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; @@ -98,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 09d66b137..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; diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp index bb06d1878..8dd18dc1b 100644 --- a/src/plugins/directshow/player/videosurfacefilter.cpp +++ b/src/plugins/directshow/player/videosurfacefilter.cpp @@ -224,8 +224,8 @@ VideoSurfaceFilter::VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectSho , m_loop(loop) , m_surface(surface) , m_renderMutex(QMutex::Recursive) - , m_renderEvent(CreateEvent(NULL, FALSE, FALSE, NULL)) - , m_flushEvent(CreateEvent(NULL, TRUE, FALSE, NULL)) + , m_renderEvent(CreateEvent(nullptr, FALSE, FALSE, nullptr)) + , m_flushEvent(CreateEvent(nullptr, TRUE, FALSE, nullptr)) { supportedFormatsChanged(); connect(surface, &QAbstractVideoSurface::supportedFormatsChanged, @@ -606,7 +606,7 @@ void VideoSurfaceFilter::clearPendingSample() if (m_pendingSample) { qCDebug(qLcRenderFilter, "clearPendingSample"); m_pendingSample->Release(); - m_pendingSample = NULL; + m_pendingSample = nullptr; } } diff --git a/src/plugins/directshow/player/videosurfacefilter.h b/src/plugins/directshow/player/videosurfacefilter.h index 91f1b28a5..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; diff --git a/src/plugins/directshow/player/vmr9videowindowcontrol.cpp b/src/plugins/directshow/player/vmr9videowindowcontrol.cpp index 76444be02..63c945622 100644 --- a/src/plugins/directshow/player/vmr9videowindowcontrol.cpp +++ b/src/plugins/directshow/player/vmr9videowindowcontrol.cpp @@ -104,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(); @@ -173,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 c814c2c85..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; } -- cgit v1.2.3 From 9bbf9f0d862b8d458e59690d36641618fb101b4e Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Mon, 17 Jun 2019 15:20:22 +0200 Subject: Fix compile issue when no opengl in QVideoSurfacePainter error: invalid use of incomplete type 'class QGLContext' Change-Id: I4bc9bd4231e663b187d3cef917b7a551ba614ba9 Fixes: QTBUG-76405 Reviewed-by: Andy Shaw --- src/multimediawidgets/qpaintervideosurface.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/multimediawidgets/qpaintervideosurface.cpp b/src/multimediawidgets/qpaintervideosurface.cpp index 440d5c858..6af0c7588 100644 --- a/src/multimediawidgets/qpaintervideosurface.cpp +++ b/src/multimediawidgets/qpaintervideosurface.cpp @@ -57,10 +57,6 @@ #ifndef GL_RGB8 #define GL_RGB8 0x8051 #endif -#endif - -#include -QT_BEGIN_NAMESPACE static void makeCurrent(QGLContext *context) { @@ -70,6 +66,10 @@ static void makeCurrent(QGLContext *context) if (handle && QOpenGLContext::currentContext() != handle) handle->makeCurrent(handle->surface()); } +#endif + +#include +QT_BEGIN_NAMESPACE QVideoSurfacePainter::~QVideoSurfacePainter() { -- cgit v1.2.3 From e988f423991084eb7187c420676e875ffb355188 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 20 Jun 2019 09:57:32 -0700 Subject: AVFoundation: remove ResourceHandler nested class Doesn't seem to be used. Task-number: QTBUG-76521 Change-Id: Ief874765cd7b43798de3fffd15a9f691e1ac078d Reviewed-by: VaL Doroshchuk --- .../mediaplayer/avfmediaplayersession.h | 38 ---------------------- 1 file changed, 38 deletions(-) (limited to 'src') 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; -- cgit v1.2.3 From a61137c51bd7d643a0e85553be05dd6a72174765 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 25 Jun 2019 08:22:24 +0200 Subject: Port towards load/storeRelaxed atomics Plain load() / store() have been deprecated, so port away to their straight replacements. Change-Id: Id5d0cfc97336618e444126278630decf581f3b6c Reviewed-by: Marc Mutz --- src/multimedia/audio/qaudiobuffer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') 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(); -- cgit v1.2.3 From 421fa617369646eb99750c52a3b38fc3b3015ec6 Mon Sep 17 00:00:00 2001 From: Arno Rehn Date: Wed, 24 Jan 2018 18:05:47 +0100 Subject: QGstAppSrc: Don't send EOS for at-end sequential devices Sequential devices such as network sockets may continuously stream data. Thus, the device being atEnd() or returning 0 for read() doesn't automatically mean that the stream is done. This fixes streaming live data over a device (e.g. socket or pipe). [ChangeLog][][GStreamer backend] Fix streaming data from sequential devices. Change-Id: I2fc834479cc6d52a806790ccb722bcfdea4723be Reviewed-by: VaL Doroshchuk --- src/gsttools/qgstappsrc.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') 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(); } } -- cgit v1.2.3 From 15abbc8c9e3acb5d9bee70fd8bec25242ec7abdd Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Fri, 21 Jun 2019 15:41:30 +0200 Subject: DirectShow: Map MEDIASUBTYPE_RGB24 to QVideoFrame::Format_BGR24 MEDIASUBTYPE_RGB24 inverts Red and Blue channels, i.e. on Little-Endian: BGR and thus Format_BGR24 should be used instead of Format_RGB24. To reproduce the bug: QCameraViewfinderSettings settings; settings.setPixelFormat(QVideoFrame::Format_RGB24); camera->setViewfinderSettings(settings); If the camera supports MEDIASUBTYPE_RGB24 it will show Red and Blue channels inverted. *NOTE* This fix causes ignoring MEDIASUBTYPE_RGB24 format and using MEDUASUBTYPE_RGB32 instead. Because the video surfaces currently do not support QVideoFrame::Format_BGR32. So it fixes the issue with inverted colors by ignoring RGB24 media type. If there is a need to use RGB24, it would require to implement custom surface which supports QVideoFrame::Format_BGR24 and swap colors manually. Change-Id: I0d77694ef688a05dc52d13f991a5088e00f72867 Fixes: QTBUG-75959 Reviewed-by: Timur Pocheptsov --- src/plugins/directshow/common/directshowmediatype.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') 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 }, -- cgit v1.2.3 From bc03bfdbcf63a81f7261637378e2447e76dc7e97 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Tue, 2 Jul 2019 16:07:00 +0200 Subject: Fix MinGW build With newer MinGW versions we have to link against libamstrmid for the symbols IID_IMFTopologyServiceLookupClient, IID_IMFVideoDeviceID and IID_IMFVideoPresenter. Fixes: QTBUG-70655 Change-Id: Ib203d991d2bd8cd63193a7319c156f30f0e8826b Reviewed-by: VaL Doroshchuk --- src/plugins/directshow/directshow.pro | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/plugins/directshow/directshow.pro b/src/plugins/directshow/directshow.pro index 54d617166..a3badf603 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) qtConfig(directshow-player): include(player/player.pri) include(camera/camera.pri) -- cgit v1.2.3 From a0cdd6f79222d06a0fc41caa1fbb35acb20d4961 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 1 Jul 2019 12:05:57 +0200 Subject: Fix API of QCameraExposure, QCameraFocus, QCameraImageProcessing for Qt for Python The classes inherit QObject, but make the destructor private, which makes it impossible to add Qt for Python bindings. Make destructors protected to fix this. This is arguably a BC break for compilers which have the accessibility mangled in the symbol, but, since the destructor was private, there cannot be any code using it. Task-number: QTBUG-74422 Task-number: PYSIDE-1041 Change-Id: Id23d73aea8aedf15caafa20c048a80efd3e880bd Reviewed-by: VaL Doroshchuk Reviewed-by: Lars Knoll --- src/multimedia/camera/qcameraexposure.h | 4 +++- src/multimedia/camera/qcamerafocus.h | 4 +++- src/multimedia/camera/qcameraimageprocessing.h | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src') 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) -- cgit v1.2.3 From 962371cbe3f01f3c30991522de1d03c8dfd77164 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 4 Jul 2019 10:56:08 +0200 Subject: Eradicate Java-style iterators and mark the module free of them Java-style iterators are scheduled to be deprecated, or at the very least banned from use in Qt's own implementation. Ditto for QLinkedList. Change-Id: I5471c293a7a050b92db47f7aeac15dd05bd46650 Reviewed-by: VaL Doroshchuk --- src/gsttools/qgstutils.cpp | 4 +--- src/multimedia/audio/qaudiodeviceinfo.cpp | 12 ++++-------- src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp | 4 +--- src/plugins/gstreamer/mediacapture/qgstreameraudioencode.cpp | 4 +--- src/plugins/gstreamer/mediacapture/qgstreamervideoencode.cpp | 4 +--- .../gstreamer/mediaplayer/qgstreamermetadataprovider.cpp | 5 ++--- 6 files changed, 10 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/gsttools/qgstutils.cpp b/src/gsttools/qgstutils.cpp index 9806af0fe..ac8808115 100644 --- a/src/gsttools/qgstutils.cpp +++ b/src/gsttools/qgstutils.cpp @@ -1307,9 +1307,7 @@ void QGstUtils::setMetaData(GstElement *element, const QMap 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/multimedia/audio/qaudiodeviceinfo.cpp b/src/multimedia/audio/qaudiodeviceinfo.cpp index b8cac18eb..f87b1de9d 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 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 i(testSampleRates); - while (i.hasNext()) { - i.next(); - nearest.setSampleRate(i.value()); + for (int sampleRate : qAsConst(testSampleRates)) { + nearest.setSampleRate(sampleRate); if (isFormatSupported(nearest)) return nearest; } 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 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 options = m_options.value(codec); - QMapIterator 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 options = m_options.value(codec); - QMapIterator 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 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()); -- cgit v1.2.3 From 767a7e1c9e418545605f2828b7b0847ee650dea8 Mon Sep 17 00:00:00 2001 From: VaL Doroshchuk Date: Thu, 30 May 2019 14:34:43 +0200 Subject: Fix crash when app is destroyed before QSample::load is finished MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QSample objects live and handled in loading thread (which uses QNetworkAccessManager). When the app is finished and going to be destroyed, all static objects are destroying as well. In case if static QNetworkConfigurationManagerPrivate (which is used by QNetworkAccessManager) is destroyed before static QSampleCache, and loading of the resource is not finished yet (still executing QNetworkAccessManager::get()), this produces a crash. Since the loading thread is started only when loading of new QSample is requested, (and all events are also handled by this thread) proposing a fix to wait before loading thread is finished when a sample is requested to be released. This postpones deleting of the QSample either when new sample is requested to load or when QSampleCache is destroyed. This makes sure that no loading thread exists when all QSoundEffects objects and afterwards QNetworkConfigurationManagerPrivate are already deleted. Change-Id: I55669ea4c2796a48cae4f0465f7f74d89e393675 Fixes: QTBUG-76090 Reviewed-by: Christian Strømme --- src/multimedia/audio/qsamplecache_p.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/multimedia/audio/qsamplecache_p.cpp b/src/multimedia/audio/qsamplecache_p.cpp index c956d764b..73fc3cd2f 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 -- cgit v1.2.3 From 8756a20821305eabb6026400e6d3cdc79df1690d Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Mon, 1 Jul 2019 16:12:30 +0200 Subject: GStreamer: Fix 0.10 compile error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: QTBUG-76816 Change-Id: I2909c2f2df91ac26b5104e24892310aa62cad172 Reviewed-by: Christian Strømme --- src/gsttools/qgstreamerplayersession.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gsttools/qgstreamerplayersession.cpp b/src/gsttools/qgstreamerplayersession.cpp index 5ede8a1c9..15587f0ce 100644 --- a/src/gsttools/qgstreamerplayersession.cpp +++ b/src/gsttools/qgstreamerplayersession.cpp @@ -981,9 +981,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), "session.play"); + 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 -- cgit v1.2.3 From 1b70bbed49d12af86851a505a5aa5428b9e0c567 Mon Sep 17 00:00:00 2001 From: Nate Weibley Date: Sat, 17 Feb 2018 15:51:02 -0500 Subject: Fix GetFrameRateList checks and memory leak MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GetFrameRateList passes an unmanaged pointer to the caller which must be manually freed with CoTaskMemFree. Additionally the Chromium project notes that some drivers cause quirky return values which we would not catch without stricter checks. See: https://chromium.googlesource.com/chromium/src/media/+/8cc93abd7339eeb9b7c2a12cca07b3dc245b2139/video/capture/win/video_capture_device_win.cc#484 Change-Id: I6aa4a6ea1ac0241e585e98cf9ff63240bacd3956 Reviewed-by: Christian Strømme --- src/plugins/directshow/camera/dscamerasession.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index 5ab9f67d8..a237811ae 100644 --- a/src/plugins/directshow/camera/dscamerasession.cpp +++ b/src/plugins/directshow/camera/dscamerasession.cpp @@ -1137,8 +1137,8 @@ void DSCameraSession::updateSourceCapabilities() long listSize = 0; LONGLONG *frameRates = 0; 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 +1147,8 @@ void DSCameraSession::updateSourceCapabilities() // Make sure higher frame rates come first std::sort(frameRateRanges.begin(), frameRateRanges.end(), qt_frameRateRangeGreaterThan); } + + CoTaskMemFree(frameRates); pPin->Release(); } } -- cgit v1.2.3 From 0198f94e6612b26483dfa341b43eb9998afe1b6d Mon Sep 17 00:00:00 2001 From: Topi Reinio Date: Wed, 3 Jul 2019 11:50:46 +0200 Subject: Doc: Replace example file lists with links to code.qt.io Task-number: QTBUG-74391 Change-Id: I7047254fb8695feabd08eaaf02bee21a1b805917 Reviewed-by: Paul Wicking --- src/multimedia/doc/qtmultimedia.qdocconf | 1 + 1 file changed, 1 insertion(+) (limited to 'src') 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 -- cgit v1.2.3 From bddfae90c6ae90f50d48ce9be5e70cb38c54385a Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 11 Jul 2019 09:31:47 +0200 Subject: Fix GCC 9 -Wdeprecated-copy warnings Change-Id: Ia50ce0d2c94b3b064e9cd571e598ecd37ee2b5e3 Reviewed-by: VaL Doroshchuk --- src/multimedia/qmediatimerange.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src') 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; -- cgit v1.2.3 From 940306f134ded0a323821526d09f12670495b29c Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 11 Jul 2019 09:54:15 +0200 Subject: Eradicate all but one Q_FOREACH loop Q_FOREACH is going to be deprecated, or at the very least banned from use in Qt code. All these are trivial in the sense that the loop body clearly doesn't modify the container over which we iterate, and that the container is const, or trivially marked as such. In one case, replaced Q_FOREACH + delete + clear() with qDeleteAll(qExchange()), in three others, replaced Qt containers with statically-known content with plain C arrays. Change-Id: I718821811370f0cfefac3893283572d39a7d957d Reviewed-by: VaL Doroshchuk --- src/multimedia/doc/snippets/multimedia-snippets/audio.cpp | 3 ++- src/multimedia/doc/snippets/multimedia-snippets/camera.cpp | 12 ++++++------ src/multimedia/doc/snippets/multimedia-snippets/media.cpp | 4 ++-- .../avfoundation/camera/avfvideoencodersettingscontrol.mm | 2 +- src/plugins/common/evr/evrcustompresenter.cpp | 2 +- 5 files changed, 12 insertions(+), 11 deletions(-) (limited to 'src') 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 cameras = QCameraInfo::availableCameras(); - foreach (const QCameraInfo &cameraInfo, cameras) + const QList 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 cameras = QCameraInfo::availableCameras(); - foreach (const QCameraInfo &cameraInfo, cameras) { + const QList 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 zones = focus->focusZones(); - foreach (QCameraFocusZone zone, zones) { + const QList 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/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 &list, qreal value) { - Q_FOREACH (qreal r, list) { + for (qreal r : list) { if (qFuzzyCompare(r, value)) return true; } 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; -- cgit v1.2.3 From 10c080521c525e1729b23dfa0afd08a1428f40d0 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Thu, 11 Jul 2019 09:59:23 +0200 Subject: Eradicate the last Q_FOREACH and mark the module clean This one is not trivial in that it isn't clear, a priori, that the loop body doesn't re-enter the class and ends up modifying m_videoProbes. But MFVideoProbeControl::bufferProbed() just schedules a deferred call to QMediaVideoProbeControl::videoFrameProbed() (via QueuedConnection), so this cannot happen, because we end the loop before we re-enter the event loop (if any) on this thread. Reentrancy from a different thread, OTOH, is not possible because we're holding m_videoProbeMutex while looping. Change-Id: I6c1e22cd01112f0b2650e056f0b7f4a392370b84 Reviewed-by: VaL Doroshchuk --- src/plugins/wmf/player/mftvideo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') 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(); -- cgit v1.2.3 From 491637b716ffe8fc2115baef967a62ed174e612a Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Wed, 26 Jun 2019 14:14:29 +0200 Subject: Make QAudioDeviceInfo::realm() public MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since there could be multiple audio plugins, sometimes it is useful to filter devices per a plugin or avoid duplicates if any. QAudioDeviceInfo::realm() returns a key of the audio plugin that was used to retrieve the device info. Change-Id: Ie786c2c0f5bf181f08ee9be544f20eb41a264e26 Fixes: QTBUG-75781 Reviewed-by: Mårten Nordheim --- src/multimedia/audio/qaudiodeviceinfo.cpp | 5 ++++- src/multimedia/audio/qaudiodeviceinfo.h | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/multimedia/audio/qaudiodeviceinfo.cpp b/src/multimedia/audio/qaudiodeviceinfo.cpp index f87b1de9d..051ef8b3f 100644 --- a/src/multimedia/audio/qaudiodeviceinfo.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo.cpp @@ -445,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 supportedSampleSizes() const; QList supportedByteOrders() const; QList 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; -- cgit v1.2.3 From cbf7548779d399f97a3520a5842d506f9c5bace3 Mon Sep 17 00:00:00 2001 From: Andrew Dolby Date: Mon, 17 Jun 2019 22:23:23 -0400 Subject: AVFoundation: Use 270 for the front facing camera's orientation Patch content originally proposed by Alex Reche and Olivier Le Roux. Fixes: QTBUG-67985 Change-Id: I3ec80c566bf7c67c50e3e7485248412c40bdf169 Reviewed-by: Timur Pocheptsov --- src/plugins/avfoundation/camera/avfcamerasession.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') 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; -- cgit v1.2.3