diff options
author | 2018-03-14 17:26:31 -0700 | |
---|---|---|
committer | 2018-03-15 21:14:01 +0000 | |
commit | a52f0295622a42849f5ef81c44589b816b2ccacb (patch) | |
tree | fa5b66c2866be26e85f8bbcda940662d55212089 | |
parent | 17511b0527cad3a68015c4fef2e0ab451ba2de6f (diff) |
[Native] Replace android_color_mode usage with ColorMode.
To ease the pain when we add color mode v1.1, we replace all current
android_color_mode usage in framework native with ColorMode directly from HAL.
BUG: 73824924
Test: Build & flash
Change-Id: I4436fc225c7807506825c7148bc794cb99f278dc
21 files changed, 170 insertions, 132 deletions
diff --git a/libs/gui/Android.bp b/libs/gui/Android.bp index a1a0928154..2768ad8560 100644 --- a/libs/gui/Android.bp +++ b/libs/gui/Android.bp @@ -122,6 +122,7 @@ cc_library_shared { ], shared_libs: [ + "android.hardware.graphics.common@1.1", "libsync", "libbinder", "libbufferhubqueue", // TODO(b/70046255): Remove this once BufferHub is integrated into libgui. @@ -154,6 +155,7 @@ cc_library_shared { "libui", "android.hidl.token@1.0-utils", "android.hardware.graphics.bufferqueue@1.0", + "android.hardware.graphics.common@1.1", ], export_header_lib_headers: [ diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp index beda778396..0244bb512e 100644 --- a/libs/gui/ISurfaceComposer.cpp +++ b/libs/gui/ISurfaceComposer.cpp @@ -350,7 +350,7 @@ public: } virtual status_t getDisplayColorModes(const sp<IBinder>& display, - Vector<android_color_mode_t>* outColorModes) { + Vector<ColorMode>* outColorModes) { Parcel data, reply; status_t result = data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); if (result != NO_ERROR) { @@ -373,34 +373,34 @@ public: outColorModes->clear(); outColorModes->resize(numModes); for (size_t i = 0; i < numModes; ++i) { - outColorModes->replaceAt(static_cast<android_color_mode_t>(reply.readInt32()), i); + outColorModes->replaceAt(static_cast<ColorMode>(reply.readInt32()), i); } } return result; } - virtual android_color_mode_t getActiveColorMode(const sp<IBinder>& display) { + virtual ColorMode getActiveColorMode(const sp<IBinder>& display) { Parcel data, reply; status_t result = data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); if (result != NO_ERROR) { ALOGE("getActiveColorMode failed to writeInterfaceToken: %d", result); - return static_cast<android_color_mode_t>(result); + return static_cast<ColorMode>(result); } result = data.writeStrongBinder(display); if (result != NO_ERROR) { ALOGE("getActiveColorMode failed to writeStrongBinder: %d", result); - return static_cast<android_color_mode_t>(result); + return static_cast<ColorMode>(result); } result = remote()->transact(BnSurfaceComposer::GET_ACTIVE_COLOR_MODE, data, &reply); if (result != NO_ERROR) { ALOGE("getActiveColorMode failed to transact: %d", result); - return static_cast<android_color_mode_t>(result); + return static_cast<ColorMode>(result); } - return static_cast<android_color_mode_t>(reply.readInt32()); + return static_cast<ColorMode>(reply.readInt32()); } virtual status_t setActiveColorMode(const sp<IBinder>& display, - android_color_mode_t colorMode) { + ColorMode colorMode) { Parcel data, reply; status_t result = data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); if (result != NO_ERROR) { @@ -412,7 +412,7 @@ public: ALOGE("setActiveColorMode failed to writeStrongBinder: %d", result); return result; } - result = data.writeInt32(colorMode); + result = data.writeInt32(static_cast<int32_t>(colorMode)); if (result != NO_ERROR) { ALOGE("setActiveColorMode failed to writeInt32: %d", result); return result; @@ -739,7 +739,7 @@ status_t BnSurfaceComposer::onTransact( } case GET_DISPLAY_COLOR_MODES: { CHECK_INTERFACE(ISurfaceComposer, data, reply); - Vector<android_color_mode_t> colorModes; + Vector<ColorMode> colorModes; sp<IBinder> display = nullptr; status_t result = data.readStrongBinder(&display); if (result != NO_ERROR) { @@ -751,7 +751,7 @@ status_t BnSurfaceComposer::onTransact( if (result == NO_ERROR) { reply->writeUint32(static_cast<uint32_t>(colorModes.size())); for (size_t i = 0; i < colorModes.size(); ++i) { - reply->writeInt32(colorModes[i]); + reply->writeInt32(static_cast<int32_t>(colorModes[i])); } } return NO_ERROR; @@ -764,7 +764,7 @@ status_t BnSurfaceComposer::onTransact( ALOGE("getActiveColorMode failed to readStrongBinder: %d", result); return result; } - android_color_mode_t colorMode = getActiveColorMode(display); + ColorMode colorMode = getActiveColorMode(display); result = reply->writeInt32(static_cast<int32_t>(colorMode)); return result; } @@ -783,7 +783,7 @@ status_t BnSurfaceComposer::onTransact( return result; } result = setActiveColorMode(display, - static_cast<android_color_mode_t>(colorModeInt)); + static_cast<ColorMode>(colorModeInt)); result = reply->writeInt32(result); return result; } diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp index e08d6b0bae..2e1c24b755 100644 --- a/libs/gui/Surface.cpp +++ b/libs/gui/Surface.cpp @@ -326,7 +326,7 @@ status_t Surface::getWideColorSupport(bool* supported) { sp<IBinder> display( composerService()->getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain)); - Vector<android_color_mode_t> colorModes; + Vector<ColorMode> colorModes; status_t err = composerService()->getDisplayColorModes(display, &colorModes); @@ -338,11 +338,11 @@ status_t Surface::getWideColorSupport(bool* supported) { &ISurfaceFlingerConfigs::hasWideColorDisplay>(false); *supported = false; - for (android_color_mode_t colorMode : colorModes) { + for (ColorMode colorMode : colorModes) { switch (colorMode) { - case HAL_COLOR_MODE_DISPLAY_P3: - case HAL_COLOR_MODE_ADOBE_RGB: - case HAL_COLOR_MODE_DCI_P3: + case ColorMode::DISPLAY_P3: + case ColorMode::ADOBE_RGB: + case ColorMode::DCI_P3: if (wideColorBoardConfig) { *supported = true; } diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 0d7ffc3d71..61ed976fcc 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -698,16 +698,16 @@ status_t SurfaceComposerClient::setActiveConfig(const sp<IBinder>& display, int } status_t SurfaceComposerClient::getDisplayColorModes(const sp<IBinder>& display, - Vector<android_color_mode_t>* outColorModes) { + Vector<ColorMode>* outColorModes) { return ComposerService::getComposerService()->getDisplayColorModes(display, outColorModes); } -android_color_mode_t SurfaceComposerClient::getActiveColorMode(const sp<IBinder>& display) { +ColorMode SurfaceComposerClient::getActiveColorMode(const sp<IBinder>& display) { return ComposerService::getComposerService()->getActiveColorMode(display); } status_t SurfaceComposerClient::setActiveColorMode(const sp<IBinder>& display, - android_color_mode_t colorMode) { + ColorMode colorMode) { return ComposerService::getComposerService()->setActiveColorMode(display, colorMode); } diff --git a/libs/gui/include/gui/ISurfaceComposer.h b/libs/gui/include/gui/ISurfaceComposer.h index 5ab64454e5..afe9358c0a 100644 --- a/libs/gui/include/gui/ISurfaceComposer.h +++ b/libs/gui/include/gui/ISurfaceComposer.h @@ -30,6 +30,7 @@ #include <ui/FrameStats.h> #include <ui/PixelFormat.h> #include <ui/GraphicBuffer.h> +#include <ui/GraphicsTypes.h> #include <vector> @@ -160,10 +161,10 @@ public: virtual status_t setActiveConfig(const sp<IBinder>& display, int id) = 0; virtual status_t getDisplayColorModes(const sp<IBinder>& display, - Vector<android_color_mode_t>* outColorModes) = 0; - virtual android_color_mode_t getActiveColorMode(const sp<IBinder>& display) = 0; + Vector<ColorMode>* outColorModes) = 0; + virtual ColorMode getActiveColorMode(const sp<IBinder>& display) = 0; virtual status_t setActiveColorMode(const sp<IBinder>& display, - android_color_mode_t colorMode) = 0; + ColorMode colorMode) = 0; /* Capture the specified screen. requires READ_FRAME_BUFFER permission * This function will fail if there is a secure window on screen. diff --git a/libs/gui/include/gui/SurfaceComposerClient.h b/libs/gui/include/gui/SurfaceComposerClient.h index fe46146ff5..162fe6e4e6 100644 --- a/libs/gui/include/gui/SurfaceComposerClient.h +++ b/libs/gui/include/gui/SurfaceComposerClient.h @@ -29,6 +29,7 @@ #include <utils/threads.h> #include <ui/FrameStats.h> +#include <ui/GraphicsTypes.h> #include <ui/PixelFormat.h> #include <gui/CpuConsumer.h> @@ -88,13 +89,13 @@ public: // Gets the list of supported color modes for the given display static status_t getDisplayColorModes(const sp<IBinder>& display, - Vector<android_color_mode_t>* outColorModes); + Vector<ColorMode>* outColorModes); // Gets the active color mode for the given display - static android_color_mode_t getActiveColorMode(const sp<IBinder>& display); + static ColorMode getActiveColorMode(const sp<IBinder>& display); // Sets the active color mode for the given display - static status_t setActiveColorMode(const sp<IBinder>& display, android_color_mode_t colorMode); + static status_t setActiveColorMode(const sp<IBinder>& display, ColorMode colorMode); /* Triggers screen on/off or low power mode and waits for it to complete */ static void setDisplayPowerMode(const sp<IBinder>& display, int mode); diff --git a/libs/gui/tests/Surface_test.cpp b/libs/gui/tests/Surface_test.cpp index 4fb51e1b96..66d5595fb9 100644 --- a/libs/gui/tests/Surface_test.cpp +++ b/libs/gui/tests/Surface_test.cpp @@ -577,15 +577,15 @@ public: return NO_ERROR; } status_t getDisplayColorModes(const sp<IBinder>& /*display*/, - Vector<android_color_mode_t>* /*outColorModes*/) override { + Vector<ColorMode>* /*outColorModes*/) override { return NO_ERROR; } - android_color_mode_t getActiveColorMode(const sp<IBinder>& /*display*/) + ColorMode getActiveColorMode(const sp<IBinder>& /*display*/) override { - return HAL_COLOR_MODE_NATIVE; + return ColorMode::NATIVE; } status_t setActiveColorMode(const sp<IBinder>& /*display*/, - android_color_mode_t /*colorMode*/) override { return NO_ERROR; } + ColorMode /*colorMode*/) override { return NO_ERROR; } status_t captureScreen(const sp<IBinder>& /*display*/, sp<GraphicBuffer>* /*outBuffer*/, Rect /*sourceCrop*/, uint32_t /*reqWidth*/, uint32_t /*reqHeight*/, diff --git a/libs/ui/DebugUtils.cpp b/libs/ui/DebugUtils.cpp index 17ebf80329..d7e191db89 100644 --- a/libs/ui/DebugUtils.cpp +++ b/libs/ui/DebugUtils.cpp @@ -22,6 +22,7 @@ #include <string> using android::base::StringPrintf; +using android::ColorMode; std::string decodeStandard(android_dataspace dataspace) { const uint32_t dataspaceSelect = (dataspace & HAL_DATASPACE_STANDARD_MASK); @@ -197,37 +198,37 @@ std::string dataspaceDetails(android_dataspace dataspace) { decodeRange(dataspace).c_str()); } -std::string decodeColorMode(android_color_mode colorMode) { +std::string decodeColorMode(ColorMode colorMode) { switch (colorMode) { - case HAL_COLOR_MODE_NATIVE: - return std::string("HAL_COLOR_MODE_NATIVE"); + case ColorMode::NATIVE: + return std::string("ColorMode::NATIVE"); - case HAL_COLOR_MODE_STANDARD_BT601_625: - return std::string("HAL_COLOR_MODE_BT601_625"); + case ColorMode::STANDARD_BT601_625: + return std::string("ColorMode::BT601_625"); - case HAL_COLOR_MODE_STANDARD_BT601_625_UNADJUSTED: - return std::string("HAL_COLOR_MODE_BT601_625_UNADJUSTED"); + case ColorMode::STANDARD_BT601_625_UNADJUSTED: + return std::string("ColorMode::BT601_625_UNADJUSTED"); - case HAL_COLOR_MODE_STANDARD_BT601_525: - return std::string("HAL_COLOR_MODE_BT601_525"); + case ColorMode::STANDARD_BT601_525: + return std::string("ColorMode::BT601_525"); - case HAL_COLOR_MODE_STANDARD_BT601_525_UNADJUSTED: - return std::string("HAL_COLOR_MODE_BT601_525_UNADJUSTED"); + case ColorMode::STANDARD_BT601_525_UNADJUSTED: + return std::string("ColorMode::BT601_525_UNADJUSTED"); - case HAL_COLOR_MODE_STANDARD_BT709: - return std::string("HAL_COLOR_MODE_BT709"); + case ColorMode::STANDARD_BT709: + return std::string("ColorMode::BT709"); - case HAL_COLOR_MODE_DCI_P3: - return std::string("HAL_COLOR_MODE_DCI_P3"); + case ColorMode::DCI_P3: + return std::string("ColorMode::DCI_P3"); - case HAL_COLOR_MODE_SRGB: - return std::string("HAL_COLOR_MODE_SRGB"); + case ColorMode::SRGB: + return std::string("ColorMode::SRGB"); - case HAL_COLOR_MODE_ADOBE_RGB: - return std::string("HAL_COLOR_MODE_ADOBE_RGB"); + case ColorMode::ADOBE_RGB: + return std::string("ColorMode::ADOBE_RGB"); - case HAL_COLOR_MODE_DISPLAY_P3: - return std::string("HAL_COLOR_MODE_DISPLAY_P3"); + case ColorMode::DISPLAY_P3: + return std::string("ColorMode::DISPLAY_P3"); } return android::base::StringPrintf("Unknown color mode %d", colorMode); diff --git a/libs/ui/include/ui/DebugUtils.h b/libs/ui/include/ui/DebugUtils.h index dad9446b3a..33701070a9 100644 --- a/libs/ui/include/ui/DebugUtils.h +++ b/libs/ui/include/ui/DebugUtils.h @@ -16,7 +16,7 @@ #pragma once -#include <system/graphics.h> +#include <ui/GraphicsTypes.h> #include <ui/PixelFormat.h> #include <string> @@ -29,6 +29,6 @@ std::string decodeStandard(android_dataspace dataspace); std::string decodeTransfer(android_dataspace dataspace); std::string decodeRange(android_dataspace dataspace); std::string dataspaceDetails(android_dataspace dataspace); -std::string decodeColorMode(android_color_mode colormode); +std::string decodeColorMode(android::ColorMode colormode); std::string decodePixelFormat(android::PixelFormat format); std::string to_string(const android::Rect& rect); diff --git a/libs/ui/include/ui/GraphicsTypes.h b/libs/ui/include/ui/GraphicsTypes.h new file mode 100644 index 0000000000..fa9a812d97 --- /dev/null +++ b/libs/ui/include/ui/GraphicsTypes.h @@ -0,0 +1,26 @@ +/* + * Copyright 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include <android/hardware/graphics/common/1.1/types.h> +#include <system/graphics.h> + +namespace android { + +using android::hardware::graphics::common::V1_0::ColorMode; + +} // namespace android diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index d40666e6f1..92d5e21f34 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -99,7 +99,7 @@ DisplayDevice::DisplayDevice( mNativeWindow = surface = new Surface(producer, false); ANativeWindow* const window = mNativeWindow.get(); - mActiveColorMode = HAL_COLOR_MODE_NATIVE; + mActiveColorMode = ColorMode::NATIVE; mDisplayHasWideColor = supportWideColor; mDisplayHasHdr = supportHdr; @@ -292,11 +292,11 @@ int DisplayDevice::getActiveConfig() const { } // ---------------------------------------------------------------------------- -void DisplayDevice::setActiveColorMode(android_color_mode_t mode) { +void DisplayDevice::setActiveColorMode(ColorMode mode) { mActiveColorMode = mode; } -android_color_mode_t DisplayDevice::getActiveColorMode() const { +ColorMode DisplayDevice::getActiveColorMode() const { return mActiveColorMode; } diff --git a/services/surfaceflinger/DisplayDevice.h b/services/surfaceflinger/DisplayDevice.h index d5ed15fa28..737971f83d 100644 --- a/services/surfaceflinger/DisplayDevice.h +++ b/services/surfaceflinger/DisplayDevice.h @@ -31,6 +31,7 @@ #include <gui/ISurfaceComposer.h> #include <hardware/hwcomposer_defs.h> +#include <ui/GraphicsTypes.h> #include "RenderArea.h" #include "RenderEngine/Surface.h" @@ -155,8 +156,8 @@ public: void setPowerMode(int mode); bool isDisplayOn() const; - android_color_mode_t getActiveColorMode() const; - void setActiveColorMode(android_color_mode_t mode); + ColorMode getActiveColorMode() const; + void setActiveColorMode(ColorMode mode); void setCompositionDataSpace(android_dataspace dataspace); /* ------------------------------------------------------------------------ @@ -230,7 +231,7 @@ private: // Current active config int mActiveConfig; // current active color mode - android_color_mode_t mActiveColorMode; + ColorMode mActiveColorMode; // Need to know if display is wide-color capable or not. // Initialized by SurfaceFlinger when the DisplayDevice is created. @@ -279,7 +280,7 @@ public: bool needsFiltering() const override { return mDevice->needsFiltering(); } Rect getSourceCrop() const override { return mSourceCrop; } bool getWideColorSupport() const override { return mDevice->getWideColorSupport(); } - android_color_mode_t getActiveColorMode() const override { + ColorMode getActiveColorMode() const override { return mDevice->getActiveColorMode(); } diff --git a/services/surfaceflinger/DisplayHardware/HWC2.cpp b/services/surfaceflinger/DisplayHardware/HWC2.cpp index f14c2fe10b..b7bf964f29 100644 --- a/services/surfaceflinger/DisplayHardware/HWC2.cpp +++ b/services/surfaceflinger/DisplayHardware/HWC2.cpp @@ -362,9 +362,9 @@ Error Display::getChangedCompositionTypes( return Error::None; } -Error Display::getColorModes(std::vector<android_color_mode_t>* outModes) const +Error Display::getColorModes(std::vector<android::ColorMode>* outModes) const { - std::vector<Hwc2::ColorMode> modes; + std::vector<android::ColorMode> modes; auto intError = mComposer.getColorModes(mId, &modes); uint32_t numModes = modes.size(); auto error = static_cast<Error>(intError); @@ -374,7 +374,7 @@ Error Display::getColorModes(std::vector<android_color_mode_t>* outModes) const outModes->resize(numModes); for (size_t i = 0; i < numModes; i++) { - (*outModes)[i] = static_cast<android_color_mode_t>(modes[i]); + (*outModes)[i] = modes[i]; } return Error::None; } @@ -537,10 +537,9 @@ Error Display::setClientTarget(uint32_t slot, const sp<GraphicBuffer>& target, return static_cast<Error>(intError); } -Error Display::setColorMode(android_color_mode_t mode) +Error Display::setColorMode(android::ColorMode mode) { - auto intError = mComposer.setColorMode( - mId, static_cast<Hwc2::ColorMode>(mode)); + auto intError = mComposer.setColorMode(mId, mode); return static_cast<Error>(intError); } diff --git a/services/surfaceflinger/DisplayHardware/HWC2.h b/services/surfaceflinger/DisplayHardware/HWC2.h index e74f00dccc..0fc37ece56 100644 --- a/services/surfaceflinger/DisplayHardware/HWC2.h +++ b/services/surfaceflinger/DisplayHardware/HWC2.h @@ -25,6 +25,7 @@ #include <gui/HdrMetadata.h> #include <math/mat4.h> +#include <ui/GraphicsTypes.h> #include <ui/HdrCapabilities.h> #include <utils/Log.h> @@ -209,7 +210,7 @@ public: [[clang::warn_unused_result]] Error getChangedCompositionTypes( std::unordered_map<Layer*, Composition>* outTypes); [[clang::warn_unused_result]] Error getColorModes( - std::vector<android_color_mode_t>* outModes) const; + std::vector<android::ColorMode>* outModes) const; // Doesn't call into the HWC2 device, so no errors are possible std::vector<std::shared_ptr<const Config>> getConfigs() const; @@ -233,7 +234,7 @@ public: uint32_t slot, const android::sp<android::GraphicBuffer>& target, const android::sp<android::Fence>& acquireFence, android_dataspace_t dataspace); - [[clang::warn_unused_result]] Error setColorMode(android_color_mode_t mode); + [[clang::warn_unused_result]] Error setColorMode(android::ColorMode mode); [[clang::warn_unused_result]] Error setColorTransform( const android::mat4& matrix, android_color_transform_t hint); [[clang::warn_unused_result]] Error setOutputBuffer( diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 2cafd8e9f9..6d5917db2f 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -311,8 +311,8 @@ std::shared_ptr<const HWC2::Display::Config> return config; } -std::vector<android_color_mode_t> HWComposer::getColorModes(int32_t displayId) const { - std::vector<android_color_mode_t> modes; +std::vector<ColorMode> HWComposer::getColorModes(int32_t displayId) const { + std::vector<ColorMode> modes; if (!isValidDisplay(displayId)) { ALOGE("getColorModes: Attempted to access invalid display %d", @@ -324,13 +324,13 @@ std::vector<android_color_mode_t> HWComposer::getColorModes(int32_t displayId) c if (error != HWC2::Error::None) { ALOGE("getColorModes failed for display %d: %s (%d)", displayId, to_string(error).c_str(), static_cast<int32_t>(error)); - return std::vector<android_color_mode_t>(); + return std::vector<ColorMode>(); } return modes; } -status_t HWComposer::setActiveColorMode(int32_t displayId, android_color_mode_t mode) { +status_t HWComposer::setActiveColorMode(int32_t displayId, ColorMode mode) { if (!isValidDisplay(displayId)) { ALOGE("setActiveColorMode: Display %d is not valid", displayId); return BAD_INDEX; diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h index b75dc6adf7..c442b2f191 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.h +++ b/services/surfaceflinger/DisplayHardware/HWComposer.h @@ -23,6 +23,7 @@ #include <sys/types.h> #include <ui/Fence.h> +#include <ui/GraphicsTypes.h> #include <utils/BitSet.h> #include <utils/Condition.h> @@ -158,9 +159,9 @@ public: std::shared_ptr<const HWC2::Display::Config> getActiveConfig(int32_t displayId) const; - std::vector<android_color_mode_t> getColorModes(int32_t displayId) const; + std::vector<ColorMode> getColorModes(int32_t displayId) const; - status_t setActiveColorMode(int32_t displayId, android_color_mode_t mode); + status_t setActiveColorMode(int32_t displayId, ColorMode mode); bool isUsingVrComposer() const; diff --git a/services/surfaceflinger/RenderArea.h b/services/surfaceflinger/RenderArea.h index 940a34ce1c..b9c4909d5a 100644 --- a/services/surfaceflinger/RenderArea.h +++ b/services/surfaceflinger/RenderArea.h @@ -1,5 +1,7 @@ #pragma once +#include <ui/GraphicsTypes.h> + #include "Transform.h" #include <functional> @@ -30,7 +32,7 @@ public: int getReqWidth() const { return mReqWidth; }; Transform::orientation_flags getRotationFlags() const { return mRotationFlags; }; virtual bool getWideColorSupport() const = 0; - virtual android_color_mode_t getActiveColorMode() const = 0; + virtual ColorMode getActiveColorMode() const = 0; status_t updateDimensions(); diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 38b93b110b..5dd5d7c9f2 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -913,7 +913,7 @@ status_t SurfaceFlinger::setActiveConfig(const sp<IBinder>& display, int mode) { return NO_ERROR; } status_t SurfaceFlinger::getDisplayColorModes(const sp<IBinder>& display, - Vector<android_color_mode_t>* outColorModes) { + Vector<ColorMode>* outColorModes) { if ((outColorModes == nullptr) || (display.get() == nullptr)) { return BAD_VALUE; } @@ -934,7 +934,7 @@ status_t SurfaceFlinger::getDisplayColorModes(const sp<IBinder>& display, return type; } - std::vector<android_color_mode_t> modes; + std::vector<ColorMode> modes; { ConditionalLock _l(mStateLock, std::this_thread::get_id() != mMainThreadId); @@ -946,18 +946,18 @@ status_t SurfaceFlinger::getDisplayColorModes(const sp<IBinder>& display, return NO_ERROR; } -android_color_mode_t SurfaceFlinger::getActiveColorMode(const sp<IBinder>& display) { +ColorMode SurfaceFlinger::getActiveColorMode(const sp<IBinder>& display) { sp<const DisplayDevice> device(getDisplayDevice(display)); if (device != nullptr) { return device->getActiveColorMode(); } - return static_cast<android_color_mode_t>(BAD_VALUE); + return static_cast<ColorMode>(BAD_VALUE); } void SurfaceFlinger::setActiveColorModeInternal(const sp<DisplayDevice>& hw, - android_color_mode_t mode) { + ColorMode mode) { int32_t type = hw->getDisplayType(); - android_color_mode_t currentMode = hw->getActiveColorMode(); + ColorMode currentMode = hw->getActiveColorMode(); if (mode == currentMode) { return; @@ -977,20 +977,20 @@ void SurfaceFlinger::setActiveColorModeInternal(const sp<DisplayDevice>& hw, status_t SurfaceFlinger::setActiveColorMode(const sp<IBinder>& display, - android_color_mode_t colorMode) { + ColorMode colorMode) { class MessageSetActiveColorMode: public MessageBase { SurfaceFlinger& mFlinger; sp<IBinder> mDisplay; - android_color_mode_t mMode; + ColorMode mMode; public: MessageSetActiveColorMode(SurfaceFlinger& flinger, const sp<IBinder>& disp, - android_color_mode_t mode) : + ColorMode mode) : mFlinger(flinger), mDisplay(disp) { mMode = mode; } virtual bool handler() { - Vector<android_color_mode_t> modes; + Vector<ColorMode> modes; mFlinger.getDisplayColorModes(mDisplay, &modes); bool exists = std::find(std::begin(modes), std::end(modes), mMode) != std::end(modes); - if (mMode < 0 || !exists) { + if (mMode < ColorMode::NATIVE || !exists) { ALOGE("Attempt to set invalid active color mode %s (%d) for display %p", decodeColorMode(mMode).c_str(), mMode, mDisplay.get()); return true; @@ -1783,9 +1783,9 @@ mat4 SurfaceFlinger::computeSaturationMatrix() const { // pickColorMode translates a given dataspace into the best available color mode. // Currently only support sRGB and Display-P3. -android_color_mode SurfaceFlinger::pickColorMode(android_dataspace dataSpace) const { +ColorMode SurfaceFlinger::pickColorMode(android_dataspace dataSpace) const { if (mForceNativeColorMode) { - return HAL_COLOR_MODE_NATIVE; + return ColorMode::NATIVE; } switch (dataSpace) { @@ -1794,18 +1794,18 @@ android_color_mode SurfaceFlinger::pickColorMode(android_dataspace dataSpace) co case HAL_DATASPACE_UNKNOWN: case HAL_DATASPACE_SRGB: case HAL_DATASPACE_V0_SRGB: - return HAL_COLOR_MODE_SRGB; + return ColorMode::SRGB; break; case HAL_DATASPACE_DISPLAY_P3: - return HAL_COLOR_MODE_DISPLAY_P3; + return ColorMode::DISPLAY_P3; break; default: // TODO (courtneygo): Do we want to assert an error here? ALOGE("No color mode mapping for %s (%#x)", dataspaceDetails(dataSpace).c_str(), dataSpace); - return HAL_COLOR_MODE_SRGB; + return ColorMode::SRGB; break; } } @@ -1927,7 +1927,7 @@ void SurfaceFlinger::setUpHWComposer() { } if (hasWideColorDisplay) { - android_color_mode newColorMode; + ColorMode newColorMode; android_dataspace newDataSpace = HAL_DATASPACE_V0_SRGB; for (auto& layer : displayDevice->getVisibleLayersSortedByZ()) { @@ -2269,13 +2269,13 @@ void SurfaceFlinger::processDisplayChangesLocked() { if (dispSurface != nullptr) { bool hasWideColorSupport = false; if (hasWideColorDisplay) { - std::vector<android_color_mode_t> modes = + std::vector<ColorMode> modes = getHwComposer().getColorModes(state.type); - for (android_color_mode_t colorMode : modes) { + for (ColorMode colorMode : modes) { switch (colorMode) { - case HAL_COLOR_MODE_DISPLAY_P3: - case HAL_COLOR_MODE_ADOBE_RGB: - case HAL_COLOR_MODE_DCI_P3: + case ColorMode::DISPLAY_P3: + case ColorMode::ADOBE_RGB: + case ColorMode::DCI_P3: hasWideColorSupport = true; break; default: @@ -2298,9 +2298,9 @@ void SurfaceFlinger::processDisplayChangesLocked() { dispSurface, producer, hasWideColorSupport, hasHdrSupport); - android_color_mode defaultColorMode = HAL_COLOR_MODE_NATIVE; + ColorMode defaultColorMode = ColorMode::NATIVE; if (hasWideColorSupport) { - defaultColorMode = HAL_COLOR_MODE_SRGB; + defaultColorMode = ColorMode::SRGB; } setActiveColorModeInternal(hw, defaultColorMode); hw->setCompositionDataSpace(HAL_DATASPACE_UNKNOWN); @@ -2741,7 +2741,7 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& displayDev android_dataspace outputDataspace = HAL_DATASPACE_UNKNOWN; if (displayDevice->getWideColorSupport() && - displayDevice->getActiveColorMode() == HAL_COLOR_MODE_DISPLAY_P3) { + displayDevice->getActiveColorMode() == ColorMode::DISPLAY_P3) { outputDataspace = HAL_DATASPACE_DISPLAY_P3; } getBE().mRenderEngine->setOutputDataSpace(outputDataspace); @@ -3879,12 +3879,12 @@ void SurfaceFlinger::dumpWideColorInfo(String8& result) const { } result.appendFormat("Display %d color modes:\n", hwcId); - std::vector<android_color_mode_t> modes = getHwComposer().getColorModes(hwcId); + std::vector<ColorMode> modes = getHwComposer().getColorModes(hwcId); for (auto&& mode : modes) { result.appendFormat(" %s (%d)\n", decodeColorMode(mode).c_str(), mode); } - android_color_mode_t currentMode = displayDevice->getActiveColorMode(); + ColorMode currentMode = displayDevice->getActiveColorMode(); result.appendFormat(" Current color mode: %s (%d)\n", decodeColorMode(currentMode).c_str(), currentMode); } @@ -4476,7 +4476,7 @@ status_t SurfaceFlinger::captureLayers(const sp<IBinder>& layerHandleBinder, } } bool getWideColorSupport() const override { return false; } - android_color_mode_t getActiveColorMode() const override { return HAL_COLOR_MODE_NATIVE; } + ColorMode getActiveColorMode() const override { return ColorMode::NATIVE; } private: const sp<Layer> mLayer; @@ -4650,7 +4650,7 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, android_dataspace outputDataspace = HAL_DATASPACE_UNKNOWN; if (renderArea.getWideColorSupport() && - renderArea.getActiveColorMode() == HAL_COLOR_MODE_DISPLAY_P3) { + renderArea.getActiveColorMode() == ColorMode::DISPLAY_P3) { outputDataspace = HAL_DATASPACE_DISPLAY_P3; } getBE().mRenderEngine->setOutputDataSpace(outputDataspace); diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 33786e8558..104adef4d3 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -394,9 +394,9 @@ private: Vector<DisplayInfo>* configs); virtual int getActiveConfig(const sp<IBinder>& display); virtual status_t getDisplayColorModes(const sp<IBinder>& display, - Vector<android_color_mode_t>* configs); - virtual android_color_mode_t getActiveColorMode(const sp<IBinder>& display); - virtual status_t setActiveColorMode(const sp<IBinder>& display, android_color_mode_t colorMode); + Vector<ColorMode>* configs); + virtual ColorMode getActiveColorMode(const sp<IBinder>& display); + virtual status_t setActiveColorMode(const sp<IBinder>& display, ColorMode colorMode); virtual void setPowerMode(const sp<IBinder>& display, int mode); virtual status_t setActiveConfig(const sp<IBinder>& display, int id); virtual status_t clearAnimationFrameStats(); @@ -446,7 +446,7 @@ private: bool stateLockHeld); // Called on the main thread in response to setActiveColorMode() - void setActiveColorModeInternal(const sp<DisplayDevice>& hw, android_color_mode_t colorMode); + void setActiveColorModeInternal(const sp<DisplayDevice>& hw, ColorMode colorMode); // Returns whether the transaction actually modified any state bool handleMessageTransaction(); @@ -619,7 +619,7 @@ private: // Given a dataSpace, returns the appropriate color_mode to use // to display that dataSpace. - android_color_mode pickColorMode(android_dataspace dataSpace) const; + ColorMode pickColorMode(android_dataspace dataSpace) const; android_dataspace bestTargetDataSpace(android_dataspace a, android_dataspace b, bool hasHdr) const; diff --git a/services/surfaceflinger/layerproto/Android.bp b/services/surfaceflinger/layerproto/Android.bp index 485090c778..ac147fe182 100644 --- a/services/surfaceflinger/layerproto/Android.bp +++ b/services/surfaceflinger/layerproto/Android.bp @@ -10,6 +10,7 @@ cc_library_shared { ], shared_libs: [ + "android.hardware.graphics.common@1.1", "libui", "libprotobuf-cpp-lite", "libbase", diff --git a/services/surfaceflinger/tests/hwc2/Hwc2Test.cpp b/services/surfaceflinger/tests/hwc2/Hwc2Test.cpp index 4878c140ed..86e2e1ec30 100644 --- a/services/surfaceflinger/tests/hwc2/Hwc2Test.cpp +++ b/services/surfaceflinger/tests/hwc2/Hwc2Test.cpp @@ -22,6 +22,7 @@ #include <android-base/unique_fd.h> #include <hardware/hardware.h> #include <sync/sync.h> +#include <ui/GraphicsTypes.h> #define HWC2_INCLUDE_STRINGIFICATION #define HWC2_USE_CPP11 @@ -34,6 +35,8 @@ #include "Hwc2TestClientTarget.h" #include "Hwc2TestVirtualDisplay.h" +using android::ColorMode; + void hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, hwc2_display_t display, int32_t connected); void hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, @@ -865,7 +868,7 @@ public: } void getColorModes(hwc2_display_t display, - std::vector<android_color_mode_t>* outColorModes, + std::vector<ColorMode>* outColorModes, hwc2_error_t* outErr = nullptr) { auto pfn = reinterpret_cast<HWC2_PFN_GET_COLOR_MODES>( @@ -892,7 +895,7 @@ public: } } - void setColorMode(hwc2_display_t display, android_color_mode_t colorMode, + void setColorMode(hwc2_display_t display, ColorMode colorMode, hwc2_error_t* outErr = nullptr) { auto pfn = reinterpret_cast<HWC2_PFN_SET_COLOR_MODE>( @@ -905,7 +908,7 @@ public: *outErr = err; } else { ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set color mode " - << colorMode; + << static_cast<int>(colorMode); } } @@ -4252,33 +4255,33 @@ TEST_F(Hwc2Test, GET_RELEASE_FENCES_bad_display) EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; } -static const std::array<android_color_mode, 9> androidColorModes = {{ - HAL_COLOR_MODE_NATIVE, - HAL_COLOR_MODE_STANDARD_BT601_625, - HAL_COLOR_MODE_STANDARD_BT601_625_UNADJUSTED, - HAL_COLOR_MODE_STANDARD_BT601_525, - HAL_COLOR_MODE_STANDARD_BT601_525_UNADJUSTED, - HAL_COLOR_MODE_STANDARD_BT709, - HAL_COLOR_MODE_DCI_P3, - HAL_COLOR_MODE_SRGB, - HAL_COLOR_MODE_ADOBE_RGB, +static const std::array<ColorMode, 9> androidColorModes = {{ + ColorMode::NATIVE, + ColorMode::STANDARD_BT601_625, + ColorMode::STANDARD_BT601_625_UNADJUSTED, + ColorMode::STANDARD_BT601_525, + ColorMode::STANDARD_BT601_525_UNADJUSTED, + ColorMode::STANDARD_BT709, + ColorMode::DCI_P3, + ColorMode::SRGB, + ColorMode::ADOBE_RGB, }}; /* TESTCASE: Tests that the HWC2 can get the color modes for a display. The - * display must support HAL_COLOR_MODE_NATIVE */ + * display must support ColorMode::NATIVE */ TEST_F(Hwc2Test, GET_COLOR_MODES) { ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( [] (Hwc2Test* test, hwc2_display_t display) { - std::vector<android_color_mode_t> colorModes; + std::vector<ColorMode> colorModes; ASSERT_NO_FATAL_FAILURE(test->getColorModes(display, &colorModes)); EXPECT_NE(std::count(colorModes.begin(), colorModes.end(), - HAL_COLOR_MODE_NATIVE), 0) << "all displays" - " must support HAL_COLOR_MODE_NATIVE"; + ColorMode::NATIVE), 0) << "all displays" + " must support ColorMode::NATIVE"; } )); } @@ -4287,7 +4290,7 @@ TEST_F(Hwc2Test, GET_COLOR_MODES) TEST_F(Hwc2Test, GET_COLOR_MODES_bad_display) { hwc2_display_t display; - std::vector<android_color_mode_t> colorModes; + std::vector<ColorMode> colorModes; hwc2_error_t err = HWC2_ERROR_NONE; ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); @@ -4302,7 +4305,7 @@ TEST_F(Hwc2Test, SET_COLOR_MODES) ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( [] (Hwc2Test* test, hwc2_display_t display) { - const android_color_mode_t colorMode = HAL_COLOR_MODE_NATIVE; + const ColorMode colorMode = ColorMode::NATIVE; EXPECT_NO_FATAL_FAILURE(test->setColorMode(display, colorMode)); } @@ -4313,7 +4316,7 @@ TEST_F(Hwc2Test, SET_COLOR_MODES) TEST_F(Hwc2Test, SET_COLOR_MODES_bad_display) { hwc2_display_t display; - const android_color_mode_t colorMode = HAL_COLOR_MODE_NATIVE; + const ColorMode colorMode = ColorMode::NATIVE; hwc2_error_t err = HWC2_ERROR_NONE; ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); @@ -4328,8 +4331,7 @@ TEST_F(Hwc2Test, SET_COLOR_MODES_bad_parameter) ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( [] (Hwc2Test* test, hwc2_display_t display) { - const android_color_mode_t colorMode = - static_cast<android_color_mode_t>(-1); + const ColorMode colorMode = static_cast<ColorMode>(-1); hwc2_error_t err = HWC2_ERROR_NONE; ASSERT_NO_FATAL_FAILURE(test->setColorMode(display, colorMode, |