1 /*
2 * Copyright (c) 2024 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 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 CODEC_HEIF_VDI_H
17 #define CODEC_HEIF_VDI_H
18
19 #include <vector>
20 #include "native_buffer.h"
21 #include "ashmem.h"
22 #include "v2_1/codec_image_type.h"
23 #include "buffer_helper.h"
24
25 namespace OHOS::VDI::HEIF {
26 namespace ImageHDI = OHOS::HDI::Codec::Image::V2_1;
27 struct SharedBuffer {
28 sptr<Ashmem> ashmem;
29 uint32_t filledLen;
30 };
31
ConvertSharedBuffer(const ImageHDI::SharedBuffer & src)32 inline SharedBuffer ConvertSharedBuffer(const ImageHDI::SharedBuffer& src)
33 {
34 return SharedBuffer {
35 .ashmem = sptr<Ashmem>::MakeSptr(src.fd, src.capacity),
36 .filledLen = src.filledLen,
37 };
38 }
39
40 struct ImageItem {
41 std::string itemName;
42 uint32_t id;
43 OHOS::sptr<OHOS::HDI::Base::NativeBuffer> pixelBuffer;
44 SharedBuffer pixelSharedBuffer;
45 bool isPrimary;
46 bool isHidden;
47 std::string compressType;
48 uint32_t quality;
49 std::vector<uint8_t> liteProperties;
50 SharedBuffer sharedProperties;
51 };
52
ConvertImageItem(const ImageHDI::ImageItem & src)53 inline ImageItem ConvertImageItem(const ImageHDI::ImageItem& src)
54 {
55 return ImageItem {.itemName = src.itemName, .id = src.id,
56 .pixelBuffer = OHOS::Codec::Omx::ReWrap(src.pixelBuffer, true),
57 .pixelSharedBuffer = ConvertSharedBuffer(src.pixelSharedBuffer),
58 .isPrimary = src.isPrimary,
59 .isHidden = src.isHidden,
60 .compressType = src.compressType,
61 .quality = src.quality,
62 .liteProperties = src.liteProperties,
63 .sharedProperties = ConvertSharedBuffer(src.sharedProperties),
64 };
65 }
66
67 struct MetaItem {
68 std::string itemName;
69 uint32_t id;
70 SharedBuffer data;
71 std::vector<uint8_t> properties;
72 };
73
ConvertMetaItem(const ImageHDI::MetaItem & src)74 inline MetaItem ConvertMetaItem(const ImageHDI::MetaItem& src)
75 {
76 return MetaItem {
77 .itemName = src.itemName,
78 .id = src.id,
79 .data = ConvertSharedBuffer(src.data),
80 .properties = src.properties,
81 };
82 }
83
84 #ifdef __cplusplus
85 extern "C" {
86 #endif
87
88 #define CODEC_HEIF_VDI_LIB_NAME "libheif_vdi_impl.z.so"
89
90 struct ICodecHeifHwi {
91 int32_t (*DoHeifEncode)(const std::vector<ImageItem>& inputImgs,
92 const std::vector<MetaItem>& inputMetas,
93 const std::vector<ImageHDI::ItemRef>& refs,
94 SharedBuffer& output);
95 };
96
97 struct ICodecHeifHwi *GetCodecHeifHwi(void);
98
99 #ifdef __cplusplus
100 }
101 #endif
102 } // namespace OHOS::VDI::HEIF
103 #endif /* CODEC_HEIF_VDI_H */
104