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 "third_party/khronos/EGL/egl.h" | 7 #include "third_party/khronos/EGL/egl.h" |
8 #include "third_party/khronos/EGL/eglext.h" | 8 #include "third_party/khronos/EGL/eglext.h" |
9 #include "ui/gl/gl_bindings.h" | 9 #include "ui/gl/gl_bindings.h" |
10 #include "ui/gl/gl_image.h" | 10 #include "ui/gl/gl_image.h" |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 if (!result) | 111 if (!result) |
112 return false; | 112 return false; |
113 result = eglStreamConsumerAcquireKHR(egl_display, stream_); | 113 result = eglStreamConsumerAcquireKHR(egl_display, stream_); |
114 if (!result) | 114 if (!result) |
115 return false; | 115 return false; |
116 | 116 |
117 d3d11_device_.CopyTo(video_device_.GetAddressOf()); | 117 d3d11_device_.CopyTo(video_device_.GetAddressOf()); |
118 base::win::ScopedComPtr<ID3D11DeviceContext> context; | 118 base::win::ScopedComPtr<ID3D11DeviceContext> context; |
119 d3d11_device_->GetImmediateContext(context.GetAddressOf()); | 119 d3d11_device_->GetImmediateContext(context.GetAddressOf()); |
120 context.CopyTo(video_context_.GetAddressOf()); | 120 context.CopyTo(video_context_.GetAddressOf()); |
| 121 |
| 122 base::win::ScopedComPtr<ID3D10Multithread> multithread; |
| 123 d3d11_device_.CopyTo(multithread.GetAddressOf()); |
| 124 CHECK(multithread->GetMultithreadProtected()); |
121 return true; | 125 return true; |
122 } | 126 } |
123 | 127 |
124 bool CopyingGLImageDXGI::InitializeVideoProcessor( | 128 bool CopyingGLImageDXGI::InitializeVideoProcessor( |
125 const base::win::ScopedComPtr<ID3D11VideoProcessor>& video_processor, | 129 const base::win::ScopedComPtr<ID3D11VideoProcessor>& video_processor, |
126 const base::win::ScopedComPtr<ID3D11VideoProcessorEnumerator>& enumerator) { | 130 const base::win::ScopedComPtr<ID3D11VideoProcessorEnumerator>& enumerator) { |
127 output_view_.Reset(); | 131 output_view_.Reset(); |
128 | 132 |
| 133 base::win::ScopedComPtr<ID3D11Device> processor_device; |
| 134 video_processor->GetDevice(processor_device.GetAddressOf()); |
| 135 CHECK_EQ(d3d11_device_.Get(), processor_device.Get()); |
| 136 |
129 d3d11_processor_ = video_processor; | 137 d3d11_processor_ = video_processor; |
130 enumerator_ = enumerator; | 138 enumerator_ = enumerator; |
131 D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC output_view_desc = { | 139 D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC output_view_desc = { |
132 D3D11_VPOV_DIMENSION_TEXTURE2D}; | 140 D3D11_VPOV_DIMENSION_TEXTURE2D}; |
133 output_view_desc.Texture2D.MipSlice = 0; | 141 output_view_desc.Texture2D.MipSlice = 0; |
134 base::win::ScopedComPtr<ID3D11VideoProcessorOutputView> output_view; | 142 base::win::ScopedComPtr<ID3D11VideoProcessorOutputView> output_view; |
135 HRESULT hr = video_device_->CreateVideoProcessorOutputView( | 143 HRESULT hr = video_device_->CreateVideoProcessorOutputView( |
136 decoder_copy_texture_.Get(), enumerator_.Get(), &output_view_desc, | 144 decoder_copy_texture_.Get(), enumerator_.Get(), &output_view_desc, |
137 output_view_.GetAddressOf()); | 145 output_view_.GetAddressOf()); |
138 if (FAILED(hr)) { | 146 if (FAILED(hr)) { |
139 DLOG(ERROR) << "Failed to get output view"; | 147 DLOG(ERROR) << "Failed to get output view"; |
140 return false; | 148 return false; |
141 } | 149 } |
142 return true; | 150 return true; |
143 } | 151 } |
144 | 152 |
145 void CopyingGLImageDXGI::UnbindFromTexture() { | 153 void CopyingGLImageDXGI::UnbindFromTexture() { |
146 copied_ = false; | 154 copied_ = false; |
147 } | 155 } |
148 | 156 |
149 bool CopyingGLImageDXGI::BindTexImage(unsigned target) { | 157 bool CopyingGLImageDXGI::BindTexImage(unsigned target) { |
150 if (copied_) | 158 if (copied_) |
151 return true; | 159 return true; |
152 | 160 |
| 161 CHECK(video_device_); |
| 162 base::win::ScopedComPtr<ID3D11Device> texture_device; |
| 163 texture_->GetDevice(texture_device.GetAddressOf()); |
| 164 CHECK_EQ(d3d11_device_.Get(), texture_device.Get()); |
| 165 |
153 D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC input_view_desc = {0}; | 166 D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC input_view_desc = {0}; |
154 input_view_desc.ViewDimension = D3D11_VPIV_DIMENSION_TEXTURE2D; | 167 input_view_desc.ViewDimension = D3D11_VPIV_DIMENSION_TEXTURE2D; |
155 input_view_desc.Texture2D.ArraySlice = (UINT)level_; | 168 input_view_desc.Texture2D.ArraySlice = (UINT)level_; |
156 input_view_desc.Texture2D.MipSlice = 0; | 169 input_view_desc.Texture2D.MipSlice = 0; |
157 base::win::ScopedComPtr<ID3D11VideoProcessorInputView> input_view; | 170 base::win::ScopedComPtr<ID3D11VideoProcessorInputView> input_view; |
158 HRESULT hr = video_device_->CreateVideoProcessorInputView( | 171 HRESULT hr = video_device_->CreateVideoProcessorInputView( |
159 texture_.Get(), enumerator_.Get(), &input_view_desc, | 172 texture_.Get(), enumerator_.Get(), &input_view_desc, |
160 input_view.GetAddressOf()); | 173 input_view.GetAddressOf()); |
161 if (FAILED(hr)) { | 174 if (FAILED(hr)) { |
162 DLOG(ERROR) << "Failed to create video processor input view."; | 175 DLOG(ERROR) << "Failed to create video processor input view."; |
(...skipping 10 matching lines...) Expand all Loading... |
173 DLOG(ERROR) << "Failed to process video"; | 186 DLOG(ERROR) << "Failed to process video"; |
174 return false; | 187 return false; |
175 } | 188 } |
176 copied_ = true; | 189 copied_ = true; |
177 return true; | 190 return true; |
178 } | 191 } |
179 | 192 |
180 CopyingGLImageDXGI::~CopyingGLImageDXGI() {} | 193 CopyingGLImageDXGI::~CopyingGLImageDXGI() {} |
181 | 194 |
182 } // namespace gl | 195 } // namespace gl |
OLD | NEW |