Android: Generate JNI code for MediaStreamTrack

Bug: webrtc:8278
Change-Id: Id5ac6ecd4f65bed4ae4b2953ef58ebc390508d21
Reviewed-on: https://webrtc-review.googlesource.com/25963
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20910}
This commit is contained in:
Magnus Jedvert 2017-11-27 13:44:38 +01:00 committed by Commit Bot
parent 32f64d2ef9
commit 4fa5da54d5
5 changed files with 44 additions and 53 deletions

View File

@ -288,6 +288,7 @@ generate_jni("generated_peerconnection_jni") {
"api/org/webrtc/IceCandidate.java",
"api/org/webrtc/MediaConstraints.java",
"api/org/webrtc/MediaStream.java",
"api/org/webrtc/MediaStreamTrack.java",
"api/org/webrtc/NetworkMonitor.java",
"api/org/webrtc/NetworkMonitorAutoDetect.java",
"api/org/webrtc/RTCStats.java",

View File

@ -15,9 +15,31 @@ public class MediaStreamTrack {
/** Tracks MediaStreamTrackInterface.TrackState */
public enum State { LIVE, ENDED }
// Must be kept in sync with cricket::MediaType.
public enum MediaType {
MEDIA_TYPE_AUDIO,
MEDIA_TYPE_VIDEO,
MEDIA_TYPE_AUDIO(0),
MEDIA_TYPE_VIDEO(1);
private final int nativeIndex;
private MediaType(int nativeIndex) {
this.nativeIndex = nativeIndex;
}
@CalledByNative("MediaType")
int getNative() {
return nativeIndex;
}
@CalledByNative("MediaType")
static MediaType fromNativeIndex(int nativeIndex) {
for (MediaType type : MediaType.values()) {
if (type.getNative() == nativeIndex) {
return type;
}
}
throw new IllegalArgumentException("Unknown native media type: " + nativeIndex);
}
}
final long nativeTrack;
@ -27,36 +49,36 @@ public class MediaStreamTrack {
}
public String id() {
return nativeId(nativeTrack);
return getNativeId(nativeTrack);
}
public String kind() {
return nativeKind(nativeTrack);
return getNativeKind(nativeTrack);
}
public boolean enabled() {
return nativeEnabled(nativeTrack);
return getNativeEnabled(nativeTrack);
}
public boolean setEnabled(boolean enable) {
return nativeSetEnabled(nativeTrack, enable);
return setNativeEnabled(nativeTrack, enable);
}
public State state() {
return nativeState(nativeTrack);
return getNativeState(nativeTrack);
}
public void dispose() {
JniCommon.nativeReleaseRef(nativeTrack);
}
private static native String nativeId(long nativeTrack);
private static native String getNativeId(long nativeTrack);
private static native String nativeKind(long nativeTrack);
private static native String getNativeKind(long nativeTrack);
private static native boolean nativeEnabled(long nativeTrack);
private static native boolean getNativeEnabled(long nativeTrack);
private static native boolean nativeSetEnabled(long nativeTrack, boolean enabled);
private static native boolean setNativeEnabled(long nativeTrack, boolean enabled);
private static native State nativeState(long nativeTrack);
private static native State getNativeState(long nativeTrack);
}

View File

@ -75,9 +75,6 @@ ClassReferenceHolder::ClassReferenceHolder(JNIEnv* jni) {
LoadClass(jni, "org/webrtc/MediaCodecVideoEncoder$OutputBufferInfo");
LoadClass(jni, "org/webrtc/MediaCodecVideoEncoder$VideoCodecType");
LoadClass(jni, "org/webrtc/MediaSource$State");
LoadClass(jni, "org/webrtc/MediaStreamTrack");
LoadClass(jni, "org/webrtc/MediaStreamTrack$MediaType");
LoadClass(jni, "org/webrtc/MediaStreamTrack$State");
LoadClass(jni, "org/webrtc/NetworkMonitor");
LoadClass(jni, "org/webrtc/NetworkMonitorAutoDetect$ConnectionType");
LoadClass(jni, "org/webrtc/NetworkMonitorAutoDetect$IPAddress");

View File

@ -14,6 +14,7 @@
#include "pc/webrtcsdp.h"
#include "sdk/android/generated_peerconnection_jni/jni/IceCandidate_jni.h"
#include "sdk/android/generated_peerconnection_jni/jni/MediaStreamTrack_jni.h"
#include "sdk/android/src/jni/classreferenceholder.h"
namespace webrtc {
@ -35,42 +36,12 @@ jobject NativeToJavaCandidate(JNIEnv* env,
} // namespace
jobject NativeToJavaMediaType(JNIEnv* jni, cricket::MediaType media_type) {
jclass j_media_type_class =
FindClass(jni, "org/webrtc/MediaStreamTrack$MediaType");
const char* media_type_str = nullptr;
switch (media_type) {
case cricket::MEDIA_TYPE_AUDIO:
media_type_str = "MEDIA_TYPE_AUDIO";
break;
case cricket::MEDIA_TYPE_VIDEO:
media_type_str = "MEDIA_TYPE_VIDEO";
break;
case cricket::MEDIA_TYPE_DATA:
RTC_NOTREACHED();
break;
}
jfieldID j_media_type_fid =
GetStaticFieldID(jni, j_media_type_class, media_type_str,
"Lorg/webrtc/MediaStreamTrack$MediaType;");
return GetStaticObjectField(jni, j_media_type_class, j_media_type_fid);
return Java_MediaType_fromNativeIndex(jni, media_type);
}
cricket::MediaType JavaToNativeMediaType(JNIEnv* jni, jobject j_media_type) {
jclass j_media_type_class =
FindClass(jni, "org/webrtc/MediaStreamTrack$MediaType");
jmethodID j_name_id =
GetMethodID(jni, j_media_type_class, "name", "()Ljava/lang/String;");
jstring j_type_string =
(jstring)jni->CallObjectMethod(j_media_type, j_name_id);
CHECK_EXCEPTION(jni) << "error during CallObjectMethod";
std::string type_string = JavaToStdString(jni, j_type_string);
RTC_DCHECK(type_string == "MEDIA_TYPE_AUDIO" ||
type_string == "MEDIA_TYPE_VIDEO")
<< "Media type: " << type_string;
return type_string == "MEDIA_TYPE_AUDIO" ? cricket::MEDIA_TYPE_AUDIO
: cricket::MEDIA_TYPE_VIDEO;
return static_cast<cricket::MediaType>(
Java_MediaType_getNative(jni, j_media_type));
}
cricket::Candidate JavaToNativeCandidate(JNIEnv* jni, jobject j_candidate) {

View File

@ -15,7 +15,7 @@ namespace webrtc {
namespace jni {
JNI_FUNCTION_DECLARATION(jstring,
MediaStreamTrack_nativeId,
MediaStreamTrack_getNativeId,
JNIEnv* jni,
jclass,
jlong j_p) {
@ -24,7 +24,7 @@ JNI_FUNCTION_DECLARATION(jstring,
}
JNI_FUNCTION_DECLARATION(jstring,
MediaStreamTrack_nativeKind,
MediaStreamTrack_getNativeKind,
JNIEnv* jni,
jclass,
jlong j_p) {
@ -33,7 +33,7 @@ JNI_FUNCTION_DECLARATION(jstring,
}
JNI_FUNCTION_DECLARATION(jboolean,
MediaStreamTrack_nativeEnabled,
MediaStreamTrack_getNativeEnabled,
JNIEnv* jni,
jclass,
jlong j_p) {
@ -41,7 +41,7 @@ JNI_FUNCTION_DECLARATION(jboolean,
}
JNI_FUNCTION_DECLARATION(jobject,
MediaStreamTrack_nativeState,
MediaStreamTrack_getNativeState,
JNIEnv* jni,
jclass,
jlong j_p) {
@ -51,7 +51,7 @@ JNI_FUNCTION_DECLARATION(jobject,
}
JNI_FUNCTION_DECLARATION(jboolean,
MediaStreamTrack_nativeSetEnabled,
MediaStreamTrack_setNativeEnabled,
JNIEnv* jni,
jclass,
jlong j_p,