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

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

Issue 2830893004: Migrate IID Coupled Uses of ScopedComPtr::ReceiveVoid() to IID_PPV_ARGS (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « media/capture/video/win/video_capture_device_win.cc ('k') | media/midi/midi_manager_winrt.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
11 #endif // !defined(OS_WIN) 11 #endif // !defined(OS_WIN)
12 12
13 #include <codecapi.h> 13 #include <codecapi.h>
14 #include <dxgi1_2.h> 14 #include <dxgi1_2.h>
15 #include <ks.h> 15 #include <ks.h>
16 #include <mfapi.h> 16 #include <mfapi.h>
17 #include <mferror.h> 17 #include <mferror.h>
18 #include <ntverp.h> 18 #include <ntverp.h>
19 #include <objbase.h>
19 #include <stddef.h> 20 #include <stddef.h>
20 #include <string.h> 21 #include <string.h>
21 #include <wmcodecdsp.h> 22 #include <wmcodecdsp.h>
22 23
23 #include "base/atomicops.h" 24 #include "base/atomicops.h"
24 #include "base/base_paths_win.h" 25 #include "base/base_paths_win.h"
25 #include "base/bind.h" 26 #include "base/bind.h"
26 #include "base/callback.h" 27 #include "base/callback.h"
27 #include "base/command_line.h" 28 #include "base/command_line.h"
28 #include "base/debug/alias.h" 29 #include "base/debug/alias.h"
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 330
330 using GetClassObject = 331 using GetClassObject =
331 HRESULT(WINAPI*)(const CLSID& clsid, const IID& iid, void** object); 332 HRESULT(WINAPI*)(const CLSID& clsid, const IID& iid, void** object);
332 333
333 GetClassObject get_class_object = reinterpret_cast<GetClassObject>( 334 GetClassObject get_class_object = reinterpret_cast<GetClassObject>(
334 GetProcAddress(dll, "DllGetClassObject")); 335 GetProcAddress(dll, "DllGetClassObject"));
335 RETURN_ON_FAILURE(get_class_object, "Failed to get DllGetClassObject pointer", 336 RETURN_ON_FAILURE(get_class_object, "Failed to get DllGetClassObject pointer",
336 E_FAIL); 337 E_FAIL);
337 338
338 base::win::ScopedComPtr<IClassFactory> factory; 339 base::win::ScopedComPtr<IClassFactory> factory;
339 HRESULT hr = 340 HRESULT hr = get_class_object(clsid, IID_PPV_ARGS(&factory));
340 get_class_object(clsid, __uuidof(IClassFactory), factory.ReceiveVoid());
341 RETURN_ON_HR_FAILURE(hr, "DllGetClassObject failed", hr); 341 RETURN_ON_HR_FAILURE(hr, "DllGetClassObject failed", hr);
342 342
343 hr = factory->CreateInstance(NULL, iid, object); 343 hr = factory->CreateInstance(NULL, iid, object);
344 return hr; 344 return hr;
345 } 345 }
346 346
347 H264ConfigChangeDetector::H264ConfigChangeDetector() 347 H264ConfigChangeDetector::H264ConfigChangeDetector()
348 : last_sps_id_(0), 348 : last_sps_id_(0),
349 last_pps_id_(0), 349 last_pps_id_(0),
350 config_changed_(false), 350 config_changed_(false),
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 } 714 }
715 715
716 bool DXVAVideoDecodeAccelerator::CreateVideoProcessor() { 716 bool DXVAVideoDecodeAccelerator::CreateVideoProcessor() {
717 if (!use_color_info_) 717 if (!use_color_info_)
718 return false; 718 return false;
719 719
720 // TODO(Hubbe): Don't try again if we tried and failed already. 720 // TODO(Hubbe): Don't try again if we tried and failed already.
721 if (video_processor_service_.Get()) 721 if (video_processor_service_.Get())
722 return true; 722 return true;
723 HRESULT hr = DXVA2CreateVideoService(d3d9_device_ex_.Get(), 723 HRESULT hr = DXVA2CreateVideoService(d3d9_device_ex_.Get(),
724 IID_IDirectXVideoProcessorService, 724 IID_PPV_ARGS(&video_processor_service_));
725 video_processor_service_.ReceiveVoid());
726 RETURN_ON_HR_FAILURE(hr, "DXVA2CreateVideoService failed", false); 725 RETURN_ON_HR_FAILURE(hr, "DXVA2CreateVideoService failed", false);
727 726
728 // TODO(Hubbe): Use actual video settings. 727 // TODO(Hubbe): Use actual video settings.
729 DXVA2_VideoDesc inputDesc; 728 DXVA2_VideoDesc inputDesc;
730 inputDesc.SampleWidth = 1920; 729 inputDesc.SampleWidth = 1920;
731 inputDesc.SampleHeight = 1080; 730 inputDesc.SampleHeight = 1080;
732 inputDesc.SampleFormat.VideoChromaSubsampling = 731 inputDesc.SampleFormat.VideoChromaSubsampling =
733 DXVA2_VideoChromaSubsampling_MPEG2; 732 DXVA2_VideoChromaSubsampling_MPEG2;
734 inputDesc.SampleFormat.NominalRange = DXVA2_NominalRange_16_235; 733 inputDesc.SampleFormat.NominalRange = DXVA2_NominalRange_16_235;
735 inputDesc.SampleFormat.VideoTransferMatrix = DXVA2_VideoTransferMatrix_BT709; 734 inputDesc.SampleFormat.VideoTransferMatrix = DXVA2_VideoTransferMatrix_BT709;
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after
1302 { 1301 {
1303 TRACE_EVENT0("gpu,startup", 1302 TRACE_EVENT0("gpu,startup",
1304 "GetMaxH264Resolution. QueryDeviceObjectFromANGLE"); 1303 "GetMaxH264Resolution. QueryDeviceObjectFromANGLE");
1305 1304
1306 device = gl::QueryD3D11DeviceObjectFromANGLE(); 1305 device = gl::QueryD3D11DeviceObjectFromANGLE();
1307 if (!device.Get()) 1306 if (!device.Get())
1308 return max_resolution; 1307 return max_resolution;
1309 } 1308 }
1310 1309
1311 base::win::ScopedComPtr<ID3D11VideoDevice> video_device; 1310 base::win::ScopedComPtr<ID3D11VideoDevice> video_device;
1312 hr = device.QueryInterface(__uuidof(ID3D11VideoDevice), 1311 hr = device.QueryInterface(IID_PPV_ARGS(&video_device));
1313 video_device.ReceiveVoid());
1314 if (FAILED(hr)) 1312 if (FAILED(hr))
1315 return max_resolution; 1313 return max_resolution;
1316 1314
1317 GUID decoder_guid = {}; 1315 GUID decoder_guid = {};
1318 1316
1319 { 1317 {
1320 TRACE_EVENT0("gpu,startup", 1318 TRACE_EVENT0("gpu,startup",
1321 "GetMaxH264Resolution. H.264 guid search begin"); 1319 "GetMaxH264Resolution. H.264 guid search begin");
1322 // Enumerate supported video profiles and look for the H264 profile. 1320 // Enumerate supported video profiles and look for the H264 profile.
1323 bool found = false; 1321 bool found = false;
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1502 decoder_dll = ::LoadLibraryEx(dll_path.value().data(), NULL, 1500 decoder_dll = ::LoadLibraryEx(dll_path.value().data(), NULL,
1503 LOAD_WITH_ALTERED_SEARCH_PATH); 1501 LOAD_WITH_ALTERED_SEARCH_PATH);
1504 } 1502 }
1505 } 1503 }
1506 } 1504 }
1507 1505
1508 if (!decoder_dll) { 1506 if (!decoder_dll) {
1509 RETURN_ON_FAILURE(false, "Unsupported codec.", false); 1507 RETURN_ON_FAILURE(false, "Unsupported codec.", false);
1510 } 1508 }
1511 1509
1512 HRESULT hr = CreateCOMObjectFromDll( 1510 HRESULT hr = CreateCOMObjectFromDll(decoder_dll, clsid,
1513 decoder_dll, clsid, __uuidof(IMFTransform), decoder_.ReceiveVoid()); 1511 IID_PPV_ARGS(&decoder_));
1514 RETURN_ON_HR_FAILURE(hr, "Failed to create decoder instance", false); 1512 RETURN_ON_HR_FAILURE(hr, "Failed to create decoder instance", false);
1515 1513
1516 RETURN_ON_FAILURE(CheckDecoderDxvaSupport(), 1514 RETURN_ON_FAILURE(CheckDecoderDxvaSupport(),
1517 "Failed to check decoder DXVA support", false); 1515 "Failed to check decoder DXVA support", false);
1518 1516
1519 ULONG_PTR device_manager_to_use = NULL; 1517 ULONG_PTR device_manager_to_use = NULL;
1520 if (use_dx11_) { 1518 if (use_dx11_) {
1521 CHECK(create_dxgi_device_manager_); 1519 CHECK(create_dxgi_device_manager_);
1522 RETURN_AND_NOTIFY_ON_FAILURE(CreateDX11DevManager(), 1520 RETURN_AND_NOTIFY_ON_FAILURE(CreateDX11DevManager(),
1523 "Failed to initialize DX11 device and manager", 1521 "Failed to initialize DX11 device and manager",
(...skipping 1462 matching lines...) Expand 10 before | Expand all | Expand 10 after
2986 base::Bind(&DXVAVideoDecodeAccelerator::DecodePendingInputBuffers, 2984 base::Bind(&DXVAVideoDecodeAccelerator::DecodePendingInputBuffers,
2987 base::Unretained(this))); 2985 base::Unretained(this)));
2988 } 2986 }
2989 2987
2990 uint32_t DXVAVideoDecodeAccelerator::GetTextureTarget() const { 2988 uint32_t DXVAVideoDecodeAccelerator::GetTextureTarget() const {
2991 bool provide_nv12_textures = share_nv12_textures_ || copy_nv12_textures_; 2989 bool provide_nv12_textures = share_nv12_textures_ || copy_nv12_textures_;
2992 return provide_nv12_textures ? GL_TEXTURE_EXTERNAL_OES : GL_TEXTURE_2D; 2990 return provide_nv12_textures ? GL_TEXTURE_EXTERNAL_OES : GL_TEXTURE_2D;
2993 } 2991 }
2994 2992
2995 } // namespace media 2993 } // namespace media
OLDNEW
« no previous file with comments | « media/capture/video/win/video_capture_device_win.cc ('k') | media/midi/midi_manager_winrt.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698