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>
This commit is contained in:
@@ -44,10 +44,27 @@
|
|||||||
#include <d3d11.h>
|
#include <d3d11.h>
|
||||||
#include <mfapi.h>
|
#include <mfapi.h>
|
||||||
#include <wrl.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;
|
||||||
|
using namespace Microsoft::WRL::Wrappers;
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
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
|
class QWinRTCameraVideoBuffer : public QAbstractVideoBuffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -255,6 +272,19 @@ QWinRTCameraVideoRendererControl::QWinRTCameraVideoRendererControl(const QSize &
|
|||||||
Q_D(QWinRTCameraVideoRendererControl);
|
Q_D(QWinRTCameraVideoRendererControl);
|
||||||
d->cameraSampleformat = QVideoFrame::Format_User;
|
d->cameraSampleformat = QVideoFrame::Format_User;
|
||||||
d->videoProbesCounter = 0;
|
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()
|
QWinRTCameraVideoRendererControl::~QWinRTCameraVideoRendererControl()
|
||||||
|
|||||||
Reference in New Issue
Block a user