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/IceCandidate.java",
"api/org/webrtc/MediaConstraints.java", "api/org/webrtc/MediaConstraints.java",
"api/org/webrtc/MediaStream.java", "api/org/webrtc/MediaStream.java",
"api/org/webrtc/MediaStreamTrack.java",
"api/org/webrtc/NetworkMonitor.java", "api/org/webrtc/NetworkMonitor.java",
"api/org/webrtc/NetworkMonitorAutoDetect.java", "api/org/webrtc/NetworkMonitorAutoDetect.java",
"api/org/webrtc/RTCStats.java", "api/org/webrtc/RTCStats.java",

View File

@ -15,9 +15,31 @@ public class MediaStreamTrack {
/** Tracks MediaStreamTrackInterface.TrackState */ /** Tracks MediaStreamTrackInterface.TrackState */
public enum State { LIVE, ENDED } public enum State { LIVE, ENDED }
// Must be kept in sync with cricket::MediaType.
public enum MediaType { public enum MediaType {
MEDIA_TYPE_AUDIO, MEDIA_TYPE_AUDIO(0),
MEDIA_TYPE_VIDEO, 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; final long nativeTrack;
@ -27,36 +49,36 @@ public class MediaStreamTrack {
} }
public String id() { public String id() {
return nativeId(nativeTrack); return getNativeId(nativeTrack);
} }
public String kind() { public String kind() {
return nativeKind(nativeTrack); return getNativeKind(nativeTrack);
} }
public boolean enabled() { public boolean enabled() {
return nativeEnabled(nativeTrack); return getNativeEnabled(nativeTrack);
} }
public boolean setEnabled(boolean enable) { public boolean setEnabled(boolean enable) {
return nativeSetEnabled(nativeTrack, enable); return setNativeEnabled(nativeTrack, enable);
} }
public State state() { public State state() {
return nativeState(nativeTrack); return getNativeState(nativeTrack);
} }
public void dispose() { public void dispose() {
JniCommon.nativeReleaseRef(nativeTrack); 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$OutputBufferInfo");
LoadClass(jni, "org/webrtc/MediaCodecVideoEncoder$VideoCodecType"); LoadClass(jni, "org/webrtc/MediaCodecVideoEncoder$VideoCodecType");
LoadClass(jni, "org/webrtc/MediaSource$State"); 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/NetworkMonitor");
LoadClass(jni, "org/webrtc/NetworkMonitorAutoDetect$ConnectionType"); LoadClass(jni, "org/webrtc/NetworkMonitorAutoDetect$ConnectionType");
LoadClass(jni, "org/webrtc/NetworkMonitorAutoDetect$IPAddress"); LoadClass(jni, "org/webrtc/NetworkMonitorAutoDetect$IPAddress");

View File

@ -14,6 +14,7 @@
#include "pc/webrtcsdp.h" #include "pc/webrtcsdp.h"
#include "sdk/android/generated_peerconnection_jni/jni/IceCandidate_jni.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" #include "sdk/android/src/jni/classreferenceholder.h"
namespace webrtc { namespace webrtc {
@ -35,42 +36,12 @@ jobject NativeToJavaCandidate(JNIEnv* env,
} // namespace } // namespace
jobject NativeToJavaMediaType(JNIEnv* jni, cricket::MediaType media_type) { jobject NativeToJavaMediaType(JNIEnv* jni, cricket::MediaType media_type) {
jclass j_media_type_class = return Java_MediaType_fromNativeIndex(jni, media_type);
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);
} }
cricket::MediaType JavaToNativeMediaType(JNIEnv* jni, jobject j_media_type) { cricket::MediaType JavaToNativeMediaType(JNIEnv* jni, jobject j_media_type) {
jclass j_media_type_class = return static_cast<cricket::MediaType>(
FindClass(jni, "org/webrtc/MediaStreamTrack$MediaType"); Java_MediaType_getNative(jni, j_media_type));
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;
} }
cricket::Candidate JavaToNativeCandidate(JNIEnv* jni, jobject j_candidate) { cricket::Candidate JavaToNativeCandidate(JNIEnv* jni, jobject j_candidate) {

View File

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