/* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "metadata_helper.h" #include "buffer_log.h" #include "v1_0/buffer_handle_meta_key_type.h" using namespace OHOS::HDI::Display::Graphic::Common::V1_0; namespace OHOS { GSError MetadataHelper::ConvertColorSpaceTypeToInfo(const CM_ColorSpaceType& colorSpaceType, CM_ColorSpaceInfo& colorSpaceInfo) { uint32_t colorSpace = static_cast(colorSpaceType); colorSpaceInfo.primaries = static_cast(colorSpace & PRIMARIES_MASK); colorSpaceInfo.transfunc = static_cast((colorSpace & TRANSFUNC_MASK) >> TRANSFUNC_OFFSET); colorSpaceInfo.matrix = static_cast((colorSpace & MATRIX_MASK) >> MATRIX_OFFSET); colorSpaceInfo.range = static_cast((colorSpace & RANGE_MASK) >> RANGE_OFFSET); return GSERROR_OK; } GSError MetadataHelper::ConvertColorSpaceInfoToType(const CM_ColorSpaceInfo& colorSpaceInfo, CM_ColorSpaceType& colorSpaceType) { uint32_t primaries = static_cast(colorSpaceInfo.primaries); uint32_t transfunc = static_cast(colorSpaceInfo.transfunc); uint32_t matrix = static_cast(colorSpaceInfo.matrix); uint32_t range = static_cast(colorSpaceInfo.range); colorSpaceType = static_cast(primaries | (transfunc << TRANSFUNC_OFFSET) | (matrix << MATRIX_OFFSET) | (range << RANGE_OFFSET)); return GSERROR_OK; } GSError MetadataHelper::SetColorSpaceInfo(sptr& buffer, const CM_ColorSpaceInfo& colorSpaceInfo) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } std::vector colorSpaceInfoVec; auto ret = ConvertMetadataToVec(colorSpaceInfo, colorSpaceInfoVec); if (ret != GSERROR_OK) { return ret; } return buffer->SetMetadata(ATTRKEY_COLORSPACE_INFO, colorSpaceInfoVec); } GSError MetadataHelper::GetColorSpaceInfo(const sptr& buffer, CM_ColorSpaceInfo& colorSpaceInfo) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } std::vector colorSpaceInfoVec; auto ret = buffer->GetMetadata(ATTRKEY_COLORSPACE_INFO, colorSpaceInfoVec); if (ret != GSERROR_OK) { return ret; } return ConvertVecToMetadata(colorSpaceInfoVec, colorSpaceInfo); } GSError MetadataHelper::SetColorSpaceType(sptr& buffer, const CM_ColorSpaceType& colorSpaceType) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } CM_ColorSpaceInfo colorSpaceInfo; auto ret = ConvertColorSpaceTypeToInfo(colorSpaceType, colorSpaceInfo); if (ret != GSERROR_OK) { return ret; } return SetColorSpaceInfo(buffer, colorSpaceInfo); } GSError MetadataHelper::GetColorSpaceType(const sptr& buffer, CM_ColorSpaceType& colorSpaceType) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } CM_ColorSpaceInfo colorSpaceInfo; auto ret = GetColorSpaceInfo(buffer, colorSpaceInfo); if (ret != GSERROR_OK) { return ret; } return ConvertColorSpaceInfoToType(colorSpaceInfo, colorSpaceType); } GSError MetadataHelper::SetHDRMetadataType(sptr& buffer, const CM_HDR_Metadata_Type& hdrMetadataType) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } std::vector hdrMetadataTypeVec; auto ret = ConvertMetadataToVec(hdrMetadataType, hdrMetadataTypeVec); if (ret != GSERROR_OK) { return ret; } return buffer->SetMetadata(ATTRKEY_HDR_METADATA_TYPE, hdrMetadataTypeVec); } GSError MetadataHelper::GetHDRMetadataType(const sptr& buffer, CM_HDR_Metadata_Type& hdrMetadataType) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } std::vector hdrMetadataTypeVec; auto ret = buffer->GetMetadata(ATTRKEY_HDR_METADATA_TYPE, hdrMetadataTypeVec); if (ret != GSERROR_OK) { return ret; } return ConvertVecToMetadata(hdrMetadataTypeVec, hdrMetadataType); } GSError MetadataHelper::SetHDRStaticMetadata(sptr& buffer, const HdrStaticMetadata& hdrStaticMetadata) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } std::vector hdrStaticMetadataVec; auto ret = ConvertMetadataToVec(hdrStaticMetadata, hdrStaticMetadataVec); if (ret != GSERROR_OK) { return ret; } return buffer->SetMetadata(ATTRKEY_HDR_STATIC_METADATA, hdrStaticMetadataVec); } GSError MetadataHelper::GetHDRStaticMetadata(const sptr& buffer, HdrStaticMetadata& hdrStaticMetadata) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } std::vector hdrStaticMetadataVec; auto ret = buffer->GetMetadata(ATTRKEY_HDR_STATIC_METADATA, hdrStaticMetadataVec); if (ret != GSERROR_OK) { return ret; } return ConvertVecToMetadata(hdrStaticMetadataVec, hdrStaticMetadata); } GSError MetadataHelper::SetHDRDynamicMetadata(sptr& buffer, const std::vector& hdrDynamicMetadata) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } return buffer->SetMetadata(ATTRKEY_HDR_DYNAMIC_METADATA, hdrDynamicMetadata); } GSError MetadataHelper::GetHDRDynamicMetadata(const sptr& buffer, std::vector& hdrDynamicMetadata) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } return buffer->GetMetadata(ATTRKEY_HDR_DYNAMIC_METADATA, hdrDynamicMetadata); } GSError MetadataHelper::SetHDRStaticMetadata(sptr& buffer, const std::vector& hdrStaticMetadata) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } return buffer->SetMetadata(ATTRKEY_HDR_STATIC_METADATA, hdrStaticMetadata); } GSError MetadataHelper::GetHDRStaticMetadata(const sptr& buffer, std::vector& hdrStaticMetadata) { if (buffer == nullptr) { return GSERROR_NO_BUFFER; } return buffer->GetMetadata(ATTRKEY_HDR_STATIC_METADATA, hdrStaticMetadata); } } // namespace OHOS