summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hwc3/ComposerClient.cpp3
-rw-r--r--hwc3/ComposerCommandEngine.cpp6
-rw-r--r--hwc3/ComposerServiceWriter.h3
-rw-r--r--hwc3/impl/HalImpl.cpp7
-rw-r--r--hwc3/impl/HalImpl.h3
-rw-r--r--hwc3/include/IComposerHal.h4
-rw-r--r--include/displaycolor/displaycolor.h15
-rw-r--r--libhwc2.1/libdevice/ExynosDisplay.cpp8
-rw-r--r--libhwc2.1/libdevice/ExynosDisplay.h5
-rw-r--r--libhwc2.1/libdevice/ExynosHwc3Types.h6
10 files changed, 45 insertions, 15 deletions
diff --git a/hwc3/ComposerClient.cpp b/hwc3/ComposerClient.cpp
index 8638d08..6997087 100644
--- a/hwc3/ComposerClient.cpp
+++ b/hwc3/ComposerClient.cpp
@@ -554,7 +554,8 @@ void ComposerClient::destroyResources() {
std::vector<int32_t> requestMasks;
ClientTargetProperty clientTargetProperty;
mHal->validateDisplay(display, &changedLayers, &compositionTypes, &displayRequestMask,
- &requestedLayers, &requestMasks, &clientTargetProperty);
+ &requestedLayers, &requestMasks, &clientTargetProperty,
+ nullptr /* outDimmingStage */);
mHal->acceptDisplayChanges(display);
ndk::ScopedFileDescriptor presentFence;
diff --git a/hwc3/ComposerCommandEngine.cpp b/hwc3/ComposerCommandEngine.cpp
index 6daf215..ff66f9d 100644
--- a/hwc3/ComposerCommandEngine.cpp
+++ b/hwc3/ComposerCommandEngine.cpp
@@ -139,15 +139,17 @@ int32_t ComposerCommandEngine::executeValidateDisplayInternal(int64_t display) {
std::vector<int32_t> requestMasks;
ClientTargetProperty clientTargetProperty{common::PixelFormat::RGBA_8888,
common::Dataspace::UNKNOWN};
+ DimmingStage dimmingStage;
auto err =
mHal->validateDisplay(display, &changedLayers, &compositionTypes, &displayRequestMask,
- &requestedLayers, &requestMasks, &clientTargetProperty);
+ &requestedLayers, &requestMasks, &clientTargetProperty,
+ &dimmingStage);
mResources->setDisplayMustValidateState(display, false);
if (!err) {
mWriter->setChangedCompositionTypes(display, changedLayers, compositionTypes);
mWriter->setDisplayRequests(display, displayRequestMask, requestedLayers, requestMasks);
static constexpr float kBrightness = 1.f;
- mWriter->setClientTargetProperty(display, clientTargetProperty, kBrightness);
+ mWriter->setClientTargetProperty(display, clientTargetProperty, kBrightness, dimmingStage);
} else {
LOG(ERROR) << __func__ << ": err " << err;
mWriter->setError(mCommandIndex, err);
diff --git a/hwc3/ComposerServiceWriter.h b/hwc3/ComposerServiceWriter.h
index ee1607b..6c3970f 100644
--- a/hwc3/ComposerServiceWriter.h
+++ b/hwc3/ComposerServiceWriter.h
@@ -108,11 +108,12 @@ public:
}
void setClientTargetProperty(int64_t display, const ClientTargetProperty& clientTargetProperty,
- float brightness) {
+ float brightness, const DimmingStage& dimmingStage) {
ClientTargetPropertyWithBrightness clientTargetPropertyWithBrightness;
clientTargetPropertyWithBrightness.display = display;
clientTargetPropertyWithBrightness.clientTargetProperty = clientTargetProperty;
clientTargetPropertyWithBrightness.brightness = brightness;
+ clientTargetPropertyWithBrightness.dimmingStage = dimmingStage;
mCommandsResults.emplace_back(std::move(clientTargetPropertyWithBrightness));
}
diff --git a/hwc3/impl/HalImpl.cpp b/hwc3/impl/HalImpl.cpp
index 8da3c0e..e2be900 100644
--- a/hwc3/impl/HalImpl.cpp
+++ b/hwc3/impl/HalImpl.cpp
@@ -953,7 +953,8 @@ int32_t HalImpl::validateDisplay(int64_t display, std::vector<int64_t>* outChang
uint32_t* outDisplayRequestMask,
std::vector<int64_t>* outRequestedLayers,
std::vector<int32_t>* outRequestMasks,
- ClientTargetProperty* outClientTargetProperty) {
+ ClientTargetProperty* outClientTargetProperty,
+ DimmingStage* outDimmingStage) {
ExynosDisplay* halDisplay;
RET_IF_ERR(getHalDisplay(display, halDisplay));
@@ -982,7 +983,9 @@ int32_t HalImpl::validateDisplay(int64_t display, std::vector<int64_t>* outChang
h2a::translate(hwcRequestedLayers, *outRequestedLayers);
hwc_client_target_property hwcProperty;
- if (!halDisplay->getClientTargetProperty(&hwcProperty)) {
+ HwcDimmingStage hwcDimmingStage;
+ if (!halDisplay->getClientTargetProperty(&hwcProperty, &hwcDimmingStage)) {
+ h2a::translate(hwcDimmingStage, *outDimmingStage);
h2a::translate(hwcProperty, *outClientTargetProperty);
} // else ignore this error
diff --git a/hwc3/impl/HalImpl.h b/hwc3/impl/HalImpl.h
index f48b930..f772ca4 100644
--- a/hwc3/impl/HalImpl.h
+++ b/hwc3/impl/HalImpl.h
@@ -146,7 +146,8 @@ class HalImpl : public IComposerHal {
uint32_t* outDisplayRequestMask,
std::vector<int64_t>* outRequestedLayers,
std::vector<int32_t>* outRequestMasks,
- ClientTargetProperty* outClientTargetProperty) override;
+ ClientTargetProperty* outClientTargetProperty,
+ DimmingStage* outDimmingStage) override;
int32_t setExpectedPresentTime(
int64_t display,
const std::optional<ClockMonotonicTimestamp> expectedPresentTime) override;
diff --git a/hwc3/include/IComposerHal.h b/hwc3/include/IComposerHal.h
index ac5866b..6fe25c5 100644
--- a/hwc3/include/IComposerHal.h
+++ b/hwc3/include/IComposerHal.h
@@ -41,6 +41,7 @@
#include <aidl/android/hardware/graphics/composer3/CommandResultPayload.h>
#include <aidl/android/hardware/graphics/composer3/Composition.h>
#include <aidl/android/hardware/graphics/composer3/ContentType.h>
+#include <aidl/android/hardware/graphics/composer3/DimmingStage.h>
#include <aidl/android/hardware/graphics/composer3/DisplayAttribute.h>
#include <aidl/android/hardware/graphics/composer3/DisplayBrightness.h>
#include <aidl/android/hardware/graphics/composer3/DisplayCapability.h>
@@ -210,7 +211,8 @@ class IComposerHal {
uint32_t* outDisplayRequestMask,
std::vector<int64_t>* outRequestedLayers,
std::vector<int32_t>* outRequestMasks,
- ClientTargetProperty* outClientTargetProperty) = 0;
+ ClientTargetProperty* outClientTargetProperty,
+ DimmingStage* outDimmingStage) = 0;
virtual int32_t setExpectedPresentTime(
int64_t display, const std::optional<ClockMonotonicTimestamp> expectedPresentTime) = 0;
virtual int32_t setIdleTimerEnabled(int64_t display, int32_t timeout) = 0;
diff --git a/include/displaycolor/displaycolor.h b/include/displaycolor/displaycolor.h
index 74bebcf..eb96ce0 100644
--- a/include/displaycolor/displaycolor.h
+++ b/include/displaycolor/displaycolor.h
@@ -34,6 +34,8 @@ using android::hardware::graphics::common::V1_2::PixelFormat;
/**
* hwc/displaycolor interface history
*
+ * 6.0.0.2022-02-22 Get whether dimming in linear.
+ * 5.0.0.2022-02-17 Add layer dim ratio.
* 4.0.0.2021-12-20 Get pixel format and dataspace of blending stage.
* 3.0.0.2021-11-18 calibration info intf
* 2.0.0.2021-08-27 pass brightness table for hdr10+
@@ -57,7 +59,7 @@ constexpr struct DisplayColorIntfVer {
}
} kInterfaceVersion {
- 4,
+ 6,
0,
0,
};
@@ -116,7 +118,8 @@ struct LayerColorData {
bool operator==(const LayerColorData &rhs) const {
return dataspace == rhs.dataspace && matrix == rhs.matrix &&
static_metadata == rhs.static_metadata &&
- dynamic_metadata == rhs.dynamic_metadata;
+ dynamic_metadata == rhs.dynamic_metadata &&
+ dim_ratio == rhs.dim_ratio;
}
/**
@@ -221,6 +224,11 @@ struct LayerColorData {
* indicates this is an HDR layer.
*/
HdrDynamicMetadata dynamic_metadata;
+
+ /**
+ * @brief the layer's luminance dim ratio
+ */
+ float dim_ratio = 1.0f;
};
/**
@@ -372,7 +380,8 @@ class IDisplayColorGeneric {
*/
virtual int GetBlendingProperty(DisplayType display,
hwc::PixelFormat &pixel_format,
- hwc::Dataspace &dataspace) const = 0;
+ hwc::Dataspace &dataspace,
+ bool &dimming_linear) const = 0;
};
extern "C" {
diff --git a/libhwc2.1/libdevice/ExynosDisplay.cpp b/libhwc2.1/libdevice/ExynosDisplay.cpp
index a932556..4b8e350 100644
--- a/libhwc2.1/libdevice/ExynosDisplay.cpp
+++ b/libhwc2.1/libdevice/ExynosDisplay.cpp
@@ -4090,10 +4090,14 @@ int32_t ExynosDisplay::setContentType(int32_t /* hwc2_content_type_t */ contentT
return HWC2_ERROR_UNSUPPORTED;
}
-int32_t ExynosDisplay::getClientTargetProperty(hwc_client_target_property_t* outClientTargetProperty)
-{
+int32_t ExynosDisplay::getClientTargetProperty(
+ hwc_client_target_property_t *outClientTargetProperty,
+ HwcDimmingStage *outDimmingStage) {
outClientTargetProperty->pixelFormat = HAL_PIXEL_FORMAT_RGBA_8888;
outClientTargetProperty->dataspace = HAL_DATASPACE_UNKNOWN;
+ if (outDimmingStage != nullptr)
+ *outDimmingStage = HwcDimmingStage::DIMMING_NONE;
+
return HWC2_ERROR_NONE;
}
diff --git a/libhwc2.1/libdevice/ExynosDisplay.h b/libhwc2.1/libdevice/ExynosDisplay.h
index b2f5b61..5a893d4 100644
--- a/libhwc2.1/libdevice/ExynosDisplay.h
+++ b/libhwc2.1/libdevice/ExynosDisplay.h
@@ -1069,14 +1069,15 @@ class ExynosDisplay {
* composer requests. If dataspace field is set to UNKNOWN, it means
* the hardware composer requests nothing, the client must ignore the
* returned client target property structure.
- *
+ * outDimmingStage - where should the SDR dimming happen. HWC3 only.
* Returns HWC2_ERROR_NONE or one of the following errors:
* HWC2_ERROR_BAD_DISPLAY - an invalid display handle was passed in
* HWC2_ERROR_NOT_VALIDATED - validateDisplay has not been called for this
* display
*/
virtual int32_t getClientTargetProperty(
- hwc_client_target_property_t* outClientTargetProperty);
+ hwc_client_target_property_t* outClientTargetProperty,
+ HwcDimmingStage *outDimmingStage = nullptr);
/*
* HWC3
diff --git a/libhwc2.1/libdevice/ExynosHwc3Types.h b/libhwc2.1/libdevice/ExynosHwc3Types.h
index 769b758..6e97e13 100644
--- a/libhwc2.1/libdevice/ExynosHwc3Types.h
+++ b/libhwc2.1/libdevice/ExynosHwc3Types.h
@@ -23,4 +23,10 @@ enum class HwcMountOrientation {
ROT_270,
};
+enum class HwcDimmingStage {
+ DIMMING_NONE = 0,
+ DIMMING_LINEAR,
+ DIMMING_OETF,
+};
+
#endif // EXYNOS_HWC3_TYPES_H_