HWC2: Add support for color modes
Adds support for setting color modes through HWC2On1Adapter and the
HWC2 C++ shim
Bug: 22767098
Change-Id: I0b7300093ab427be7105a2535fc9db4953b8af1c
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.cpp b/services/surfaceflinger/DisplayHardware/HWC2.cpp
index f53e0a2..f898ada 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWC2.cpp
@@ -96,6 +96,7 @@
mDestroyLayer(nullptr),
mGetActiveConfig(nullptr),
mGetChangedCompositionTypes(nullptr),
+ mGetColorModes(nullptr),
mGetDisplayAttribute(nullptr),
mGetDisplayConfigs(nullptr),
mGetDisplayName(nullptr),
@@ -107,6 +108,7 @@
mPresentDisplay(nullptr),
mSetActiveConfig(nullptr),
mSetClientTarget(nullptr),
+ mSetColorMode(nullptr),
mSetColorTransform(nullptr),
mSetOutputBuffer(nullptr),
mSetPowerMode(nullptr),
@@ -339,6 +341,8 @@
mGetActiveConfig)) return;
if (!loadFunctionPointer(FunctionDescriptor::GetChangedCompositionTypes,
mGetChangedCompositionTypes)) return;
+ if (!loadFunctionPointer(FunctionDescriptor::GetColorModes,
+ mGetColorModes)) return;
if (!loadFunctionPointer(FunctionDescriptor::GetDisplayAttribute,
mGetDisplayAttribute)) return;
if (!loadFunctionPointer(FunctionDescriptor::GetDisplayConfigs,
@@ -361,6 +365,8 @@
mSetActiveConfig)) return;
if (!loadFunctionPointer(FunctionDescriptor::SetClientTarget,
mSetClientTarget)) return;
+ if (!loadFunctionPointer(FunctionDescriptor::SetColorMode,
+ mSetColorMode)) return;
if (!loadFunctionPointer(FunctionDescriptor::SetColorTransform,
mSetColorTransform)) return;
if (!loadFunctionPointer(FunctionDescriptor::SetOutputBuffer,
@@ -557,6 +563,28 @@
return Error::None;
}
+Error Display::getColorModes(std::vector<int32_t>* outModes) const
+{
+ uint32_t numModes = 0;
+ int32_t intError = mDevice.mGetColorModes(mDevice.mHwcDevice, mId,
+ &numModes, nullptr);
+ auto error = static_cast<Error>(intError);
+ if (error != Error::None) {
+ return error;
+ }
+
+ std::vector<int32_t> modes(numModes);
+ intError = mDevice.mGetColorModes(mDevice.mHwcDevice, mId, &numModes,
+ modes.data());
+ error = static_cast<Error>(intError);
+ if (error != Error::None) {
+ return error;
+ }
+
+ std::swap(*outModes, modes);
+ return Error::None;
+}
+
std::vector<std::shared_ptr<const Display::Config>> Display::getConfigs() const
{
std::vector<std::shared_ptr<const Config>> configs;
@@ -758,6 +786,12 @@
return static_cast<Error>(intError);
}
+Error Display::setColorMode(int32_t mode)
+{
+ int32_t intError = mDevice.mSetColorMode(mDevice.mHwcDevice, mId, mode);
+ return static_cast<Error>(intError);
+}
+
Error Display::setColorTransform(const android::mat4& matrix,
android_color_transform_t hint)
{