Move ownership of PeerConnectionObserver from Java to C++.

New OwnedPeerConnection takes ownership of the observer. This is done
to allow NativePeerConnectionFactory to return a capsulated object.

Bug: webrtc:8662
Change-Id: Ie876f7b9a1a17ebcfbe51537f712a32ab1a7cbfb
Reviewed-on: https://webrtc-review.googlesource.com/35300
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21610}
This commit is contained in:
Sami Kalliomäki
2018-01-15 09:28:34 +01:00
committed by Commit Bot
parent a3dab8440e
commit ce5c19add1
6 changed files with 85 additions and 47 deletions

View File

@ -548,7 +548,6 @@ public class PeerConnection {
private final List<MediaStream> localStreams = new ArrayList<>();
private final long nativePeerConnection;
private final long nativeObserver;
private List<RtpSender> senders = new ArrayList<>();
private List<RtpReceiver> receivers = new ArrayList<>();
@ -557,12 +556,11 @@ public class PeerConnection {
* their PeerConnection creation in JNI.
*/
public PeerConnection(NativePeerConnectionFactory factory) {
this(factory.createNativePeerConnection(), 0 /* nativeObserver */);
this(factory.createNativePeerConnection());
}
PeerConnection(long nativePeerConnection, long nativeObserver) {
PeerConnection(long nativePeerConnection) {
this.nativePeerConnection = nativePeerConnection;
this.nativeObserver = nativeObserver;
}
// JsepInterface.
@ -611,7 +609,7 @@ public class PeerConnection {
}
public boolean setConfiguration(RTCConfiguration config) {
return nativeSetConfiguration(config, nativeObserver);
return nativeSetConfiguration(config);
}
public boolean addIceCandidate(IceCandidate candidate) {
@ -781,14 +779,16 @@ public class PeerConnection {
receiver.dispose();
}
receivers.clear();
JniCommon.nativeReleaseRef(nativePeerConnection);
if (nativeObserver != 0) {
nativeFreePeerConnectionObserver(nativeObserver);
}
nativeFreeOwnedPeerConnection(nativePeerConnection);
}
/** Returns a pointer to the native webrtc::PeerConnectionInterface. */
public long getNativePeerConnection() {
return nativeGetNativePeerConnection();
}
@CalledByNative
public long getNativePeerConnection() {
long getNativeOwnedPeerConnection() {
return nativePeerConnection;
}
@ -796,10 +796,7 @@ public class PeerConnection {
return nativeCreatePeerConnectionObserver(observer);
}
public static void freeNativePeerConnectionObserver(long observer) {
nativeFreePeerConnectionObserver(observer);
}
private native long nativeGetNativePeerConnection();
private native SessionDescription nativeGetLocalDescription();
private native SessionDescription nativeGetRemoteDescription();
private native DataChannel nativeCreateDataChannel(String label, DataChannel.Init init);
@ -815,8 +812,8 @@ public class PeerConnection {
private native IceGatheringState nativeIceGatheringState();
private native void nativeClose();
private static native long nativeCreatePeerConnectionObserver(Observer observer);
private static native void nativeFreePeerConnectionObserver(long observer);
private native boolean nativeSetConfiguration(RTCConfiguration config, long nativeObserver);
private static native void nativeFreeOwnedPeerConnection(long ownedPeerConnection);
private native boolean nativeSetConfiguration(RTCConfiguration config);
private native boolean nativeAddIceCandidate(
String sdpMid, int sdpMLineIndex, String iceCandidateSdp);
private native boolean nativeRemoveIceCandidates(final IceCandidate[] candidates);