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 35406f5560fddf324d398ed1719879fca553f90c..8912c47efad17ed5a4b4a75cef104c33a14de408 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; |
@@ -1585,6 +1589,36 @@ JOW(void, PeerConnection_nativeRemoveLocalStream)( |
reinterpret_cast<MediaStreamInterface*>(native_stream)); |
} |
+JOW(jobject, PeerConnection_getSenders)(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)V"); |
+ jmethodID j_array_list_add = |
+ GetMethodID(jni, j_array_list_class, "add", "(java/lang/Object)Z"); |
+ jobject j_senders = jni->NewObject(j_array_list_class, j_array_list_ctor); |
+ |
+ jclass j_rtp_sender_class = FindClass(jni, "org/webrtc/RtpSender"); |
+ jmethodID j_rtp_sender_ctor = |
+ GetMethodID(jni, j_rtp_sender_class, "<init>", "(J)V"); |
+ |
+ PeerConnectionInterface::RtpSenders 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. |
+ int bumped_count = sender->AddRef(); |
+ jni->CallBooleanMethod(j_senders, j_array_list_add, j_sender); |
+ } |
+ return j_senders; |
+} |
+ |
+JOW(jobject, PeerConnection_getReceivers)(JNIEnv* jni, jobject j_pc) { |
+} |
+ |
JOW(bool, PeerConnection_nativeGetStats)( |
JNIEnv* jni, jobject j_pc, jobject j_observer, jlong native_track) { |
rtc::scoped_refptr<StatsObserverWrapper> observer( |
@@ -1826,4 +1860,52 @@ 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, |
+ jclass, |
+ jlong j_rtp_sender_pointer, |
+ jlong j_track_pointer) { |
+ return jlongFromPointer( |
+ reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer) |
+ ->track() |
+ .release()); |
+} |
+ |
+JOW(jstring, |
+ RtpSender_nativeMid)(JNIEnv* jni, jclass, jlong j_rtp_sender_pointer) { |
+ return JavaStringFromStdString( |
+ jni, reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->mid()); |
+} |
+ |
+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, |
+ jclass, |
+ jlong j_rtp_receiver_pointer, |
+ jlong j_track_pointer) { |
+ return jlongFromPointer( |
+ reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer) |
+ ->track() |
+ .release()); |
+} |
+ |
+JOW(jstring, |
+ RtpReceiver_nativeMid)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
+ return JavaStringFromStdString(jni, reinterpret_cast<RtpReceiverInterface*>( |
+ j_rtp_receiver_pointer)->mid()); |
+} |
+ |
+JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
+ reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); |
+} |
+ |
} // namespace webrtc_jni |