• 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 "buffer_log.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             BLOGW("MetadataHelper::ConvertMetadataToVec memcpy_s failed");
39             return GSERROR_API_FAILED;
40         }
41         return GSERROR_OK;
42     }
43 
44     template <typename T>
ConvertVecToMetadata(const std::vector<uint8_t> & data,T & metadata)45     static GSError ConvertVecToMetadata(const std::vector<uint8_t>& data, T& metadata)
46     {
47         if (data.size() != sizeof(T)) {
48             BLOGW("MetadataHelper::ConvertMetadataToVec metadata size doesn't match");
49             return GSERROR_NOT_SUPPORT;
50         }
51 
52         if (memcpy_s(&metadata, sizeof(T), data.data(), data.size()) != EOK) {
53             BLOGW("MetadataHelper::ConvertMetadataToVec memcpy_s failed");
54             return GSERROR_API_FAILED;
55         }
56         return GSERROR_OK;
57     }
58 
59     static GSError ConvertColorSpaceTypeToInfo(
60         const HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceType& colorSpaceType,
61         HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceInfo& colorSpaceInfo);
62     static GSError ConvertColorSpaceInfoToType(
63         const HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceInfo& colorSpaceInfo,
64         HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceType& colorSpaceType);
65 
66     static GSError SetColorSpaceInfo(sptr<SurfaceBuffer>& buffer,
67         const HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceInfo& colorSpaceInfo);
68     static GSError GetColorSpaceInfo(const sptr<SurfaceBuffer>& buffer,
69         HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceInfo& colorSpaceInfo);
70 
71     static GSError SetColorSpaceType(sptr<SurfaceBuffer>& buffer,
72         const HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceType& colorSpaceType);
73     static GSError GetColorSpaceType(const sptr<SurfaceBuffer>& buffer,
74         HDI::Display::Graphic::Common::V1_0::CM_ColorSpaceType& colorSpaceType);
75 
76     static GSError SetHDRMetadataType(sptr<SurfaceBuffer>& buffer,
77         const HDI::Display::Graphic::Common::V1_0::CM_HDR_Metadata_Type& hdrMetadataType);
78     static GSError GetHDRMetadataType(const sptr<SurfaceBuffer>& buffer,
79         HDI::Display::Graphic::Common::V1_0::CM_HDR_Metadata_Type& hdrMetadataType);
80 
81     static GSError SetHDRStaticMetadata(sptr<SurfaceBuffer>& buffer,
82         const HDI::Display::Graphic::Common::V1_0::HdrStaticMetadata& hdrStaticMetadata);
83     static GSError GetHDRStaticMetadata(const sptr<SurfaceBuffer>& buffer,
84         HDI::Display::Graphic::Common::V1_0::HdrStaticMetadata& hdrStaticMetadata);
85 
86     static GSError SetHDRDynamicMetadata(sptr<SurfaceBuffer>& buffer, const std::vector<uint8_t>& hdrDynamicMetadata);
87     static GSError GetHDRDynamicMetadata(const sptr<SurfaceBuffer>& buffer, std::vector<uint8_t>& hdrDynamicMetadata);
88 
89     static GSError SetHDRStaticMetadata(sptr<SurfaceBuffer>& buffer, const std::vector<uint8_t>& hdrStaticMetadata);
90     static GSError GetHDRStaticMetadata(const sptr<SurfaceBuffer>& buffer, std::vector<uint8_t>& hdrStaticMetadata);
91 
92 private:
93     static constexpr uint32_t PRIMARIES_MASK =
94         static_cast<uint32_t>(HDI::Display::Graphic::Common::V1_0::CM_PRIMARIES_MASK);
95     static constexpr uint32_t TRANSFUNC_MASK =
96         static_cast<uint32_t>(HDI::Display::Graphic::Common::V1_0::CM_TRANSFUNC_MASK);
97     static constexpr uint32_t MATRIX_MASK =
98         static_cast<uint32_t>(HDI::Display::Graphic::Common::V1_0::CM_MATRIX_MASK);
99     static constexpr uint32_t RANGE_MASK =
100         static_cast<uint32_t>(HDI::Display::Graphic::Common::V1_0::CM_RANGE_MASK);
101     static constexpr uint32_t TRANSFUNC_OFFSET = 8;
102     static constexpr uint32_t MATRIX_OFFSET = 16;
103     static constexpr uint32_t RANGE_OFFSET = 21;
104 };
105 } // namespace OHOS
106 
107 #endif // FRAMEWORKS_SURFACE_INCLUDE_METADATA_MANAGER_H