summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaurice Kalinowski <maurice.kalinowski@qt.io>2016-05-11 09:34:06 +0200
committerMaurice Kalinowski <maurice.kalinowski@qt.io>2016-05-11 10:47:57 +0000
commitc84bdf63e4de16586eda3c45d5c3c3b2dc4fe089 (patch)
tree2e07bf5386ed257cd4313078bd33f3b9ee93e397
parent6f3e6a78ca885096b8864638bfb64724c486e7d1 (diff)
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>
-rw-r--r--src/plugins/winrt/qwinrtcameracontrol.cpp33
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;
}