diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gsttools/qgstreamerplayersession.cpp | 4 | ||||
-rw-r--r-- | src/multimedia/audio/qsamplecache_p.cpp | 12 | ||||
-rw-r--r-- | src/plugins/directshow/camera/dscamerasession.cpp | 6 | ||||
-rw-r--r-- | src/plugins/directshow/common/directshowmediatype.cpp | 2 | ||||
-rw-r--r-- | src/plugins/directshow/directshow.pro | 4 |
5 files changed, 20 insertions, 8 deletions
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 diff --git a/src/multimedia/audio/qsamplecache_p.cpp b/src/multimedia/audio/qsamplecache_p.cpp index 945fabe52..35234f8bb 100644 --- a/src/multimedia/audio/qsamplecache_p.cpp +++ b/src/multimedia/audio/qsamplecache_p.cpp @@ -295,9 +295,12 @@ void QSample::loadIfNecessary() } } -// Called in both threads +// Called in application thread bool QSampleCache::notifyUnreferencedSample(QSample* sample) { + if (m_loadingThread.isRunning()) + m_loadingThread.wait(); + QMutexLocker locker(&m_mutex); if (m_capacity > 0) return false; @@ -306,16 +309,17 @@ bool QSampleCache::notifyUnreferencedSample(QSample* sample) return true; } -// Called in application threadd +// Called in application thread void QSample::release() { QMutexLocker locker(&m_mutex); #ifdef QT_SAMPLECACHE_DEBUG qDebug() << "Sample:: release" << this << QThread::currentThread() << m_ref; #endif - m_ref--; - if (m_ref == 0) + if (--m_ref == 0) { + locker.unlock(); m_parent->notifyUnreferencedSample(this); + } } // Called in dtor and when stream is loaded diff --git a/src/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(); } } diff --git a/src/plugins/directshow/common/directshowmediatype.cpp b/src/plugins/directshow/common/directshowmediatype.cpp index fe86e0204..103f1ddc1 100644 --- a/src/plugins/directshow/common/directshowmediatype.cpp +++ b/src/plugins/directshow/common/directshowmediatype.cpp @@ -52,7 +52,7 @@ namespace { { QVideoFrame::Format_ARGB32, MEDIASUBTYPE_ARGB32 }, { QVideoFrame::Format_RGB32, MEDIASUBTYPE_RGB32 }, - { QVideoFrame::Format_RGB24, MEDIASUBTYPE_RGB24 }, + { QVideoFrame::Format_BGR24, MEDIASUBTYPE_RGB24 }, { QVideoFrame::Format_RGB565, MEDIASUBTYPE_RGB565 }, { QVideoFrame::Format_RGB555, MEDIASUBTYPE_RGB555 }, { QVideoFrame::Format_AYUV444, MEDIASUBTYPE_AYUV }, diff --git a/src/plugins/directshow/directshow.pro b/src/plugins/directshow/directshow.pro index e531efc53..27bb3abb8 100644 --- a/src/plugins/directshow/directshow.pro +++ b/src/plugins/directshow/directshow.pro @@ -16,6 +16,10 @@ mingw { DEFINES += NO_DSHOW_STRSAFE } +mingw { + LIBS_PRIVATE += -lamstrmid +} + include(common/common.pri) include(player/player.pri) include(camera/camera.pri) |