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

Side by Side Diff: webrtc/api/java/jni/peerconnection_jni.cc

Issue 1648813004: Remove candidates when doing continual gathering (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: small fixes Created 4 years, 9 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
1 /* 1 /*
2 * Copyright 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 #include "webrtc/api/java/jni/androidnetworkmonitor_jni.h" 49 #include "webrtc/api/java/jni/androidnetworkmonitor_jni.h"
50 #include "webrtc/api/java/jni/androidvideocapturer_jni.h" 50 #include "webrtc/api/java/jni/androidvideocapturer_jni.h"
51 #include "webrtc/api/java/jni/classreferenceholder.h" 51 #include "webrtc/api/java/jni/classreferenceholder.h"
52 #include "webrtc/api/java/jni/jni_helpers.h" 52 #include "webrtc/api/java/jni/jni_helpers.h"
53 #include "webrtc/api/java/jni/native_handle_impl.h" 53 #include "webrtc/api/java/jni/native_handle_impl.h"
54 #include "webrtc/api/mediaconstraintsinterface.h" 54 #include "webrtc/api/mediaconstraintsinterface.h"
55 #include "webrtc/api/peerconnectioninterface.h" 55 #include "webrtc/api/peerconnectioninterface.h"
56 #include "webrtc/api/rtpreceiverinterface.h" 56 #include "webrtc/api/rtpreceiverinterface.h"
57 #include "webrtc/api/rtpsenderinterface.h" 57 #include "webrtc/api/rtpsenderinterface.h"
58 #include "webrtc/api/videosourceinterface.h" 58 #include "webrtc/api/videosourceinterface.h"
59 #include "webrtc/api/webrtcsdp.h"
59 #include "webrtc/base/bind.h" 60 #include "webrtc/base/bind.h"
60 #include "webrtc/base/checks.h" 61 #include "webrtc/base/checks.h"
61 #include "webrtc/base/event_tracer.h" 62 #include "webrtc/base/event_tracer.h"
62 #include "webrtc/base/logging.h" 63 #include "webrtc/base/logging.h"
63 #include "webrtc/base/logsinks.h" 64 #include "webrtc/base/logsinks.h"
64 #include "webrtc/base/messagequeue.h" 65 #include "webrtc/base/messagequeue.h"
65 #include "webrtc/base/networkmonitor.h" 66 #include "webrtc/base/networkmonitor.h"
66 #include "webrtc/base/ssladapter.h" 67 #include "webrtc/base/ssladapter.h"
67 #include "webrtc/base/stringutils.h" 68 #include "webrtc/base/stringutils.h"
68 #include "webrtc/media/base/videocapturer.h" 69 #include "webrtc/media/base/videocapturer.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 189
189 void OnIceCandidate(const IceCandidateInterface* candidate) override { 190 void OnIceCandidate(const IceCandidateInterface* candidate) override {
190 ScopedLocalRefFrame local_ref_frame(jni()); 191 ScopedLocalRefFrame local_ref_frame(jni());
191 std::string sdp; 192 std::string sdp;
192 RTC_CHECK(candidate->ToString(&sdp)) << "got so far: " << sdp; 193 RTC_CHECK(candidate->ToString(&sdp)) << "got so far: " << sdp;
193 jclass candidate_class = FindClass(jni(), "org/webrtc/IceCandidate"); 194 jclass candidate_class = FindClass(jni(), "org/webrtc/IceCandidate");
194 jmethodID ctor = GetMethodID(jni(), candidate_class, 195 jmethodID ctor = GetMethodID(jni(), candidate_class,
195 "<init>", "(Ljava/lang/String;ILjava/lang/String;)V"); 196 "<init>", "(Ljava/lang/String;ILjava/lang/String;)V");
196 jstring j_mid = JavaStringFromStdString(jni(), candidate->sdp_mid()); 197 jstring j_mid = JavaStringFromStdString(jni(), candidate->sdp_mid());
197 jstring j_sdp = JavaStringFromStdString(jni(), sdp); 198 jstring j_sdp = JavaStringFromStdString(jni(), sdp);
198 jobject j_candidate = jni()->NewObject( 199 jobject j_candidate = jni()->NewObject(candidate_class, ctor, j_mid,
199 candidate_class, ctor, j_mid, candidate->sdp_mline_index(), j_sdp); 200 candidate->sdp_mline_index(), j_sdp);
200 CHECK_EXCEPTION(jni()) << "error during NewObject"; 201 CHECK_EXCEPTION(jni()) << "error during NewObject";
201 jmethodID m = GetMethodID(jni(), *j_observer_class_, 202 jmethodID m = GetMethodID(jni(), *j_observer_class_,
202 "onIceCandidate", "(Lorg/webrtc/IceCandidate;)V"); 203 "onIceCandidate", "(Lorg/webrtc/IceCandidate;)V");
203 jni()->CallVoidMethod(*j_observer_global_, m, j_candidate); 204 jni()->CallVoidMethod(*j_observer_global_, m, j_candidate);
204 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; 205 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod";
205 } 206 }
206 207
208 void OnIceCandidatesRemoved(const cricket::Candidates& candidates) {
209 ScopedLocalRefFrame local_ref_frame(jni());
210 jobjectArray candidates_array = ToJavaCandidateArray(jni(), candidates);
211 jmethodID m =
212 GetMethodID(jni(), *j_observer_class_, "onIceCandidatesRemoved",
213 "([Lorg/webrtc/IceCandidate;)V");
214 jni()->CallVoidMethod(*j_observer_global_, m, candidates_array);
215 CHECK_EXCEPTION(jni()) << "Error during CallVoidMethod";
216 }
217
207 void OnSignalingChange( 218 void OnSignalingChange(
208 PeerConnectionInterface::SignalingState new_state) override { 219 PeerConnectionInterface::SignalingState new_state) override {
209 ScopedLocalRefFrame local_ref_frame(jni()); 220 ScopedLocalRefFrame local_ref_frame(jni());
210 jmethodID m = GetMethodID( 221 jmethodID m = GetMethodID(
211 jni(), *j_observer_class_, "onSignalingChange", 222 jni(), *j_observer_class_, "onSignalingChange",
212 "(Lorg/webrtc/PeerConnection$SignalingState;)V"); 223 "(Lorg/webrtc/PeerConnection$SignalingState;)V");
213 jobject new_state_enum = 224 jobject new_state_enum =
214 JavaEnumFromIndex(jni(), "PeerConnection$SignalingState", new_state); 225 JavaEnumFromIndex(jni(), "PeerConnection$SignalingState", new_state);
215 jni()->CallVoidMethod(*j_observer_global_, m, new_state_enum); 226 jni()->CallVoidMethod(*j_observer_global_, m, new_state_enum);
216 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; 227 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod";
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 375
365 void DisposeRemoteStream(const NativeToJavaStreamsMap::iterator& it) { 376 void DisposeRemoteStream(const NativeToJavaStreamsMap::iterator& it) {
366 jobject j_stream = it->second; 377 jobject j_stream = it->second;
367 remote_streams_.erase(it); 378 remote_streams_.erase(it);
368 jni()->CallVoidMethod( 379 jni()->CallVoidMethod(
369 j_stream, GetMethodID(jni(), *j_media_stream_class_, "dispose", "()V")); 380 j_stream, GetMethodID(jni(), *j_media_stream_class_, "dispose", "()V"));
370 CHECK_EXCEPTION(jni()) << "error during MediaStream.dispose()"; 381 CHECK_EXCEPTION(jni()) << "error during MediaStream.dispose()";
371 DeleteGlobalRef(jni(), j_stream); 382 DeleteGlobalRef(jni(), j_stream);
372 } 383 }
373 384
385 jobject ToJavaCandidate(JNIEnv* jni,
386 jclass* candidate_class,
387 const cricket::Candidate& candidate) {
388 std::string sdp = webrtc::SdpSerializeCandidate(candidate);
389 RTC_CHECK(!sdp.empty()) << "got an empty ICE candidate";
390 jmethodID ctor = GetMethodID(jni, *candidate_class, "<init>",
391 "(Ljava/lang/String;ILjava/lang/String;)V");
392 jstring j_mid = JavaStringFromStdString(jni, candidate.transport_name());
393 jstring j_sdp = JavaStringFromStdString(jni, sdp);
394 // sdp_mline_index is not used, pass an invalid value -1.
395 jobject j_candidate =
396 jni->NewObject(*candidate_class, ctor, j_mid, -1, j_sdp);
397 CHECK_EXCEPTION(jni) << "error during Java Candidate NewObject";
398 return j_candidate;
399 }
400
401 jobjectArray ToJavaCandidateArray(JNIEnv* jni,
402 const cricket::Candidates& candidates) {
403 jclass candidate_class = FindClass(jni, "org/webrtc/IceCandidate");
404 jobjectArray java_candidates =
405 jni->NewObjectArray(candidates.size(), candidate_class, NULL);
406 int i = 0;
407 for (const cricket::Candidate& candidate : candidates) {
408 jobject j_candidate = ToJavaCandidate(jni, &candidate_class, candidate);
409 jni->SetObjectArrayElement(java_candidates, i++, j_candidate);
410 }
411 return java_candidates;
412 }
413
374 JNIEnv* jni() { 414 JNIEnv* jni() {
375 return AttachCurrentThreadIfNeeded(); 415 return AttachCurrentThreadIfNeeded();
376 } 416 }
377 417
378 const ScopedGlobalRef<jobject> j_observer_global_; 418 const ScopedGlobalRef<jobject> j_observer_global_;
379 const ScopedGlobalRef<jclass> j_observer_class_; 419 const ScopedGlobalRef<jclass> j_observer_class_;
380 const ScopedGlobalRef<jclass> j_media_stream_class_; 420 const ScopedGlobalRef<jclass> j_media_stream_class_;
381 const jmethodID j_media_stream_ctor_; 421 const jmethodID j_media_stream_ctor_;
382 const ScopedGlobalRef<jclass> j_audio_track_class_; 422 const ScopedGlobalRef<jclass> j_audio_track_class_;
383 const jmethodID j_audio_track_ctor_; 423 const jmethodID j_audio_track_ctor_;
(...skipping 1333 matching lines...) Expand 10 before | Expand all | Expand 10 after
1717 JOW(jboolean, PeerConnection_nativeAddIceCandidate)( 1757 JOW(jboolean, PeerConnection_nativeAddIceCandidate)(
1718 JNIEnv* jni, jobject j_pc, jstring j_sdp_mid, 1758 JNIEnv* jni, jobject j_pc, jstring j_sdp_mid,
1719 jint j_sdp_mline_index, jstring j_candidate_sdp) { 1759 jint j_sdp_mline_index, jstring j_candidate_sdp) {
1720 std::string sdp_mid = JavaToStdString(jni, j_sdp_mid); 1760 std::string sdp_mid = JavaToStdString(jni, j_sdp_mid);
1721 std::string sdp = JavaToStdString(jni, j_candidate_sdp); 1761 std::string sdp = JavaToStdString(jni, j_candidate_sdp);
1722 scoped_ptr<IceCandidateInterface> candidate( 1762 scoped_ptr<IceCandidateInterface> candidate(
1723 webrtc::CreateIceCandidate(sdp_mid, j_sdp_mline_index, sdp, NULL)); 1763 webrtc::CreateIceCandidate(sdp_mid, j_sdp_mline_index, sdp, NULL));
1724 return ExtractNativePC(jni, j_pc)->AddIceCandidate(candidate.get()); 1764 return ExtractNativePC(jni, j_pc)->AddIceCandidate(candidate.get());
1725 } 1765 }
1726 1766
1767 static cricket::Candidate GetCandidateFromJava(JNIEnv* jni,
1768 jobject j_candidate) {
1769 jclass j_candidate_class = GetObjectClass(jni, j_candidate);
1770 jfieldID j_sdp_mid_id =
1771 GetFieldID(jni, j_candidate_class, "sdpMid", "Ljava/lang/String;");
1772 std::string sdp_mid =
1773 JavaToStdString(jni, GetStringField(jni, j_candidate, j_sdp_mid_id));
1774 jfieldID j_sdp_id =
1775 GetFieldID(jni, j_candidate_class, "sdp", "Ljava/lang/String;");
1776 std::string sdp =
1777 JavaToStdString(jni, GetStringField(jni, j_candidate, j_sdp_id));
1778 cricket::Candidate candidate;
1779 if (!webrtc::SdpDeserializeCandidate(sdp_mid, sdp, &candidate, NULL)) {
1780 LOG(LS_ERROR) << "SdpDescrializeCandidate failed with sdp " << sdp;
1781 }
1782 return candidate;
1783 }
1784
1785 JOW(jboolean, PeerConnection_nativeRemoveIceCandidates)
1786 (JNIEnv* jni, jobject j_pc, jobjectArray j_candidates) {
1787 std::vector<cricket::Candidate> candidates;
1788 size_t num_candidates = jni->GetArrayLength(j_candidates);
1789 for (size_t i = 0; i < num_candidates; ++i) {
1790 jobject j_candidate = jni->GetObjectArrayElement(j_candidates, i);
1791 candidates.push_back(GetCandidateFromJava(jni, j_candidate));
1792 }
1793 return ExtractNativePC(jni, j_pc)->RemoveIceCandidates(candidates);
1794 }
1795
1727 JOW(jboolean, PeerConnection_nativeAddLocalStream)( 1796 JOW(jboolean, PeerConnection_nativeAddLocalStream)(
1728 JNIEnv* jni, jobject j_pc, jlong native_stream) { 1797 JNIEnv* jni, jobject j_pc, jlong native_stream) {
1729 return ExtractNativePC(jni, j_pc)->AddStream( 1798 return ExtractNativePC(jni, j_pc)->AddStream(
1730 reinterpret_cast<MediaStreamInterface*>(native_stream)); 1799 reinterpret_cast<MediaStreamInterface*>(native_stream));
1731 } 1800 }
1732 1801
1733 JOW(void, PeerConnection_nativeRemoveLocalStream)( 1802 JOW(void, PeerConnection_nativeRemoveLocalStream)(
1734 JNIEnv* jni, jobject j_pc, jlong native_stream) { 1803 JNIEnv* jni, jobject j_pc, jlong native_stream) {
1735 ExtractNativePC(jni, j_pc)->RemoveStream( 1804 ExtractNativePC(jni, j_pc)->RemoveStream(
1736 reinterpret_cast<MediaStreamInterface*>(native_stream)); 1805 reinterpret_cast<MediaStreamInterface*>(native_stream));
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
2039 return JavaStringFromStdString( 2108 return JavaStringFromStdString(
2040 jni, 2109 jni,
2041 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); 2110 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id());
2042 } 2111 }
2043 2112
2044 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { 2113 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) {
2045 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); 2114 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release();
2046 } 2115 }
2047 2116
2048 } // namespace webrtc_jni 2117 } // namespace webrtc_jni
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698