summaryrefslogtreecommitdiff
path: root/sdm/libs/hwc2/hwc_layers.cpp
diff options
context:
space:
mode:
authorBaldev Sahu <bsahu@codeaurora.org>2019-11-05 14:59:03 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2020-03-25 23:37:27 -0700
commit76229cc49e41b3b84d7f66615812bb81af1bf640 (patch)
tree26c08ca4f433498d3e3143c93f54877070c2417d /sdm/libs/hwc2/hwc_layers.cpp
parente21c4336a29e8cbfb6cb3fbb4952cc8b63b70581 (diff)
hwc2: Handle reading color metadata
- Read HDR static metadata and HDR10plus datas from color metadata, and dataspace from SF. - If dataspace is UNKNOWN, get dataspace from gralloc metadata. Change-Id: Ice9200fd042264d76b99b5dd2d583a705bb20009 CRs-Fixed: 2523925
Diffstat (limited to 'sdm/libs/hwc2/hwc_layers.cpp')
-rw-r--r--sdm/libs/hwc2/hwc_layers.cpp34
1 files changed, 19 insertions, 15 deletions
diff --git a/sdm/libs/hwc2/hwc_layers.cpp b/sdm/libs/hwc2/hwc_layers.cpp
index c43f3ac1..a8c1926e 100644
--- a/sdm/libs/hwc2/hwc_layers.cpp
+++ b/sdm/libs/hwc2/hwc_layers.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright 2015 The Android Open Source Project
@@ -957,31 +957,35 @@ void HWCLayer::ValidateAndSetCSC(const private_handle_t *handle) {
}
}
- // Only Video module populates the Color Metadata in handle.
- if (layer_buffer->flags.video && IsBT2020(layer_buffer->color_metadata.colorPrimaries)) {
+ if (IsBT2020(layer_buffer->color_metadata.colorPrimaries)) {
// android_dataspace_t doesnt support mastering display and light levels
// so retrieve it from metadata for BT2020(HDR)
use_color_metadata = true;
}
- // Since client has set PerFrameMetadata, dataspace will be valid
- // so we can skip reading from ColorMetaData.
if (use_color_metadata && !per_frame_hdr_metadata_) {
- ColorMetaData old_meta_data = layer_buffer->color_metadata;
- if (sdm::SetCSC(handle, &layer_buffer->color_metadata) == kErrorNone) {
- if ((layer_buffer->color_metadata.colorPrimaries != old_meta_data.colorPrimaries) ||
- (layer_buffer->color_metadata.transfer != old_meta_data.transfer) ||
- (layer_buffer->color_metadata.range != old_meta_data.range)) {
+ ColorMetaData new_metadata = {};
+ if (sdm::SetCSC(handle, &new_metadata) == kErrorNone) {
+ // If dataspace is KNOWN, overwrite the gralloc metadata CSC using the previously derived CSC
+ // from dataspace.
+ if (dataspace_ != HAL_DATASPACE_UNKNOWN) {
+ new_metadata.colorPrimaries = layer_buffer->color_metadata.colorPrimaries;
+ new_metadata.transfer = layer_buffer->color_metadata.transfer;
+ new_metadata.range = layer_buffer->color_metadata.range;
+ }
+ if ((layer_buffer->color_metadata.colorPrimaries != new_metadata.colorPrimaries) ||
+ (layer_buffer->color_metadata.transfer != new_metadata.transfer) ||
+ (layer_buffer->color_metadata.range != new_metadata.range)) {
layer_->update_mask.set(kMetadataUpdate);
}
- DLOGV_IF(kTagClient, "Dynamic Metadata valid = %d size = %d",
- layer_buffer->color_metadata.dynamicMetaDataValid,
- layer_buffer->color_metadata.dynamicMetaDataLen);
- if (layer_buffer->color_metadata.dynamicMetaDataValid &&
+ if (new_metadata.dynamicMetaDataValid &&
!SameConfig(layer_buffer->color_metadata.dynamicMetaDataPayload,
- old_meta_data.dynamicMetaDataPayload, HDR_DYNAMIC_META_DATA_SZ)) {
+ new_metadata.dynamicMetaDataPayload, HDR_DYNAMIC_META_DATA_SZ)) {
layer_->update_mask.set(kMetadataUpdate);
}
+ if (layer_->update_mask.test(kMetadataUpdate)) {
+ layer_buffer->color_metadata = new_metadata;
+ }
} else {
dataspace_supported_ = false;
return;