Index: webrtc/sdk/android/src/jni/pc/peerconnectionobserver_jni.h |
diff --git a/webrtc/sdk/android/src/jni/pc/peerconnectionobserver_jni.h b/webrtc/sdk/android/src/jni/pc/peerconnectionobserver_jni.h |
index 2d9d749a6b2014f43820549c06da9d85d400d107..58994709aa0f270c22a2aed51b51236b36080e16 100644 |
--- a/webrtc/sdk/android/src/jni/pc/peerconnectionobserver_jni.h |
+++ b/webrtc/sdk/android/src/jni/pc/peerconnectionobserver_jni.h |
@@ -11,6 +11,7 @@ |
#ifndef WEBRTC_SDK_ANDROID_SRC_JNI_PC_PEERCONNECTIONOBSERVER_JNI_H_ |
#define WEBRTC_SDK_ANDROID_SRC_JNI_PC_PEERCONNECTIONOBSERVER_JNI_H_ |
+#include <webrtc/pc/mediastreamobserver.h> |
#include <map> |
#include <memory> |
#include <vector> |
@@ -24,7 +25,8 @@ namespace webrtc_jni { |
// Adapter between the C++ PeerConnectionObserver interface and the Java |
// PeerConnection.Observer interface. Wraps an instance of the Java interface |
// and dispatches C++ callbacks to Java. |
-class PeerConnectionObserverJni : public webrtc::PeerConnectionObserver { |
+class PeerConnectionObserverJni : public webrtc::PeerConnectionObserver, |
+ public sigslot::has_slots<> { |
public: |
PeerConnectionObserverJni(JNIEnv* jni, jobject j_observer); |
virtual ~PeerConnectionObserverJni(); |
@@ -61,9 +63,15 @@ class PeerConnectionObserverJni : public webrtc::PeerConnectionObserver { |
NativeToJavaStreamsMap; |
typedef std::map<webrtc::RtpReceiverInterface*, jobject> |
NativeToJavaRtpReceiverMap; |
+ typedef std::map<webrtc::MediaStreamTrackInterface*, jobject> |
+ NativeToJavaMediaTrackMap; |
+ typedef std::map<webrtc::MediaStreamTrackInterface*, |
+ webrtc::RtpReceiverInterface*> |
+ NativeMediaStreamTrackToNativeRtpReceiver; |
void DisposeRemoteStream(const NativeToJavaStreamsMap::iterator& it); |
void DisposeRtpReceiver(const NativeToJavaRtpReceiverMap::iterator& it); |
+ void DisposeRemoteTrack(const NativeToJavaMediaTrackMap::iterator& it); |
// If the NativeToJavaStreamsMap contains the stream, return it. |
// Otherwise, create a new Java MediaStream. |
@@ -76,6 +84,15 @@ class PeerConnectionObserverJni : public webrtc::PeerConnectionObserver { |
const std::vector<rtc::scoped_refptr<webrtc::MediaStreamInterface>>& |
streams); |
+ void OnAudioTrackAdded(webrtc::AudioTrackInterface* track, |
+ webrtc::MediaStreamInterface* stream); |
+ void OnVideoTrackAdded(webrtc::VideoTrackInterface* track, |
+ webrtc::MediaStreamInterface* stream); |
+ void OnAudioTrackRemoved(webrtc::AudioTrackInterface* track, |
+ webrtc::MediaStreamInterface* stream); |
+ void OnVideoTrackRemoved(webrtc::VideoTrackInterface* track, |
+ webrtc::MediaStreamInterface* stream); |
+ |
const ScopedGlobalRef<jobject> j_observer_global_; |
const ScopedGlobalRef<jclass> j_observer_class_; |
const ScopedGlobalRef<jclass> j_media_stream_class_; |
@@ -88,11 +105,15 @@ class PeerConnectionObserverJni : public webrtc::PeerConnectionObserver { |
const jmethodID j_data_channel_ctor_; |
const ScopedGlobalRef<jclass> j_rtp_receiver_class_; |
const jmethodID j_rtp_receiver_ctor_; |
+ |
// C++ -> Java remote streams. The stored jobects are global refs and must be |
// manually deleted upon removal. Use DisposeRemoteStream(). |
NativeToJavaStreamsMap remote_streams_; |
- NativeToJavaRtpReceiverMap rtp_receivers_; |
std::unique_ptr<MediaConstraintsJni> constraints_; |
+ NativeToJavaRtpReceiverMap rtp_receivers_; |
+ NativeMediaStreamTrackToNativeRtpReceiver track_to_receiver_; |
+ std::vector<std::unique_ptr<webrtc::MediaStreamObserver>> stream_observers_; |
+ NativeToJavaMediaTrackMap remote_tracks_; |
}; |
} // namespace webrtc_jni |