summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPraveen Chavan <pchavan@codeaurora.org>2021-02-23 18:53:38 -0800
committerJoey Lin <linjoey@google.com>2022-03-27 16:37:43 +0000
commit1d00252c7744c50f9f2f87f999e8ead3d9203317 (patch)
tree125fc5b7edd09cbf2d231fc4321ae41a1d2d9114
parentcc221d70eae96f696fbccfb3091eb7b3b5d62bab (diff)
downloaddisplay-1d00252c7744c50f9f2f87f999e8ead3d9203317.tar.gz
gralloc: describe layout for VENUS P010
Bug:221389002 Change-Id: I00bb840e8b2f2485008f707e9a713528cd21e257 Signed-off-by: linjoey <linjoey@google.com> (cherry picked from commit 26ddb95e10a1c35fa92165c12b7ce8e6523d9241)
-rw-r--r--gralloc/gr_buf_mgr.cpp57
-rw-r--r--gralloc/gr_utils.cpp4
2 files changed, 57 insertions, 4 deletions
diff --git a/gralloc/gr_buf_mgr.cpp b/gralloc/gr_buf_mgr.cpp
index 1674058c..00e425cf 100644
--- a/gralloc/gr_buf_mgr.cpp
+++ b/gralloc/gr_buf_mgr.cpp
@@ -558,10 +558,26 @@ static Error getComponentSizeAndOffset(int32_t format, PlaneLayoutComponent &com
}
break;
case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCbCr_420_P010):
+ ALOGE("GetComponentLayout HAL_PIXEL_FORMAT_YCbCr_420_P010");
if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_Y.value ||
- comp.type.value == android::gralloc4::PlaneLayoutComponentType_CB.value ||
- comp.type.value == android::gralloc4::PlaneLayoutComponentType_CR.value) {
- comp.offsetInBits = 0;
+ comp.type.value == android::gralloc4::PlaneLayoutComponentType_CB.value) {
+ comp.offsetInBits = 6;
+ comp.sizeInBits = 10;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_CR.value) {
+ comp.offsetInBits = 22;
+ comp.sizeInBits = 10;
+ } else {
+ return Error::BAD_VALUE;
+ }
+ break;
+ case static_cast<int32_t>(HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS):
+ ALOGE("GetComponentLayout HAL_PIXEL_FORMAT_YCbCr_420_P010_VENUS");
+ if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_Y.value ||
+ comp.type.value == android::gralloc4::PlaneLayoutComponentType_CB.value) {
+ comp.offsetInBits = 6;
+ comp.sizeInBits = 10;
+ } else if (comp.type.value == android::gralloc4::PlaneLayoutComponentType_CR.value) {
+ comp.offsetInBits = 22;
comp.sizeInBits = 10;
} else {
return Error::BAD_VALUE;
@@ -1321,6 +1337,20 @@ Error BufferManager::GetMetadata(private_handle_t *handle, int64_t metadatatype_
}
break;
}
+ case (int64_t)StandardMetadataType::SMPTE2094_10: {
+ if (metadata->color.dynamicMetaDataValid &&
+ metadata->color.dynamicMetaDataLen <= HDR_DYNAMIC_META_DATA_SZ) {
+ std::vector<uint8_t> dynamic_metadata_payload;
+ dynamic_metadata_payload.resize(metadata->color.dynamicMetaDataLen);
+ dynamic_metadata_payload.assign(
+ metadata->color.dynamicMetaDataPayload,
+ metadata->color.dynamicMetaDataPayload + metadata->color.dynamicMetaDataLen);
+ android::gralloc4::encodeSmpte2094_10(dynamic_metadata_payload, out);
+ } else {
+ android::gralloc4::encodeSmpte2094_10(std::nullopt, out);
+ }
+ break;
+ }
case (int64_t)StandardMetadataType::CROP: {
// Crop is the same for all planes
std::vector<Rect> out_crop = {{metadata->crop.left, metadata->crop.top, metadata->crop.right,
@@ -1546,6 +1576,27 @@ Error BufferManager::SetMetadata(private_handle_t *handle, int64_t metadatatype_
}
break;
}
+ case (int64_t)StandardMetadataType::SMPTE2094_10: {
+ std::optional<std::vector<uint8_t>> dynamic_metadata_payload;
+ android::gralloc4::decodeSmpte2094_10(in, &dynamic_metadata_payload);
+ if (dynamic_metadata_payload != std::nullopt) {
+ if (dynamic_metadata_payload->size() > HDR_DYNAMIC_META_DATA_SZ)
+ return Error::BAD_VALUE;
+
+ metadata->color.dynamicMetaDataLen = static_cast<uint32_t>(dynamic_metadata_payload->size());
+ std::copy(dynamic_metadata_payload->begin(), dynamic_metadata_payload->end(),
+ metadata->color.dynamicMetaDataPayload);
+ metadata->color.dynamicMetaDataValid = true;
+ } else {
+ // Reset metadata by passing in std::nullopt
+#ifdef METADATA_V2
+ metadata->isStandardMetadataSet[GET_STANDARD_METADATA_STATUS_INDEX(metadatatype_value)] =
+ false;
+#endif
+ metadata->color.dynamicMetaDataValid = false;
+ }
+ break;
+ }
case (int64_t)StandardMetadataType::CROP: {
std::vector<Rect> in_crop;
android::gralloc4::decodeCrop(in, &in_crop);
diff --git a/gralloc/gr_utils.cpp b/gralloc/gr_utils.cpp
index 86159a69..f96928c2 100644
--- a/gralloc/gr_utils.cpp
+++ b/gralloc/gr_utils.cpp
@@ -1456,8 +1456,10 @@ int GetYUVPlaneInfo(const BufferInfo &info, int32_t format, int32_t width, int32
GetYuvSubSamplingFactor(format, &h_subsampling, &v_subsampling);
plane_info[0].h_subsampling = 0;
plane_info[0].v_subsampling = 0;
+ plane_info[0].step = 2;
plane_info[1].h_subsampling = h_subsampling;
plane_info[1].v_subsampling = v_subsampling;
+ plane_info[1].step = 4;
break;
case HAL_PIXEL_FORMAT_YCbCr_420_TP10_UBWC:
@@ -1508,7 +1510,7 @@ int GetYUVPlaneInfo(const BufferInfo &info, int32_t format, int32_t width, int32
plane_info[0].stride_bytes = static_cast<int32_t>(y_stride);
plane_info[0].scanlines = static_cast<int32_t>(y_height);
plane_info[0].size = static_cast<uint32_t>(y_size);
- plane_info[0].step = 1;
+ plane_info[0].step = 2;
plane_info[0].h_subsampling = 0;
plane_info[0].v_subsampling = 0;