diff options
author | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2016-05-11 09:34:06 +0200 |
---|---|---|
committer | Maurice Kalinowski <maurice.kalinowski@qt.io> | 2016-05-11 10:47:57 +0000 |
commit | c84bdf63e4de16586eda3c45d5c3c3b2dc4fe089 (patch) | |
tree | 2e07bf5386ed257cd4313078bd33f3b9ee93e397 /src/plugins/winrt/qwinrtcameracontrol.cpp | |
parent | 6f3e6a78ca885096b8864638bfb64724c486e7d1 (diff) | |
download | qtmultimedia-c84bdf63e4de16586eda3c45d5c3c3b2dc4fe089.tar.gz |
winrt: Fix crash when initializing certain cameras
Some cameras return video properties when querying for
MediaStreamType_Photo, ie. Surface Book. This caused an assert.
Instead when asking for photo resolutions, only query the available
image resolutions and skip results not of type image.
Change-Id: Ia1886a11f47676d6713eec86f3a80c664871a968
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Diffstat (limited to 'src/plugins/winrt/qwinrtcameracontrol.cpp')
-rw-r--r-- | src/plugins/winrt/qwinrtcameracontrol.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/plugins/winrt/qwinrtcameracontrol.cpp b/src/plugins/winrt/qwinrtcameracontrol.cpp index effddafe3..e2d5fa67d 100644 --- a/src/plugins/winrt/qwinrtcameracontrol.cpp +++ b/src/plugins/winrt/qwinrtcameracontrol.cpp @@ -101,15 +101,30 @@ HRESULT getMediaStreamResolutions(IMediaDeviceController *device, ComPtr<IMediaEncodingProperties> properties; hr = (*propertiesList)->GetAt(index, &properties); Q_ASSERT_SUCCEEDED(hr); - ComPtr<IVideoEncodingProperties> videoProperties; - hr = properties.As(&videoProperties); - Q_ASSERT_SUCCEEDED(hr); - UINT32 width, height; - hr = videoProperties->get_Width(&width); - Q_ASSERT_SUCCEEDED(hr); - hr = videoProperties->get_Height(&height); - Q_ASSERT_SUCCEEDED(hr); - resolutions->append(QSize(width, height)); + if (type == MediaStreamType_VideoRecord || type == MediaStreamType_VideoPreview) { + ComPtr<IVideoEncodingProperties> videoProperties; + hr = properties.As(&videoProperties); + Q_ASSERT_SUCCEEDED(hr); + UINT32 width, height; + hr = videoProperties->get_Width(&width); + Q_ASSERT_SUCCEEDED(hr); + hr = videoProperties->get_Height(&height); + Q_ASSERT_SUCCEEDED(hr); + resolutions->append(QSize(width, height)); + } else if (type == MediaStreamType_Photo) { + ComPtr<IImageEncodingProperties> imageProperties; + hr = properties.As(&imageProperties); + // Asking for Photo also returns video resolutions in addition + // We skip those, as we are only interested in image Type + if (FAILED(hr) || !imageProperties) + continue; + UINT32 width, height; + hr = imageProperties->get_Width(&width); + Q_ASSERT_SUCCEEDED(hr); + hr = imageProperties->get_Height(&height); + Q_ASSERT_SUCCEEDED(hr); + resolutions->append(QSize(width, height)); + } } return resolutions->isEmpty() ? MF_E_INVALID_FORMAT : hr; } |