summaryrefslogtreecommitdiff
path: root/libs/gui/Surface.cpp
diff options
context:
space:
mode:
author Courtney Goeltzenleuchter <courtneygo@google.com> 2017-02-02 16:51:06 -0700
committer Courtney Goeltzenleuchter <courtneygo@google.com> 2017-03-03 08:05:01 -0700
commit1eb1b2703754beda3c20bedfca2b4fae885b7164 (patch)
tree7cbe1745792451d2972deb61b2caad6d6085c798 /libs/gui/Surface.cpp
parent297b306128550b037d6907a84db49cbb9d8e8b12 (diff)
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)
Diffstat (limited to 'libs/gui/Surface.cpp')
-rw-r--r--libs/gui/Surface.cpp36
1 files changed, 36 insertions, 0 deletions
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<IBinder> display(
+ composerService()->getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain));
+ Vector<android_color_mode_t> 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<IProducerListener> listener = new DummyProducerListener();
return connect(api, listener);