1 /* 2 * libjingle 3 * Copyright 2015 Google Inc. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 3. The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 */ 28 29 30 #include "talk/app/webrtc/java/jni/surfacetexturehelper_jni.h" 31 32 #include "talk/app/webrtc/java/jni/classreferenceholder.h" 33 #include "webrtc/base/bind.h" 34 #include "webrtc/base/checks.h" 35 36 namespace webrtc_jni { 37 38 SurfaceTextureHelper::SurfaceTextureHelper( 39 JNIEnv* jni, jobject surface_texture_helper) 40 : j_surface_texture_helper_(jni, surface_texture_helper), 41 j_return_texture_method_( 42 GetMethodID(jni, 43 FindClass(jni, "org/webrtc/SurfaceTextureHelper"), 44 "returnTextureFrame", 45 "()V")) { 46 CHECK_EXCEPTION(jni) << "error during initialization of SurfaceTextureHelper"; 47 } 48 49 SurfaceTextureHelper::~SurfaceTextureHelper() { 50 } 51 52 void SurfaceTextureHelper::ReturnTextureFrame() const { 53 JNIEnv* jni = AttachCurrentThreadIfNeeded(); 54 jni->CallVoidMethod(*j_surface_texture_helper_, j_return_texture_method_); 55 56 CHECK_EXCEPTION( 57 jni) << "error during SurfaceTextureHelper.returnTextureFrame"; 58 } 59 60 rtc::scoped_refptr<webrtc::VideoFrameBuffer> 61 SurfaceTextureHelper::CreateTextureFrame(int width, int height, 62 const NativeHandleImpl& native_handle) { 63 return new rtc::RefCountedObject<AndroidTextureBuffer>( 64 width, height, native_handle, *j_surface_texture_helper_, 65 rtc::Bind(&SurfaceTextureHelper::ReturnTextureFrame, this)); 66 } 67 68 } // namespace webrtc_jni 69