| 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 |