summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/video_capture/android/video_capture_android.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/modules/video_capture/android/video_capture_android.cc b/modules/video_capture/android/video_capture_android.cc
index 6f0200e6..4bc14e5a 100644
--- a/modules/video_capture/android/video_capture_android.cc
+++ b/modules/video_capture/android/video_capture_android.cc
@@ -130,6 +130,8 @@ VideoCaptureModule* VideoCaptureImpl::Create(
int32_t VideoCaptureAndroid::OnIncomingFrame(uint8_t* videoFrame,
int32_t videoFrameLength,
int64_t captureTime) {
+ if (!_captureStarted)
+ return 0;
return IncomingFrame(
videoFrame, videoFrameLength, _captureCapability, captureTime);
}
@@ -209,13 +211,16 @@ int32_t VideoCaptureAndroid::StartCapture(
}
int32_t VideoCaptureAndroid::StopCapture() {
- CriticalSectionScoped cs(&_apiCs);
+ _apiCs.Enter();
AttachThreadScoped ats(g_jvm);
JNIEnv* env = ats.env();
memset(&_requestedCapability, 0, sizeof(_requestedCapability));
memset(&_captureCapability, 0, sizeof(_captureCapability));
_captureStarted = false;
+ // Exit critical section to avoid blocking camera thread inside
+ // onIncomingFrame() call.
+ _apiCs.Leave();
jmethodID j_stop =
env->GetMethodID(g_java_capturer_class, "stopCapture", "()Z");