From 52bb6b436f26df4c41ae3e73ddc855909b786a7b Mon Sep 17 00:00:00 2001 From: Peiyong Lin Date: Mon, 1 Oct 2018 11:40:50 -0700 Subject: [PATCH] [SurfaceControl] Add setColorTransform API. Previously we have added methods to manipulate color transform for each surface, this patch exposes this API to Java code land for WindowManager or display service to set the color transform. BUG: 111562338 Test: Build, flash and boot. Change-Id: I0388eed5d72b043820786264f060cde2bd7a6aea --- core/java/android/view/SurfaceControl.java | 26 ++++++++++++++++++++++ core/jni/android_view_SurfaceControl.cpp | 13 +++++++++++ 2 files changed, 39 insertions(+) diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 7271a9e4616fe..0d33bbd1fc762 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -97,6 +97,8 @@ public class SurfaceControl implements Parcelable { private static native void nativeSetMatrix(long transactionObj, long nativeObject, float dsdx, float dtdx, float dtdy, float dsdy); + private static native void nativeSetColorTransform(long transactionObj, long nativeObject, + float[] matrix, float[] translation); private static native void nativeSetColor(long transactionObj, long nativeObject, float[] color); private static native void nativeSetFlags(long transactionObj, long nativeObject, int flags, int mask); @@ -945,6 +947,18 @@ public class SurfaceControl implements Parcelable { } } + /** + * Sets the color transform for the Surface. + * @param matrix A float array with 9 values represents a 3x3 transform matrix + * @param translation A float array with 3 values represents a translation vector + */ + public void setColorTransform(@Size(9) float[] matrix, @Size(3) float[] translation) { + checkNotReleased(); + synchronized (SurfaceControl.class) { + sGlobalTransaction.setColorTransform(this, matrix, translation); + } + } + public void setWindowCrop(Rect crop) { checkNotReleased(); synchronized (SurfaceControl.class) { @@ -1438,6 +1452,18 @@ public class SurfaceControl implements Parcelable { return this; } + /** + * Sets the color transform for the Surface. + * @param matrix A float array with 9 values represents a 3x3 transform matrix + * @param translation A float array with 3 values represents a translation vector + */ + public Transaction setColorTransform(SurfaceControl sc, @Size(9) float[] matrix, + @Size(3) float[] translation) { + sc.checkNotReleased(); + nativeSetColorTransform(mNativeObject, sc.mNativeObject, matrix, translation); + return this; + } + @UnsupportedAppUsage public Transaction setWindowCrop(SurfaceControl sc, Rect crop) { sc.checkNotReleased(); diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index b70177ffab9ab..2e1e130d83757 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -339,6 +339,17 @@ static void nativeSetMatrix(JNIEnv* env, jclass clazz, jlong transactionObj, transaction->setMatrix(ctrl, dsdx, dtdx, dtdy, dsdy); } +static void nativeSetColorTransform(JNIEnv* env, jclass clazz, jlong transactionObj, + jlong nativeObject, jfloatArray fMatrix, jfloatArray fTranslation) { + auto transaction = reinterpret_cast(transactionObj); + SurfaceControl* const surfaceControl = reinterpret_cast(nativeObject); + float* floatMatrix = env->GetFloatArrayElements(fMatrix, 0); + mat3 matrix(static_cast(floatMatrix)); + float* floatTranslation = env->GetFloatArrayElements(fTranslation, 0); + vec3 translation(floatTranslation[0], floatTranslation[1], floatTranslation[2]); + transaction->setColorTransform(surfaceControl, matrix, translation); +} + static void nativeSetWindowCrop(JNIEnv* env, jclass clazz, jlong transactionObj, jlong nativeObject, jint l, jint t, jint r, jint b) { @@ -849,6 +860,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = { (void*)nativeSetColor }, {"nativeSetMatrix", "(JJFFFF)V", (void*)nativeSetMatrix }, + {"nativeSetColorTransform", "(JJ[F[F)V", + (void*)nativeSetColorTransform }, {"nativeSetFlags", "(JJII)V", (void*)nativeSetFlags }, {"nativeSetWindowCrop", "(JJIIII)V",