Revert "Revert "Hook up HDR capabilities from native SurfaceControl""
This reverts commit 2c38f45f27079492697a391e0a6221f77f485fbc.
Bug:25684127
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 0590134..5d5f856 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -33,6 +33,7 @@
#include <memory>
#include <stdio.h>
#include <ui/DisplayInfo.h>
+#include <ui/HdrCapabilities.h>
#include <ui/FrameStats.h>
#include <ui/Rect.h>
#include <ui/Region.h>
@@ -83,6 +84,11 @@
jmethodID init;
} gWindowAnimationFrameStatsClassInfo;
+static struct {
+ jclass clazz;
+ jmethodID ctor;
+} gHdrCapabilitiesClassInfo;
+
// ----------------------------------------------------------------------------
static jlong nativeCreate(JNIEnv* env, jclass clazz, jobject sessionObj,
@@ -610,6 +616,22 @@
return javaObjectForIBinder(env, ctrl->getHandle());
}
+static jobject nativeGetHdrCapabilities(JNIEnv* env, jclass clazz, jobject tokenObject) {
+ sp<IBinder> token(ibinderForJavaObject(env, tokenObject));
+ if (token == NULL) return NULL;
+
+ HdrCapabilities capabilities;
+ SurfaceComposerClient::getHdrCapabilities(token, &capabilities);
+
+ const auto& types = capabilities.getSupportedHdrTypes();
+ auto typesArray = env->NewIntArray(types.size());
+ env->SetIntArrayRegion(typesArray, 0, types.size(), types.data());
+
+ return env->NewObject(gHdrCapabilitiesClassInfo.clazz, gPhysicalDisplayInfoClassInfo.ctor,
+ typesArray, capabilities.getDesiredMaxLuminance(),
+ capabilities.getDesiredMaxAverageLuminance(), capabilities.getDesiredMinLuminance());
+}
+
// ----------------------------------------------------------------------------
static const JNINativeMethod sSurfaceControlMethods[] = {
@@ -733,6 +755,11 @@
animFrameStatsClazz, "init", "(J[J)V");
gWindowAnimationFrameStatsClassInfo.UNDEFINED_TIME_NANO = undefined_time_nano;
+ jclass hdrCapabilitiesClazz = FindClassOrDie(env, "android/view/Display$HdrCapabilities");
+ gHdrCapabilitiesClassInfo.clazz = MakeGlobalRefOrDie(env, hdrCapabilitiesClazz);
+ gHdrCapabilitiesClassInfo.ctor = GetMethodIDOrDie(env, hdrCapabilitiesClazz, "<init>",
+ "([IFFF)V");
+
return err;
}