diff options
author | Sushil Chauhan <sushilchauhan@codeaurora.org> | 2018-07-31 15:34:48 -0700 |
---|---|---|
committer | Sushil Chauhan <sushilchauhan@codeaurora.org> | 2018-07-31 16:59:26 -0700 |
commit | 10f89aa047782f864d13c97a57f63572d86951c7 (patch) | |
tree | 7a94229a83a3da132efb3dad6c22823c09b77e2f /sdm | |
parent | 48914be37ead63484532b6cce2be6acf211ecca0 (diff) | |
download | display-10f89aa047782f864d13c97a57f63572d86951c7.tar.gz |
hwc2: Fix GetReadbackBufferAttributes api
Fix GetReadbackBufferAttributes api to get the Dataspace from current
ColorMode of HWC Display.
CRs-Fixed: 2288505
Change-Id: I75325d21b01e517236eb3c8124c706952103ae9b
Diffstat (limited to 'sdm')
-rw-r--r-- | sdm/libs/hwc2/hwc_display.h | 1 | ||||
-rw-r--r-- | sdm/libs/hwc2/hwc_session.cpp | 31 |
2 files changed, 29 insertions, 3 deletions
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<HWCSession *>(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, |