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
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
|
#ifndef _VDEC_SR_USAGE_H_
#define _VDEC_SR_USAGE_H_
#include "drv_vdec.h"
#ifdef VDEC_SR_SUPPORT
#include "x_stl_lib.h"
#include "x_debug.h"
#include "x_assert.h"
#include "vdec_common_if.h"
#include "u_pbinf.h"
#include "vdec_usage.h"
#define SR_MAX_ES 2
#define MPV_REQ_SIZE 2
#define MPV_REQ_Q_SIZE 10
#define SRM_ESID 0
#define SR_ESID_0 2
#ifndef VDEC_OPTIMIZE_RESOURCE
#define SR_ESID_1 5
#else
#define SR_ESID_1 3
#endif
#define SR_MAX_FB_NUM 30
#define SR_FB_RESERVED_NUM 4
#define MPEG_DFB_NUM 255
#define VDEC_SR_FWD_STATE 0x1
#define VDEC_SR_RVS_STATE 0x2
#define VDEC_SR_STOP_STATE 0x3
#define VDEC_SR_IDLE_STATE 0x4
#define VDEC_FWD_NONE_STATE 0x0
#define VDEC_FWD_INIT_STATE 0x1
#define VDEC_FWD_GET_NEXT_STATE 0x2
#define VDEC_FWD_VPARSE_PROC_STATE 0x3
#define VDEC_FWD_VPARSE_CHK_STATE 0x4
#define VDEC_FWD_GET_FB_STATE 0x5
#define VDEC_FWD_START_TO_DEC_STATE 0x6
#define VDEC_FWD_DECODING_STATE 0x7
#define VDEC_FWD_GEN_EDPB_STATE 0x8
#define VDEC_FWD_DONE_STATE 0x9
#define VDEC_RVS_NONE_STATE 0x0
#define VDEC_RVS_INIT_STATE 0x1
#define VDEC_RVS_OUT_TARGET_STATE 0x2
#define VDEC_RVS_GET_PREV_STATE 0x3
#define VDEC_RVS_VPARSE_PROC_STATE 0x4
#define VDEC_RVS_VPARSE_CHK_STATE 0x5
#define VDEC_RVS_GET_FB_STATE 0x6
#define VDEC_RVS_START_TO_DEC_STATE 0x7
#define VDEC_RVS_DECODING_STATE 0x8
#define VDEC_RVS_GET_REF_STATE 0x9
#define VDEC_RVS_OUT_FB_STATE 0xA
#define VDEC_RVS_DONE_STATE 0xB
#define SR_INIT 0x0
#define SR_GETPREV_0 0x1
#define SR_UPDINFO_0 0x2
#define SR_GETFB_0 0x3
#define SR_GETNEXT_0 0x4
#define SR_FWD_WAIT_0 0x5
#define SR_FWD_STOP_REQUEST_0 0x6
#define SR_FWD_DONE_0 0x7
#define SR_RVS_DONE_0 0x8
#define SR_GETPREV_1 0x11
#define SR_UPDINFO_1 0x12
#define SR_GETFB_1 0x13
#define SR_GETNEXT_1 0x14
#define SR_FWD_WAIT_1 0x15
#define SR_FWD_STOP_REQUEST_1 0x16
#define SR_FWD_DONE_1 0x17
#define SR_RVS_DONE_1 0x18
#define SR_REQ_NONE 0xFF
#define SR_MAX_IBC 30
#define fgIsReqByPts(eType) (eType == VID_DEC_SR_DATA_REQ_TYPE_PTS)
#define fgIsSR(u2SRState) (u2SRState==VDEC_SR_FWD_STATE || u2SRState==VDEC_SR_RVS_STATE)
#define fgIsSRFwdState(u2SRState) (u2SRState==VDEC_SR_FWD_STATE)
#define fgIsSRRvsState(u2SRState) (u2SRState==VDEC_SR_RVS_STATE)
#define fgSRActive(ucEsId,ucActiveId) (ucEsId==ucActiveId)
#define ucEsIdToSrId(ucEsId) ((ucEsId == SR_ESID_0)? (0): (1))
#define ucSrIdToEsId(ucSrId) ((ucSrId == 0)? (SR_ESID_0) : (SR_ESID_1))
typedef enum
{
VDEC_RVS_GET_UNKNOWN = 0,
VDEC_RVS_GET_PREV_1 = 1,
VDEC_RVS_GET_NEXT_1 = 2,
VDEC_RVS_GET_PREV_2 = 3,
} VDEC_RVS_GET_COND_T;
typedef enum
{
VDEC_SR_STATE_PASS = 0,
VDEC_SR_WAIT_1_TICK = 1,
VDEC_SR_DROP_PIC = 2,
VDEC_SR_INIT_STATE_WAIT = 0x10,
VDEC_SR_GET_ESM_INFO_STATE_WAIT,
VDEC_SR_VPARSE_CHK_STATE_WAIT,
VDEC_SR_CREAT_FBG_STATE_WAIT,
VDEC_SR_GET_FB_STATE_WAIT,
VDEC_SR_START_TO_DEC_STATE_WAIT,
VDEC_SR_DECODING_STATE_WAIT,
VDEC_SR_INS_TO_DISP_Q_STATE_WAIT,
VDEC_SR_FWD_DONE_STATE_WAIT,
VDEC_SR_STATE_WAIT_MAX = 0xFF,
} VDEC_SR_COND_T;
typedef enum _VDEC_SR_EVENT_T
{
VDEC_SR_EVENT_NONE = 0,
VDEC_SR_EVENT_CMD = 1 << 0,
VDEC_SR_EVENT_AU_VPIC = 1 << 1,
VDEC_SR_EVENT_DEC_END = 1 << 2,
VDEC_SR_EVENT_GET_FB = 1 << 3,
VDEC_SR_EVENT_OUT_FB = 1 << 4,
VDEC_SR_EVENT_MAX = 0xff,
} VDEC_SR_EVENT_T;
typedef struct _VDEC_REQ_INFO_T
{
UINT64 ui8_target_picture; /* unit in PTS or offset */
VID_DEC_SR_REBUF_TYPE_T e_rebuf_type; /* if the rebuffer request is from previous sequence */
UINT32 ui4_num_of_seq; /* number of sequence */
} VDEC_REQ_INFO_T;
typedef struct _MPEG_DFB_INFO_T
{
UCHAR ucFbId;
UCHAR ucSeqId;
UCHAR ucGopId;
UCHAR ucGopRefCnt;
BOOL fgFrmType;
BOOL fgFrmDec;
BOOL fgFrmRef;
BOOL fg1stFldExist;
BOOL fg2ndFldExist;
BOOL fg1stFldDec;
BOOL fg1stFldRef;
BOOL fg2ndFldDec;
BOOL fg2ndFldRef;
BOOL fgIsDecErr;
UCHAR ucCurrRvsField;
UINT64 u8OutFBPTS;
UINT64 u8OutFBOft;
} MPEG_DFB_INFO_T;
typedef struct _VDEC_SR_INFO_T
{
VID_DEC_SR_DATA_REQ_TYPE_T e_req_type;
VDEC_RVS_GET_COND_T e_rvs_get_cond;
UCHAR ucSRMId;
UINT16 u2SRState;
UINT16 u2FWDState;
UINT16 u2RVSState;
UINT64 u8Target;
BOOL fgNextSeq;
BOOL fgvideoNotExist;
UINT64 u8NoVideoSeqOffset;
BOOL fgReleaseEDPB;
UCHAR ucIBCCnt;
BOOL fgIBCSent [SR_MAX_IBC];
UINT32 u4DFBIdx;
UCHAR ucDpbSize;
UCHAR ucEdpbSize;
UCHAR ucEdpbStartIdx;
UCHAR ucEdpbIdx;
BOOL fgEdpbFull;
BOOL fgEdpbEmpty;
UCHAR ucFBOccupied;
BOOL fgTargetFlag;
BOOL fgDecErrFlag;
BOOL fgOutputTarget;
BOOL fgOutputFlag;
//UCHAR ucRefPicCnt;
UINT64 u8SeqFirstTarget;
UINT64 u8SeqFirstPts;
UINT64 u8SeqFirstOffset;
UINT64 u8EDpbFirstTarget;
UINT64 u8EDpbFirstPts;
UINT64 u8EDpbFirstOffset;
UINT64 u8RequestPts;
UINT64 u8RequestOffset;
UINT16 u2SeqPicCnt;
BOOL fgGetFirstPic;
BOOL fgForceReqPrevOne;
INT64 i8EndTime;
BOOL fgStreamEnd;
BOOL fgNoPrev;
BOOL fgOpenGOP;
BOOL fgSeqComplete;
BOOL fgRvsEnd;
BOOL fgFRefEmpty;
BOOL fgSeqEndForceOut;
UINT32 u4LastReadPtr;
MPEG_DFB_INFO_T arMPEGDFBInfo[MPEG_DFB_NUM];
BOOL fgIsFirstPicIVOP;
UINT64 u8FirstPts;
UINT64 u8FirstOffset;
INT64 i8EpmapPTS;
BOOL fgDecFlag;
BOOL fgFstPicIsNotI;
IBC_PathInfo *prIbc;
} VDEC_SR_INFO_T;
typedef struct _SR_IDX_INFO_T_
{
UINT32 u4StartIdx;
UINT32 u4CurrIdx;
UINT32 u4EndIdx;
} SR_IDX_INFO_T;
typedef struct _VDEC_SRM_INFO_T
{
VID_DEC_SR_DATA_REQ_TYPE_T e_req_type;
UINT32 ui4_fifo_size;
BOOL fgIsSR;
VDEC_REQ_INFO_T rReqBufInfo;
UINT16 u2ReqMode;
UINT16 u2PrevReqMode;
BOOL fgOutputTarget;
UCHAR ucActiveId;
UINT16 u2SRFlag[2];
UINT64 u8SRTarget;
UINT64 u8Target[2];
UCHAR ucTotalFBNum;
UINT16 u2SRState[2];
SR_IDX_INFO_T e_seq_idx[2];
SR_IDX_INFO_T e_idx_info[2];
UCHAR ucFBNumLeft[2];
UINT32 u4StopReBufSrId;
UINT32 u4StopReBufIdx;
INT32 i4NextSRStartIdx;
} VDEC_SRM_INFO_T;
void VDec_SR_Init(void);
void VDec_SR_Termint(void);
//extern UCHAR ucEsIdToSrId(UCHAR ucEsId);
//extern UCHAR ucSrIdToEsId(UCHAR ucSrId);
extern UCHAR ucSrIdToVldId(UCHAR ucSrId);
extern BOOL fgIs_SrState(UCHAR ucEsId);
extern BOOL fgIs_SrFwdState(UCHAR ucEsId);
extern BOOL fgIs_SrRvsState(UCHAR ucEsId);
extern void VDec_CreateSRCmdQ(UCHAR ucSrId);
extern void VDec_SetSRCmd(UCHAR ucSrId, UINT16 u2Mode);
extern void RetrieveSRCmd(UCHAR ucSrId);
extern void VDec_DeleteSRCmdQ(UCHAR ucSrId);
extern void VDEC_LockFBLeftSema(UCHAR ucSrId);
extern void VDEC_UnlockFBLeftSema(UCHAR ucSrId);
extern void VDec_CreateReqQ(void);
extern void VDec_SetSRReq(UCHAR ucEsId, UINT16 u2Mode);
extern void VDec_DeleteReqQ(void);
extern void VDEC_LockActiveSRSema(void);
extern void VDEC_UnlockActiveSRSema(void);
extern void VDec_SRModeProcess(UCHAR ucSrId);
VDEC_SR_COND_T VDec_FWDProc(UCHAR ucSrId);
VDEC_SR_COND_T VDec_RVSProc(UCHAR ucSrId);
extern BOOL fgVDecInitCodecProc(UCHAR ucEsId);
UINT32 u4IsNextPicExisted(UCHAR ucSrId, BOOL fgIsChkBefVParser);
UINT32 u4IsPrevPicExisted(UCHAR ucSrId, BOOL fgIsChkBefVParser);
BOOL fgSR_GetFBufGroup(UCHAR ucSRMId, UINT8 *pu1FBGID);
BOOL fgIsSRFBufAvailable(UCHAR ucSrId);
BOOL fgSRFreeFB(UCHAR ucEsId, UCHAR ucFbId, BOOL fgRefType);
BOOL fgVDec_SR_Update_Esm(UCHAR ucSrEsId, BOOL fgNext);
UINT32 VDec_SR_Get_Idx(UCHAR ucSrEsId, BOOL fgNext);
void VDec_SR_Update_Esm_Seq_Done(UCHAR ucSrEsId);
void vVDec_SR_MoveRdPtr(UCHAR ucSrEsId, UINT32 u4NewAURdIdx);
void vVDec_SR_MoveWrPtr(UCHAR ucEsId, UINT32 u4LastWrIdx);
#endif
#endif
|