From 1eb1b2703754beda3c20bedfca2b4fae885b7164 Mon Sep 17 00:00:00 2001 From: Courtney Goeltzenleuchter Date: Thu, 2 Feb 2017 16:51:06 -0700 Subject: Add plumbing for Surface::getWideColorSupport Add plumbing for future Vulkan and EGL extensions VK_EXT_swapchain_colorspace EGL_EXT_colorspace_scrgb_linear EGL_KHR_gl_colorspace Test: make tests in libs/gui/tests/ Test: adb sync Test: adb shell /data/nativetest/libgui_test/libgui_test --gtest_filter="SurfaceTest.GetWideColorSupport" Change-Id: Ibb182d02c468d8f24130545187096d1abe5fc30e (cherry picked from commit d634f970fabe965a421f50011bb1167d6b7cac86) --- libs/gui/Surface.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'libs/gui/Surface.cpp') diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index efb15245a6..b7af1681a0 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -305,6 +305,34 @@ status_t Surface::getFrameTimestamps(uint64_t frameNumber, return NO_ERROR; } +status_t Surface::getWideColorSupport(bool* supported) { + ATRACE_CALL(); + + sp display( + composerService()->getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain)); + Vector colorModes; + status_t err = + composerService()->getDisplayColorModes(display, &colorModes); + + if (err) + return err; + + *supported = false; + for (android_color_mode_t colorMode : colorModes) { + switch (colorMode) { + case HAL_COLOR_MODE_DISPLAY_P3: + case HAL_COLOR_MODE_ADOBE_RGB: + case HAL_COLOR_MODE_DCI_P3: + *supported = true; + break; + default: + break; + } + } + + return NO_ERROR; +} + int Surface::hook_setSwapInterval(ANativeWindow* window, int interval) { Surface* c = getSelf(window); return c->setSwapInterval(interval); @@ -880,6 +908,9 @@ int Surface::perform(int operation, va_list args) case NATIVE_WINDOW_GET_FRAME_TIMESTAMPS: res = dispatchGetFrameTimestamps(args); break; + case NATIVE_WINDOW_GET_WIDE_COLOR_SUPPORT: + res = dispatchGetWideColorSupport(args); + break; default: res = NAME_NOT_FOUND; break; @@ -1044,6 +1075,11 @@ int Surface::dispatchGetFrameTimestamps(va_list args) { outDisplayRetireTime, outDequeueReadyTime, outReleaseTime); } +int Surface::dispatchGetWideColorSupport(va_list args) { + bool* outSupport = va_arg(args, bool*); + return getWideColorSupport(outSupport); +} + int Surface::connect(int api) { static sp listener = new DummyProducerListener(); return connect(api, listener); -- cgit v1.2.3-59-g8ed1b