Add plumbing for Surface::getHdrSupport
Add plumbing for future Vulkan and EGL extensions
VK_EXT_swapchain_colorspace
EGL_EXT_colorspace_scrgb_linear
EGL_KHR_gl_colorspace
Test: TBD
Change-Id: Id1f28cfb36828adbdc6dd3694b5943eca038c356
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index b7af168..ad1984a 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -26,9 +26,10 @@
#include <utils/Trace.h>
#include <utils/NativeHandle.h>
-#include <ui/Fence.h>
-#include <ui/Region.h>
#include <ui/DisplayStatInfo.h>
+#include <ui/Fence.h>
+#include <ui/HdrCapabilities.h>
+#include <ui/Region.h>
#include <gui/BufferItem.h>
#include <gui/IProducerListener.h>
@@ -333,6 +334,23 @@
return NO_ERROR;
}
+status_t Surface::getHdrSupport(bool* supported) {
+ ATRACE_CALL();
+
+ sp<IBinder> display(
+ composerService()->getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain));
+ HdrCapabilities hdrCapabilities;
+ status_t err =
+ composerService()->getHdrCapabilities(display, &hdrCapabilities);
+
+ if (err)
+ return err;
+
+ *supported = !hdrCapabilities.getSupportedHdrTypes().empty();
+
+ return NO_ERROR;
+}
+
int Surface::hook_setSwapInterval(ANativeWindow* window, int interval) {
Surface* c = getSelf(window);
return c->setSwapInterval(interval);
@@ -911,6 +929,9 @@
case NATIVE_WINDOW_GET_WIDE_COLOR_SUPPORT:
res = dispatchGetWideColorSupport(args);
break;
+ case NATIVE_WINDOW_GET_HDR_SUPPORT:
+ res = dispatchGetHdrSupport(args);
+ break;
default:
res = NAME_NOT_FOUND;
break;
@@ -1080,6 +1101,11 @@
return getWideColorSupport(outSupport);
}
+int Surface::dispatchGetHdrSupport(va_list args) {
+ bool* outSupport = va_arg(args, bool*);
+ return getHdrSupport(outSupport);
+}
+
int Surface::connect(int api) {
static sp<IProducerListener> listener = new DummyProducerListener();
return connect(api, listener);