Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/gpu/dxva_video_decode_accelerator_win.h" | 5 #include "media/gpu/dxva_video_decode_accelerator_win.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #if !defined(OS_WIN) | 9 #if !defined(OS_WIN) |
| 10 #error This file should only be built on Windows. | 10 #error This file should only be built on Windows. |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 148 0x9990, 0x9991, 0x9992, 0x9993, 0x9994, 0x9995, 0x9996, 0x9997, 0x9998, | 148 0x9990, 0x9991, 0x9992, 0x9993, 0x9994, 0x9995, 0x9996, 0x9997, 0x9998, |
| 149 0x9999, 0x999a, 0x999b, 0x999c, 0x999d, 0x99a0, 0x99a2, 0x99a4, | 149 0x9999, 0x999a, 0x999b, 0x999c, 0x999d, 0x99a0, 0x99a2, 0x99a4, |
| 150 }; | 150 }; |
| 151 | 151 |
| 152 // Legacy Intel GPUs (Second generation) which have trouble with resolutions | 152 // Legacy Intel GPUs (Second generation) which have trouble with resolutions |
| 153 // higher than 1920 x 1088 | 153 // higher than 1920 x 1088 |
| 154 static const DWORD g_IntelLegacyGPUList[] = { | 154 static const DWORD g_IntelLegacyGPUList[] = { |
| 155 0x102, 0x106, 0x116, 0x126, | 155 0x102, 0x106, 0x116, 0x126, |
| 156 }; | 156 }; |
| 157 | 157 |
| 158 constexpr const wchar_t* const kMediaFoundationVideoDecoderDLLs[] = { | |
|
sandersd (OOO until July 31)
2016/08/18 00:05:59
This looks rather redundant. Does constexpr not im
| |
| 159 L"mf.dll", L"mfplat.dll", L"msmpeg2vdec.dll", | |
| 160 }; | |
| 161 | |
| 158 } // namespace | 162 } // namespace |
| 159 | 163 |
| 160 namespace media { | 164 namespace media { |
| 161 | 165 |
| 162 static const VideoCodecProfile kSupportedProfiles[] = { | 166 static const VideoCodecProfile kSupportedProfiles[] = { |
| 163 H264PROFILE_BASELINE, H264PROFILE_MAIN, H264PROFILE_HIGH, | 167 H264PROFILE_BASELINE, H264PROFILE_MAIN, H264PROFILE_HIGH, |
| 164 VP8PROFILE_ANY, VP9PROFILE_PROFILE0, VP9PROFILE_PROFILE1, | 168 VP8PROFILE_ANY, VP9PROFILE_PROFILE0, VP9PROFILE_PROFILE1, |
| 165 VP9PROFILE_PROFILE2, VP9PROFILE_PROFILE3}; | 169 VP9PROFILE_PROFILE2, VP9PROFILE_PROFILE3}; |
| 166 | 170 |
| 167 CreateDXGIDeviceManager | 171 CreateDXGIDeviceManager |
| (...skipping 865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1033 | 1037 |
| 1034 // static | 1038 // static |
| 1035 VideoDecodeAccelerator::SupportedProfiles | 1039 VideoDecodeAccelerator::SupportedProfiles |
| 1036 DXVAVideoDecodeAccelerator::GetSupportedProfiles( | 1040 DXVAVideoDecodeAccelerator::GetSupportedProfiles( |
| 1037 const gpu::GpuPreferences& preferences) { | 1041 const gpu::GpuPreferences& preferences) { |
| 1038 TRACE_EVENT0("gpu,startup", | 1042 TRACE_EVENT0("gpu,startup", |
| 1039 "DXVAVideoDecodeAccelerator::GetSupportedProfiles"); | 1043 "DXVAVideoDecodeAccelerator::GetSupportedProfiles"); |
| 1040 | 1044 |
| 1041 // TODO(henryhsu): Need to ensure the profiles are actually supported. | 1045 // TODO(henryhsu): Need to ensure the profiles are actually supported. |
| 1042 SupportedProfiles profiles; | 1046 SupportedProfiles profiles; |
| 1047 | |
| 1048 for (const wchar_t* mfdll : kMediaFoundationVideoDecoderDLLs) { | |
| 1049 if (!::GetModuleHandle(mfdll)) { | |
| 1050 // Windows N is missing the media foundation DLLs unless the media | |
| 1051 // feature pack is installed. | |
| 1052 DVLOG(ERROR) << mfdll << " is required for hardware video decoding"; | |
| 1053 return profiles; | |
| 1054 } | |
| 1055 } | |
| 1043 for (const auto& supported_profile : kSupportedProfiles) { | 1056 for (const auto& supported_profile : kSupportedProfiles) { |
| 1044 if (!preferences.enable_accelerated_vpx_decode && | 1057 if (!preferences.enable_accelerated_vpx_decode && |
| 1045 (supported_profile >= VP8PROFILE_MIN) && | 1058 (supported_profile >= VP8PROFILE_MIN) && |
| 1046 (supported_profile <= VP9PROFILE_MAX)) { | 1059 (supported_profile <= VP9PROFILE_MAX)) { |
| 1047 continue; | 1060 continue; |
| 1048 } | 1061 } |
| 1049 std::pair<int, int> min_resolution = GetMinResolution(supported_profile); | 1062 std::pair<int, int> min_resolution = GetMinResolution(supported_profile); |
| 1050 std::pair<int, int> max_resolution = GetMaxResolution(supported_profile); | 1063 std::pair<int, int> max_resolution = GetMaxResolution(supported_profile); |
| 1051 | 1064 |
| 1052 SupportedProfile profile; | 1065 SupportedProfile profile; |
| 1053 profile.profile = supported_profile; | 1066 profile.profile = supported_profile; |
| 1054 profile.min_resolution.SetSize(min_resolution.first, min_resolution.second); | 1067 profile.min_resolution.SetSize(min_resolution.first, min_resolution.second); |
| 1055 profile.max_resolution.SetSize(max_resolution.first, max_resolution.second); | 1068 profile.max_resolution.SetSize(max_resolution.first, max_resolution.second); |
| 1056 profiles.push_back(profile); | 1069 profiles.push_back(profile); |
| 1057 } | 1070 } |
| 1058 return profiles; | 1071 return profiles; |
| 1059 } | 1072 } |
| 1060 | 1073 |
| 1061 // static | 1074 // static |
| 1062 void DXVAVideoDecodeAccelerator::PreSandboxInitialization() { | 1075 void DXVAVideoDecodeAccelerator::PreSandboxInitialization() { |
| 1063 ::LoadLibrary(L"MFPlat.dll"); | 1076 for (const wchar_t* mfdll : kMediaFoundationVideoDecoderDLLs) |
| 1064 ::LoadLibrary(L"msmpeg2vdec.dll"); | 1077 ::LoadLibrary(mfdll); |
| 1065 ::LoadLibrary(L"mf.dll"); | |
| 1066 ::LoadLibrary(L"dxva2.dll"); | 1078 ::LoadLibrary(L"dxva2.dll"); |
| 1067 | 1079 |
| 1068 if (base::win::GetVersion() > base::win::VERSION_WIN7) { | 1080 if (base::win::GetVersion() > base::win::VERSION_WIN7) { |
| 1069 LoadLibrary(L"msvproc.dll"); | 1081 LoadLibrary(L"msvproc.dll"); |
| 1070 } else { | 1082 } else { |
| 1071 #if defined(ENABLE_DX11_FOR_WIN7) | 1083 #if defined(ENABLE_DX11_FOR_WIN7) |
| 1072 LoadLibrary(L"mshtmlmedia.dll"); | 1084 LoadLibrary(L"mshtmlmedia.dll"); |
| 1073 #endif | 1085 #endif |
| 1074 } | 1086 } |
| 1075 } | 1087 } |
| (...skipping 1552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2628 SetState(kConfigChange); | 2640 SetState(kConfigChange); |
| 2629 Invalidate(); | 2641 Invalidate(); |
| 2630 Initialize(config_, client_); | 2642 Initialize(config_, client_); |
| 2631 decoder_thread_task_runner_->PostTask( | 2643 decoder_thread_task_runner_->PostTask( |
| 2632 FROM_HERE, | 2644 FROM_HERE, |
| 2633 base::Bind(&DXVAVideoDecodeAccelerator::DecodePendingInputBuffers, | 2645 base::Bind(&DXVAVideoDecodeAccelerator::DecodePendingInputBuffers, |
| 2634 base::Unretained(this))); | 2646 base::Unretained(this))); |
| 2635 } | 2647 } |
| 2636 | 2648 |
| 2637 } // namespace media | 2649 } // namespace media |
| OLD | NEW |