Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(768)

Unified Diff: media/gpu/android_video_encode_accelerator.cc

Issue 2601003002: Android: Fix random crash in HW encode accelerator (Closed)
Patch Set: address comments Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/gpu/android_video_encode_accelerator.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..0dfebf8740638529f189c1cdf15b7de0cbbc8b93 100644
--- a/media/gpu/android_video_encode_accelerator.cc
+++ b/media/gpu/android_video_encode_accelerator.cc
@@ -49,8 +49,8 @@ enum PixelFormat {
DLOG(ERROR) << log; \
if (client_ptr_factory_->GetWeakPtr()) { \
watk 2016/12/28 01:01:51 It's not possible for this to be null AFAICT. Shou
braveyao 2016/12/28 01:28:18 Done.
client_ptr_factory_->GetWeakPtr()->NotifyError(error); \
- client_ptr_factory_.reset(); \
} \
+ error_occurred_ = true; \
return; \
} \
} while (0)
@@ -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());
@@ -152,6 +152,7 @@ bool AndroidVideoEncodeAccelerator::Initialize(
DCHECK(thread_checker_.CalledOnValidThread());
client_ptr_factory_.reset(new base::WeakPtrFactory<Client>(client));
watk 2016/12/28 01:01:51 I'd suggest adding a DCHECK(client) or if (!client
braveyao 2016/12/28 01:28:18 Done.
+ error_occurred_ = false;
watk 2016/12/28 01:01:51 Initialize() cannot be called more than once so th
braveyao 2016/12/28 01:28:18 Done.
if (!(MediaCodecUtil::SupportsSetParameters() &&
format == PIXEL_FORMAT_I420)) {
@@ -285,6 +286,7 @@ void AndroidVideoEncodeAccelerator::Destroy() {
DVLOG(3) << __PRETTY_FUNCTION__;
DCHECK(thread_checker_.CalledOnValidThread());
client_ptr_factory_.reset();
+ error_occurred_ = false;
watk 2016/12/28 01:01:51 No need to reset this, we're deleting below. (The
braveyao 2016/12/28 01:28:18 Done.
if (media_codec_) {
if (io_timer_.IsRunning())
io_timer_.Stop();
@@ -301,7 +303,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 +370,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;
}
« no previous file with comments | « media/gpu/android_video_encode_accelerator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698