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/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",
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user