vcodec_OAL.h
7.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#ifndef VCODEC_OAL_H
#define VCODEC_OAL_H
#define IN
#define OUT
#ifndef NULL
#define NULL 0
#endif
#include "vcodec_if.h"
#include "vcodec_log.h"
#define VCODEC_ASSERT(expr, a) do {if(!(expr)) rVCODEC_OAL_Function.VCodecAssertFail(__FILE__, __LINE__, a); } while (0)
void VCodecQueryMemType(IN void *pBuffer_VA,
IN unsigned int u4Size,
OUT VCODEC_MEMORY_TYPE_T *peMemType
);
void VCodecQueryPhysicalAddr(IN void *pBuffer_VA,
OUT void **pBufferOut_PA
);
// VCodecSwitchMemType - return 0 if success.
// return -1 if failed, but pBufferOut_VA will be assigned with pBuffer_VA
int VCodecSwitchMemType(IN void *pBuffer_VA,
IN unsigned int u4Size,
IN VCODEC_MEMORY_TYPE_T eMemType,
OUT void **pBufferOut_VA
);
// VCodecFlushCachedBuffer - u4Size is in byte
void VCodecFlushCachedBuffer(IN void *pBuffer_VA,
IN unsigned int u4Size
);
// VCodecInvalidateCachedBuffer - u4Size is in byte
void VCodecInvalidateCachedBuffer(IN void *pBuffer_VA,
IN unsigned int u4Size
);
void VCodecFlushCachedBufferAll(void);
void VCodecInvalidateCachedBufferAll(void);
void VCodecFlushInvalidateCacheBufferAll(void);
void VCodecMemSet(IN void *pBuffer_VA,
IN char cValue,
IN unsigned int u4Length
);
void VCodecMemCopy(IN void * pvDest ,
IN const void * pvSrc ,
IN unsigned int u4Length
);
typedef struct
{
void *pBuffer_PA; ///< [IN] The physical memory address
unsigned int u4MemSize; ///< [IN] The memory size to be mapped
void *pBuffer_VA; ///< [OUT] The mapped virtual memory address
} VCODEC_OAL_MMAP_T;
void VCodecMMAP(VCODEC_OAL_MMAP_T *prParam);
void VCodecUnMMAP(VCODEC_OAL_MMAP_T *prParam);
typedef enum
{
VCODEC_OAL_VDEC,
VCODEC_OAL_VENC
} VCODEC_OAL_CODEC;
typedef struct
{
void *pvHandle; ///< [IN] The video codec handle
void *pvIsrFunction; ///< [IN] The isr function
VCODEC_OAL_CODEC eCodec; ///< [IN] VDEC or VENC interrupt
} VCODEC_OAL_ISR_T;
void VCodecWaitISR(VCODEC_OAL_ISR_T *prParam);
typedef struct
{
void *pvHandle; ///< [IN] The video codec handle
unsigned int u4TimeoutMs; ///< [IN] The timeout ms
unsigned char *fgHWIsAvailable; ///< [OUT] HW is available or not when function return
} VCODEC_OAL_HW_LOCK_T;
void VCodecLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
void VCodecUnLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
typedef struct
{
unsigned int u4ReadAddr; /// [IN] memory source address in VA
unsigned int u4ReadData; /// [OUT] memory data
} VCODEC_OAL_MEM_STAUTS_T;
typedef struct
{
unsigned char fgHWIsCompleted; ///< [OUT] HW is Completed or not, set by driver (0: not completed or still in lock status; 1: HW is completed or in unlock status)
unsigned int u4NumOfRegister; ///< [IN] Number of HW register need to store;
VCODEC_OAL_MEM_STAUTS_T *pHWStatus; ///< [OUT] HW status based on input address.
} VCODEC_OAL_HW_REGISTER_T;
void VCodecInitHWLock(VCODEC_OAL_HW_REGISTER_T *prParam);
void VCodecDeInitHWLock(VCODEC_OAL_HW_REGISTER_T *prParam);
typedef struct
{
void (*VCodecQueryMemType) ( IN void *pBuffer_VA,
IN unsigned int u4Size,
OUT VCODEC_MEMORY_TYPE_T *peMemType);
void (*VCodecQueryPhysicalAddr)(IN void *pBuffer_VA,
OUT void **pBufferOut_PA);
// VCodecSwitchMemType - return 0 if success.
// return -1 if failed, but pBufferOut_VA will be assigned with pBuffer_VA
int (*VCodecSwitchMemType)(IN void *pBuffer_VA,
IN unsigned int u4Size,
IN VCODEC_MEMORY_TYPE_T eMemType,
OUT void **pBufferOut_VA);
// VCodecFlushCachedBuffer - u4Size is in byte
void (*VCodecFlushCachedBuffer)(IN void *pBuffer_VA,
IN unsigned int u4Size);
// VCodecInvalidateCachedBuffer - u4Size is in byte
void (*VCodecInvalidateCachedBuffer)(IN void *pBuffer_VA,
IN unsigned int u4Size);
void (*VCodecFlushCachedBufferAll)(void);
void (*VCodecInvalidateCachedBufferAll)(void);
void (*VCodecFlushInvalidateCacheBufferAll)(void);
void (*VCodecMemSet)(IN void *pBuffer_VA,
IN char cValue,
IN unsigned int u4Length );
void (*VCodecMemCopy)(IN void * pvDest ,
IN const void * pvSrc ,
IN unsigned int u4Length);
void (*VCodecAssertFail) ( IN char *ptr,
IN int i4Line,
IN int i4Arg);
void (*VCodecMMAP) (VCODEC_OAL_MMAP_T *prParam);
void (*VCodecUnMMAP) (VCODEC_OAL_MMAP_T *prParam );
void (*VCodecWaitISR) (VCODEC_OAL_ISR_T *prParam);
void (*VCodecLockHW) (VCODEC_OAL_HW_LOCK_T *prParam);
void (*VCodecUnLockHW) (VCODEC_OAL_HW_LOCK_T *prParam);
void (*VcodecTraceLog0)(IN VCODEC_LOG_GROUP_T eGroup,
IN VCODEC_LOG_INDEX_T eIndex
);
void (*VcodecTraceLog1)(IN VCODEC_LOG_GROUP_T eGroup,
IN VCODEC_LOG_INDEX_T eIndex,
IN UINT64 arg
);
void (*VcodecTraceLog2)(IN VCODEC_LOG_GROUP_T eGroup,
IN VCODEC_LOG_INDEX_T eIndex,
IN UINT64 arg1,
IN UINT64 arg2
);
void (*VcodecTraceLog4)(IN VCODEC_LOG_GROUP_T eGroup,
IN VCODEC_LOG_INDEX_T eIndex,
IN UINT64 arg1,
IN UINT64 arg2,
IN UINT64 arg3,
IN UINT64 arg4
);
void (*VcodecTraceLog8)(IN VCODEC_LOG_GROUP_T eGroup,
IN VCODEC_LOG_INDEX_T eIndex,
IN UINT64 arg1,
IN UINT64 arg2,
IN UINT64 arg3,
IN UINT64 arg4,
IN UINT64 arg5,
IN UINT64 arg6,
IN UINT64 arg7,
IN UINT64 arg8
);
void (*VCodecInitHWLock)(VCODEC_OAL_HW_REGISTER_T *prParam);
void (*VCodecDeInitHWLock)(VCODEC_OAL_HW_REGISTER_T *prParam);
} VCODEC_OAL_CALLBACK_T;
extern VCODEC_OAL_CALLBACK_T rVCODEC_OAL_Function;
int VCodecOALInit(IN VCODEC_OAL_CALLBACK_T *prVCODEC_OAL_Function);
#endif /* VCODEC_OAL_H */