OLD | NEW |
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 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 ScopedLocalRefFrame local_ref_frame(jni()); | 249 ScopedLocalRefFrame local_ref_frame(jni()); |
250 jmethodID m = GetMethodID( | 250 jmethodID m = GetMethodID( |
251 jni(), *j_observer_class_, "onIceGatheringChange", | 251 jni(), *j_observer_class_, "onIceGatheringChange", |
252 "(Lorg/webrtc/PeerConnection$IceGatheringState;)V"); | 252 "(Lorg/webrtc/PeerConnection$IceGatheringState;)V"); |
253 jobject new_state_enum = JavaEnumFromIndex( | 253 jobject new_state_enum = JavaEnumFromIndex( |
254 jni(), "PeerConnection$IceGatheringState", new_state); | 254 jni(), "PeerConnection$IceGatheringState", new_state); |
255 jni()->CallVoidMethod(*j_observer_global_, m, new_state_enum); | 255 jni()->CallVoidMethod(*j_observer_global_, m, new_state_enum); |
256 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; | 256 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; |
257 } | 257 } |
258 | 258 |
259 void OnAddStream(MediaStreamInterface* stream) override { | 259 void OnAddStream(rtc::scoped_refptr<MediaStreamInterface> stream) override { |
260 ScopedLocalRefFrame local_ref_frame(jni()); | 260 ScopedLocalRefFrame local_ref_frame(jni()); |
261 // Java MediaStream holds one reference. Corresponding Release() is in | 261 // Java MediaStream holds one reference. Corresponding Release() is in |
262 // MediaStream_free, triggered by MediaStream.dispose(). | 262 // MediaStream_free, triggered by MediaStream.dispose(). |
263 stream->AddRef(); | 263 stream->AddRef(); |
264 jobject j_stream = | 264 jobject j_stream = |
265 jni()->NewObject(*j_media_stream_class_, j_media_stream_ctor_, | 265 jni()->NewObject(*j_media_stream_class_, j_media_stream_ctor_, |
266 reinterpret_cast<jlong>(stream)); | 266 reinterpret_cast<jlong>(stream.get())); |
267 CHECK_EXCEPTION(jni()) << "error during NewObject"; | 267 CHECK_EXCEPTION(jni()) << "error during NewObject"; |
268 | 268 |
269 for (const auto& track : stream->GetAudioTracks()) { | 269 for (const auto& track : stream->GetAudioTracks()) { |
270 jstring id = JavaStringFromStdString(jni(), track->id()); | 270 jstring id = JavaStringFromStdString(jni(), track->id()); |
271 // Java AudioTrack holds one reference. Corresponding Release() is in | 271 // Java AudioTrack holds one reference. Corresponding Release() is in |
272 // MediaStreamTrack_free, triggered by AudioTrack.dispose(). | 272 // MediaStreamTrack_free, triggered by AudioTrack.dispose(). |
273 track->AddRef(); | 273 track->AddRef(); |
274 jobject j_track = | 274 jobject j_track = |
275 jni()->NewObject(*j_audio_track_class_, j_audio_track_ctor_, | 275 jni()->NewObject(*j_audio_track_class_, j_audio_track_ctor_, |
276 reinterpret_cast<jlong>(track.get()), id); | 276 reinterpret_cast<jlong>(track.get()), id); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 RTC_CHECK(added); | 312 RTC_CHECK(added); |
313 } | 313 } |
314 remote_streams_[stream] = NewGlobalRef(jni(), j_stream); | 314 remote_streams_[stream] = NewGlobalRef(jni(), j_stream); |
315 | 315 |
316 jmethodID m = GetMethodID(jni(), *j_observer_class_, "onAddStream", | 316 jmethodID m = GetMethodID(jni(), *j_observer_class_, "onAddStream", |
317 "(Lorg/webrtc/MediaStream;)V"); | 317 "(Lorg/webrtc/MediaStream;)V"); |
318 jni()->CallVoidMethod(*j_observer_global_, m, j_stream); | 318 jni()->CallVoidMethod(*j_observer_global_, m, j_stream); |
319 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; | 319 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; |
320 } | 320 } |
321 | 321 |
322 void OnRemoveStream(MediaStreamInterface* stream) override { | 322 void OnRemoveStream( |
| 323 rtc::scoped_refptr<MediaStreamInterface> stream) override { |
323 ScopedLocalRefFrame local_ref_frame(jni()); | 324 ScopedLocalRefFrame local_ref_frame(jni()); |
324 NativeToJavaStreamsMap::iterator it = remote_streams_.find(stream); | 325 NativeToJavaStreamsMap::iterator it = remote_streams_.find(stream); |
325 RTC_CHECK(it != remote_streams_.end()) << "unexpected stream: " << std::hex | 326 RTC_CHECK(it != remote_streams_.end()) << "unexpected stream: " << std::hex |
326 << stream; | 327 << stream; |
327 jobject j_stream = it->second; | 328 jobject j_stream = it->second; |
328 jmethodID m = GetMethodID(jni(), *j_observer_class_, "onRemoveStream", | 329 jmethodID m = GetMethodID(jni(), *j_observer_class_, "onRemoveStream", |
329 "(Lorg/webrtc/MediaStream;)V"); | 330 "(Lorg/webrtc/MediaStream;)V"); |
330 jni()->CallVoidMethod(*j_observer_global_, m, j_stream); | 331 jni()->CallVoidMethod(*j_observer_global_, m, j_stream); |
331 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; | 332 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; |
| 333 // Release the refptr reference so that DisposeRemoteStream can assert |
| 334 // it removes the final reference. |
| 335 stream = nullptr; |
332 DisposeRemoteStream(it); | 336 DisposeRemoteStream(it); |
333 } | 337 } |
334 | 338 |
335 void OnDataChannel(DataChannelInterface* channel) override { | 339 void OnDataChannel( |
| 340 rtc::scoped_refptr<DataChannelInterface> channel) override { |
336 ScopedLocalRefFrame local_ref_frame(jni()); | 341 ScopedLocalRefFrame local_ref_frame(jni()); |
337 jobject j_channel = jni()->NewObject( | 342 jobject j_channel = jni()->NewObject( |
338 *j_data_channel_class_, j_data_channel_ctor_, (jlong)channel); | 343 *j_data_channel_class_, j_data_channel_ctor_, (jlong)channel.get()); |
339 CHECK_EXCEPTION(jni()) << "error during NewObject"; | 344 CHECK_EXCEPTION(jni()) << "error during NewObject"; |
340 | 345 |
341 jmethodID m = GetMethodID(jni(), *j_observer_class_, "onDataChannel", | 346 jmethodID m = GetMethodID(jni(), *j_observer_class_, "onDataChannel", |
342 "(Lorg/webrtc/DataChannel;)V"); | 347 "(Lorg/webrtc/DataChannel;)V"); |
343 jni()->CallVoidMethod(*j_observer_global_, m, j_channel); | 348 jni()->CallVoidMethod(*j_observer_global_, m, j_channel); |
344 | 349 |
345 // Channel is now owned by Java object, and will be freed from | 350 // Channel is now owned by Java object, and will be freed from |
346 // DataChannel.dispose(). Important that this be done _after_ the | 351 // DataChannel.dispose(). Important that this be done _after_ the |
347 // CallVoidMethod above as Java code might call back into native code and be | 352 // CallVoidMethod above as Java code might call back into native code and be |
348 // surprised to see a refcount of 2. | 353 // surprised to see a refcount of 2. |
(...skipping 1860 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2209 return JavaStringFromStdString( | 2214 return JavaStringFromStdString( |
2210 jni, | 2215 jni, |
2211 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); | 2216 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); |
2212 } | 2217 } |
2213 | 2218 |
2214 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { | 2219 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
2215 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); | 2220 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); |
2216 } | 2221 } |
2217 | 2222 |
2218 } // namespace webrtc_jni | 2223 } // namespace webrtc_jni |
OLD | NEW |