Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(824)

Side by Side Diff: talk/app/webrtc/java/jni/peerconnection_jni.cc

Issue 1313563002: Java VideoRenderer.Callbacks: Make renderFrame() interface asynchronous (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2013 Google Inc. 3 * Copyright 2013 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 745 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 class JavaVideoRendererWrapper : public VideoRendererInterface { 756 class JavaVideoRendererWrapper : public VideoRendererInterface {
757 public: 757 public:
758 JavaVideoRendererWrapper(JNIEnv* jni, jobject j_callbacks) 758 JavaVideoRendererWrapper(JNIEnv* jni, jobject j_callbacks)
759 : j_callbacks_(jni, j_callbacks), 759 : j_callbacks_(jni, j_callbacks),
760 j_render_frame_id_(GetMethodID( 760 j_render_frame_id_(GetMethodID(
761 jni, GetObjectClass(jni, j_callbacks), "renderFrame", 761 jni, GetObjectClass(jni, j_callbacks), "renderFrame",
762 "(Lorg/webrtc/VideoRenderer$I420Frame;)V")), 762 "(Lorg/webrtc/VideoRenderer$I420Frame;)V")),
763 j_frame_class_(jni, 763 j_frame_class_(jni,
764 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame")), 764 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame")),
765 j_i420_frame_ctor_id_(GetMethodID( 765 j_i420_frame_ctor_id_(GetMethodID(
766 jni, *j_frame_class_, "<init>", "(III[I[Ljava/nio/ByteBuffer;)V")), 766 jni, *j_frame_class_, "<init>", "(III[I[Ljava/nio/ByteBuffer;J)V")),
767 j_texture_frame_ctor_id_(GetMethodID( 767 j_texture_frame_ctor_id_(GetMethodID(
768 jni, *j_frame_class_, "<init>", 768 jni, *j_frame_class_, "<init>",
769 "(IIILjava/lang/Object;I)V")), 769 "(IIILjava/lang/Object;IJ)V")),
770 j_byte_buffer_class_(jni, FindClass(jni, "java/nio/ByteBuffer")) { 770 j_byte_buffer_class_(jni, FindClass(jni, "java/nio/ByteBuffer")) {
771 CHECK_EXCEPTION(jni); 771 CHECK_EXCEPTION(jni);
772 } 772 }
773 773
774 virtual ~JavaVideoRendererWrapper() {} 774 virtual ~JavaVideoRendererWrapper() {}
775 775
776 void RenderFrame(const cricket::VideoFrame* video_frame) override { 776 void RenderFrame(const cricket::VideoFrame* video_frame) override {
777 ScopedLocalRefFrame local_ref_frame(jni()); 777 ScopedLocalRefFrame local_ref_frame(jni());
778 // Make a shallow copy. |j_callbacks_| is responsible for releasing the
779 // copy by calling VideoRenderer.renderFrameDone().
780 video_frame = video_frame->Copy();
778 jobject j_frame = (video_frame->GetNativeHandle() != nullptr) 781 jobject j_frame = (video_frame->GetNativeHandle() != nullptr)
779 ? CricketToJavaTextureFrame(video_frame) 782 ? CricketToJavaTextureFrame(video_frame)
780 : CricketToJavaI420Frame(video_frame); 783 : CricketToJavaI420Frame(video_frame);
781 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame); 784 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame);
782 CHECK_EXCEPTION(jni()); 785 CHECK_EXCEPTION(jni());
783 } 786 }
784 787
785 // TODO(guoweis): Report that rotation is supported as RenderFrame calls 788 // TODO(guoweis): Report that rotation is supported as RenderFrame calls
786 // GetCopyWithRotationApplied. 789 // GetCopyWithRotationApplied.
787 virtual bool CanApplyRotation() override { return true; } 790 virtual bool CanApplyRotation() override { return true; }
(...skipping 15 matching lines...) Expand all
803 const_cast<uint8*>(frame->GetUPlane()), frame->GetChromaSize()); 806 const_cast<uint8*>(frame->GetUPlane()), frame->GetChromaSize());
804 jobject v_buffer = jni()->NewDirectByteBuffer( 807 jobject v_buffer = jni()->NewDirectByteBuffer(
805 const_cast<uint8*>(frame->GetVPlane()), frame->GetChromaSize()); 808 const_cast<uint8*>(frame->GetVPlane()), frame->GetChromaSize());
806 jni()->SetObjectArrayElement(planes, 0, y_buffer); 809 jni()->SetObjectArrayElement(planes, 0, y_buffer);
807 jni()->SetObjectArrayElement(planes, 1, u_buffer); 810 jni()->SetObjectArrayElement(planes, 1, u_buffer);
808 jni()->SetObjectArrayElement(planes, 2, v_buffer); 811 jni()->SetObjectArrayElement(planes, 2, v_buffer);
809 return jni()->NewObject( 812 return jni()->NewObject(
810 *j_frame_class_, j_i420_frame_ctor_id_, 813 *j_frame_class_, j_i420_frame_ctor_id_,
811 frame->GetWidth(), frame->GetHeight(), 814 frame->GetWidth(), frame->GetHeight(),
812 static_cast<int>(frame->GetVideoRotation()), 815 static_cast<int>(frame->GetVideoRotation()),
813 strides, planes); 816 strides, planes, frame);
814 } 817 }
815 818
816 // Return a VideoRenderer.I420Frame referring texture object in |frame|. 819 // Return a VideoRenderer.I420Frame referring texture object in |frame|.
817 jobject CricketToJavaTextureFrame(const cricket::VideoFrame* frame) { 820 jobject CricketToJavaTextureFrame(const cricket::VideoFrame* frame) {
818 NativeHandleImpl* handle = 821 NativeHandleImpl* handle =
819 reinterpret_cast<NativeHandleImpl*>(frame->GetNativeHandle()); 822 reinterpret_cast<NativeHandleImpl*>(frame->GetNativeHandle());
820 jobject texture_object = reinterpret_cast<jobject>(handle->GetHandle()); 823 jobject texture_object = reinterpret_cast<jobject>(handle->GetHandle());
821 int texture_id = handle->GetTextureId(); 824 int texture_id = handle->GetTextureId();
822 return jni()->NewObject( 825 return jni()->NewObject(
823 *j_frame_class_, j_texture_frame_ctor_id_, 826 *j_frame_class_, j_texture_frame_ctor_id_,
824 frame->GetWidth(), frame->GetHeight(), 827 frame->GetWidth(), frame->GetHeight(),
825 static_cast<int>(frame->GetVideoRotation()), 828 static_cast<int>(frame->GetVideoRotation()),
826 texture_object, texture_id); 829 texture_object, texture_id, frame);
827 } 830 }
828 831
829 JNIEnv* jni() { 832 JNIEnv* jni() {
830 return AttachCurrentThreadIfNeeded(); 833 return AttachCurrentThreadIfNeeded();
831 } 834 }
832 835
833 ScopedGlobalRef<jobject> j_callbacks_; 836 ScopedGlobalRef<jobject> j_callbacks_;
834 jmethodID j_render_frame_id_; 837 jmethodID j_render_frame_id_;
835 ScopedGlobalRef<jclass> j_frame_class_; 838 ScopedGlobalRef<jclass> j_frame_class_;
836 jmethodID j_i420_frame_ctor_id_; 839 jmethodID j_i420_frame_ctor_id_;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 } 940 }
938 941
939 JOW(void, VideoRenderer_freeGuiVideoRenderer)(JNIEnv*, jclass, jlong j_p) { 942 JOW(void, VideoRenderer_freeGuiVideoRenderer)(JNIEnv*, jclass, jlong j_p) {
940 delete reinterpret_cast<VideoRendererWrapper*>(j_p); 943 delete reinterpret_cast<VideoRendererWrapper*>(j_p);
941 } 944 }
942 945
943 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { 946 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) {
944 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); 947 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p);
945 } 948 }
946 949
950 JOW(void, VideoRenderer_releaseNativeFrame)(
951 JNIEnv* jni, jclass, jlong j_frame_ptr) {
952 delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr);
953 }
954
947 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { 955 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) {
948 CHECK_RELEASE(reinterpret_cast<MediaStreamTrackInterface*>(j_p)); 956 CHECK_RELEASE(reinterpret_cast<MediaStreamTrackInterface*>(j_p));
949 } 957 }
950 958
951 JOW(jboolean, MediaStream_nativeAddAudioTrack)( 959 JOW(jboolean, MediaStream_nativeAddAudioTrack)(
952 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { 960 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) {
953 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( 961 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack(
954 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); 962 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer));
955 } 963 }
956 964
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
1697 } 1705 }
1698 1706
1699 JOW(void, VideoTrack_nativeRemoveRenderer)( 1707 JOW(void, VideoTrack_nativeRemoveRenderer)(
1700 JNIEnv* jni, jclass, 1708 JNIEnv* jni, jclass,
1701 jlong j_video_track_pointer, jlong j_renderer_pointer) { 1709 jlong j_video_track_pointer, jlong j_renderer_pointer) {
1702 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)->RemoveRenderer( 1710 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)->RemoveRenderer(
1703 reinterpret_cast<VideoRendererInterface*>(j_renderer_pointer)); 1711 reinterpret_cast<VideoRendererInterface*>(j_renderer_pointer));
1704 } 1712 }
1705 1713
1706 } // namespace webrtc_jni 1714 } // namespace webrtc_jni
OLDNEW
« no previous file with comments | « talk/app/webrtc/java/android/org/webrtc/VideoRendererGui.java ('k') | talk/app/webrtc/java/src/org/webrtc/VideoRenderer.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698