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

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

Issue 1306073003: Android: Remove VideoRenderer.Callbacks.canApplyRotation() (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Restore previous test behaviour + remove some dead code 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 722 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 733
734 // Wrapper dispatching webrtc::VideoRendererInterface to a Java VideoRenderer 734 // Wrapper dispatching webrtc::VideoRendererInterface to a Java VideoRenderer
735 // instance. 735 // instance.
736 class JavaVideoRendererWrapper : public VideoRendererInterface { 736 class JavaVideoRendererWrapper : public VideoRendererInterface {
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_can_apply_rotation_id_(GetMethodID(
744 jni, GetObjectClass(jni, j_callbacks),
745 "canApplyRotation", "()Z")),
746 j_frame_class_(jni, 743 j_frame_class_(jni,
747 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame")), 744 FindClass(jni, "org/webrtc/VideoRenderer$I420Frame")),
748 j_i420_frame_ctor_id_(GetMethodID( 745 j_i420_frame_ctor_id_(GetMethodID(
749 jni, *j_frame_class_, "<init>", "(III[I[Ljava/nio/ByteBuffer;)V")), 746 jni, *j_frame_class_, "<init>", "(III[I[Ljava/nio/ByteBuffer;)V")),
750 j_texture_frame_ctor_id_(GetMethodID( 747 j_texture_frame_ctor_id_(GetMethodID(
751 jni, *j_frame_class_, "<init>", 748 jni, *j_frame_class_, "<init>",
752 "(IIILjava/lang/Object;I)V")), 749 "(IIILjava/lang/Object;I)V")),
753 j_byte_buffer_class_(jni, FindClass(jni, "java/nio/ByteBuffer")), 750 j_byte_buffer_class_(jni, FindClass(jni, "java/nio/ByteBuffer")) {
754 can_apply_rotation_set_(false),
755 can_apply_rotation_(false) {
756 CHECK_EXCEPTION(jni); 751 CHECK_EXCEPTION(jni);
757 } 752 }
758 753
759 virtual ~JavaVideoRendererWrapper() {} 754 virtual ~JavaVideoRendererWrapper() {}
760 755
761 void RenderFrame(const cricket::VideoFrame* video_frame) override { 756 void RenderFrame(const cricket::VideoFrame* video_frame) override {
762 ScopedLocalRefFrame local_ref_frame(jni()); 757 ScopedLocalRefFrame local_ref_frame(jni());
763 758 jobject j_frame = (video_frame->GetNativeHandle() != nullptr)
764 // Calling CanApplyRotation here to ensure can_apply_rotation_ is set. 759 ? CricketToJavaTextureFrame(video_frame)
765 CanApplyRotation(); 760 : CricketToJavaI420Frame(video_frame);
766 761 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame);
767 const cricket::VideoFrame* frame = 762 CHECK_EXCEPTION(jni());
768 can_apply_rotation_ ? video_frame
769 : video_frame->GetCopyWithRotationApplied();
770 if (frame->GetNativeHandle() != NULL) {
771 jobject j_frame = CricketToJavaTextureFrame(frame);
772 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame);
773 CHECK_EXCEPTION(jni());
774 } else {
775 jobject j_frame = CricketToJavaI420Frame(frame);
776 jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame);
777 CHECK_EXCEPTION(jni());
778 }
779 } 763 }
780 764
781 // TODO(guoweis): Report that rotation is supported as RenderFrame calls 765 // TODO(guoweis): Report that rotation is supported as RenderFrame calls
782 // GetCopyWithRotationApplied. 766 // GetCopyWithRotationApplied.
783 virtual bool CanApplyRotation() override { 767 virtual bool CanApplyRotation() override { return true; }
784 if (can_apply_rotation_set_) {
785 return can_apply_rotation_;
786 }
787 ScopedLocalRefFrame local_ref_frame(jni());
788 jboolean ret =
789 jni()->CallBooleanMethod(*j_callbacks_, j_can_apply_rotation_id_);
790 CHECK_EXCEPTION(jni());
791 can_apply_rotation_ = ret;
792 can_apply_rotation_set_ = true;
793 return ret;
794 }
795 768
796 private: 769 private:
797 // Return a VideoRenderer.I420Frame referring to the data in |frame|. 770 // Return a VideoRenderer.I420Frame referring to the data in |frame|.
798 jobject CricketToJavaI420Frame(const cricket::VideoFrame* frame) { 771 jobject CricketToJavaI420Frame(const cricket::VideoFrame* frame) {
799 jintArray strides = jni()->NewIntArray(3); 772 jintArray strides = jni()->NewIntArray(3);
800 jint* strides_array = jni()->GetIntArrayElements(strides, NULL); 773 jint* strides_array = jni()->GetIntArrayElements(strides, NULL);
801 strides_array[0] = frame->GetYPitch(); 774 strides_array[0] = frame->GetYPitch();
802 strides_array[1] = frame->GetUPitch(); 775 strides_array[1] = frame->GetUPitch();
803 strides_array[2] = frame->GetVPitch(); 776 strides_array[2] = frame->GetVPitch();
804 jni()->ReleaseIntArrayElements(strides, strides_array, 0); 777 jni()->ReleaseIntArrayElements(strides, strides_array, 0);
(...skipping 27 matching lines...) Expand all
832 static_cast<int>(frame->GetVideoRotation()), 805 static_cast<int>(frame->GetVideoRotation()),
833 texture_object, texture_id); 806 texture_object, texture_id);
834 } 807 }
835 808
836 JNIEnv* jni() { 809 JNIEnv* jni() {
837 return AttachCurrentThreadIfNeeded(); 810 return AttachCurrentThreadIfNeeded();
838 } 811 }
839 812
840 ScopedGlobalRef<jobject> j_callbacks_; 813 ScopedGlobalRef<jobject> j_callbacks_;
841 jmethodID j_render_frame_id_; 814 jmethodID j_render_frame_id_;
842 jmethodID j_can_apply_rotation_id_;
843 ScopedGlobalRef<jclass> j_frame_class_; 815 ScopedGlobalRef<jclass> j_frame_class_;
844 jmethodID j_i420_frame_ctor_id_; 816 jmethodID j_i420_frame_ctor_id_;
845 jmethodID j_texture_frame_ctor_id_; 817 jmethodID j_texture_frame_ctor_id_;
846 ScopedGlobalRef<jclass> j_byte_buffer_class_; 818 ScopedGlobalRef<jclass> j_byte_buffer_class_;
847 bool can_apply_rotation_set_;
848 bool can_apply_rotation_;
849 }; 819 };
850 820
851 821
852 static DataChannelInterface* ExtractNativeDC(JNIEnv* jni, jobject j_dc) { 822 static DataChannelInterface* ExtractNativeDC(JNIEnv* jni, jobject j_dc) {
853 jfieldID native_dc_id = GetFieldID(jni, 823 jfieldID native_dc_id = GetFieldID(jni,
854 GetObjectClass(jni, j_dc), "nativeDataChannel", "J"); 824 GetObjectClass(jni, j_dc), "nativeDataChannel", "J");
855 jlong j_d = GetLongField(jni, j_dc, native_dc_id); 825 jlong j_d = GetLongField(jni, j_dc, native_dc_id);
856 return reinterpret_cast<DataChannelInterface*>(j_d); 826 return reinterpret_cast<DataChannelInterface*>(j_d);
857 } 827 }
858 828
(...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 } 1677 }
1708 1678
1709 JOW(void, VideoTrack_nativeRemoveRenderer)( 1679 JOW(void, VideoTrack_nativeRemoveRenderer)(
1710 JNIEnv* jni, jclass, 1680 JNIEnv* jni, jclass,
1711 jlong j_video_track_pointer, jlong j_renderer_pointer) { 1681 jlong j_video_track_pointer, jlong j_renderer_pointer) {
1712 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)->RemoveRenderer( 1682 reinterpret_cast<VideoTrackInterface*>(j_video_track_pointer)->RemoveRenderer(
1713 reinterpret_cast<VideoRendererInterface*>(j_renderer_pointer)); 1683 reinterpret_cast<VideoRendererInterface*>(j_renderer_pointer));
1714 } 1684 }
1715 1685
1716 } // namespace webrtc_jni 1686 } // 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