diff options
Diffstat (limited to 'src/plugins/directshow/player')
20 files changed, 221 insertions, 293 deletions
diff --git a/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp b/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp index 78733972a..f4e45cdd8 100644 --- a/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp +++ b/src/plugins/directshow/player/directshowaudioendpointcontrol.cpp @@ -48,8 +48,6 @@ DirectShowAudioEndpointControl::DirectShowAudioEndpointControl( DirectShowPlayerService *service, QObject *parent) : QAudioOutputSelectorControl(parent) , m_service(service) - , m_bindContext(0) - , m_deviceEnumerator(0) { if (CreateBindCtx(0, &m_bindContext) == S_OK) { m_deviceEnumerator = com_new<ICreateDevEnum>(CLSID_SystemDeviceEnum); @@ -83,12 +81,12 @@ QString DirectShowAudioEndpointControl::outputDescription(const QString &name) c QString description; if (IMoniker *moniker = m_devices.value(name, 0)) { - IPropertyBag *propertyBag = 0; + IPropertyBag *propertyBag = nullptr; if (SUCCEEDED(moniker->BindToStorage( - 0, 0, IID_IPropertyBag, reinterpret_cast<void **>(&propertyBag)))) { + nullptr, nullptr, IID_IPropertyBag, reinterpret_cast<void **>(&propertyBag)))) { VARIANT name; VariantInit(&name); - if (SUCCEEDED(propertyBag->Read(L"FriendlyName", &name, 0))) + if (SUCCEEDED(propertyBag->Read(L"FriendlyName", &name, nullptr))) description = QString::fromWCharArray(name.bstrVal); VariantClear(&name); propertyBag->Release(); @@ -117,11 +115,11 @@ void DirectShowAudioEndpointControl::setActiveOutput(const QString &name) return; if (IMoniker *moniker = m_devices.value(name, 0)) { - IBaseFilter *filter = 0; + IBaseFilter *filter = nullptr; if (moniker->BindToObject( m_bindContext, - 0, + nullptr, IID_IBaseFilter, reinterpret_cast<void **>(&filter)) == S_OK) { m_service->setAudioOutput(filter); @@ -133,15 +131,15 @@ void DirectShowAudioEndpointControl::setActiveOutput(const QString &name) void DirectShowAudioEndpointControl::updateEndpoints() { - IMalloc *oleMalloc = 0; + IMalloc *oleMalloc = nullptr; if (m_deviceEnumerator && CoGetMalloc(1, &oleMalloc) == S_OK) { - IEnumMoniker *monikers = 0; + IEnumMoniker *monikers = nullptr; if (m_deviceEnumerator->CreateClassEnumerator( CLSID_AudioRendererCategory, &monikers, 0) == S_OK) { - for (IMoniker *moniker = 0; monikers->Next(1, &moniker, 0) == S_OK; moniker->Release()) { - OLECHAR *string = 0; - if (moniker->GetDisplayName(m_bindContext, 0, &string) == S_OK) { + for (IMoniker *moniker = nullptr; monikers->Next(1, &moniker, nullptr) == S_OK; moniker->Release()) { + OLECHAR *string = nullptr; + if (moniker->GetDisplayName(m_bindContext, nullptr, &string) == S_OK) { QString deviceId = QString::fromWCharArray(string); oleMalloc->Free(string); diff --git a/src/plugins/directshow/player/directshowaudioendpointcontrol.h b/src/plugins/directshow/player/directshowaudioendpointcontrol.h index b6f8a6724..05c4eb990 100644 --- a/src/plugins/directshow/player/directshowaudioendpointcontrol.h +++ b/src/plugins/directshow/player/directshowaudioendpointcontrol.h @@ -52,7 +52,7 @@ class DirectShowAudioEndpointControl : public QAudioOutputSelectorControl { Q_OBJECT public: - DirectShowAudioEndpointControl(DirectShowPlayerService *service, QObject *parent = 0); + DirectShowAudioEndpointControl(DirectShowPlayerService *service, QObject *parent = nullptr); ~DirectShowAudioEndpointControl() override; QList<QString> availableOutputs() const override; @@ -68,8 +68,8 @@ private: void updateEndpoints(); DirectShowPlayerService *m_service; - IBindCtx *m_bindContext; - ICreateDevEnum *m_deviceEnumerator; + IBindCtx *m_bindContext = nullptr; + ICreateDevEnum *m_deviceEnumerator = nullptr; QMap<QString, IMoniker *> m_devices; QString m_defaultEndpoint; diff --git a/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp b/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp index fc1058d57..89bfc1467 100644 --- a/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp +++ b/src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp @@ -43,7 +43,6 @@ DirectShowEvrVideoWindowControl::DirectShowEvrVideoWindowControl(QObject *parent) : EvrVideoWindowControl(parent) - , m_evrFilter(NULL) { } @@ -59,7 +58,7 @@ IBaseFilter *DirectShowEvrVideoWindowControl::filter() m_evrFilter = com_new<IBaseFilter>(clsid_EnhancedVideoRenderer); if (!setEvr(m_evrFilter)) { m_evrFilter->Release(); - m_evrFilter = NULL; + m_evrFilter = nullptr; } } diff --git a/src/plugins/directshow/player/directshowevrvideowindowcontrol.h b/src/plugins/directshow/player/directshowevrvideowindowcontrol.h index fb661780f..edbde78d6 100644 --- a/src/plugins/directshow/player/directshowevrvideowindowcontrol.h +++ b/src/plugins/directshow/player/directshowevrvideowindowcontrol.h @@ -49,13 +49,13 @@ QT_BEGIN_NAMESPACE class DirectShowEvrVideoWindowControl : public EvrVideoWindowControl { public: - DirectShowEvrVideoWindowControl(QObject *parent = 0); + DirectShowEvrVideoWindowControl(QObject *parent = nullptr); ~DirectShowEvrVideoWindowControl(); IBaseFilter *filter(); private: - IBaseFilter *m_evrFilter; + IBaseFilter *m_evrFilter = nullptr; }; QT_END_NAMESPACE diff --git a/src/plugins/directshow/player/directshowioreader.cpp b/src/plugins/directshow/player/directshowioreader.cpp index 3482cee02..b903038ea 100644 --- a/src/plugins/directshow/player/directshowioreader.cpp +++ b/src/plugins/directshow/player/directshowioreader.cpp @@ -55,25 +55,23 @@ class DirectShowSampleRequest public: DirectShowSampleRequest( IMediaSample *sample, DWORD_PTR userData, LONGLONG position, LONG length, BYTE *buffer) - : next(0) - , sample(sample) + : sample(sample) , userData(userData) , position(position) , length(length) , buffer(buffer) - , result(S_FALSE) { } DirectShowSampleRequest *remove() { DirectShowSampleRequest *n = next; delete this; return n; } - DirectShowSampleRequest *next; + DirectShowSampleRequest *next = nullptr; IMediaSample *sample; DWORD_PTR userData; LONGLONG position; LONG length; BYTE *buffer; - HRESULT result; + HRESULT result = S_FALSE; }; DirectShowIOReader::DirectShowIOReader( @@ -81,18 +79,6 @@ DirectShowIOReader::DirectShowIOReader( : m_source(source) , m_device(device) , m_loop(loop) - , m_pendingHead(0) - , m_pendingTail(0) - , m_readyHead(0) - , m_readyTail(0) - , m_synchronousPosition(0) - , m_synchronousLength(0) - , m_synchronousBytesRead(0) - , m_synchronousBuffer(0) - , m_synchronousResult(S_OK) - , m_totalLength(0) - , m_availableLength(0) - , m_flushing(false) { moveToThread(device->thread()); @@ -204,21 +190,21 @@ HRESULT DirectShowIOReader::WaitForNext( m_readyHead = request->next; if (!m_readyHead) - m_readyTail = 0; + m_readyTail = nullptr; delete request; return hr; } if (m_flushing) { - *ppSample = 0; + *ppSample = nullptr; *pdwUser = 0; return VFW_E_WRONG_STATE; } } while (m_wait.wait(&m_mutex, dwTimeout)); - *ppSample = 0; + *ppSample = nullptr; *pdwUser = 0; return VFW_E_TIMEOUT; @@ -373,10 +359,10 @@ void DirectShowIOReader::readyRead() m_pendingHead = m_pendingHead->next; - m_readyTail->next = 0; + m_readyTail->next = nullptr; if (!m_pendingHead) - m_pendingTail = 0; + m_pendingTail = nullptr; if (!m_readyHead) m_readyHead = m_readyTail; @@ -463,10 +449,10 @@ void DirectShowIOReader::flushRequests() m_pendingHead = m_pendingHead->next; - m_readyTail->next = 0; + m_readyTail->next = nullptr; if (!m_pendingHead) - m_pendingTail = 0; + m_pendingTail = nullptr; if (!m_readyHead) m_readyHead = m_readyTail; diff --git a/src/plugins/directshow/player/directshowioreader.h b/src/plugins/directshow/player/directshowioreader.h index 550990648..a0f2d7adb 100644 --- a/src/plugins/directshow/player/directshowioreader.h +++ b/src/plugins/directshow/player/directshowioreader.h @@ -99,18 +99,18 @@ private: DirectShowIOSource *m_source; QIODevice *m_device; DirectShowEventLoop *m_loop; - DirectShowSampleRequest *m_pendingHead; - DirectShowSampleRequest *m_pendingTail; - DirectShowSampleRequest *m_readyHead; - DirectShowSampleRequest *m_readyTail; - LONGLONG m_synchronousPosition; - LONG m_synchronousLength; - qint64 m_synchronousBytesRead; - BYTE *m_synchronousBuffer; - HRESULT m_synchronousResult; - LONGLONG m_totalLength; - LONGLONG m_availableLength; - bool m_flushing; + DirectShowSampleRequest *m_pendingHead = nullptr; + DirectShowSampleRequest *m_pendingTail = nullptr; + DirectShowSampleRequest *m_readyHead = nullptr; + DirectShowSampleRequest *m_readyTail = nullptr; + LONGLONG m_synchronousPosition = 0; + LONG m_synchronousLength = 0; + qint64 m_synchronousBytesRead = 0; + BYTE *m_synchronousBuffer = nullptr; + HRESULT m_synchronousResult = S_OK; + LONGLONG m_totalLength = 0; + LONGLONG m_availableLength = 0; + bool m_flushing = false; QMutex m_mutex; QWaitCondition m_wait; }; diff --git a/src/plugins/directshow/player/directshowiosource.cpp b/src/plugins/directshow/player/directshowiosource.cpp index d5833fafc..5144710b7 100644 --- a/src/plugins/directshow/player/directshowiosource.cpp +++ b/src/plugins/directshow/player/directshowiosource.cpp @@ -66,16 +66,7 @@ static const GUID directshow_subtypes[] = }; DirectShowIOSource::DirectShowIOSource(DirectShowEventLoop *loop) - : m_ref(1) - , m_state(State_Stopped) - , m_reader(0) - , m_loop(loop) - , m_graph(0) - , m_clock(0) - , m_allocator(0) - , m_peerPin(0) - , m_pinId(QLatin1String("Data")) - , m_queriedForAsyncReader(false) + : m_loop(loop) { // This filter has only one possible output type, that is, a stream of data // with no particular subtype. The graph builder will try every demux/decode filters @@ -92,9 +83,9 @@ DirectShowIOSource::DirectShowIOSource(DirectShowEventLoop *loop) FALSE, // bTemporalCompression 1, // lSampleSize GUID_NULL, // formattype - 0, // pUnk + nullptr, // pUnk 0, // cbFormat - 0, // pbFormat + nullptr, // pbFormat }; for (const auto &directshowSubtype : directshow_subtypes) { @@ -152,7 +143,7 @@ HRESULT DirectShowIOSource::QueryInterface(REFIID riid, void **ppvObject) m_queriedForAsyncReader = true; *ppvObject = static_cast<IAsyncReader *>(m_reader); } else { - *ppvObject = 0; + *ppvObject = nullptr; return E_NOINTERFACE; } @@ -381,7 +372,7 @@ HRESULT DirectShowIOSource::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) pReceivePin->Disconnect(); if (m_allocator) { m_allocator->Release(); - m_allocator = 0; + m_allocator = nullptr; } if (!m_queriedForAsyncReader) hr = VFW_E_NO_TRANSPORT; diff --git a/src/plugins/directshow/player/directshowiosource.h b/src/plugins/directshow/player/directshowiosource.h index 02639de7c..837842518 100644 --- a/src/plugins/directshow/player/directshowiosource.h +++ b/src/plugins/directshow/player/directshowiosource.h @@ -119,19 +119,19 @@ public: HRESULT STDMETHODCALLTYPE QueryDirection(PIN_DIRECTION *pPinDir) override; private: - volatile LONG m_ref; - FILTER_STATE m_state; - DirectShowIOReader *m_reader; + volatile LONG m_ref = 1; + FILTER_STATE m_state = State_Stopped; + DirectShowIOReader *m_reader = nullptr; DirectShowEventLoop *m_loop; - IFilterGraph *m_graph; - IReferenceClock *m_clock; - IMemAllocator *m_allocator; - IPin *m_peerPin; + IFilterGraph *m_graph = nullptr; + IReferenceClock *m_clock = nullptr; + IMemAllocator *m_allocator = nullptr; + IPin *m_peerPin = nullptr; DirectShowMediaType m_connectionMediaType; QList<DirectShowMediaType> m_supportedMediaTypes; QString m_filterName; - const QString m_pinId; - bool m_queriedForAsyncReader; + const QString m_pinId = QLatin1String("Data"); + bool m_queriedForAsyncReader = false; QMutex m_mutex; }; diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.cpp b/src/plugins/directshow/player/directshowmetadatacontrol.cpp index 52b73a7df..46674143e 100644 --- a/src/plugins/directshow/player/directshowmetadatacontrol.cpp +++ b/src/plugins/directshow/player/directshowmetadatacontrol.cpp @@ -209,7 +209,7 @@ static QString nameForGUIDString(const QString &guid) } typedef HRESULT (WINAPI *q_SHCreateItemFromParsingName)(PCWSTR, IBindCtx *, const GUID&, void **); -static q_SHCreateItemFromParsingName sHCreateItemFromParsingName = 0; +static q_SHCreateItemFromParsingName sHCreateItemFromParsingName = nullptr; #endif #if QT_CONFIG(wmsdk) @@ -225,7 +225,7 @@ namespace }; } -typedef QList<QWMMetaDataKey> QWMMetaDataKeys; +using QWMMetaDataKeys = QList<QWMMetaDataKey>; Q_GLOBAL_STATIC(QWMMetaDataKeys, metadataKeys) static const QWMMetaDataKeys *qt_wmMetaDataKeys() @@ -299,7 +299,7 @@ static QVariant getValue(IWMHeaderInfo *header, const wchar_t *key) WMT_ATTR_DATATYPE type = WMT_TYPE_DWORD; WORD size = 0; - if (header->GetAttributeByName(&streamNumber, key, &type, 0, &size) == S_OK) { + if (header->GetAttributeByName(&streamNumber, key, &type, nullptr, &size) == S_OK) { switch (type) { case WMT_TYPE_DWORD: if (size == sizeof(DWORD)) { @@ -445,7 +445,6 @@ static QVariant convertValue(const PROPVARIANT& var) DirectShowMetaDataControl::DirectShowMetaDataControl(QObject *parent) : QMetaDataReaderControl(parent) - , m_available(false) { } @@ -472,7 +471,7 @@ static QString convertBSTR(BSTR *string) ::SysStringLen(*string)); ::SysFreeString(*string); - string = 0; + string = nullptr; return value; } @@ -492,11 +491,11 @@ void DirectShowMetaDataControl::updateMetadata(const QString &fileSrc, QVariantM } if (!fileSrc.isEmpty() && sHCreateItemFromParsingName) { - IShellItem2* shellItem = 0; + IShellItem2* shellItem = nullptr; if (sHCreateItemFromParsingName(reinterpret_cast<const WCHAR*>(fileSrc.utf16()), - 0, IID_PPV_ARGS(&shellItem)) == S_OK) { + nullptr, IID_PPV_ARGS(&shellItem)) == S_OK) { - IPropertyStore *pStore = 0; + IPropertyStore *pStore = nullptr; if (shellItem->GetPropertyStore(GPS_DEFAULT, IID_PPV_ARGS(&pStore)) == S_OK) { DWORD cProps; if (SUCCEEDED(pStore->GetCount(&cProps))) { @@ -651,17 +650,17 @@ void DirectShowMetaDataControl::updateMetadata(IFilterGraph2 *graph, IBaseFilter return; #endif { - IAMMediaContent *content = 0; + IAMMediaContent *content = nullptr; if ((!graph || graph->QueryInterface( IID_IAMMediaContent, reinterpret_cast<void **>(&content)) != S_OK) && (!source || source->QueryInterface( IID_IAMMediaContent, reinterpret_cast<void **>(&content)) != S_OK)) { - content = 0; + content = nullptr; } if (content) { - BSTR string = 0; + BSTR string = nullptr; if (content->get_AuthorName(&string) == S_OK) metadata.insert(QMediaMetaData::Author, convertBSTR(&string)); diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.h b/src/plugins/directshow/player/directshowmetadatacontrol.h index 4196a7950..e66127ab3 100644 --- a/src/plugins/directshow/player/directshowmetadatacontrol.h +++ b/src/plugins/directshow/player/directshowmetadatacontrol.h @@ -54,7 +54,7 @@ class DirectShowMetaDataControl : public QMetaDataReaderControl { Q_OBJECT public: - DirectShowMetaDataControl(QObject *parent = 0); + DirectShowMetaDataControl(QObject *parent = nullptr); ~DirectShowMetaDataControl() override; bool isMetaDataAvailable() const override; @@ -76,7 +76,7 @@ private: }; QVariantMap m_metadata; - bool m_available; + bool m_available = false; }; QT_END_NAMESPACE diff --git a/src/plugins/directshow/player/directshowplayercontrol.cpp b/src/plugins/directshow/player/directshowplayercontrol.cpp index 2d0ee2d59..7e1413b56 100644 --- a/src/plugins/directshow/player/directshowplayercontrol.cpp +++ b/src/plugins/directshow/player/directshowplayercontrol.cpp @@ -50,19 +50,6 @@ DirectShowPlayerControl::DirectShowPlayerControl(DirectShowPlayerService *service, QObject *parent) : QMediaPlayerControl(parent) , m_service(service) - , m_audio(0) - , m_updateProperties(0) - , m_state(QMediaPlayer::StoppedState) - , m_status(QMediaPlayer::NoMedia) - , m_error(QMediaPlayer::NoError) - , m_streamTypes(0) - , m_volume(100) - , m_muted(false) - , m_emitPosition(-1) - , m_pendingPosition(-1) - , m_duration(0) - , m_playbackRate(0) - , m_seekable(false) { } @@ -219,6 +206,9 @@ const QIODevice *DirectShowPlayerControl::mediaStream() const void DirectShowPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream) { + if (m_media == media) + return; + m_pendingPosition = -1; m_emitPosition = -1; diff --git a/src/plugins/directshow/player/directshowplayercontrol.h b/src/plugins/directshow/player/directshowplayercontrol.h index dba9ab9a0..122f5be2f 100644 --- a/src/plugins/directshow/player/directshowplayercontrol.h +++ b/src/plugins/directshow/player/directshowplayercontrol.h @@ -55,7 +55,7 @@ class DirectShowPlayerControl : public QMediaPlayerControl { Q_OBJECT public: - DirectShowPlayerControl(DirectShowPlayerService *service, QObject *parent = 0); + DirectShowPlayerControl(DirectShowPlayerService *service, QObject *parent = nullptr); ~DirectShowPlayerControl() override; QMediaPlayer::State state() const override; @@ -129,20 +129,20 @@ private: void setVolumeHelper(int volume); DirectShowPlayerService *m_service; - IBasicAudio *m_audio; - QIODevice *m_stream; - int m_updateProperties; - QMediaPlayer::State m_state; - QMediaPlayer::MediaStatus m_status; - QMediaPlayer::Error m_error; - int m_streamTypes; - int m_volume; - bool m_muted; - qint64 m_emitPosition; - qint64 m_pendingPosition; - qint64 m_duration; - qreal m_playbackRate; - bool m_seekable; + IBasicAudio *m_audio = nullptr; + QIODevice *m_stream = nullptr; + int m_updateProperties = 0; + QMediaPlayer::State m_state = QMediaPlayer::StoppedState; + QMediaPlayer::MediaStatus m_status = QMediaPlayer::NoMedia; + QMediaPlayer::Error m_error = QMediaPlayer::NoError; + int m_streamTypes = 0; + int m_volume = 100; + bool m_muted = false; + qint64 m_emitPosition = -1; + qint64 m_pendingPosition = -1; + qint64 m_duration = 0; + qreal m_playbackRate = 0; + bool m_seekable = false; QMediaContent m_media; QString m_errorString; diff --git a/src/plugins/directshow/player/directshowplayerservice.cpp b/src/plugins/directshow/player/directshowplayerservice.cpp index 059e253f1..56a428028 100644 --- a/src/plugins/directshow/player/directshowplayerservice.cpp +++ b/src/plugins/directshow/player/directshowplayerservice.cpp @@ -123,37 +123,8 @@ private: DirectShowPlayerService::DirectShowPlayerService(QObject *parent) : QMediaService(parent) - , m_playerControl(0) - , m_metaDataControl(0) - , m_videoRendererControl(0) - , m_videoWindowControl(0) - , m_audioEndpointControl(0) - , m_audioProbeControl(nullptr) - , m_videoProbeControl(nullptr) - , m_audioSampleGrabber(nullptr) - , m_videoSampleGrabber(nullptr) - , m_taskThread(0) , m_loop(qt_directShowEventLoop()) - , m_pendingTasks(0) - , m_executingTask(0) - , m_executedTasks(0) - , m_taskHandle(::CreateEvent(0, 0, 0, 0)) - , m_eventHandle(0) - , m_graphStatus(NoMedia) - , m_stream(0) - , m_graph(0) - , m_graphBuilder(nullptr) - , m_source(0) - , m_audioOutput(0) - , m_videoOutput(0) - , m_rate(1.0) - , m_position(0) - , m_seekPosition(-1) - , m_duration(0) - , m_buffering(false) - , m_seekable(false) - , m_atEnd(false) - , m_dontCacheNextSeekResult(false) + , m_taskHandle(::CreateEvent(nullptr, 0, 0, nullptr)) { m_playerControl = new DirectShowPlayerControl(this); m_metaDataControl = new DirectShowMetaDataControl(this); @@ -179,12 +150,12 @@ DirectShowPlayerService::~DirectShowPlayerService() if (m_audioOutput) { m_audioOutput->Release(); - m_audioOutput = 0; + m_audioOutput = nullptr; } if (m_videoOutput) { m_videoOutput->Release(); - m_videoOutput = 0; + m_videoOutput = nullptr; } delete m_playerControl; @@ -200,13 +171,13 @@ DirectShowPlayerService::~DirectShowPlayerService() QMediaControl *DirectShowPlayerService::requestControl(const char *name) { - if (qstrcmp(name, QMediaPlayerControl_iid) == 0) { + if (qstrcmp(name, QMediaPlayerControl_iid) == 0) return m_playerControl; - } else if (qstrcmp(name, QAudioOutputSelectorControl_iid) == 0) { + if (qstrcmp(name, QAudioOutputSelectorControl_iid) == 0) return m_audioEndpointControl; - } else if (qstrcmp(name, QMetaDataReaderControl_iid) == 0) { + if (qstrcmp(name, QMetaDataReaderControl_iid) == 0) return m_metaDataControl; - } else if (qstrcmp(name, QVideoRendererControl_iid) == 0) { + if (qstrcmp(name, QVideoRendererControl_iid) == 0) { if (!m_videoRendererControl && !m_videoWindowControl) { m_videoRendererControl = new DirectShowVideoRendererControl(m_loop); @@ -215,7 +186,9 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name) return m_videoRendererControl; } - } else if (qstrcmp(name, QVideoWindowControl_iid) == 0) { + return nullptr; + } + if (qstrcmp(name, QVideoWindowControl_iid) == 0) { if (!m_videoRendererControl && !m_videoWindowControl) { IBaseFilter *filter{}; @@ -239,20 +212,23 @@ QMediaControl *DirectShowPlayerService::requestControl(const char *name) return m_videoWindowControl; } - } else if (qstrcmp(name, QMediaAudioProbeControl_iid) == 0) { + return nullptr; + } + if (qstrcmp(name, QMediaAudioProbeControl_iid) == 0) { if (!m_audioProbeControl) m_audioProbeControl = new DirectShowAudioProbeControl(); m_audioProbeControl->ref(); updateAudioProbe(); return m_audioProbeControl; - } else if (qstrcmp(name, QMediaVideoProbeControl_iid) == 0) { + } + if (qstrcmp(name, QMediaVideoProbeControl_iid) == 0) { if (!m_videoProbeControl) m_videoProbeControl = new DirectShowVideoProbeControl(); m_videoProbeControl->ref(); updateVideoProbe(); return m_videoProbeControl; } - return 0; + return nullptr; } void DirectShowPlayerService::releaseControl(QMediaControl *control) @@ -261,17 +237,17 @@ void DirectShowPlayerService::releaseControl(QMediaControl *control) qWarning("QMediaService::releaseControl():" " Attempted release of null control"); } else if (control == m_videoRendererControl) { - setVideoOutput(0); + setVideoOutput(nullptr); delete m_videoRendererControl; - m_videoRendererControl = 0; + m_videoRendererControl = nullptr; } else if (control == m_videoWindowControl) { - setVideoOutput(0); + setVideoOutput(nullptr); delete m_videoWindowControl; - m_videoWindowControl = 0; + m_videoWindowControl = nullptr; } else if (control == m_audioProbeControl) { if (!m_audioProbeControl->deref()) { DirectShowAudioProbeControl *old = m_audioProbeControl; @@ -354,7 +330,7 @@ void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker) { - IBaseFilter *source = 0; + IBaseFilter *source = nullptr; HRESULT hr = E_FAIL; if (m_url.scheme() == QLatin1String("http") || m_url.scheme() == QLatin1String("https")) { @@ -367,14 +343,14 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker) if (IFileSourceFilter *fileSource = com_new<IFileSourceFilter>(clsid_WMAsfReader, iid_IFileSourceFilter)) { locker->unlock(); - hr = fileSource->Load(reinterpret_cast<const OLECHAR *>(m_url.toString().utf16()), 0); + hr = fileSource->Load(reinterpret_cast<const OLECHAR *>(m_url.toString().utf16()), nullptr); if (SUCCEEDED(hr)) { source = com_cast<IBaseFilter>(fileSource, IID_IBaseFilter); if (!SUCCEEDED(hr = m_graph->AddFilter(source, L"Source")) && source) { source->Release(); - source = 0; + source = nullptr; } } fileSource->Release(); @@ -408,8 +384,6 @@ void DirectShowPlayerService::doSetUrlSource(QMutexLocker *locker) m_pendingTasks |= SetRate; m_source = source; - } else if (!m_url.isEmpty()) { - m_pendingTasks |= SetUrlSource; } else { m_graphStatus = InvalidMedia; @@ -511,18 +485,18 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker) HRESULT renderHr = S_OK; while (!filters.isEmpty()) { - IEnumPins *pins = 0; + IEnumPins *pins = nullptr; IBaseFilter *filter = filters[filters.size() - 1]; filters.removeLast(); if (!(m_pendingTasks & ReleaseFilters) && SUCCEEDED(filter->EnumPins(&pins))) { int outputs = 0; - for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) { + for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) { PIN_DIRECTION direction; if (pin->QueryDirection(&direction) == S_OK && direction == PINDIR_OUTPUT) { ++outputs; - IPin *peer = 0; + IPin *peer = nullptr; if (pin->ConnectedTo(&peer) == S_OK) { PIN_INFO peerInfo; if (SUCCEEDED(peer->QueryPinInfo(&peerInfo))) @@ -530,10 +504,17 @@ void DirectShowPlayerService::doRender(QMutexLocker *locker) peer->Release(); } else { locker->unlock(); - HRESULT hr = graph->RenderEx(pin, /*AM_RENDEREX_RENDERTOEXISTINGRENDERERS*/ 1, 0); - // Do not return an error if no video output is set yet. - if (SUCCEEDED(hr) || !(m_executedTasks & SetVideoOutput)) { + HRESULT hr = graph->RenderEx(pin, /*AM_RENDEREX_RENDERTOEXISTINGRENDERERS*/ 1, nullptr); + if (SUCCEEDED(hr)) { + rendered = true; + m_error = QMediaPlayer::NoError; + } else if (!(m_executedTasks & SetVideoOutput)) { + // Do not return an error if no video output is set yet. rendered = true; + // Remember the error in this case. + // Handle it when playing is requested and no video output has been provided. + m_error = QMediaPlayer::ResourceError; + m_errorString = QString("%1: %2").arg(__FUNCTION__).arg(qt_error_string(hr)); } else if (renderHr == S_OK || renderHr == VFW_E_NO_DECOMPRESSOR){ renderHr = hr; } @@ -675,13 +656,13 @@ void DirectShowPlayerService::doReleaseGraph(QMutexLocker *locker) if (m_source) { m_source->Release(); - m_source = 0; + m_source = nullptr; } - m_eventHandle = 0; + m_eventHandle = nullptr; m_graph->Release(); - m_graph = 0; + m_graph = nullptr; if (m_graphBuilder) { m_graphBuilder->Release(); @@ -819,17 +800,17 @@ int DirectShowPlayerService::findStreamTypes(IBaseFilter *source) const int streamTypes = 0; while (!filters.isEmpty()) { - IEnumPins *pins = 0; + IEnumPins *pins = nullptr; IBaseFilter *filter = filters[filters.size() - 1]; filters.removeLast(); if (SUCCEEDED(filter->EnumPins(&pins))) { - for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) { + for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) { PIN_DIRECTION direction; if (pin->QueryDirection(&direction) == S_OK && direction == PINDIR_OUTPUT) { DirectShowMediaType connectionType; if (SUCCEEDED(pin->ConnectionMediaType(&connectionType))) { - IPin *peer = 0; + IPin *peer = nullptr; if (connectionType->majortype == MEDIATYPE_Audio) { streamTypes |= AudioStream; @@ -862,8 +843,8 @@ int DirectShowPlayerService::findStreamType(IPin *pin) const bool audio = false; bool other = false; - for (AM_MEDIA_TYPE *type = 0; - types->Next(1, &type, 0) == S_OK; + for (AM_MEDIA_TYPE *type = nullptr; + types->Next(1, &type, nullptr) == S_OK; DirectShowMediaType::deleteType(type)) { if (type->majortype == MEDIATYPE_Audio) audio = true; @@ -914,6 +895,16 @@ void DirectShowPlayerService::play() void DirectShowPlayerService::doPlay(QMutexLocker *locker) { + // Invalidate if there is an error while loading. + if (m_error != QMediaPlayer::NoError) { + m_graphStatus = InvalidMedia; + if (!m_errorString.isEmpty()) + qWarning("%s", qPrintable(m_errorString)); + m_errorString = QString(); + QCoreApplication::postEvent(this, new QEvent(QEvent::Type(Error))); + return; + } + if (IMediaControl *control = com_cast<IMediaControl>(m_graph, IID_IMediaControl)) { locker->unlock(); HRESULT hr = control->Run(); @@ -1165,7 +1156,7 @@ void DirectShowPlayerService::doSeek(QMutexLocker *locker) locker->unlock(); seeking->SetPositions( - &seekPosition, AM_SEEKING_AbsolutePositioning, 0, AM_SEEKING_NoPositioning); + &seekPosition, AM_SEEKING_AbsolutePositioning, nullptr, AM_SEEKING_NoPositioning); locker->relock(); if (!m_dontCacheNextSeekResult) { @@ -1191,7 +1182,7 @@ int DirectShowPlayerService::bufferStatus() const m_source, IID_IWMReaderAdvanced2)) { DWORD percentage = 0; - reader->GetBufferProgress(&percentage, 0); + reader->GetBufferProgress(&percentage, nullptr); reader->Release(); return percentage; @@ -1364,7 +1355,7 @@ void DirectShowPlayerService::doReleaseVideoOutput(QMutexLocker *locker) control->Release(); } - IBaseFilter *intermediate = 0; + IBaseFilter *intermediate = nullptr; if (!SUCCEEDED(m_graph->FindFilterByName(L"Color Space Converter", &intermediate))) { intermediate = m_videoOutput; intermediate->AddRef(); @@ -1615,7 +1606,7 @@ void DirectShowPlayerService::updateStatus() m_playerControl->updateStatus(QMediaPlayer::LoadingMedia); break; case Loaded: - if ((m_pendingTasks | m_executingTask | m_executedTasks) & (Play | Pause)) { + if ((m_executingTask | m_executedTasks) & (Play | Pause)) { if (m_buffering) m_playerControl->updateStatus(QMediaPlayer::BufferingMedia); else @@ -1636,13 +1627,13 @@ bool DirectShowPlayerService::isConnected(IBaseFilter *filter, PIN_DIRECTION dir { bool connected = false; - IEnumPins *pins = 0; + IEnumPins *pins = nullptr; if (SUCCEEDED(filter->EnumPins(&pins))) { - for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) { + for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) { PIN_DIRECTION dir; if (SUCCEEDED(pin->QueryDirection(&dir)) && dir == direction) { - IPin *peer = 0; + IPin *peer = nullptr; if (SUCCEEDED(pin->ConnectedTo(&peer))) { connected = true; @@ -1658,15 +1649,15 @@ bool DirectShowPlayerService::isConnected(IBaseFilter *filter, PIN_DIRECTION dir IBaseFilter *DirectShowPlayerService::getConnected( IBaseFilter *filter, PIN_DIRECTION direction) const { - IBaseFilter *connected = 0; + IBaseFilter *connected = nullptr; - IEnumPins *pins = 0; + IEnumPins *pins = nullptr; if (SUCCEEDED(filter->EnumPins(&pins))) { - for (IPin *pin = 0; pins->Next(1, &pin, 0) == S_OK; pin->Release()) { + for (IPin *pin = nullptr; pins->Next(1, &pin, nullptr) == S_OK; pin->Release()) { PIN_DIRECTION dir; if (SUCCEEDED(pin->QueryDirection(&dir)) && dir == direction) { - IPin *peer = 0; + IPin *peer = nullptr; if (SUCCEEDED(pin->ConnectedTo(&peer))) { PIN_INFO info; diff --git a/src/plugins/directshow/player/directshowplayerservice.h b/src/plugins/directshow/player/directshowplayerservice.h index a6eeb8a77..69b4b0a6c 100644 --- a/src/plugins/directshow/player/directshowplayerservice.h +++ b/src/plugins/directshow/player/directshowplayerservice.h @@ -78,7 +78,7 @@ public: VideoStream = 0x02 }; - DirectShowPlayerService(QObject *parent = 0); + DirectShowPlayerService(QObject *parent = nullptr); ~DirectShowPlayerService() override; QMediaControl *requestControl(const char *name) override; @@ -193,44 +193,44 @@ private: InvalidMedia }; - DirectShowPlayerControl *m_playerControl; - DirectShowMetaDataControl *m_metaDataControl; - DirectShowVideoRendererControl *m_videoRendererControl; - QVideoWindowControl *m_videoWindowControl; - DirectShowAudioEndpointControl *m_audioEndpointControl; - DirectShowAudioProbeControl *m_audioProbeControl; - DirectShowVideoProbeControl *m_videoProbeControl; - DirectShowSampleGrabber *m_audioSampleGrabber; - DirectShowSampleGrabber *m_videoSampleGrabber; - - QThread *m_taskThread; + DirectShowPlayerControl *m_playerControl = nullptr; + DirectShowMetaDataControl *m_metaDataControl = nullptr; + DirectShowVideoRendererControl *m_videoRendererControl = nullptr; + QVideoWindowControl *m_videoWindowControl = nullptr; + DirectShowAudioEndpointControl *m_audioEndpointControl = nullptr; + DirectShowAudioProbeControl *m_audioProbeControl = nullptr; + DirectShowVideoProbeControl *m_videoProbeControl = nullptr; + DirectShowSampleGrabber *m_audioSampleGrabber = nullptr; + DirectShowSampleGrabber *m_videoSampleGrabber = nullptr; + + QThread *m_taskThread = nullptr; DirectShowEventLoop *m_loop; - int m_pendingTasks; - int m_executingTask; - int m_executedTasks; - int m_streamTypes; + int m_pendingTasks = 0; + int m_executingTask = 0; + int m_executedTasks = 0; + int m_streamTypes = 0; HANDLE m_taskHandle; - HANDLE m_eventHandle; - GraphStatus m_graphStatus; - QMediaPlayer::Error m_error; - QIODevice *m_stream; - IFilterGraph2 *m_graph; - ICaptureGraphBuilder2 *m_graphBuilder; - IBaseFilter *m_source; - IBaseFilter *m_audioOutput; - IBaseFilter *m_videoOutput; - qreal m_rate; - qint64 m_position; - qint64 m_seekPosition; - qint64 m_duration; + HANDLE m_eventHandle = nullptr; + GraphStatus m_graphStatus = NoMedia; + QMediaPlayer::Error m_error = QMediaPlayer::NoError; + QIODevice *m_stream = nullptr; + IFilterGraph2 *m_graph = nullptr; + ICaptureGraphBuilder2 *m_graphBuilder = nullptr; + IBaseFilter *m_source = nullptr; + IBaseFilter *m_audioOutput = nullptr; + IBaseFilter *m_videoOutput = nullptr; + qreal m_rate = 1; + qint64 m_position = 0; + qint64 m_seekPosition = -1; + qint64 m_duration = 0; QMediaTimeRange m_playbackRange; QUrl m_url; QString m_errorString; QMutex m_mutex; - bool m_buffering; - bool m_seekable; - bool m_atEnd; - bool m_dontCacheNextSeekResult; + bool m_buffering = false; + bool m_seekable = false; + bool m_atEnd = false; + bool m_dontCacheNextSeekResult = false; QVariantMap m_metadata; friend class DirectShowPlayerServiceThread; diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp index 88b5a51eb..19be82141 100644 --- a/src/plugins/directshow/player/directshowvideorenderercontrol.cpp +++ b/src/plugins/directshow/player/directshowvideorenderercontrol.cpp @@ -51,11 +51,6 @@ DirectShowVideoRendererControl::DirectShowVideoRendererControl(DirectShowEventLoop *loop, QObject *parent) : QVideoRendererControl(parent) , m_loop(loop) - , m_surface(0) - , m_filter(0) -#if QT_CONFIG(evr) - , m_evrPresenter(0) -#endif { } @@ -85,13 +80,13 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface) if (m_evrPresenter) { m_evrPresenter->setSurface(nullptr); m_evrPresenter->Release(); - m_evrPresenter = 0; + m_evrPresenter = nullptr; } #endif if (m_filter) { m_filter->Release(); - m_filter = 0; + m_filter = nullptr; } m_surface = surface; @@ -103,9 +98,9 @@ void DirectShowVideoRendererControl::setSurface(QAbstractVideoSurface *surface) m_evrPresenter = new EVRCustomPresenter(m_surface); if (!m_evrPresenter->isValid() || !qt_evr_setCustomPresenter(m_filter, m_evrPresenter)) { m_filter->Release(); - m_filter = 0; + m_filter = nullptr; m_evrPresenter->Release(); - m_evrPresenter = 0; + m_evrPresenter = nullptr; } } diff --git a/src/plugins/directshow/player/directshowvideorenderercontrol.h b/src/plugins/directshow/player/directshowvideorenderercontrol.h index b2abeeaed..dcbcadb4b 100644 --- a/src/plugins/directshow/player/directshowvideorenderercontrol.h +++ b/src/plugins/directshow/player/directshowvideorenderercontrol.h @@ -58,7 +58,7 @@ class DirectShowVideoRendererControl : public QVideoRendererControl { Q_OBJECT public: - DirectShowVideoRendererControl(DirectShowEventLoop *loop, QObject *parent = 0); + DirectShowVideoRendererControl(DirectShowEventLoop *loop, QObject *parent = nullptr); ~DirectShowVideoRendererControl() override; QAbstractVideoSurface *surface() const override; @@ -71,10 +71,10 @@ Q_SIGNALS: private: DirectShowEventLoop *m_loop; - QAbstractVideoSurface *m_surface; - IBaseFilter *m_filter; + QAbstractVideoSurface *m_surface = nullptr; + IBaseFilter *m_filter = nullptr; #if QT_CONFIG(evr) - EVRCustomPresenter *m_evrPresenter; + EVRCustomPresenter *m_evrPresenter = nullptr; #endif }; diff --git a/src/plugins/directshow/player/videosurfacefilter.cpp b/src/plugins/directshow/player/videosurfacefilter.cpp index 74d59231c..8dd18dc1b 100644 --- a/src/plugins/directshow/player/videosurfacefilter.cpp +++ b/src/plugins/directshow/player/videosurfacefilter.cpp @@ -222,20 +222,10 @@ HRESULT VideoSurfaceInputPin::Receive(IMediaSample *pMediaSample) VideoSurfaceFilter::VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectShowEventLoop *loop, QObject *parent) : QObject(parent) , m_loop(loop) - , m_pin(NULL) , m_surface(surface) - , m_bytesPerLine(0) - , m_surfaceStarted(false) , m_renderMutex(QMutex::Recursive) - , m_running(false) - , m_pendingSample(NULL) - , m_pendingSampleEndTime(0) - , m_renderEvent(CreateEvent(NULL, FALSE, FALSE, NULL)) - , m_flushEvent(CreateEvent(NULL, TRUE, FALSE, NULL)) - , m_adviseCookie(0) - , m_EOS(false) - , m_EOSDelivered(false) - , m_EOSTimer(0) + , m_renderEvent(CreateEvent(nullptr, FALSE, FALSE, nullptr)) + , m_flushEvent(CreateEvent(nullptr, TRUE, FALSE, nullptr)) { supportedFormatsChanged(); connect(surface, &QAbstractVideoSurface::supportedFormatsChanged, @@ -616,7 +606,7 @@ void VideoSurfaceFilter::clearPendingSample() if (m_pendingSample) { qCDebug(qLcRenderFilter, "clearPendingSample"); m_pendingSample->Release(); - m_pendingSample = NULL; + m_pendingSample = nullptr; } } @@ -713,11 +703,10 @@ bool VideoSurfaceFilter::startSurface() m_loop->postEvent(this, new QEvent(QEvent::Type(StartSurface))); m_waitSurface.wait(&m_mutex); return m_surfaceStarted; - } else { - m_surfaceStarted = m_surface->start(m_surfaceFormat); - qCDebug(qLcRenderFilter, "startSurface %s", m_surfaceStarted ? "succeeded" : "failed"); - return m_surfaceStarted; } + m_surfaceStarted = m_surface->start(m_surfaceFormat); + qCDebug(qLcRenderFilter, "startSurface %s", m_surfaceStarted ? "succeeded" : "failed"); + return m_surfaceStarted; } void VideoSurfaceFilter::stopSurface() @@ -741,12 +730,11 @@ bool VideoSurfaceFilter::restartSurface() m_loop->postEvent(this, new QEvent(QEvent::Type(RestartSurface))); m_waitSurface.wait(&m_mutex); return m_surfaceStarted; - } else { - m_surface->stop(); - m_surfaceStarted = m_surface->start(m_surfaceFormat); - qCDebug(qLcRenderFilter, "restartSurface %s", m_surfaceStarted ? "succeeded" : "failed"); - return m_surfaceStarted; } + m_surface->stop(); + m_surfaceStarted = m_surface->start(m_surfaceFormat); + qCDebug(qLcRenderFilter, "restartSurface %s", m_surfaceStarted ? "succeeded" : "failed"); + return m_surfaceStarted; } void VideoSurfaceFilter::flushSurface() diff --git a/src/plugins/directshow/player/videosurfacefilter.h b/src/plugins/directshow/player/videosurfacefilter.h index 56791f270..f11d015f1 100644 --- a/src/plugins/directshow/player/videosurfacefilter.h +++ b/src/plugins/directshow/player/videosurfacefilter.h @@ -62,7 +62,7 @@ class VideoSurfaceFilter : public QObject Q_OBJECT COM_REF_MIXIN public: - VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectShowEventLoop *loop, QObject *parent = 0); + VideoSurfaceFilter(QAbstractVideoSurface *surface, DirectShowEventLoop *loop, QObject *parent = nullptr); ~VideoSurfaceFilter(); STDMETHODIMP QueryInterface(REFIID riid, void **ppv) override; @@ -130,28 +130,28 @@ private: QMutex m_mutex; DirectShowEventLoop *m_loop; - VideoSurfaceInputPin *m_pin; + VideoSurfaceInputPin *m_pin = nullptr; QWaitCondition m_waitSurface; QAbstractVideoSurface *m_surface; QVideoSurfaceFormat m_surfaceFormat; - int m_bytesPerLine; - bool m_surfaceStarted; + int m_bytesPerLine = 0; + bool m_surfaceStarted = false; QList<GUID> m_supportedTypes; QReadWriteLock m_typesLock; QMutex m_renderMutex; - bool m_running; - IMediaSample *m_pendingSample; - REFERENCE_TIME m_pendingSampleEndTime; + bool m_running = false; + IMediaSample *m_pendingSample = nullptr; + REFERENCE_TIME m_pendingSampleEndTime = 0; HANDLE m_renderEvent; HANDLE m_flushEvent; - DWORD_PTR m_adviseCookie; + DWORD_PTR m_adviseCookie = 0; - bool m_EOS; - bool m_EOSDelivered; - UINT m_EOSTimer; + bool m_EOS = false; + bool m_EOSDelivered = false; + UINT m_EOSTimer = 0; friend class VideoSurfaceInputPin; }; diff --git a/src/plugins/directshow/player/vmr9videowindowcontrol.cpp b/src/plugins/directshow/player/vmr9videowindowcontrol.cpp index c026a12d8..63c945622 100644 --- a/src/plugins/directshow/player/vmr9videowindowcontrol.cpp +++ b/src/plugins/directshow/player/vmr9videowindowcontrol.cpp @@ -49,15 +49,6 @@ Vmr9VideoWindowControl::Vmr9VideoWindowControl(QObject *parent) : QVideoWindowControl(parent) , m_filter(com_new<IBaseFilter>(CLSID_VideoMixingRenderer9)) - , m_windowId(0) - , m_windowColor(RGB(0, 0, 0)) - , m_dirtyValues(0) - , m_aspectRatioMode(Qt::KeepAspectRatio) - , m_brightness(0) - , m_contrast(0) - , m_hue(0) - , m_saturation(0) - , m_fullScreen(false) { if (IVMRFilterConfig9 *config = com_cast<IVMRFilterConfig9>(m_filter, IID_IVMRFilterConfig9)) { config->SetRenderingMode(VMR9Mode_Windowless); @@ -113,7 +104,7 @@ void Vmr9VideoWindowControl::setDisplayRect(const QRect &rect) RECT sourceRect = { 0, 0, 0, 0 }; RECT displayRect = { rect.left(), rect.top(), rect.right() + 1, rect.bottom() + 1 }; - control->GetNativeVideoSize(&sourceRect.right, &sourceRect.bottom, 0, 0); + control->GetNativeVideoSize(&sourceRect.right, &sourceRect.bottom, nullptr, nullptr); if (m_aspectRatioMode == Qt::KeepAspectRatioByExpanding) { QSize clippedSize = rect.size(); @@ -182,7 +173,7 @@ QSize Vmr9VideoWindowControl::nativeSize() const LONG width; LONG height; - if (control->GetNativeVideoSize(&width, &height, 0, 0) == S_OK) + if (control->GetNativeVideoSize(&width, &height, nullptr, nullptr) == S_OK) size = QSize(width, height); control->Release(); } diff --git a/src/plugins/directshow/player/vmr9videowindowcontrol.h b/src/plugins/directshow/player/vmr9videowindowcontrol.h index 8ab9bd506..2a6f008f3 100644 --- a/src/plugins/directshow/player/vmr9videowindowcontrol.h +++ b/src/plugins/directshow/player/vmr9videowindowcontrol.h @@ -52,7 +52,7 @@ class Vmr9VideoWindowControl : public QVideoWindowControl { Q_OBJECT public: - Vmr9VideoWindowControl(QObject *parent = 0); + Vmr9VideoWindowControl(QObject *parent = nullptr); ~Vmr9VideoWindowControl() override; IBaseFilter *filter() const { return m_filter; } @@ -91,16 +91,16 @@ private: IVMRMixerControl9 *control, VMR9ProcAmpControlFlags property, int value) const; IBaseFilter *m_filter; - WId m_windowId; - COLORREF m_windowColor; - DWORD m_dirtyValues; - Qt::AspectRatioMode m_aspectRatioMode; + WId m_windowId = 0; + COLORREF m_windowColor = RGB(0, 0, 0); + DWORD m_dirtyValues = 0; + Qt::AspectRatioMode m_aspectRatioMode = Qt::KeepAspectRatio; QRect m_displayRect; - int m_brightness; - int m_contrast; - int m_hue; - int m_saturation; - bool m_fullScreen; + int m_brightness = 0; + int m_contrast = 0; + int m_hue = 0; + int m_saturation = 0; + bool m_fullScreen = false; }; QT_END_NAMESPACE |