Index: media/gpu/android_video_encode_accelerator.cc |
diff --git a/media/gpu/android_video_encode_accelerator.cc b/media/gpu/android_video_encode_accelerator.cc |
index b16f933222866fe2bb9bcae46c1883d6a9eeecb7..2e8559dd27f21814c2cf186172240a4d39d626da 100644 |
--- a/media/gpu/android_video_encode_accelerator.cc |
+++ b/media/gpu/android_video_encode_accelerator.cc |
@@ -47,9 +47,9 @@ enum PixelFormat { |
do { \ |
if (!(result)) { \ |
DLOG(ERROR) << log; \ |
- if (client_ptr_factory_->GetWeakPtr()) { \ |
+ if (!error_occurred_) { \ |
client_ptr_factory_->GetWeakPtr()->NotifyError(error); \ |
- client_ptr_factory_.reset(); \ |
+ error_occurred_ = true; \ |
} \ |
return; \ |
} \ |
@@ -94,7 +94,7 @@ static bool GetSupportedColorFormatForMime(const std::string& mime, |
} |
AndroidVideoEncodeAccelerator::AndroidVideoEncodeAccelerator() |
- : num_buffers_at_codec_(0), last_set_bitrate_(0) {} |
+ : num_buffers_at_codec_(0), last_set_bitrate_(0), error_occurred_(false) {} |
AndroidVideoEncodeAccelerator::~AndroidVideoEncodeAccelerator() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -150,6 +150,7 @@ bool AndroidVideoEncodeAccelerator::Initialize( |
<< ", initial_bitrate: " << initial_bitrate; |
DCHECK(!media_codec_); |
DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK(client); |
client_ptr_factory_.reset(new base::WeakPtrFactory<Client>(client)); |
@@ -301,7 +302,7 @@ void AndroidVideoEncodeAccelerator::DoIOTask() { |
} |
void AndroidVideoEncodeAccelerator::QueueInput() { |
- if (!client_ptr_factory_->GetWeakPtr() || pending_frames_.empty()) |
+ if (error_occurred_ || pending_frames_.empty()) |
return; |
int input_buf_index = 0; |
@@ -368,8 +369,8 @@ void AndroidVideoEncodeAccelerator::QueueInput() { |
} |
void AndroidVideoEncodeAccelerator::DequeueOutput() { |
- if (!client_ptr_factory_->GetWeakPtr() || |
- available_bitstream_buffers_.empty() || num_buffers_at_codec_ == 0) { |
+ if (error_occurred_ || available_bitstream_buffers_.empty() || |
+ num_buffers_at_codec_ == 0) { |
return; |
} |