Index: talk/app/webrtc/java/jni/peerconnection_jni.cc |
diff --git a/talk/app/webrtc/java/jni/peerconnection_jni.cc b/talk/app/webrtc/java/jni/peerconnection_jni.cc |
index 67d51bd9cb4ef848838647cb6208cbdc3a5330e0..5fa1617644d048e0933c947a5e8002fa63b6c970 100644 |
--- a/talk/app/webrtc/java/jni/peerconnection_jni.cc |
+++ b/talk/app/webrtc/java/jni/peerconnection_jni.cc |
@@ -1672,17 +1672,21 @@ JOW(jobject, VideoCapturer_nativeCreateVideoCapturer)( |
#if defined(ANDROID) |
jclass j_video_capturer_class( |
FindClass(jni, "org/webrtc/VideoCapturerAndroid")); |
- const jmethodID j_videocapturer_ctor(GetMethodID( |
- jni, j_video_capturer_class, "<init>", "()V")); |
- jobject j_video_capturer = jni->NewObject(j_video_capturer_class, |
- j_videocapturer_ctor); |
- CHECK_EXCEPTION(jni) << "error during NewObject"; |
- |
- rtc::scoped_refptr<AndroidVideoCapturerJni> delegate = |
- AndroidVideoCapturerJni::Create(jni, j_video_capturer, j_device_name); |
- if (!delegate.get()) |
+ const int camera_id = jni->CallStaticIntMethod( |
+ j_video_capturer_class, |
+ GetStaticMethodID(jni, j_video_capturer_class, "lookupDeviceName", |
+ "(Ljava/lang/String;)I"), |
+ j_device_name); |
+ CHECK_EXCEPTION(jni) << "error during VideoCapturerAndroid.lookupDeviceName"; |
+ if (camera_id == -1) |
return nullptr; |
- rtc::scoped_ptr<webrtc::AndroidVideoCapturer> capturer( |
+ jobject j_video_capturer = jni->NewObject( |
+ j_video_capturer_class, |
+ GetMethodID(jni, j_video_capturer_class, "<init>", "(I)V"), camera_id); |
+ CHECK_EXCEPTION(jni) << "error during creation of VideoCapturerAndroid"; |
+ rtc::scoped_refptr<webrtc::AndroidVideoCapturerDelegate> delegate = |
+ new rtc::RefCountedObject<AndroidVideoCapturerJni>(jni, j_video_capturer); |
+ rtc::scoped_ptr<cricket::VideoCapturer> capturer( |
new webrtc::AndroidVideoCapturer(delegate)); |
#else |
@@ -1712,7 +1716,7 @@ JOW(jobject, VideoCapturer_nativeCreateVideoCapturer)( |
jni, j_video_capturer_class, "setNativeCapturer", "(J)V")); |
jni->CallVoidMethod(j_video_capturer, |
j_videocapturer_set_native_capturer, |
- (jlong)capturer.release()); |
+ jlongFromPointer(capturer.release())); |
CHECK_EXCEPTION(jni) << "error during setNativeCapturer"; |
return j_video_capturer; |
} |