aboutsummaryrefslogtreecommitdiff
path: root/drivers/misc/mediatek/vdec/include/vdec_drv_h265_info.h
blob: 2c39c85f9bcd93016979a9498ea3b64c13d70105 (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_H265_INFO_H_
#define _VDEC_DRV_H265_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_h265.h"
#include "vdec_info_common.h"

#include "vdec_hal_if_h265.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 H265_SEI 0x06
#define H265_SPS 0x07
#define H265_PPS 0x08
#define H265_END_SEQ 0x0A
#define H265_PREFIX_NAL 0x0E
#define H265_SUB_SPS 0x0F
#define H265_SLICE_EXT 0x14

// Slice_type
#define H265_P_Slice 0
#define H265_B_Slice 1
#define H265_I_Slice 2
#define H265_SP_Slice 3
#define H265_SI_Slice 4
#define H265_P_Slice_ALL 5
#define H265_B_Slice_ALL 6
#define H265_I_Slice_ALL 7
#define H265_SP_Slice_ALL 8
#define H265_SI_Slice_ALL 9

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

//HEVC 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 H265_MAX_FB_NUM 17
#define H265_MAX_REF_PIC_LIST_NUM 3
#define H265_DPB_FBUF_UNKNOWN 0xFF
#define H265_FRM_IDX_UNKNOWN 0xFFFFFFFF
#define H265_FRM_NUM_UNKNOWN 0xFFFFFFFF
#define H265_FRM_NUM_WRAP_UNKNOWN 0x7FFFFFFF
#define H265_MAX_POC 0x7FFFFFFF
#define H265_MIN_POC 0x80000001
#define H265_MAX_PIC_NUM 0xEFFFFFFF

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

#define H265_MAX_SPS_NUM 32
#define H265_MAX_PPS_NUM 256

#define H265_MAX_REF_LIST_NUM 6

#define fgIsH265SeqEnd(arg)   (arg & SEQ_END)

typedef enum _H265_DPB_SIZE_T
{
    H265_LEVEL_1_0 = 10,
    H265_LEVEL_1_b = 9,
    H265_LEVEL_1_1 = 11,
    H265_LEVEL_1_2 = 12,
    H265_LEVEL_1_3 = 13,
    H265_LEVEL_2_0 = 20,
    H265_LEVEL_2_1 = 21,
    H265_LEVEL_2_2 = 22,
    H265_LEVEL_3_0 = 30,
    H265_LEVEL_3_1 = 31,
    H265_LEVEL_3_2 = 32,
    H265_LEVEL_4_0 = 40,
    H265_LEVEL_4_1 = 41,
    H265_LEVEL_5_0 = 50,
    H265_LEVEL_5_1 = 51,
} H265_DPB_SIZE;

typedef enum _H265_RPIC_LIST
{
    H265_P_SREF_TFLD = 0,
    H265_P_SREF_BFLD = 1,
    H265_B0_SREF_TFLD = 2,
    H265_B0_SREF_BFLD = 3,
    H265_B1_SREF_TFLD = 4,
    H265_B1_SREF_BFLD = 5,
    H265_P_LREF_TFLD = 6,
    H265_P_LREF_BFLD = 7,
    H265_B_LREF_TFLD = 8,
    H265_B_LREF_BFLD = 9,
} H265_RPIC_LIST;

typedef enum _H265_DPB_SEARCH_T
{
    H265_DPB_S_EMPTY = 0,
    H265_DPB_S_DECODED = 1,
    H265_DPB_S_DECODED_NO_CURR = 2,
    H265_DPB_S_DECODED_NO_CURR_IP_ONLY = 3,
#if VDEC_SKYPE_SUPPORT
    H265_DPB_S_SKYPE_ORDER = 4,
#endif
} H265_DPB_SEARCH_T;

typedef struct VDEC_INFO_H265_AU_T_
{
    UCHAR  ucPicStruct;
    UCHAR  ucDpbId;         // Idx in DPB
    UINT32 u4PicCdType;
    INT32   i4POC;
    UCHAR ucH265OwnFBUFListIdx;
    UCHAR ucH265RefFBUFListIdx[H265_MAX_FB_NUM];
    UCHAR ucH265OutputListWrIdx;
    UCHAR ucH265OutputListRdIdx;
    UCHAR arH265OutputList[H265_MAX_FB_NUM];
    UINT32 u4SlicePPSID;
    H265_PPS_Data rH265AUPPSInfo;
    H265_SPS_Data rH265AUSPSInfo;
    VDEC_INFO_H265_LAST_INFO_T rH265AULastInfo;
} VDEC_INFO_H265_AU_T;

#ifdef VDEC_SR_SUPPORT
#define H265_MAX_DFB_NUM MPEG_DFB_NUM
typedef struct VDEC_INFO_H265_DFB_LSIT_INFO_T_
{
    UCHAR ucH265DFBListWrIdx;
    UCHAR ucH265DFBListRdIdx;
    UCHAR ucH265MaxBLPtsDFBIdx;
    UCHAR ucH265EDPBLastRemoveIdx;
    UCHAR ucH265LastReconstructDFBIdx;
    UINT64 u8H265MaxBLPts;
    VDEC_INFO_H265_AU_T arH265DFBList[2][H265_MAX_DFB_NUM];
    VDEC_INFO_H265_FBUF_INFO_T arH265DFBFbInfo[2][H265_MAX_DFB_NUM];
    FBM_FRAMEINFO arH265DFBFrameInfo[H265_MAX_DFB_NUM];
} VDEC_INFO_H265_DFB_LSIT_INFO_T;
#endif

typedef struct _H265_DRV_INFO_T
{
    UCHAR ucH265DpbOutputFbId;
    UCHAR ucPredFbId;
    UINT32 u4PredSa;
    UINT32 u4CurrStartCodeAddr;
    UINT32 u4BitCount;
    UINT32 u4DecErrInfo;
    INT32 i4LatestIPOC;
    INT64 i8BasePTS;
    INT64 i8LatestRealPTS;
    INT32 i4PreFrmPOC;
    INT32 i4LatestRealPOC;
    UINT32 u4LatestSPSId;
    H265_SPS_Data arH265SPS[H265_MAX_SPS_NUM];
    H265_PPS_Data arH265PPS[H265_MAX_PPS_NUM];
    H265_Slice_Hdr_Data rH265SliceHdr;
    H265_SEI_Data rH265SEI;
    VDEC_INFO_H265_FBUF_INFO_T arH265FbInfo[H265_MAX_FB_NUM];
#if VDEC_MVC_SUPPORT
    VDEC_INFO_H265_FBUF_INFO_T rH265PrevFbInfo;
#endif
#ifdef VDEC_SR_SUPPORT
    VDEC_INFO_H265_FBUF_INFO_T arH265EDpbInfo[MAX_EDPB_NUM];     // 0: FRef, 1: BRef, 2:Working
    //VDEC_INFO_H265_DFB_LSIT_INFO_T rH265DFBInfo;
    VDEC_INFO_H265_DFB_LSIT_INFO_T *ptH265DFBInfo;
#endif
    VDEC_INFO_H265_REF_PIC_LIST_T arH265RefPicList[H265_MAX_REF_LIST_NUM];
    VDEC_INFO_H265_P_REF_PRM_T rPRefPicListInfo;
    VDEC_INFO_H265_B_REF_PRM_T rBRefPicListInfo;
    VDEC_INFO_H265_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 *prH265MvStartAddr;
#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_H265_FBUF_INFO_T  rH265OutFbInfo[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
} H265_DRV_INFO_T;

#if 0
static H265_SPS_Data _arH265SPS[MPV_MAX_VLD][MAX_SPS_NUM];
static H265_PPS_Data _arH265PPS[MPV_MAX_VLD][MAX_PPS_NUM];
static H265_Slice_Hdr_Data _rH265SliceHdr[MPV_MAX_VLD];
static VDEC_INFO_H265_DEC_PRM_T _rH265DecPrm[MPV_MAX_VLD];
static VDEC_INFO_H265_FBUF_INFO_T _arH265FbInfo[MPV_MAX_VLD][H265_MAX_FB_NUM];
static VDEC_INFO_H265_FBUF_INFO_T *_prH265CurrFbInfo[MPV_MAX_VLD];
static VDEC_INFO_H265_REF_PIC_LIST_T _arH265RefPicList[MPV_MAX_VLD][6];
static VDEC_INFO_H265_P_REF_PRM_T _arH265PRefPicListInfo[MPV_MAX_VLD];
static VDEC_INFO_H265_B_REF_PRM_T _arH265BRefPicListInfo[MPV_MAX_VLD];
#endif

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

#define fgIsISlice(bType) ((bType == H265_I_Slice) ||(bType == H265_SI_Slice) || (bType == H265_I_Slice_ALL))
#define fgIsPSlice(bType) ((bType == H265_P_Slice) ||(bType == H265_SP_Slice) || (bType == H265_P_Slice_ALL))
#define fgIsBSlice(bType) ((bType == H265_B_Slice) || (bType == H265_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 vH265InitProc(UCHAR ucEsId);
extern INT32 i4H265VParseProc(UCHAR ucEsId, UINT32 u4VParseType);
extern BOOL fgH265VParseChkProc(UCHAR ucEsId);
extern INT32 i4H265UpdInfoToFbg(UCHAR ucEsId);
extern void vH265StartToDecProc(UCHAR ucEsId);
extern void vH265ISR(UCHAR ucEsId);
extern BOOL fgIsH265DecEnd(UCHAR ucEsId);
extern BOOL fgIsH265DecErr(UCHAR ucEsId);
extern BOOL fgH265ResultChk(UCHAR ucEsId);
extern BOOL fgIsH265InsToDispQ(UCHAR ucEsId);
extern BOOL fgIsH265GetFrmToDispQ(UCHAR ucEsId);
extern void vH265EndProc(UCHAR ucEsId);
extern BOOL fgH265FlushDPB(UCHAR ucEsId, BOOL fgWithOutput);
extern void vH265ReleaseProc(UCHAR ucEsId, BOOL fgResetHW);

#ifdef VDEC_SR_SUPPORT
extern BOOL fgH265GenEDPB(UCHAR ucEsId);
extern BOOL fgH265RestoreEDPB(UCHAR ucEsId, BOOL fgRestore);
extern BOOL fgIsH265GetSRFrmToDispQ(UCHAR ucEsId, BOOL fgSeqEnd, BOOL fgRefPic);
extern void vH265GetSeqFirstTarget(UCHAR ucEsId);
extern void vH265ReleaseSRDrvInfo(UCHAR ucEsId);
extern BOOL fgH265GetDFBInfo(UCHAR ucEsId, void **prDFBInfo);
extern void vH265RestoreSeqInfo(UCHAR ucEsId);
extern BOOL fgH265RvsDone(UCHAR ucEsId);
extern void vH265ReleaseEDPB(UCHAR ucEsId);
#endif

#if  (defined(DRV_VDEC_VDP_RACING) || defined(VDEC_PIP_WITH_ONE_HW))
extern BOOL fgIsH265PreInsToDispQ(UCHAR ucEsId);
extern BOOL fgIsH265PreGetFrmToDispQ(UCHAR ucEsId);
extern BOOL fgIsH265FrmBufReadyForDisp(UCHAR ucEsId);
extern BOOL fgIsH265PreInsToDispQ(UCHAR ucEsId);
extern BOOL fgIsH265SetFBufInfo(UCHAR ucEsId);
#endif

// vdec_drv_h265_parse.c
extern void vSeq_Par_Set_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);
extern INT32 vPic_Par_Set_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);
extern void vSEI_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, H265_DRV_INFO_T  *prH265DrvDecInfo);
extern INT32 i4SlimParseSliceHeader(UINT32 u4VDecID, H265_DRV_INFO_T  *prH265DrvDecInfo);
extern INT32 i4ParseSliceHeader(UINT32 u4VDecID, H265_DRV_INFO_T  *prH265DrvDecInfo);

// vdec_drv_h265_decode.c
extern void vFlushBufInfo(H265_DRV_INFO_T *prH265DrvInfo);
extern void vFlushAllSetData(H265_DRV_INFO_T *prH265DrvInfo);
extern UCHAR ucH265GetMaxFBufNum(VDEC_INFO_H265_DEC_PRM_T *prVDecH265DecPrm, UINT32 u4PicWidth, UINT32 u4PicHeight, BOOL fgIsBDDisc);
extern void vPrepareFBufInfo(H265_DRV_INFO_T *prH265DrvInfo);
extern BOOL fgIsNonRefFbuf(VDEC_INFO_H265_FBUF_INFO_T *tFBufInfo);
extern void vSetPicRefType(UCHAR ucPicStruct, UCHAR ucRefType, VDEC_INFO_H265_FBUF_INFO_T *tFBufInfo);
extern void vAdapRefPicmarkingProce(UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvInfo);
extern void vSlidingWindowProce(H265_DRV_INFO_T *prH265DrvInfo);
extern UCHAR ucGetPicRefType(UCHAR ucPicStruct, VDEC_INFO_H265_FBUF_INFO_T *tFBufInfo);
extern UINT32 u4VDecGetMinPOCFBuf(VDEC_ES_INFO_T *prVDecEsInfo, H265_DPB_SEARCH_T eDPBSearchType);
extern void vFlushBufRefInfo(H265_DRV_INFO_T *prH265DrvInfo, 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 vFreeH265WorkingArea(VDEC_ES_INFO_T *prVDecEsInfo);
#endif
extern void vVDecSetPicInfo(UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvInfo);
extern void vH265SetDownScaleParam(H265_DRV_INFO_T *prH265DrvInfo, BOOL fgEnable);
#if ((CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560) && CONFIG_DRV_FTS_SUPPORT)
extern void vH265SetLetterBoxParam(H265_DRV_INFO_T *prH265DrvInfo);
#endif
extern void vClrPicRefInfo(UCHAR ucPicStruct, H265_DRV_INFO_T *prH265DrvInfo, UINT32 u4FBufIdx);
extern void vH265ChkWhileLines(UCHAR ucEsId);
extern void vClrFBufInfo(H265_DRV_INFO_T *prH265DrvInfo, UINT32 u4FBufIdx);


void vHrdParameters(UINT32 u4BSID, UINT32 u4VDecID, H265_HRD_Data *tHrdPara);
void vInitSPS(H265_SPS_Data *prSPS);
void vInitSliceHdr(VDEC_INFO_H265_DEC_PRM_T *prVDecH265DecPrm);
void vRef_Pic_List_Reordering(UINT32 u4VDecID, H265_Slice_Hdr_Data *prSliceHdr);
void vDec_Ref_Pic_Marking(UINT32 u4VDecID, H265_Slice_Hdr_Data *prSliceHdr, BOOL fgIsIDRPic);
//void vHEVCInterpretBufferingPeriodInfo(UINT32 u4BSID,UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);
void vRecoveryPoint(UINT32 u4BSID, UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);
void vPicTiming(UINT32 u4BSID, UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);
//void vHEVCInterpretFilmGrainCharacteristicsInfo(UINT32 u4BSID,UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);
void vH265SetColorPrimaries(H265_DRV_INFO_T *prH265DrvDecInfo, UINT32 u4ColorPrimaries);
void vH265SetSampleAsp(H265_DRV_INFO_T *prH265DrvDecInfo, UINT32 u4H265Asp, UINT32 u4SarWidth, UINT32 u4SarHeight);
void vH265SetFrameTimingInfo(H265_DRV_INFO_T *prH265DrvDecInfo, UINT32 u4NumUnitsInTick, UINT32 u4TimeScale, BOOL fgIsFixFrm);
void vH265CCData(UINT32 u4BSID, UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);
void vH265xvYCCData(UINT32 u4BSID, UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);

extern BOOL fgVDecH265FreeFBuf(H265_DRV_INFO_T *prH265DrvInfo, UINT32 u4FBufIdx);

#ifdef VDEC_SR_SUPPORT
extern void vH265InitDFBList(H265_DRV_INFO_T *prH265DrvInfo);
extern BOOL fgH265UpdDFBList(H265_DRV_INFO_T *prH265DrvInfo);
extern void vH265UpdDFBListIdxInfo(H265_DRV_INFO_T *prH265DrvInfo, UCHAR ucDPBFbId, UCHAR ucH265FBUFListIdx);
extern UINT32 u4H265GetMaxPOCBFBuf(H265_DRV_INFO_T *prH265DrvInfo);
extern void vH265EDpbPutBuf(H265_DRV_INFO_T *prH265DrvInfo,  UCHAR ucSrcDpbBuf);
extern UINT32 u4H265SROutputMaxPOCFBuf(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4MinPOCFBufIdx);
extern void vH265InitFBufInfo(VDEC_INFO_H265_FBUF_INFO_T *prH265FbufInfo);
extern UINT32 i4H265OutputProcSR(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4MinPOCFBufIdx);
extern UINT32 u4VDecGetMaxPOCFBuf(VDEC_ES_INFO_T *prVDecEsInfo, H265_DPB_SEARCH_T eDPBSearchType);
extern void vH265UpdWorkingAreaInfo(H265_DRV_INFO_T *prH265TarDrvInfo, UCHAR ucEDPBSize);

#endif

#ifdef DRV_VDEC_VDP_RACING
extern void vH265SetDpbBufferInfo(UCHAR ucEsId);
extern void vH265SetFBufInfoOnly(UCHAR ucEsId);
extern void vVDecClearExternalBufInfo(H265_DRV_INFO_T *prH265DrvInfo, UINT32 u4FbIdx);
#endif

extern void vH265SetCurrFrameBufferInfo(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(H265_DRV_INFO_T *prH265DrvInfo);
extern void vPrefix_Nal_Unit_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);
extern void vSubset_Seq_Parameter_Set_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);
void vH265OffsetMetadata(UINT32 u4BSID, UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);
void vH265MVCScalableNesting(UINT32 u4BSID, UINT32 u4VDecID, H265_DRV_INFO_T *prH265DrvDecInfo);
#endif
#if MVC_PATCH_1
INT32 i4MVCHWPatch1(UINT32 u4BSID, UINT32 u4VDecID, VDEC_INFO_H265_BS_INIT_PRM_T *prH265BSInitPrm);
#endif

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

//Get mw frame rate for h265-ts file. Jie Zhang@20100806
extern UINT32 u4H265CheckFrameRate(UCHAR ucEsId);
extern BOOL fgH265IsSlideShow(UCHAR ucEsId);
BOOL fgH265CheckIsDivXPlus(UINT32 u4BSID, UINT32 u4VDecID, UCHAR ucEsId);
#endif