winrt: Fix encoding properties
authorAndrew Knight <andrew.knight@digia.com>
Fri, 5 Dec 2014 08:26:32 +0000 (10:26 +0200)
committerAndrew Knight <andrew.knight@theqtcompany.com>
Thu, 11 Dec 2014 15:48:54 +0000 (16:48 +0100)
These should match the capture mode. Additionally, there was a semantic
error preventing the encoding properties from being properly selected.
This fixes a bug in which the viewfinder was receiving frames too large
for display as an OpenGL texture.

Task-number: QTBUG-41065
Change-Id: Ia82c8f44bba1692a219edc5f9d78fc76c3d8a4ba
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@theqtcompany.com>
src/plugins/winrt/qwinrtcameracontrol.cpp

index f4e57b4..3c51de5 100644 (file)
@@ -711,7 +711,20 @@ HRESULT QWinRTCameraControl::initialize()
     hr = videoDeviceController.As(&deviceController);
     Q_ASSERT_SUCCEEDED(hr);
     ComPtr<IVectorView<IMediaEncodingProperties *>> encodingPropertiesList;
-    hr = deviceController->GetAvailableMediaStreamProperties(MediaStreamType_Photo, &encodingPropertiesList);
+    MediaStreamType mediaStreamType;
+    switch (d->captureMode) {
+    default:
+    case QCamera::CaptureViewfinder:
+        mediaStreamType = MediaStreamType_VideoPreview;
+        break;
+    case QCamera::CaptureStillImage:
+        mediaStreamType = MediaStreamType_Photo;
+        break;
+    case QCamera::CaptureVideo:
+        mediaStreamType = MediaStreamType_VideoRecord;
+        break;
+    }
+    hr = deviceController->GetAvailableMediaStreamProperties(mediaStreamType, &encodingPropertiesList);
     Q_ASSERT_SUCCEEDED(hr);
 
     d->size = QSize();
@@ -724,12 +737,12 @@ HRESULT QWinRTCameraControl::initialize()
         hr = encodingPropertiesList->GetAt(i, &properties);
         Q_ASSERT_SUCCEEDED(hr);
         ComPtr<IVideoEncodingProperties> videoProperties;
-        hr = properties.As(&videoEncodingProperties);
+        hr = properties.As(&videoProperties);
         Q_ASSERT_SUCCEEDED(hr);
         UINT32 width, height;
-        hr = videoEncodingProperties->get_Width(&width);
+        hr = videoProperties->get_Width(&width);
         Q_ASSERT_SUCCEEDED(hr);
-        hr = videoEncodingProperties->get_Height(&height);
+        hr = videoProperties->get_Height(&height);
         Q_ASSERT_SUCCEEDED(hr);
         // Choose the highest-quality format
         if (int(width * height) > d->size.width() * d->size.height()) {