aboutsummaryrefslogtreecommitdiff
path: root/drivers/misc/mediatek/vdec/include/vdec_drv_h264_info.h
blob: 90b3d12ccf5b08412f2b25cc228eefa783258f7f (plain) (blame)
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
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
#ifndef _VDEC_DRV_H264_INFO_H_
#define _VDEC_DRV_H264_INFO_H_

//#include "x_os.h"
//#include "x_bim.h"
//#include "x_assert.h"
//#include "x_timer.h"

#include "drv_common.h"

#include "vdec_common_if.h"
#include "vdec_usage.h"

#include "vdec_info_h264.h"
#include "vdec_info_common.h"

#include "vdec_hal_if_h264.h"

#define OUT_OF_FILE 0x000001
//#define FORBIDEN_ERR 0x000002
#define DEC_INIT_FAILED 0x000003

#define NON_IDR_SLICE 0x01
#define IDR_SLICE 0x05
#define H264_SEI 0x06
#define H264_SPS 0x07
#define H264_PPS 0x08
#define H264_END_SEQ 0x0A
#define H264_PREFIX_NAL 0x0E
#define H264_SUB_SPS 0x0F
#define H264_SLICE_EXT 0x14

// Slice_type
#define H264_P_Slice 0
#define H264_B_Slice 1
#define H264_I_Slice 2
#define H264_SP_Slice 3
#define H264_SI_Slice 4
#define H264_P_Slice_ALL 5
#define H264_B_Slice_ALL 6
#define H264_I_Slice_ALL 7
#define H264_SP_Slice_ALL 8
#define H264_SI_Slice_ALL 9

#define NREF_PIC 0
#define SREF_PIC 1
#define LREF_PIC 2

//AVC Profile IDC definitions
#define BASELINE_PROFILE                    66      //!< YUV 4:2:0/8  "Baseline"
#define MAIN_PROFILE                        77      //!< YUV 4:2:0/8  "Main"
#define EXTENDED_PROFILE                    88      //!< YUV 4:2:0/8  "Extended"
#define FREXT_HP_PROFILE                    100     //!< YUV 4:2:0/8 "High"
#define FREXT_Hi10P_PROFILE                 110     //!< YUV 4:2:0/10 "High 10"
#define FREXT_Hi422_PROFILE                 122     //!< YUV 4:2:2/10 "High 4:2:2"
#define FREXT_Hi444_PROFILE                 244     //!< YUV 4:4:4/14 "High 4:4:4"
#define FREXT_CAVLC444_PROFILE              44      //!< YUV 4:4:4/14 "CAVLC 4:4:4"
#define SCALABLE_BASELINE_PROFILE   83      //!< Scalable Baseline profile
#define SCALABLE_HIGH_PROFILE       86      //!< Scalable High profile
#define MULTIVIEW_HIGH_PROFILE      118     //!< Multiview High profile
#define STEREO_HIGH_PROFILE     128     //!< Stereo High profile

#define YUV400 0
#define YUV420 1
#define YUV422 2
#define YUV444 3

#define H264_MAX_FB_NUM 17
#define H264_MAX_REF_PIC_LIST_NUM 3
#define H264_DPB_FBUF_UNKNOWN 0xFF
#define H264_FRM_IDX_UNKNOWN 0xFFFFFFFF
#define H264_FRM_NUM_UNKNOWN 0xFFFFFFFF
#define H264_FRM_NUM_WRAP_UNKNOWN 0x7FFFFFFF
#define H264_MAX_POC 0x7FFFFFFF
#define H264_MIN_POC 0x80000001
#define H264_MAX_PIC_NUM 0xEFFFFFFF

#define SubWidthC  [4]= { 1, 2, 2, 1};
#define SubHeightC [4]= { 1, 2, 1, 1};

#define H264_MAX_SPS_NUM 32
#define H264_MAX_PPS_NUM 256

#define H264_MAX_REF_LIST_NUM 6

#define fgIsH264SeqEnd(arg)   (arg & SEQ_END)

typedef enum _H264_DPB_SIZE_T
{
    H264_LEVEL_1_0 = 10,
    H264_LEVEL_1_b = 9,
    H264_LEVEL_1_1 = 11,
    H264_LEVEL_1_2 = 12,
    H264_LEVEL_1_3 = 13,
    H264_LEVEL_2_0 = 20,
    H264_LEVEL_2_1 = 21,
    H264_LEVEL_2_2 = 22,
    H264_LEVEL_3_0 = 30,
    H264_LEVEL_3_1 = 31,
    H264_LEVEL_3_2 = 32,
    H264_LEVEL_4_0 = 40,
    H264_LEVEL_4_1 = 41,
    H264_LEVEL_5_0 = 50,
    H264_LEVEL_5_1 = 51,
} H264_DPB_SIZE;

typedef enum _H264_RPIC_LIST
{
    H264_P_SREF_TFLD = 0,
    H264_P_SREF_BFLD = 1,
    H264_B0_SREF_TFLD = 2,
    H264_B0_SREF_BFLD = 3,
    H264_B1_SREF_TFLD = 4,
    H264_B1_SREF_BFLD = 5,
    H264_P_LREF_TFLD = 6,
    H264_P_LREF_BFLD = 7,
    H264_B_LREF_TFLD = 8,
    H264_B_LREF_BFLD = 9,
} H264_RPIC_LIST;

typedef enum _H264_DPB_SEARCH_T
{
    H264_DPB_S_EMPTY = 0,
    H264_DPB_S_DECODED = 1,
    H264_DPB_S_DECODED_NO_CURR = 2,
    H264_DPB_S_DECODED_NO_CURR_IP_ONLY = 3,
#if VDEC_SKYPE_SUPPORT
    H264_DPB_S_SKYPE_ORDER = 4,
#endif
} H264_DPB_SEARCH_T;

typedef struct VDEC_INFO_H264_AU_T_
{
    UCHAR  ucPicStruct;
    UCHAR  ucDpbId;         // Idx in DPB
    UINT32 u4PicCdType;
    INT32   i4POC;
    UCHAR ucH264OwnFBUFListIdx;
    UCHAR ucH264RefFBUFListIdx[H264_MAX_FB_NUM];
    UCHAR ucH264OutputListWrIdx;
    UCHAR ucH264OutputListRdIdx;
    UCHAR arH264OutputList[H264_MAX_FB_NUM];
    UINT32 u4SlicePPSID;
    VDEC_INFO_H264_PPS_T rH264AUPPSInfo;
    VDEC_INFO_H264_SPS_T rH264AUSPSInfo;
    VDEC_INFO_H264_LAST_INFO_T rH264AULastInfo;
} VDEC_INFO_H264_AU_T;

#ifdef VDEC_SR_SUPPORT
#define H264_MAX_DFB_NUM MPEG_DFB_NUM
typedef struct VDEC_INFO_H264_DFB_LSIT_INFO_T_
{
    UCHAR ucH264DFBListWrIdx;
    UCHAR ucH264DFBListRdIdx;
    UCHAR ucH264MaxBLPtsDFBIdx;
    UCHAR ucH264EDPBLastRemoveIdx;
    UCHAR ucH264LastReconstructDFBIdx;
    UINT64 u8H264MaxBLPts;
    VDEC_INFO_H264_AU_T arH264DFBList[2][H264_MAX_DFB_NUM];
    VDEC_INFO_H264_FBUF_INFO_T arH264DFBFbInfo[2][H264_MAX_DFB_NUM];
    FBM_FRAMEINFO arH264DFBFrameInfo[H264_MAX_DFB_NUM];
} VDEC_INFO_H264_DFB_LSIT_INFO_T;
#endif

typedef struct _H264_DRV_INFO_T
{
    UCHAR ucH264DpbOutputFbId;
    UCHAR ucPredFbId;
    UINT32 u4PredSa;
    UINT32 u4CurrStartCodeAddr;
    UINT32 u4BitCount;
    UINT32 u4DecErrInfo;
    INT32 i4LatestIPOC;
    INT64 i8BasePTS;
    INT64 i8LatestRealPTS;
    INT32 i4PreFrmPOC;
    INT32 i4LatestRealPOC;
    UINT32 u4LatestSPSId;
    VDEC_INFO_H264_SPS_T arH264SPS[H264_MAX_SPS_NUM];
    VDEC_INFO_H264_PPS_T arH264PPS[H264_MAX_PPS_NUM];
    VDEC_INFO_H264_SLICE_HDR_T rH264SliceHdr;
    VDEC_INFO_H264_SEI_T rH264SEI;
    VDEC_INFO_H264_FBUF_INFO_T arH264FbInfo[H264_MAX_FB_NUM];
#if VDEC_MVC_SUPPORT
    VDEC_INFO_H264_FBUF_INFO_T rH264PrevFbInfo;
#endif
#ifdef VDEC_SR_SUPPORT
    VDEC_INFO_H264_FBUF_INFO_T arH264EDpbInfo[MAX_EDPB_NUM];     // 0: FRef, 1: BRef, 2:Working
    //VDEC_INFO_H264_DFB_LSIT_INFO_T rH264DFBInfo;
    VDEC_INFO_H264_DFB_LSIT_INFO_T *ptH264DFBInfo;
#endif
    VDEC_INFO_H264_REF_PIC_LIST_T arH264RefPicList[H264_MAX_REF_LIST_NUM];
    VDEC_INFO_H264_P_REF_PRM_T rPRefPicListInfo;
    VDEC_INFO_H264_B_REF_PRM_T rBRefPicListInfo;
    VDEC_INFO_H264_BS_INIT_PRM_T rBsInitPrm;
    VDEC_NORM_INFO_T *prVDecNormInfo;
    VDEC_FBM_INFO_T *prVDecFbmInfo;
    VDEC_PIC_INFO_T *prVDecPicInfo;
    VDEC_INFO_DEC_PRM_T rVDecNormHalPrm;
    void *prH264MvStartAddr;
#ifdef VDEC_SR_SUPPORT
    VDEC_SR_INFO_T *prVDecSRInfo;
#endif
#if  (defined(DRV_VDEC_VDP_RACING) || defined(VDEC_PIP_WITH_ONE_HW))
    BOOL   fgIsRacing;
    UCHAR ucDecFrmBufCnt;
    BOOL   fgIsReadyPreOutput;
    BOOL   fgPreInsOutFBuf;
    UINT32 u4OutIdx;
    VDEC_INFO_H264_FBUF_INFO_T  rH264OutFbInfo[2];

    INT32   i4BaseOutPOC;
    UCHAR   ucWaitClrPicRefIno_FbId;
#endif

    //Patch for .mp4 file
    BOOL    fgHeaderDefineByCFA;
    UINT32 u4SPSHeaderCnt;
    UINT32 u4PPSHeaderCnt;

#if VDEC_MVC_SUPPORT
    VDEC_OFFSET_METADATA_INFO_T *prVDecOMTData;
#endif
} H264_DRV_INFO_T;

#if 0
static VDEC_INFO_H264_SPS_T _arH264SPS[MPV_MAX_VLD][MAX_SPS_NUM];
static VDEC_INFO_H264_PPS_T _arH264PPS[MPV_MAX_VLD][MAX_PPS_NUM];
static VDEC_INFO_H264_SLICE_HDR_T _rH264SliceHdr[MPV_MAX_VLD];
static VDEC_INFO_H264_DEC_PRM_T _rH264DecPrm[MPV_MAX_VLD];
static VDEC_INFO_H264_FBUF_INFO_T _arH264FbInfo[MPV_MAX_VLD][H264_MAX_FB_NUM];
static VDEC_INFO_H264_FBUF_INFO_T *_prH264CurrFbInfo[MPV_MAX_VLD];
static VDEC_INFO_H264_REF_PIC_LIST_T _arH264RefPicList[MPV_MAX_VLD][6];
static VDEC_INFO_H264_P_REF_PRM_T _arPRefPicListInfo[MPV_MAX_VLD];
static VDEC_INFO_H264_B_REF_PRM_T _arBRefPicListInfo[MPV_MAX_VLD];
#endif

#define fgIsRefPic(arg) ((arg > 0))
#define fgIsIDRPic(arg) ((arg == IDR_SLICE))
//#define fgIsFrmPic(arg) ((_rH264DecPrm[arg].bPicStruct == FRAME))  prVDecH264DecPrm->fgIsFrmPic

#define fgIsISlice(bType) ((bType == H264_I_Slice) ||(bType == H264_SI_Slice) || (bType == H264_I_Slice_ALL))
#define fgIsPSlice(bType) ((bType == H264_P_Slice) ||(bType == H264_SP_Slice) || (bType == H264_P_Slice_ALL))
#define fgIsBSlice(bType) ((bType == H264_B_Slice) || (bType == H264_B_Slice_ALL))

#if VDEC_MVC_SUPPORT
#define fgIsMVCBaseView(arg) (arg == VDEC_MVC_BASE)
#define fgIsMVCDepView(arg) (arg == VDEC_MVC_DEP)
#define fgIsMVCType(arg)  (fgIsMVCBaseView(arg)  || fgIsMVCDepView(arg))
#endif

extern void vH264InitProc(UCHAR ucEsId);
extern INT32 i4H264VParseProc(UCHAR ucEsId, UINT32 u4VParseType);
extern BOOL fgH264VParseChkProc(UCHAR ucEsId);
extern INT32 i4H264UpdInfoToFbg(UCHAR ucEsId);
extern void vH264StartToDecProc(UCHAR ucEsId);
extern void vH264ISR(UCHAR ucEsId);
extern BOOL fgIsH264DecEnd(UCHAR ucEsId);
extern BOOL fgIsH264DecErr(UCHAR ucEsId);
extern BOOL fgH264ResultChk(UCHAR ucEsId);
extern BOOL fgIsH264InsToDispQ(UCHAR ucEsId);
extern BOOL fgIsH264GetFrmToDispQ(UCHAR ucEsId);
extern void vH264EndProc(UCHAR ucEsId);
extern BOOL fgH264FlushDPB(UCHAR ucEsId, BOOL fgWithOutput);
extern void vH264ReleaseProc(UCHAR ucEsId, BOOL fgResetHW);

#ifdef VDEC_SR_SUPPORT
extern BOOL fgH264GenEDPB(UCHAR ucEsId);
extern BOOL fgH264RestoreEDPB(UCHAR ucEsId, BOOL fgRestore);
extern BOOL fgIsH264GetSRFrmToDispQ(UCHAR ucEsId, BOOL fgSeqEnd, BOOL fgRefPic);
extern void vH264GetSeqFirstTarget(UCHAR ucEsId);
extern void vH264ReleaseSRDrvInfo(UCHAR ucEsId);
extern BOOL fgH264GetDFBInfo(UCHAR ucEsId, void **prDFBInfo);
extern void vH264RestoreSeqInfo(UCHAR ucEsId);
extern BOOL fgH264RvsDone(UCHAR ucEsId);
extern void vH264ReleaseEDPB(UCHAR ucEsId);
#endif

#if  (defined(DRV_VDEC_VDP_RACING) || defined(VDEC_PIP_WITH_ONE_HW))
extern BOOL fgIsH264PreInsToDispQ(UCHAR ucEsId);
extern BOOL fgIsH264PreGetFrmToDispQ(UCHAR ucEsId);
extern BOOL fgIsH264FrmBufReadyForDisp(UCHAR ucEsId);
extern BOOL fgIsH264PreInsToDispQ(UCHAR ucEsId);
extern BOOL fgIsH264SetFBufInfo(UCHAR ucEsId);
#endif

// vdec_drv_h264_parse.c
extern void vSeq_Par_Set_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);
extern INT32 vPic_Par_Set_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);
extern void vSEI_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, H264_DRV_INFO_T  *prH264DrvDecInfo);
extern INT32 i4SlimParseSliceHeader(UINT32 u4VDecID, H264_DRV_INFO_T  *prH264DrvDecInfo);
extern INT32 i4ParseSliceHeader(UINT32 u4VDecID, H264_DRV_INFO_T  *prH264DrvDecInfo);

// vdec_drv_h264_decode.c
extern void vFlushBufInfo(H264_DRV_INFO_T *prH264DrvInfo);
extern void vFlushAllSetData(H264_DRV_INFO_T *prH264DrvInfo);
extern UCHAR ucH264GetMaxFBufNum(VDEC_INFO_H264_DEC_PRM_T *prVDecH264DecPrm, UINT32 u4PicWidth, UINT32 u4PicHeight, BOOL fgIsBDDisc);
extern void vPrepareFBufInfo(H264_DRV_INFO_T *prH264DrvInfo);
extern BOOL fgIsNonRefFbuf(VDEC_INFO_H264_FBUF_INFO_T *tFBufInfo);
extern void vSetPicRefType(UCHAR ucPicStruct, UCHAR ucRefType, VDEC_INFO_H264_FBUF_INFO_T *tFBufInfo);
extern void vAdapRefPicmarkingProce(UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvInfo);
extern void vSlidingWindowProce(H264_DRV_INFO_T *prH264DrvInfo);
extern UCHAR ucGetPicRefType(UCHAR ucPicStruct, VDEC_INFO_H264_FBUF_INFO_T *tFBufInfo);
extern UINT32 u4VDecGetMinPOCFBuf(VDEC_ES_INFO_T *prVDecEsInfo, H264_DPB_SEARCH_T eDPBSearchType);
extern void vFlushBufRefInfo(H264_DRV_INFO_T *prH264DrvInfo, BOOL fgIsForceFree);
#if (!defined(DRV_VDEC_VDP_RACING) && !defined(VDEC_PIP_WITH_ONE_HW))
extern UINT32 u4VDecOutputMinPOCFBuf(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4MinPOCFBufIdx);
#else
extern UINT32 u4VDecOutputMinPOCFBuf(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4MinPOCFBufIdx, BOOL fgFreeBuf, BOOL fgOutBase);
#endif
#ifdef FBM_ALLOC_SUPPORT
extern void vFreeH264WorkingArea(VDEC_ES_INFO_T *prVDecEsInfo);
#endif
extern void vVDecSetPicInfo(UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvInfo);
extern void vH264SetDownScaleParam(H264_DRV_INFO_T *prH264DrvInfo, BOOL fgEnable);
#if ((CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560) && CONFIG_DRV_FTS_SUPPORT)
extern void vH264SetLetterBoxParam(H264_DRV_INFO_T *prH264DrvInfo);
#endif
extern void vClrPicRefInfo(UCHAR ucPicStruct, H264_DRV_INFO_T *prH264DrvInfo, UINT32 u4FBufIdx);
extern void vH264ChkWhileLines(UCHAR ucEsId);
extern void vClrFBufInfo(H264_DRV_INFO_T *prH264DrvInfo, UINT32 u4FBufIdx);


void vHrdParameters(UINT32 u4BSID, UINT32 u4VDecID, VDEC_INFO_H264_HRD_PRM_T *tHrdPara);
void vInitSPS(VDEC_INFO_H264_SPS_T *prSPS);
void vInitSliceHdr(VDEC_INFO_H264_DEC_PRM_T *prVDecH264DecPrm);
void vRef_Pic_List_Reordering(UINT32 u4VDecID, VDEC_INFO_H264_SLICE_HDR_T *prSliceHdr);
void vDec_Ref_Pic_Marking(UINT32 u4VDecID, VDEC_INFO_H264_SLICE_HDR_T *prSliceHdr, BOOL fgIsIDRPic);
//void vInterpretBufferingPeriodInfo(UINT32 u4BSID,UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);
void vRecoveryPoint(UINT32 u4BSID, UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);
void vPicTiming(UINT32 u4BSID, UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);
//void vInterpretFilmGrainCharacteristicsInfo(UINT32 u4BSID,UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);
void vH264SetColorPrimaries(H264_DRV_INFO_T *prH264DrvDecInfo, UINT32 u4ColorPrimaries);
void vH264SetSampleAsp(H264_DRV_INFO_T *prH264DrvDecInfo, UINT32 u4H264Asp, UINT32 u4SarWidth, UINT32 u4SarHeight);
void vH264SetFrameTimingInfo(H264_DRV_INFO_T *prH264DrvDecInfo, UINT32 u4NumUnitsInTick, UINT32 u4TimeScale, BOOL fgIsFixFrm);
void vH264CCData(UINT32 u4BSID, UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);
void vH264xvYCCData(UINT32 u4BSID, UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);

extern BOOL fgVDecH264FreeFBuf(H264_DRV_INFO_T *prH264DrvInfo, UINT32 u4FBufIdx);

#ifdef VDEC_SR_SUPPORT
extern void vH264InitDFBList(H264_DRV_INFO_T *prH264DrvInfo);
extern BOOL fgH264UpdDFBList(H264_DRV_INFO_T *prH264DrvInfo);
extern void vH264UpdDFBListIdxInfo(H264_DRV_INFO_T *prH264DrvInfo, UCHAR ucDPBFbId, UCHAR ucH264FBUFListIdx);
extern UINT32 u4H264GetMaxPOCBFBuf(H264_DRV_INFO_T *prH264DrvInfo);
extern void vH264EDpbPutBuf(H264_DRV_INFO_T *prH264DrvInfo,  UCHAR ucSrcDpbBuf);
extern UINT32 u4H264SROutputMaxPOCFBuf(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4MinPOCFBufIdx);
extern void vH264InitFBufInfo(VDEC_INFO_H264_FBUF_INFO_T *prH264FbufInfo);
extern UINT32 i4H264OutputProcSR(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4MinPOCFBufIdx);
extern UINT32 u4VDecGetMaxPOCFBuf(VDEC_ES_INFO_T *prVDecEsInfo, H264_DPB_SEARCH_T eDPBSearchType);
extern void vH264UpdWorkingAreaInfo(H264_DRV_INFO_T *prH264TarDrvInfo, UCHAR ucEDPBSize);

#endif

#ifdef DRV_VDEC_VDP_RACING
extern void vH264SetDpbBufferInfo(UCHAR ucEsId);
extern void vH264SetFBufInfoOnly(UCHAR ucEsId);
extern void vVDecClearExternalBufInfo(H264_DRV_INFO_T *prH264DrvInfo, UINT32 u4FbIdx);
#endif

extern void vH264SetCurrFrameBufferInfo(UCHAR ucEsId);

#ifdef MPV_DUMP_FBUF
extern void VDec_Dump_Data(UINT32 u4StartAddr, UINT32 u4FileSize, UINT32 u4FileCnt, UCHAR *pucAddStr);
#endif

#if VDEC_MVC_SUPPORT
extern BOOL fgIsMVCIDR(H264_DRV_INFO_T *prH264DrvInfo);
extern void vPrefix_Nal_Unit_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);
extern void vSubset_Seq_Parameter_Set_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);
void vH264OffsetMetadata(UINT32 u4BSID, UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);
void vH264MVCScalableNesting(UINT32 u4BSID, UINT32 u4VDecID, H264_DRV_INFO_T *prH264DrvDecInfo);
#endif
#if MVC_PATCH_1
INT32 i4MVCHWPatch1(UINT32 u4BSID, UINT32 u4VDecID, VDEC_INFO_H264_BS_INIT_PRM_T *prH264BSInitPrm);
#endif

#ifdef DRV_VDEC_SUPPORT_FBM_OVERLAY
extern BOOL fgAVCNeedDoDscl(UCHAR ucEsId);
#endif

//Get mw frame rate for h264-ts file. Jie Zhang@20100806
extern UINT32 u4H264CheckFrameRate(UCHAR ucEsId);
extern BOOL fgH264IsSlideShow(UCHAR ucEsId);
BOOL fgH264CheckIsDivXPlus(UINT32 u4BSID, UINT32 u4VDecID, UCHAR ucEsId);
#endif