Index: webrtc/api/java/jni/androidvideocapturer_jni.cc |
diff --git a/webrtc/api/java/jni/androidvideocapturer_jni.cc b/webrtc/api/java/jni/androidvideocapturer_jni.cc |
index 0abc9c0d51b9c987df660924b8b9a2a6f1006288..3ebf3464fb7c2f2d8322487ecdb8b3128132777c 100644 |
--- a/webrtc/api/java/jni/androidvideocapturer_jni.cc |
+++ b/webrtc/api/java/jni/androidvideocapturer_jni.cc |
@@ -89,6 +89,10 @@ void AndroidVideoCapturerJni::Stop() { |
LOG(LS_INFO) << "AndroidVideoCapturerJni stop"; |
RTC_DCHECK(thread_checker_.CalledOnValidThread()); |
{ |
+ // TODO(nisse): Consider moving this block until *after* the call to |
+ // stopCapturer. stopCapturer should ensure that we get no |
+ // more frames, and then we shouldn't need the if (!capturer_) |
+ // checks in OnMemoryBufferFrame and OnTextureFrame. |
rtc::CritScope cs(&capturer_lock_); |
// Destroying |invoker_| will cancel all pending calls to |capturer_|. |
invoker_ = nullptr; |
@@ -172,7 +176,10 @@ void AndroidVideoCapturerJni::OnMemoryBufferFrame(void* video_frame, |
RTC_DCHECK(rotation == 0 || rotation == 90 || rotation == 180 || |
rotation == 270); |
rtc::CritScope cs(&capturer_lock_); |
- |
+ if (!capturer_) { |
+ LOG(LS_WARNING) << "OnMemoryBufferFrame() called for closed capturer."; |
+ return; |
+ } |
int adapted_width; |
int adapted_height; |
int crop_width; |
@@ -252,7 +259,10 @@ void AndroidVideoCapturerJni::OnTextureFrame(int width, |
RTC_DCHECK(rotation == 0 || rotation == 90 || rotation == 180 || |
rotation == 270); |
rtc::CritScope cs(&capturer_lock_); |
- |
+ if (!capturer_) { |
+ LOG(LS_WARNING) << "OnTextureFrame() called for closed capturer."; |
+ return; |
+ } |
int adapted_width; |
int adapted_height; |
int crop_width; |