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 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
944 JOW(void, MediaSource_free)(JNIEnv*, jclass, jlong j_p) { | 943 JOW(void, MediaSource_free)(JNIEnv*, jclass, jlong j_p) { |
945 reinterpret_cast<rtc::RefCountInterface*>(j_p)->Release(); | 944 reinterpret_cast<rtc::RefCountInterface*>(j_p)->Release(); |
946 } | 945 } |
947 | 946 |
948 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { | 947 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { |
949 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); | 948 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); |
950 } | 949 } |
951 | 950 |
952 JOW(void, VideoRenderer_releaseNativeFrame)( | 951 JOW(void, VideoRenderer_releaseNativeFrame)( |
953 JNIEnv* jni, jclass, jlong j_frame_ptr) { | 952 JNIEnv* jni, jclass, jlong j_frame_ptr) { |
954 delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr); | 953 delete reinterpret_cast<const webrtc::VideoFrame*>(j_frame_ptr); |
955 } | 954 } |
956 | 955 |
957 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { | 956 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { |
958 reinterpret_cast<MediaStreamTrackInterface*>(j_p)->Release(); | 957 reinterpret_cast<MediaStreamTrackInterface*>(j_p)->Release(); |
959 } | 958 } |
960 | 959 |
961 JOW(jboolean, MediaStream_nativeAddAudioTrack)( | 960 JOW(jboolean, MediaStream_nativeAddAudioTrack)( |
962 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { | 961 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { |
963 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( | 962 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( |
964 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); | 963 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); |
(...skipping 1151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2116 return reinterpret_cast<MediaStreamTrackInterface*>(j_p) | 2115 return reinterpret_cast<MediaStreamTrackInterface*>(j_p) |
2117 ->set_enabled(enabled); | 2116 ->set_enabled(enabled); |
2118 } | 2117 } |
2119 | 2118 |
2120 JOW(void, VideoTrack_nativeAddRenderer)( | 2119 JOW(void, VideoTrack_nativeAddRenderer)( |
2121 JNIEnv* jni, jclass, | 2120 JNIEnv* jni, jclass, |
2122 jlong j_video_track_pointer, jlong j_renderer_pointer) { | 2121 jlong j_video_track_pointer, jlong j_renderer_pointer) { |
2123 LOG(LS_INFO) << "VideoTrack::nativeAddRenderer"; | 2122 LOG(LS_INFO) << "VideoTrack::nativeAddRenderer"; |
2124 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) | 2123 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) |
2125 ->AddOrUpdateSink( | 2124 ->AddOrUpdateSink( |
2126 reinterpret_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>( | 2125 reinterpret_cast<rtc::VideoSinkInterface<webrtc::VideoFrame>*>( |
2127 j_renderer_pointer), | 2126 j_renderer_pointer), |
2128 rtc::VideoSinkWants()); | 2127 rtc::VideoSinkWants()); |
2129 } | 2128 } |
2130 | 2129 |
2131 JOW(void, VideoTrack_nativeRemoveRenderer)( | 2130 JOW(void, VideoTrack_nativeRemoveRenderer)( |
2132 JNIEnv* jni, jclass, | 2131 JNIEnv* jni, jclass, |
2133 jlong j_video_track_pointer, jlong j_renderer_pointer) { | 2132 jlong j_video_track_pointer, jlong j_renderer_pointer) { |
2134 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) | 2133 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) |
2135 ->RemoveSink( | 2134 ->RemoveSink( |
2136 reinterpret_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>( | 2135 reinterpret_cast<rtc::VideoSinkInterface<webrtc::VideoFrame>*>( |
2137 j_renderer_pointer)); | 2136 j_renderer_pointer)); |
2138 } | 2137 } |
2139 | 2138 |
2140 JOW(jlong, CallSessionFileRotatingLogSink_nativeAddSink)( | 2139 JOW(jlong, CallSessionFileRotatingLogSink_nativeAddSink)( |
2141 JNIEnv* jni, jclass, | 2140 JNIEnv* jni, jclass, |
2142 jstring j_dirPath, jint j_maxFileSize, jint j_severity) { | 2141 jstring j_dirPath, jint j_maxFileSize, jint j_severity) { |
2143 std::string dir_path = JavaToStdString(jni, j_dirPath); | 2142 std::string dir_path = JavaToStdString(jni, j_dirPath); |
2144 rtc::CallSessionFileRotatingLogSink* sink = | 2143 rtc::CallSessionFileRotatingLogSink* sink = |
2145 new rtc::CallSessionFileRotatingLogSink(dir_path, j_maxFileSize); | 2144 new rtc::CallSessionFileRotatingLogSink(dir_path, j_maxFileSize); |
2146 if (!sink->Init()) { | 2145 if (!sink->Init()) { |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2406 return JavaStringFromStdString( | 2405 return JavaStringFromStdString( |
2407 jni, | 2406 jni, |
2408 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); | 2407 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); |
2409 } | 2408 } |
2410 | 2409 |
2411 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { | 2410 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
2412 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); | 2411 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); |
2413 } | 2412 } |
2414 | 2413 |
2415 } // namespace webrtc_jni | 2414 } // namespace webrtc_jni |
OLD | NEW |