summaryrefslogtreecommitdiff
path: root/src/plugins/winrt
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2016-01-26 14:25:10 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2016-01-26 14:25:10 +0100
commit7610f6e9ba8b92df6d18b94fcec982064dffacbd (patch)
tree65653559c62cc451258543b87ff971371e8d8e05 /src/plugins/winrt
parentac6f9d27b1610356303714c3f8d2f2ab2ca5883a (diff)
parent365e05bad8c4a42a449eeef257a16c6f8faca318 (diff)
downloadqtmultimedia-7610f6e9ba8b92df6d18b94fcec982064dffacbd.tar.gz
Merge remote-tracking branch 'origin/5.6' into dev
Change-Id: I2e4e9cca01d63ed0d1e7f71c7a58322390696036
Diffstat (limited to 'src/plugins/winrt')
-rw-r--r--src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp8
-rw-r--r--src/plugins/winrt/qwinrtmediaplayercontrol.cpp9
2 files changed, 15 insertions, 2 deletions
diff --git a/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp b/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp
index cf62843f7..7dd2e6557 100644
--- a/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp
+++ b/src/plugins/winrt/qwinrtabstractvideorenderercontrol.cpp
@@ -86,6 +86,14 @@ struct QWinRTVideoRendererControlGlobal
hr = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, flags,
featureLevels, ARRAYSIZE(featureLevels), D3D11_SDK_VERSION,
&device, &featureLevel, &context);
+#ifdef _DEBUG
+ if (FAILED(hr)) {
+ qErrnoWarning(hr, "Failed to create D3D device with device debug flag");
+ hr = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, D3D11_CREATE_DEVICE_VIDEO_SUPPORT,
+ featureLevels, ARRAYSIZE(featureLevels), D3D11_SDK_VERSION,
+ &device, &featureLevel, &context);
+ }
+#endif
if (FAILED(hr))
qErrnoWarning(hr, "Failed to create D3D device");
diff --git a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
index 7bdb586c3..a07a6b622 100644
--- a/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
+++ b/src/plugins/winrt/qwinrtmediaplayercontrol.cpp
@@ -388,8 +388,13 @@ public:
HRESULT __stdcall SetCurrentPosition(QWORD position)
{
qint64 pos(position);
- if (pos >= d->stream->size())
- return E_INVALIDARG;
+ if (pos >= d->stream->size()) {
+ // MSDN states we should return E_INVALIDARG, but that immediately
+ // stops playback and does not play remaining buffers in the queue.
+ // For some formats this can cause losing up to 5 seconds of the
+ // end of the stream.
+ return S_FALSE;
+ }
const bool ok = d->stream->seek(pos);
return ok ? S_OK : S_FALSE;