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