diff options
author | Val Doroshchuk <valentyn.doroshchuk@qt.io> | 2019-09-11 15:00:03 +0200 |
---|---|---|
committer | Val Doroshchuk <valentyn.doroshchuk@qt.io> | 2019-09-27 10:26:56 +0200 |
commit | 5323fcef6cfcaa14ff6a7f53c546020d523f8186 (patch) | |
tree | 2f78af5186c83707cc5a1efd3da90cac1e42caaa /src/plugins/directshow/player | |
parent | d34c71a67c9a30ab67da0b6ad11c198bfe2b242d (diff) |
DirectShow: Implement QMediaVideoProbeControl->flush
Need to flush when at least one frame is probed
and stop is called, EOS or QMediaPlayer is destroyed.
Fixes
BFAIL : tst_QMediaPlayerBackend::probes() '(probeHandler.isVideoFlushCalled)' returned FALSE. ()
Task-number: QTBUG-46368
Change-Id: I09ebd6608c9a1b8a0a0707d83200d75ddb435734
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Diffstat (limited to 'src/plugins/directshow/player')
-rw-r--r-- | src/plugins/directshow/player/directshowplayerservice.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp index f5899cb6a..ed131f0bd 100644 --- a/src/plugins/directshow/player/directshowplayerservice.cpp +++ b/src/plugins/directshow/player/directshowplayerservice.cpp @@ -646,6 +646,9 @@ void DirectShowPlayerService::doFinalizeLoad(QMutexLocker *locker) void DirectShowPlayerService::releaseGraph() { + if (m_videoProbeControl) + m_videoProbeControl->flushVideoFrame(); + if (m_graph) { if (m_executingTask != 0) { // {8E1C39A1-DE53-11cf-AA63-0080C744528D} @@ -1023,6 +1026,8 @@ void DirectShowPlayerService::stop() if ((m_executingTask | m_executedTasks) & (Play | Pause | Seek)) { m_pendingTasks |= Stop; + if (m_videoProbeControl) + m_videoProbeControl->flushVideoFrame(); ::SetEvent(m_taskHandle); @@ -1455,6 +1460,8 @@ void DirectShowPlayerService::customEvent(QEvent *event) m_playerControl->updateState(QMediaPlayer::StoppedState); m_playerControl->updateStatus(QMediaPlayer::EndOfMedia); m_playerControl->updatePosition(m_position); + if (m_videoProbeControl) + m_videoProbeControl->flushVideoFrame(); } } else if (event->type() == QEvent::Type(PositionChange)) { QMutexLocker locker(&m_mutex); @@ -1563,7 +1570,7 @@ void DirectShowPlayerService::onVideoBufferAvailable(double time, const QByteArr size, format); - Q_EMIT m_videoProbeControl->videoFrameProbed(frame); + m_videoProbeControl->probeVideoFrame(frame); } QT_WARNING_POP |