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

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

Issue 1998723002: Move code in ui/gl/* from gfx:: to gl:: (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 6 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 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 template <class T> 378 template <class T>
379 base::win::ScopedComPtr<T> QueryDeviceObjectFromANGLE(int object_type) { 379 base::win::ScopedComPtr<T> QueryDeviceObjectFromANGLE(int object_type) {
380 base::win::ScopedComPtr<T> device_object; 380 base::win::ScopedComPtr<T> device_object;
381 381
382 EGLDisplay egl_display = nullptr; 382 EGLDisplay egl_display = nullptr;
383 intptr_t egl_device = 0; 383 intptr_t egl_device = 0;
384 intptr_t device = 0; 384 intptr_t device = 0;
385 385
386 { 386 {
387 TRACE_EVENT0("gpu", "QueryDeviceObjectFromANGLE. GetHardwareDisplay"); 387 TRACE_EVENT0("gpu", "QueryDeviceObjectFromANGLE. GetHardwareDisplay");
388 egl_display = gfx::GLSurfaceEGL::GetHardwareDisplay(); 388 egl_display = gl::GLSurfaceEGL::GetHardwareDisplay();
389 } 389 }
390 390
391 RETURN_ON_FAILURE(gfx::GLSurfaceEGL::HasEGLExtension("EGL_EXT_device_query"), 391 RETURN_ON_FAILURE(gl::GLSurfaceEGL::HasEGLExtension("EGL_EXT_device_query"),
392 "EGL_EXT_device_query missing", device_object); 392 "EGL_EXT_device_query missing", device_object);
393 393
394 PFNEGLQUERYDISPLAYATTRIBEXTPROC QueryDisplayAttribEXT = nullptr; 394 PFNEGLQUERYDISPLAYATTRIBEXTPROC QueryDisplayAttribEXT = nullptr;
395 395
396 { 396 {
397 TRACE_EVENT0("gpu", "QueryDeviceObjectFromANGLE. eglGetProcAddress"); 397 TRACE_EVENT0("gpu", "QueryDeviceObjectFromANGLE. eglGetProcAddress");
398 398
399 QueryDisplayAttribEXT = reinterpret_cast<PFNEGLQUERYDISPLAYATTRIBEXTPROC>( 399 QueryDisplayAttribEXT = reinterpret_cast<PFNEGLQUERYDISPLAYATTRIBEXTPROC>(
400 eglGetProcAddress("eglQueryDisplayAttribEXT")); 400 eglGetProcAddress("eglQueryDisplayAttribEXT"));
401 401
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 } 658 }
659 #endif 659 #endif
660 // If we don't find the MFCreateDXGIDeviceManager API we fallback to D3D9 660 // If we don't find the MFCreateDXGIDeviceManager API we fallback to D3D9
661 // decoding. 661 // decoding.
662 if (dxgi_manager_dll && !create_dxgi_device_manager_) { 662 if (dxgi_manager_dll && !create_dxgi_device_manager_) {
663 create_dxgi_device_manager_ = reinterpret_cast<CreateDXGIDeviceManager>( 663 create_dxgi_device_manager_ = reinterpret_cast<CreateDXGIDeviceManager>(
664 ::GetProcAddress(dxgi_manager_dll, "MFCreateDXGIDeviceManager")); 664 ::GetProcAddress(dxgi_manager_dll, "MFCreateDXGIDeviceManager"));
665 } 665 }
666 666
667 RETURN_AND_NOTIFY_ON_FAILURE( 667 RETURN_AND_NOTIFY_ON_FAILURE(
668 gfx::g_driver_egl.ext.b_EGL_ANGLE_surface_d3d_texture_2d_share_handle, 668 gl::g_driver_egl.ext.b_EGL_ANGLE_surface_d3d_texture_2d_share_handle,
669 "EGL_ANGLE_surface_d3d_texture_2d_share_handle unavailable", 669 "EGL_ANGLE_surface_d3d_texture_2d_share_handle unavailable",
670 PLATFORM_FAILURE, false); 670 PLATFORM_FAILURE, false);
671 671
672 RETURN_AND_NOTIFY_ON_FAILURE(gfx::GLFence::IsSupported(), 672 RETURN_AND_NOTIFY_ON_FAILURE(gl::GLFence::IsSupported(),
673 "GL fences are unsupported", PLATFORM_FAILURE, 673 "GL fences are unsupported", PLATFORM_FAILURE,
674 false); 674 false);
675 675
676 State state = GetState(); 676 State state = GetState();
677 RETURN_AND_NOTIFY_ON_FAILURE((state == kUninitialized), 677 RETURN_AND_NOTIFY_ON_FAILURE((state == kUninitialized),
678 "Initialize: invalid state: " << state, 678 "Initialize: invalid state: " << state,
679 ILLEGAL_STATE, false); 679 ILLEGAL_STATE, false);
680 680
681 media::InitializeMediaFoundation(); 681 media::InitializeMediaFoundation();
682 682
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 DCHECK(main_thread_task_runner_->BelongsToCurrentThread()); 988 DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
989 OutputBuffers::iterator it = output_picture_buffers_.find(picture_buffer_id); 989 OutputBuffers::iterator it = output_picture_buffers_.find(picture_buffer_id);
990 if (it == output_picture_buffers_.end()) 990 if (it == output_picture_buffers_.end())
991 return; 991 return;
992 992
993 DXVAPictureBuffer* picture_buffer = it->second.get(); 993 DXVAPictureBuffer* picture_buffer = it->second.get();
994 994
995 DCHECK(!picture_buffer->available()); 995 DCHECK(!picture_buffer->available());
996 DCHECK(picture_buffer->waiting_to_reuse()); 996 DCHECK(picture_buffer->waiting_to_reuse());
997 997
998 gfx::GLFence* fence = picture_buffer->reuse_fence(); 998 gl::GLFence* fence = picture_buffer->reuse_fence();
999 RETURN_AND_NOTIFY_ON_FAILURE(make_context_current_cb_.Run(), 999 RETURN_AND_NOTIFY_ON_FAILURE(make_context_current_cb_.Run(),
1000 "Failed to make context current", 1000 "Failed to make context current",
1001 PLATFORM_FAILURE, ); 1001 PLATFORM_FAILURE, );
1002 if (count <= kMaxIterationsForANGLEReuseFlush && !fence->HasCompleted()) { 1002 if (count <= kMaxIterationsForANGLEReuseFlush && !fence->HasCompleted()) {
1003 main_thread_task_runner_->PostDelayedTask( 1003 main_thread_task_runner_->PostDelayedTask(
1004 FROM_HERE, base::Bind(&DXVAVideoDecodeAccelerator::WaitForOutputBuffer, 1004 FROM_HERE, base::Bind(&DXVAVideoDecodeAccelerator::WaitForOutputBuffer,
1005 weak_this_factory_.GetWeakPtr(), 1005 weak_this_factory_.GetWeakPtr(),
1006 picture_buffer_id, count + 1), 1006 picture_buffer_id, count + 1),
1007 base::TimeDelta::FromMilliseconds(kFlushDecoderSurfaceTimeoutMs)); 1007 base::TimeDelta::FromMilliseconds(kFlushDecoderSurfaceTimeoutMs));
1008 return; 1008 return;
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 } 1420 }
1421 1421
1422 hr = decoder_->ProcessMessage(MFT_MESSAGE_SET_D3D_MANAGER, 1422 hr = decoder_->ProcessMessage(MFT_MESSAGE_SET_D3D_MANAGER,
1423 device_manager_to_use); 1423 device_manager_to_use);
1424 if (use_dx11_) { 1424 if (use_dx11_) {
1425 RETURN_ON_HR_FAILURE(hr, "Failed to pass DX11 manager to decoder", false); 1425 RETURN_ON_HR_FAILURE(hr, "Failed to pass DX11 manager to decoder", false);
1426 } else { 1426 } else {
1427 RETURN_ON_HR_FAILURE(hr, "Failed to pass D3D manager to decoder", false); 1427 RETURN_ON_HR_FAILURE(hr, "Failed to pass D3D manager to decoder", false);
1428 } 1428 }
1429 1429
1430 EGLDisplay egl_display = gfx::GLSurfaceEGL::GetHardwareDisplay(); 1430 EGLDisplay egl_display = gl::GLSurfaceEGL::GetHardwareDisplay();
1431 1431
1432 EGLint config_attribs[] = {EGL_BUFFER_SIZE, 32, 1432 EGLint config_attribs[] = {EGL_BUFFER_SIZE, 32,
1433 EGL_RED_SIZE, 8, 1433 EGL_RED_SIZE, 8,
1434 EGL_GREEN_SIZE, 8, 1434 EGL_GREEN_SIZE, 8,
1435 EGL_BLUE_SIZE, 8, 1435 EGL_BLUE_SIZE, 8,
1436 EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, 1436 EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
1437 EGL_ALPHA_SIZE, 0, 1437 EGL_ALPHA_SIZE, 0,
1438 EGL_NONE}; 1438 EGL_NONE};
1439 1439
1440 EGLint num_configs; 1440 EGLint num_configs;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1476 // this. This should always be true for Windows 8+. 1476 // this. This should always be true for Windows 8+.
1477 // 3. ANGLE is using DX11. 1477 // 3. ANGLE is using DX11.
1478 if (create_dxgi_device_manager_ && 1478 if (create_dxgi_device_manager_ &&
1479 (gl_context->GetGLRenderer().find("Direct3D11") != std::string::npos)) { 1479 (gl_context->GetGLRenderer().find("Direct3D11") != std::string::npos)) {
1480 UINT32 dx11_aware = 0; 1480 UINT32 dx11_aware = 0;
1481 attributes->GetUINT32(MF_SA_D3D11_AWARE, &dx11_aware); 1481 attributes->GetUINT32(MF_SA_D3D11_AWARE, &dx11_aware);
1482 use_dx11_ = !!dx11_aware; 1482 use_dx11_ = !!dx11_aware;
1483 } 1483 }
1484 1484
1485 use_keyed_mutex_ = 1485 use_keyed_mutex_ =
1486 use_dx11_ && gfx::GLSurfaceEGL::HasEGLExtension("EGL_ANGLE_keyed_mutex"); 1486 use_dx11_ && gl::GLSurfaceEGL::HasEGLExtension("EGL_ANGLE_keyed_mutex");
1487 1487
1488 if (!use_dx11_ || 1488 if (!use_dx11_ ||
1489 !gfx::g_driver_egl.ext.b_EGL_ANGLE_stream_producer_d3d_texture_nv12 || 1489 !gl::g_driver_egl.ext.b_EGL_ANGLE_stream_producer_d3d_texture_nv12 ||
1490 !gfx::g_driver_egl.ext.b_EGL_KHR_stream || 1490 !gl::g_driver_egl.ext.b_EGL_KHR_stream ||
1491 !gfx::g_driver_egl.ext.b_EGL_KHR_stream_consumer_gltexture || 1491 !gl::g_driver_egl.ext.b_EGL_KHR_stream_consumer_gltexture ||
1492 !gfx::g_driver_egl.ext.b_EGL_NV_stream_consumer_gltexture_yuv) { 1492 !gl::g_driver_egl.ext.b_EGL_NV_stream_consumer_gltexture_yuv) {
1493 share_nv12_textures_ = false; 1493 share_nv12_textures_ = false;
1494 } 1494 }
1495 1495
1496 return true; 1496 return true;
1497 } 1497 }
1498 1498
1499 bool DXVAVideoDecodeAccelerator::SetDecoderMediaTypes() { 1499 bool DXVAVideoDecodeAccelerator::SetDecoderMediaTypes() {
1500 RETURN_ON_FAILURE(SetDecoderInputMediaType(), 1500 RETURN_ON_FAILURE(SetDecoderInputMediaType(),
1501 "Failed to set decoder input media type", false); 1501 "Failed to set decoder input media type", false);
1502 return SetDecoderOutputMediaType(MFVideoFormat_NV12); 1502 return SetDecoderOutputMediaType(MFVideoFormat_NV12);
(...skipping 1142 matching lines...) Expand 10 before | Expand all | Expand 10 after
2645 DismissStaleBuffers(true); 2645 DismissStaleBuffers(true);
2646 Invalidate(); 2646 Invalidate();
2647 Initialize(config_, client_); 2647 Initialize(config_, client_);
2648 decoder_thread_task_runner_->PostTask( 2648 decoder_thread_task_runner_->PostTask(
2649 FROM_HERE, 2649 FROM_HERE,
2650 base::Bind(&DXVAVideoDecodeAccelerator::DecodePendingInputBuffers, 2650 base::Bind(&DXVAVideoDecodeAccelerator::DecodePendingInputBuffers,
2651 base::Unretained(this))); 2651 base::Unretained(this)));
2652 } 2652 }
2653 2653
2654 } // namespace media 2654 } // namespace media
OLDNEW
« no previous file with comments | « media/gpu/dxva_video_decode_accelerator_win.h ('k') | media/gpu/gpu_video_decode_accelerator_factory_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698