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); |