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

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

Issue 1257043004: AppRTCDemo: Render each video in a separate SurfaceView (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Change license header for PercentFrameLayout.java Created 5 years, 4 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 728 matching lines...) Expand 10 before | Expand all | Expand 10 after
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_can_apply_rotation_id_(GetMethodID( 743 j_can_apply_rotation_id_(GetMethodID(
744 jni, GetObjectClass(jni, j_callbacks), 744 jni, GetObjectClass(jni, j_callbacks),
745 "canApplyRotation", "()Z")), 745 "canApplyRotation", "()Z")),
746 j_frame_class_(jni, 746 j_frame_class_(jni,
747 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame")), 747 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame")),
748 j_i420_frame_ctor_id_(GetMethodID( 748 j_i420_frame_ctor_id_(GetMethodID(
749 jni, *j_frame_class_, "<init>", "(III[I[Ljava/nio/ByteBuffer;)V")), 749 jni, *j_frame_class_, "<init>", "(III[I[Ljava/nio/ByteBuffer;J)V")),
750 j_texture_frame_ctor_id_(GetMethodID( 750 j_texture_frame_ctor_id_(GetMethodID(
751 jni, *j_frame_class_, "<init>", 751 jni, *j_frame_class_, "<init>",
752 "(IIILjava/lang/Object;I)V")), 752 "(IIILjava/lang/Object;IJ)V")),
753 j_byte_buffer_class_(jni, FindClass(jni, "java/nio/ByteBuffer")), 753 j_byte_buffer_class_(jni, FindClass(jni, "java/nio/ByteBuffer")),
754 can_apply_rotation_set_(false), 754 can_apply_rotation_set_(false),
755 can_apply_rotation_(false) { 755 can_apply_rotation_(false) {
756 CHECK_EXCEPTION(jni); 756 CHECK_EXCEPTION(jni);
757 } 757 }
758 758
759 virtual ~JavaVideoRendererWrapper() {} 759 virtual ~JavaVideoRendererWrapper() {}
760 760
761 void RenderFrame(const cricket::VideoFrame* video_frame) override { 761 void RenderFrame(const cricket::VideoFrame* video_frame) override {
762 ScopedLocalRefFrame local_ref_frame(jni()); 762 ScopedLocalRefFrame local_ref_frame(jni());
763 763
764 // Calling CanApplyRotation here to ensure can_apply_rotation_ is set. 764 // Calling CanApplyRotation here to ensure can_apply_rotation_ is set.
765 CanApplyRotation(); 765 CanApplyRotation();
766 766
767 const cricket::VideoFrame* frame = 767 const cricket::VideoFrame* frame =
768 can_apply_rotation_ ? video_frame 768 can_apply_rotation_ ? video_frame
769 : video_frame->GetCopyWithRotationApplied(); 769 : video_frame->GetCopyWithRotationApplied();
770 // Make a shallow copy. |j_callbacks_| is responsible for releasing the
771 // copy by calling VideoRenderer.renderFrameDone().
772 frame = frame->Copy();
770 if (frame->GetNativeHandle() != NULL) { 773 if (frame->GetNativeHandle() != NULL) {
771 jobject j_frame = CricketToJavaTextureFrame(frame); 774 jobject j_frame = CricketToJavaTextureFrame(frame);
772 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame); 775 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame);
773 CHECK_EXCEPTION(jni()); 776 CHECK_EXCEPTION(jni());
774 } else { 777 } else {
775 jobject j_frame = CricketToJavaI420Frame(frame); 778 jobject j_frame = CricketToJavaI420Frame(frame);
776 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame); 779 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame);
777 CHECK_EXCEPTION(jni()); 780 CHECK_EXCEPTION(jni());
778 } 781 }
779 } 782 }
(...skipping 30 matching lines...) Expand all
810 const_cast<uint8*>(frame->GetUPlane()), frame->GetChromaSize()); 813 const_cast<uint8*>(frame->GetUPlane()), frame->GetChromaSize());
811 jobject v_buffer = jni()->NewDirectByteBuffer( 814 jobject v_buffer = jni()->NewDirectByteBuffer(
812 const_cast<uint8*>(frame->GetVPlane()), frame->GetChromaSize()); 815 const_cast<uint8*>(frame->GetVPlane()), frame->GetChromaSize());
813 jni()->SetObjectArrayElement(planes, 0, y_buffer); 816 jni()->SetObjectArrayElement(planes, 0, y_buffer);
814 jni()->SetObjectArrayElement(planes, 1, u_buffer); 817 jni()->SetObjectArrayElement(planes, 1, u_buffer);
815 jni()->SetObjectArrayElement(planes, 2, v_buffer); 818 jni()->SetObjectArrayElement(planes, 2, v_buffer);
816 return jni()->NewObject( 819 return jni()->NewObject(
817 *j_frame_class_, j_i420_frame_ctor_id_, 820 *j_frame_class_, j_i420_frame_ctor_id_,
818 frame->GetWidth(), frame->GetHeight(), 821 frame->GetWidth(), frame->GetHeight(),
819 static_cast<int>(frame->GetVideoRotation()), 822 static_cast<int>(frame->GetVideoRotation()),
820 strides, planes); 823 strides, planes, frame);
821 } 824 }
822 825
823 // Return a VideoRenderer.I420Frame referring texture object in |frame|. 826 // Return a VideoRenderer.I420Frame referring texture object in |frame|.
824 jobject CricketToJavaTextureFrame(const cricket::VideoFrame* frame) { 827 jobject CricketToJavaTextureFrame(const cricket::VideoFrame* frame) {
825 NativeHandleImpl* handle = 828 NativeHandleImpl* handle =
826 reinterpret_cast<NativeHandleImpl*>(frame->GetNativeHandle()); 829 reinterpret_cast<NativeHandleImpl*>(frame->GetNativeHandle());
827 jobject texture_object = reinterpret_cast<jobject>(handle->GetHandle()); 830 jobject texture_object = reinterpret_cast<jobject>(handle->GetHandle());
828 int texture_id = handle->GetTextureId(); 831 int texture_id = handle->GetTextureId();
829 return jni()->NewObject( 832 return jni()->NewObject(
830 *j_frame_class_, j_texture_frame_ctor_id_, 833 *j_frame_class_, j_texture_frame_ctor_id_,
831 frame->GetWidth(), frame->GetHeight(), 834 frame->GetWidth(), frame->GetHeight(),
832 static_cast<int>(frame->GetVideoRotation()), 835 static_cast<int>(frame->GetVideoRotation()),
833 texture_object, texture_id); 836 texture_object, texture_id, frame);
834 } 837 }
835 838
836 JNIEnv* jni() { 839 JNIEnv* jni() {
837 return AttachCurrentThreadIfNeeded(); 840 return AttachCurrentThreadIfNeeded();
838 } 841 }
839 842
840 ScopedGlobalRef<jobject> j_callbacks_; 843 ScopedGlobalRef<jobject> j_callbacks_;
841 jmethodID j_render_frame_id_; 844 jmethodID j_render_frame_id_;
842 jmethodID j_can_apply_rotation_id_; 845 jmethodID j_can_apply_rotation_id_;
843 ScopedGlobalRef<jclass> j_frame_class_; 846 ScopedGlobalRef<jclass> j_frame_class_;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 } 950 }
948 951
949 JOW(void, VideoRenderer_freeGuiVideoRenderer)(JNIEnv*, jclass, jlong j_p) { 952 JOW(void, VideoRenderer_freeGuiVideoRenderer)(JNIEnv*, jclass, jlong j_p) {
950 delete reinterpret_cast<VideoRendererWrapper*>(j_p); 953 delete reinterpret_cast<VideoRendererWrapper*>(j_p);
951 } 954 }
952 955
953 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) { 956 JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) {
954 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p); 957 delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p);
955 } 958 }
956 959
960 JOW(void, VideoRenderer_releaseNativeFrame)(
961 JNIEnv* jni, jclass, jlong j_frame_ptr) {
962 delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr);
963 }
964
957 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) { 965 JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) {
958 CHECK_RELEASE(reinterpret_cast<MediaStreamTrackInterface*>(j_p)); 966 CHECK_RELEASE(reinterpret_cast<MediaStreamTrackInterface*>(j_p));
959 } 967 }
960 968
961 JOW(jboolean, MediaStream_nativeAddAudioTrack)( 969 JOW(jboolean, MediaStream_nativeAddAudioTrack)(
962 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) { 970 JNIEnv* jni, jclass, jlong pointer, jlong j_audio_track_pointer) {
963 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack( 971 return reinterpret_cast<MediaStreamInterface*>(pointer)->AddTrack(
964 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer)); 972 reinterpret_cast<AudioTrackInterface*>(j_audio_track_pointer));
965 } 973 }
966 974
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 } 1715 }
1708 1716
1709 JOW(void, VideoTrack_nativeRemoveRenderer)( 1717 JOW(void, VideoTrack_nativeRemoveRenderer)(
1710 JNIEnv* jni, jclass, 1718 JNIEnv* jni, jclass,
1711 jlong j_video_track_pointer, jlong j_renderer_pointer) { 1719 jlong j_video_track_pointer, jlong j_renderer_pointer) {
1712 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)->RemoveRenderer( 1720 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)->RemoveRenderer(
1713 reinterpret_cast<VideoRendererInterface*>(j_renderer_pointer)); 1721 reinterpret_cast<VideoRendererInterface*>(j_renderer_pointer));
1714 } 1722 }
1715 1723
1716 } // namespace webrtc_jni 1724 } // 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