| Index: content/common/gpu/media/dxva_video_decode_accelerator_win.cc
|
| diff --git a/content/common/gpu/media/dxva_video_decode_accelerator_win.cc b/content/common/gpu/media/dxva_video_decode_accelerator_win.cc
|
| index cb1841b399715688307a98105ccbd84df1da9b32..877f20916e04bcc1eb1dd9bd18e4e8cd83452f09 100644
|
| --- a/content/common/gpu/media/dxva_video_decode_accelerator_win.cc
|
| +++ b/content/common/gpu/media/dxva_video_decode_accelerator_win.cc
|
| @@ -651,8 +651,8 @@ DXVAVideoDecodeAccelerator::PendingSampleInfo::PendingSampleInfo(
|
| DXVAVideoDecodeAccelerator::PendingSampleInfo::~PendingSampleInfo() {}
|
|
|
| DXVAVideoDecodeAccelerator::DXVAVideoDecodeAccelerator(
|
| - const base::Callback<bool(void)>& make_context_current,
|
| - gfx::GLContext* gl_context)
|
| + const gpu_vda_helpers::GetGLContextCb& get_gl_context_cb,
|
| + const gpu_vda_helpers::MakeGLContextCurrentCb& make_context_current_cb)
|
| : client_(NULL),
|
| dev_manager_reset_token_(0),
|
| dx11_dev_manager_reset_token_(0),
|
| @@ -661,16 +661,17 @@ DXVAVideoDecodeAccelerator::DXVAVideoDecodeAccelerator(
|
| pictures_requested_(false),
|
| inputs_before_decode_(0),
|
| sent_drain_message_(false),
|
| - make_context_current_(make_context_current),
|
| + get_gl_context_cb_(get_gl_context_cb),
|
| + make_context_current_cb_(make_context_current_cb),
|
| codec_(media::kUnknownVideoCodec),
|
| decoder_thread_("DXVAVideoDecoderThread"),
|
| pending_flush_(false),
|
| use_dx11_(false),
|
| use_keyed_mutex_(false),
|
| dx11_video_format_converter_media_type_needs_init_(true),
|
| - gl_context_(gl_context),
|
| using_angle_device_(false),
|
| weak_this_factory_(this) {
|
| + DCHECK(!get_gl_context_cb_.is_null());
|
| weak_ptr_ = weak_this_factory_.GetWeakPtr();
|
| memset(&input_stream_info_, 0, sizeof(input_stream_info_));
|
| memset(&output_stream_info_, 0, sizeof(output_stream_info_));
|
| @@ -1106,7 +1107,9 @@ void DXVAVideoDecodeAccelerator::Destroy() {
|
| delete this;
|
| }
|
|
|
| -bool DXVAVideoDecodeAccelerator::CanDecodeOnIOThread() {
|
| +bool DXVAVideoDecodeAccelerator::TryInitializeDecodeOnSeparateThread(
|
| + const base::WeakPtr<Client>& decode_client,
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& decode_task_runner) {
|
| return false;
|
| }
|
|
|
| @@ -1291,15 +1294,16 @@ bool DXVAVideoDecodeAccelerator::CheckDecoderDxvaSupport() {
|
| DVLOG(1) << "Failed to set Low latency mode on decoder. Error: " << hr;
|
| }
|
|
|
| + auto gl_context = get_gl_context_cb_.Run();
|
| + RETURN_ON_FAILURE(gl_context, "Couldn't get GL context", false);
|
| +
|
| // The decoder should use DX11 iff
|
| // 1. The underlying H/W decoder supports it.
|
| // 2. We have a pointer to the MFCreateDXGIDeviceManager function needed for
|
| // this. This should always be true for Windows 8+.
|
| // 3. ANGLE is using DX11.
|
| - DCHECK(gl_context_);
|
| if (create_dxgi_device_manager_ &&
|
| - (gl_context_->GetGLRenderer().find("Direct3D11") !=
|
| - std::string::npos)) {
|
| + (gl_context->GetGLRenderer().find("Direct3D11") != std::string::npos)) {
|
| UINT32 dx11_aware = 0;
|
| attributes->GetUINT32(MF_SA_D3D11_AWARE, &dx11_aware);
|
| use_dx11_ = !!dx11_aware;
|
| @@ -1501,8 +1505,9 @@ void DXVAVideoDecodeAccelerator::ProcessPendingSamples() {
|
| if (!output_picture_buffers_.size())
|
| return;
|
|
|
| - RETURN_AND_NOTIFY_ON_FAILURE(make_context_current_.Run(),
|
| - "Failed to make context current", PLATFORM_FAILURE,);
|
| + RETURN_AND_NOTIFY_ON_FAILURE(make_context_current_cb_.Run(),
|
| + "Failed to make context current",
|
| + PLATFORM_FAILURE, );
|
|
|
| OutputBuffers::iterator index;
|
|
|
| @@ -2000,8 +2005,9 @@ void DXVAVideoDecodeAccelerator::CopySurfaceComplete(
|
| if (picture_buffer->available())
|
| return;
|
|
|
| - RETURN_AND_NOTIFY_ON_FAILURE(make_context_current_.Run(),
|
| - "Failed to make context current", PLATFORM_FAILURE,);
|
| + RETURN_AND_NOTIFY_ON_FAILURE(make_context_current_cb_.Run(),
|
| + "Failed to make context current",
|
| + PLATFORM_FAILURE, );
|
|
|
| DCHECK(!output_picture_buffers_.empty());
|
|
|
|
|