1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.ui.gl; 6 7 import android.graphics.SurfaceTexture; 8 import android.os.Build; 9 import android.util.Log; 10 11 import org.chromium.base.CalledByNative; 12 import org.chromium.base.JNINamespace; 13 14 /** 15 * Wrapper class for the underlying platform's SurfaceTexture in order to 16 * provide a stable JNI API. 17 */ 18 @JNINamespace("gfx") 19 class SurfaceTexturePlatformWrapper { 20 21 private static final String TAG = "SurfaceTexturePlatformWrapper"; 22 23 @CalledByNative create(int textureId)24 private static SurfaceTexture create(int textureId) { 25 return new SurfaceTexture(textureId); 26 } 27 28 @CalledByNative createSingleBuffered(int textureId)29 private static SurfaceTexture createSingleBuffered(int textureId) { 30 assert Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; 31 return new SurfaceTexture(textureId, true); 32 } 33 34 @CalledByNative destroy(SurfaceTexture surfaceTexture)35 private static void destroy(SurfaceTexture surfaceTexture) { 36 surfaceTexture.setOnFrameAvailableListener(null); 37 surfaceTexture.release(); 38 } 39 40 @CalledByNative setFrameAvailableCallback(SurfaceTexture surfaceTexture, long nativeSurfaceTextureListener)41 private static void setFrameAvailableCallback(SurfaceTexture surfaceTexture, 42 long nativeSurfaceTextureListener) { 43 surfaceTexture.setOnFrameAvailableListener( 44 new SurfaceTextureListener(nativeSurfaceTextureListener)); 45 } 46 47 @CalledByNative updateTexImage(SurfaceTexture surfaceTexture)48 private static void updateTexImage(SurfaceTexture surfaceTexture) { 49 try { 50 surfaceTexture.updateTexImage(); 51 } catch (RuntimeException e) { 52 Log.e(TAG, "Error calling updateTexImage", e); 53 } 54 } 55 56 @CalledByNative releaseTexImage(SurfaceTexture surfaceTexture)57 private static void releaseTexImage(SurfaceTexture surfaceTexture) { 58 assert Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; 59 surfaceTexture.releaseTexImage(); 60 } 61 62 @CalledByNative setDefaultBufferSize(SurfaceTexture surfaceTexture, int width, int height)63 private static void setDefaultBufferSize(SurfaceTexture surfaceTexture, int width, 64 int height) { 65 surfaceTexture.setDefaultBufferSize(width, height); 66 } 67 68 @CalledByNative getTransformMatrix(SurfaceTexture surfaceTexture, float[] matrix)69 private static void getTransformMatrix(SurfaceTexture surfaceTexture, float[] matrix) { 70 surfaceTexture.getTransformMatrix(matrix); 71 } 72 73 @CalledByNative attachToGLContext(SurfaceTexture surfaceTexture, int texName)74 private static void attachToGLContext(SurfaceTexture surfaceTexture, int texName) { 75 assert Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; 76 surfaceTexture.attachToGLContext(texName); 77 } 78 79 @CalledByNative detachFromGLContext(SurfaceTexture surfaceTexture)80 private static void detachFromGLContext(SurfaceTexture surfaceTexture) { 81 assert Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; 82 surfaceTexture.detachFromGLContext(); 83 } 84 } 85