Plumb HDR capabilities up to SurfaceComposerClient
Plumbs HDR capabilities up from HWC2 through SurfaceFlinger and
ISurfaceComposer to SurfaceComposerClient.
Bug: 25684127
Change-Id: I0f07043ff42bfc7a159f785fee3e84936dc3c280
diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp
index b4cbf84..a8b4fa8 100644
--- a/libs/gui/ISurfaceComposer.cpp
+++ b/libs/gui/ISurfaceComposer.cpp
@@ -34,6 +34,7 @@
#include <ui/DisplayInfo.h>
#include <ui/DisplayStatInfo.h>
+#include <ui/HdrCapabilities.h>
#include <utils/Log.h>
@@ -282,6 +283,28 @@
reply.read(*outStats);
return reply.readInt32();
}
+
+ virtual status_t getHdrCapabilities(const sp<IBinder>& display,
+ HdrCapabilities* outCapabilities) const {
+ Parcel data, reply;
+ data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
+ status_t result = data.writeStrongBinder(display);
+ if (result != NO_ERROR) {
+ ALOGE("getHdrCapabilities failed to writeStrongBinder: %d", result);
+ return result;
+ }
+ result = remote()->transact(BnSurfaceComposer::GET_HDR_CAPABILITIES,
+ data, &reply);
+ if (result != NO_ERROR) {
+ ALOGE("getHdrCapabilities failed to transact: %d", result);
+ return result;
+ }
+ result = reply.readInt32();
+ if (result == NO_ERROR) {
+ result = reply.readParcelable(outCapabilities);
+ }
+ return result;
+ }
};
// Out-of-line virtual method definition to trigger vtable emission in this
@@ -467,6 +490,23 @@
setPowerMode(display, mode);
return NO_ERROR;
}
+ case GET_HDR_CAPABILITIES: {
+ CHECK_INTERFACE(ISurfaceComposer, data, reply);
+ sp<IBinder> display = nullptr;
+ status_t result = data.readStrongBinder(&display);
+ if (result != NO_ERROR) {
+ ALOGE("getHdrCapabilities failed to readStrongBinder: %d",
+ result);
+ return result;
+ }
+ HdrCapabilities capabilities;
+ result = getHdrCapabilities(display, &capabilities);
+ reply->writeInt32(result);
+ if (result == NO_ERROR) {
+ reply->writeParcelable(capabilities);
+ }
+ return NO_ERROR;
+ }
default: {
return BBinder::onTransact(code, data, reply, flags);
}
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 04b5446..418892a 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -722,6 +722,12 @@
return ComposerService::getComposerService()->getAnimationFrameStats(outStats);
}
+status_t SurfaceComposerClient::getHdrCapabilities(const sp<IBinder>& display,
+ HdrCapabilities* outCapabilities) {
+ return ComposerService::getComposerService()->getHdrCapabilities(display,
+ outCapabilities);
+}
+
// ----------------------------------------------------------------------------
status_t ScreenshotClient::capture(