| 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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 using webrtc::PeerConnectionFactoryInterface; | 99 using webrtc::PeerConnectionFactoryInterface; |
| 100 using webrtc::PeerConnectionInterface; | 100 using webrtc::PeerConnectionInterface; |
| 101 using webrtc::PeerConnectionObserver; | 101 using webrtc::PeerConnectionObserver; |
| 102 using webrtc::RtpReceiverInterface; | 102 using webrtc::RtpReceiverInterface; |
| 103 using webrtc::RtpSenderInterface; | 103 using webrtc::RtpSenderInterface; |
| 104 using webrtc::SessionDescriptionInterface; | 104 using webrtc::SessionDescriptionInterface; |
| 105 using webrtc::SetSessionDescriptionObserver; | 105 using webrtc::SetSessionDescriptionObserver; |
| 106 using webrtc::StatsObserver; | 106 using webrtc::StatsObserver; |
| 107 using webrtc::StatsReport; | 107 using webrtc::StatsReport; |
| 108 using webrtc::StatsReports; | 108 using webrtc::StatsReports; |
| 109 using webrtc::VideoRendererInterface; | |
| 110 using webrtc::VideoTrackSourceInterface; | 109 using webrtc::VideoTrackSourceInterface; |
| 111 using webrtc::VideoTrackInterface; | 110 using webrtc::VideoTrackInterface; |
| 112 using webrtc::VideoTrackVector; | 111 using webrtc::VideoTrackVector; |
| 113 using webrtc::kVideoCodecVP8; | 112 using webrtc::kVideoCodecVP8; |
| 114 | 113 |
| 115 namespace webrtc_jni { | 114 namespace webrtc_jni { |
| 116 | 115 |
| 117 // Field trials initialization string | 116 // Field trials initialization string |
| 118 static char *field_trials_init_string = NULL; | 117 static char *field_trials_init_string = NULL; |
| 119 | 118 |
| (...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 724 } | 723 } |
| 725 | 724 |
| 726 const ScopedGlobalRef<jobject> j_observer_global_; | 725 const ScopedGlobalRef<jobject> j_observer_global_; |
| 727 const ScopedGlobalRef<jclass> j_observer_class_; | 726 const ScopedGlobalRef<jclass> j_observer_class_; |
| 728 const ScopedGlobalRef<jclass> j_stats_report_class_; | 727 const ScopedGlobalRef<jclass> j_stats_report_class_; |
| 729 const jmethodID j_stats_report_ctor_; | 728 const jmethodID j_stats_report_ctor_; |
| 730 const ScopedGlobalRef<jclass> j_value_class_; | 729 const ScopedGlobalRef<jclass> j_value_class_; |
| 731 const jmethodID j_value_ctor_; | 730 const jmethodID j_value_ctor_; |
| 732 }; | 731 }; |
| 733 | 732 |
| 734 // Adapter presenting a cricket::VideoRenderer as a | 733 // Wrapper dispatching rtc::VideoSinkInterface to a Java VideoRenderer |
| 735 // webrtc::VideoRendererInterface. | |
| 736 class VideoRendererWrapper : public VideoRendererInterface { | |
| 737 public: | |
| 738 static VideoRendererWrapper* Create(cricket::VideoRenderer* renderer) { | |
| 739 if (renderer) | |
| 740 return new VideoRendererWrapper(renderer); | |
| 741 return NULL; | |
| 742 } | |
| 743 | |
| 744 virtual ~VideoRendererWrapper() {} | |
| 745 | |
| 746 void RenderFrame(const cricket::VideoFrame* video_frame) override { | |
| 747 ScopedLocalRefFrame local_ref_frame(AttachCurrentThreadIfNeeded()); | |
| 748 renderer_->RenderFrame(video_frame->GetCopyWithRotationApplied()); | |
| 749 } | |
| 750 | |
| 751 private: | |
| 752 explicit VideoRendererWrapper(cricket::VideoRenderer* renderer) | |
| 753 : renderer_(renderer) {} | |
| 754 scoped_ptr<cricket::VideoRenderer> renderer_; | |
| 755 }; | |
| 756 | |
| 757 // Wrapper dispatching webrtc::VideoRendererInterface to a Java VideoRenderer | |
| 758 // instance. | 734 // instance. |
| 759 class JavaVideoRendererWrapper : public VideoRendererInterface { | 735 class JavaVideoRendererWrapper |
| 736 : public rtc::VideoSinkInterface<cricket::VideoFrame> { |
| 760 public: | 737 public: |
| 761 JavaVideoRendererWrapper(JNIEnv* jni, jobject j_callbacks) | 738 JavaVideoRendererWrapper(JNIEnv* jni, jobject j_callbacks) |
| 762 : j_callbacks_(jni, j_callbacks), | 739 : j_callbacks_(jni, j_callbacks), |
| 763 j_render_frame_id_(GetMethodID( | 740 j_render_frame_id_(GetMethodID( |
| 764 jni, GetObjectClass(jni, j_callbacks), "renderFrame", | 741 jni, GetObjectClass(jni, j_callbacks), "renderFrame", |
| 765 "(Lorg/webrtc/VideoRenderer$I420Frame;)V")), | 742 "(Lorg/webrtc/VideoRenderer$I420Frame;)V")), |
| 766 j_frame_class_(jni, | 743 j_frame_class_(jni, |
| 767 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame")), | 744 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame")), |
| 768 j_i420_frame_ctor_id_(GetMethodID( | 745 j_i420_frame_ctor_id_(GetMethodID( |
| 769 jni, *j_frame_class_, "<init>", "(III[I[Ljava/nio/ByteBuffer;J)V")), | 746 jni, *j_frame_class_, "<init>", "(III[I[Ljava/nio/ByteBuffer;J)V")), |
| 770 j_texture_frame_ctor_id_(GetMethodID( | 747 j_texture_frame_ctor_id_(GetMethodID( |
| 771 jni, *j_frame_class_, "<init>", | 748 jni, *j_frame_class_, "<init>", |
| 772 "(IIII[FJ)V")), | 749 "(IIII[FJ)V")), |
| 773 j_byte_buffer_class_(jni, FindClass(jni, "java/nio/ByteBuffer")) { | 750 j_byte_buffer_class_(jni, FindClass(jni, "java/nio/ByteBuffer")) { |
| 774 CHECK_EXCEPTION(jni); | 751 CHECK_EXCEPTION(jni); |
| 775 } | 752 } |
| 776 | 753 |
| 777 virtual ~JavaVideoRendererWrapper() {} | 754 virtual ~JavaVideoRendererWrapper() {} |
| 778 | 755 |
| 779 void RenderFrame(const cricket::VideoFrame* video_frame) override { | 756 void OnFrame(const cricket::VideoFrame& video_frame) override { |
| 780 ScopedLocalRefFrame local_ref_frame(jni()); | 757 ScopedLocalRefFrame local_ref_frame(jni()); |
| 781 jobject j_frame = (video_frame->GetNativeHandle() != nullptr) | 758 jobject j_frame = (video_frame.GetNativeHandle() != nullptr) |
| 782 ? CricketToJavaTextureFrame(video_frame) | 759 ? CricketToJavaTextureFrame(&video_frame) |
| 783 : CricketToJavaI420Frame(video_frame); | 760 : CricketToJavaI420Frame(&video_frame); |
| 784 // |j_callbacks_| is responsible for releasing |j_frame| with | 761 // |j_callbacks_| is responsible for releasing |j_frame| with |
| 785 // VideoRenderer.renderFrameDone(). | 762 // VideoRenderer.renderFrameDone(). |
| 786 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame); | 763 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame); |
| 787 CHECK_EXCEPTION(jni()); | 764 CHECK_EXCEPTION(jni()); |
| 788 } | 765 } |
| 789 | 766 |
| 790 private: | 767 private: |
| 791 // Make a shallow copy of |frame| to be used with Java. The callee has | 768 // Make a shallow copy of |frame| to be used with Java. The callee has |
| 792 // ownership of the frame, and the frame should be released with | 769 // ownership of the frame, and the frame should be released with |
| 793 // VideoRenderer.releaseNativeFrame(). | 770 // VideoRenderer.releaseNativeFrame(). |
| (...skipping 1196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1990 | 1967 |
| 1991 JOW(jboolean, MediaStreamTrack_nativeSetEnabled)( | 1968 JOW(jboolean, MediaStreamTrack_nativeSetEnabled)( |
| 1992 JNIEnv* jni, jclass, jlong j_p, jboolean enabled) { | 1969 JNIEnv* jni, jclass, jlong j_p, jboolean enabled) { |
| 1993 return reinterpret_cast<MediaStreamTrackInterface*>(j_p) | 1970 return reinterpret_cast<MediaStreamTrackInterface*>(j_p) |
| 1994 ->set_enabled(enabled); | 1971 ->set_enabled(enabled); |
| 1995 } | 1972 } |
| 1996 | 1973 |
| 1997 JOW(void, VideoTrack_nativeAddRenderer)( | 1974 JOW(void, VideoTrack_nativeAddRenderer)( |
| 1998 JNIEnv* jni, jclass, | 1975 JNIEnv* jni, jclass, |
| 1999 jlong j_video_track_pointer, jlong j_renderer_pointer) { | 1976 jlong j_video_track_pointer, jlong j_renderer_pointer) { |
| 2000 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)->AddRenderer( | 1977 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) |
| 2001 reinterpret_cast<VideoRendererInterface*>(j_renderer_pointer)); | 1978 ->AddOrUpdateSink( |
| 1979 reinterpret_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>( |
| 1980 j_renderer_pointer), |
| 1981 rtc::VideoSinkWants()); |
| 2002 } | 1982 } |
| 2003 | 1983 |
| 2004 JOW(void, VideoTrack_nativeRemoveRenderer)( | 1984 JOW(void, VideoTrack_nativeRemoveRenderer)( |
| 2005 JNIEnv* jni, jclass, | 1985 JNIEnv* jni, jclass, |
| 2006 jlong j_video_track_pointer, jlong j_renderer_pointer) { | 1986 jlong j_video_track_pointer, jlong j_renderer_pointer) { |
| 2007 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)->RemoveRenderer( | 1987 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) |
| 2008 reinterpret_cast<VideoRendererInterface*>(j_renderer_pointer)); | 1988 ->RemoveSink( |
| 1989 reinterpret_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>( |
| 1990 j_renderer_pointer)); |
| 2009 } | 1991 } |
| 2010 | 1992 |
| 2011 JOW(jlong, CallSessionFileRotatingLogSink_nativeAddSink)( | 1993 JOW(jlong, CallSessionFileRotatingLogSink_nativeAddSink)( |
| 2012 JNIEnv* jni, jclass, | 1994 JNIEnv* jni, jclass, |
| 2013 jstring j_dirPath, jint j_maxFileSize, jint j_severity) { | 1995 jstring j_dirPath, jint j_maxFileSize, jint j_severity) { |
| 2014 std::string dir_path = JavaToStdString(jni, j_dirPath); | 1996 std::string dir_path = JavaToStdString(jni, j_dirPath); |
| 2015 rtc::CallSessionFileRotatingLogSink* sink = | 1997 rtc::CallSessionFileRotatingLogSink* sink = |
| 2016 new rtc::CallSessionFileRotatingLogSink(dir_path, j_maxFileSize); | 1998 new rtc::CallSessionFileRotatingLogSink(dir_path, j_maxFileSize); |
| 2017 if (!sink->Init()) { | 1999 if (!sink->Init()) { |
| 2018 LOG_V(rtc::LoggingSeverity::LS_WARNING) << | 2000 LOG_V(rtc::LoggingSeverity::LS_WARNING) << |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2103 return JavaStringFromStdString( | 2085 return JavaStringFromStdString( |
| 2104 jni, | 2086 jni, |
| 2105 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); | 2087 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); |
| 2106 } | 2088 } |
| 2107 | 2089 |
| 2108 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { | 2090 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
| 2109 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); | 2091 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); |
| 2110 } | 2092 } |
| 2111 | 2093 |
| 2112 } // namespace webrtc_jni | 2094 } // namespace webrtc_jni |
| OLD | NEW |