diff options
author | Praveen Chavan <pchavan@codeaurora.org> | 2021-02-23 18:53:38 -0800 |
---|---|---|
committer | Joey Lin <linjoey@google.com> | 2022-03-27 16:37:43 +0000 |
commit | 1d00252c7744c50f9f2f87f999e8ead3d9203317 (patch) | |
tree | 125fc5b7edd09cbf2d231fc4321ae41a1d2d9114 | |
parent | cc221d70eae96f696fbccfb3091eb7b3b5d62bab (diff) | |
download | display-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.cpp | 57 | ||||
-rw-r--r-- | gralloc/gr_utils.cpp | 4 |
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; |