sdm:fb: update cdm csc_type during HDR playback
The CSC matrix used in CDM block should be updated to
BT2020 format from default value during HDR playback.
CRs-Fixed: 2115066
Change-Id: I358608e68cdd2553a168e4bfc2bfdc968a0945ec
diff --git a/sdm/libs/core/fb/hw_hdmi.cpp b/sdm/libs/core/fb/hw_hdmi.cpp
index c69e615..e1d7ba1 100644
--- a/sdm/libs/core/fb/hw_hdmi.cpp
+++ b/sdm/libs/core/fb/hw_hdmi.cpp
@@ -190,6 +190,7 @@
(void)hdr_reset_start_;
(void)hdr_reset_end_;
(void)reset_hdr_flag_;
+ (void)cdm_color_space_;
}
DisplayError HWHDMI::Init() {
@@ -440,8 +441,19 @@
if (error != kErrorNone) {
return error;
}
+ if (cdm_color_space_commit_) {
+#ifdef MDP_COMMIT_UPDATE_CDM_COLOR_SPACE
+ mdp_layer_commit_v1 &mdp_commit = mdp_disp_commit_.commit_v1;
+ mdp_commit.cdm_color_space = cdm_color_space_;
+ mdp_commit.flags |= MDP_COMMIT_UPDATE_CDM_COLOR_SPACE;
+#endif
+ }
- return HWDevice::Commit(hw_layers);
+ error = HWDevice::Commit(hw_layers);
+ if (cdm_color_space_commit_)
+ cdm_color_space_commit_ = false;
+
+ return error;
}
DisplayError HWHDMI::GetHWScanInfo(HWScanInfo *scan_info) {
@@ -1032,6 +1044,10 @@
hdr_ctrl.hdr_stream.max_average_light_level = light_level.minPicAverageLightLevel;
hdr_ctrl.hdr_state = HDR_ENABLE;
reset_hdr_flag_ = false;
+#ifdef MDP_COMMIT_UPDATE_CDM_COLOR_SPACE
+ HWDevice::SetCSC(layer_buffer->color_metadata, &cdm_color_space_);
+ cdm_color_space_commit_ = true;
+#endif
// DP related
int32_t pixel_encoding = GetPixelEncoding(hdr_layer.input_buffer);
hdr_ctrl.hdr_stream.pixel_encoding = (pixel_encoding < 0) ? 0 : UINT32(pixel_encoding);
@@ -1063,6 +1079,10 @@
hdr_ctrl.hdr_state = HDR_RESET;
reset_hdr_flag_ = true;
hdr_reset_start_ = time(NULL);
+#ifdef MDP_COMMIT_UPDATE_CDM_COLOR_SPACE
+ cdm_color_space_ = (mdp_color_space) MDP_CSC_DEFAULT;
+ cdm_color_space_commit_ = true;
+#endif
DLOGV_IF(kTagDriverConfig, "kReset: HDR Stream: HDR_RESET");
} else if (hdr_layer_info.operation == HWHDRLayerInfo::kNoOp) {
if (reset_hdr_flag_) {
diff --git a/sdm/libs/core/fb/hw_hdmi.h b/sdm/libs/core/fb/hw_hdmi.h
index 80d289a..183e9db 100644
--- a/sdm/libs/core/fb/hw_hdmi.h
+++ b/sdm/libs/core/fb/hw_hdmi.h
@@ -121,6 +121,8 @@
uint32_t frame_rate_ = 0;
time_t hdr_reset_start_ = 0, hdr_reset_end_ = 0;
bool reset_hdr_flag_ = false;
+ mdp_color_space cdm_color_space_ = {};
+ bool cdm_color_space_commit_ = false;
};
} // namespace sdm