Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: webrtc/sdk/android/src/jni/pc/java_native_conversion.cc

Issue 2989323002: Revert of Break peerconnection_jni.cc into multiple files, in "pc" directory. (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 "webrtc/sdk/android/src/jni/pc/java_native_conversion.h"
12
13 #include <string>
14
15 #include "webrtc/pc/webrtcsdp.h"
16 #include "webrtc/sdk/android/src/jni/classreferenceholder.h"
17
18 namespace webrtc_jni {
19
20 webrtc::DataChannelInit JavaToNativeDataChannelInit(JNIEnv* jni,
21 jobject j_init) {
22 webrtc::DataChannelInit init;
23
24 jclass j_init_class = FindClass(jni, "org/webrtc/DataChannel$Init");
25 jfieldID ordered_id = GetFieldID(jni, j_init_class, "ordered", "Z");
26 jfieldID max_retransmit_time_id =
27 GetFieldID(jni, j_init_class, "maxRetransmitTimeMs", "I");
28 jfieldID max_retransmits_id =
29 GetFieldID(jni, j_init_class, "maxRetransmits", "I");
30 jfieldID protocol_id =
31 GetFieldID(jni, j_init_class, "protocol", "Ljava/lang/String;");
32 jfieldID negotiated_id = GetFieldID(jni, j_init_class, "negotiated", "Z");
33 jfieldID id_id = GetFieldID(jni, j_init_class, "id", "I");
34
35 init.ordered = GetBooleanField(jni, j_init, ordered_id);
36 init.maxRetransmitTime = GetIntField(jni, j_init, max_retransmit_time_id);
37 init.maxRetransmits = GetIntField(jni, j_init, max_retransmits_id);
38 init.protocol =
39 JavaToStdString(jni, GetStringField(jni, j_init, protocol_id));
40 init.negotiated = GetBooleanField(jni, j_init, negotiated_id);
41 init.id = GetIntField(jni, j_init, id_id);
42
43 return init;
44 }
45
46 jobject NativeToJavaMediaType(JNIEnv* jni, cricket::MediaType media_type) {
47 jclass j_media_type_class =
48 FindClass(jni, "org/webrtc/MediaStreamTrack$MediaType");
49
50 const char* media_type_str = nullptr;
51 switch (media_type) {
52 case cricket::MEDIA_TYPE_AUDIO:
53 media_type_str = "MEDIA_TYPE_AUDIO";
54 break;
55 case cricket::MEDIA_TYPE_VIDEO:
56 media_type_str = "MEDIA_TYPE_VIDEO";
57 break;
58 case cricket::MEDIA_TYPE_DATA:
59 RTC_NOTREACHED();
60 break;
61 }
62 jfieldID j_media_type_fid =
63 GetStaticFieldID(jni, j_media_type_class, media_type_str,
64 "Lorg/webrtc/MediaStreamTrack$MediaType;");
65 return GetStaticObjectField(jni, j_media_type_class, j_media_type_fid);
66 }
67
68 cricket::MediaType JavaToNativeMediaType(JNIEnv* jni, jobject j_media_type) {
69 jclass j_media_type_class =
70 FindClass(jni, "org/webrtc/MediaStreamTrack$MediaType");
71 jmethodID j_name_id =
72 GetMethodID(jni, j_media_type_class, "name", "()Ljava/lang/String;");
73 jstring j_type_string =
74 (jstring)jni->CallObjectMethod(j_media_type, j_name_id);
75 CHECK_EXCEPTION(jni) << "error during CallObjectMethod";
76 std::string type_string = JavaToStdString(jni, j_type_string);
77
78 RTC_DCHECK(type_string == "MEDIA_TYPE_AUDIO" ||
79 type_string == "MEDIA_TYPE_VIDEO")
80 << "Media type: " << type_string;
81 return type_string == "MEDIA_TYPE_AUDIO" ? cricket::MEDIA_TYPE_AUDIO
82 : cricket::MEDIA_TYPE_VIDEO;
83 }
84
85 cricket::Candidate JavaToNativeCandidate(JNIEnv* jni, jobject j_candidate) {
86 jclass j_candidate_class = GetObjectClass(jni, j_candidate);
87 jfieldID j_sdp_mid_id =
88 GetFieldID(jni, j_candidate_class, "sdpMid", "Ljava/lang/String;");
89 std::string sdp_mid =
90 JavaToStdString(jni, GetStringField(jni, j_candidate, j_sdp_mid_id));
91 jfieldID j_sdp_id =
92 GetFieldID(jni, j_candidate_class, "sdp", "Ljava/lang/String;");
93 std::string sdp =
94 JavaToStdString(jni, GetStringField(jni, j_candidate, j_sdp_id));
95 cricket::Candidate candidate;
96 if (!webrtc::SdpDeserializeCandidate(sdp_mid, sdp, &candidate, NULL)) {
97 LOG(LS_ERROR) << "SdpDescrializeCandidate failed with sdp " << sdp;
98 }
99 return candidate;
100 }
101
102 jobject NativeToJavaCandidate(JNIEnv* jni,
103 jclass* candidate_class,
104 const cricket::Candidate& candidate) {
105 std::string sdp = webrtc::SdpSerializeCandidate(candidate);
106 RTC_CHECK(!sdp.empty()) << "got an empty ICE candidate";
107 jmethodID ctor = GetMethodID(jni, *candidate_class, "<init>",
108 "(Ljava/lang/String;ILjava/lang/String;)V");
109 jstring j_mid = JavaStringFromStdString(jni, candidate.transport_name());
110 jstring j_sdp = JavaStringFromStdString(jni, sdp);
111 // sdp_mline_index is not used, pass an invalid value -1.
112 jobject j_candidate =
113 jni->NewObject(*candidate_class, ctor, j_mid, -1, j_sdp);
114 CHECK_EXCEPTION(jni) << "error during Java Candidate NewObject";
115 return j_candidate;
116 }
117
118 jobjectArray NativeToJavaCandidateArray(
119 JNIEnv* jni,
120 const std::vector<cricket::Candidate>& candidates) {
121 jclass candidate_class = FindClass(jni, "org/webrtc/IceCandidate");
122 jobjectArray java_candidates =
123 jni->NewObjectArray(candidates.size(), candidate_class, NULL);
124 int i = 0;
125 for (const cricket::Candidate& candidate : candidates) {
126 jobject j_candidate =
127 NativeToJavaCandidate(jni, &candidate_class, candidate);
128 jni->SetObjectArrayElement(java_candidates, i++, j_candidate);
129 }
130 return java_candidates;
131 }
132
133 webrtc::SessionDescriptionInterface* JavaToNativeSessionDescription(
134 JNIEnv* jni,
135 jobject j_sdp) {
136 jfieldID j_type_id = GetFieldID(jni, GetObjectClass(jni, j_sdp), "type",
137 "Lorg/webrtc/SessionDescription$Type;");
138 jobject j_type = GetObjectField(jni, j_sdp, j_type_id);
139 jmethodID j_canonical_form_id =
140 GetMethodID(jni, GetObjectClass(jni, j_type), "canonicalForm",
141 "()Ljava/lang/String;");
142 jstring j_type_string =
143 (jstring)jni->CallObjectMethod(j_type, j_canonical_form_id);
144 CHECK_EXCEPTION(jni) << "error during CallObjectMethod";
145 std::string std_type = JavaToStdString(jni, j_type_string);
146
147 jfieldID j_description_id = GetFieldID(jni, GetObjectClass(jni, j_sdp),
148 "description", "Ljava/lang/String;");
149 jstring j_description = (jstring)GetObjectField(jni, j_sdp, j_description_id);
150 std::string std_description = JavaToStdString(jni, j_description);
151
152 return webrtc::CreateSessionDescription(std_type, std_description, NULL);
153 }
154
155 jobject NativeToJavaSessionDescription(
156 JNIEnv* jni,
157 const webrtc::SessionDescriptionInterface* desc) {
158 std::string sdp;
159 RTC_CHECK(desc->ToString(&sdp)) << "got so far: " << sdp;
160 jstring j_description = JavaStringFromStdString(jni, sdp);
161
162 jclass j_type_class = FindClass(jni, "org/webrtc/SessionDescription$Type");
163 jmethodID j_type_from_canonical = GetStaticMethodID(
164 jni, j_type_class, "fromCanonicalForm",
165 "(Ljava/lang/String;)Lorg/webrtc/SessionDescription$Type;");
166 jstring j_type_string = JavaStringFromStdString(jni, desc->type());
167 jobject j_type = jni->CallStaticObjectMethod(
168 j_type_class, j_type_from_canonical, j_type_string);
169 CHECK_EXCEPTION(jni) << "error during CallObjectMethod";
170
171 jclass j_sdp_class = FindClass(jni, "org/webrtc/SessionDescription");
172 jmethodID j_sdp_ctor =
173 GetMethodID(jni, j_sdp_class, "<init>",
174 "(Lorg/webrtc/SessionDescription$Type;Ljava/lang/String;)V");
175 jobject j_sdp =
176 jni->NewObject(j_sdp_class, j_sdp_ctor, j_type, j_description);
177 CHECK_EXCEPTION(jni) << "error during NewObject";
178 return j_sdp;
179 }
180
181 webrtc::PeerConnectionFactoryInterface::Options
182 JavaToNativePeerConnectionFactoryOptions(JNIEnv* jni, jobject options) {
183 jclass options_class = jni->GetObjectClass(options);
184 jfieldID network_ignore_mask_field =
185 jni->GetFieldID(options_class, "networkIgnoreMask", "I");
186 int network_ignore_mask =
187 jni->GetIntField(options, network_ignore_mask_field);
188
189 jfieldID disable_encryption_field =
190 jni->GetFieldID(options_class, "disableEncryption", "Z");
191 bool disable_encryption =
192 jni->GetBooleanField(options, disable_encryption_field);
193
194 jfieldID disable_network_monitor_field =
195 jni->GetFieldID(options_class, "disableNetworkMonitor", "Z");
196 bool disable_network_monitor =
197 jni->GetBooleanField(options, disable_network_monitor_field);
198
199 webrtc::PeerConnectionFactoryInterface::Options native_options;
200
201 // This doesn't necessarily match the c++ version of this struct; feel free
202 // to add more parameters as necessary.
203 native_options.network_ignore_mask = network_ignore_mask;
204 native_options.disable_encryption = disable_encryption;
205 native_options.disable_network_monitor = disable_network_monitor;
206 return native_options;
207 }
208
209 webrtc::PeerConnectionInterface::IceTransportsType
210 JavaToNativeIceTransportsType(JNIEnv* jni, jobject j_ice_transports_type) {
211 std::string enum_name =
212 GetJavaEnumName(jni, "org/webrtc/PeerConnection$IceTransportsType",
213 j_ice_transports_type);
214
215 if (enum_name == "ALL")
216 return webrtc::PeerConnectionInterface::kAll;
217
218 if (enum_name == "RELAY")
219 return webrtc::PeerConnectionInterface::kRelay;
220
221 if (enum_name == "NOHOST")
222 return webrtc::PeerConnectionInterface::kNoHost;
223
224 if (enum_name == "NONE")
225 return webrtc::PeerConnectionInterface::kNone;
226
227 RTC_CHECK(false) << "Unexpected IceTransportsType enum_name " << enum_name;
228 return webrtc::PeerConnectionInterface::kAll;
229 }
230
231 webrtc::PeerConnectionInterface::BundlePolicy JavaToNativeBundlePolicy(
232 JNIEnv* jni,
233 jobject j_bundle_policy) {
234 std::string enum_name = GetJavaEnumName(
235 jni, "org/webrtc/PeerConnection$BundlePolicy", j_bundle_policy);
236
237 if (enum_name == "BALANCED")
238 return webrtc::PeerConnectionInterface::kBundlePolicyBalanced;
239
240 if (enum_name == "MAXBUNDLE")
241 return webrtc::PeerConnectionInterface::kBundlePolicyMaxBundle;
242
243 if (enum_name == "MAXCOMPAT")
244 return webrtc::PeerConnectionInterface::kBundlePolicyMaxCompat;
245
246 RTC_CHECK(false) << "Unexpected BundlePolicy enum_name " << enum_name;
247 return webrtc::PeerConnectionInterface::kBundlePolicyBalanced;
248 }
249
250 webrtc::PeerConnectionInterface::RtcpMuxPolicy JavaToNativeRtcpMuxPolicy(
251 JNIEnv* jni,
252 jobject j_rtcp_mux_policy) {
253 std::string enum_name = GetJavaEnumName(
254 jni, "org/webrtc/PeerConnection$RtcpMuxPolicy", j_rtcp_mux_policy);
255
256 if (enum_name == "NEGOTIATE")
257 return webrtc::PeerConnectionInterface::kRtcpMuxPolicyNegotiate;
258
259 if (enum_name == "REQUIRE")
260 return webrtc::PeerConnectionInterface::kRtcpMuxPolicyRequire;
261
262 RTC_CHECK(false) << "Unexpected RtcpMuxPolicy enum_name " << enum_name;
263 return webrtc::PeerConnectionInterface::kRtcpMuxPolicyNegotiate;
264 }
265
266 webrtc::PeerConnectionInterface::TcpCandidatePolicy
267 JavaToNativeTcpCandidatePolicy(JNIEnv* jni, jobject j_tcp_candidate_policy) {
268 std::string enum_name =
269 GetJavaEnumName(jni, "org/webrtc/PeerConnection$TcpCandidatePolicy",
270 j_tcp_candidate_policy);
271
272 if (enum_name == "ENABLED")
273 return webrtc::PeerConnectionInterface::kTcpCandidatePolicyEnabled;
274
275 if (enum_name == "DISABLED")
276 return webrtc::PeerConnectionInterface::kTcpCandidatePolicyDisabled;
277
278 RTC_CHECK(false) << "Unexpected TcpCandidatePolicy enum_name " << enum_name;
279 return webrtc::PeerConnectionInterface::kTcpCandidatePolicyEnabled;
280 }
281
282 webrtc::PeerConnectionInterface::CandidateNetworkPolicy
283 JavaToNativeCandidateNetworkPolicy(JNIEnv* jni,
284 jobject j_candidate_network_policy) {
285 std::string enum_name =
286 GetJavaEnumName(jni, "org/webrtc/PeerConnection$CandidateNetworkPolicy",
287 j_candidate_network_policy);
288
289 if (enum_name == "ALL")
290 return webrtc::PeerConnectionInterface::kCandidateNetworkPolicyAll;
291
292 if (enum_name == "LOW_COST")
293 return webrtc::PeerConnectionInterface::kCandidateNetworkPolicyLowCost;
294
295 RTC_CHECK(false) << "Unexpected CandidateNetworkPolicy enum_name "
296 << enum_name;
297 return webrtc::PeerConnectionInterface::kCandidateNetworkPolicyAll;
298 }
299
300 rtc::KeyType JavaToNativeKeyType(JNIEnv* jni, jobject j_key_type) {
301 std::string enum_name =
302 GetJavaEnumName(jni, "org/webrtc/PeerConnection$KeyType", j_key_type);
303
304 if (enum_name == "RSA")
305 return rtc::KT_RSA;
306 if (enum_name == "ECDSA")
307 return rtc::KT_ECDSA;
308
309 RTC_CHECK(false) << "Unexpected KeyType enum_name " << enum_name;
310 return rtc::KT_ECDSA;
311 }
312
313 webrtc::PeerConnectionInterface::ContinualGatheringPolicy
314 JavaToNativeContinualGatheringPolicy(JNIEnv* jni, jobject j_gathering_policy) {
315 std::string enum_name =
316 GetJavaEnumName(jni, "org/webrtc/PeerConnection$ContinualGatheringPolicy",
317 j_gathering_policy);
318 if (enum_name == "GATHER_ONCE")
319 return webrtc::PeerConnectionInterface::GATHER_ONCE;
320
321 if (enum_name == "GATHER_CONTINUALLY")
322 return webrtc::PeerConnectionInterface::GATHER_CONTINUALLY;
323
324 RTC_CHECK(false) << "Unexpected ContinualGatheringPolicy enum name "
325 << enum_name;
326 return webrtc::PeerConnectionInterface::GATHER_ONCE;
327 }
328
329 webrtc::PeerConnectionInterface::TlsCertPolicy JavaToNativeTlsCertPolicy(
330 JNIEnv* jni,
331 jobject j_ice_server_tls_cert_policy) {
332 std::string enum_name =
333 GetJavaEnumName(jni, "org/webrtc/PeerConnection$TlsCertPolicy",
334 j_ice_server_tls_cert_policy);
335
336 if (enum_name == "TLS_CERT_POLICY_SECURE")
337 return webrtc::PeerConnectionInterface::kTlsCertPolicySecure;
338
339 if (enum_name == "TLS_CERT_POLICY_INSECURE_NO_CHECK")
340 return webrtc::PeerConnectionInterface::kTlsCertPolicyInsecureNoCheck;
341
342 RTC_CHECK(false) << "Unexpected TlsCertPolicy enum_name " << enum_name;
343 return webrtc::PeerConnectionInterface::kTlsCertPolicySecure;
344 }
345
346 void JavaToNativeIceServers(
347 JNIEnv* jni,
348 jobject j_ice_servers,
349 webrtc::PeerConnectionInterface::IceServers* ice_servers) {
350 for (jobject j_ice_server : Iterable(jni, j_ice_servers)) {
351 jclass j_ice_server_class = GetObjectClass(jni, j_ice_server);
352 jfieldID j_ice_server_uri_id =
353 GetFieldID(jni, j_ice_server_class, "uri", "Ljava/lang/String;");
354 jfieldID j_ice_server_username_id =
355 GetFieldID(jni, j_ice_server_class, "username", "Ljava/lang/String;");
356 jfieldID j_ice_server_password_id =
357 GetFieldID(jni, j_ice_server_class, "password", "Ljava/lang/String;");
358 jfieldID j_ice_server_tls_cert_policy_id =
359 GetFieldID(jni, j_ice_server_class, "tlsCertPolicy",
360 "Lorg/webrtc/PeerConnection$TlsCertPolicy;");
361 jobject j_ice_server_tls_cert_policy =
362 GetObjectField(jni, j_ice_server, j_ice_server_tls_cert_policy_id);
363 jfieldID j_ice_server_hostname_id =
364 GetFieldID(jni, j_ice_server_class, "hostname", "Ljava/lang/String;");
365 jstring uri = reinterpret_cast<jstring>(
366 GetObjectField(jni, j_ice_server, j_ice_server_uri_id));
367 jstring username = reinterpret_cast<jstring>(
368 GetObjectField(jni, j_ice_server, j_ice_server_username_id));
369 jstring password = reinterpret_cast<jstring>(
370 GetObjectField(jni, j_ice_server, j_ice_server_password_id));
371 webrtc::PeerConnectionInterface::TlsCertPolicy tls_cert_policy =
372 JavaToNativeTlsCertPolicy(jni, j_ice_server_tls_cert_policy);
373 jstring hostname = reinterpret_cast<jstring>(
374 GetObjectField(jni, j_ice_server, j_ice_server_hostname_id));
375 webrtc::PeerConnectionInterface::IceServer server;
376 server.uri = JavaToStdString(jni, uri);
377 server.username = JavaToStdString(jni, username);
378 server.password = JavaToStdString(jni, password);
379 server.tls_cert_policy = tls_cert_policy;
380 server.hostname = JavaToStdString(jni, hostname);
381 ice_servers->push_back(server);
382 }
383 }
384
385 void JavaToNativeRTCConfiguration(
386 JNIEnv* jni,
387 jobject j_rtc_config,
388 webrtc::PeerConnectionInterface::RTCConfiguration* rtc_config) {
389 jclass j_rtc_config_class = GetObjectClass(jni, j_rtc_config);
390
391 jfieldID j_ice_transports_type_id =
392 GetFieldID(jni, j_rtc_config_class, "iceTransportsType",
393 "Lorg/webrtc/PeerConnection$IceTransportsType;");
394 jobject j_ice_transports_type =
395 GetObjectField(jni, j_rtc_config, j_ice_transports_type_id);
396
397 jfieldID j_bundle_policy_id =
398 GetFieldID(jni, j_rtc_config_class, "bundlePolicy",
399 "Lorg/webrtc/PeerConnection$BundlePolicy;");
400 jobject j_bundle_policy =
401 GetObjectField(jni, j_rtc_config, j_bundle_policy_id);
402
403 jfieldID j_rtcp_mux_policy_id =
404 GetFieldID(jni, j_rtc_config_class, "rtcpMuxPolicy",
405 "Lorg/webrtc/PeerConnection$RtcpMuxPolicy;");
406 jobject j_rtcp_mux_policy =
407 GetObjectField(jni, j_rtc_config, j_rtcp_mux_policy_id);
408
409 jfieldID j_tcp_candidate_policy_id =
410 GetFieldID(jni, j_rtc_config_class, "tcpCandidatePolicy",
411 "Lorg/webrtc/PeerConnection$TcpCandidatePolicy;");
412 jobject j_tcp_candidate_policy =
413 GetObjectField(jni, j_rtc_config, j_tcp_candidate_policy_id);
414
415 jfieldID j_candidate_network_policy_id =
416 GetFieldID(jni, j_rtc_config_class, "candidateNetworkPolicy",
417 "Lorg/webrtc/PeerConnection$CandidateNetworkPolicy;");
418 jobject j_candidate_network_policy =
419 GetObjectField(jni, j_rtc_config, j_candidate_network_policy_id);
420
421 jfieldID j_ice_servers_id =
422 GetFieldID(jni, j_rtc_config_class, "iceServers", "Ljava/util/List;");
423 jobject j_ice_servers = GetObjectField(jni, j_rtc_config, j_ice_servers_id);
424
425 jfieldID j_audio_jitter_buffer_max_packets_id =
426 GetFieldID(jni, j_rtc_config_class, "audioJitterBufferMaxPackets", "I");
427 jfieldID j_audio_jitter_buffer_fast_accelerate_id = GetFieldID(
428 jni, j_rtc_config_class, "audioJitterBufferFastAccelerate", "Z");
429
430 jfieldID j_ice_connection_receiving_timeout_id =
431 GetFieldID(jni, j_rtc_config_class, "iceConnectionReceivingTimeout", "I");
432
433 jfieldID j_ice_backup_candidate_pair_ping_interval_id = GetFieldID(
434 jni, j_rtc_config_class, "iceBackupCandidatePairPingInterval", "I");
435
436 jfieldID j_continual_gathering_policy_id =
437 GetFieldID(jni, j_rtc_config_class, "continualGatheringPolicy",
438 "Lorg/webrtc/PeerConnection$ContinualGatheringPolicy;");
439 jobject j_continual_gathering_policy =
440 GetObjectField(jni, j_rtc_config, j_continual_gathering_policy_id);
441
442 jfieldID j_ice_candidate_pool_size_id =
443 GetFieldID(jni, j_rtc_config_class, "iceCandidatePoolSize", "I");
444 jfieldID j_presume_writable_when_fully_relayed_id = GetFieldID(
445 jni, j_rtc_config_class, "presumeWritableWhenFullyRelayed", "Z");
446
447 jfieldID j_prune_turn_ports_id =
448 GetFieldID(jni, j_rtc_config_class, "pruneTurnPorts", "Z");
449
450 jfieldID j_ice_check_min_interval_id = GetFieldID(
451 jni, j_rtc_config_class, "iceCheckMinInterval", "Ljava/lang/Integer;");
452 jclass j_integer_class = jni->FindClass("java/lang/Integer");
453 jmethodID int_value_id = GetMethodID(jni, j_integer_class, "intValue", "()I");
454
455 jfieldID j_disable_ipv6_on_wifi_id =
456 GetFieldID(jni, j_rtc_config_class, "disableIPv6OnWifi", "Z");
457
458 jfieldID j_max_ipv6_networks_id =
459 GetFieldID(jni, j_rtc_config_class, "maxIPv6Networks", "I");
460
461 jfieldID j_ice_regather_interval_range_id =
462 GetFieldID(jni, j_rtc_config_class, "iceRegatherIntervalRange",
463 "Lorg/webrtc/PeerConnection$IntervalRange;");
464 jclass j_interval_range_class =
465 jni->FindClass("org/webrtc/PeerConnection$IntervalRange");
466 jmethodID get_min_id =
467 GetMethodID(jni, j_interval_range_class, "getMin", "()I");
468 jmethodID get_max_id =
469 GetMethodID(jni, j_interval_range_class, "getMax", "()I");
470
471 rtc_config->type = JavaToNativeIceTransportsType(jni, j_ice_transports_type);
472 rtc_config->bundle_policy = JavaToNativeBundlePolicy(jni, j_bundle_policy);
473 rtc_config->rtcp_mux_policy =
474 JavaToNativeRtcpMuxPolicy(jni, j_rtcp_mux_policy);
475 rtc_config->tcp_candidate_policy =
476 JavaToNativeTcpCandidatePolicy(jni, j_tcp_candidate_policy);
477 rtc_config->candidate_network_policy =
478 JavaToNativeCandidateNetworkPolicy(jni, j_candidate_network_policy);
479 JavaToNativeIceServers(jni, j_ice_servers, &rtc_config->servers);
480 rtc_config->audio_jitter_buffer_max_packets =
481 GetIntField(jni, j_rtc_config, j_audio_jitter_buffer_max_packets_id);
482 rtc_config->audio_jitter_buffer_fast_accelerate = GetBooleanField(
483 jni, j_rtc_config, j_audio_jitter_buffer_fast_accelerate_id);
484 rtc_config->ice_connection_receiving_timeout =
485 GetIntField(jni, j_rtc_config, j_ice_connection_receiving_timeout_id);
486 rtc_config->ice_backup_candidate_pair_ping_interval = GetIntField(
487 jni, j_rtc_config, j_ice_backup_candidate_pair_ping_interval_id);
488 rtc_config->continual_gathering_policy =
489 JavaToNativeContinualGatheringPolicy(jni, j_continual_gathering_policy);
490 rtc_config->ice_candidate_pool_size =
491 GetIntField(jni, j_rtc_config, j_ice_candidate_pool_size_id);
492 rtc_config->prune_turn_ports =
493 GetBooleanField(jni, j_rtc_config, j_prune_turn_ports_id);
494 rtc_config->presume_writable_when_fully_relayed = GetBooleanField(
495 jni, j_rtc_config, j_presume_writable_when_fully_relayed_id);
496 jobject j_ice_check_min_interval =
497 GetNullableObjectField(jni, j_rtc_config, j_ice_check_min_interval_id);
498 if (!IsNull(jni, j_ice_check_min_interval)) {
499 int ice_check_min_interval_value =
500 jni->CallIntMethod(j_ice_check_min_interval, int_value_id);
501 rtc_config->ice_check_min_interval =
502 rtc::Optional<int>(ice_check_min_interval_value);
503 }
504 rtc_config->disable_ipv6_on_wifi =
505 GetBooleanField(jni, j_rtc_config, j_disable_ipv6_on_wifi_id);
506 rtc_config->max_ipv6_networks =
507 GetIntField(jni, j_rtc_config, j_max_ipv6_networks_id);
508 jobject j_ice_regather_interval_range = GetNullableObjectField(
509 jni, j_rtc_config, j_ice_regather_interval_range_id);
510 if (!IsNull(jni, j_ice_regather_interval_range)) {
511 int min = jni->CallIntMethod(j_ice_regather_interval_range, get_min_id);
512 int max = jni->CallIntMethod(j_ice_regather_interval_range, get_max_id);
513 rtc_config->ice_regather_interval_range.emplace(min, max);
514 }
515 }
516
517 void JavaToNativeRtpParameters(JNIEnv* jni,
518 jobject j_parameters,
519 webrtc::RtpParameters* parameters) {
520 RTC_CHECK(parameters != nullptr);
521 jclass parameters_class = jni->FindClass("org/webrtc/RtpParameters");
522 jfieldID encodings_id =
523 GetFieldID(jni, parameters_class, "encodings", "Ljava/util/LinkedList;");
524 jfieldID codecs_id =
525 GetFieldID(jni, parameters_class, "codecs", "Ljava/util/LinkedList;");
526
527 // Convert encodings.
528 jobject j_encodings = GetObjectField(jni, j_parameters, encodings_id);
529 jclass j_encoding_parameters_class =
530 jni->FindClass("org/webrtc/RtpParameters$Encoding");
531 jfieldID active_id =
532 GetFieldID(jni, j_encoding_parameters_class, "active", "Z");
533 jfieldID bitrate_id = GetFieldID(jni, j_encoding_parameters_class,
534 "maxBitrateBps", "Ljava/lang/Integer;");
535 jfieldID ssrc_id =
536 GetFieldID(jni, j_encoding_parameters_class, "ssrc", "Ljava/lang/Long;");
537 jclass j_integer_class = jni->FindClass("java/lang/Integer");
538 jclass j_long_class = jni->FindClass("java/lang/Long");
539 jmethodID int_value_id = GetMethodID(jni, j_integer_class, "intValue", "()I");
540 jmethodID long_value_id = GetMethodID(jni, j_long_class, "longValue", "()J");
541
542 for (jobject j_encoding_parameters : Iterable(jni, j_encodings)) {
543 webrtc::RtpEncodingParameters encoding;
544 encoding.active = GetBooleanField(jni, j_encoding_parameters, active_id);
545 jobject j_bitrate =
546 GetNullableObjectField(jni, j_encoding_parameters, bitrate_id);
547 if (!IsNull(jni, j_bitrate)) {
548 int bitrate_value = jni->CallIntMethod(j_bitrate, int_value_id);
549 CHECK_EXCEPTION(jni) << "error during CallIntMethod";
550 encoding.max_bitrate_bps = rtc::Optional<int>(bitrate_value);
551 }
552 jobject j_ssrc =
553 GetNullableObjectField(jni, j_encoding_parameters, ssrc_id);
554 if (!IsNull(jni, j_ssrc)) {
555 jlong ssrc_value = jni->CallLongMethod(j_ssrc, long_value_id);
556 CHECK_EXCEPTION(jni) << "error during CallLongMethod";
557 encoding.ssrc = rtc::Optional<uint32_t>(ssrc_value);
558 }
559 parameters->encodings.push_back(encoding);
560 }
561
562 // Convert codecs.
563 jobject j_codecs = GetObjectField(jni, j_parameters, codecs_id);
564 jclass codec_class = jni->FindClass("org/webrtc/RtpParameters$Codec");
565 jfieldID payload_type_id = GetFieldID(jni, codec_class, "payloadType", "I");
566 jfieldID name_id = GetFieldID(jni, codec_class, "name", "Ljava/lang/String;");
567 jfieldID kind_id = GetFieldID(jni, codec_class, "kind",
568 "Lorg/webrtc/MediaStreamTrack$MediaType;");
569 jfieldID clock_rate_id =
570 GetFieldID(jni, codec_class, "clockRate", "Ljava/lang/Integer;");
571 jfieldID num_channels_id =
572 GetFieldID(jni, codec_class, "numChannels", "Ljava/lang/Integer;");
573
574 for (jobject j_codec : Iterable(jni, j_codecs)) {
575 webrtc::RtpCodecParameters codec;
576 codec.payload_type = GetIntField(jni, j_codec, payload_type_id);
577 codec.name = JavaToStdString(jni, GetStringField(jni, j_codec, name_id));
578 codec.kind =
579 JavaToNativeMediaType(jni, GetObjectField(jni, j_codec, kind_id));
580 jobject j_clock_rate = GetNullableObjectField(jni, j_codec, clock_rate_id);
581 if (!IsNull(jni, j_clock_rate)) {
582 int clock_rate_value = jni->CallIntMethod(j_clock_rate, int_value_id);
583 CHECK_EXCEPTION(jni) << "error during CallIntMethod";
584 codec.clock_rate = rtc::Optional<int>(clock_rate_value);
585 }
586 jobject j_num_channels =
587 GetNullableObjectField(jni, j_codec, num_channels_id);
588 if (!IsNull(jni, j_num_channels)) {
589 int num_channels_value = jni->CallIntMethod(j_num_channels, int_value_id);
590 CHECK_EXCEPTION(jni) << "error during CallIntMethod";
591 codec.num_channels = rtc::Optional<int>(num_channels_value);
592 }
593 parameters->codecs.push_back(codec);
594 }
595 }
596
597 jobject NativeToJavaRtpParameters(JNIEnv* jni,
598 const webrtc::RtpParameters& parameters) {
599 jclass parameters_class = jni->FindClass("org/webrtc/RtpParameters");
600 jmethodID parameters_ctor =
601 GetMethodID(jni, parameters_class, "<init>", "()V");
602 jobject j_parameters = jni->NewObject(parameters_class, parameters_ctor);
603 CHECK_EXCEPTION(jni) << "error during NewObject";
604
605 // Add encodings.
606 jclass encoding_class = jni->FindClass("org/webrtc/RtpParameters$Encoding");
607 jmethodID encoding_ctor = GetMethodID(jni, encoding_class, "<init>", "()V");
608 jfieldID encodings_id =
609 GetFieldID(jni, parameters_class, "encodings", "Ljava/util/LinkedList;");
610 jobject j_encodings = GetObjectField(jni, j_parameters, encodings_id);
611 jmethodID encodings_add = GetMethodID(jni, GetObjectClass(jni, j_encodings),
612 "add", "(Ljava/lang/Object;)Z");
613 jfieldID active_id = GetFieldID(jni, encoding_class, "active", "Z");
614 jfieldID bitrate_id =
615 GetFieldID(jni, encoding_class, "maxBitrateBps", "Ljava/lang/Integer;");
616 jfieldID ssrc_id =
617 GetFieldID(jni, encoding_class, "ssrc", "Ljava/lang/Long;");
618
619 jclass integer_class = jni->FindClass("java/lang/Integer");
620 jclass long_class = jni->FindClass("java/lang/Long");
621 jmethodID integer_ctor = GetMethodID(jni, integer_class, "<init>", "(I)V");
622 jmethodID long_ctor = GetMethodID(jni, long_class, "<init>", "(J)V");
623
624 for (const webrtc::RtpEncodingParameters& encoding : parameters.encodings) {
625 jobject j_encoding_parameters =
626 jni->NewObject(encoding_class, encoding_ctor);
627 CHECK_EXCEPTION(jni) << "error during NewObject";
628 jni->SetBooleanField(j_encoding_parameters, active_id, encoding.active);
629 CHECK_EXCEPTION(jni) << "error during SetBooleanField";
630 if (encoding.max_bitrate_bps) {
631 jobject j_bitrate_value = jni->NewObject(integer_class, integer_ctor,
632 *(encoding.max_bitrate_bps));
633 CHECK_EXCEPTION(jni) << "error during NewObject";
634 jni->SetObjectField(j_encoding_parameters, bitrate_id, j_bitrate_value);
635 CHECK_EXCEPTION(jni) << "error during SetObjectField";
636 }
637 if (encoding.ssrc) {
638 jobject j_ssrc_value = jni->NewObject(long_class, long_ctor,
639 static_cast<jlong>(*encoding.ssrc));
640 CHECK_EXCEPTION(jni) << "error during NewObject";
641 jni->SetObjectField(j_encoding_parameters, ssrc_id, j_ssrc_value);
642 CHECK_EXCEPTION(jni) << "error during SetObjectField";
643 }
644 jboolean added = jni->CallBooleanMethod(j_encodings, encodings_add,
645 j_encoding_parameters);
646 CHECK_EXCEPTION(jni) << "error during CallBooleanMethod";
647 RTC_CHECK(added);
648 }
649
650 // Add codecs.
651 jclass codec_class = jni->FindClass("org/webrtc/RtpParameters$Codec");
652 jmethodID codec_ctor = GetMethodID(jni, codec_class, "<init>", "()V");
653 jfieldID codecs_id =
654 GetFieldID(jni, parameters_class, "codecs", "Ljava/util/LinkedList;");
655 jobject j_codecs = GetObjectField(jni, j_parameters, codecs_id);
656 jmethodID codecs_add = GetMethodID(jni, GetObjectClass(jni, j_codecs), "add",
657 "(Ljava/lang/Object;)Z");
658 jfieldID payload_type_id = GetFieldID(jni, codec_class, "payloadType", "I");
659 jfieldID name_id = GetFieldID(jni, codec_class, "name", "Ljava/lang/String;");
660 jfieldID kind_id = GetFieldID(jni, codec_class, "kind",
661 "Lorg/webrtc/MediaStreamTrack$MediaType;");
662 jfieldID clock_rate_id =
663 GetFieldID(jni, codec_class, "clockRate", "Ljava/lang/Integer;");
664 jfieldID num_channels_id =
665 GetFieldID(jni, codec_class, "numChannels", "Ljava/lang/Integer;");
666
667 for (const webrtc::RtpCodecParameters& codec : parameters.codecs) {
668 jobject j_codec = jni->NewObject(codec_class, codec_ctor);
669 CHECK_EXCEPTION(jni) << "error during NewObject";
670 jni->SetIntField(j_codec, payload_type_id, codec.payload_type);
671 CHECK_EXCEPTION(jni) << "error during SetIntField";
672 jni->SetObjectField(j_codec, name_id,
673 JavaStringFromStdString(jni, codec.name));
674 CHECK_EXCEPTION(jni) << "error during SetObjectField";
675 jni->SetObjectField(j_codec, kind_id,
676 NativeToJavaMediaType(jni, codec.kind));
677 CHECK_EXCEPTION(jni) << "error during SetObjectField";
678 if (codec.clock_rate) {
679 jobject j_clock_rate_value =
680 jni->NewObject(integer_class, integer_ctor, *(codec.clock_rate));
681 CHECK_EXCEPTION(jni) << "error during NewObject";
682 jni->SetObjectField(j_codec, clock_rate_id, j_clock_rate_value);
683 CHECK_EXCEPTION(jni) << "error during SetObjectField";
684 }
685 if (codec.num_channels) {
686 jobject j_num_channels_value =
687 jni->NewObject(integer_class, integer_ctor, *(codec.num_channels));
688 CHECK_EXCEPTION(jni) << "error during NewObject";
689 jni->SetObjectField(j_codec, num_channels_id, j_num_channels_value);
690 CHECK_EXCEPTION(jni) << "error during SetObjectField";
691 }
692 jboolean added = jni->CallBooleanMethod(j_codecs, codecs_add, j_codec);
693 CHECK_EXCEPTION(jni) << "error during CallBooleanMethod";
694 RTC_CHECK(added);
695 }
696
697 return j_parameters;
698 }
699
700 } // namespace webrtc_jni
OLDNEW
« no previous file with comments | « webrtc/sdk/android/src/jni/pc/java_native_conversion.h ('k') | webrtc/sdk/android/src/jni/pc/logging_jni.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698