WMF: fix crash on media player destruction.

A race condition could cause a frame to be presented even after the
QAbstractVideoSurface was deleted. We now check that the surface is
valid before presenting a frame.

Task-number: QTBUG-41158
Change-Id: If593469a8267583e499e781336af38d3fbf318fd
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
This commit is contained in:
Yoann Lopes
2014-09-23 14:46:22 +02:00
parent 78dccc998f
commit 49dc6dc459

View File

@@ -330,6 +330,7 @@ void D3DPresentEngine::presentSample(void *opaque, qint64)
IMFMediaBuffer* buffer = NULL; IMFMediaBuffer* buffer = NULL;
IDirect3DSurface9* surface = NULL; IDirect3DSurface9* surface = NULL;
if (m_surface && m_surface->isActive()) {
if (sample) { if (sample) {
// Get the buffer from the sample. // Get the buffer from the sample.
hr = sample->GetBufferByIndex(0, &buffer); hr = sample->GetBufferByIndex(0, &buffer);
@@ -359,6 +360,7 @@ void D3DPresentEngine::presentSample(void *opaque, qint64)
m_surface->present(frame); m_surface->present(frame);
} }
}
done: done:
qt_wmf_safeRelease(&surface); qt_wmf_safeRelease(&surface);