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 OHOS_HDI_DISPLAY_V1_0_IDISPLAY_BUFFER_VDI_H 17 #define OHOS_HDI_DISPLAY_V1_0_IDISPLAY_BUFFER_VDI_H 18 19 #include <vector> 20 #include "buffer_handle.h" 21 #include "v1_2/display_buffer_type.h" 22 23 namespace OHOS { 24 namespace HDI { 25 namespace Display { 26 namespace Buffer { 27 namespace V1_0 { 28 29 #ifdef BUFFER_VDI_DEFAULT_LIBRARY_ENABLE 30 #define DISPLAY_BUFFER_VDI_DEFAULT_LIBRARY "libdisplay_buffer_vdi_impl_default.z.so" 31 #endif // BUFFER_VDI_DEFAULT_LIBRARY_ENABLE 32 #define DISPLAY_BUFFER_VDI_LIBRARY "libdisplay_buffer_vdi_impl.z.so" 33 34 class IDisplayBufferVdi { 35 public: 36 virtual ~IDisplayBufferVdi() = default; 37 38 /** 39 * @brief Allocates memory based on the parameters passed by the GUI. 40 * 41 * @param info Indicates the description of the memory to allocate. 42 * 43 * @param handle Indicates the pointer to the buffer of the memory to allocate. 44 * 45 * @return Returns <b>0</b> if the operation is successful; returns an error code defined in {@link DispErrCode} 46 * otherwise. 47 * @since 1.0 48 * @version 1.0 49 */ 50 virtual int32_t AllocMem(const AllocInfo& info, BufferHandle*& handle) const = 0; 51 52 /** 53 * @brief Releases memory. 54 * 55 * @param handle Indicates the reference to the buffer of the memory to release. 56 * 57 * @since 1.0 58 * @version 1.0 59 */ 60 virtual void FreeMem(const BufferHandle& handle) const = 0; 61 62 /** 63 * @brief Maps memory to memory without cache in the process's address space. 64 * 65 * @param handle Indicates the reference to the buffer of the memory to map. 66 * 67 * @return Returns the pointer to a valid address if the operation is successful; returns <b>NULL</b> otherwise. 68 * @since 1.0 69 * @version 1.0 70 */ 71 virtual void *Mmap(const BufferHandle& handle) const = 0; 72 73 /** 74 * @brief Unmaps memory, that is, removes mappings from the process's address space. 75 * 76 * @param handle Indicates the reference to the buffer of the memory to unmap. 77 * 78 * @return Returns <b>0</b> if the operation is successful; returns an error code defined in {@link DispErrCode} 79 * otherwise. 80 * @since 1.0 81 * @version 1.0 82 */ 83 virtual int32_t Unmap(const BufferHandle& handle) const = 0; 84 85 /** 86 * @brief Flushes data from the cache to memory and invalidates the data in the cache. 87 * 88 * @param handle Indicates the reference to the buffer of the cache to flush. 89 * 90 * @return Returns <b>0</b> if the operation is successful; returns an error code defined in {@link DispErrCode} 91 * otherwise. 92 * @since 1.0 93 * @version 1.0 94 */ 95 virtual int32_t FlushCache(const BufferHandle& handle) const = 0; 96 97 /** 98 * @brief Invalidates the cache to update it from memory. 99 * 100 * @param handle Indicates the reference to the buffer of the cache, which will be invalidated. 101 * 102 * @return Returns <b>0</b> if the operation is successful; returns an error code defined in {@link DispErrCode} 103 * otherwise. 104 * @since 1.0 105 * @version 1.0 106 */ 107 virtual int32_t InvalidateCache(const BufferHandle& handle) const = 0; 108 109 /** 110 * @brief Checks whether the given VerifyAllocInfo array is allocatable. 111 * 112 * @param infos Indicates the VerifyAllocInfo array. 113 * @param supporteds Indicates whether the array is allocatable. 114 * 115 * @return Returns <b>0</b> if the operation is successful; returns an error code defined in {@link DispErrCode} 116 * otherwise. 117 * @since 1.0 118 * @version 1.0 119 */ 120 virtual int32_t IsSupportedAlloc( 121 const std::vector<VerifyAllocInfo>& infos, std::vector<bool>& supporteds) const = 0; 122 RegisterBuffer(const BufferHandle & handle)123 virtual int32_t RegisterBuffer(const BufferHandle& handle) 124 { 125 return 0; 126 } 127 SetMetadata(const BufferHandle & handle,uint32_t key,const std::vector<uint8_t> & value)128 virtual int32_t SetMetadata(const BufferHandle& handle, uint32_t key, const std::vector<uint8_t>& value) 129 { 130 return 0; 131 } 132 GetMetadata(const BufferHandle & handle,uint32_t key,std::vector<uint8_t> & value)133 virtual int32_t GetMetadata(const BufferHandle& handle, uint32_t key, std::vector<uint8_t>& value) 134 { 135 return 0; 136 } 137 ListMetadataKeys(const BufferHandle & handle,std::vector<uint32_t> & keys)138 virtual int32_t ListMetadataKeys(const BufferHandle& handle, std::vector<uint32_t>& keys) 139 { 140 return 0; 141 } 142 EraseMetadataKey(const BufferHandle & handle,uint32_t key)143 virtual int32_t EraseMetadataKey(const BufferHandle& handle, uint32_t key) 144 { 145 return 0; 146 } 147 GetImageLayout(const BufferHandle & handle,V1_2::ImageLayout & layout)148 virtual int32_t GetImageLayout(const BufferHandle& handle, V1_2::ImageLayout& layout) const 149 { 150 return 0; 151 } 152 }; 153 154 using CreateDisplayBufferVdiFunc = IDisplayBufferVdi* (*)(); 155 using DestroyDisplayBufferVdiFunc = void (*)(IDisplayBufferVdi* vdi); 156 extern "C" IDisplayBufferVdi* CreateDisplayBufferVdi(); 157 extern "C" void DestroyDisplayBufferVdi(IDisplayBufferVdi* vdi); 158 } // namespace V1_0 159 } // namespace Buffer 160 } // namespace Display 161 } // namespace HDI 162 } // namespace OHOS 163 164 #endif // OHOS_HDI_DISPLAY_V1_0_IDISPLAY_BUFFER_VDI_H 165