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 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
726 const ScopedGlobalRef<jclass> j_observer_class_; | 726 const ScopedGlobalRef<jclass> j_observer_class_; |
727 const ScopedGlobalRef<jclass> j_stats_report_class_; | 727 const ScopedGlobalRef<jclass> j_stats_report_class_; |
728 const jmethodID j_stats_report_ctor_; | 728 const jmethodID j_stats_report_ctor_; |
729 const ScopedGlobalRef<jclass> j_value_class_; | 729 const ScopedGlobalRef<jclass> j_value_class_; |
730 const jmethodID j_value_ctor_; | 730 const jmethodID j_value_ctor_; |
731 }; | 731 }; |
732 | 732 |
733 // Wrapper dispatching rtc::VideoSinkInterface to a Java VideoRenderer | 733 // Wrapper dispatching rtc::VideoSinkInterface to a Java VideoRenderer |
734 // instance. | 734 // instance. |
735 class JavaVideoRendererWrapper | 735 class JavaVideoRendererWrapper |
736 : public rtc::VideoSinkInterface<cricket::VideoFrame> { | 736 : public rtc::VideoSinkInterface<webrtc::VideoFrame> { |
737 public: | 737 public: |
738 JavaVideoRendererWrapper(JNIEnv* jni, jobject j_callbacks) | 738 JavaVideoRendererWrapper(JNIEnv* jni, jobject j_callbacks) |
739 : j_callbacks_(jni, j_callbacks), | 739 : j_callbacks_(jni, j_callbacks), |
740 j_render_frame_id_(GetMethodID( | 740 j_render_frame_id_(GetMethodID( |
741 jni, GetObjectClass(jni, j_callbacks), "renderFrame", | 741 jni, GetObjectClass(jni, j_callbacks), "renderFrame", |
742 "(Lorg/webrtc/VideoRenderer$I420Frame;)V")), | 742 "(Lorg/webrtc/VideoRenderer$I420Frame;)V")), |
743 j_frame_class_(jni, | 743 j_frame_class_(jni, |
744 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame")), | 744 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame")), |
745 j_i420_frame_ctor_id_(GetMethodID( | 745 j_i420_frame_ctor_id_(GetMethodID( |
746 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")), |
747 j_texture_frame_ctor_id_(GetMethodID( | 747 j_texture_frame_ctor_id_(GetMethodID( |
748 jni, *j_frame_class_, "<init>", | 748 jni, *j_frame_class_, "<init>", |
749 "(IIII[FJ)V")), | 749 "(IIII[FJ)V")), |
750 j_byte_buffer_class_(jni, FindClass(jni, "java/nio/ByteBuffer")) { | 750 j_byte_buffer_class_(jni, FindClass(jni, "java/nio/ByteBuffer")) { |
751 CHECK_EXCEPTION(jni); | 751 CHECK_EXCEPTION(jni); |
752 } | 752 } |
753 | 753 |
754 virtual ~JavaVideoRendererWrapper() {} | 754 virtual ~JavaVideoRendererWrapper() {} |
755 | 755 |
756 void OnFrame(const cricket::VideoFrame& video_frame) override { | 756 void OnFrame(const webrtc::VideoFrame& video_frame) override { |
757 ScopedLocalRefFrame local_ref_frame(jni()); | 757 ScopedLocalRefFrame local_ref_frame(jni()); |
758 jobject j_frame = | 758 jobject j_frame = |
759 (video_frame.video_frame_buffer()->native_handle() != nullptr) | 759 (video_frame.video_frame_buffer()->native_handle() != nullptr) |
760 ? CricketToJavaTextureFrame(&video_frame) | 760 ? CricketToJavaTextureFrame(&video_frame) |
761 : CricketToJavaI420Frame(&video_frame); | 761 : CricketToJavaI420Frame(&video_frame); |
762 // |j_callbacks_| is responsible for releasing |j_frame| with | 762 // |j_callbacks_| is responsible for releasing |j_frame| with |
763 // VideoRenderer.renderFrameDone(). | 763 // VideoRenderer.renderFrameDone(). |
764 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame); | 764 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame); |
765 CHECK_EXCEPTION(jni()); | 765 CHECK_EXCEPTION(jni()); |
766 } | 766 } |
767 | 767 |
768 private: | 768 private: |
769 // Make a shallow copy of |frame| to be used with Java. The callee has | 769 // Make a shallow copy of |frame| to be used with Java. The callee has |
770 // ownership of the frame, and the frame should be released with | 770 // ownership of the frame, and the frame should be released with |
771 // VideoRenderer.releaseNativeFrame(). | 771 // VideoRenderer.releaseNativeFrame(). |
772 static jlong javaShallowCopy(const cricket::VideoFrame* frame) { | 772 static jlong javaShallowCopy(const webrtc::VideoFrame* frame) { |
773 return jlongFromPointer(new cricket::WebRtcVideoFrame( | 773 return jlongFromPointer(new webrtc::VideoFrame(*frame)); |
774 frame->video_frame_buffer(), frame->rotation(), frame->timestamp_us())); | |
775 } | 774 } |
776 | 775 |
777 // Return a VideoRenderer.I420Frame referring to the data in |frame|. | 776 // Return a VideoRenderer.I420Frame referring to the data in |frame|. |
778 jobject CricketToJavaI420Frame(const cricket::VideoFrame* frame) { | 777 jobject CricketToJavaI420Frame(const webrtc::VideoFrame* frame) { |
779 jintArray strides = jni()->NewIntArray(3); | 778 jintArray strides = jni()->NewIntArray(3); |
780 jint* strides_array = jni()->GetIntArrayElements(strides, NULL); | 779 jint* strides_array = jni()->GetIntArrayElements(strides, NULL); |
781 strides_array[0] = frame->video_frame_buffer()->StrideY(); | 780 strides_array[0] = frame->video_frame_buffer()->StrideY(); |
782 strides_array[1] = frame->video_frame_buffer()->StrideU(); | 781 strides_array[1] = frame->video_frame_buffer()->StrideU(); |
783 strides_array[2] = frame->video_frame_buffer()->StrideV(); | 782 strides_array[2] = frame->video_frame_buffer()->StrideV(); |
784 jni()->ReleaseIntArrayElements(strides, strides_array, 0); | 783 jni()->ReleaseIntArrayElements(strides, strides_array, 0); |
785 jobjectArray planes = jni()->NewObjectArray(3, *j_byte_buffer_class_, NULL); | 784 jobjectArray planes = jni()->NewObjectArray(3, *j_byte_buffer_class_, NULL); |
786 jobject y_buffer = jni()->NewDirectByteBuffer( | 785 jobject y_buffer = jni()->NewDirectByteBuffer( |
787 const_cast<uint8_t*>(frame->video_frame_buffer()->DataY()), | 786 const_cast<uint8_t*>(frame->video_frame_buffer()->DataY()), |
788 frame->video_frame_buffer()->StrideY() * | 787 frame->video_frame_buffer()->StrideY() * |
(...skipping 10 matching lines...) Expand all Loading... |
799 jni()->SetObjectArrayElement(planes, 1, u_buffer); | 798 jni()->SetObjectArrayElement(planes, 1, u_buffer); |
800 jni()->SetObjectArrayElement(planes, 2, v_buffer); | 799 jni()->SetObjectArrayElement(planes, 2, v_buffer); |
801 return jni()->NewObject( | 800 return jni()->NewObject( |
802 *j_frame_class_, j_i420_frame_ctor_id_, | 801 *j_frame_class_, j_i420_frame_ctor_id_, |
803 frame->width(), frame->height(), | 802 frame->width(), frame->height(), |
804 static_cast<int>(frame->rotation()), | 803 static_cast<int>(frame->rotation()), |
805 strides, planes, javaShallowCopy(frame)); | 804 strides, planes, javaShallowCopy(frame)); |
806 } | 805 } |
807 | 806 |
808 // Return a VideoRenderer.I420Frame referring texture object in |frame|. | 807 // Return a VideoRenderer.I420Frame referring texture object in |frame|. |
809 jobject CricketToJavaTextureFrame(const cricket::VideoFrame* frame) { | 808 jobject CricketToJavaTextureFrame(const webrtc::VideoFrame* frame) { |
810 NativeHandleImpl* handle = reinterpret_cast<NativeHandleImpl*>( | 809 NativeHandleImpl* handle = reinterpret_cast<NativeHandleImpl*>( |
811 frame->video_frame_buffer()->native_handle()); | 810 frame->video_frame_buffer()->native_handle()); |
812 jfloatArray sampling_matrix = handle->sampling_matrix.ToJava(jni()); | 811 jfloatArray sampling_matrix = handle->sampling_matrix.ToJava(jni()); |
813 | 812 |
814 return jni()->NewObject( | 813 return jni()->NewObject( |
815 *j_frame_class_, j_texture_frame_ctor_id_, | 814 *j_frame_class_, j_texture_frame_ctor_id_, |
816 frame->width(), frame->height(), | 815 frame->width(), frame->height(), |
817 static_cast<int>(frame->rotation()), | 816 static_cast<int>(frame->rotation()), |
818 handle->oes_texture_id, sampling_matrix, javaShallowCopy(frame)); | 817 handle->oes_texture_id, sampling_matrix, javaShallowCopy(frame)); |
819 } | 818 } |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
937 JOW(void, MediaSource_free)(JNIEnv*, jclass, jlong j_p) { | 936 JOW(void, MediaSource_free)(JNIEnv*, jclass, jlong j_p) { |
938 reinterpret_cast<rtc::RefCountInterface*>(j_p)->Release(); | 937 reinterpret_cast<rtc::RefCountInterface*>(j_p)->Release(); |
939 } | 938 } |
940 | 939 |
941 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { | 940 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { |
942 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); | 941 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); |
943 } | 942 } |
944 | 943 |
945 JOW(void, VideoRenderer_releaseNativeFrame)( | 944 JOW(void, VideoRenderer_releaseNativeFrame)( |
946 JNIEnv* jni, jclass, jlong j_frame_ptr) { | 945 JNIEnv* jni, jclass, jlong j_frame_ptr) { |
947 delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr); | 946 delete reinterpret_cast<const webrtc::VideoFrame*>(j_frame_ptr); |
948 } | 947 } |
949 | 948 |
950 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { | 949 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { |
951 reinterpret_cast<MediaStreamTrackInterface*>(j_p)->Release(); | 950 reinterpret_cast<MediaStreamTrackInterface*>(j_p)->Release(); |
952 } | 951 } |
953 | 952 |
954 JOW(jboolean, MediaStream_nativeAddAudioTrack)( | 953 JOW(jboolean, MediaStream_nativeAddAudioTrack)( |
955 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { | 954 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { |
956 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( | 955 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( |
957 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); | 956 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); |
(...skipping 1144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2102 return reinterpret_cast<MediaStreamTrackInterface*>(j_p) | 2101 return reinterpret_cast<MediaStreamTrackInterface*>(j_p) |
2103 ->set_enabled(enabled); | 2102 ->set_enabled(enabled); |
2104 } | 2103 } |
2105 | 2104 |
2106 JOW(void, VideoTrack_nativeAddRenderer)( | 2105 JOW(void, VideoTrack_nativeAddRenderer)( |
2107 JNIEnv* jni, jclass, | 2106 JNIEnv* jni, jclass, |
2108 jlong j_video_track_pointer, jlong j_renderer_pointer) { | 2107 jlong j_video_track_pointer, jlong j_renderer_pointer) { |
2109 LOG(LS_INFO) << "VideoTrack::nativeAddRenderer"; | 2108 LOG(LS_INFO) << "VideoTrack::nativeAddRenderer"; |
2110 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) | 2109 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) |
2111 ->AddOrUpdateSink( | 2110 ->AddOrUpdateSink( |
2112 reinterpret_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>( | 2111 reinterpret_cast<rtc::VideoSinkInterface<webrtc::VideoFrame>*>( |
2113 j_renderer_pointer), | 2112 j_renderer_pointer), |
2114 rtc::VideoSinkWants()); | 2113 rtc::VideoSinkWants()); |
2115 } | 2114 } |
2116 | 2115 |
2117 JOW(void, VideoTrack_nativeRemoveRenderer)( | 2116 JOW(void, VideoTrack_nativeRemoveRenderer)( |
2118 JNIEnv* jni, jclass, | 2117 JNIEnv* jni, jclass, |
2119 jlong j_video_track_pointer, jlong j_renderer_pointer) { | 2118 jlong j_video_track_pointer, jlong j_renderer_pointer) { |
2120 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) | 2119 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) |
2121 ->RemoveSink( | 2120 ->RemoveSink( |
2122 reinterpret_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>( | 2121 reinterpret_cast<rtc::VideoSinkInterface<webrtc::VideoFrame>*>( |
2123 j_renderer_pointer)); | 2122 j_renderer_pointer)); |
2124 } | 2123 } |
2125 | 2124 |
2126 JOW(jlong, CallSessionFileRotatingLogSink_nativeAddSink)( | 2125 JOW(jlong, CallSessionFileRotatingLogSink_nativeAddSink)( |
2127 JNIEnv* jni, jclass, | 2126 JNIEnv* jni, jclass, |
2128 jstring j_dirPath, jint j_maxFileSize, jint j_severity) { | 2127 jstring j_dirPath, jint j_maxFileSize, jint j_severity) { |
2129 std::string dir_path = JavaToStdString(jni, j_dirPath); | 2128 std::string dir_path = JavaToStdString(jni, j_dirPath); |
2130 rtc::CallSessionFileRotatingLogSink* sink = | 2129 rtc::CallSessionFileRotatingLogSink* sink = |
2131 new rtc::CallSessionFileRotatingLogSink(dir_path, j_maxFileSize); | 2130 new rtc::CallSessionFileRotatingLogSink(dir_path, j_maxFileSize); |
2132 if (!sink->Init()) { | 2131 if (!sink->Init()) { |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2392 return JavaStringFromStdString( | 2391 return JavaStringFromStdString( |
2393 jni, | 2392 jni, |
2394 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); | 2393 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); |
2395 } | 2394 } |
2396 | 2395 |
2397 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { | 2396 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
2398 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); | 2397 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); |
2399 } | 2398 } |
2400 | 2399 |
2401 } // namespace webrtc_jni | 2400 } // namespace webrtc_jni |
OLD | NEW |