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

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: Fix a Windows compiling error 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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 using rtc::scoped_ptr; 84 using rtc::scoped_ptr;
85 using webrtc::AudioSourceInterface; 85 using webrtc::AudioSourceInterface;
86 using webrtc::AudioTrackInterface; 86 using webrtc::AudioTrackInterface;
87 using webrtc::AudioTrackVector; 87 using webrtc::AudioTrackVector;
88 using webrtc::CreateSessionDescriptionObserver; 88 using webrtc::CreateSessionDescriptionObserver;
89 using webrtc::DataBuffer; 89 using webrtc::DataBuffer;
90 using webrtc::DataChannelInit; 90 using webrtc::DataChannelInit;
91 using webrtc::DataChannelInterface; 91 using webrtc::DataChannelInterface;
92 using webrtc::DataChannelObserver; 92 using webrtc::DataChannelObserver;
93 using webrtc::IceCandidateInterface; 93 using webrtc::IceCandidateInterface;
94 using webrtc::IceCandidateInterfaceRefPtr;
94 using webrtc::LogcatTraceContext; 95 using webrtc::LogcatTraceContext;
95 using webrtc::MediaConstraintsInterface; 96 using webrtc::MediaConstraintsInterface;
96 using webrtc::MediaSourceInterface; 97 using webrtc::MediaSourceInterface;
97 using webrtc::MediaStreamInterface; 98 using webrtc::MediaStreamInterface;
98 using webrtc::MediaStreamTrackInterface; 99 using webrtc::MediaStreamTrackInterface;
99 using webrtc::PeerConnectionFactoryInterface; 100 using webrtc::PeerConnectionFactoryInterface;
100 using webrtc::PeerConnectionInterface; 101 using webrtc::PeerConnectionInterface;
101 using webrtc::PeerConnectionObserver; 102 using webrtc::PeerConnectionObserver;
102 using webrtc::RtpReceiverInterface; 103 using webrtc::RtpReceiverInterface;
103 using webrtc::RtpSenderInterface; 104 using webrtc::RtpSenderInterface;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 } 182 }
182 183
183 virtual ~PCOJava() { 184 virtual ~PCOJava() {
184 ScopedLocalRefFrame local_ref_frame(jni()); 185 ScopedLocalRefFrame local_ref_frame(jni());
185 while (!remote_streams_.empty()) 186 while (!remote_streams_.empty())
186 DisposeRemoteStream(remote_streams_.begin()); 187 DisposeRemoteStream(remote_streams_.begin());
187 } 188 }
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 RTC_CHECK(candidate->ToString(&sdp)) << "got so far: " << sdp;
193 jclass candidate_class = FindClass(jni(), "org/webrtc/IceCandidate"); 192 jclass candidate_class = FindClass(jni(), "org/webrtc/IceCandidate");
194 jmethodID ctor = GetMethodID(jni(), candidate_class, 193 jobject j_candidate = ToJavaCandidate(jni(), &candidate_class, candidate);
195 "<init>", "(Ljava/lang/String;ILjava/lang/String;)V");
196 jstring j_mid = JavaStringFromStdString(jni(), candidate->sdp_mid());
197 jstring j_sdp = JavaStringFromStdString(jni(), sdp);
198 jobject j_candidate = jni()->NewObject(
199 candidate_class, ctor, j_mid, candidate->sdp_mline_index(), j_sdp);
200 CHECK_EXCEPTION(jni()) << "error during NewObject";
201 jmethodID m = GetMethodID(jni(), *j_observer_class_, 194 jmethodID m = GetMethodID(jni(), *j_observer_class_,
202 "onIceCandidate", "(Lorg/webrtc/IceCandidate;)V"); 195 "onIceCandidate", "(Lorg/webrtc/IceCandidate;)V");
203 jni()->CallVoidMethod(*j_observer_global_, m, j_candidate); 196 jni()->CallVoidMethod(*j_observer_global_, m, j_candidate);
204 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; 197 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod";
205 } 198 }
206 199
200 void OnIceCandidatesRemoved(
201 const std::vector<IceCandidateInterfaceRefPtr>& candidates) {
202 ScopedLocalRefFrame local_ref_frame(jni());
203 jobjectArray candidates_array = ToJavaCandidateArray(jni(), candidates);
204 jmethodID m =
205 GetMethodID(jni(), *j_observer_class_, "onIceCandidatesRemoved",
206 "([Lorg/webrtc/IceCandidate;)V");
207 jni()->CallVoidMethod(*j_observer_global_, m, candidates_array);
208 CHECK_EXCEPTION(jni()) << "Error during CallVoidMethod";
209 }
210
207 void OnSignalingChange( 211 void OnSignalingChange(
208 PeerConnectionInterface::SignalingState new_state) override { 212 PeerConnectionInterface::SignalingState new_state) override {
209 ScopedLocalRefFrame local_ref_frame(jni()); 213 ScopedLocalRefFrame local_ref_frame(jni());
210 jmethodID m = GetMethodID( 214 jmethodID m = GetMethodID(
211 jni(), *j_observer_class_, "onSignalingChange", 215 jni(), *j_observer_class_, "onSignalingChange",
212 "(Lorg/webrtc/PeerConnection$SignalingState;)V"); 216 "(Lorg/webrtc/PeerConnection$SignalingState;)V");
213 jobject new_state_enum = 217 jobject new_state_enum =
214 JavaEnumFromIndex(jni(), "PeerConnection$SignalingState", new_state); 218 JavaEnumFromIndex(jni(), "PeerConnection$SignalingState", new_state);
215 jni()->CallVoidMethod(*j_observer_global_, m, new_state_enum); 219 jni()->CallVoidMethod(*j_observer_global_, m, new_state_enum);
216 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; 220 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod";
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 368
365 void DisposeRemoteStream(const NativeToJavaStreamsMap::iterator& it) { 369 void DisposeRemoteStream(const NativeToJavaStreamsMap::iterator& it) {
366 jobject j_stream = it->second; 370 jobject j_stream = it->second;
367 remote_streams_.erase(it); 371 remote_streams_.erase(it);
368 jni()->CallVoidMethod( 372 jni()->CallVoidMethod(
369 j_stream, GetMethodID(jni(), *j_media_stream_class_, "dispose", "()V")); 373 j_stream, GetMethodID(jni(), *j_media_stream_class_, "dispose", "()V"));
370 CHECK_EXCEPTION(jni()) << "error during MediaStream.dispose()"; 374 CHECK_EXCEPTION(jni()) << "error during MediaStream.dispose()";
371 DeleteGlobalRef(jni(), j_stream); 375 DeleteGlobalRef(jni(), j_stream);
372 } 376 }
373 377
378 jobject ToJavaCandidate(JNIEnv* jni,
379 jclass* candidate_class,
380 const IceCandidateInterface* candidate) {
381 std::string sdp;
382 RTC_CHECK(candidate->ToString(&sdp)) << "got so far: " << sdp;
383 jmethodID ctor = GetMethodID(jni, *candidate_class, "<init>",
384 "(Ljava/lang/String;ILjava/lang/String;)V");
385 jstring j_mid = JavaStringFromStdString(jni, candidate->sdp_mid());
386 jstring j_sdp = JavaStringFromStdString(jni, sdp);
387 jobject j_candidate = jni->NewObject(*candidate_class, ctor, j_mid,
388 candidate->sdp_mline_index(), j_sdp);
389 CHECK_EXCEPTION(jni) << "error during Java Candidate NewObject";
390 return j_candidate;
391 }
392
393 jobjectArray ToJavaCandidateArray(
394 JNIEnv* jni,
395 const std::vector<IceCandidateInterfaceRefPtr>& candidates) {
396 jclass candidate_class = FindClass(jni, "org/webrtc/IceCandidate");
397 jobjectArray java_candidates =
398 jni->NewObjectArray(candidates.size(), candidate_class, NULL);
399 int i = 0;
400 for (const auto candidate : candidates) {
401 jobject j_candidate =
402 ToJavaCandidate(jni, &candidate_class, candidate.get());
403 jni->SetObjectArrayElement(java_candidates, i++, j_candidate);
404 }
405 return java_candidates;
406 }
407
374 JNIEnv* jni() { 408 JNIEnv* jni() {
375 return AttachCurrentThreadIfNeeded(); 409 return AttachCurrentThreadIfNeeded();
376 } 410 }
377 411
378 const ScopedGlobalRef<jobject> j_observer_global_; 412 const ScopedGlobalRef<jobject> j_observer_global_;
379 const ScopedGlobalRef<jclass> j_observer_class_; 413 const ScopedGlobalRef<jclass> j_observer_class_;
380 const ScopedGlobalRef<jclass> j_media_stream_class_; 414 const ScopedGlobalRef<jclass> j_media_stream_class_;
381 const jmethodID j_media_stream_ctor_; 415 const jmethodID j_media_stream_ctor_;
382 const ScopedGlobalRef<jclass> j_audio_track_class_; 416 const ScopedGlobalRef<jclass> j_audio_track_class_;
383 const jmethodID j_audio_track_ctor_; 417 const jmethodID j_audio_track_ctor_;
(...skipping 1333 matching lines...) Expand 10 before | Expand all | Expand 10 after
1717 JOW(jboolean, PeerConnection_nativeAddIceCandidate)( 1751 JOW(jboolean, PeerConnection_nativeAddIceCandidate)(
1718 JNIEnv* jni, jobject j_pc, jstring j_sdp_mid, 1752 JNIEnv* jni, jobject j_pc, jstring j_sdp_mid,
1719 jint j_sdp_mline_index, jstring j_candidate_sdp) { 1753 jint j_sdp_mline_index, jstring j_candidate_sdp) {
1720 std::string sdp_mid = JavaToStdString(jni, j_sdp_mid); 1754 std::string sdp_mid = JavaToStdString(jni, j_sdp_mid);
1721 std::string sdp = JavaToStdString(jni, j_candidate_sdp); 1755 std::string sdp = JavaToStdString(jni, j_candidate_sdp);
1722 scoped_ptr<IceCandidateInterface> candidate( 1756 scoped_ptr<IceCandidateInterface> candidate(
1723 webrtc::CreateIceCandidate(sdp_mid, j_sdp_mline_index, sdp, NULL)); 1757 webrtc::CreateIceCandidate(sdp_mid, j_sdp_mline_index, sdp, NULL));
1724 return ExtractNativePC(jni, j_pc)->AddIceCandidate(candidate.get()); 1758 return ExtractNativePC(jni, j_pc)->AddIceCandidate(candidate.get());
1725 } 1759 }
1726 1760
1761 static IceCandidateInterface* GetIceCandidateFromJava(JNIEnv* jni,
1762 jobject j_candidate) {
1763 jclass j_candidate_class = GetObjectClass(jni, j_candidate);
1764 jfieldID j_sdp_mid_id =
1765 GetFieldID(jni, j_candidate_class, "sdpMid", "Ljava/lang/String;");
1766 std::string sdp_mid =
1767 JavaToStdString(jni, GetStringField(jni, j_candidate, j_sdp_mid_id));
1768 jfieldID j_sdp_mline_index_id =
1769 GetFieldID(jni, j_candidate_class, "sdpMLineIndex", "I");
1770 int sdp_mline_index = GetIntField(jni, j_candidate, j_sdp_mline_index_id);
1771 jfieldID j_sdp_id =
1772 GetFieldID(jni, j_candidate_class, "sdp", "Ljava/lang/String;");
1773 std::string sdp =
1774 JavaToStdString(jni, GetStringField(jni, j_candidate, j_sdp_id));
1775 return webrtc::CreateIceCandidate(sdp_mid, sdp_mline_index, sdp, NULL);
1776 }
1777
1778 JOW(jboolean, PeerConnection_nativeRemoveIceCandidates)
1779 (JNIEnv* jni, jobject j_pc, jobjectArray j_candidates) {
1780 std::vector<IceCandidateInterfaceRefPtr> candidates;
1781 size_t num_candidates = jni->GetArrayLength(j_candidates);
1782 for (size_t i = 0; i < num_candidates; ++i) {
1783 jobject j_candidate = jni->GetObjectArrayElement(j_candidates, i);
1784 candidates.push_back(GetIceCandidateFromJava(jni, j_candidate));
1785 }
1786 return ExtractNativePC(jni, j_pc)->RemoveIceCandidates(candidates);
1787 }
1788
1727 JOW(jboolean, PeerConnection_nativeAddLocalStream)( 1789 JOW(jboolean, PeerConnection_nativeAddLocalStream)(
1728 JNIEnv* jni, jobject j_pc, jlong native_stream) { 1790 JNIEnv* jni, jobject j_pc, jlong native_stream) {
1729 return ExtractNativePC(jni, j_pc)->AddStream( 1791 return ExtractNativePC(jni, j_pc)->AddStream(
1730 reinterpret_cast<MediaStreamInterface*>(native_stream)); 1792 reinterpret_cast<MediaStreamInterface*>(native_stream));
1731 } 1793 }
1732 1794
1733 JOW(void, PeerConnection_nativeRemoveLocalStream)( 1795 JOW(void, PeerConnection_nativeRemoveLocalStream)(
1734 JNIEnv* jni, jobject j_pc, jlong native_stream) { 1796 JNIEnv* jni, jobject j_pc, jlong native_stream) {
1735 ExtractNativePC(jni, j_pc)->RemoveStream( 1797 ExtractNativePC(jni, j_pc)->RemoveStream(
1736 reinterpret_cast<MediaStreamInterface*>(native_stream)); 1798 reinterpret_cast<MediaStreamInterface*>(native_stream));
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
2039 return JavaStringFromStdString( 2101 return JavaStringFromStdString(
2040 jni, 2102 jni,
2041 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); 2103 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id());
2042 } 2104 }
2043 2105
2044 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { 2106 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) {
2045 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); 2107 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release();
2046 } 2108 }
2047 2109
2048 } // namespace webrtc_jni 2110 } // namespace webrtc_jni
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698