1 /*
2  * Copyright (C) 2021 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 #ifndef CODEC_MPP_HDI_MPI_H
17 #define CODEC_MPP_HDI_MPI_H
18 
19 #include "rk_mpi.h"
20 #include "mpp_platform.h"
21 
22 // mpp base api
23 typedef MPP_RET (*hdiMppCreate)(MppCtx *, MppApi **);
24 typedef MPP_RET (*hdiMppInit)(MppCtx, MppCtxType, MppCodingType);
25 typedef MPP_RET (*hdiMppStart)(MppCtx);
26 typedef MPP_RET (*hdiMppStop)(MppCtx);
27 typedef MPP_RET (*hdiMppDestroy)(MppCtx);
28 typedef MPP_RET (*hdiMppCheckSupportFormat)(MppCtxType, MppCodingType);
29 typedef void (*hdiMppShowSupportFormat)(void);
30 typedef void (*hdiMppShowColorFormat)(void);
31 // mpp packet api
32 typedef MPP_RET (*hdiMppPacketNew)(MppPacket *);
33 typedef MPP_RET (*hdiMppPacketInit)(MppPacket *, void *, size_t);
34 typedef MPP_RET (*hdiMppPacketInitWithBuffer)(MppPacket *, MppBuffer);
35 typedef MPP_RET (*hdiMppPacketCopyInit)(MppPacket *, const MppPacket);
36 typedef MPP_RET (*hdiMppPacketDeinit)(MppPacket*);
37 typedef RK_U32  (*hdiMppPacketGetEos)(MppPacket);
38 typedef MPP_RET (*hdiMppPacketSetEos)(MppPacket);
39 typedef RK_S64  (*hdiMppPacketGetPts)(const MppPacket);
40 typedef void    (*hdiMppPacketSetPts)(MppPacket, RK_S64);
41 typedef void    (*hdiMppPacketSetData)(MppPacket, void *);
42 typedef void    (*hdiMppPacketSetSize)(MppPacket, size_t);
43 typedef void*   (*hdiMppPacketGetPos)(const MppPacket);
44 typedef void    (*hdiMppPacketSetPos)(MppPacket, void *);
45 typedef void    (*hdiMppPacketSetLength)(MppPacket, size_t);
46 typedef size_t  (*hdiMppPacketGetLength)(const MppPacket);
47 typedef RK_U32  (*hdiMppPacketIsPartition)(const MppPacket);
48 typedef RK_U32  (*hdiMppPacketIsEoi)(const MppPacket);
49 typedef MPP_RET (*hdiMppMetaSetPacket)(MppMeta, MppMetaKey, MppPacket);
50 // mpp frame api
51 typedef MPP_RET (*hdiMppFrameInit)(MppFrame*);
52 typedef MPP_RET (*hdiMppFrameDeinit)(MppFrame*);
53 typedef MppFrame (*hdiMppFrameGetNext)(MppFrame);
54 typedef RK_U32 (*hdiMppFrameGetInfoChange)(MppFrame);
55 typedef RK_U32 (*hdiMppFrameGetWidth)(MppFrame);
56 typedef RK_U32 (*hdiMppFrameGetHeight)(MppFrame);
57 typedef RK_U32 (*hdiMppFrameGetHorStride)(MppFrame);
58 typedef RK_U32 (*hdiMppFrameGetVerStride)(MppFrame);
59 typedef RK_U32 (*hdiMppFrameGetBufferSize)(MppFrame);
60 typedef MppFrameFormat (*hdiMppFrameGetFormat)(MppFrame);
61 typedef RK_U32 (*hdiMppFrameGetErrinfo)(const MppFrame);
62 typedef RK_U32 (*hdiMppFrameGetDiscard)(const MppFrame);
63 typedef MppBuffer (*hdiMppFrameGetBuffer)(const MppFrame);
64 typedef void (*hdiMppFrameSetBuffer)(MppFrame, MppBuffer);
65 typedef RK_U32 (*hdiMppFrameGetEos)(const MppFrame);
66 typedef void (*hdiMppFrameSetEos)(const MppFrame, RK_U32);
67 typedef void (*hdiMppFrameSetFormat)(MppFrame, MppFrameFormat);
68 typedef void (*hdiMppFrameSetWidth)(MppFrame, RK_U32);
69 typedef void (*hdiMppFrameSetHeight)(MppFrame, RK_U32);
70 typedef void (*hdiMppFrameSetHorStride)(MppFrame, RK_U32);
71 typedef void (*hdiMppFrameSetVerStride)(MppFrame, RK_U32);
72 typedef MppMeta (*hdiMppFrameGetMeta)(const MppFrame);
73 // mpp dec config api
74 typedef MPP_RET (*hdiMppDecCfgDeinit)(MppDecCfg *);
75 typedef MPP_RET (*hdiMppDecCfgInit)(MppDecCfg *);
76 typedef MPP_RET (*hdiMppDecCfgSetU32)(MppDecCfg, const char *, RK_U32);
77 // mpp enc config api
78 typedef MPP_RET (*hdiMppEncCfgInit)(MppEncCfg *);
79 typedef MPP_RET (*hdiMppEncCfgDeinit)(MppEncCfg);
80 typedef MPP_RET (*hdiMppEncCfgSetS32)(MppEncCfg, const char *, RK_S32);
81 typedef MPP_RET (*hdiMppEncCfgSetU32)(MppEncCfg, const char *, RK_U32);
82 typedef MPP_RET (*hdiMppEncRefCfgInit)(MppEncRefCfg *);
83 typedef MPP_RET (*hdiMppEncRefCfgDeinit)(MppEncRefCfg *);
84 typedef MPP_RET (*hdiMppEncGenRefCfg)(MppEncRefCfg, RK_U32);
85 typedef MPP_RET (*hdiMppEncGenSmartGopRefCfg)(MppEncRefCfg, RK_U32, RK_S32);
86 // mpp buffer group api
87 typedef MPP_RET (*hdiMppBufferGroupGet)(MppBufferGroup *, MppBufferType, MppBufferMode, const char *, const char *);
88 typedef MPP_RET (*hdiMppBufferGroupPut)(MppBufferGroup);
89 typedef MPP_RET (*hdiMppBufferGroupClear)(MppBufferGroup);
90 typedef MPP_RET (*hdiMppBufferGroupLimitConfig)(MppBufferGroup, size_t, RK_S32);
91 typedef int (*hdiMppBufferGetFdWithCaller)(MppBuffer buffer, const char *caller);
92 typedef MPP_RET (*hdiMppBufferGetWithTag)(MppBufferGroup, MppBuffer *, size_t, const char *, const char *);
93 typedef void* (*hdiMppBufferGetPtrWithCaller)(MppBuffer, const char *);
94 typedef size_t (*hdiMppBufferGroupUsage)(MppBufferGroup);
95 typedef MPP_RET (*hdiMppBufferPutWithCaller)(MppBuffer, const char *);
96 // mpp task api
97 typedef MPP_RET (*hdiMppTaskMetaGetPacket)(MppTask task, MppMetaKey key, MppPacket *packet);
98 // mpp env api
99 typedef RK_S32 (*hdiMppEnvGetU32)(const char *, RK_U32 *, RK_U32);
100 typedef char* (*hdimpp_get_vcodec_dev_name)(MppCtxType type, MppCodingType coding);
101 typedef MppIoctlVersion (*hdimpp_get_ioctl_version)(void);
102 typedef RK_U32 (*hdimpp_get_vcodec_type)(void);
103 typedef void* (*hdimpp_osal_calloc)(const char *caller, size_t size);
104 typedef char* (*hdimpp_get_soc_name)(void);
105 typedef void (*hdimpp_osal_free)(const char *caller, void *ptr);
106 typedef MPP_RET (*hdimpp_packet_set_extra_data)(MppPacket packet);
107 typedef MppFrameColorPrimaries (*hdimpp_frame_get_color_primaries)(const MppFrame frame);
108 typedef MppFrameColorTransferCharacteristic (*hdimpp_frame_get_color_trc)(const MppFrame frame);
109 typedef MppFrameColorRange (*hdimpp_frame_get_color_range)(const MppFrame frame);
110 typedef RK_U32  (*hdimpp_frame_get_mode)(const MppFrame frame);
111 typedef void* (*hdimpp_osal_malloc)(const char *caller, size_t size);
112 typedef size_t (*hdimpp_buffer_get_size_with_caller)(MppBuffer buffer, const char *caller);
113 typedef void (*hdimpp_frame_set_pts)(MppFrame frame, RK_S64 pts);
114 typedef MPP_RET (*hdimpp_meta_get_s32)(MppMeta meta, MppMetaKey key, RK_S32 *val);
115 typedef MppMeta (*hdimpp_packet_get_meta)(const MppPacket packet);
116 typedef MPP_RET (*hdimpp_enc_ref_cfg_set_keep_cpb)(MppEncRefCfg ref, RK_S32 keep);
117 typedef MPP_RET (*hdimpp_enc_ref_cfg_add_st_cfg)(MppEncRefCfg ref, RK_S32 cnt, MppEncRefStFrmCfg *frm);
118 typedef MPP_RET (*hdimpp_enc_ref_cfg_add_lt_cfg)(MppEncRefCfg ref, RK_S32 cnt, MppEncRefLtFrmCfg *frm);
119 typedef MPP_RET (*hdimpp_enc_ref_cfg_set_cfg_cnt)(MppEncRefCfg ref, RK_S32 lt_cnt, RK_S32 st_cnt);
120 typedef RK_S32  (*hdimpp_buffer_group_unused)(MppBufferGroup group);
121 typedef MPP_RET (*hdimpp_enc_ref_cfg_check)(MppEncRefCfg ref);
122 typedef MppFrameColorSpace (*hdimpp_frame_get_colorspace)(const MppFrame frame);
123 typedef MPP_RET (*hdimpp_meta_set_s32)(MppMeta meta, MppMetaKey key, RK_S32 val);
124 typedef MPP_RET (*hdimpp_buffer_inc_ref_with_caller)(MppBuffer buffer, const char *caller);
125 typedef MPP_RET (*hdimpp_task_meta_get_frame)(MppTask task, MppMetaKey key, MppFrame *frame);
126 typedef MPP_RET (*hdimpp_task_meta_set_frame)(MppTask task, MppMetaKey key, MppFrame frame);
127 typedef MPP_RET (*hdimpp_task_meta_set_packet)(MppTask task, MppMetaKey key, MppPacket packet);
128 typedef RK_U32  (*hdimpp_frame_get_poc)(const MppFrame frame);
129 typedef void*   (*hdimpp_packet_get_data)(const MppPacket packet);
130 typedef RK_S64  (*hdimpp_frame_get_pts)(const MppFrame frame);
131 typedef MPP_RET (*hdimpp_buffer_import_with_tag)(MppBufferGroup group, MppBufferInfo *info, MppBuffer *buffer,
132                                    const char *tag, const char *caller);
133 
134 typedef struct {
135     // mpp base api
136     hdiMppCreate HdiMppCreate;
137     hdiMppInit HdiMppInit;
138     hdiMppStart HdiMppStart;
139     hdiMppStop HdiMppStop;
140     hdiMppDestroy HdiMppDestroy;
141     hdiMppCheckSupportFormat HdiMppCheckSupportFormat;
142     hdiMppShowSupportFormat HdiMppShowSupportFormat;
143     hdiMppShowColorFormat HdiMppShowColorFormat;
144     // mpp packet api
145     hdiMppPacketNew HdiMppPacketNew;
146     hdiMppPacketInit HdiMppPacketInit;
147     hdiMppPacketInitWithBuffer HdiMppPacketInitWithBuffer;
148     hdiMppPacketCopyInit HdiMppPacketCopyInit;
149     hdiMppPacketDeinit HdiMppPacketDeinit;
150     hdiMppPacketGetEos HdiMppPacketGetEos;
151     hdiMppPacketSetEos HdiMppPacketSetEos;
152     hdiMppPacketGetPts HdiMppPacketGetPts;
153     hdiMppPacketSetPts HdiMppPacketSetPts;
154     hdiMppPacketSetData HdiMppPacketSetData;
155     hdiMppPacketSetSize HdiMppPacketSetSize;
156     hdiMppPacketGetPos HdiMppPacketGetPos;
157     hdiMppPacketSetPos HdiMppPacketSetPos;
158     hdiMppPacketSetLength HdiMppPacketSetLength;
159     hdiMppPacketGetLength HdiMppPacketGetLength;
160     hdiMppPacketIsPartition HdiMppPacketIsPartition;
161     hdiMppPacketIsEoi HdiMppPacketIsEoi;
162     hdiMppMetaSetPacket HdiMppMetaSetPacket;
163     // mpp frame api
164     hdiMppFrameInit HdiMppFrameInit;
165     hdiMppFrameDeinit HdiMppFrameDeinit;
166     hdiMppFrameGetNext HdiMppFrameGetNext;
167     hdiMppFrameGetInfoChange HdiMppFrameGetInfoChange;
168     hdiMppFrameGetWidth HdiMppFrameGetWidth;
169     hdiMppFrameGetHeight HdiMppFrameGetHeight;
170     hdiMppFrameGetHorStride HdiMppFrameGetHorStride;
171     hdiMppFrameGetVerStride HdiMppFrameGetVerStride;
172     hdiMppFrameGetBufferSize HdiMppFrameGetBufferSize;
173     hdiMppFrameGetFormat HdiMppFrameGetFormat;
174     hdiMppFrameGetErrinfo HdiMppFrameGetErrinfo;
175     hdiMppFrameGetDiscard HdiMppFrameGetDiscard;
176     hdiMppFrameGetBuffer HdiMppFrameGetBuffer;
177     hdiMppFrameSetBuffer HdiMppFrameSetBuffer;
178     hdiMppFrameGetEos HdiMppFrameGetEos;
179     hdiMppFrameSetEos HdiMppFrameSetEos;
180     hdiMppFrameSetFormat HdiMppFrameSetFormat;
181     hdiMppFrameSetWidth HdiMppFrameSetWidth;
182     hdiMppFrameSetHeight HdiMppFrameSetHeight;
183     hdiMppFrameSetHorStride HdiMppFrameSetHorStride;
184     hdiMppFrameSetVerStride HdiMppFrameSetVerStride;
185     hdiMppFrameGetMeta HdiMppFrameGetMeta;
186     // mpp dec config api
187     hdiMppDecCfgDeinit HdiMppDecCfgDeinit;
188     hdiMppDecCfgInit HdiMppDecCfgInit;
189     hdiMppDecCfgSetU32 HdiMppDecCfgSetU32;
190     // mpp enc config api
191     hdiMppEncCfgInit HdiMppEncCfgInit;
192     hdiMppEncCfgDeinit HdiMppEncCfgDeinit;
193     hdiMppEncCfgSetS32 HdiMppEncCfgSetS32;
194     hdiMppEncCfgSetU32 HdiMppEncCfgSetU32;
195     hdiMppEncRefCfgInit HdiMppEncRefCfgInit;
196     hdiMppEncRefCfgDeinit HdiMppEncRefCfgDeinit;
197     hdiMppEncGenRefCfg HdiMppEncGenRefCfg;
198     hdiMppEncGenSmartGopRefCfg HdiMppEncGenSmartGopRefCfg;
199     // mpp buffer group api
200     hdiMppBufferGroupGet HdiMppBufferGroupGet;
201     hdiMppBufferGroupPut HdiMppBufferGroupPut;
202     hdiMppBufferGroupClear HdiMppBufferGroupClear;
203     hdiMppBufferGroupLimitConfig HdiMppBufferGroupLimitConfig;
204     hdiMppBufferGetFdWithCaller HdiMppBufferGetFdWithCaller;
205     hdiMppBufferGetWithTag HdiMppBufferGetWithTag;
206     hdiMppBufferGetPtrWithCaller HdiMppBufferGetPtrWithCaller;
207     hdiMppBufferGroupUsage HdiMppBufferGroupUsage;
208     hdiMppBufferPutWithCaller HdiMppBufferPutWithCaller;
209     // mpp task api
210     hdiMppTaskMetaGetPacket HdiMppTaskMetaGetPacket;
211     // mpp env api
212     hdiMppEnvGetU32 HdiMppEnvGetU32;
213     hdimpp_get_vcodec_dev_name Hdimpp_get_vcodec_dev_name;
214     hdimpp_get_ioctl_version  Hdimpp_get_ioctl_version;
215     hdimpp_get_vcodec_type Hdimpp_get_vcodec_type;
216     hdimpp_osal_calloc Hdimpp_osal_calloc;
217     hdimpp_get_soc_name Hdimpp_get_soc_name;
218     hdimpp_osal_free Hdimpp_osal_free;
219     hdimpp_packet_set_extra_data Hdimpp_packet_set_extra_data;
220     hdimpp_frame_get_color_primaries Hdimpp_frame_get_color_primaries;
221     hdimpp_frame_get_color_trc Hdimpp_frame_get_color_trc;
222     hdimpp_frame_get_color_range Hdimpp_frame_get_color_range;
223     hdimpp_frame_get_mode Hdimpp_frame_get_mode;
224     hdimpp_osal_malloc Hdimpp_osal_malloc;
225     hdimpp_buffer_get_size_with_caller Hdimpp_buffer_get_size_with_caller;
226     hdimpp_frame_set_pts Hdimpp_frame_set_pts;
227     hdimpp_meta_get_s32 Hdimpp_meta_get_s32;
228     hdimpp_packet_get_meta Hdimpp_packet_get_meta;
229     hdimpp_enc_ref_cfg_set_keep_cpb Hdimpp_enc_ref_cfg_set_keep_cpb;
230     hdimpp_enc_ref_cfg_add_st_cfg Hdimpp_enc_ref_cfg_add_st_cfg;
231     hdimpp_enc_ref_cfg_add_lt_cfg Hdimpp_enc_ref_cfg_add_lt_cfg;
232     hdimpp_enc_ref_cfg_set_cfg_cnt Hdimpp_enc_ref_cfg_set_cfg_cnt;
233     hdimpp_buffer_group_unused Hdimpp_buffer_group_unused;
234     hdimpp_enc_ref_cfg_check Hdimpp_enc_ref_cfg_check;
235     hdimpp_frame_get_colorspace Hdimpp_frame_get_colorspace;
236     hdimpp_meta_set_s32 Hdimpp_meta_set_s32;
237     hdimpp_buffer_inc_ref_with_caller Hdimpp_buffer_inc_ref_with_caller;
238     hdimpp_task_meta_get_frame Hdimpp_task_meta_get_frame;
239     hdimpp_task_meta_set_frame Hdimpp_task_meta_set_frame;
240     hdimpp_task_meta_set_packet Hdimpp_task_meta_set_packet;
241     hdimpp_frame_get_poc Hdimpp_frame_get_poc;
242     hdimpp_packet_get_data Hdimpp_packet_get_data;
243     hdimpp_frame_get_pts Hdimpp_frame_get_pts;
244     hdimpp_buffer_import_with_tag Hdimpp_buffer_import_with_tag;
245 }RKMppApi;
246 
247 void GetMppAPI(RKMppApi *pMppApi);
248 void ReleaseMppAPI();
249 
250 #endif // CODEC_MPP_HDI_MPI_H