diff options
author | Jamie Gennis <jgennis@google.com> | 2011-01-13 11:29:14 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-01-13 11:29:14 -0800 |
commit | 9aba2324ac8d7216732b42346bfcaf0be71eb22e (patch) | |
tree | 56f1ca9d1e4d31822638aee68206064788504760 | |
parent | 39d80c3846972e6204dfd956263a3fb6a799444d (diff) | |
parent | b0ba48c95ea8768a051100c5adb4c906caa1e080 (diff) | |
download | frameworks_base-9aba2324ac8d7216732b42346bfcaf0be71eb22e.zip frameworks_base-9aba2324ac8d7216732b42346bfcaf0be71eb22e.tar.gz frameworks_base-9aba2324ac8d7216732b42346bfcaf0be71eb22e.tar.bz2 |
Merge "Add getTransformMatrix to the SurfaceTexture API." into honeycomb
-rw-r--r-- | api/current.xml | 13 | ||||
-rw-r--r-- | core/jni/android/graphics/SurfaceTexture.cpp | 10 | ||||
-rw-r--r-- | graphics/java/android/graphics/SurfaceTexture.java | 25 |
3 files changed, 48 insertions, 0 deletions
diff --git a/api/current.xml b/api/current.xml index 9cc3370..0c33b8c 100644 --- a/api/current.xml +++ b/api/current.xml @@ -86209,6 +86209,19 @@ <parameter name="texName" type="int"> </parameter> </constructor> +<method name="getTransformMatrix" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="mtx" type="float[]"> +</parameter> +</method> <method name="setOnFrameAvailableListener" return="void" abstract="false" diff --git a/core/jni/android/graphics/SurfaceTexture.cpp b/core/jni/android/graphics/SurfaceTexture.cpp index 2645045..c1229f3 100644 --- a/core/jni/android/graphics/SurfaceTexture.cpp +++ b/core/jni/android/graphics/SurfaceTexture.cpp @@ -82,6 +82,15 @@ static void SurfaceTexture_updateTexImage(JNIEnv* env, jobject clazz) surfaceTexture->updateTexImage(); } +static void SurfaceTexture_getTransformMatrix(JNIEnv* env, jobject clazz, + jfloatArray jmtx) +{ + sp<SurfaceTexture> surfaceTexture(getSurfaceTexture(env, clazz)); + float* mtx = env->GetFloatArrayElements(jmtx, NULL); + surfaceTexture->getTransformMatrix(mtx); + env->ReleaseFloatArrayElements(jmtx, mtx, 0); +} + // ---------------------------------------------------------------------------- const char* const kSurfaceTextureClassPathName = "android/graphics/SurfaceTexture"; @@ -91,6 +100,7 @@ static JNINativeMethod gSurfaceTextureMethods[] = { {"nativeClassInit", "()V", (void*)nativeClassInit }, {"init", "(I)V", (void*)SurfaceTexture_init }, {"updateTexImage", "()V", (void*)SurfaceTexture_updateTexImage }, + {"getTransformMatrixImpl", "([F)V", (void*)SurfaceTexture_getTransformMatrix }, }; static void nativeClassInit(JNIEnv* env, jclass clazz) diff --git a/graphics/java/android/graphics/SurfaceTexture.java b/graphics/java/android/graphics/SurfaceTexture.java index 883c4eb..3eb0b03 100644 --- a/graphics/java/android/graphics/SurfaceTexture.java +++ b/graphics/java/android/graphics/SurfaceTexture.java @@ -79,6 +79,31 @@ public class SurfaceTexture { */ public native void updateTexImage(); + + /** + * Retrieve the 4x4 texture coordinate transform matrix associated with the texture image set by + * the most recent call to updateTexImage. + * + * This transform matrix maps 2D homogeneous texture coordinates of the form (s, t, 0, 1) with s + * and t in the inclusive range [0, 1] to the texture coordinate that should be used to sample + * that location from the texture. Sampling the texture outside of the range of this transform + * is undefined. + * + * The matrix is stored in column-major order so that it may be passed directly to OpenGL ES via + * the glLoadMatrixf or glUniformMatrix4fv functions. + * + * @param mtx the array into which the 4x4 matrix will be stored. The array must have exactly + * 16 elements. + */ + public void getTransformMatrix(float[] mtx) { + if (mtx.length != 16) { + throw new IllegalArgumentException(); + } + getTransformMatrixImpl(mtx); + } + + private native void getTransformMatrixImpl(float[] mtx); + private native void init(int texName); /* |