| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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_picture_buffer_win.h" | 5 #include "media/gpu/dxva_picture_buffer_win.h" |
| 6 | 6 |
| 7 #include "media/gpu/dxva_video_decode_accelerator_win.h" | 7 #include "media/gpu/dxva_video_decode_accelerator_win.h" |
| 8 #include "third_party/angle/include/EGL/egl.h" | 8 #include "third_party/angle/include/EGL/egl.h" |
| 9 #include "third_party/angle/include/EGL/eglext.h" | 9 #include "third_party/angle/include/EGL/eglext.h" |
| 10 #include "ui/gl/gl_bindings.h" | 10 #include "ui/gl/gl_bindings.h" |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; | 233 desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; |
| 234 desc.CPUAccessFlags = 0; | 234 desc.CPUAccessFlags = 0; |
| 235 desc.MiscFlags = decoder.use_keyed_mutex_ | 235 desc.MiscFlags = decoder.use_keyed_mutex_ |
| 236 ? D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX | 236 ? D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX |
| 237 : D3D11_RESOURCE_MISC_SHARED; | 237 : D3D11_RESOURCE_MISC_SHARED; |
| 238 | 238 |
| 239 HRESULT hr = decoder.d3d11_device_->CreateTexture2D( | 239 HRESULT hr = decoder.d3d11_device_->CreateTexture2D( |
| 240 &desc, nullptr, dx11_decoding_texture_.Receive()); | 240 &desc, nullptr, dx11_decoding_texture_.Receive()); |
| 241 RETURN_ON_HR_FAILURE(hr, "Failed to create texture", false); | 241 RETURN_ON_HR_FAILURE(hr, "Failed to create texture", false); |
| 242 if (decoder.use_keyed_mutex_) { | 242 if (decoder.use_keyed_mutex_) { |
| 243 hr = dx11_keyed_mutex_.QueryFrom(dx11_decoding_texture_.get()); | 243 hr = dx11_keyed_mutex_.QueryFrom(dx11_decoding_texture_.Get()); |
| 244 RETURN_ON_HR_FAILURE(hr, "Failed to get keyed mutex", false); | 244 RETURN_ON_HR_FAILURE(hr, "Failed to get keyed mutex", false); |
| 245 } | 245 } |
| 246 | 246 |
| 247 base::win::ScopedComPtr<IDXGIResource> resource; | 247 base::win::ScopedComPtr<IDXGIResource> resource; |
| 248 hr = resource.QueryFrom(dx11_decoding_texture_.get()); | 248 hr = resource.QueryFrom(dx11_decoding_texture_.Get()); |
| 249 DCHECK(SUCCEEDED(hr)); | 249 DCHECK(SUCCEEDED(hr)); |
| 250 hr = resource->GetSharedHandle(&texture_share_handle_); | 250 hr = resource->GetSharedHandle(&texture_share_handle_); |
| 251 RETURN_ON_FAILURE(SUCCEEDED(hr) && texture_share_handle_, | 251 RETURN_ON_FAILURE(SUCCEEDED(hr) && texture_share_handle_, |
| 252 "Failed to query shared handle", false); | 252 "Failed to query shared handle", false); |
| 253 | 253 |
| 254 } else { | 254 } else { |
| 255 HRESULT hr = E_FAIL; | 255 HRESULT hr = E_FAIL; |
| 256 hr = decoder.d3d9_device_ex_->CreateTexture( | 256 hr = decoder.d3d9_device_ex_->CreateTexture( |
| 257 picture_buffer_.size().width(), picture_buffer_.size().height(), 1, | 257 picture_buffer_.size().width(), picture_buffer_.size().height(), 1, |
| 258 D3DUSAGE_RENDERTARGET, use_rgb ? D3DFMT_X8R8G8B8 : D3DFMT_A8R8G8B8, | 258 D3DUSAGE_RENDERTARGET, use_rgb ? D3DFMT_X8R8G8B8 : D3DFMT_A8R8G8B8, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 279 ID3D11Texture2D* dx11_texture, | 279 ID3D11Texture2D* dx11_texture, |
| 280 int input_buffer_id) { | 280 int input_buffer_id) { |
| 281 DCHECK_EQ(BOUND, state_); | 281 DCHECK_EQ(BOUND, state_); |
| 282 state_ = COPYING; | 282 state_ = COPYING; |
| 283 DCHECK(dest_surface || dx11_texture); | 283 DCHECK(dest_surface || dx11_texture); |
| 284 if (dx11_texture) { | 284 if (dx11_texture) { |
| 285 // Grab a reference on the decoder texture. This reference will be released | 285 // Grab a reference on the decoder texture. This reference will be released |
| 286 // when we receive a notification that the copy was completed or when the | 286 // when we receive a notification that the copy was completed or when the |
| 287 // DXVAPictureBuffer instance is destroyed. | 287 // DXVAPictureBuffer instance is destroyed. |
| 288 decoder_dx11_texture_ = dx11_texture; | 288 decoder_dx11_texture_ = dx11_texture; |
| 289 decoder->CopyTexture(dx11_texture, dx11_decoding_texture_.get(), | 289 decoder->CopyTexture(dx11_texture, dx11_decoding_texture_.Get(), |
| 290 dx11_keyed_mutex_, keyed_mutex_value_, id(), | 290 dx11_keyed_mutex_, keyed_mutex_value_, id(), |
| 291 input_buffer_id, color_space_); | 291 input_buffer_id, color_space_); |
| 292 return true; | 292 return true; |
| 293 } | 293 } |
| 294 D3DSURFACE_DESC surface_desc; | 294 D3DSURFACE_DESC surface_desc; |
| 295 HRESULT hr = dest_surface->GetDesc(&surface_desc); | 295 HRESULT hr = dest_surface->GetDesc(&surface_desc); |
| 296 RETURN_ON_HR_FAILURE(hr, "Failed to get surface description", false); | 296 RETURN_ON_HR_FAILURE(hr, "Failed to get surface description", false); |
| 297 | 297 |
| 298 D3DSURFACE_DESC texture_desc; | 298 D3DSURFACE_DESC texture_desc; |
| 299 decoding_texture_->GetLevelDesc(0, &texture_desc); | 299 decoding_texture_->GetLevelDesc(0, &texture_desc); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 316 | 316 |
| 317 // Grab a reference on the decoder surface and the target surface. These | 317 // Grab a reference on the decoder surface and the target surface. These |
| 318 // references will be released when we receive a notification that the | 318 // references will be released when we receive a notification that the |
| 319 // copy was completed or when the DXVAPictureBuffer instance is destroyed. | 319 // copy was completed or when the DXVAPictureBuffer instance is destroyed. |
| 320 // We hold references here as it is easier to manage their lifetimes. | 320 // We hold references here as it is easier to manage their lifetimes. |
| 321 hr = decoding_texture_->GetSurfaceLevel(0, target_surface_.Receive()); | 321 hr = decoding_texture_->GetSurfaceLevel(0, target_surface_.Receive()); |
| 322 RETURN_ON_HR_FAILURE(hr, "Failed to get surface from texture", false); | 322 RETURN_ON_HR_FAILURE(hr, "Failed to get surface from texture", false); |
| 323 | 323 |
| 324 decoder_surface_ = dest_surface; | 324 decoder_surface_ = dest_surface; |
| 325 | 325 |
| 326 decoder->CopySurface(decoder_surface_.get(), target_surface_.get(), id(), | 326 decoder->CopySurface(decoder_surface_.Get(), target_surface_.Get(), id(), |
| 327 input_buffer_id, color_space_); | 327 input_buffer_id, color_space_); |
| 328 color_space_ = gfx::ColorSpace(); | 328 color_space_ = gfx::ColorSpace(); |
| 329 return true; | 329 return true; |
| 330 } | 330 } |
| 331 | 331 |
| 332 gl::GLFence* PbufferPictureBuffer::reuse_fence() { | 332 gl::GLFence* PbufferPictureBuffer::reuse_fence() { |
| 333 return reuse_fence_.get(); | 333 return reuse_fence_.get(); |
| 334 } | 334 } |
| 335 | 335 |
| 336 bool PbufferPictureBuffer::CopySurfaceComplete( | 336 bool PbufferPictureBuffer::CopySurfaceComplete( |
| 337 IDirect3DSurface9* src_surface, | 337 IDirect3DSurface9* src_surface, |
| 338 IDirect3DSurface9* dest_surface) { | 338 IDirect3DSurface9* dest_surface) { |
| 339 DCHECK_EQ(COPYING, state_); | 339 DCHECK_EQ(COPYING, state_); |
| 340 state_ = IN_CLIENT; | 340 state_ = IN_CLIENT; |
| 341 | 341 |
| 342 GLint current_texture = 0; | 342 GLint current_texture = 0; |
| 343 glGetIntegerv(GL_TEXTURE_BINDING_2D, ¤t_texture); | 343 glGetIntegerv(GL_TEXTURE_BINDING_2D, ¤t_texture); |
| 344 | 344 |
| 345 glBindTexture(GL_TEXTURE_2D, picture_buffer_.service_texture_ids()[0]); | 345 glBindTexture(GL_TEXTURE_2D, picture_buffer_.service_texture_ids()[0]); |
| 346 | 346 |
| 347 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | 347 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
| 348 | 348 |
| 349 if (src_surface && dest_surface) { | 349 if (src_surface && dest_surface) { |
| 350 DCHECK_EQ(src_surface, decoder_surface_.get()); | 350 DCHECK_EQ(src_surface, decoder_surface_.Get()); |
| 351 DCHECK_EQ(dest_surface, target_surface_.get()); | 351 DCHECK_EQ(dest_surface, target_surface_.Get()); |
| 352 decoder_surface_.Reset(); | 352 decoder_surface_.Reset(); |
| 353 target_surface_.Reset(); | 353 target_surface_.Reset(); |
| 354 } else { | 354 } else { |
| 355 DCHECK(decoder_dx11_texture_.get()); | 355 DCHECK(decoder_dx11_texture_.Get()); |
| 356 decoder_dx11_texture_.Reset(); | 356 decoder_dx11_texture_.Reset(); |
| 357 } | 357 } |
| 358 if (egl_keyed_mutex_) { | 358 if (egl_keyed_mutex_) { |
| 359 keyed_mutex_value_++; | 359 keyed_mutex_value_++; |
| 360 HRESULT result = | 360 HRESULT result = |
| 361 egl_keyed_mutex_->AcquireSync(keyed_mutex_value_, kAcquireSyncWaitMs); | 361 egl_keyed_mutex_->AcquireSync(keyed_mutex_value_, kAcquireSyncWaitMs); |
| 362 RETURN_ON_FAILURE(result == S_OK, "Could not acquire sync mutex", false); | 362 RETURN_ON_FAILURE(result == S_OK, "Could not acquire sync mutex", false); |
| 363 } | 363 } |
| 364 | 364 |
| 365 EGLDisplay egl_display = gl::GLSurfaceEGL::GetHardwareDisplay(); | 365 EGLDisplay egl_display = gl::GLSurfaceEGL::GetHardwareDisplay(); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 479 | 479 |
| 480 current_d3d_sample_ = sample; | 480 current_d3d_sample_ = sample; |
| 481 EGLDisplay egl_display = gl::GLSurfaceEGL::GetHardwareDisplay(); | 481 EGLDisplay egl_display = gl::GLSurfaceEGL::GetHardwareDisplay(); |
| 482 | 482 |
| 483 base::win::ScopedComPtr<IMFMediaBuffer> output_buffer; | 483 base::win::ScopedComPtr<IMFMediaBuffer> output_buffer; |
| 484 HRESULT hr = | 484 HRESULT hr = |
| 485 current_d3d_sample_->GetBufferByIndex(0, output_buffer.Receive()); | 485 current_d3d_sample_->GetBufferByIndex(0, output_buffer.Receive()); |
| 486 RETURN_ON_HR_FAILURE(hr, "Failed to get buffer from output sample", false); | 486 RETURN_ON_HR_FAILURE(hr, "Failed to get buffer from output sample", false); |
| 487 | 487 |
| 488 base::win::ScopedComPtr<IMFDXGIBuffer> dxgi_buffer; | 488 base::win::ScopedComPtr<IMFDXGIBuffer> dxgi_buffer; |
| 489 hr = dxgi_buffer.QueryFrom(output_buffer.get()); | 489 hr = dxgi_buffer.QueryFrom(output_buffer.Get()); |
| 490 RETURN_ON_HR_FAILURE(hr, "Failed to get DXGIBuffer from output sample", | 490 RETURN_ON_HR_FAILURE(hr, "Failed to get DXGIBuffer from output sample", |
| 491 false); | 491 false); |
| 492 hr = dxgi_buffer->GetResource(IID_PPV_ARGS(dx11_decoding_texture_.Receive())); | 492 hr = dxgi_buffer->GetResource(IID_PPV_ARGS(dx11_decoding_texture_.Receive())); |
| 493 RETURN_ON_HR_FAILURE(hr, "Failed to get texture from output sample", false); | 493 RETURN_ON_HR_FAILURE(hr, "Failed to get texture from output sample", false); |
| 494 UINT subresource; | 494 UINT subresource; |
| 495 dxgi_buffer->GetSubresourceIndex(&subresource); | 495 dxgi_buffer->GetSubresourceIndex(&subresource); |
| 496 | 496 |
| 497 EGLAttrib frame_attributes[] = { | 497 EGLAttrib frame_attributes[] = { |
| 498 EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE, subresource, EGL_NONE, | 498 EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE, subresource, EGL_NONE, |
| 499 }; | 499 }; |
| 500 | 500 |
| 501 EGLBoolean result = eglStreamPostD3DTextureNV12ANGLE( | 501 EGLBoolean result = eglStreamPostD3DTextureNV12ANGLE( |
| 502 egl_display, stream_, static_cast<void*>(dx11_decoding_texture_.get()), | 502 egl_display, stream_, static_cast<void*>(dx11_decoding_texture_.Get()), |
| 503 frame_attributes); | 503 frame_attributes); |
| 504 RETURN_ON_FAILURE(result, "Could not post texture", false); | 504 RETURN_ON_FAILURE(result, "Could not post texture", false); |
| 505 result = eglStreamConsumerAcquireKHR(egl_display, stream_); | 505 result = eglStreamConsumerAcquireKHR(egl_display, stream_); |
| 506 RETURN_ON_FAILURE(result, "Could not post acquire stream", false); | 506 RETURN_ON_FAILURE(result, "Could not post acquire stream", false); |
| 507 gl::GLImageDXGI* gl_image_dxgi = | 507 gl::GLImageDXGI* gl_image_dxgi = |
| 508 gl::GLImageDXGI::FromGLImage(gl_image_.get()); | 508 gl::GLImageDXGI::FromGLImage(gl_image_.get()); |
| 509 DCHECK(gl_image_dxgi); | 509 DCHECK(gl_image_dxgi); |
| 510 | 510 |
| 511 gl_image_dxgi->SetTexture(dx11_decoding_texture_, subresource); | 511 gl_image_dxgi->SetTexture(dx11_decoding_texture_, subresource); |
| 512 return true; | 512 return true; |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 581 desc.SampleDesc.Quality = 0; | 581 desc.SampleDesc.Quality = 0; |
| 582 desc.Usage = D3D11_USAGE_DEFAULT; | 582 desc.Usage = D3D11_USAGE_DEFAULT; |
| 583 desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; | 583 desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; |
| 584 desc.CPUAccessFlags = 0; | 584 desc.CPUAccessFlags = 0; |
| 585 desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX; | 585 desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX; |
| 586 | 586 |
| 587 HRESULT hr = decoder.d3d11_device_->CreateTexture2D( | 587 HRESULT hr = decoder.d3d11_device_->CreateTexture2D( |
| 588 &desc, nullptr, decoder_copy_texture_.Receive()); | 588 &desc, nullptr, decoder_copy_texture_.Receive()); |
| 589 RETURN_ON_HR_FAILURE(hr, "Failed to create texture", false); | 589 RETURN_ON_HR_FAILURE(hr, "Failed to create texture", false); |
| 590 DCHECK(decoder.use_keyed_mutex_); | 590 DCHECK(decoder.use_keyed_mutex_); |
| 591 hr = dx11_keyed_mutex_.QueryFrom(decoder_copy_texture_.get()); | 591 hr = dx11_keyed_mutex_.QueryFrom(decoder_copy_texture_.Get()); |
| 592 RETURN_ON_HR_FAILURE(hr, "Failed to get keyed mutex", false); | 592 RETURN_ON_HR_FAILURE(hr, "Failed to get keyed mutex", false); |
| 593 | 593 |
| 594 base::win::ScopedComPtr<IDXGIResource> resource; | 594 base::win::ScopedComPtr<IDXGIResource> resource; |
| 595 hr = resource.QueryFrom(decoder_copy_texture_.get()); | 595 hr = resource.QueryFrom(decoder_copy_texture_.Get()); |
| 596 DCHECK(SUCCEEDED(hr)); | 596 DCHECK(SUCCEEDED(hr)); |
| 597 hr = resource->GetSharedHandle(&texture_share_handle_); | 597 hr = resource->GetSharedHandle(&texture_share_handle_); |
| 598 RETURN_ON_FAILURE(SUCCEEDED(hr) && texture_share_handle_, | 598 RETURN_ON_FAILURE(SUCCEEDED(hr) && texture_share_handle_, |
| 599 "Failed to query shared handle", false); | 599 "Failed to query shared handle", false); |
| 600 | 600 |
| 601 hr = decoder.angle_device_->OpenSharedResource( | 601 hr = decoder.angle_device_->OpenSharedResource( |
| 602 texture_share_handle_, IID_PPV_ARGS(angle_copy_texture_.Receive())); | 602 texture_share_handle_, IID_PPV_ARGS(angle_copy_texture_.Receive())); |
| 603 RETURN_ON_HR_FAILURE(hr, "Failed to open shared resource", false); | 603 RETURN_ON_HR_FAILURE(hr, "Failed to open shared resource", false); |
| 604 hr = egl_keyed_mutex_.QueryFrom(angle_copy_texture_.get()); | 604 hr = egl_keyed_mutex_.QueryFrom(angle_copy_texture_.Get()); |
| 605 RETURN_ON_HR_FAILURE(hr, "Failed to get ANGLE mutex", false); | 605 RETURN_ON_HR_FAILURE(hr, "Failed to get ANGLE mutex", false); |
| 606 return true; | 606 return true; |
| 607 } | 607 } |
| 608 | 608 |
| 609 bool EGLStreamCopyPictureBuffer::CopyOutputSampleDataToPictureBuffer( | 609 bool EGLStreamCopyPictureBuffer::CopyOutputSampleDataToPictureBuffer( |
| 610 DXVAVideoDecodeAccelerator* decoder, | 610 DXVAVideoDecodeAccelerator* decoder, |
| 611 IDirect3DSurface9* dest_surface, | 611 IDirect3DSurface9* dest_surface, |
| 612 ID3D11Texture2D* dx11_texture, | 612 ID3D11Texture2D* dx11_texture, |
| 613 int input_buffer_id) { | 613 int input_buffer_id) { |
| 614 DCHECK_EQ(BOUND, state_); | 614 DCHECK_EQ(BOUND, state_); |
| 615 state_ = COPYING; | 615 state_ = COPYING; |
| 616 DCHECK(dx11_texture); | 616 DCHECK(dx11_texture); |
| 617 // Grab a reference on the decoder texture. This reference will be released | 617 // Grab a reference on the decoder texture. This reference will be released |
| 618 // when we receive a notification that the copy was completed or when the | 618 // when we receive a notification that the copy was completed or when the |
| 619 // DXVAPictureBuffer instance is destroyed. | 619 // DXVAPictureBuffer instance is destroyed. |
| 620 dx11_decoding_texture_ = dx11_texture; | 620 dx11_decoding_texture_ = dx11_texture; |
| 621 decoder->CopyTexture(dx11_texture, decoder_copy_texture_.get(), | 621 decoder->CopyTexture(dx11_texture, decoder_copy_texture_.Get(), |
| 622 dx11_keyed_mutex_, keyed_mutex_value_, id(), | 622 dx11_keyed_mutex_, keyed_mutex_value_, id(), |
| 623 input_buffer_id, color_space_); | 623 input_buffer_id, color_space_); |
| 624 // The texture copy will acquire the current keyed mutex value and release | 624 // The texture copy will acquire the current keyed mutex value and release |
| 625 // with the value + 1. | 625 // with the value + 1. |
| 626 keyed_mutex_value_++; | 626 keyed_mutex_value_++; |
| 627 return true; | 627 return true; |
| 628 } | 628 } |
| 629 | 629 |
| 630 bool EGLStreamCopyPictureBuffer::CopySurfaceComplete( | 630 bool EGLStreamCopyPictureBuffer::CopySurfaceComplete( |
| 631 IDirect3DSurface9* src_surface, | 631 IDirect3DSurface9* src_surface, |
| 632 IDirect3DSurface9* dest_surface) { | 632 IDirect3DSurface9* dest_surface) { |
| 633 DCHECK(!src_surface); | 633 DCHECK(!src_surface); |
| 634 DCHECK(!dest_surface); | 634 DCHECK(!dest_surface); |
| 635 DCHECK_EQ(COPYING, state_); | 635 DCHECK_EQ(COPYING, state_); |
| 636 state_ = IN_CLIENT; | 636 state_ = IN_CLIENT; |
| 637 | 637 |
| 638 dx11_decoding_texture_.Reset(); | 638 dx11_decoding_texture_.Reset(); |
| 639 | 639 |
| 640 HRESULT hr = | 640 HRESULT hr = |
| 641 egl_keyed_mutex_->AcquireSync(keyed_mutex_value_, kAcquireSyncWaitMs); | 641 egl_keyed_mutex_->AcquireSync(keyed_mutex_value_, kAcquireSyncWaitMs); |
| 642 RETURN_ON_FAILURE(hr == S_OK, "Could not acquire sync mutex", false); | 642 RETURN_ON_FAILURE(hr == S_OK, "Could not acquire sync mutex", false); |
| 643 | 643 |
| 644 EGLAttrib frame_attributes[] = { | 644 EGLAttrib frame_attributes[] = { |
| 645 EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE, 0, EGL_NONE, | 645 EGL_D3D_TEXTURE_SUBRESOURCE_ID_ANGLE, 0, EGL_NONE, |
| 646 }; | 646 }; |
| 647 | 647 |
| 648 EGLDisplay egl_display = gl::GLSurfaceEGL::GetHardwareDisplay(); | 648 EGLDisplay egl_display = gl::GLSurfaceEGL::GetHardwareDisplay(); |
| 649 | 649 |
| 650 EGLBoolean result = eglStreamPostD3DTextureNV12ANGLE( | 650 EGLBoolean result = eglStreamPostD3DTextureNV12ANGLE( |
| 651 egl_display, stream_, static_cast<void*>(angle_copy_texture_.get()), | 651 egl_display, stream_, static_cast<void*>(angle_copy_texture_.Get()), |
| 652 frame_attributes); | 652 frame_attributes); |
| 653 RETURN_ON_FAILURE(result, "Could not post stream", false); | 653 RETURN_ON_FAILURE(result, "Could not post stream", false); |
| 654 result = eglStreamConsumerAcquireKHR(egl_display, stream_); | 654 result = eglStreamConsumerAcquireKHR(egl_display, stream_); |
| 655 RETURN_ON_FAILURE(result, "Could not post acquire stream", false); | 655 RETURN_ON_FAILURE(result, "Could not post acquire stream", false); |
| 656 gl::GLImageDXGI* gl_image_dxgi = | 656 gl::GLImageDXGI* gl_image_dxgi = |
| 657 gl::GLImageDXGI::FromGLImage(gl_image_.get()); | 657 gl::GLImageDXGI::FromGLImage(gl_image_.get()); |
| 658 DCHECK(gl_image_dxgi); | 658 DCHECK(gl_image_dxgi); |
| 659 | 659 |
| 660 gl_image_dxgi->SetTexture(angle_copy_texture_, 0); | 660 gl_image_dxgi->SetTexture(angle_copy_texture_, 0); |
| 661 | 661 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 677 RETURN_ON_FAILURE(result, "Could not release stream", false); | 677 RETURN_ON_FAILURE(result, "Could not release stream", false); |
| 678 } | 678 } |
| 679 return true; | 679 return true; |
| 680 } | 680 } |
| 681 | 681 |
| 682 bool EGLStreamCopyPictureBuffer::AllowOverlay() const { | 682 bool EGLStreamCopyPictureBuffer::AllowOverlay() const { |
| 683 return true; | 683 return true; |
| 684 } | 684 } |
| 685 | 685 |
| 686 } // namespace media | 686 } // namespace media |
| OLD | NEW |