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;
     }