OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "ui/gl/gl_image_dxgi.h" | 5 #include "ui/gl/gl_image_dxgi.h" |
6 | 6 |
7 #include <d3d11_1.h> | |
8 | |
9 #include "third_party/khronos/EGL/egl.h" | 7 #include "third_party/khronos/EGL/egl.h" |
10 #include "third_party/khronos/EGL/eglext.h" | 8 #include "third_party/khronos/EGL/eglext.h" |
11 #include "ui/gl/gl_angle_util_win.h" | |
12 #include "ui/gl/gl_bindings.h" | 9 #include "ui/gl/gl_bindings.h" |
13 #include "ui/gl/gl_image.h" | 10 #include "ui/gl/gl_image.h" |
14 #include "ui/gl/gl_surface_egl.h" | 11 #include "ui/gl/gl_surface_egl.h" |
15 | 12 |
16 namespace gl { | 13 namespace gl { |
17 | 14 |
18 GLImageDXGIBase::GLImageDXGIBase(const gfx::Size& size) : size_(size) {} | 15 GLImageDXGI::GLImageDXGI(const gfx::Size& size, EGLStreamKHR stream) |
| 16 : size_(size), stream_(stream) {} |
19 | 17 |
20 // static | 18 // static |
21 GLImageDXGIBase* GLImageDXGIBase::FromGLImage(GLImage* image) { | 19 GLImageDXGI* GLImageDXGI::FromGLImage(GLImage* image) { |
22 if (!image || image->GetType() != Type::DXGI_IMAGE) | 20 if (!image || image->GetType() != Type::DXGI_IMAGE) |
23 return nullptr; | 21 return nullptr; |
24 return static_cast<GLImageDXGIBase*>(image); | 22 return static_cast<GLImageDXGI*>(image); |
25 } | 23 } |
26 | 24 |
27 gfx::Size GLImageDXGIBase::GetSize() { | 25 gfx::Size GLImageDXGI::GetSize() { |
28 return size_; | 26 return size_; |
29 } | 27 } |
30 | 28 |
31 unsigned GLImageDXGIBase::GetInternalFormat() { | 29 unsigned GLImageDXGI::GetInternalFormat() { |
32 return GL_BGRA_EXT; | 30 return GL_BGRA_EXT; |
33 } | 31 } |
34 | 32 |
35 bool GLImageDXGIBase::BindTexImage(unsigned target) { | |
36 return false; | |
37 } | |
38 | |
39 void GLImageDXGIBase::ReleaseTexImage(unsigned target) {} | |
40 | |
41 bool GLImageDXGIBase::CopyTexImage(unsigned target) { | |
42 return false; | |
43 } | |
44 | |
45 bool GLImageDXGIBase::CopyTexSubImage(unsigned target, | |
46 const gfx::Point& offset, | |
47 const gfx::Rect& rect) { | |
48 return false; | |
49 } | |
50 | |
51 bool GLImageDXGIBase::ScheduleOverlayPlane(gfx::AcceleratedWidget widget, | |
52 int z_order, | |
53 gfx::OverlayTransform transform, | |
54 const gfx::Rect& bounds_rect, | |
55 const gfx::RectF& crop_rect) { | |
56 return false; | |
57 } | |
58 | |
59 void GLImageDXGIBase::Flush() {} | |
60 | |
61 void GLImageDXGIBase::OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd, | |
62 uint64_t process_tracing_id, | |
63 const std::string& dump_name) {} | |
64 | |
65 GLImage::Type GLImageDXGIBase::GetType() const { | |
66 return Type::DXGI_IMAGE; | |
67 } | |
68 | |
69 GLImageDXGIBase::~GLImageDXGIBase() {} | |
70 | |
71 GLImageDXGI::GLImageDXGI(const gfx::Size& size, EGLStreamKHR stream) | |
72 : GLImageDXGIBase(size), stream_(stream) {} | |
73 | |
74 bool GLImageDXGI::BindTexImage(unsigned target) { | 33 bool GLImageDXGI::BindTexImage(unsigned target) { |
75 return true; | 34 return true; |
76 } | 35 } |
77 | 36 |
| 37 void GLImageDXGI::ReleaseTexImage(unsigned target) {} |
| 38 |
| 39 bool GLImageDXGI::CopyTexImage(unsigned target) { |
| 40 return false; |
| 41 } |
| 42 |
| 43 bool GLImageDXGI::CopyTexSubImage(unsigned target, |
| 44 const gfx::Point& offset, |
| 45 const gfx::Rect& rect) { |
| 46 return false; |
| 47 } |
| 48 |
| 49 bool GLImageDXGI::ScheduleOverlayPlane(gfx::AcceleratedWidget widget, |
| 50 int z_order, |
| 51 gfx::OverlayTransform transform, |
| 52 const gfx::Rect& bounds_rect, |
| 53 const gfx::RectF& crop_rect) { |
| 54 return false; |
| 55 } |
| 56 |
| 57 void GLImageDXGI::Flush() {} |
| 58 |
| 59 void GLImageDXGI::OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd, |
| 60 uint64_t process_tracing_id, |
| 61 const std::string& dump_name) {} |
| 62 |
| 63 GLImage::Type GLImageDXGI::GetType() const { |
| 64 return Type::DXGI_IMAGE; |
| 65 } |
| 66 |
78 void GLImageDXGI::SetTexture( | 67 void GLImageDXGI::SetTexture( |
79 const base::win::ScopedComPtr<ID3D11Texture2D>& texture, | 68 const base::win::ScopedComPtr<ID3D11Texture2D>& texture, |
80 size_t level) { | 69 size_t level) { |
81 texture_ = texture; | 70 texture_ = texture; |
82 level_ = level; | 71 level_ = level; |
83 } | 72 } |
84 | 73 |
85 GLImageDXGI::~GLImageDXGI() { | 74 GLImageDXGI::~GLImageDXGI() { |
86 EGLDisplay egl_display = gl::GLSurfaceEGL::GetHardwareDisplay(); | 75 EGLDisplay egl_display = gl::GLSurfaceEGL::GetHardwareDisplay(); |
87 eglDestroyStreamKHR(egl_display, stream_); | 76 eglDestroyStreamKHR(egl_display, stream_); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 if (FAILED(hr)) { | 185 if (FAILED(hr)) { |
197 DLOG(ERROR) << "Failed to process video"; | 186 DLOG(ERROR) << "Failed to process video"; |
198 return false; | 187 return false; |
199 } | 188 } |
200 copied_ = true; | 189 copied_ = true; |
201 return true; | 190 return true; |
202 } | 191 } |
203 | 192 |
204 CopyingGLImageDXGI::~CopyingGLImageDXGI() {} | 193 CopyingGLImageDXGI::~CopyingGLImageDXGI() {} |
205 | 194 |
206 GLImageDXGIHandle::GLImageDXGIHandle(const gfx::Size& size, | |
207 base::win::ScopedHandle handle, | |
208 uint32_t level) | |
209 : GLImageDXGIBase(size), handle_(std::move(handle)) { | |
210 level_ = level; | |
211 } | |
212 | |
213 bool GLImageDXGIHandle::Initialize() { | |
214 base::win::ScopedComPtr<ID3D11Device> d3d11_device = | |
215 QueryD3D11DeviceObjectFromANGLE(); | |
216 if (!d3d11_device) | |
217 return false; | |
218 | |
219 base::win::ScopedComPtr<ID3D11Device1> d3d11_device1; | |
220 if (FAILED(d3d11_device.CopyTo(d3d11_device1.GetAddressOf()))) | |
221 return false; | |
222 | |
223 if (FAILED(d3d11_device1->OpenSharedResource1( | |
224 handle_.Get(), IID_PPV_ARGS(texture_.GetAddressOf())))) { | |
225 return false; | |
226 } | |
227 D3D11_TEXTURE2D_DESC desc; | |
228 texture_->GetDesc(&desc); | |
229 if (desc.Format != DXGI_FORMAT_NV12 || desc.ArraySize <= level_) | |
230 return false; | |
231 return true; | |
232 } | |
233 | |
234 GLImageDXGIHandle::~GLImageDXGIHandle() {} | |
235 | |
236 } // namespace gl | 195 } // namespace gl |
OLD | NEW |