diff options
author | Samuel Nevala <samuel.nevala@intopalo.com> | 2015-09-25 14:54:30 +0300 |
---|---|---|
committer | Samuel Nevala <samuel.nevala@intopalo.com> | 2015-09-29 20:07:44 +0000 |
commit | f6082d46326055712fe772d1973b2de94f028a08 (patch) | |
tree | 7c8a7c7b3756ee9b9204bf43b3e15bc4cd354d1e | |
parent | 572f3f80fc90e5d5a08208c1302416ce19ac0f06 (diff) |
winrt: Fix Lumia 1520 black viewfinder.
The latest Denim update broke VideoProcessorBlt for Lumia 1520. After
the update, the blit results in a black target texture. As a
workaround, don't use DirectVideo, but leave format conversion and
drawing to the EGL Node.
Task-Id: QTBUG-48331
Change-Id: I1dab6b58d52d0e24fbffb91f23772906a576047a
Reviewed-by: Andrew Knight <andrew.knight@intopalo.com>
-rw-r--r-- | src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp b/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp index 177d05ebe..7afef7669 100644 --- a/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp +++ b/src/plugins/winrt/qwinrtcameravideorenderercontrol.cpp @@ -44,10 +44,27 @@ #include <d3d11.h> #include <mfapi.h> #include <wrl.h> + +#ifdef Q_OS_WINPHONE +#include <Windows.Security.ExchangeActiveSyncProvisioning.h> +using namespace ABI::Windows::Security::ExchangeActiveSyncProvisioning; +#endif + using namespace Microsoft::WRL; +using namespace Microsoft::WRL::Wrappers; QT_BEGIN_NAMESPACE +#ifdef Q_OS_WINPHONE +template <int n> +static bool blacklisted(const wchar_t (&blackListName)[n], const HString &deviceModel) +{ + quint32 deviceNameLength; + const wchar_t *deviceName = deviceModel.GetRawBuffer(&deviceNameLength); + return n - 1 <= deviceNameLength && !wmemcmp(blackListName, deviceName, n - 1); +} +#endif + class QWinRTCameraVideoBuffer : public QAbstractVideoBuffer { public: @@ -255,6 +272,19 @@ QWinRTCameraVideoRendererControl::QWinRTCameraVideoRendererControl(const QSize & Q_D(QWinRTCameraVideoRendererControl); d->cameraSampleformat = QVideoFrame::Format_User; d->videoProbesCounter = 0; + +#ifdef Q_OS_WINPHONE + // Workaround for certain devices which fail to blit. + ComPtr<IEasClientDeviceInformation> deviceInfo; + HRESULT hr = RoActivateInstance(HString::MakeReference(RuntimeClass_Windows_Security_ExchangeActiveSyncProvisioning_EasClientDeviceInformation).Get(), + &deviceInfo); + Q_ASSERT_SUCCEEDED(hr); + HString deviceModel; + hr = deviceInfo->get_SystemProductName(deviceModel.GetAddressOf()); + Q_ASSERT_SUCCEEDED(hr); + // Blacklist Lumia 1520 + setBlitMode(blacklisted(L"RM-937", deviceModel) ? MediaFoundation : DirectVideo); +#endif } QWinRTCameraVideoRendererControl::~QWinRTCameraVideoRendererControl() |