Chromium Code Reviews| Index: media/gpu/media_foundation_video_encode_accelerator_win.cc |
| diff --git a/media/gpu/media_foundation_video_encode_accelerator_win.cc b/media/gpu/media_foundation_video_encode_accelerator_win.cc |
| index dfd27106cc9ea0047cabba1ad4854dcf9ab49d92..50d9165f931eeeb958d6d1c234aa87ca191055fe 100644 |
| --- a/media/gpu/media_foundation_video_encode_accelerator_win.cc |
| +++ b/media/gpu/media_foundation_video_encode_accelerator_win.cc |
| @@ -88,7 +88,7 @@ MediaFoundationVideoEncodeAccelerator::MediaFoundationVideoEncodeAccelerator() |
| MediaFoundationVideoEncodeAccelerator:: |
| ~MediaFoundationVideoEncodeAccelerator() { |
| DVLOG(3) << __func__; |
| - DCHECK(sequence_checker_.CalledOnValidSequence()); |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| DCHECK(!encoder_thread_.IsRunning()); |
| DCHECK(!encoder_task_weak_factory_.HasWeakPtrs()); |
| @@ -99,7 +99,7 @@ MediaFoundationVideoEncodeAccelerator::GetSupportedProfiles() { |
| TRACE_EVENT0("gpu,startup", |
| "MediaFoundationVideoEncodeAccelerator::GetSupportedProfiles"); |
| DVLOG(3) << __func__; |
| - DCHECK(sequence_checker_.CalledOnValidSequence()); |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| SupportedProfiles profiles; |
| @@ -136,7 +136,7 @@ bool MediaFoundationVideoEncodeAccelerator::Initialize( |
| << ", input_visible_size=" << input_visible_size.ToString() |
| << ", output_profile=" << output_profile |
| << ", initial_bitrate=" << initial_bitrate; |
| - DCHECK(sequence_checker_.CalledOnValidSequence()); |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| if (PIXEL_FORMAT_I420 != format) { |
| DLOG(ERROR) << "Input format not supported= " |
| @@ -260,10 +260,11 @@ void MediaFoundationVideoEncodeAccelerator::RequestEncodingParametersChange( |
| void MediaFoundationVideoEncodeAccelerator::Destroy() { |
| DVLOG(3) << __func__; |
| - DCHECK(sequence_checker_.CalledOnValidSequence()); |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| // Cancel all callbacks. |
| client_ptr_factory_.reset(); |
| + client_.reset(); |
|
Pawel Osciak
2016/10/25 01:44:05
Hm, do we need to InvalidateWeakPtrs() on factory
emircan
2016/10/25 21:57:51
It already gets invalidated from GPUVEA's OnWillDe
Pawel Osciak
2016/10/27 01:45:19
In that case I feel InvalidateWeakPtrs() is more e
|
| if (encoder_thread_.IsRunning()) { |
| encoder_thread_task_runner_->PostTask( |
| @@ -276,6 +277,17 @@ void MediaFoundationVideoEncodeAccelerator::Destroy() { |
| delete this; |
| } |
| +bool MediaFoundationVideoEncodeAccelerator::TryToSetupEncodeOnSeparateThread( |
| + const base::WeakPtr<Client>& encode_client, |
| + const scoped_refptr<base::SingleThreadTaskRunner>& encode_task_runner) { |
| + DVLOG(3) << __func__; |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| + client_ = encode_client; |
| + client_task_runner_ = encode_task_runner; |
| + sequence_checker_.DetachFromSequence(); |
| + return true; |
| +} |
| + |
| // static |
| void MediaFoundationVideoEncodeAccelerator::PreSandboxInitialization() { |
| for (const wchar_t* mfdll : kMediaFoundationVideoEncoderDLLs) |
| @@ -284,7 +296,7 @@ void MediaFoundationVideoEncodeAccelerator::PreSandboxInitialization() { |
| bool MediaFoundationVideoEncodeAccelerator::CreateHardwareEncoderMFT() { |
| DVLOG(3) << __func__; |
| - DCHECK(sequence_checker_.CalledOnValidSequence()); |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| if (base::win::GetVersion() < base::win::VERSION_WIN8) { |
| DVLOG(ERROR) << "Windows versions earlier than 8 are not supported."; |
| @@ -321,7 +333,7 @@ bool MediaFoundationVideoEncodeAccelerator::CreateHardwareEncoderMFT() { |
| } |
| bool MediaFoundationVideoEncodeAccelerator::InitializeInputOutputSamples() { |
| - DCHECK(sequence_checker_.CalledOnValidSequence()); |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| // Initialize output parameters. |
| HRESULT hr = MFCreateMediaType(imf_output_media_type_.Receive()); |
| @@ -372,7 +384,7 @@ bool MediaFoundationVideoEncodeAccelerator::InitializeInputOutputSamples() { |
| } |
| bool MediaFoundationVideoEncodeAccelerator::SetEncoderModes() { |
| - DCHECK(sequence_checker_.CalledOnValidSequence()); |
| + DCHECK(thread_checker_.CalledOnValidThread()); |
| HRESULT hr = encoder_.QueryInterface(IID_ICodecAPI, codec_api_.ReceiveVoid()); |
| RETURN_ON_HR_FAILURE(hr, "Couldn't get ICodecAPI", false); |