summaryrefslogtreecommitdiff
path: root/src/plugins/directshow/player
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/directshow/player')
-rw-r--r--src/plugins/directshow/player/directshowaudioendpointcontrol.cpp22
-rw-r--r--src/plugins/directshow/player/directshowaudioendpointcontrol.h6
-rw-r--r--src/plugins/directshow/player/directshowevrvideowindowcontrol.cpp3
-rw-r--r--src/plugins/directshow/player/directshowevrvideowindowcontrol.h4
-rw-r--r--src/plugins/directshow/player/directshowioreader.cpp34
-rw-r--r--src/plugins/directshow/player/directshowioreader.h24
-rw-r--r--src/plugins/directshow/player/directshowiosource.cpp19
-rw-r--r--src/plugins/directshow/player/directshowiosource.h18
-rw-r--r--src/plugins/directshow/player/directshowmetadatacontrol.cpp21
-rw-r--r--src/plugins/directshow/player/directshowmetadatacontrol.h4
-rw-r--r--src/plugins/directshow/player/directshowplayercontrol.cpp16
-rw-r--r--src/plugins/directshow/player/directshowplayercontrol.h30
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.cpp139
-rw-r--r--src/plugins/directshow/player/directshowplayerservice.h66
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.cpp13
-rw-r--r--src/plugins/directshow/player/directshowvideorenderercontrol.h8
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.cpp32
-rw-r--r--src/plugins/directshow/player/videosurfacefilter.h22
-rw-r--r--src/plugins/directshow/player/vmr9videowindowcontrol.cpp13
-rw-r--r--src/plugins/directshow/player/vmr9videowindowcontrol.h20
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