diff options
Diffstat (limited to 'gralloc/gr_buf_mgr.cpp')
-rw-r--r-- | gralloc/gr_buf_mgr.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp index f22ca6ca..703cc1e2 100644 --- a/gralloc/gr_buf_mgr.cpp +++ b/gralloc/gr_buf_mgr.cpp @@ -1109,9 +1109,16 @@ Error BufferManager::SetMetadata(private_handle_t *handle, int64_t metadatatype_ 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; } |