• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "metadata_helper.h"
17 
18 #include "v1_0/buffer_handle_meta_key_type.h"
19 
20 using namespace OHOS::HDI::Display::Graphic::Common::V1_0;
21 
22 namespace OHOS {
ConvertColorSpaceTypeToInfo(const CM_ColorSpaceType & colorSpaceType,CM_ColorSpaceInfo & colorSpaceInfo)23 GSError MetadataHelper::ConvertColorSpaceTypeToInfo(const CM_ColorSpaceType& colorSpaceType,
24     CM_ColorSpaceInfo& colorSpaceInfo)
25 {
26     uint32_t colorSpace = static_cast<uint32_t>(colorSpaceType);
27     colorSpaceInfo.primaries = static_cast<CM_ColorPrimaries>(colorSpace & PRIMARIES_MASK);
28     colorSpaceInfo.transfunc = static_cast<CM_TransFunc>((colorSpace & TRANSFUNC_MASK) >> TRANSFUNC_OFFSET);
29     colorSpaceInfo.matrix = static_cast<CM_Matrix>((colorSpace & MATRIX_MASK) >> MATRIX_OFFSET);
30     colorSpaceInfo.range = static_cast<CM_Range>((colorSpace & RANGE_MASK) >> RANGE_OFFSET);
31     return GSERROR_OK;
32 }
33 
ConvertColorSpaceInfoToType(const CM_ColorSpaceInfo & colorSpaceInfo,CM_ColorSpaceType & colorSpaceType)34 GSError MetadataHelper::ConvertColorSpaceInfoToType(const CM_ColorSpaceInfo& colorSpaceInfo,
35     CM_ColorSpaceType& colorSpaceType)
36 {
37     uint32_t primaries = static_cast<uint32_t>(colorSpaceInfo.primaries);
38     uint32_t transfunc = static_cast<uint32_t>(colorSpaceInfo.transfunc);
39     uint32_t matrix = static_cast<uint32_t>(colorSpaceInfo.matrix);
40     uint32_t range = static_cast<uint32_t>(colorSpaceInfo.range);
41     colorSpaceType = static_cast<CM_ColorSpaceType>(primaries | (transfunc << TRANSFUNC_OFFSET) |
42         (matrix << MATRIX_OFFSET) | (range << RANGE_OFFSET));
43 
44     return GSERROR_OK;
45 }
46 
SetColorSpaceInfo(sptr<SurfaceBuffer> & buffer,const CM_ColorSpaceInfo & colorSpaceInfo)47 GSError MetadataHelper::SetColorSpaceInfo(sptr<SurfaceBuffer>& buffer, const CM_ColorSpaceInfo& colorSpaceInfo)
48 {
49     std::vector<uint8_t> colorSpaceInfoVec;
50     auto ret = ConvertMetadataToVec(colorSpaceInfo, colorSpaceInfoVec);
51     if (ret != GSERROR_OK) {
52         BLOGW("MetadataHelper::SetColorSpaceInfo ConvertMetadataToVec failed, return value is %{public}d", ret);
53         return ret;
54     }
55     return buffer->SetMetadata(ATTRKEY_COLORSPACE_INFO, colorSpaceInfoVec);
56 }
57 
GetColorSpaceInfo(const sptr<SurfaceBuffer> & buffer,CM_ColorSpaceInfo & colorSpaceInfo)58 GSError MetadataHelper::GetColorSpaceInfo(const sptr<SurfaceBuffer>& buffer, CM_ColorSpaceInfo& colorSpaceInfo)
59 {
60     std::vector<uint8_t> colorSpaceInfoVec;
61     auto ret = buffer->GetMetadata(ATTRKEY_COLORSPACE_INFO, colorSpaceInfoVec);
62     if (ret != GSERROR_OK) {
63         BLOGW("MetadataHelper::GetColorSpaceInfo GetMetadata failed, return value is %{public}d", ret);
64         return ret;
65     }
66     return ConvertVecToMetadata(colorSpaceInfoVec, colorSpaceInfo);
67 }
68 
SetColorSpaceType(sptr<SurfaceBuffer> & buffer,const CM_ColorSpaceType & colorSpaceType)69 GSError MetadataHelper::SetColorSpaceType(sptr<SurfaceBuffer>& buffer, const CM_ColorSpaceType& colorSpaceType)
70 {
71     CM_ColorSpaceInfo colorSpaceInfo;
72     auto ret = ConvertColorSpaceTypeToInfo(colorSpaceType, colorSpaceInfo);
73     if (ret != GSERROR_OK) {
74         BLOGW("MetadataHelper::SetColorSpaceType ConvertColorSpaceTypeToInfo failed, return value is %{public}d", ret);
75         return ret;
76     }
77     return SetColorSpaceInfo(buffer, colorSpaceInfo);
78 }
79 
GetColorSpaceType(const sptr<SurfaceBuffer> & buffer,CM_ColorSpaceType & colorSpaceType)80 GSError MetadataHelper::GetColorSpaceType(const sptr<SurfaceBuffer>& buffer, CM_ColorSpaceType& colorSpaceType)
81 {
82     CM_ColorSpaceInfo colorSpaceInfo;
83     auto ret = GetColorSpaceInfo(buffer, colorSpaceInfo);
84     if (ret != GSERROR_OK) {
85         BLOGW("MetadataHelper::GetColorSpaceType GetColorSpaceInfo failed, return value is %{public}d", ret);
86         return ret;
87     }
88     return ConvertColorSpaceInfoToType(colorSpaceInfo, colorSpaceType);
89 }
90 
SetHDRMetadataType(sptr<SurfaceBuffer> & buffer,const CM_HDR_Metadata_Type & hdrMetadataType)91 GSError MetadataHelper::SetHDRMetadataType(sptr<SurfaceBuffer>& buffer, const CM_HDR_Metadata_Type& hdrMetadataType)
92 {
93     std::vector<uint8_t> hdrMetadataTypeVec;
94     auto ret = ConvertMetadataToVec(hdrMetadataType, hdrMetadataTypeVec);
95     if (ret != GSERROR_OK) {
96         BLOGW("MetadataHelper::SetHDRMetadataType ConvertMetadataToVec failed, return value is %{public}d", ret);
97         return ret;
98     }
99     return buffer->SetMetadata(ATTRKEY_HDR_METADATA_TYPE, hdrMetadataTypeVec);
100 }
101 
GetHDRMetadataType(const sptr<SurfaceBuffer> & buffer,CM_HDR_Metadata_Type & hdrMetadataType)102 GSError MetadataHelper::GetHDRMetadataType(const sptr<SurfaceBuffer>& buffer, CM_HDR_Metadata_Type& hdrMetadataType)
103 {
104     std::vector<uint8_t> hdrMetadataTypeVec;
105     auto ret = buffer->GetMetadata(ATTRKEY_HDR_METADATA_TYPE, hdrMetadataTypeVec);
106     if (ret != GSERROR_OK) {
107         BLOGW("MetadataHelper::GetHDRMetadataType GetMetadata failed, return value is %{public}d", ret);
108         return ret;
109     }
110     return ConvertVecToMetadata(hdrMetadataTypeVec, hdrMetadataType);
111 }
112 
SetHDRStaticMetadata(sptr<SurfaceBuffer> & buffer,const HdrStaticMetadata & hdrStaticMetadata)113 GSError MetadataHelper::SetHDRStaticMetadata(sptr<SurfaceBuffer>& buffer,
114     const HdrStaticMetadata& hdrStaticMetadata)
115 {
116     std::vector<uint8_t> hdrStaticMetadataVec;
117     auto ret = ConvertMetadataToVec(hdrStaticMetadata, hdrStaticMetadataVec);
118     if (ret != GSERROR_OK) {
119         BLOGW("MetadataHelper::SetHDRStaticMetadata ConvertMetadataToVec failed, return value is %{public}d", ret);
120         return ret;
121     }
122     return buffer->SetMetadata(ATTRKEY_HDR_STATIC_METADATA, hdrStaticMetadataVec);
123 }
124 
GetHDRStaticMetadata(const sptr<SurfaceBuffer> & buffer,HdrStaticMetadata & hdrStaticMetadata)125 GSError MetadataHelper::GetHDRStaticMetadata(const sptr<SurfaceBuffer>& buffer,
126     HdrStaticMetadata& hdrStaticMetadata)
127 {
128     std::vector<uint8_t> hdrStaticMetadataVec;
129     auto ret = buffer->GetMetadata(ATTRKEY_HDR_STATIC_METADATA, hdrStaticMetadataVec);
130     if (ret != GSERROR_OK) {
131         BLOGW("MetadataHelper::GetHDRStaticMetadata GetMetadata failed, return value is %{public}d", ret);
132         return ret;
133     }
134     return ConvertVecToMetadata(hdrStaticMetadataVec, hdrStaticMetadata);
135 }
136 
SetHDRDynamicMetadata(sptr<SurfaceBuffer> & buffer,const std::vector<uint8_t> & hdrDynamicMetadata)137 GSError MetadataHelper::SetHDRDynamicMetadata(sptr<SurfaceBuffer>& buffer,
138     const std::vector<uint8_t>& hdrDynamicMetadata)
139 {
140     return buffer->SetMetadata(ATTRKEY_HDR_DYNAMIC_METADATA, hdrDynamicMetadata);
141 }
142 
GetHDRDynamicMetadata(const sptr<SurfaceBuffer> & buffer,std::vector<uint8_t> & hdrDynamicMetadata)143 GSError MetadataHelper::GetHDRDynamicMetadata(const sptr<SurfaceBuffer>& buffer,
144     std::vector<uint8_t>& hdrDynamicMetadata)
145 {
146     return buffer->GetMetadata(ATTRKEY_HDR_DYNAMIC_METADATA, hdrDynamicMetadata);
147 }
148 
SetHDRStaticMetadata(sptr<SurfaceBuffer> & buffer,const std::vector<uint8_t> & hdrStaticMetadata)149 GSError MetadataHelper::SetHDRStaticMetadata(sptr<SurfaceBuffer>& buffer,
150     const std::vector<uint8_t>& hdrStaticMetadata)
151 {
152     return buffer->SetMetadata(ATTRKEY_HDR_STATIC_METADATA, hdrStaticMetadata);
153 }
154 
GetHDRStaticMetadata(const sptr<SurfaceBuffer> & buffer,std::vector<uint8_t> & hdrStaticMetadata)155 GSError MetadataHelper::GetHDRStaticMetadata(const sptr<SurfaceBuffer>& buffer,
156     std::vector<uint8_t>& hdrStaticMetadata)
157 {
158     return buffer->GetMetadata(ATTRKEY_HDR_STATIC_METADATA, hdrStaticMetadata);
159 }
160 } // namespace OHOS