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