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:
committed by
Commit Bot
parent
b8ff8f7d40
commit
6a0345b3b0
@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user