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

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

Issue 2885063003: Remove ScopedComPtr::QueryFrom() (Closed)
Patch Set: Created 3 years, 7 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/gpu/dxva_picture_buffer_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.
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 static_cast<D3DFORMAT>(MAKEFOURCC('N', 'V', '1', '2')), D3DFMT_X8R8G8B8); 664 static_cast<D3DFORMAT>(MAKEFOURCC('N', 'V', '1', '2')), D3DFMT_X8R8G8B8);
665 RETURN_ON_HR_FAILURE(hr, "D3D9 driver does not support H/W format conversion", 665 RETURN_ON_HR_FAILURE(hr, "D3D9 driver does not support H/W format conversion",
666 false); 666 false);
667 667
668 base::win::ScopedComPtr<IDirect3DDevice9> angle_device = 668 base::win::ScopedComPtr<IDirect3DDevice9> angle_device =
669 gl::QueryD3D9DeviceObjectFromANGLE(); 669 gl::QueryD3D9DeviceObjectFromANGLE();
670 if (angle_device.Get()) 670 if (angle_device.Get())
671 using_angle_device_ = true; 671 using_angle_device_ = true;
672 672
673 if (using_angle_device_) { 673 if (using_angle_device_) {
674 hr = d3d9_device_ex_.QueryFrom(angle_device.Get()); 674 hr = angle_device.CopyTo(d3d9_device_ex_.GetAddressOf());
675 RETURN_ON_HR_FAILURE( 675 RETURN_ON_HR_FAILURE(
676 hr, "QueryInterface for IDirect3DDevice9Ex from angle device failed", 676 hr, "QueryInterface for IDirect3DDevice9Ex from angle device failed",
677 false); 677 false);
678 } else { 678 } else {
679 D3DPRESENT_PARAMETERS present_params = {0}; 679 D3DPRESENT_PARAMETERS present_params = {0};
680 present_params.BackBufferWidth = 1; 680 present_params.BackBufferWidth = 1;
681 present_params.BackBufferHeight = 1; 681 present_params.BackBufferHeight = 1;
682 present_params.BackBufferFormat = D3DFMT_UNKNOWN; 682 present_params.BackBufferFormat = D3DFMT_UNKNOWN;
683 present_params.BackBufferCount = 1; 683 present_params.BackBufferCount = 1;
684 present_params.SwapEffect = D3DSWAPEFFECT_DISCARD; 684 present_params.SwapEffect = D3DSWAPEFFECT_DISCARD;
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 hr = D3D11Device()->CheckFormatSupport(DXGI_FORMAT_R16G16B16A16_FLOAT, 880 hr = D3D11Device()->CheckFormatSupport(DXGI_FORMAT_R16G16B16A16_FLOAT,
881 &fp16_format_support); 881 &fp16_format_support);
882 if (FAILED(hr) || 882 if (FAILED(hr) ||
883 !(fp16_format_support & D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT)) 883 !(fp16_format_support & D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT))
884 use_fp16_ = false; 884 use_fp16_ = false;
885 885
886 // Enable multithreaded mode on the device. This ensures that accesses to 886 // Enable multithreaded mode on the device. This ensures that accesses to
887 // context are synchronized across threads. We have multiple threads 887 // context are synchronized across threads. We have multiple threads
888 // accessing the context, the media foundation decoder threads and the 888 // accessing the context, the media foundation decoder threads and the
889 // decoder thread via the video format conversion transform. 889 // decoder thread via the video format conversion transform.
890 hr = multi_threaded_.QueryFrom(D3D11Device()); 890 hr = D3D11Device()->QueryInterface(IID_PPV_ARGS(&multi_threaded_));
891 RETURN_ON_HR_FAILURE(hr, "Failed to query ID3D10Multithread", false); 891 RETURN_ON_HR_FAILURE(hr, "Failed to query ID3D10Multithread", false);
892 multi_threaded_->SetMultithreadProtected(TRUE); 892 multi_threaded_->SetMultithreadProtected(TRUE);
893 893
894 hr = d3d11_device_manager_->ResetDevice(D3D11Device(), 894 hr = d3d11_device_manager_->ResetDevice(D3D11Device(),
895 dx11_dev_manager_reset_token_); 895 dx11_dev_manager_reset_token_);
896 RETURN_ON_HR_FAILURE(hr, "Failed to reset device", false); 896 RETURN_ON_HR_FAILURE(hr, "Failed to reset device", false);
897 897
898 D3D11_QUERY_DESC query_desc; 898 D3D11_QUERY_DESC query_desc;
899 query_desc.Query = D3D11_QUERY_EVENT; 899 query_desc.Query = D3D11_QUERY_EVENT;
900 query_desc.MiscFlags = 0; 900 query_desc.MiscFlags = 0;
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
1397 static bool legacy_gpu = true; 1397 static bool legacy_gpu = true;
1398 // This flag ensures that we determine the GPU type once. 1398 // This flag ensures that we determine the GPU type once.
1399 static bool legacy_gpu_determined = false; 1399 static bool legacy_gpu_determined = false;
1400 1400
1401 if (legacy_gpu_determined) 1401 if (legacy_gpu_determined)
1402 return legacy_gpu; 1402 return legacy_gpu;
1403 1403
1404 legacy_gpu_determined = true; 1404 legacy_gpu_determined = true;
1405 1405
1406 base::win::ScopedComPtr<IDXGIDevice> dxgi_device; 1406 base::win::ScopedComPtr<IDXGIDevice> dxgi_device;
1407 HRESULT hr = dxgi_device.QueryFrom(device); 1407 HRESULT hr = device->QueryInterface(IID_PPV_ARGS(&dxgi_device));
1408 if (FAILED(hr)) 1408 if (FAILED(hr))
1409 return legacy_gpu; 1409 return legacy_gpu;
1410 1410
1411 base::win::ScopedComPtr<IDXGIAdapter> adapter; 1411 base::win::ScopedComPtr<IDXGIAdapter> adapter;
1412 hr = dxgi_device->GetAdapter(adapter.GetAddressOf()); 1412 hr = dxgi_device->GetAdapter(adapter.GetAddressOf());
1413 if (FAILED(hr)) 1413 if (FAILED(hr))
1414 return legacy_gpu; 1414 return legacy_gpu;
1415 1415
1416 DXGI_ADAPTER_DESC adapter_desc = {}; 1416 DXGI_ADAPTER_DESC adapter_desc = {};
1417 hr = adapter->GetDesc(&adapter_desc); 1417 hr = adapter->GetDesc(&adapter_desc);
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
1952 HRESULT hr = pending_sample->output_sample->GetBufferByIndex( 1952 HRESULT hr = pending_sample->output_sample->GetBufferByIndex(
1953 0, output_buffer.GetAddressOf()); 1953 0, output_buffer.GetAddressOf());
1954 RETURN_AND_NOTIFY_ON_HR_FAILURE( 1954 RETURN_AND_NOTIFY_ON_HR_FAILURE(
1955 hr, "Failed to get buffer from output sample", PLATFORM_FAILURE, ); 1955 hr, "Failed to get buffer from output sample", PLATFORM_FAILURE, );
1956 1956
1957 base::win::ScopedComPtr<IDirect3DSurface9> surface; 1957 base::win::ScopedComPtr<IDirect3DSurface9> surface;
1958 base::win::ScopedComPtr<ID3D11Texture2D> d3d11_texture; 1958 base::win::ScopedComPtr<ID3D11Texture2D> d3d11_texture;
1959 1959
1960 if (use_dx11_) { 1960 if (use_dx11_) {
1961 base::win::ScopedComPtr<IMFDXGIBuffer> dxgi_buffer; 1961 base::win::ScopedComPtr<IMFDXGIBuffer> dxgi_buffer;
1962 hr = dxgi_buffer.QueryFrom(output_buffer.Get()); 1962 hr = output_buffer.CopyTo(dxgi_buffer.GetAddressOf());
1963 RETURN_AND_NOTIFY_ON_HR_FAILURE( 1963 RETURN_AND_NOTIFY_ON_HR_FAILURE(
1964 hr, "Failed to get DXGIBuffer from output sample", 1964 hr, "Failed to get DXGIBuffer from output sample",
1965 PLATFORM_FAILURE, ); 1965 PLATFORM_FAILURE, );
1966 hr = dxgi_buffer->GetResource( 1966 hr = dxgi_buffer->GetResource(
1967 __uuidof(ID3D11Texture2D), 1967 __uuidof(ID3D11Texture2D),
1968 reinterpret_cast<void**>(d3d11_texture.GetAddressOf())); 1968 reinterpret_cast<void**>(d3d11_texture.GetAddressOf()));
1969 } else { 1969 } else {
1970 hr = MFGetService(output_buffer.Get(), MR_BUFFER_SERVICE, 1970 hr = MFGetService(output_buffer.Get(), MR_BUFFER_SERVICE,
1971 IID_PPV_ARGS(surface.GetAddressOf())); 1971 IID_PPV_ARGS(surface.GetAddressOf()));
1972 } 1972 }
(...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after
2687 hr == S_OK, "D3D11 failed to acquire keyed mutex for texture.", 2687 hr == S_OK, "D3D11 failed to acquire keyed mutex for texture.",
2688 PLATFORM_FAILURE, ); 2688 PLATFORM_FAILURE, );
2689 } 2689 }
2690 2690
2691 base::win::ScopedComPtr<IMFMediaBuffer> output_buffer; 2691 base::win::ScopedComPtr<IMFMediaBuffer> output_buffer;
2692 hr = input_sample->GetBufferByIndex(0, output_buffer.GetAddressOf()); 2692 hr = input_sample->GetBufferByIndex(0, output_buffer.GetAddressOf());
2693 RETURN_AND_NOTIFY_ON_HR_FAILURE(hr, "Failed to get buffer from output sample", 2693 RETURN_AND_NOTIFY_ON_HR_FAILURE(hr, "Failed to get buffer from output sample",
2694 PLATFORM_FAILURE, ); 2694 PLATFORM_FAILURE, );
2695 2695
2696 base::win::ScopedComPtr<IMFDXGIBuffer> dxgi_buffer; 2696 base::win::ScopedComPtr<IMFDXGIBuffer> dxgi_buffer;
2697 hr = dxgi_buffer.QueryFrom(output_buffer.Get()); 2697 hr = output_buffer.CopyTo(dxgi_buffer.GetAddressOf());
2698 RETURN_AND_NOTIFY_ON_HR_FAILURE( 2698 RETURN_AND_NOTIFY_ON_HR_FAILURE(
2699 hr, "Failed to get DXGIBuffer from output sample", PLATFORM_FAILURE, ); 2699 hr, "Failed to get DXGIBuffer from output sample", PLATFORM_FAILURE, );
2700 UINT index = 0; 2700 UINT index = 0;
2701 hr = dxgi_buffer->GetSubresourceIndex(&index); 2701 hr = dxgi_buffer->GetSubresourceIndex(&index);
2702 RETURN_AND_NOTIFY_ON_HR_FAILURE(hr, "Failed to get resource index", 2702 RETURN_AND_NOTIFY_ON_HR_FAILURE(hr, "Failed to get resource index",
2703 PLATFORM_FAILURE, ); 2703 PLATFORM_FAILURE, );
2704 2704
2705 base::win::ScopedComPtr<ID3D11Texture2D> dx11_decoding_texture; 2705 base::win::ScopedComPtr<ID3D11Texture2D> dx11_decoding_texture;
2706 hr = dxgi_buffer->GetResource( 2706 hr = dxgi_buffer->GetResource(
2707 IID_PPV_ARGS(dx11_decoding_texture.GetAddressOf())); 2707 IID_PPV_ARGS(dx11_decoding_texture.GetAddressOf()));
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
2925 bool DXVAVideoDecodeAccelerator::GetVideoFrameDimensions(IMFSample* sample, 2925 bool DXVAVideoDecodeAccelerator::GetVideoFrameDimensions(IMFSample* sample,
2926 int* width, 2926 int* width,
2927 int* height) { 2927 int* height) {
2928 base::win::ScopedComPtr<IMFMediaBuffer> output_buffer; 2928 base::win::ScopedComPtr<IMFMediaBuffer> output_buffer;
2929 HRESULT hr = sample->GetBufferByIndex(0, output_buffer.GetAddressOf()); 2929 HRESULT hr = sample->GetBufferByIndex(0, output_buffer.GetAddressOf());
2930 RETURN_ON_HR_FAILURE(hr, "Failed to get buffer from output sample", false); 2930 RETURN_ON_HR_FAILURE(hr, "Failed to get buffer from output sample", false);
2931 2931
2932 if (use_dx11_) { 2932 if (use_dx11_) {
2933 base::win::ScopedComPtr<IMFDXGIBuffer> dxgi_buffer; 2933 base::win::ScopedComPtr<IMFDXGIBuffer> dxgi_buffer;
2934 base::win::ScopedComPtr<ID3D11Texture2D> d3d11_texture; 2934 base::win::ScopedComPtr<ID3D11Texture2D> d3d11_texture;
2935 hr = dxgi_buffer.QueryFrom(output_buffer.Get()); 2935 hr = output_buffer.CopyTo(dxgi_buffer.GetAddressOf());
2936 RETURN_ON_HR_FAILURE(hr, "Failed to get DXGIBuffer from output sample", 2936 RETURN_ON_HR_FAILURE(hr, "Failed to get DXGIBuffer from output sample",
2937 false); 2937 false);
2938 hr = dxgi_buffer->GetResource( 2938 hr = dxgi_buffer->GetResource(
2939 __uuidof(ID3D11Texture2D), 2939 __uuidof(ID3D11Texture2D),
2940 reinterpret_cast<void**>(d3d11_texture.GetAddressOf())); 2940 reinterpret_cast<void**>(d3d11_texture.GetAddressOf()));
2941 RETURN_ON_HR_FAILURE(hr, "Failed to get D3D11Texture from output buffer", 2941 RETURN_ON_HR_FAILURE(hr, "Failed to get D3D11Texture from output buffer",
2942 false); 2942 false);
2943 D3D11_TEXTURE2D_DESC d3d11_texture_desc; 2943 D3D11_TEXTURE2D_DESC d3d11_texture_desc;
2944 d3d11_texture->GetDesc(&d3d11_texture_desc); 2944 d3d11_texture->GetDesc(&d3d11_texture_desc);
2945 *width = d3d11_texture_desc.Width; 2945 *width = d3d11_texture_desc.Width;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
3024 uint32_t DXVAVideoDecodeAccelerator::GetTextureTarget() const { 3024 uint32_t DXVAVideoDecodeAccelerator::GetTextureTarget() const {
3025 bool provide_nv12_textures = share_nv12_textures_ || copy_nv12_textures_; 3025 bool provide_nv12_textures = share_nv12_textures_ || copy_nv12_textures_;
3026 return provide_nv12_textures ? GL_TEXTURE_EXTERNAL_OES : GL_TEXTURE_2D; 3026 return provide_nv12_textures ? GL_TEXTURE_EXTERNAL_OES : GL_TEXTURE_2D;
3027 } 3027 }
3028 3028
3029 ID3D11Device* DXVAVideoDecodeAccelerator::D3D11Device() const { 3029 ID3D11Device* DXVAVideoDecodeAccelerator::D3D11Device() const {
3030 return share_nv12_textures_ ? angle_device_.Get() : d3d11_device_.Get(); 3030 return share_nv12_textures_ ? angle_device_.Get() : d3d11_device_.Get();
3031 } 3031 }
3032 3032
3033 } // namespace media 3033 } // namespace media
OLDNEW
« no previous file with comments | « media/gpu/dxva_picture_buffer_win.cc ('k') | media/midi/midi_manager_winrt.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698