mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 13:55:43 +00:00
Bug 1158089 - Fall back to d3d9 DXVA if d3d11 initialization fails. r=cpearce
This commit is contained in:
parent
45163479b0
commit
197db41200
@ -147,7 +147,7 @@ public:
|
||||
};
|
||||
|
||||
bool
|
||||
WMFVideoMFTManager::InitializeDXVA()
|
||||
WMFVideoMFTManager::InitializeDXVA(bool aForceD3D9)
|
||||
{
|
||||
MOZ_ASSERT(!mDXVA2Manager);
|
||||
|
||||
@ -162,7 +162,8 @@ WMFVideoMFTManager::InitializeDXVA()
|
||||
}
|
||||
|
||||
// The DXVA manager must be created on the main thread.
|
||||
nsRefPtr<CreateDXVAManagerEvent> event(new CreateDXVAManagerEvent(mLayersBackend));
|
||||
nsRefPtr<CreateDXVAManagerEvent> event =
|
||||
new CreateDXVAManagerEvent(aForceD3D9 ? LayersBackend::LAYERS_D3D9 : mLayersBackend);
|
||||
|
||||
if (NS_IsMainThread()) {
|
||||
event->Run();
|
||||
@ -176,9 +177,24 @@ WMFVideoMFTManager::InitializeDXVA()
|
||||
|
||||
TemporaryRef<MFTDecoder>
|
||||
WMFVideoMFTManager::Init()
|
||||
{
|
||||
RefPtr<MFTDecoder> decoder = InitInternal(/* aForceD3D9 = */ false);
|
||||
|
||||
// If initialization failed with d3d11 DXVA then try falling back
|
||||
// to d3d9.
|
||||
if (!decoder && mDXVA2Manager && mDXVA2Manager->IsD3D11()) {
|
||||
mDXVA2Manager = nullptr;
|
||||
decoder = InitInternal(true);
|
||||
}
|
||||
|
||||
return decoder.forget();
|
||||
}
|
||||
|
||||
TemporaryRef<MFTDecoder>
|
||||
WMFVideoMFTManager::InitInternal(bool aForceD3D9)
|
||||
{
|
||||
mUseHwAccel = false; // default value; changed if D3D setup succeeds.
|
||||
bool useDxva = InitializeDXVA();
|
||||
bool useDxva = InitializeDXVA(aForceD3D9);
|
||||
|
||||
RefPtr<MFTDecoder> decoder(new MFTDecoder());
|
||||
|
||||
|
@ -39,7 +39,9 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
bool InitializeDXVA();
|
||||
bool InitializeDXVA(bool aForceD3D9);
|
||||
|
||||
TemporaryRef<MFTDecoder> InitInternal(bool aForceD3D9);
|
||||
|
||||
HRESULT ConfigureVideoFrameGeometry();
|
||||
|
||||
|
@ -238,6 +238,8 @@ public:
|
||||
|
||||
virtual HRESULT ConfigureForSize(uint32_t aWidth, uint32_t aHeight) override;
|
||||
|
||||
virtual bool IsD3D11() override { return true; }
|
||||
|
||||
private:
|
||||
HRESULT CreateFormatConverter();
|
||||
|
||||
|
@ -40,6 +40,8 @@ public:
|
||||
|
||||
virtual HRESULT ConfigureForSize(uint32_t aWidth, uint32_t aHeight) { return S_OK; }
|
||||
|
||||
virtual bool IsD3D11() { return false; }
|
||||
|
||||
virtual ~DXVA2Manager();
|
||||
|
||||
protected:
|
||||
|
Loading…
Reference in New Issue
Block a user