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<webrtc::VideoFrame> { | 736 : public rtc::VideoSinkInterface<cricket::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 webrtc::VideoFrame& video_frame) override { | 756 void OnFrame(const cricket::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 webrtc::VideoFrame* frame) { | 772 static jlong javaShallowCopy(const cricket::VideoFrame* frame) { |
773 return jlongFromPointer(new webrtc::VideoFrame(*frame)); | 773 return jlongFromPointer(new cricket::WebRtcVideoFrame( |
| 774 frame->video_frame_buffer(), frame->rotation(), frame->timestamp_us())); |
774 } | 775 } |
775 | 776 |
776 // Return a VideoRenderer.I420Frame referring to the data in |frame|. | 777 // Return a VideoRenderer.I420Frame referring to the data in |frame|. |
777 jobject CricketToJavaI420Frame(const webrtc::VideoFrame* frame) { | 778 jobject CricketToJavaI420Frame(const cricket::VideoFrame* frame) { |
778 jintArray strides = jni()->NewIntArray(3); | 779 jintArray strides = jni()->NewIntArray(3); |
779 jint* strides_array = jni()->GetIntArrayElements(strides, NULL); | 780 jint* strides_array = jni()->GetIntArrayElements(strides, NULL); |
780 strides_array[0] = frame->video_frame_buffer()->StrideY(); | 781 strides_array[0] = frame->video_frame_buffer()->StrideY(); |
781 strides_array[1] = frame->video_frame_buffer()->StrideU(); | 782 strides_array[1] = frame->video_frame_buffer()->StrideU(); |
782 strides_array[2] = frame->video_frame_buffer()->StrideV(); | 783 strides_array[2] = frame->video_frame_buffer()->StrideV(); |
783 jni()->ReleaseIntArrayElements(strides, strides_array, 0); | 784 jni()->ReleaseIntArrayElements(strides, strides_array, 0); |
784 jobjectArray planes = jni()->NewObjectArray(3, *j_byte_buffer_class_, NULL); | 785 jobjectArray planes = jni()->NewObjectArray(3, *j_byte_buffer_class_, NULL); |
785 jobject y_buffer = jni()->NewDirectByteBuffer( | 786 jobject y_buffer = jni()->NewDirectByteBuffer( |
786 const_cast<uint8_t*>(frame->video_frame_buffer()->DataY()), | 787 const_cast<uint8_t*>(frame->video_frame_buffer()->DataY()), |
787 frame->video_frame_buffer()->StrideY() * | 788 frame->video_frame_buffer()->StrideY() * |
(...skipping 10 matching lines...) Expand all Loading... |
798 jni()->SetObjectArrayElement(planes, 1, u_buffer); | 799 jni()->SetObjectArrayElement(planes, 1, u_buffer); |
799 jni()->SetObjectArrayElement(planes, 2, v_buffer); | 800 jni()->SetObjectArrayElement(planes, 2, v_buffer); |
800 return jni()->NewObject( | 801 return jni()->NewObject( |
801 *j_frame_class_, j_i420_frame_ctor_id_, | 802 *j_frame_class_, j_i420_frame_ctor_id_, |
802 frame->width(), frame->height(), | 803 frame->width(), frame->height(), |
803 static_cast<int>(frame->rotation()), | 804 static_cast<int>(frame->rotation()), |
804 strides, planes, javaShallowCopy(frame)); | 805 strides, planes, javaShallowCopy(frame)); |
805 } | 806 } |
806 | 807 |
807 // Return a VideoRenderer.I420Frame referring texture object in |frame|. | 808 // Return a VideoRenderer.I420Frame referring texture object in |frame|. |
808 jobject CricketToJavaTextureFrame(const webrtc::VideoFrame* frame) { | 809 jobject CricketToJavaTextureFrame(const cricket::VideoFrame* frame) { |
809 NativeHandleImpl* handle = reinterpret_cast<NativeHandleImpl*>( | 810 NativeHandleImpl* handle = reinterpret_cast<NativeHandleImpl*>( |
810 frame->video_frame_buffer()->native_handle()); | 811 frame->video_frame_buffer()->native_handle()); |
811 jfloatArray sampling_matrix = handle->sampling_matrix.ToJava(jni()); | 812 jfloatArray sampling_matrix = handle->sampling_matrix.ToJava(jni()); |
812 | 813 |
813 return jni()->NewObject( | 814 return jni()->NewObject( |
814 *j_frame_class_, j_texture_frame_ctor_id_, | 815 *j_frame_class_, j_texture_frame_ctor_id_, |
815 frame->width(), frame->height(), | 816 frame->width(), frame->height(), |
816 static_cast<int>(frame->rotation()), | 817 static_cast<int>(frame->rotation()), |
817 handle->oes_texture_id, sampling_matrix, javaShallowCopy(frame)); | 818 handle->oes_texture_id, sampling_matrix, javaShallowCopy(frame)); |
818 } | 819 } |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
943 JOW(void, MediaSource_free)(JNIEnv*, jclass, jlong j_p) { | 944 JOW(void, MediaSource_free)(JNIEnv*, jclass, jlong j_p) { |
944 reinterpret_cast<rtc::RefCountInterface*>(j_p)->Release(); | 945 reinterpret_cast<rtc::RefCountInterface*>(j_p)->Release(); |
945 } | 946 } |
946 | 947 |
947 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { | 948 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { |
948 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); | 949 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); |
949 } | 950 } |
950 | 951 |
951 JOW(void, VideoRenderer_releaseNativeFrame)( | 952 JOW(void, VideoRenderer_releaseNativeFrame)( |
952 JNIEnv* jni, jclass, jlong j_frame_ptr) { | 953 JNIEnv* jni, jclass, jlong j_frame_ptr) { |
953 delete reinterpret_cast<const webrtc::VideoFrame*>(j_frame_ptr); | 954 delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr); |
954 } | 955 } |
955 | 956 |
956 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { | 957 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { |
957 reinterpret_cast<MediaStreamTrackInterface*>(j_p)->Release(); | 958 reinterpret_cast<MediaStreamTrackInterface*>(j_p)->Release(); |
958 } | 959 } |
959 | 960 |
960 JOW(jboolean, MediaStream_nativeAddAudioTrack)( | 961 JOW(jboolean, MediaStream_nativeAddAudioTrack)( |
961 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { | 962 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { |
962 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( | 963 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( |
963 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); | 964 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); |
(...skipping 1151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2115 return reinterpret_cast<MediaStreamTrackInterface*>(j_p) | 2116 return reinterpret_cast<MediaStreamTrackInterface*>(j_p) |
2116 ->set_enabled(enabled); | 2117 ->set_enabled(enabled); |
2117 } | 2118 } |
2118 | 2119 |
2119 JOW(void, VideoTrack_nativeAddRenderer)( | 2120 JOW(void, VideoTrack_nativeAddRenderer)( |
2120 JNIEnv* jni, jclass, | 2121 JNIEnv* jni, jclass, |
2121 jlong j_video_track_pointer, jlong j_renderer_pointer) { | 2122 jlong j_video_track_pointer, jlong j_renderer_pointer) { |
2122 LOG(LS_INFO) << "VideoTrack::nativeAddRenderer"; | 2123 LOG(LS_INFO) << "VideoTrack::nativeAddRenderer"; |
2123 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) | 2124 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) |
2124 ->AddOrUpdateSink( | 2125 ->AddOrUpdateSink( |
2125 reinterpret_cast<rtc::VideoSinkInterface<webrtc::VideoFrame>*>( | 2126 reinterpret_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>( |
2126 j_renderer_pointer), | 2127 j_renderer_pointer), |
2127 rtc::VideoSinkWants()); | 2128 rtc::VideoSinkWants()); |
2128 } | 2129 } |
2129 | 2130 |
2130 JOW(void, VideoTrack_nativeRemoveRenderer)( | 2131 JOW(void, VideoTrack_nativeRemoveRenderer)( |
2131 JNIEnv* jni, jclass, | 2132 JNIEnv* jni, jclass, |
2132 jlong j_video_track_pointer, jlong j_renderer_pointer) { | 2133 jlong j_video_track_pointer, jlong j_renderer_pointer) { |
2133 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) | 2134 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer) |
2134 ->RemoveSink( | 2135 ->RemoveSink( |
2135 reinterpret_cast<rtc::VideoSinkInterface<webrtc::VideoFrame>*>( | 2136 reinterpret_cast<rtc::VideoSinkInterface<cricket::VideoFrame>*>( |
2136 j_renderer_pointer)); | 2137 j_renderer_pointer)); |
2137 } | 2138 } |
2138 | 2139 |
2139 JOW(jlong, CallSessionFileRotatingLogSink_nativeAddSink)( | 2140 JOW(jlong, CallSessionFileRotatingLogSink_nativeAddSink)( |
2140 JNIEnv* jni, jclass, | 2141 JNIEnv* jni, jclass, |
2141 jstring j_dirPath, jint j_maxFileSize, jint j_severity) { | 2142 jstring j_dirPath, jint j_maxFileSize, jint j_severity) { |
2142 std::string dir_path = JavaToStdString(jni, j_dirPath); | 2143 std::string dir_path = JavaToStdString(jni, j_dirPath); |
2143 rtc::CallSessionFileRotatingLogSink* sink = | 2144 rtc::CallSessionFileRotatingLogSink* sink = |
2144 new rtc::CallSessionFileRotatingLogSink(dir_path, j_maxFileSize); | 2145 new rtc::CallSessionFileRotatingLogSink(dir_path, j_maxFileSize); |
2145 if (!sink->Init()) { | 2146 if (!sink->Init()) { |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2405 return JavaStringFromStdString( | 2406 return JavaStringFromStdString( |
2406 jni, | 2407 jni, |
2407 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); | 2408 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->id()); |
2408 } | 2409 } |
2409 | 2410 |
2410 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { | 2411 JOW(void, RtpReceiver_free)(JNIEnv* jni, jclass, jlong j_rtp_receiver_pointer) { |
2411 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); | 2412 reinterpret_cast<RtpReceiverInterface*>(j_rtp_receiver_pointer)->Release(); |
2412 } | 2413 } |
2413 | 2414 |
2414 } // namespace webrtc_jni | 2415 } // namespace webrtc_jni |
OLD | NEW |