diff --git a/webrtc/examples/android/media_demo/jni/video_engine_jni.cc b/webrtc/examples/android/media_demo/jni/video_engine_jni.cc index bb61a4632c..d2c900207d 100644 --- a/webrtc/examples/android/media_demo/jni/video_engine_jni.cc +++ b/webrtc/examples/android/media_demo/jni/video_engine_jni.cc @@ -538,6 +538,12 @@ JOWW(jint, VideoEngine_connectCaptureDevice)(JNIEnv* jni, jobject j_vie, return vie_data->capture->ConnectCaptureDevice(camera_num, channel); } +JOWW(jint, VideoEngine_disconnectCaptureDevice)(JNIEnv* jni, jobject j_vie, + jint channel) { + VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); + return vie_data->capture->DisconnectCaptureDevice(channel); +} + JOWW(jint, VideoEngine_startCapture)(JNIEnv* jni, jobject j_vie, jint camera_num) { VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngine.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngine.java index 5fe789621a..85841dbcec 100644 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngine.java +++ b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngine.java @@ -468,7 +468,6 @@ public class MediaEngine implements VideoDecodeEncodeObserver { return; } check(vie.stopSend(videoChannel) == 0, "StopSend"); - stopCamera(); check(vie.stopReceive(videoChannel) == 0, "StopReceive"); if (externalCodec != null) { check(vie.deRegisterExternalReceiveCodec(videoChannel, @@ -480,6 +479,7 @@ public class MediaEngine implements VideoDecodeEncodeObserver { check(vie.stopRender(videoChannel) == 0, "StopRender"); check(vie.removeRenderer(videoChannel) == 0, "RemoveRenderer"); } + stopCamera(); // Stop capturer after remote renderer. svRemote = null; vieRunning = false; } @@ -612,6 +612,8 @@ public class MediaEngine implements VideoDecodeEncodeObserver { private void stopCamera() { check(vie.stopCapture(currentCameraHandle) == 0, "Failed StopCapture"); svLocal = null; + check(vie.disconnectCaptureDevice(videoChannel) == 0, + "Failed to disconnect capture device"); check(vie.releaseCaptureDevice(currentCameraHandle) == 0, "Failed ReleaseCaptureDevice"); } diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/VideoEngine.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/VideoEngine.java index 086fe304e2..b712c80cf7 100644 --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/VideoEngine.java +++ b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/VideoEngine.java @@ -84,6 +84,7 @@ public class VideoEngine { public native CameraDesc getCaptureDevice(int index); public native int allocateCaptureDevice(CameraDesc camera); public native int connectCaptureDevice(int cameraId, int channel); + public native int disconnectCaptureDevice(int channel); public native int startCapture(int cameraId); public native int stopCapture(int cameraId); public native int releaseCaptureDevice(int cameraId);