From 10f89aa047782f864d13c97a57f63572d86951c7 Mon Sep 17 00:00:00 2001 From: Sushil Chauhan Date: Tue, 31 Jul 2018 15:34:48 -0700 Subject: hwc2: Fix GetReadbackBufferAttributes api Fix GetReadbackBufferAttributes api to get the Dataspace from current ColorMode of HWC Display. CRs-Fixed: 2288505 Change-Id: I75325d21b01e517236eb3c8124c706952103ae9b --- sdm/libs/hwc2/hwc_display.h | 1 + sdm/libs/hwc2/hwc_session.cpp | 31 ++++++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) (limited to 'sdm') diff --git a/sdm/libs/hwc2/hwc_display.h b/sdm/libs/hwc2/hwc_display.h index eedd55dd..5dfe3c01 100644 --- a/sdm/libs/hwc2/hwc_display.h +++ b/sdm/libs/hwc2/hwc_display.h @@ -193,6 +193,7 @@ class HWCDisplay : public DisplayEventHandler { bool IsSkipValidateState() { return (validate_state_ == kSkipValidate); } bool IsInternalValidateState() { return (validated_ && (validate_state_ == kInternalValidate)); } void SetValidationState(DisplayValidateState state) { validate_state_ = state; } + ColorMode GetCurrentColorMode() { return current_color_mode_; } // HWC2 APIs virtual HWC2::Error AcceptDisplayChanges(void); diff --git a/sdm/libs/hwc2/hwc_session.cpp b/sdm/libs/hwc2/hwc_session.cpp index 185eb2d8..6520c3ee 100644 --- a/sdm/libs/hwc2/hwc_session.cpp +++ b/sdm/libs/hwc2/hwc_session.cpp @@ -75,6 +75,25 @@ static HWCUEvent g_hwc_uevent_; Locker HWCSession::locker_[HWC_NUM_DISPLAY_TYPES]; static const int kSolidFillDelay = 100 * 1000; +// Map the known color modes to dataspace. +static int32_t GetDataspace(ColorMode mode) { + switch (mode) { + case ColorMode::SRGB: + case ColorMode::NATIVE: + return HAL_DATASPACE_V0_SRGB; + case ColorMode::DCI_P3: + return HAL_DATASPACE_DCI_P3; + case ColorMode::DISPLAY_P3: + return HAL_DATASPACE_DISPLAY_P3; + case ColorMode::BT2100_PQ: + return HAL_DATASPACE_BT2020_PQ; + case ColorMode::BT2100_HLG: + return HAL_DATASPACE_BT2020_HLG; + default: + return HAL_DATASPACE_UNKNOWN; + } +} + void HWCUEvent::UEventThread(HWCUEvent *hwc_uevent) { const char *uevent_thread_name = "HWC_UeventThread"; @@ -2055,10 +2074,16 @@ int32_t HWCSession::GetReadbackBufferAttributes(hwc2_device_t *device, hwc2_disp return HWC2_ERROR_BAD_DISPLAY; } - *format = HAL_PIXEL_FORMAT_RGB_888; - *dataspace = HAL_DATASPACE_V0_SRGB; // ((STANDARD_BT709 | TRANSFER_SRGB) | RANGE_FULL) + HWCSession *hwc_session = static_cast(device); + HWCDisplay *hwc_display = hwc_session->hwc_display_[display]; - return HWC2_ERROR_NONE; + if (hwc_display) { + *format = HAL_PIXEL_FORMAT_RGB_888; + *dataspace = GetDataspace(hwc_display->GetCurrentColorMode()); + return HWC2_ERROR_NONE; + } + + return HWC2_ERROR_BAD_DISPLAY; } int32_t HWCSession::SetReadbackBuffer(hwc2_device_t *device, hwc2_display_t display, -- cgit v1.2.3