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}diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index 202b2c0..c7738cc 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -288,6 +288,7 @@
"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",
diff --git a/sdk/android/api/org/webrtc/MediaStreamTrack.java b/sdk/android/api/org/webrtc/MediaStreamTrack.java
index 656d024..b13ea9e 100644
--- a/sdk/android/api/org/webrtc/MediaStreamTrack.java
+++ b/sdk/android/api/org/webrtc/MediaStreamTrack.java
@@ -15,9 +15,31 @@
/** 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 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);
}
diff --git a/sdk/android/src/jni/classreferenceholder.cc b/sdk/android/src/jni/classreferenceholder.cc
index 50d45ed..a175a0f 100644
--- a/sdk/android/src/jni/classreferenceholder.cc
+++ b/sdk/android/src/jni/classreferenceholder.cc
@@ -75,9 +75,6 @@
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");
diff --git a/sdk/android/src/jni/pc/java_native_conversion.cc b/sdk/android/src/jni/pc/java_native_conversion.cc
index ca9bbfb..ee4640b1 100644
--- a/sdk/android/src/jni/pc/java_native_conversion.cc
+++ b/sdk/android/src/jni/pc/java_native_conversion.cc
@@ -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 @@
} // 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) {
diff --git a/sdk/android/src/jni/pc/mediastreamtrack_jni.cc b/sdk/android/src/jni/pc/mediastreamtrack_jni.cc
index f570881..0983bba 100644
--- a/sdk/android/src/jni/pc/mediastreamtrack_jni.cc
+++ b/sdk/android/src/jni/pc/mediastreamtrack_jni.cc
@@ -15,7 +15,7 @@
namespace jni {
JNI_FUNCTION_DECLARATION(jstring,
- MediaStreamTrack_nativeId,
+ MediaStreamTrack_getNativeId,
JNIEnv* jni,
jclass,
jlong j_p) {
@@ -24,7 +24,7 @@
}
JNI_FUNCTION_DECLARATION(jstring,
- MediaStreamTrack_nativeKind,
+ MediaStreamTrack_getNativeKind,
JNIEnv* jni,
jclass,
jlong j_p) {
@@ -33,7 +33,7 @@
}
JNI_FUNCTION_DECLARATION(jboolean,
- MediaStreamTrack_nativeEnabled,
+ MediaStreamTrack_getNativeEnabled,
JNIEnv* jni,
jclass,
jlong j_p) {
@@ -41,7 +41,7 @@
}
JNI_FUNCTION_DECLARATION(jobject,
- MediaStreamTrack_nativeState,
+ MediaStreamTrack_getNativeState,
JNIEnv* jni,
jclass,
jlong j_p) {
@@ -51,7 +51,7 @@
}
JNI_FUNCTION_DECLARATION(jboolean,
- MediaStreamTrack_nativeSetEnabled,
+ MediaStreamTrack_setNativeEnabled,
JNIEnv* jni,
jclass,
jlong j_p,