summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJamie Gennis <jgennis@google.com>2011-01-13 11:29:14 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-01-13 11:29:14 -0800
commit9aba2324ac8d7216732b42346bfcaf0be71eb22e (patch)
tree56f1ca9d1e4d31822638aee68206064788504760
parent39d80c3846972e6204dfd956263a3fb6a799444d (diff)
parentb0ba48c95ea8768a051100c5adb4c906caa1e080 (diff)
downloadframeworks_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.xml13
-rw-r--r--core/jni/android/graphics/SurfaceTexture.cpp10
-rw-r--r--graphics/java/android/graphics/SurfaceTexture.java25
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);
/*