Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Side by Side Diff: media/gpu/dxva_video_decode_accelerator_win.cc

Issue 2105693003: Vp9 decoder mft support for AMD apu/gpu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase once more to resolve cq issue Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 #include "media/video/video_decode_accelerator.h" 45 #include "media/video/video_decode_accelerator.h"
46 #include "third_party/angle/include/EGL/egl.h" 46 #include "third_party/angle/include/EGL/egl.h"
47 #include "third_party/angle/include/EGL/eglext.h" 47 #include "third_party/angle/include/EGL/eglext.h"
48 #include "ui/gl/gl_bindings.h" 48 #include "ui/gl/gl_bindings.h"
49 #include "ui/gl/gl_context.h" 49 #include "ui/gl/gl_context.h"
50 #include "ui/gl/gl_fence.h" 50 #include "ui/gl/gl_fence.h"
51 #include "ui/gl/gl_surface_egl.h" 51 #include "ui/gl/gl_surface_egl.h"
52 52
53 namespace { 53 namespace {
54 54
55 // AMD
56 // Path is appended on to the PROGRAM_FILES base path.
57 const wchar_t kAMDVPXDecoderDLLPath[] =
58 L"Common Files\\ATI Technologies\\Multimedia\\";
59
60 const wchar_t kAMDVP9DecoderDLLName[] =
61 #if defined(ARCH_CPU_X86)
62 L"amf-mft-decvp9-decoder32.dll";
63 #elif defined(ARCH_CPU_X86_64)
64 L"amf-mft-decvp9-decoder64.dll";
65 #else
66 #error Unsupported Windows CPU Architecture
67 #endif
68
69 const CLSID CLSID_AMDWebmMfVp9Dec = {
70 0x2d2d728a,
71 0x67d6,
72 0x48ab,
73 {0x89, 0xfb, 0xa6, 0xec, 0x65, 0x55, 0x49, 0x70}};
74
55 const wchar_t kMSVP9DecoderDLLName[] = L"MSVP9DEC.dll"; 75 const wchar_t kMSVP9DecoderDLLName[] = L"MSVP9DEC.dll";
56 76
57 const CLSID MEDIASUBTYPE_VP80 = { 77 const CLSID MEDIASUBTYPE_VP80 = {
58 0x30385056, 78 0x30385056,
59 0x0000, 79 0x0000,
60 0x0010, 80 0x0010,
61 {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; 81 {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
62 82
63 const CLSID MEDIASUBTYPE_VP90 = { 83 const CLSID MEDIASUBTYPE_VP90 = {
64 0x30395056, 84 0x30395056,
(...skipping 1232 matching lines...) Expand 10 before | Expand all | Expand 10 after
1297 base::string16 file_version = version_info->file_version(); 1317 base::string16 file_version = version_info->file_version();
1298 RETURN_ON_FAILURE(file_version.find(L"6.1.7140") == base::string16::npos, 1318 RETURN_ON_FAILURE(file_version.find(L"6.1.7140") == base::string16::npos,
1299 "blacklisted version of msmpeg2vdec.dll 6.1.7140", false); 1319 "blacklisted version of msmpeg2vdec.dll 6.1.7140", false);
1300 codec_ = kCodecH264; 1320 codec_ = kCodecH264;
1301 clsid = __uuidof(CMSH264DecoderMFT); 1321 clsid = __uuidof(CMSH264DecoderMFT);
1302 } else if (enable_accelerated_vpx_decode_ && 1322 } else if (enable_accelerated_vpx_decode_ &&
1303 (profile == VP8PROFILE_ANY || profile == VP9PROFILE_PROFILE0 || 1323 (profile == VP8PROFILE_ANY || profile == VP9PROFILE_PROFILE0 ||
1304 profile == VP9PROFILE_PROFILE1 || 1324 profile == VP9PROFILE_PROFILE1 ||
1305 profile == VP9PROFILE_PROFILE2 || 1325 profile == VP9PROFILE_PROFILE2 ||
1306 profile == VP9PROFILE_PROFILE3)) { 1326 profile == VP9PROFILE_PROFILE3)) {
1307 if (profile != VP8PROFILE_ANY) { 1327 if (profile != VP8PROFILE_ANY &&
1328 (enable_accelerated_vpx_decode_ &
1329 gpu::GpuPreferences::VPX_VENDOR_MICROSOFT)) {
1308 codec_ = kCodecVP9; 1330 codec_ = kCodecVP9;
1309 clsid = CLSID_MSVPxDecoder; 1331 clsid = CLSID_MSVPxDecoder;
1310 decoder_dll = ::LoadLibrary(kMSVP9DecoderDLLName); 1332 decoder_dll = ::LoadLibrary(kMSVP9DecoderDLLName);
1311 if (decoder_dll) 1333 if (decoder_dll)
1312 using_ms_vp9_mft_ = true; 1334 using_ms_vp9_mft_ = true;
1313 } 1335 }
1314 RETURN_ON_FAILURE(decoder_dll, "vpx decoder dll is not loaded", false); 1336
1315 } else { 1337 int program_files_key = base::DIR_PROGRAM_FILES;
1338 if (base::win::OSInfo::GetInstance()->wow64_status() ==
1339 base::win::OSInfo::WOW64_ENABLED) {
1340 program_files_key = base::DIR_PROGRAM_FILES6432;
1341 }
1342
1343 // AMD
1344 if (!decoder_dll &&
1345 enable_accelerated_vpx_decode_ & gpu::GpuPreferences::VPX_VENDOR_AMD &&
1346 profile == VP9PROFILE_PROFILE0) {
1347 base::FilePath dll_path;
1348 if (PathService::Get(program_files_key, &dll_path)) {
1349 codec_ = media::kCodecVP9;
1350 dll_path = dll_path.Append(kAMDVPXDecoderDLLPath);
1351 dll_path = dll_path.Append(kAMDVP9DecoderDLLName);
1352 clsid = CLSID_AMDWebmMfVp9Dec;
1353 decoder_dll = ::LoadLibraryEx(dll_path.value().data(), NULL,
1354 LOAD_WITH_ALTERED_SEARCH_PATH);
1355 }
1356 }
1357 }
1358
1359 if (!decoder_dll) {
1316 RETURN_ON_FAILURE(false, "Unsupported codec.", false); 1360 RETURN_ON_FAILURE(false, "Unsupported codec.", false);
1317 } 1361 }
1318 1362
1319 HRESULT hr = CreateCOMObjectFromDll( 1363 HRESULT hr = CreateCOMObjectFromDll(
1320 decoder_dll, clsid, __uuidof(IMFTransform), decoder_.ReceiveVoid()); 1364 decoder_dll, clsid, __uuidof(IMFTransform), decoder_.ReceiveVoid());
1321 RETURN_ON_HR_FAILURE(hr, "Failed to create decoder instance", false); 1365 RETURN_ON_HR_FAILURE(hr, "Failed to create decoder instance", false);
1322 1366
1323 RETURN_ON_FAILURE(CheckDecoderDxvaSupport(), 1367 RETURN_ON_FAILURE(CheckDecoderDxvaSupport(),
1324 "Failed to check decoder DXVA support", false); 1368 "Failed to check decoder DXVA support", false);
1325 1369
(...skipping 1299 matching lines...) Expand 10 before | Expand all | Expand 10 after
2625 SetState(kConfigChange); 2669 SetState(kConfigChange);
2626 Invalidate(); 2670 Invalidate();
2627 Initialize(config_, client_); 2671 Initialize(config_, client_);
2628 decoder_thread_task_runner_->PostTask( 2672 decoder_thread_task_runner_->PostTask(
2629 FROM_HERE, 2673 FROM_HERE,
2630 base::Bind(&DXVAVideoDecodeAccelerator::DecodePendingInputBuffers, 2674 base::Bind(&DXVAVideoDecodeAccelerator::DecodePendingInputBuffers,
2631 base::Unretained(this))); 2675 base::Unretained(this)));
2632 } 2676 }
2633 2677
2634 } // namespace media 2678 } // namespace media
OLDNEW
« gpu/command_buffer/service/gpu_preferences.h ('K') | « media/gpu/dxva_video_decode_accelerator_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698