1 /*
2 * Copyright 2017 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "sdk/android/src/jni/pc/rtp_sender.h"
12
13 #include "sdk/android/generated_peerconnection_jni/RtpSender_jni.h"
14 #include "sdk/android/native_api/jni/java_types.h"
15 #include "sdk/android/src/jni/jni_helpers.h"
16 #include "sdk/android/src/jni/pc/rtp_parameters.h"
17
18 namespace webrtc {
19 namespace jni {
20
NativeToJavaRtpSender(JNIEnv * env,rtc::scoped_refptr<RtpSenderInterface> sender)21 ScopedJavaLocalRef<jobject> NativeToJavaRtpSender(
22 JNIEnv* env,
23 rtc::scoped_refptr<RtpSenderInterface> sender) {
24 if (!sender)
25 return nullptr;
26 // Sender is now owned by the Java object, and will be freed from
27 // RtpSender.dispose(), called by PeerConnection.dispose() or getSenders().
28 return Java_RtpSender_Constructor(env, jlongFromPointer(sender.release()));
29 }
30
JNI_RtpSender_SetTrack(JNIEnv * jni,jlong j_rtp_sender_pointer,jlong j_track_pointer)31 static jboolean JNI_RtpSender_SetTrack(JNIEnv* jni,
32 jlong j_rtp_sender_pointer,
33 jlong j_track_pointer) {
34 return reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)
35 ->SetTrack(reinterpret_cast<MediaStreamTrackInterface*>(j_track_pointer));
36 }
37
JNI_RtpSender_GetTrack(JNIEnv * jni,jlong j_rtp_sender_pointer)38 jlong JNI_RtpSender_GetTrack(JNIEnv* jni,
39 jlong j_rtp_sender_pointer) {
40 // MediaStreamTrack will have shared ownership by the MediaStreamTrack Java
41 // object.
42 return jlongFromPointer(
43 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)
44 ->track()
45 .release());
46 }
47
JNI_RtpSender_SetStreams(JNIEnv * jni,jlong j_rtp_sender_pointer,const JavaParamRef<jobject> & j_stream_labels)48 static void JNI_RtpSender_SetStreams(
49 JNIEnv* jni,
50 jlong j_rtp_sender_pointer,
51 const JavaParamRef<jobject>& j_stream_labels) {
52 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)
53 ->SetStreams(JavaListToNativeVector<std::string, jstring>(
54 jni, j_stream_labels, &JavaToNativeString));
55 }
56
JNI_RtpSender_GetStreams(JNIEnv * jni,jlong j_rtp_sender_pointer)57 ScopedJavaLocalRef<jobject> JNI_RtpSender_GetStreams(
58 JNIEnv* jni,
59 jlong j_rtp_sender_pointer) {
60 ScopedJavaLocalRef<jstring> (*convert_function)(JNIEnv*, const std::string&) =
61 &NativeToJavaString;
62 return NativeToJavaList(
63 jni,
64 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->stream_ids(),
65 convert_function);
66 }
67
JNI_RtpSender_GetDtmfSender(JNIEnv * jni,jlong j_rtp_sender_pointer)68 jlong JNI_RtpSender_GetDtmfSender(JNIEnv* jni,
69 jlong j_rtp_sender_pointer) {
70 return jlongFromPointer(
71 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)
72 ->GetDtmfSender()
73 .release());
74 }
75
JNI_RtpSender_SetParameters(JNIEnv * jni,jlong j_rtp_sender_pointer,const JavaParamRef<jobject> & j_parameters)76 jboolean JNI_RtpSender_SetParameters(
77 JNIEnv* jni,
78 jlong j_rtp_sender_pointer,
79 const JavaParamRef<jobject>& j_parameters) {
80 if (IsNull(jni, j_parameters)) {
81 return false;
82 }
83 RtpParameters parameters = JavaToNativeRtpParameters(jni, j_parameters);
84 return reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)
85 ->SetParameters(parameters)
86 .ok();
87 }
88
JNI_RtpSender_GetParameters(JNIEnv * jni,jlong j_rtp_sender_pointer)89 ScopedJavaLocalRef<jobject> JNI_RtpSender_GetParameters(
90 JNIEnv* jni,
91 jlong j_rtp_sender_pointer) {
92 RtpParameters parameters =
93 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)
94 ->GetParameters();
95 return NativeToJavaRtpParameters(jni, parameters);
96 }
97
JNI_RtpSender_GetId(JNIEnv * jni,jlong j_rtp_sender_pointer)98 ScopedJavaLocalRef<jstring> JNI_RtpSender_GetId(JNIEnv* jni,
99 jlong j_rtp_sender_pointer) {
100 return NativeToJavaString(
101 jni, reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->id());
102 }
103
JNI_RtpSender_SetFrameEncryptor(JNIEnv * jni,jlong j_rtp_sender_pointer,jlong j_frame_encryptor_pointer)104 static void JNI_RtpSender_SetFrameEncryptor(JNIEnv* jni,
105 jlong j_rtp_sender_pointer,
106 jlong j_frame_encryptor_pointer) {
107 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)
108 ->SetFrameEncryptor(rtc::scoped_refptr<FrameEncryptorInterface>(
109 reinterpret_cast<FrameEncryptorInterface*>(
110 j_frame_encryptor_pointer)));
111 }
112
JNI_RtpSender_GetMediaType(JNIEnv * jni,jlong j_rtp_sender_pointer)113 static ScopedJavaLocalRef<jstring> JNI_RtpSender_GetMediaType(
114 JNIEnv* jni,
115 jlong j_rtp_sender_pointer) {
116 cricket::MediaType media_type =
117 reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)->media_type();
118 return media_type == cricket::MEDIA_TYPE_AUDIO
119 ? NativeToJavaString(jni, "audio")
120 : NativeToJavaString(jni, "video");
121 }
122
123 } // namespace jni
124 } // namespace webrtc
125