summaryrefslogtreecommitdiff
path: root/sdm
diff options
context:
space:
mode:
authorSushil Chauhan <sushilchauhan@codeaurora.org>2018-07-31 15:34:48 -0700
committerSushil Chauhan <sushilchauhan@codeaurora.org>2018-07-31 16:59:26 -0700
commit10f89aa047782f864d13c97a57f63572d86951c7 (patch)
tree7a94229a83a3da132efb3dad6c22823c09b77e2f /sdm
parent48914be37ead63484532b6cce2be6acf211ecca0 (diff)
downloaddisplay-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.h1
-rw-r--r--sdm/libs/hwc2/hwc_session.cpp31
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,