diff options
| author | 2016-03-28 12:04:44 -0700 | |
|---|---|---|
| committer | 2016-04-07 15:36:20 -0700 | |
| commit | 49d438ebdfcb7f2c202c80c820e32d1cde4bcf36 (patch) | |
| tree | 9d4f891c8b7bd88eb9821a4d23e98ce8a81e7d0d | |
| parent | e1efbceeb76799e99e53821165ce6ea3f7f8d274 (diff) | |
Hook up HDR capabilities from native SurfaceControl
Change-Id: Icb62d67adcec142fafe9e71097d4c7db36978806
| -rw-r--r-- | core/java/android/view/Display.java | 8 | ||||
| -rw-r--r-- | core/jni/android_view_SurfaceControl.cpp | 27 |
2 files changed, 35 insertions, 0 deletions
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 <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 @@ 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<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[] = { @@ -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, "<init>", + "([IFFF)V"); + return err; } |