Chromium Code Reviews| 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..1f714e4977b6a3e7ffb264ea24547706745840ec 100644 |
| --- a/talk/app/webrtc/java/jni/peerconnection_jni.cc |
| +++ b/talk/app/webrtc/java/jni/peerconnection_jni.cc |
| @@ -64,6 +64,8 @@ |
| #include "talk/app/webrtc/dtlsidentitystore.h" |
| #include "talk/app/webrtc/mediaconstraintsinterface.h" |
| #include "talk/app/webrtc/peerconnectioninterface.h" |
| +#include "talk/app/webrtc/rtpreceiverinterface.h" |
| +#include "talk/app/webrtc/rtpsenderinterface.h" |
| #include "talk/app/webrtc/videosourceinterface.h" |
| #include "talk/media/base/videocapturer.h" |
| #include "talk/media/base/videorenderer.h" |
| @@ -113,6 +115,8 @@ using webrtc::MediaStreamTrackInterface; |
| using webrtc::PeerConnectionFactoryInterface; |
| using webrtc::PeerConnectionInterface; |
| using webrtc::PeerConnectionObserver; |
| +using webrtc::RtpReceiverInterface; |
| +using webrtc::RtpSenderInterface; |
| using webrtc::SessionDescriptionInterface; |
| using webrtc::SetSessionDescriptionObserver; |
| using webrtc::StatsObserver; |
| @@ -971,7 +975,7 @@ JOW(void, VideoRenderer_releaseNativeFrame)( |
| } |
| JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { |
| - CHECK_RELEASE(reinterpret_cast<MediaStreamTrackInterface*>(j_p)); |
| + reinterpret_cast<MediaStreamTrackInterface*>(j_p)->Release(); |
|
AlexG
2015/10/02 22:44:35
Can you explain why CHECK_RELEASE is removed?
Taylor Brandstetter
2015/10/03 01:50:09
Because now there are two Java MediaStreamTracks t
|
| } |
| JOW(jboolean, MediaStream_nativeAddAudioTrack)( |
| @@ -1577,7 +1581,7 @@ static SessionDescriptionInterface* JavaSdpToNativeSdp( |
| std_type, std_description, NULL); |
| } |
| -JOW(void, PeerConnection_setLocalDescription)( |
| +JOW(void, PeerConnection_nativeSetLocalDescription)( |
| JNIEnv* jni, jobject j_pc, |
| jobject j_observer, jobject j_sdp) { |
| rtc::scoped_refptr<SetSdpObserverWrapper> observer( |
| @@ -1587,7 +1591,7 @@ JOW(void, PeerConnection_setLocalDescription)( |
| observer, JavaSdpToNativeSdp(jni, j_sdp)); |
| } |
| -JOW(void, PeerConnection_setRemoteDescription)( |
| +JOW(void, PeerConnection_nativeSetRemoteDescription)( |
| JNIEnv* jni, jobject j_pc, |
| jobject j_observer, jobject j_sdp) { |
| rtc::scoped_refptr<SetSdpObserverWrapper> observer( |
| @@ -1626,6 +1630,60 @@ JOW(void, PeerConnection_nativeRemoveLocalStream)( |
| reinterpret_cast<MediaStreamInterface*>(native_stream)); |
| } |
| +JOW(jobject, PeerConnection_nativeGetSenders)(JNIEnv* jni, jobject j_pc) { |
| + jclass j_array_list_class = FindClass(jni, "java/util/ArrayList"); |
| + jmethodID j_array_list_ctor = |
| + GetMethodID(jni, j_array_list_class, "<init>", "()V"); |
| + jmethodID j_array_list_add = |
| + GetMethodID(jni, j_array_list_class, "add", "(Ljava/lang/Object;)Z"); |
| + jobject j_senders = jni->NewObject(j_array_list_class, j_array_list_ctor); |
| + CHECK_EXCEPTION(jni) << "error during NewObject"; |
| + |
| + jclass j_rtp_sender_class = FindClass(jni, "org/webrtc/RtpSender"); |
| + jmethodID j_rtp_sender_ctor = |
| + GetMethodID(jni, j_rtp_sender_class, "<init>", "(J)V"); |
| + |
| + auto senders = ExtractNativePC(jni, j_pc)->GetSenders(); |
| + for (const auto& sender : senders) { |
| + jlong nativeSenderPtr = jlongFromPointer(sender.get()); |
| + jobject j_sender = |
| + jni->NewObject(j_rtp_sender_class, j_rtp_sender_ctor, nativeSenderPtr); |
| + CHECK_EXCEPTION(jni) << "error during NewObject"; |
| + // Sender is now owned by Java object, and will be freed from there. |
| + sender->AddRef(); |
| + jni->CallBooleanMethod(j_senders, j_array_list_add, j_sender); |
| + CHECK_EXCEPTION(jni) << "error during CallBooleanMethod"; |
| + } |
| + return j_senders; |
| +} |
| + |
| +JOW(jobject, PeerConnection_nativeGetReceivers)(JNIEnv* jni, jobject j_pc) { |
| + jclass j_array_list_class = FindClass(jni, "java/util/ArrayList"); |
| + jmethodID j_array_list_ctor = |
| + GetMethodID(jni, j_array_list_class, "<init>", "()V"); |
| + jmethodID j_array_list_add = |
| + GetMethodID(jni, j_array_list_class, "add", "(Ljava/lang/Object;)Z"); |
| + jobject j_receivers = jni->NewObject(j_array_list_class, j_array_list_ctor); |
| + CHECK_EXCEPTION(jni) << "error during NewObject"; |
| + |
| + jclass j_rtp_receiver_class = FindClass(jni, "org/webrtc/RtpReceiver"); |
| + jmethodID j_rtp_receiver_ctor = |
| + GetMethodID(jni, j_rtp_receiver_class, "<init>", "(J)V"); |
| + |
| + auto receivers = ExtractNativePC(jni, j_pc)->GetReceivers(); |
| + for (const auto& receiver : receivers) { |
| + jlong nativeReceiverPtr = jlongFromPointer(receiver.get()); |
| + jobject j_receiver = jni->NewObject(j_rtp_receiver_class, |
| + j_rtp_receiver_ctor, nativeReceiverPtr); |
| + CHECK_EXCEPTION(jni) << "error during NewObject"; |
| + // Receiver is now owned by Java object, and will be freed from there. |
| + receiver->AddRef(); |
| + jni->CallBooleanMethod(j_receivers, j_array_list_add, j_receiver); |
| + CHECK_EXCEPTION(jni) << "error during CallBooleanMethod"; |
| + } |
| + return j_receivers; |
| +} |
| + |
| JOW(bool, PeerConnection_nativeGetStats)( |
| JNIEnv* jni, jobject j_pc, jobject j_observer, jlong native_track) { |
| rtc::scoped_refptr<StatsObserverWrapper> observer( |
| @@ -1867,4 +1925,53 @@ JOW(jbyteArray, CallSessionFileRotatingLogSink_nativeGetLogData)( |
| return result; |
| } |
| +JOW(void, RtpSender_nativeSetTrack)(JNIEnv* jni, |
| + jclass, |
| + jlong j_rtp_sender_pointer, |
| + jlong j_track_pointer) { |
| + reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) |
| + ->SetTrack(reinterpret_cast<MediaStreamTrackInterface*>(j_track_pointer)); |
| +} |
| + |
| +JOW(jlong, RtpSender_nativeTrack)(JNIEnv* jni, |
|
AlexG
2015/10/02 22:44:35
Probably rename to nativeGetandReleaseTrack - if y
Taylor Brandstetter
2015/10/03 01:50:10
Done.
|
| + jclass, |
| + jlong j_rtp_sender_pointer, |
| + jlong j_track_pointer) { |
| + return jlongFromPointer( |
| + reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) |
| + ->track() |
| + .release()); |
| +} |
| + |
| +JOW(jstring, RtpSender_nativeId)( |
| + JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { |
| + return JavaStringFromStdString( |
| + jni, reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->id()); |
| +} |
| + |
| +JOW(void, RtpSender_free)(JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { |
| + reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->Release(); |
| +} |
| + |
| +JOW(jlong, RtpReceiver_nativeTrack)(JNIEnv* jni, |
|
AlexG
2015/10/02 22:44:35
ditto: nativeGetAndReleaseTrack()?
Taylor Brandstetter
2015/10/03 01:50:10
Done.
|
| + jclass, |
| + jlong j_rtp_receiver_pointer, |
| + jlong j_track_pointer) { |
| + return jlongFromPointer( |
| + reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer) |
| + ->track() |
| + .release()); |
| +} |
| + |
| +JOW(jstring, RtpReceiver_nativeId)( |
| + JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
| + return JavaStringFromStdString( |
| + jni, |
| + reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); |
| +} |
| + |
| +JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
| + reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); |
| +} |
| + |
| } // namespace webrtc_jni |