From 49d438ebdfcb7f2c202c80c820e32d1cde4bcf36 Mon Sep 17 00:00:00 2001 From: Dan Stoza Date: Mon, 28 Mar 2016 12:04:44 -0700 Subject: Hook up HDR capabilities from native SurfaceControl Change-Id: Icb62d67adcec142fafe9e71097d4c7db36978806 --- core/java/android/view/Display.java | 8 ++++++++ core/jni/android_view_SurfaceControl.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java index 22d5ed862690..621efa6c99b8 100644 --- a/core/java/android/view/Display.java +++ b/core/java/android/view/Display.java @@ -1163,6 +1163,14 @@ public final class Display { public HdrCapabilities() { } + public HdrCapabilities(int[] supportedHdrTypes, float maxLuminance, + float maxAverageLuminance, float minLuminance) { + mSupportedHdrTypes = supportedHdrTypes; + mMaxLuminance = maxLuminance; + mMaxAverageLuminance = maxAverageLuminance; + mMinLuminance = minLuminance; + } + /** * Gets the supported HDR types of this display. * Returns empty array if HDR is not supported by the display. diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index d8233a0ea34b..39444f62fccc 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -83,6 +84,11 @@ static struct { jmethodID init; } gWindowAnimationFrameStatsClassInfo; +static struct { + jclass clazz; + jmethodID ctor; +} gHdrCapabilitiesClassInfo; + // ---------------------------------------------------------------------------- static jlong nativeCreate(JNIEnv* env, jclass clazz, jobject sessionObj, @@ -603,6 +609,22 @@ static jobject nativeGetHandle(JNIEnv* env, jclass clazz, jlong nativeObject) { return javaObjectForIBinder(env, ctrl->getHandle()); } +static jobject nativeGetHdrCapabilities(JNIEnv* env, jclass clazz, jobject tokenObject) { + sp 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[] = { @@ -724,6 +746,11 @@ int register_android_view_SurfaceControl(JNIEnv* env) 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, "", + "([IFFF)V"); + return err; } -- cgit v1.2.3-59-g8ed1b