summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author williamtai <williamtai@google.com> 2019-09-09 10:08:22 +0800
committer William Tai <williamtai@google.com> 2019-09-20 00:32:58 +0000
commite409e38f7a874d02c5900f201ba38ca94837aea6 (patch)
tree7b44ebabe1504f2c0c7d6ee53bf146e99462bbd8
parent323d89081945901f6aeba4845a8e1f376ee4ab47 (diff)
libgui: Set HDR metadataSize data type as uint32_t
sizeof(metadataSize) is different in 32-bit or 64-bit mode if data type of metadataSize is size_t. Fix metadataSize in uint32_t for flatten and unflatten. In addition, we take hdr10plus array element size into consideration when allocate memoery for flatten and unflatten. b/127370432 Test: check size of metadataSize in flatten and unflatten in hdr10plus playback. Test: Check hdr10plus array content when array element size is non-uint8_t such as uint32_t. Change-Id: Id7a415887b43c440e3f23ea2f6b201d45271c160
-rw-r--r--libs/gui/HdrMetadata.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/libs/gui/HdrMetadata.cpp b/libs/gui/HdrMetadata.cpp
index add3ef0458..058cd9aa3b 100644
--- a/libs/gui/HdrMetadata.cpp
+++ b/libs/gui/HdrMetadata.cpp
@@ -28,8 +28,8 @@ size_t HdrMetadata::getFlattenedSize() const {
size += sizeof(cta8613);
}
if (validTypes & HDR10PLUS) {
- size += sizeof(size_t);
- size += hdr10plus.size();
+ size += sizeof(uint32_t);
+ size += hdr10plus.size() * sizeof(hdr10plus[0]);
}
return size;
}
@@ -47,10 +47,11 @@ status_t HdrMetadata::flatten(void* buffer, size_t size) const {
FlattenableUtils::write(buffer, size, cta8613);
}
if (validTypes & HDR10PLUS) {
- size_t metadataSize = hdr10plus.size();
+ uint32_t metadataSize = hdr10plus.size();
FlattenableUtils::write(buffer, size, metadataSize);
- memcpy(buffer, hdr10plus.data(), metadataSize);
- FlattenableUtils::advance(buffer, size, metadataSize);
+ size_t metadataSizeinByte = metadataSize * sizeof(hdr10plus[0]);
+ memcpy(buffer, hdr10plus.data(), metadataSizeinByte);
+ FlattenableUtils::advance(buffer, size, metadataSizeinByte);
}
return NO_ERROR;
@@ -74,20 +75,21 @@ status_t HdrMetadata::unflatten(void const* buffer, size_t size) {
FlattenableUtils::read(buffer, size, cta8613);
}
if (validTypes & HDR10PLUS) {
- if (size < sizeof(size_t)) {
+ if (size < sizeof(uint32_t)) {
return NO_MEMORY;
}
- size_t metadataSize;
+ uint32_t metadataSize;
FlattenableUtils::read(buffer, size, metadataSize);
- if (size < metadataSize) {
+ size_t metadataSizeinByte = metadataSize * sizeof(hdr10plus[0]);
+ if (size < metadataSizeinByte) {
return NO_MEMORY;
}
hdr10plus.resize(metadataSize);
- memcpy(hdr10plus.data(), buffer, metadataSize);
- FlattenableUtils::advance(buffer, size, metadataSize);
+ memcpy(hdr10plus.data(), buffer, metadataSizeinByte);
+ FlattenableUtils::advance(buffer, size, metadataSizeinByte);
}
return NO_ERROR;