• 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 #ifndef FRAMEWORKS_SURFACE_INCLUDE_METADATA_MANAGER_H
17 #define FRAMEWORKS_SURFACE_INCLUDE_METADATA_MANAGER_H
18 
19 #include <vector>
20 
21 #include <securec.h>
22 
23 #include "graphic_common.h"
24 #include "surface_buffer.h"
25 #include "v1_0/cm_color_space.h"
26 #include "v1_0/hdr_static_metadata.h"
27 #include "v1_0/buffer_handle_meta_key_type.h"
28 
29 namespace OHOS {
30 class MetadataHelper {
31 public:
32     // GSERROR_OK for success, GSERROR_API_FAILED for fail
33     template <typename T>
ConvertMetadataToVec(const T & metadata,std::vector<uint8_t> & data)34     static GSError ConvertMetadataToVec(const T& metadata, std::vector<uint8_t>& data)
35     {
36         data.resize(sizeof(T));
37         if (memcpy_s(data.data(), data.size(), &metadata, sizeof(T)) != EOK) {
38             return GSERROR_API_FAILED;
39         }
40         return GSERROR_OK;
41     }
42 
43     template <typename T>
ConvertVecToMetadata(const std::vector<uint8_t> & data,T & metadata)44     static GSError ConvertVecToMetadata(const std::vector<uint8_t>& data, T& metadata)
45     {
46         if (data.size() != sizeof(T)) {
47             return GSERROR_NOT_SUPPORT;
48         }
49 
50         if (memcpy_s(&metadata, sizeof(T), data.data(), data.size()) != EOK) {
51             return GSERROR_API_FAILED;
52         }
53         return GSERROR_OK;
54     }
55 
56     static GSError ConvertColorSpaceTypeToInfo(
57         const HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceType& colorSpaceType,
58         HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceInfo& colorSpaceInfo);
59     static GSError ConvertColorSpaceInfoToType(
60         const HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceInfo& colorSpaceInfo,
61         HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceType& colorSpaceType);
62 
63     static GSError SetColorSpaceInfo(sptr<SurfaceBuffer>& buffer,
64         const HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceInfo& colorSpaceInfo);
65     static GSError GetColorSpaceInfo(const sptr<SurfaceBuffer>& buffer,
66         HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceInfo& colorSpaceInfo);
67 
68     static GSError SetColorSpaceType(sptr<SurfaceBuffer>& buffer,
69         const HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceType& colorSpaceType);
70     static GSError GetColorSpaceType(const sptr<SurfaceBuffer>& buffer,
71         HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceType& colorSpaceType);
72 
73     static GSError SetHDRMetadataType(sptr<SurfaceBuffer>& buffer,
74         const HDI::Display::Graphic::Common::V1_0::CM_HDR_Metadata_Type& hdrMetadataType);
75     static GSError GetHDRMetadataType(const sptr<SurfaceBuffer>& buffer,
76         HDI::Display::Graphic::Common::V1_0::CM_HDR_Metadata_Type& hdrMetadataType);
77 
78     static GSError SetHDRStaticMetadata(sptr<SurfaceBuffer>& buffer,
79         const HDI::Display::Graphic::Common::V1_0::HdrStaticMetadata& hdrStaticMetadata);
80     static GSError GetHDRStaticMetadata(const sptr<SurfaceBuffer>& buffer,
81         HDI::Display::Graphic::Common::V1_0::HdrStaticMetadata& hdrStaticMetadata);
82 
83     static GSError SetHDRDynamicMetadata(sptr<SurfaceBuffer>& buffer, const std::vector<uint8_t>& hdrDynamicMetadata);
84     static GSError GetHDRDynamicMetadata(const sptr<SurfaceBuffer>& buffer, std::vector<uint8_t>& hdrDynamicMetadata);
85 
86     static GSError SetHDRStaticMetadata(sptr<SurfaceBuffer>& buffer, const std::vector<uint8_t>& hdrStaticMetadata);
87     static GSError GetHDRStaticMetadata(const sptr<SurfaceBuffer>& buffer, std::vector<uint8_t>& hdrStaticMetadata);
88 
89     static GSError GetCropRectMetadata(const sptr<SurfaceBuffer>& buffer,
90         HDI::Display::Graphic::Common::V1_0::BufferHandleMetaRegion& crop);
91 private:
92     static constexpr uint32_t PRIMARIES_MASK =
93         static_cast<uint32_t>(HDI::Display::Graphic::Common::V1_0::CM_PRIMARIES_MASK);
94     static constexpr uint32_t TRANSFUNC_MASK =
95         static_cast<uint32_t>(HDI::Display::Graphic::Common::V1_0::CM_TRANSFUNC_MASK);
96     static constexpr uint32_t MATRIX_MASK =
97         static_cast<uint32_t>(HDI::Display::Graphic::Common::V1_0::CM_MATRIX_MASK);
98     static constexpr uint32_t RANGE_MASK =
99         static_cast<uint32_t>(HDI::Display::Graphic::Common::V1_0::CM_RANGE_MASK);
100     static constexpr uint32_t TRANSFUNC_OFFSET = 8;
101     static constexpr uint32_t MATRIX_OFFSET = 16;
102     static constexpr uint32_t RANGE_OFFSET = 21;
103 };
104 } // namespace OHOS
105 
106 #endif // FRAMEWORKS_SURFACE_INCLUDE_METADATA_MANAGER_H