gralloc: Set dynamicMetaDataValid for SMPTE2094_40
The dynamicMetaDataValid flag needs to be set or reset in
SetMetadata() to indicate if the dynamic metadata is useable. This
change was required because GetMetadata() for SMPTE2094_40 was
returning std::nullopt, as the flag was not being set.
CRs-Fixed: 2648631
Change-Id: Ic0dbc6043f94b9848ebf1d17aa81faf9e9754a5e
diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp
index f22ca6c..703cc1e 100644
--- a/gralloc/gr_buf_mgr.cpp
+++ b/gralloc/gr_buf_mgr.cpp
@@ -1109,9 +1109,16 @@
std::optional<std::vector<uint8_t>> dynamic_metadata_payload;
android::gralloc4::decodeSmpte2094_40(in, &dynamic_metadata_payload);
if (dynamic_metadata_payload != std::nullopt) {
- metadata->color.dynamicMetaDataLen = static_cast<uint32_t>(dynamic_metadata_payload->size());
- memcpy(&metadata->color.dynamicMetaDataPayload, &dynamic_metadata_payload,
- metadata->color.dynamicMetaDataLen);
+ if (dynamic_metadata_payload->size() <= HDR_DYNAMIC_META_DATA_SZ &&
+ dynamic_metadata_payload->size() > 0) {
+ metadata->color.dynamicMetaDataLen = static_cast<uint32_t>(dynamic_metadata_payload->size());
+ memcpy(&metadata->color.dynamicMetaDataPayload, &dynamic_metadata_payload,
+ metadata->color.dynamicMetaDataLen);
+ metadata->color.dynamicMetaDataValid = true;
+ }
+ } else {
+ // Reset metadata by passing in std::nullopt
+ metadata->color.dynamicMetaDataValid = false;
}
break;
}