winrt: Fix encoding properties
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>
This commit is contained in:
committed by
Andrew Knight
parent
791febc1d3
commit
1027215920
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user