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

Unified Diff: webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc

Issue 2748123002: Better handling of error condition in MediaCodecVideoEncoder. (Closed)
Patch Set: Change error message. Created 3 years, 9 months 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 | « webrtc/sdk/android/api/org/webrtc/MediaCodecVideoEncoder.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc
diff --git a/webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc b/webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc
index 8fc9e7b0ce465409bacf0b107a8e75ddcfbc7130..92406ec107c0b4fc8365f0b7e26e2eec69efa223 100644
--- a/webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc
+++ b/webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc
@@ -456,6 +456,11 @@ bool MediaCodecVideoEncoder::EncodeTask::Run() {
// about it and let the next app-called API method reveal the borkedness.
encoder_->DeliverPendingOutputs(jni);
+ if (!encoder_) {
+ // Encoder can be destroyed in DeliverPendingOutputs.
+ return true;
+ }
+
// Call log statistics here so it's called even if no frames are being
// delivered.
encoder_->LogStatistics(false);
@@ -545,8 +550,6 @@ int32_t MediaCodecVideoEncoder::InitEncodeInternal(int width,
gof_idx_ = 0;
last_frame_received_ms_ = -1;
frames_received_since_last_key_ = kMinKeyFrameInterval;
- weak_factory_.reset(new rtc::WeakPtrFactory<MediaCodecVideoEncoder>(this));
- encode_task_.reset(new EncodeTask(weak_factory_->GetWeakPtr()));
// We enforce no extra stride/padding in the format creation step.
jobject j_video_codec_enum = JavaEnumFromIndexAndClassName(
@@ -620,6 +623,9 @@ int32_t MediaCodecVideoEncoder::InitEncodeInternal(int width,
#endif
inited_ = true;
}
+ weak_factory_.reset(new rtc::WeakPtrFactory<MediaCodecVideoEncoder>(this));
+ encode_task_.reset(new EncodeTask(weak_factory_->GetWeakPtr()));
+
return WEBRTC_VIDEO_CODEC_OK;
}
@@ -884,6 +890,8 @@ int32_t MediaCodecVideoEncoder::Release() {
ALOGD << "EncoderRelease: Frames received: " << frames_received_
<< ". Encoded: " << frames_encoded_
<< ". Dropped: " << frames_dropped_media_encoder_;
+ encode_task_.reset(nullptr);
+ weak_factory_.reset(nullptr);
ScopedLocalRefFrame local_ref_frame(jni);
for (size_t i = 0; i < input_buffers_.size(); ++i)
jni->DeleteGlobalRef(input_buffers_[i]);
@@ -901,8 +909,6 @@ int32_t MediaCodecVideoEncoder::Release() {
inited_ = false;
}
use_surface_ = false;
- encode_task_.reset(nullptr);
- weak_factory_.reset(nullptr);
ALOGD << "EncoderRelease done.";
return WEBRTC_VIDEO_CODEC_OK;
}
« no previous file with comments | « webrtc/sdk/android/api/org/webrtc/MediaCodecVideoEncoder.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698