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:
parent
32f64d2ef9
commit
4fa5da54d5
@ -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",
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user