1*38e8c45fSAndroid Build Coastguard Worker /* 2*38e8c45fSAndroid Build Coastguard Worker * Copyright 2016 The Android Open Source Project 3*38e8c45fSAndroid Build Coastguard Worker * 4*38e8c45fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*38e8c45fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*38e8c45fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*38e8c45fSAndroid Build Coastguard Worker * 8*38e8c45fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*38e8c45fSAndroid Build Coastguard Worker * 10*38e8c45fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*38e8c45fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*38e8c45fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*38e8c45fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*38e8c45fSAndroid Build Coastguard Worker * limitations under the License. 15*38e8c45fSAndroid Build Coastguard Worker */ 16*38e8c45fSAndroid Build Coastguard Worker 17*38e8c45fSAndroid Build Coastguard Worker #pragma once 18*38e8c45fSAndroid Build Coastguard Worker 19*38e8c45fSAndroid Build Coastguard Worker #include <memory> 20*38e8c45fSAndroid Build Coastguard Worker 21*38e8c45fSAndroid Build Coastguard Worker // TODO(b/129481165): remove the #pragma below and fix conversion issues 22*38e8c45fSAndroid Build Coastguard Worker #pragma clang diagnostic push 23*38e8c45fSAndroid Build Coastguard Worker #pragma clang diagnostic ignored "-Wconversion" 24*38e8c45fSAndroid Build Coastguard Worker #pragma clang diagnostic ignored "-Wextra" 25*38e8c45fSAndroid Build Coastguard Worker 26*38e8c45fSAndroid Build Coastguard Worker #include <composer-command-buffer/2.4/ComposerCommandBuffer.h> 27*38e8c45fSAndroid Build Coastguard Worker #include <gui/BufferQueue.h> 28*38e8c45fSAndroid Build Coastguard Worker #include <gui/HdrMetadata.h> 29*38e8c45fSAndroid Build Coastguard Worker #include <math/mat4.h> 30*38e8c45fSAndroid Build Coastguard Worker #include <ui/DisplayedFrameStats.h> 31*38e8c45fSAndroid Build Coastguard Worker #include <ui/GraphicBuffer.h> 32*38e8c45fSAndroid Build Coastguard Worker #include <ui/PictureProfileHandle.h> 33*38e8c45fSAndroid Build Coastguard Worker #include <utils/StrongPointer.h> 34*38e8c45fSAndroid Build Coastguard Worker 35*38e8c45fSAndroid Build Coastguard Worker #include "DisplayHardware/Hal.h" 36*38e8c45fSAndroid Build Coastguard Worker 37*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/common/DisplayDecorationSupport.h> 38*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/common/HdrConversionCapability.h> 39*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/common/HdrConversionStrategy.h> 40*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/common/Transform.h> 41*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/composer3/Capability.h> 42*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/composer3/ClientTargetPropertyWithBrightness.h> 43*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/composer3/Color.h> 44*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/composer3/Composition.h> 45*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/composer3/DisplayCapability.h> 46*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/composer3/DisplayConfiguration.h> 47*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/composer3/DisplayLuts.h> 48*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/composer3/IComposerCallback.h> 49*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/composer3/OverlayProperties.h> 50*38e8c45fSAndroid Build Coastguard Worker 51*38e8c45fSAndroid Build Coastguard Worker #include <optional> 52*38e8c45fSAndroid Build Coastguard Worker 53*38e8c45fSAndroid Build Coastguard Worker // TODO(b/129481165): remove the #pragma below and fix conversion issues 54*38e8c45fSAndroid Build Coastguard Worker #pragma clang diagnostic pop // ignored "-Wconversion -Wextra" 55*38e8c45fSAndroid Build Coastguard Worker 56*38e8c45fSAndroid Build Coastguard Worker namespace android { 57*38e8c45fSAndroid Build Coastguard Worker namespace HWC2 { 58*38e8c45fSAndroid Build Coastguard Worker struct ComposerCallback; 59*38e8c45fSAndroid Build Coastguard Worker } // namespace HWC2 60*38e8c45fSAndroid Build Coastguard Worker 61*38e8c45fSAndroid Build Coastguard Worker namespace Hwc2 { 62*38e8c45fSAndroid Build Coastguard Worker 63*38e8c45fSAndroid Build Coastguard Worker namespace types = hardware::graphics::common; 64*38e8c45fSAndroid Build Coastguard Worker 65*38e8c45fSAndroid Build Coastguard Worker namespace V2_1 = hardware::graphics::composer::V2_1; 66*38e8c45fSAndroid Build Coastguard Worker namespace V2_2 = hardware::graphics::composer::V2_2; 67*38e8c45fSAndroid Build Coastguard Worker namespace V2_3 = hardware::graphics::composer::V2_3; 68*38e8c45fSAndroid Build Coastguard Worker namespace V2_4 = hardware::graphics::composer::V2_4; 69*38e8c45fSAndroid Build Coastguard Worker namespace V3_0 = ::aidl::android::hardware::graphics::composer3; 70*38e8c45fSAndroid Build Coastguard Worker 71*38e8c45fSAndroid Build Coastguard Worker using types::V1_0::ColorTransform; 72*38e8c45fSAndroid Build Coastguard Worker using types::V1_0::Transform; 73*38e8c45fSAndroid Build Coastguard Worker using types::V1_1::RenderIntent; 74*38e8c45fSAndroid Build Coastguard Worker using types::V1_2::ColorMode; 75*38e8c45fSAndroid Build Coastguard Worker using types::V1_2::Dataspace; 76*38e8c45fSAndroid Build Coastguard Worker using types::V1_2::PixelFormat; 77*38e8c45fSAndroid Build Coastguard Worker 78*38e8c45fSAndroid Build Coastguard Worker using hardware::graphics::composer::hal::Error; 79*38e8c45fSAndroid Build Coastguard Worker using V2_1::Config; 80*38e8c45fSAndroid Build Coastguard Worker using V2_1::Display; 81*38e8c45fSAndroid Build Coastguard Worker using V2_1::Layer; 82*38e8c45fSAndroid Build Coastguard Worker using V2_4::CommandReaderBase; 83*38e8c45fSAndroid Build Coastguard Worker using V2_4::CommandWriterBase; 84*38e8c45fSAndroid Build Coastguard Worker using V2_4::IComposer; 85*38e8c45fSAndroid Build Coastguard Worker using V2_4::IComposerCallback; 86*38e8c45fSAndroid Build Coastguard Worker using V2_4::IComposerClient; 87*38e8c45fSAndroid Build Coastguard Worker using V2_4::VsyncPeriodChangeTimeline; 88*38e8c45fSAndroid Build Coastguard Worker using V2_4::VsyncPeriodNanos; 89*38e8c45fSAndroid Build Coastguard Worker using PerFrameMetadata = IComposerClient::PerFrameMetadata; 90*38e8c45fSAndroid Build Coastguard Worker using PerFrameMetadataKey = IComposerClient::PerFrameMetadataKey; 91*38e8c45fSAndroid Build Coastguard Worker using PerFrameMetadataBlob = IComposerClient::PerFrameMetadataBlob; 92*38e8c45fSAndroid Build Coastguard Worker using AidlTransform = ::aidl::android::hardware::graphics::common::Transform; 93*38e8c45fSAndroid Build Coastguard Worker using DisplayConfiguration = V3_0::DisplayConfiguration; 94*38e8c45fSAndroid Build Coastguard Worker using aidl::android::hardware::graphics::common::Hdr; 95*38e8c45fSAndroid Build Coastguard Worker 96*38e8c45fSAndroid Build Coastguard Worker class Composer { 97*38e8c45fSAndroid Build Coastguard Worker public: 98*38e8c45fSAndroid Build Coastguard Worker static std::unique_ptr<Composer> create(const std::string& serviceName); 99*38e8c45fSAndroid Build Coastguard Worker 100*38e8c45fSAndroid Build Coastguard Worker virtual ~Composer() = 0; 101*38e8c45fSAndroid Build Coastguard Worker 102*38e8c45fSAndroid Build Coastguard Worker enum class OptionalFeature { 103*38e8c45fSAndroid Build Coastguard Worker RefreshRateSwitching, 104*38e8c45fSAndroid Build Coastguard Worker ExpectedPresentTime, 105*38e8c45fSAndroid Build Coastguard Worker // Whether setDisplayBrightness is able to be applied as part of a display command. 106*38e8c45fSAndroid Build Coastguard Worker DisplayBrightnessCommand, 107*38e8c45fSAndroid Build Coastguard Worker KernelIdleTimer, 108*38e8c45fSAndroid Build Coastguard Worker PhysicalDisplayOrientation, 109*38e8c45fSAndroid Build Coastguard Worker }; 110*38e8c45fSAndroid Build Coastguard Worker 111*38e8c45fSAndroid Build Coastguard Worker virtual bool isSupported(OptionalFeature) const = 0; 112*38e8c45fSAndroid Build Coastguard Worker virtual bool isVrrSupported() const = 0; 113*38e8c45fSAndroid Build Coastguard Worker 114*38e8c45fSAndroid Build Coastguard Worker virtual std::vector<aidl::android::hardware::graphics::composer3::Capability> 115*38e8c45fSAndroid Build Coastguard Worker getCapabilities() = 0; 116*38e8c45fSAndroid Build Coastguard Worker virtual std::string dumpDebugInfo() = 0; 117*38e8c45fSAndroid Build Coastguard Worker 118*38e8c45fSAndroid Build Coastguard Worker virtual void registerCallback(HWC2::ComposerCallback& callback) = 0; 119*38e8c45fSAndroid Build Coastguard Worker 120*38e8c45fSAndroid Build Coastguard Worker // Explicitly flush all pending commands in the command buffer. 121*38e8c45fSAndroid Build Coastguard Worker virtual Error executeCommands(Display) = 0; 122*38e8c45fSAndroid Build Coastguard Worker 123*38e8c45fSAndroid Build Coastguard Worker virtual uint32_t getMaxVirtualDisplayCount() = 0; 124*38e8c45fSAndroid Build Coastguard Worker virtual Error createVirtualDisplay(uint32_t width, uint32_t height, PixelFormat*, 125*38e8c45fSAndroid Build Coastguard Worker Display* outDisplay) = 0; 126*38e8c45fSAndroid Build Coastguard Worker virtual Error destroyVirtualDisplay(Display display) = 0; 127*38e8c45fSAndroid Build Coastguard Worker 128*38e8c45fSAndroid Build Coastguard Worker virtual Error acceptDisplayChanges(Display display) = 0; 129*38e8c45fSAndroid Build Coastguard Worker 130*38e8c45fSAndroid Build Coastguard Worker virtual Error createLayer(Display display, Layer* outLayer) = 0; 131*38e8c45fSAndroid Build Coastguard Worker virtual Error destroyLayer(Display display, Layer layer) = 0; 132*38e8c45fSAndroid Build Coastguard Worker 133*38e8c45fSAndroid Build Coastguard Worker virtual Error getActiveConfig(Display display, Config* outConfig) = 0; 134*38e8c45fSAndroid Build Coastguard Worker virtual Error getChangedCompositionTypes(Display display, std::vector<Layer>* outLayers, 135*38e8c45fSAndroid Build Coastguard Worker std::vector<V3_0::Composition>* outTypes) = 0; 136*38e8c45fSAndroid Build Coastguard Worker virtual Error getColorModes(Display display, std::vector<ColorMode>* outModes) = 0; 137*38e8c45fSAndroid Build Coastguard Worker virtual Error getDisplayAttribute(Display display, Config config, 138*38e8c45fSAndroid Build Coastguard Worker IComposerClient::Attribute attribute, int32_t* outValue) = 0; 139*38e8c45fSAndroid Build Coastguard Worker virtual Error getDisplayConfigs(Display display, std::vector<Config>* outConfigs) = 0; 140*38e8c45fSAndroid Build Coastguard Worker 141*38e8c45fSAndroid Build Coastguard Worker virtual Error getDisplayConfigurations(Display, int32_t maxFrameIntervalNs, 142*38e8c45fSAndroid Build Coastguard Worker std::vector<DisplayConfiguration>*) = 0; 143*38e8c45fSAndroid Build Coastguard Worker 144*38e8c45fSAndroid Build Coastguard Worker virtual Error getDisplayName(Display display, std::string* outName) = 0; 145*38e8c45fSAndroid Build Coastguard Worker 146*38e8c45fSAndroid Build Coastguard Worker virtual Error getDisplayRequests(Display display, uint32_t* outDisplayRequestMask, 147*38e8c45fSAndroid Build Coastguard Worker std::vector<Layer>* outLayers, 148*38e8c45fSAndroid Build Coastguard Worker std::vector<uint32_t>* outLayerRequestMasks) = 0; 149*38e8c45fSAndroid Build Coastguard Worker 150*38e8c45fSAndroid Build Coastguard Worker virtual Error getDozeSupport(Display display, bool* outSupport) = 0; 151*38e8c45fSAndroid Build Coastguard Worker virtual Error hasDisplayIdleTimerCapability(Display display, bool* outSupport) = 0; 152*38e8c45fSAndroid Build Coastguard Worker virtual Error getHdrCapabilities(Display display, std::vector<Hdr>* outHdrTypes, 153*38e8c45fSAndroid Build Coastguard Worker float* outMaxLuminance, float* outMaxAverageLuminance, 154*38e8c45fSAndroid Build Coastguard Worker float* outMinLuminance) = 0; 155*38e8c45fSAndroid Build Coastguard Worker 156*38e8c45fSAndroid Build Coastguard Worker virtual Error getReleaseFences(Display display, std::vector<Layer>* outLayers, 157*38e8c45fSAndroid Build Coastguard Worker std::vector<int>* outReleaseFences) = 0; 158*38e8c45fSAndroid Build Coastguard Worker 159*38e8c45fSAndroid Build Coastguard Worker virtual Error presentDisplay(Display display, int* outPresentFence) = 0; 160*38e8c45fSAndroid Build Coastguard Worker 161*38e8c45fSAndroid Build Coastguard Worker virtual Error setActiveConfig(Display display, Config config) = 0; 162*38e8c45fSAndroid Build Coastguard Worker 163*38e8c45fSAndroid Build Coastguard Worker /* 164*38e8c45fSAndroid Build Coastguard Worker * The composer caches client targets internally. When target is nullptr, 165*38e8c45fSAndroid Build Coastguard Worker * the composer uses slot to look up the client target from its cache. 166*38e8c45fSAndroid Build Coastguard Worker * When target is not nullptr, the cache is updated with the new target. 167*38e8c45fSAndroid Build Coastguard Worker */ 168*38e8c45fSAndroid Build Coastguard Worker virtual Error setClientTarget(Display display, uint32_t slot, const sp<GraphicBuffer>& target, 169*38e8c45fSAndroid Build Coastguard Worker int acquireFence, Dataspace dataspace, 170*38e8c45fSAndroid Build Coastguard Worker const std::vector<IComposerClient::Rect>& damage, 171*38e8c45fSAndroid Build Coastguard Worker float hdrSdrRatio) = 0; 172*38e8c45fSAndroid Build Coastguard Worker virtual Error setColorMode(Display display, ColorMode mode, RenderIntent renderIntent) = 0; 173*38e8c45fSAndroid Build Coastguard Worker virtual Error setColorTransform(Display display, const float* matrix) = 0; 174*38e8c45fSAndroid Build Coastguard Worker virtual Error setOutputBuffer(Display display, const native_handle_t* buffer, 175*38e8c45fSAndroid Build Coastguard Worker int releaseFence) = 0; 176*38e8c45fSAndroid Build Coastguard Worker virtual Error setPowerMode(Display display, IComposerClient::PowerMode mode) = 0; 177*38e8c45fSAndroid Build Coastguard Worker virtual Error setVsyncEnabled(Display display, IComposerClient::Vsync enabled) = 0; 178*38e8c45fSAndroid Build Coastguard Worker 179*38e8c45fSAndroid Build Coastguard Worker virtual Error setClientTargetSlotCount(Display display) = 0; 180*38e8c45fSAndroid Build Coastguard Worker 181*38e8c45fSAndroid Build Coastguard Worker virtual Error validateDisplay(Display display, nsecs_t expectedPresentTime, 182*38e8c45fSAndroid Build Coastguard Worker int32_t frameIntervalNs, uint32_t* outNumTypes, 183*38e8c45fSAndroid Build Coastguard Worker uint32_t* outNumRequests) = 0; 184*38e8c45fSAndroid Build Coastguard Worker 185*38e8c45fSAndroid Build Coastguard Worker virtual Error presentOrValidateDisplay(Display display, nsecs_t expectedPresentTime, 186*38e8c45fSAndroid Build Coastguard Worker int32_t frameIntervalNs, uint32_t* outNumTypes, 187*38e8c45fSAndroid Build Coastguard Worker uint32_t* outNumRequests, int* outPresentFence, 188*38e8c45fSAndroid Build Coastguard Worker uint32_t* state) = 0; 189*38e8c45fSAndroid Build Coastguard Worker 190*38e8c45fSAndroid Build Coastguard Worker virtual Error setCursorPosition(Display display, Layer layer, int32_t x, int32_t y) = 0; 191*38e8c45fSAndroid Build Coastguard Worker /* see setClientTarget for the purpose of slot */ 192*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerBuffer(Display display, Layer layer, uint32_t slot, 193*38e8c45fSAndroid Build Coastguard Worker const sp<GraphicBuffer>& buffer, int acquireFence) = 0; 194*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerBufferSlotsToClear(Display display, Layer layer, 195*38e8c45fSAndroid Build Coastguard Worker const std::vector<uint32_t>& slotsToClear, 196*38e8c45fSAndroid Build Coastguard Worker uint32_t activeBufferSlot) = 0; 197*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerSurfaceDamage(Display display, Layer layer, 198*38e8c45fSAndroid Build Coastguard Worker const std::vector<IComposerClient::Rect>& damage) = 0; 199*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerBlendMode(Display display, Layer layer, 200*38e8c45fSAndroid Build Coastguard Worker IComposerClient::BlendMode mode) = 0; 201*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerColor( 202*38e8c45fSAndroid Build Coastguard Worker Display display, Layer layer, 203*38e8c45fSAndroid Build Coastguard Worker const aidl::android::hardware::graphics::composer3::Color& color) = 0; 204*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerCompositionType( 205*38e8c45fSAndroid Build Coastguard Worker Display display, Layer layer, 206*38e8c45fSAndroid Build Coastguard Worker aidl::android::hardware::graphics::composer3::Composition type) = 0; 207*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerDataspace(Display display, Layer layer, Dataspace dataspace) = 0; 208*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerDisplayFrame(Display display, Layer layer, 209*38e8c45fSAndroid Build Coastguard Worker const IComposerClient::Rect& frame) = 0; 210*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerPlaneAlpha(Display display, Layer layer, float alpha) = 0; 211*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerSidebandStream(Display display, Layer layer, 212*38e8c45fSAndroid Build Coastguard Worker const native_handle_t* stream) = 0; 213*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerSourceCrop(Display display, Layer layer, 214*38e8c45fSAndroid Build Coastguard Worker const IComposerClient::FRect& crop) = 0; 215*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerTransform(Display display, Layer layer, Transform transform) = 0; 216*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerVisibleRegion(Display display, Layer layer, 217*38e8c45fSAndroid Build Coastguard Worker const std::vector<IComposerClient::Rect>& visible) = 0; 218*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerZOrder(Display display, Layer layer, uint32_t z) = 0; 219*38e8c45fSAndroid Build Coastguard Worker 220*38e8c45fSAndroid Build Coastguard Worker // Composer HAL 2.2 221*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerPerFrameMetadata( 222*38e8c45fSAndroid Build Coastguard Worker Display display, Layer layer, 223*38e8c45fSAndroid Build Coastguard Worker const std::vector<IComposerClient::PerFrameMetadata>& perFrameMetadatas) = 0; 224*38e8c45fSAndroid Build Coastguard Worker virtual std::vector<IComposerClient::PerFrameMetadataKey> getPerFrameMetadataKeys( 225*38e8c45fSAndroid Build Coastguard Worker Display display) = 0; 226*38e8c45fSAndroid Build Coastguard Worker virtual Error getRenderIntents(Display display, ColorMode colorMode, 227*38e8c45fSAndroid Build Coastguard Worker std::vector<RenderIntent>* outRenderIntents) = 0; 228*38e8c45fSAndroid Build Coastguard Worker virtual Error getDataspaceSaturationMatrix(Dataspace dataspace, mat4* outMatrix) = 0; 229*38e8c45fSAndroid Build Coastguard Worker 230*38e8c45fSAndroid Build Coastguard Worker // Composer HAL 2.3 231*38e8c45fSAndroid Build Coastguard Worker virtual Error getDisplayIdentificationData(Display display, uint8_t* outPort, 232*38e8c45fSAndroid Build Coastguard Worker std::vector<uint8_t>* outData) = 0; 233*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerColorTransform(Display display, Layer layer, 234*38e8c45fSAndroid Build Coastguard Worker const float* matrix) = 0; 235*38e8c45fSAndroid Build Coastguard Worker virtual Error getDisplayedContentSamplingAttributes(Display display, PixelFormat* outFormat, 236*38e8c45fSAndroid Build Coastguard Worker Dataspace* outDataspace, 237*38e8c45fSAndroid Build Coastguard Worker uint8_t* outComponentMask) = 0; 238*38e8c45fSAndroid Build Coastguard Worker virtual Error setDisplayContentSamplingEnabled(Display display, bool enabled, 239*38e8c45fSAndroid Build Coastguard Worker uint8_t componentMask, uint64_t maxFrames) = 0; 240*38e8c45fSAndroid Build Coastguard Worker virtual Error getDisplayedContentSample(Display display, uint64_t maxFrames, uint64_t timestamp, 241*38e8c45fSAndroid Build Coastguard Worker DisplayedFrameStats* outStats) = 0; 242*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerPerFrameMetadataBlobs( 243*38e8c45fSAndroid Build Coastguard Worker Display display, Layer layer, const std::vector<PerFrameMetadataBlob>& metadata) = 0; 244*38e8c45fSAndroid Build Coastguard Worker // Options for setting the display brightness 245*38e8c45fSAndroid Build Coastguard Worker struct DisplayBrightnessOptions { 246*38e8c45fSAndroid Build Coastguard Worker // If true, then immediately submits a brightness change request to composer. Otherwise, 247*38e8c45fSAndroid Build Coastguard Worker // submission of the brightness change may be deferred until presenting the next frame. 248*38e8c45fSAndroid Build Coastguard Worker // applyImmediately should only be false if OptionalFeature::DisplayBrightnessCommand is 249*38e8c45fSAndroid Build Coastguard Worker // supported. 250*38e8c45fSAndroid Build Coastguard Worker bool applyImmediately = true; 251*38e8c45fSAndroid Build Coastguard Worker 252*38e8c45fSAndroid Build Coastguard Worker bool operator==(const DisplayBrightnessOptions& other) const { 253*38e8c45fSAndroid Build Coastguard Worker return applyImmediately == other.applyImmediately; 254*38e8c45fSAndroid Build Coastguard Worker } 255*38e8c45fSAndroid Build Coastguard Worker }; 256*38e8c45fSAndroid Build Coastguard Worker virtual Error setDisplayBrightness(Display display, float brightness, float brightnessNits, 257*38e8c45fSAndroid Build Coastguard Worker const DisplayBrightnessOptions& options) = 0; 258*38e8c45fSAndroid Build Coastguard Worker 259*38e8c45fSAndroid Build Coastguard Worker // Composer HAL 2.4 260*38e8c45fSAndroid Build Coastguard Worker virtual Error getDisplayCapabilities(Display display, 261*38e8c45fSAndroid Build Coastguard Worker std::vector<V3_0::DisplayCapability>* outCapabilities) = 0; 262*38e8c45fSAndroid Build Coastguard Worker virtual V2_4::Error getDisplayConnectionType( 263*38e8c45fSAndroid Build Coastguard Worker Display display, IComposerClient::DisplayConnectionType* outType) = 0; 264*38e8c45fSAndroid Build Coastguard Worker virtual V2_4::Error getDisplayVsyncPeriod(Display display, 265*38e8c45fSAndroid Build Coastguard Worker VsyncPeriodNanos* outVsyncPeriod) = 0; 266*38e8c45fSAndroid Build Coastguard Worker virtual Error setActiveConfigWithConstraints( 267*38e8c45fSAndroid Build Coastguard Worker Display display, Config config, 268*38e8c45fSAndroid Build Coastguard Worker const IComposerClient::VsyncPeriodChangeConstraints& vsyncPeriodChangeConstraints, 269*38e8c45fSAndroid Build Coastguard Worker VsyncPeriodChangeTimeline* outTimeline) = 0; 270*38e8c45fSAndroid Build Coastguard Worker 271*38e8c45fSAndroid Build Coastguard Worker virtual V2_4::Error setAutoLowLatencyMode(Display displayId, bool on) = 0; 272*38e8c45fSAndroid Build Coastguard Worker virtual V2_4::Error getSupportedContentTypes( 273*38e8c45fSAndroid Build Coastguard Worker Display displayId, 274*38e8c45fSAndroid Build Coastguard Worker std::vector<IComposerClient::ContentType>* outSupportedContentTypes) = 0; 275*38e8c45fSAndroid Build Coastguard Worker virtual V2_4::Error setContentType(Display displayId, 276*38e8c45fSAndroid Build Coastguard Worker IComposerClient::ContentType contentType) = 0; 277*38e8c45fSAndroid Build Coastguard Worker virtual V2_4::Error setLayerGenericMetadata(Display display, Layer layer, 278*38e8c45fSAndroid Build Coastguard Worker const std::string& key, bool mandatory, 279*38e8c45fSAndroid Build Coastguard Worker const std::vector<uint8_t>& value) = 0; 280*38e8c45fSAndroid Build Coastguard Worker virtual V2_4::Error getLayerGenericMetadataKeys( 281*38e8c45fSAndroid Build Coastguard Worker std::vector<IComposerClient::LayerGenericMetadataKey>* outKeys) = 0; 282*38e8c45fSAndroid Build Coastguard Worker 283*38e8c45fSAndroid Build Coastguard Worker virtual Error getClientTargetProperty( 284*38e8c45fSAndroid Build Coastguard Worker Display display, V3_0::ClientTargetPropertyWithBrightness* outClientTargetProperty) = 0; 285*38e8c45fSAndroid Build Coastguard Worker 286*38e8c45fSAndroid Build Coastguard Worker // AIDL Composer 287*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerBrightness(Display display, Layer layer, float brightness) = 0; 288*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerBlockingRegion(Display display, Layer layer, 289*38e8c45fSAndroid Build Coastguard Worker const std::vector<IComposerClient::Rect>& blocking) = 0; 290*38e8c45fSAndroid Build Coastguard Worker virtual Error setBootDisplayConfig(Display displayId, Config) = 0; 291*38e8c45fSAndroid Build Coastguard Worker virtual Error clearBootDisplayConfig(Display displayId) = 0; 292*38e8c45fSAndroid Build Coastguard Worker virtual Error getPreferredBootDisplayConfig(Display displayId, Config*) = 0; 293*38e8c45fSAndroid Build Coastguard Worker virtual Error getDisplayDecorationSupport( 294*38e8c45fSAndroid Build Coastguard Worker Display display, 295*38e8c45fSAndroid Build Coastguard Worker std::optional<::aidl::android::hardware::graphics::common::DisplayDecorationSupport>* 296*38e8c45fSAndroid Build Coastguard Worker support) = 0; 297*38e8c45fSAndroid Build Coastguard Worker virtual Error setIdleTimerEnabled(Display displayId, std::chrono::milliseconds timeout) = 0; 298*38e8c45fSAndroid Build Coastguard Worker virtual Error getPhysicalDisplayOrientation(Display displayId, 299*38e8c45fSAndroid Build Coastguard Worker AidlTransform* outDisplayOrientation) = 0; 300*38e8c45fSAndroid Build Coastguard Worker virtual Error getOverlaySupport(V3_0::OverlayProperties* outProperties) = 0; 301*38e8c45fSAndroid Build Coastguard Worker virtual void onHotplugConnect(Display) = 0; 302*38e8c45fSAndroid Build Coastguard Worker virtual void onHotplugDisconnect(Display) = 0; 303*38e8c45fSAndroid Build Coastguard Worker virtual Error getHdrConversionCapabilities( 304*38e8c45fSAndroid Build Coastguard Worker std::vector<::aidl::android::hardware::graphics::common::HdrConversionCapability>*) = 0; 305*38e8c45fSAndroid Build Coastguard Worker virtual Error setHdrConversionStrategy( 306*38e8c45fSAndroid Build Coastguard Worker ::aidl::android::hardware::graphics::common::HdrConversionStrategy, Hdr*) = 0; 307*38e8c45fSAndroid Build Coastguard Worker virtual Error setRefreshRateChangedCallbackDebugEnabled(Display, bool) = 0; 308*38e8c45fSAndroid Build Coastguard Worker virtual Error notifyExpectedPresent(Display, nsecs_t expectedPresentTime, 309*38e8c45fSAndroid Build Coastguard Worker int32_t frameIntervalNs) = 0; 310*38e8c45fSAndroid Build Coastguard Worker virtual Error getRequestedLuts(Display display, std::vector<Layer>* outLayers, 311*38e8c45fSAndroid Build Coastguard Worker std::vector<V3_0::DisplayLuts::LayerLut>* outLuts) = 0; 312*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerLuts(Display display, Layer layer, V3_0::Luts& luts) = 0; 313*38e8c45fSAndroid Build Coastguard Worker virtual Error getMaxLayerPictureProfiles(Display display, int32_t* outMaxProfiles) = 0; 314*38e8c45fSAndroid Build Coastguard Worker virtual Error setDisplayPictureProfileId(Display display, PictureProfileId id) = 0; 315*38e8c45fSAndroid Build Coastguard Worker virtual Error setLayerPictureProfileId(Display display, Layer layer, PictureProfileId id) = 0; 316*38e8c45fSAndroid Build Coastguard Worker }; 317*38e8c45fSAndroid Build Coastguard Worker 318*38e8c45fSAndroid Build Coastguard Worker } // namespace Hwc2 319*38e8c45fSAndroid Build Coastguard Worker } // namespace android 320