Chromium Code Reviews| Index: content/common/gpu/media/dxva_video_decode_accelerator.cc |
| diff --git a/content/common/gpu/media/dxva_video_decode_accelerator.cc b/content/common/gpu/media/dxva_video_decode_accelerator.cc |
| index 3d58c90055b2b4ac15fbbc1830d68b3ee8d67504..a85b1c8d38f6d00fd706281d0d7a27ac0c347f5e 100644 |
| --- a/content/common/gpu/media/dxva_video_decode_accelerator.cc |
| +++ b/content/common/gpu/media/dxva_video_decode_accelerator.cc |
| @@ -654,15 +654,12 @@ bool DXVAVideoDecodeAccelerator::Initialize(media::VideoCodecProfile profile, |
| // Instead of crashing while delay loading the DLL when calling MFStartup() |
| // below, probe whether we can successfully load the DLL now. |
| // See http://crbug.com/339678 for details. |
| - HMODULE dxgi_manager_dll = NULL; |
| - if ((dxgi_manager_dll = ::GetModuleHandle(L"MFPlat.dll")) == NULL) { |
| - HMODULE mfplat_dll = ::LoadLibrary(L"MFPlat.dll"); |
| - RETURN_ON_FAILURE(mfplat_dll, "MFPlat.dll is required for decoding", |
| - false); |
| - // On Windows 8+ mfplat.dll provides the MFCreateDXGIDeviceManager API. |
| - // On Windows 7 mshtmlmedia.dll provides it. |
| - dxgi_manager_dll = mfplat_dll; |
| - } |
| + HMODULE dxgi_manager_dll = ::GetModuleHandle(L"MFPlat.dll"); |
| + RETURN_ON_FAILURE(dxgi_manager_dll, "MFPlat.dll is required for decoding", |
| + false); |
| + |
| + // On Windows 8+ mfplat.dll provides the MFCreateDXGIDeviceManager API. |
| + // On Windows 7 mshtmlmedia.dll provides it. |
| // TODO(ananta) |
| // The code below works, as in we can create the DX11 device manager for |
| @@ -670,11 +667,10 @@ bool DXVAVideoDecodeAccelerator::Initialize(media::VideoCodecProfile profile, |
| // copy does not exist on Windows 7. Look into an alternate approach |
| // and enable the code below. |
| #if defined ENABLE_DX11_FOR_WIN7 |
| - if ((base::win::GetVersion() == base::win::VERSION_WIN7) && |
| - ((dxgi_manager_dll = ::GetModuleHandle(L"mshtmlmedia.dll")) == NULL)) { |
| - HMODULE mshtml_media_dll = ::LoadLibrary(L"mshtmlmedia.dll"); |
| - if (mshtml_media_dll) |
| - dxgi_manager_dll = mshtml_media_dll; |
| + if (base::win::GetVersion() == base::win::VERSION_WIN7) { |
| + dxgi_manager_dll = ::GetModuleHandle(L"mshtmlmedia.dll"); |
| + RETURN_ON_FAILURE(dxgi_manager_dll, |
| + "mshtmlmedia.dll is required for decoding", false); |
| } |
| #endif |
| // If we don't find the MFCreateDXGIDeviceManager API we fallback to D3D9 |
| @@ -819,7 +815,7 @@ bool DXVAVideoDecodeAccelerator::CreateDX11DevManager() { |
| d3d11_query_.Receive()); |
| RETURN_ON_HR_FAILURE(hr, "Failed to create DX11 device query", false); |
| - HMODULE video_processor_dll = ::LoadLibrary(L"msvproc.dll"); |
| + HMODULE video_processor_dll = ::GetModuleHandle(L"msvproc.dll"); |
| RETURN_ON_FAILURE(video_processor_dll, "Failed to load video processor", |
| false); |
| @@ -1035,6 +1031,21 @@ DXVAVideoDecodeAccelerator::GetSupportedProfiles() { |
| return profiles; |
| } |
| +// static |
| +void DXVAVideoDecodeAccelerator::PreSandboxInitialization() { |
| + ::LoadLibrary(L"MFPlat.dll"); |
| + ::LoadLibrary(L"msmpeg2vdec.dll"); |
| + |
| + if (base::win::GetVersion() > base::win::VERSION_WIN7) { |
| + LoadLibrary(L"msvproc.dll"); |
| + } else { |
| + LoadLibrary(L"dxva2.dll"); |
| +#if defined ENABLE_DX11_FOR_WIN7 |
|
DaleCurtis
2015/11/05 01:07:58
#if defined(ENABLED_DX11_FOR_WIN7)
... but where
ananta
2015/11/05 19:13:02
It is not defined. As decode using DX11 on Windows
|
| + LoadLibrary(L"mshtmlmedia.dll"); |
| +#endif |
| + } |
| +} |
| + |
| bool DXVAVideoDecodeAccelerator::InitDecoder(media::VideoCodecProfile profile) { |
| HMODULE decoder_dll = NULL; |
| @@ -1046,7 +1057,7 @@ bool DXVAVideoDecodeAccelerator::InitDecoder(media::VideoCodecProfile profile) { |
| // was previously done because it failed inside the sandbox, and now is done |
| // as a more minimal approach to avoid other side-effects CCI might have (as |
| // we are still in a reduced sandbox). |
| - decoder_dll = ::LoadLibrary(L"msmpeg2vdec.dll"); |
| + decoder_dll = ::GetModuleHandle(L"msmpeg2vdec.dll"); |
| RETURN_ON_FAILURE(decoder_dll, |
| "msmpeg2vdec.dll required for decoding is not loaded", |
| false); |