| Index: talk/app/webrtc/java/src/org/webrtc/MediaStream.java
|
| diff --git a/talk/app/webrtc/java/src/org/webrtc/MediaStream.java b/talk/app/webrtc/java/src/org/webrtc/MediaStream.java
|
| index aa5b3e0697bd229afbb8f39101abab465fd497a4..be00f13e674580c6ccd7553557e9e738f7adc8cd 100644
|
| --- a/talk/app/webrtc/java/src/org/webrtc/MediaStream.java
|
| +++ b/talk/app/webrtc/java/src/org/webrtc/MediaStream.java
|
| @@ -33,12 +33,14 @@ import java.util.LinkedList;
|
| public class MediaStream {
|
| public final LinkedList<AudioTrack> audioTracks;
|
| public final LinkedList<VideoTrack> videoTracks;
|
| + public final LinkedList<VideoTrack> preservedVideoTracks;
|
| // Package-protected for PeerConnection.
|
| final long nativeStream;
|
|
|
| public MediaStream(long nativeStream) {
|
| audioTracks = new LinkedList<AudioTrack>();
|
| videoTracks = new LinkedList<VideoTrack>();
|
| + preservedVideoTracks = new LinkedList<VideoTrack>();
|
| this.nativeStream = nativeStream;
|
| }
|
|
|
| @@ -58,6 +60,17 @@ public class MediaStream {
|
| return false;
|
| }
|
|
|
| + // Tracks added in addTrack() call will be auto released once MediaStream.dispose()
|
| + // is called. If video track need to be preserved after MediaStream is destroyed it
|
| + // should be added to MediaStream using addPreservedTrack() call.
|
| + public boolean addPreservedTrack(VideoTrack track) {
|
| + if (nativeAddVideoTrack(nativeStream, track.nativeTrack)) {
|
| + preservedVideoTracks.add(track);
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| public boolean removeTrack(AudioTrack track) {
|
| if (nativeRemoveAudioTrack(nativeStream, track.nativeTrack)) {
|
| audioTracks.remove(track);
|
| @@ -69,12 +82,14 @@ public class MediaStream {
|
| public boolean removeTrack(VideoTrack track) {
|
| if (nativeRemoveVideoTrack(nativeStream, track.nativeTrack)) {
|
| videoTracks.remove(track);
|
| + preservedVideoTracks.remove(track);
|
| return true;
|
| }
|
| return false;
|
| }
|
|
|
| public void dispose() {
|
| + // Remove and release previously added audio and video tracks.
|
| while (!audioTracks.isEmpty()) {
|
| AudioTrack track = audioTracks.getFirst();
|
| removeTrack(track);
|
| @@ -85,6 +100,10 @@ public class MediaStream {
|
| removeTrack(track);
|
| track.dispose();
|
| }
|
| + // Remove, but do not release preserved video tracks.
|
| + while (!preservedVideoTracks.isEmpty()) {
|
| + removeTrack(preservedVideoTracks.getFirst());
|
| + }
|
| free(nativeStream);
|
| }
|
|
|
|
|