diff options
Diffstat (limited to 'src/plugins/directshow')
5 files changed, 18 insertions, 38 deletions
diff --git a/src/plugins/directshow/camera/dscamerasession.cpp b/src/plugins/directshow/camera/dscamerasession.cpp index 5587b479c..9955a4821 100644 --- a/src/plugins/directshow/camera/dscamerasession.cpp +++ b/src/plugins/directshow/camera/dscamerasession.cpp @@ -1078,40 +1078,10 @@ bool DSCameraSession::connectGraph() void DSCameraSession::disconnectGraph() { - IPin *pPin = 0; - HRESULT hr = getPin(m_sourceFilter, PINDIR_OUTPUT, &pPin); - if (SUCCEEDED(hr)) { - m_filterGraph->Disconnect(pPin); - pPin->Release(); - pPin = NULL; - } - - hr = getPin(m_previewFilter, PINDIR_INPUT, &pPin); - if (SUCCEEDED(hr)) { - m_filterGraph->Disconnect(pPin); - pPin->Release(); - pPin = NULL; - } - - hr = getPin(m_previewFilter, PINDIR_OUTPUT, &pPin); - if (SUCCEEDED(hr)) { - m_filterGraph->Disconnect(pPin); - pPin->Release(); - pPin = NULL; - } - - hr = getPin(m_nullRendererFilter, PINDIR_INPUT, &pPin); - if (SUCCEEDED(hr)) { - m_filterGraph->Disconnect(pPin); - pPin->Release(); - pPin = NULL; - } - // 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; - hr = m_filterGraph->EnumFilters(&enumFilters); - if (SUCCEEDED(hr)) { + if (SUCCEEDED(m_filterGraph->EnumFilters(&enumFilters))) { IBaseFilter *filter = NULL; while (enumFilters->Next(1, &filter, NULL) == S_OK) { m_filterGraph->RemoveFilter(filter); diff --git a/src/plugins/directshow/dsserviceplugin.cpp b/src/plugins/directshow/dsserviceplugin.cpp index 6f31ce7e2..1c9d0eee1 100644 --- a/src/plugins/directshow/dsserviceplugin.cpp +++ b/src/plugins/directshow/dsserviceplugin.cpp @@ -43,6 +43,7 @@ #include <QtCore/qdebug.h> #include <QtCore/QFile> +#include "directshowglobal.h" #include "dsserviceplugin.h" #ifdef QMEDIA_DIRECTSHOW_CAMERA @@ -79,6 +80,8 @@ extern const CLSID CLSID_VideoInputDeviceCategory; QT_USE_NAMESPACE +Q_LOGGING_CATEGORY(qtDirectShowPlugin, "qt.multimedia.plugins.directshow") + static int g_refCount = 0; void addRefCount() { diff --git a/src/plugins/directshow/helpers/directshowglobal.h b/src/plugins/directshow/helpers/directshowglobal.h index f7890c52b..1447bff16 100644 --- a/src/plugins/directshow/helpers/directshowglobal.h +++ b/src/plugins/directshow/helpers/directshowglobal.h @@ -43,6 +43,13 @@ #include <dshow.h> #include <QtCore/qglobal.h> +#include <QtCore/qloggingcategory.h> + +QT_BEGIN_NAMESPACE + +Q_DECLARE_LOGGING_CATEGORY(qtDirectShowPlugin) + +QT_END_NAMESPACE template <typename T> T *com_cast(IUnknown *unknown, const IID &iid) { diff --git a/src/plugins/directshow/player/directshowplayercontrol.cpp b/src/plugins/directshow/player/directshowplayercontrol.cpp index fce488af2..2d0ee2d59 100644 --- a/src/plugins/directshow/player/directshowplayercontrol.cpp +++ b/src/plugins/directshow/player/directshowplayercontrol.cpp @@ -200,7 +200,7 @@ qreal DirectShowPlayerControl::playbackRate() const void DirectShowPlayerControl::setPlaybackRate(qreal rate) { - if (m_playbackRate != rate) { + if (!qFuzzyCompare(m_playbackRate, rate)) { m_service->setRate(rate); emit playbackRateChanged(m_playbackRate = rate); @@ -370,7 +370,7 @@ void DirectShowPlayerControl::updateMediaInfo(qint64 duration, int streamTypes, void DirectShowPlayerControl::updatePlaybackRate(qreal rate) { - if (m_playbackRate != rate) { + if (!qFuzzyCompare(m_playbackRate, rate)) { m_playbackRate = rate; scheduleUpdate(PlaybackRateProperty); diff --git a/src/plugins/directshow/player/directshowplayerservice.h b/src/plugins/directshow/player/directshowplayerservice.h index b8d30e79a..d933bd660 100644 --- a/src/plugins/directshow/player/directshowplayerservice.h +++ b/src/plugins/directshow/player/directshowplayerservice.h @@ -186,6 +186,7 @@ private: int m_pendingTasks; int m_executingTask; int m_executedTasks; + int m_streamTypes; HANDLE m_taskHandle; HANDLE m_eventHandle; GraphStatus m_graphStatus; @@ -195,20 +196,19 @@ private: IBaseFilter *m_source; IBaseFilter *m_audioOutput; IBaseFilter *m_videoOutput; - int m_streamTypes; qreal m_rate; qint64 m_position; qint64 m_seekPosition; qint64 m_duration; - bool m_buffering; - bool m_seekable; - bool m_atEnd; - bool m_dontCacheNextSeekResult; QMediaTimeRange m_playbackRange; QUrl m_url; QMediaResourceList m_resources; QString m_errorString; QMutex m_mutex; + bool m_buffering; + bool m_seekable; + bool m_atEnd; + bool m_dontCacheNextSeekResult; friend class DirectShowPlayerServiceThread; }; |