xref: /aosp_15_r20/external/webrtc/sdk/android/src/jni/pc/rtp_sender.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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