1 /* 2 * Copyright (c) 2022 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 HDI_MPP_MPI_H 17 #define HDI_MPP_MPI_H 18 19 #include "rk_mpi.h" 20 21 // mpp base api 22 typedef MPP_RET (*hdiMppCreate)(MppCtx *, MppApi **); 23 typedef MPP_RET (*hdiMppInit)(MppCtx, MppCtxType, MppCodingType); 24 typedef MPP_RET (*hdiMppStart)(MppCtx); 25 typedef MPP_RET (*hdiMppStop)(MppCtx); 26 typedef MPP_RET (*hdiMppDestroy)(MppCtx); 27 typedef MPP_RET (*hdiMppCheckSupportFormat)(MppCtxType, MppCodingType); 28 typedef void (*hdiMppShowSupportFormat)(void); 29 typedef void (*hdiMppShowColorFormat)(void); 30 // mpp packet api 31 typedef MPP_RET (*hdiMppPacketNew)(MppPacket *); 32 typedef MPP_RET (*hdiMppPacketInit)(MppPacket *, void *, size_t); 33 typedef MPP_RET (*hdiMppPacketInitWithBuffer)(MppPacket *, MppBuffer); 34 typedef MPP_RET (*hdiMppPacketCopyInit)(MppPacket *, const MppPacket); 35 typedef MPP_RET (*hdiMppPacketDeinit)(MppPacket*); 36 typedef RK_U32 (*hdiMppPacketGetEos)(MppPacket); 37 typedef MPP_RET (*hdiMppPacketSetEos)(MppPacket); 38 typedef RK_S64 (*hdiMppPacketGetPts)(const MppPacket); 39 typedef void (*hdiMppPacketSetPts)(MppPacket, RK_S64); 40 typedef void (*hdiMppPacketSetData)(MppPacket packet, void *data); 41 typedef void (*hdiMppPacketSetSize)(MppPacket, size_t); 42 typedef void* (*hdiMppPacketGetPos)(const MppPacket); 43 typedef void (*hdiMppPacketSetPos)(MppPacket packet, void *data); 44 typedef void (*hdiMppPacketSetLength)(MppPacket, size_t); 45 typedef size_t (*hdiMppPacketGetLength)(const MppPacket); 46 typedef RK_U32 (*hdiMppPacketIsPartition)(const MppPacket); 47 typedef RK_U32 (*hdiMppPacketIsEoi)(const MppPacket); 48 typedef MPP_RET (*hdiMppMetaSetPacket)(MppMeta, MppMetaKey, MppPacket); 49 // mpp frame api 50 typedef MPP_RET (*hdiMppFrameInit)(MppFrame*); 51 typedef MPP_RET (*hdiMppFrameDeinit)(MppFrame*); 52 typedef MppFrame (*hdiMppFrameGetNext)(MppFrame); 53 typedef RK_U32 (*hdiMppFrameGetInfoChange)(MppFrame); 54 typedef RK_U32 (*hdiMppFrameGetWidth)(MppFrame); 55 typedef RK_U32 (*hdiMppFrameGetHeight)(MppFrame); 56 typedef RK_U32 (*hdiMppFrameGetHorStride)(MppFrame); 57 typedef RK_U32 (*hdiMppFrameGetVerStride)(MppFrame); 58 typedef RK_U32 (*hdiMppFrameGetBufferSize)(MppFrame); 59 typedef MppFrameFormat (*hdiMppFrameGetFormat)(MppFrame); 60 typedef RK_U32 (*hdiMppFrameGetErrinfo)(const MppFrame); 61 typedef RK_U32 (*hdiMppFrameGetDiscard)(const MppFrame); 62 typedef MppBuffer (*hdiMppFrameGetBuffer)(const MppFrame); 63 typedef void (*hdiMppFrameSetBuffer)(MppFrame, MppBuffer); 64 typedef RK_U32 (*hdiMppFrameGetEos)(const MppFrame); 65 typedef void (*hdiMppFrameSetEos)(const MppFrame, RK_U32); 66 typedef void (*hdiMppFrameSetFormat)(MppFrame, MppFrameFormat); 67 typedef void (*hdiMppFrameSetWidth)(MppFrame, RK_U32); 68 typedef void (*hdiMppFrameSetHeight)(MppFrame, RK_U32); 69 typedef void (*hdiMppFrameSetHorStride)(MppFrame, RK_U32); 70 typedef void (*hdiMppFrameSetVerStride)(MppFrame, RK_U32); 71 typedef MppMeta (*hdiMppFrameGetMeta)(const MppFrame); 72 // mpp dec config api 73 typedef MPP_RET (*hdiMppDecCfgDeinit)(MppDecCfg *); 74 typedef MPP_RET (*hdiMppDecCfgInit)(MppDecCfg *); 75 typedef MPP_RET (*hdiMppDecCfgSetU32)(MppDecCfg, const char *, RK_U32); 76 // mpp enc config api 77 typedef MPP_RET (*hdiMppEncCfgInit)(MppEncCfg *); 78 typedef MPP_RET (*hdiMppEncCfgDeinit)(MppEncCfg); 79 typedef MPP_RET (*hdiMppEncCfgSetS32)(MppEncCfg, const char *, RK_S32); 80 typedef MPP_RET (*hdiMppEncCfgSetU32)(MppEncCfg, const char *, RK_U32); 81 typedef MPP_RET (*hdiMppEncRefCfgInit)(MppEncRefCfg *); 82 typedef MPP_RET (*hdiMppEncRefCfgDeinit)(MppEncRefCfg *); 83 typedef MPP_RET (*hdiMppEncGenRefCfg)(MppEncRefCfg, RK_U32); 84 typedef MPP_RET (*hdiMppEncGenSmartGopRefCfg)(MppEncRefCfg, RK_U32, RK_S32); 85 // mpp buffer group api 86 typedef MPP_RET (*hdiMppBufferGroupGet)(MppBufferGroup *, MppBufferType, 87 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 MPP_RET (*hdiMppBufferGetFdWithCaller)(MppBufferGroup *, const char *); 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)(MppBufferGroup); 98 // mpp env api 99 typedef RK_S32 (*hdiMppEnvGetU32)(const char *, RK_U32 *, RK_U32); 100 101 typedef struct { 102 // mpp base api 103 hdiMppCreate HdiMppCreate; 104 hdiMppInit HdiMppInit; 105 hdiMppStart HdiMppStart; 106 hdiMppStop HdiMppStop; 107 hdiMppDestroy HdiMppDestroy; 108 hdiMppCheckSupportFormat HdiMppCheckSupportFormat; 109 hdiMppShowSupportFormat HdiMppShowSupportFormat; 110 hdiMppShowColorFormat HdiMppShowColorFormat; 111 // mpp packet api 112 hdiMppPacketNew HdiMppPacketNew; 113 hdiMppPacketInit HdiMppPacketInit; 114 hdiMppPacketInitWithBuffer HdiMppPacketInitWithBuffer; 115 hdiMppPacketCopyInit HdiMppPacketCopyInit; 116 hdiMppPacketDeinit HdiMppPacketDeinit; 117 hdiMppPacketGetEos HdiMppPacketGetEos; 118 hdiMppPacketSetEos HdiMppPacketSetEos; 119 hdiMppPacketGetPts HdiMppPacketGetPts; 120 hdiMppPacketSetPts HdiMppPacketSetPts; 121 hdiMppPacketSetData HdiMppPacketSetData; 122 hdiMppPacketSetSize HdiMppPacketSetSize; 123 hdiMppPacketGetPos HdiMppPacketGetPos; 124 hdiMppPacketSetPos HdiMppPacketSetPos; 125 hdiMppPacketSetLength HdiMppPacketSetLength; 126 hdiMppPacketGetLength HdiMppPacketGetLength; 127 hdiMppPacketIsPartition HdiMppPacketIsPartition; 128 hdiMppPacketIsEoi HdiMppPacketIsEoi; 129 hdiMppMetaSetPacket HdiMppMetaSetPacket; 130 // mpp frame api 131 hdiMppFrameInit HdiMppFrameInit; 132 hdiMppFrameDeinit HdiMppFrameDeinit; 133 hdiMppFrameGetNext HdiMppFrameGetNext; 134 hdiMppFrameGetInfoChange HdiMppFrameGetInfoChange; 135 hdiMppFrameGetWidth HdiMppFrameGetWidth; 136 hdiMppFrameGetHeight HdiMppFrameGetHeight; 137 hdiMppFrameGetHorStride HdiMppFrameGetHorStride; 138 hdiMppFrameGetVerStride HdiMppFrameGetVerStride; 139 hdiMppFrameGetBufferSize HdiMppFrameGetBufferSize; 140 hdiMppFrameGetFormat HdiMppFrameGetFormat; 141 hdiMppFrameGetErrinfo HdiMppFrameGetErrinfo; 142 hdiMppFrameGetDiscard HdiMppFrameGetDiscard; 143 hdiMppFrameGetBuffer HdiMppFrameGetBuffer; 144 hdiMppFrameSetBuffer HdiMppFrameSetBuffer; 145 hdiMppFrameGetEos HdiMppFrameGetEos; 146 hdiMppFrameSetEos HdiMppFrameSetEos; 147 hdiMppFrameSetFormat HdiMppFrameSetFormat; 148 hdiMppFrameSetWidth HdiMppFrameSetWidth; 149 hdiMppFrameSetHeight HdiMppFrameSetHeight; 150 hdiMppFrameSetHorStride HdiMppFrameSetHorStride; 151 hdiMppFrameSetVerStride HdiMppFrameSetVerStride; 152 hdiMppFrameGetMeta HdiMppFrameGetMeta; 153 // mpp dec config api 154 hdiMppDecCfgDeinit HdiMppDecCfgDeinit; 155 hdiMppDecCfgInit HdiMppDecCfgInit; 156 hdiMppDecCfgSetU32 HdiMppDecCfgSetU32; 157 // mpp enc config api 158 hdiMppEncCfgInit HdiMppEncCfgInit; 159 hdiMppEncCfgDeinit HdiMppEncCfgDeinit; 160 hdiMppEncCfgSetS32 HdiMppEncCfgSetS32; 161 hdiMppEncCfgSetU32 HdiMppEncCfgSetU32; 162 hdiMppEncRefCfgInit HdiMppEncRefCfgInit; 163 hdiMppEncRefCfgDeinit HdiMppEncRefCfgDeinit; 164 hdiMppEncGenRefCfg HdiMppEncGenRefCfg; 165 hdiMppEncGenSmartGopRefCfg HdiMppEncGenSmartGopRefCfg; 166 // mpp buffer group api 167 hdiMppBufferGroupGet HdiMppBufferGroupGet; 168 hdiMppBufferGroupPut HdiMppBufferGroupPut; 169 hdiMppBufferGroupClear HdiMppBufferGroupClear; 170 hdiMppBufferGroupLimitConfig HdiMppBufferGroupLimitConfig; 171 hdiMppBufferGetFdWithCaller HdiMppBufferGetFdWithCaller; 172 hdiMppBufferGetWithTag HdiMppBufferGetWithTag; 173 hdiMppBufferGetPtrWithCaller HdiMppBufferGetPtrWithCaller; 174 hdiMppBufferGroupUsage HdiMppBufferGroupUsage; 175 hdiMppBufferPutWithCaller HdiMppBufferPutWithCaller; 176 // mpp task api 177 hdiMppTaskMetaGetPacket HdiMppTaskMetaGetPacket; 178 // mpp env api 179 hdiMppEnvGetU32 HdiMppEnvGetU32; 180 }RKMppApi; 181 182 int32_t GetMppApi(RKMppApi **mppApi); 183 void ReleaseMppApi(RKMppApi *mppApi); 184 185 #endif // HDI_MPP_MPI_H