1 /*
2 * Copyright (C) 2021-2023 HiHope Open Source Organization .
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 "hdi_mpp_mpi.h"
17 #include <dlfcn.h>
18 #include <pthread.h>
19 #include "mpp_platform.h"
20 #include "hdf_log.h"
21
22 static void *mLibHandle = nullptr;
23 static pthread_mutex_t g_Mutex = PTHREAD_MUTEX_INITIALIZER;
GetMppAPI(RKMppApi * pMppApi)24 void GetMppAPI(RKMppApi *pMppApi)
25 {
26 pthread_mutex_lock(&g_Mutex);
27 if (mLibHandle == nullptr) {
28 mLibHandle = dlopen("librockchip_mpp.z.so", RTLD_NOW);
29 }
30 pthread_mutex_unlock(&g_Mutex);
31 if (mLibHandle == nullptr) {
32 HDF_LOGE("jkf open no\n");
33 return ;
34 }
35 HDF_LOGE("jkf open yes\n");
36 pMppApi->HdiMppCreate = (hdiMppCreate)dlsym(mLibHandle, "mpp_create");
37 pMppApi->HdiMppInit = (hdiMppInit)dlsym(mLibHandle, "mpp_init");
38 pMppApi->HdiMppStart = (hdiMppStart)dlsym(mLibHandle, "mpp_start");
39 pMppApi->HdiMppStop = (hdiMppStop)dlsym(mLibHandle, "mpp_stop");
40 pMppApi->HdiMppDestroy = (hdiMppDestroy)dlsym(mLibHandle, "mpp_destroy");
41 pMppApi->HdiMppCheckSupportFormat = \
42 (hdiMppCheckSupportFormat)dlsym(mLibHandle, "mpp_check_support_format");
43 pMppApi->HdiMppShowSupportFormat = \
44 (hdiMppShowSupportFormat)dlsym(mLibHandle, "mpp_show_support_format");
45 pMppApi->HdiMppShowColorFormat = \
46 (hdiMppShowColorFormat)dlsym(mLibHandle, "mpp_show_color_format");
47
48 pMppApi->HdiMppPacketNew = \
49 (hdiMppPacketNew)dlsym(mLibHandle, "mpp_packet_new");
50 pMppApi->HdiMppPacketInit = \
51 (hdiMppPacketInit)dlsym(mLibHandle, "mpp_packet_init");
52 pMppApi->HdiMppPacketInitWithBuffer = \
53 (hdiMppPacketInitWithBuffer)dlsym(mLibHandle, "mpp_packet_init_with_buffer");
54 pMppApi->HdiMppPacketCopyInit = \
55 (hdiMppPacketCopyInit)dlsym(mLibHandle, "mpp_packet_copy_init");
56 pMppApi->HdiMppPacketDeinit = \
57 (hdiMppPacketDeinit)dlsym(mLibHandle, "mpp_packet_deinit");
58 pMppApi->HdiMppPacketGetEos = \
59 (hdiMppPacketGetEos)dlsym(mLibHandle, "mpp_packet_get_eos");
60 pMppApi->HdiMppPacketSetEos = \
61 (hdiMppPacketSetEos)dlsym(mLibHandle, "mpp_packet_set_eos");
62 pMppApi->HdiMppPacketGetPts = \
63 (hdiMppPacketGetPts)dlsym(mLibHandle, "mpp_packet_get_pts");
64 pMppApi->HdiMppPacketSetPts = \
65 (hdiMppPacketSetPts)dlsym(mLibHandle, "mpp_packet_set_pts");
66 pMppApi->HdiMppPacketSetData = \
67 (hdiMppPacketSetData)dlsym(mLibHandle, "mpp_packet_set_data");
68 pMppApi->HdiMppPacketSetSize = \
69 (hdiMppPacketSetSize)dlsym(mLibHandle, "mpp_packet_set_size");
70 pMppApi->HdiMppPacketGetPos = \
71 (hdiMppPacketGetPos)dlsym(mLibHandle, "mpp_packet_get_pos");
72 pMppApi->HdiMppPacketSetPos = \
73 (hdiMppPacketSetPos)dlsym(mLibHandle, "mpp_packet_set_pos");
74 pMppApi->HdiMppPacketSetLength = \
75 (hdiMppPacketSetLength)dlsym(mLibHandle, "mpp_packet_set_length");
76 pMppApi->HdiMppPacketGetLength = \
77 (hdiMppPacketGetLength)dlsym(mLibHandle, "mpp_packet_get_length");
78 pMppApi->HdiMppPacketIsPartition = \
79 (hdiMppPacketIsPartition)dlsym(mLibHandle, "mpp_packet_is_partition");
80 pMppApi->HdiMppPacketIsEoi = \
81 (hdiMppPacketIsEoi)dlsym(mLibHandle, "mpp_packet_is_eoi");
82 pMppApi->HdiMppMetaSetPacket = \
83 (hdiMppMetaSetPacket)dlsym(mLibHandle, "mpp_meta_set_packet");
84
85 pMppApi->HdiMppFrameInit = \
86 (hdiMppFrameInit)dlsym(mLibHandle, "mpp_frame_init");
87 pMppApi->HdiMppFrameDeinit = \
88 (hdiMppFrameDeinit)dlsym(mLibHandle, "mpp_frame_deinit");
89 pMppApi->HdiMppFrameGetNext = \
90 (hdiMppFrameGetNext)dlsym(mLibHandle, "mpp_frame_get_next");
91 pMppApi->HdiMppFrameGetInfoChange = \
92 (hdiMppFrameGetInfoChange)dlsym(mLibHandle, "mpp_frame_get_info_change");
93 pMppApi->HdiMppFrameGetWidth = \
94 (hdiMppFrameGetWidth)dlsym(mLibHandle, "mpp_frame_get_width");
95 pMppApi->HdiMppFrameGetHeight = \
96 (hdiMppFrameGetHeight)dlsym(mLibHandle, "mpp_frame_get_height");
97 pMppApi->HdiMppFrameGetHorStride = \
98 (hdiMppFrameGetHorStride)dlsym(mLibHandle, "mpp_frame_get_hor_stride");
99 pMppApi->HdiMppFrameGetVerStride = \
100 (hdiMppFrameGetVerStride)dlsym(mLibHandle, "mpp_frame_get_ver_stride");
101 pMppApi->HdiMppFrameGetBufferSize = \
102 (hdiMppFrameGetBufferSize)dlsym(mLibHandle, "mpp_frame_get_buf_size");
103 pMppApi->HdiMppFrameGetFormat = \
104 (hdiMppFrameGetFormat)dlsym(mLibHandle, "mpp_frame_get_fmt");
105 pMppApi->HdiMppFrameGetErrinfo = \
106 (hdiMppFrameGetErrinfo)dlsym(mLibHandle, "mpp_frame_get_errinfo");
107 pMppApi->HdiMppFrameGetDiscard = \
108 (hdiMppFrameGetDiscard)dlsym(mLibHandle, "mpp_frame_get_discard");
109 pMppApi->HdiMppFrameGetBuffer = \
110 (hdiMppFrameGetBuffer)dlsym(mLibHandle, "mpp_frame_get_buffer");
111 pMppApi->HdiMppFrameSetBuffer = \
112 (hdiMppFrameSetBuffer)dlsym(mLibHandle, "mpp_frame_set_buffer");
113 pMppApi->HdiMppFrameGetEos = \
114 (hdiMppFrameGetEos)dlsym(mLibHandle, "mpp_frame_get_eos");
115 pMppApi->HdiMppFrameSetEos = \
116 (hdiMppFrameSetEos)dlsym(mLibHandle, "mpp_frame_set_eos");
117 pMppApi->HdiMppFrameSetFormat = \
118 (hdiMppFrameSetFormat)dlsym(mLibHandle, "mpp_frame_set_fmt");
119 pMppApi->HdiMppFrameSetWidth = \
120 (hdiMppFrameSetWidth)dlsym(mLibHandle, "mpp_frame_set_width");
121 pMppApi->HdiMppFrameSetHeight = \
122 (hdiMppFrameSetHeight)dlsym(mLibHandle, "mpp_frame_set_height");
123 pMppApi->HdiMppFrameSetHorStride = \
124 (hdiMppFrameSetHorStride)dlsym(mLibHandle, "mpp_frame_set_hor_stride");
125 pMppApi->HdiMppFrameSetVerStride = \
126 (hdiMppFrameSetVerStride)dlsym(mLibHandle, "mpp_frame_set_ver_stride");
127 pMppApi->HdiMppFrameGetMeta = \
128 (hdiMppFrameGetMeta)dlsym(mLibHandle, "mpp_frame_get_meta");
129
130 pMppApi->HdiMppDecCfgInit = \
131 (hdiMppDecCfgInit)dlsym(mLibHandle, "mpp_dec_cfg_init");
132 pMppApi->HdiMppDecCfgDeinit = \
133 (hdiMppDecCfgDeinit)dlsym(mLibHandle, "mpp_dec_cfg_deinit");
134 pMppApi->HdiMppDecCfgSetU32 = \
135 (hdiMppDecCfgSetU32)dlsym(mLibHandle, "mpp_dec_cfg_set_u32");
136
137 pMppApi->HdiMppEncCfgInit = \
138 (hdiMppEncCfgInit)dlsym(mLibHandle, "mpp_enc_cfg_init");
139 pMppApi->HdiMppEncCfgDeinit = \
140 (hdiMppEncCfgDeinit)dlsym(mLibHandle, "mpp_enc_cfg_deinit");
141 pMppApi->HdiMppEncCfgSetS32 = \
142 (hdiMppEncCfgSetS32)dlsym(mLibHandle, "mpp_enc_cfg_set_s32");
143 pMppApi->HdiMppEncCfgSetU32 = \
144 (hdiMppEncCfgSetU32)dlsym(mLibHandle, "mpp_enc_cfg_set_u32");
145 pMppApi->HdiMppEncRefCfgInit = \
146 (hdiMppEncRefCfgInit)dlsym(mLibHandle, "mpp_enc_ref_cfg_init");
147 pMppApi->HdiMppEncRefCfgDeinit = \
148 (hdiMppEncRefCfgDeinit)dlsym(mLibHandle, "mpp_enc_ref_cfg_deinit");
149 pMppApi->HdiMppEncGenRefCfg = \
150 (hdiMppEncGenRefCfg)dlsym(mLibHandle, "mpi_enc_gen_ref_cfg");
151 pMppApi->HdiMppEncGenSmartGopRefCfg = \
152 (hdiMppEncGenSmartGopRefCfg)dlsym(mLibHandle, "mpi_enc_gen_smart_gop_ref_cfg");
153
154 pMppApi->HdiMppBufferGroupGet = \
155 (hdiMppBufferGroupGet)dlsym(mLibHandle, "mpp_buffer_group_get");
156 pMppApi->HdiMppBufferGroupPut = \
157 (hdiMppBufferGroupPut)dlsym(mLibHandle, "mpp_buffer_group_put");
158 pMppApi->HdiMppBufferGroupClear = \
159 (hdiMppBufferGroupClear)dlsym(mLibHandle, "mpp_buffer_group_clear");
160 pMppApi->HdiMppBufferGroupLimitConfig = \
161 (hdiMppBufferGroupLimitConfig)dlsym(mLibHandle, "mpp_buffer_group_limit_config");
162 pMppApi->HdiMppBufferGetFdWithCaller = \
163 (hdiMppBufferGetFdWithCaller)dlsym(mLibHandle, "mpp_buffer_get_fd_with_caller");
164 pMppApi->HdiMppBufferGetWithTag = \
165 (hdiMppBufferGetWithTag)dlsym(mLibHandle, "mpp_buffer_get_with_tag");
166 pMppApi->HdiMppBufferGetPtrWithCaller = \
167 (hdiMppBufferGetPtrWithCaller)dlsym(mLibHandle, "mpp_buffer_get_ptr_with_caller");
168 pMppApi->HdiMppBufferGroupUsage = \
169 (hdiMppBufferGroupUsage)dlsym(mLibHandle, "mpp_buffer_group_usage");
170 pMppApi->HdiMppBufferPutWithCaller = \
171 (hdiMppBufferPutWithCaller)dlsym(mLibHandle, "mpp_buffer_put_with_caller");
172
173 pMppApi->HdiMppTaskMetaGetPacket = \
174 (hdiMppTaskMetaGetPacket)dlsym(mLibHandle, "mpp_task_meta_get_packet");
175
176 pMppApi->HdiMppEnvGetU32 = \
177 (hdiMppEnvGetU32)dlsym(mLibHandle, "mpp_env_get_u32");
178
179 pMppApi->Hdimpp_get_vcodec_dev_name = \
180 (hdimpp_get_vcodec_dev_name)dlsym(mLibHandle, "mpp_get_vcodec_dev_name");
181 pMppApi->Hdimpp_get_ioctl_version = \
182 (hdimpp_get_ioctl_version)dlsym(mLibHandle, "mpp_get_ioctl_version");
183 pMppApi->Hdimpp_get_vcodec_type = \
184 (hdimpp_get_vcodec_type)dlsym(mLibHandle, "mpp_get_vcodec_type");
185 pMppApi->Hdimpp_osal_calloc = \
186 (hdimpp_osal_calloc)dlsym(mLibHandle, "mpp_osal_calloc");
187 pMppApi->Hdimpp_get_soc_name = \
188 (hdimpp_get_soc_name)dlsym(mLibHandle, "mpp_get_soc_name");
189 pMppApi->Hdimpp_osal_free = \
190 (hdimpp_osal_free)dlsym(mLibHandle, "mpp_osal_free");
191 pMppApi->Hdimpp_packet_set_extra_data = \
192 (hdimpp_packet_set_extra_data)dlsym(mLibHandle, "mpp_packet_set_extra_data");
193 pMppApi->Hdimpp_frame_get_color_primaries = \
194 (hdimpp_frame_get_color_primaries)dlsym(mLibHandle, "mpp_frame_get_color_primaries");
195 pMppApi->Hdimpp_frame_get_color_trc = \
196 (hdimpp_frame_get_color_trc)dlsym(mLibHandle, "mpp_frame_get_color_trc");
197 pMppApi->Hdimpp_frame_get_color_range = \
198 (hdimpp_frame_get_color_range)dlsym(mLibHandle, "mpp_frame_get_color_range");
199 pMppApi->Hdimpp_frame_get_mode = \
200 (hdimpp_frame_get_mode)dlsym(mLibHandle, "mpp_frame_get_mode");
201 pMppApi->Hdimpp_osal_malloc = \
202 (hdimpp_osal_malloc)dlsym(mLibHandle, "mpp_osal_malloc");
203 pMppApi->Hdimpp_buffer_get_size_with_caller = \
204 (hdimpp_buffer_get_size_with_caller)dlsym(mLibHandle, "mpp_buffer_get_size_with_caller");
205 pMppApi->Hdimpp_frame_set_pts = \
206 (hdimpp_frame_set_pts)dlsym(mLibHandle, "mpp_frame_set_pts");
207 pMppApi->Hdimpp_meta_get_s32 = \
208 (hdimpp_meta_get_s32)dlsym(mLibHandle, "mpp_meta_get_s32");
209 pMppApi->Hdimpp_packet_get_meta = \
210 (hdimpp_packet_get_meta)dlsym(mLibHandle, "mpp_packet_get_meta");
211 pMppApi->Hdimpp_enc_ref_cfg_set_keep_cpb = \
212 (hdimpp_enc_ref_cfg_set_keep_cpb)dlsym(mLibHandle, "mpp_enc_ref_cfg_set_keep_cpb");
213 pMppApi->Hdimpp_enc_ref_cfg_add_st_cfg = \
214 (hdimpp_enc_ref_cfg_add_st_cfg)dlsym(mLibHandle, "mpp_enc_ref_cfg_add_st_cfg");
215 pMppApi->Hdimpp_enc_ref_cfg_add_lt_cfg = \
216 (hdimpp_enc_ref_cfg_add_lt_cfg)dlsym(mLibHandle, "mpp_enc_ref_cfg_add_lt_cfg");
217 pMppApi->Hdimpp_enc_ref_cfg_set_cfg_cnt = \
218 (hdimpp_enc_ref_cfg_set_cfg_cnt)dlsym(mLibHandle, "mpp_enc_ref_cfg_set_cfg_cnt");
219 pMppApi->Hdimpp_buffer_group_unused = \
220 (hdimpp_buffer_group_unused)dlsym(mLibHandle, "mpp_buffer_group_unused");
221 pMppApi->Hdimpp_enc_ref_cfg_check = \
222 (hdimpp_enc_ref_cfg_check)dlsym(mLibHandle, "mpp_enc_ref_cfg_check");
223 pMppApi->Hdimpp_frame_get_colorspace = \
224 (hdimpp_frame_get_colorspace)dlsym(mLibHandle, "mpp_frame_get_colorspace");
225 pMppApi->Hdimpp_meta_set_s32 = \
226 (hdimpp_meta_set_s32)dlsym(mLibHandle, "mpp_meta_set_s32");
227 pMppApi->Hdimpp_buffer_inc_ref_with_caller = \
228 (hdimpp_buffer_inc_ref_with_caller)dlsym(mLibHandle, "mpp_buffer_inc_ref_with_caller");
229 pMppApi->Hdimpp_task_meta_get_frame = \
230 (hdimpp_task_meta_get_frame)dlsym(mLibHandle, "mpp_task_meta_get_frame");
231 pMppApi->Hdimpp_task_meta_set_frame = \
232 (hdimpp_task_meta_set_frame)dlsym(mLibHandle, "mpp_task_meta_set_frame");
233 pMppApi->Hdimpp_task_meta_set_packet = \
234 (hdimpp_task_meta_set_packet)dlsym(mLibHandle, "mpp_task_meta_set_packet");
235 pMppApi->Hdimpp_frame_get_poc = \
236 (hdimpp_frame_get_poc)dlsym(mLibHandle, "mpp_frame_get_poc");
237 pMppApi->Hdimpp_packet_get_data = \
238 (hdimpp_packet_get_data)dlsym(mLibHandle, "mpp_packet_get_data");
239 pMppApi->Hdimpp_frame_get_pts = \
240 (hdimpp_frame_get_pts)dlsym(mLibHandle, "mpp_frame_get_pts");
241 pMppApi->Hdimpp_buffer_import_with_tag = \
242 (hdimpp_buffer_import_with_tag)dlsym(mLibHandle, "mpp_buffer_import_with_tag");
243 }
244
ReleaseMppAPI()245 void ReleaseMppAPI()
246 {
247 pthread_mutex_lock(&g_Mutex);
248 if (mLibHandle != nullptr) {
249 dlclose(mLibHandle);
250 mLibHandle = nullptr;
251 }
252 pthread_mutex_unlock(&g_Mutex);
253 }
254