• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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