Android: Generate JNI code for MediaStream

Bug: webrtc:8278
Change-Id: I48d0615f3db3f22e7179a2d7c59b970a33678ada
Reviewed-on: https://webrtc-review.googlesource.com/25962
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20891}
This commit is contained in:
Magnus Jedvert
2017-11-27 11:23:42 +01:00
committed by Commit Bot
parent b8ff8f7d40
commit 6a0345b3b0
6 changed files with 77 additions and 126 deletions

View File

@ -12,21 +12,25 @@ package org.webrtc;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
/** Java wrapper for a C++ MediaStreamInterface. */
public class MediaStream {
private static final String TAG = "MediaStream";
public final List<AudioTrack> audioTracks = new ArrayList<>();
public final List<VideoTrack> videoTracks = new ArrayList<>();
public final List<VideoTrack> preservedVideoTracks = new ArrayList<>();
// Package-protected for PeerConnection.
final long nativeStream;
@CalledByNative
public MediaStream(long nativeStream) {
this.nativeStream = nativeStream;
}
public boolean addTrack(AudioTrack track) {
if (nativeAddAudioTrack(nativeStream, track.nativeTrack)) {
if (addAudioTrackToNativeStream(nativeStream, track.nativeTrack)) {
audioTracks.add(track);
return true;
}
@ -34,7 +38,7 @@ public class MediaStream {
}
public boolean addTrack(VideoTrack track) {
if (nativeAddVideoTrack(nativeStream, track.nativeTrack)) {
if (addVideoTrackToNativeStream(nativeStream, track.nativeTrack)) {
videoTracks.add(track);
return true;
}
@ -45,7 +49,7 @@ public class MediaStream {
// 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)) {
if (addVideoTrackToNativeStream(nativeStream, track.nativeTrack)) {
preservedVideoTracks.add(track);
return true;
}
@ -54,15 +58,16 @@ public class MediaStream {
public boolean removeTrack(AudioTrack track) {
audioTracks.remove(track);
return nativeRemoveAudioTrack(nativeStream, track.nativeTrack);
return removeNativeAudioTrack(nativeStream, track.nativeTrack);
}
public boolean removeTrack(VideoTrack track) {
videoTracks.remove(track);
preservedVideoTracks.remove(track);
return nativeRemoveVideoTrack(nativeStream, track.nativeTrack);
return removeNativeVideoTrack(nativeStream, track.nativeTrack);
}
@CalledByNative
public void dispose() {
// Remove and release previously added audio and video tracks.
while (!audioTracks.isEmpty()) {
@ -83,7 +88,7 @@ public class MediaStream {
}
public String label() {
return nativeLabel(nativeStream);
return getNativeLabel(nativeStream);
}
@Override
@ -91,15 +96,51 @@ public class MediaStream {
return "[" + label() + ":A=" + audioTracks.size() + ":V=" + videoTracks.size() + "]";
}
private static native boolean nativeAddAudioTrack(long nativeStream, long nativeAudioTrack);
@CalledByNative
void addNativeAudioTrack(long nativeTrack) {
audioTracks.add(new AudioTrack(nativeTrack));
}
private static native boolean nativeAddVideoTrack(long nativeStream, long nativeVideoTrack);
@CalledByNative
void addNativeVideoTrack(long nativeTrack) {
videoTracks.add(new VideoTrack(nativeTrack));
}
private static native boolean nativeRemoveAudioTrack(long nativeStream, long nativeAudioTrack);
@CalledByNative
void removeAudioTrack(long nativeTrack) {
removeMediaStreamTrack(audioTracks, nativeTrack);
}
private static native boolean nativeRemoveVideoTrack(long nativeStream, long nativeVideoTrack);
@CalledByNative
void removeVideoTrack(long nativeTrack) {
removeMediaStreamTrack(videoTracks, nativeTrack);
}
private static native String nativeLabel(long nativeStream);
private static void removeMediaStreamTrack(
List<? extends MediaStreamTrack> tracks, long nativeTrack) {
final Iterator<? extends MediaStreamTrack> it = tracks.iterator();
while (it.hasNext()) {
MediaStreamTrack track = it.next();
if (track.nativeTrack == nativeTrack) {
track.dispose();
it.remove();
return;
}
}
Logging.e(TAG, "Couldn't not find track");
}
private static native boolean addAudioTrackToNativeStream(
long nativeStream, long nativeAudioTrack);
private static native boolean addVideoTrackToNativeStream(
long nativeStream, long nativeVideoTrack);
private static native boolean removeNativeAudioTrack(long nativeStream, long nativeAudioTrack);
private static native boolean removeNativeVideoTrack(long nativeStream, long nativeVideoTrack);
private static native String getNativeLabel(long nativeStream);
private static native void free(long nativeStream);
}