aboutsummaryrefslogtreecommitdiff
path: root/drivers/misc/mediatek/vdec/include
diff options
context:
space:
mode:
authorMeizu OpenSource <patchwork@meizu.com>2016-08-15 10:19:42 +0800
committerMeizu OpenSource <patchwork@meizu.com>2016-08-15 10:19:42 +0800
commitd2e1446d81725c351dc73a03b397ce043fb18452 (patch)
tree4dbc616b7f92aea39cd697a9084205ddb805e344 /drivers/misc/mediatek/vdec/include
downloadandroid_kernel_m2note-d2e1446d81725c351dc73a03b397ce043fb18452.tar.gz
first commit
Diffstat (limited to 'drivers/misc/mediatek/vdec/include')
-rw-r--r--drivers/misc/mediatek/vdec/include/chip_ver.h26
-rw-r--r--drivers/misc/mediatek/vdec/include/drv_common.h821
-rw-r--r--drivers/misc/mediatek/vdec/include/drv_config.h22
-rw-r--r--drivers/misc/mediatek/vdec/include/type.h53
-rw-r--r--drivers/misc/mediatek/vdec/include/u_uerrcode.h205
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_common_if.h81
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_config.h115
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_debug.h8
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_avs_info.h74
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_common_info.h5
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_fileio.h42
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_h264_info.h386
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_h265_info.h386
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_jpeg_info.h43
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_mpeg2_info.h563
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_mpeg4_info.h930
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_rm_info.h168
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_vp6_info.h214
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_vp8_info.h219
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_drv_wmv_info.h261
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_errcode.h178
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_info_avs.h215
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_info_common.h327
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_info_h264.h690
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_info_h265.h592
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_info_mpeg.h270
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_info_rm.h234
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_info_vp6.h219
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_info_vp8.h479
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_info_wmv.h531
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_sr_usage.h283
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_type.h291
-rw-r--r--drivers/misc/mediatek/vdec/include/vdec_usage.h1023
33 files changed, 9954 insertions, 0 deletions
diff --git a/drivers/misc/mediatek/vdec/include/chip_ver.h b/drivers/misc/mediatek/vdec/include/chip_ver.h
new file mode 100644
index 000000000..ffada5a2b
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/chip_ver.h
@@ -0,0 +1,26 @@
+#ifndef _CHIP_VER_H_
+#define _CHIP_VER_H_
+
+#define CONFIG_CHIP_VER_CURR 110
+#define CONFIG_CHIP_VER_MT8520 20
+#define CONFIG_CHIP_VER_MT8530 30
+#define CONFIG_CHIP_VER_MT8550 50
+#define CONFIG_CHIP_VER_MT8555 55
+#define CONFIG_CHIP_VER_MT8560 60
+#define CONFIG_CHIP_VER_MT8580 80
+#define CONFIG_CHIP_VER_MT6589 90
+#define CONFIG_CHIP_VER_MT6582 100
+#define CONFIG_CHIP_VER_MT6592 105
+#define CONFIG_CHIP_VER_MT6593 110
+
+#if (CONFIG_CHIP_VER_CURR == CONFIG_CHIP_VER_MT8520)
+#define CONFIG_DRV_MT8520 1
+#else
+#define CONFIG_DRV_MT8520 0
+#endif
+
+#define VDEC_8320_SUPPORT 1
+#define VDEC_6589_SUPPORT 1
+#define VDEC_6582_SUPPORT 0
+
+#endif // _CHIP_VER_H_
diff --git a/drivers/misc/mediatek/vdec/include/drv_common.h b/drivers/misc/mediatek/vdec/include/drv_common.h
new file mode 100644
index 000000000..2b20be140
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/drv_common.h
@@ -0,0 +1,821 @@
+#if ! defined(DRV_COMMON_H)
+#define DRV_COMMON_H
+
+//#define USE_2_ES
+/////////////////////////////////////////////////////////////////////////////////////
+// Below added for BD_P //
+/////////////////////////////////////////////////////////////////////////////////////
+//#include "x_typedef.h"
+#include "drv_config.h"
+//#include "dram_model.h"
+#include "chip_ver.h"
+
+//#include "sys_config.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define NEW_PAUSE_MODE 1
+
+// For FLV media use sorenson H263 codec @2009/06/26
+#if 0//CONFIG_DRV_SUPPORT_SORENSON_H263
+#define DRV_SUPPORT_SORENSON_H263 (1)
+#else
+#define DRV_SUPPORT_SORENSON_H263 (0)
+#endif
+
+#if DRV_SUPPORT_SORENSON_H263
+#define DRV_SORENSON_H263_HW_HDR_DETECTION 1
+#else
+#define DRV_SORENSON_H263_HW_HDR_DETECTION 0
+#endif
+
+//#define DRV_HIGH_BITRATE_PROC_CFG (1)
+#if CONFIG_DRV_HIGH_BITRATE_SPECIAL_PROC
+#define CONFIG_DRV_SUPPORT_CMD_Q_TX (1) // Can open directly later without considering high bitrate
+#else
+#define CONFIG_DRV_SUPPORT_CMD_Q_TX (0)
+#endif
+
+#if CONFIG_DRV_SUPPORT_CMD_Q_TX
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8550)
+#define DMX_MAX_TX_CNT_FOR_CMD_Q (50)
+#else
+#define DMX_MAX_TX_CNT_FOR_CMD_Q (50)
+#endif
+
+#define LPDMX_CMD_Q_TX_REG_DW_IDX (19)
+
+typedef struct
+{
+ UINT32 u4TxOfst;
+ UINT32 u4TxLen;
+} CMDQ_TX_ENTRY_T;
+#else
+// See PTX_CMDQ_NUM in dmx_verify.h ???
+// Can use DMX_MAX_TX_CNT_FOR_CMD_Q instead of PTX_CMDQ_NUM ???
+#define DMX_MAX_TX_CNT_FOR_CMD_Q (40) // (1)
+#endif
+
+// Can remove following 2 define if all ready @2009/01/06
+#if CONFIG_DRV_SUPPORT_RM
+#define CONFIG_DRV_SUPPORT_RM_VID_DYNC_MEM (1)
+#define CONFIG_DRV_SUPPORT_RM_COOK_AUD (1)
+#else
+#define CONFIG_DRV_SUPPORT_RM_VID_DYNC_MEM (0)
+#define CONFIG_DRV_SUPPORT_RM_COOK_AUD (0)
+#endif
+
+#define CONFIG_DRV_SUPPORT_SKYPE (0)
+#define CONFIG_DRV_XVID_ENABLE (1)
+#if CONFIG_DRV_XVID_ENABLE
+#define VC_XVID_ENABLE
+#endif
+
+
+/// Supported address swap mode in driver layer
+typedef enum
+{
+ ASM_0 = 0, ///< 8520 no address swap
+ ASM_1, ///< 8520 address swap mode 1
+ ASM_2, ///< 8520 address swap mode 2
+ ASM_3, ///< 5351 address swap mode 0
+ ASM_4, ///< 5351 address swap mode 1
+ ASM_5, ///< 5351 address swap mode 2
+ ASM_6, ///< 5351 address swap mode 3
+} DRV_ASM;
+
+/// Supported frame buffer type in driver layer
+typedef enum
+{
+ FBT_420_RS = 0, ///< YCbCr 420 raster scan
+ FBT_420_BK, ///< YCbCr 420 block
+ FBT_422_RS, ///< YCbCr 422 raster scan
+ FBT_422_BK, ///< YCbCr 422 block
+ FBT_420_BK_YCBIND, ///< YCbCr 420 block, Y C memory are bound, for H.264 request
+ FBT_420_BK_YONLY, ///< YCbCr 420 block, Y memory only, no CbCr, for H.264 request
+ FBT_WORKSPACE, ///< One continue memory, like JPEG working space
+ FBT_PBBUF, ///< One continue memory, overlay with one HD main buffer
+ FBT_BGIMG /// < One continue memory, overlay with whole sub buffer
+} DRV_FBTYPE;
+
+
+//#define DRV_SUPPORT_ADDRESS_SWAP
+#define DRV_ADDRESS_SWAP_MODE ASM_5
+
+#define DRV_ADDRESS_SWAP_OFF ASM_0
+
+#define DRV_SUPPORT_DEC_ERR_DROP_LEVEL
+
+//#define DRV_SUPPORT_VDEC_DOWN_SCALE
+
+#define DRV_SUPPORT_FRC_VAR
+
+#if (CONFIG_DRAM256_MODEL || (CONFIG_CHIP_VER_CURR == CONFIG_CHIP_VER_MT8550) || (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560))
+#define DRV_VDEC_VDP_RACING
+#endif
+
+#define DRV_VDP_SUPPORT_ONE_SOURCE_TWO_DISPLAY
+
+#ifdef DRV_VDEC_VDP_RACING
+#define DRV_VDEC_SUPPORT_FBM_OVERLAY
+#endif
+
+#if CONFIG_DRAM256_MODEL
+
+#define DRV_FBM_ORIG_DSCL_OVERLAP
+#define DRV_FBM_GENERAL_MEM_ALLOC
+#ifdef DRV_FBM_GENERAL_MEM_ALLOC
+#if !(CONFIG_SYS_MEM_PHASE3 || CONFIG_DRV_3D_384_SUPPORT || CONFIG_DRV_DRAM256_PLUS_NEWFEATURE)
+#define DRV_PBBUF_FRMBUF_OVERLAP
+#endif
+#endif
+
+#endif
+
+#if CONFIG_DRAM256_MODEL
+#if !CONFIG_DRV_3D_384_SUPPORT
+#define DRV_BKIMG_FRMBUF_OVERLAP
+#endif
+#endif
+
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560)
+#define VDEC_3D_ONE_HW VDEC_3D_RACING
+#else
+#define VDEC_3D_ONE_HW 0
+#endif
+
+
+#if ( (CONFIG_CHIP_VER_CURR == CONFIG_CHIP_VER_MT8550) || (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560) )
+#define VDEC_PIP_WITH_ONE_HW
+#endif
+
+
+#define VDEC_3D_RACING CONFIG_DRV_3D_384_SUPPORT
+
+#if (defined(DRV_VDEC_VDP_RACING) || defined(VDEC_PIP_WITH_ONE_HW) || (VDEC_3D_RACING))
+#define VDEC_PIP_NEW_FLOW 1
+#else
+#define VDEC_PIP_NEW_FLOW 0
+#endif
+
+
+//#define DRV_NEW_CHIP_BOUNDING
+// *********************************************************************
+// Video Codec
+// *********************************************************************
+/*! \name Video Codec
+* @{
+*/
+typedef enum
+{
+ VC_UNKNOW = 0, ///< unknow type, used for debug
+ VC_MPEG2, ///< mpeg 1/2
+ VC_MPEG4, ///< mpeg 4
+ VC_XVID, ///< xvid
+ VC_DIVX311, ///< Divx 3.11
+ VC_DIVX4, ///< Divx 4
+ VC_DIVX6, ///< Divx 5/6
+ VC_WMV1, ///< WMV7
+ VC_WMV2, ///< WMV8
+ VC_WMV3, ///< WMV9
+ VC_VC1, ///< VC1
+ VC_H263, ///< H.263
+#if 1 //DRV_SUPPORT_SORENSON_H263
+ VC_H263_SORENSON, ///< H.263 Sorenson version
+#endif
+ VC_H264, ///< H.264
+ VC_RV30, ///< Real Video 8
+ VC_RV40, ///< Real Video 9,10
+ VC_MJPG, ///<motion jpeg
+ VC_VP6, ///VP6
+} VCodeC;
+/*! @} */
+#define SetVCodec(u4PicType, eVCodec) (u4PicType = (u4PicType & 0xFFFF00FF) | (eVCodec << 8))
+#define GetVCodec(u4PicType) ((u4PicType & 0x0000FF00) >> 8)
+#define CkeckVPicType(u4Type, u4LastType) (u4Type & u4LastType & 0xFFFF00FF)
+
+#define IsMpeg2Pic(u4PicType) (((u4PicType & 0x0000FF00) >> 8) == VC_MPEG2)
+
+#define IsM4vPic(u4PicType) ((((u4PicType & 0x0000FF00) >> 8) == VC_MPEG4) || \
+ (((u4PicType & 0x0000FF00) >> 8) == VC_DIVX311) || \
+ (((u4PicType & 0x0000FF00) >> 8)== VC_DIVX4) || \
+ (((u4PicType & 0x0000FF00) >> 8) == VC_DIVX6) || \
+ (((u4PicType & 0x0000FF00) >> 8) == VC_H263) || \
+ (((u4PicType & 0x0000FF00) >> 8) == VC_H263_SORENSON))
+
+#define IsDivxPic(u4PicType) ((((u4PicType & 0x0000FF00) >> 8) == VC_DIVX311) || \
+ (((u4PicType & 0x0000FF00) >> 8)== VC_DIVX4) || \
+ (((u4PicType & 0x0000FF00) >> 8) == VC_DIVX6))
+
+#define IsWMVPic(u4PicType) ((((u4PicType & 0x0000FF00) >> 8) == VC_WMV1) || \
+ (((u4PicType & 0x0000FF00) >> 8) == VC_WMV2) || \
+ (((u4PicType & 0x0000FF00) >> 8)== VC_WMV3) || \
+ (((u4PicType & 0x0000FF00) >> 8) == VC_VC1))
+
+#define IsH264Pic(u4PicType) (((u4PicType & 0x0000FF00) >> 8) == VC_H264)
+
+#define IsH264RealPic(u4PicType) (((u4PicType & 0xFF) == P_SLICE) || ((u4PicType & 0xFF) == B_SLICE) ||\
+ ((u4PicType & 0xFF) == I_SLICE) || ((u4PicType & 0xFF) == SP_SLICE) || ((u4PicType & 0xFF) == SI_SLICE) ||\
+ ((u4PicType & 0xFF) == P_ALL_SLICE) || ((u4PicType & 0xFF) == B_ALL_SLICE) || ((u4PicType & 0xFF) == I_ALL_SLICE) ||\
+ ((u4PicType & 0xFF) == SP_ALL_SLICE) || ((u4PicType & 0xFF) == SI_ALL_SLICE))
+
+// *********************************************************************
+// Picture Coding Type
+// *********************************************************************
+/*! \name Extra Type of Picture information
+* @{
+*/
+#define SEQ_HDR 1 << 16 ///< Access unit include a sequence header
+#define GOP_HDR 1 << 17 ///< Access unit include a GOP header
+#define SEQ_END 1 << 18 ///< Access unit include a sequence end
+#define ANGLE_END 1 << 19 ///< Access unit include a angle end
+#define SEQ_PS 1 << 20 ///< Access unit include a sequence parameter set in H264
+#define PIC_PS 1 << 21 ///< Access unit include a picture parameter set in H264
+#define SEI 1 << 22 ///< Access unit include a supplement enhancement information in H264
+#define REF_PIC 1 << 23 ///< Access unit is a reference picture in H264
+#define IDR_PIC 1 << 24 ///< Access unit is a IDR picture in H264
+#define ENTRY_PTR 1 << 25 ///< Access unit is a Entry Pointer in WMV
+#define AUTO_PAUSE 1<<26
+#define MULTISLICE_PIC 1<<27 ///Access unit is a multi-slice picture (only for H264)
+#define SUB_SEQ_PS 1<<28 ///Access unit is a multi-slice picture (only for H264)
+#define PREFIX_NAL 1<<29 ///Access unit is a multi-slice picture (only for H264)
+#define ANCHOR_PIC 1<<30 ///Access unit is a anchor picture (only for H264)
+
+/*! @} */
+
+/*! \name MPEG2 Picture Coding Type
+* @{
+*/
+#define I_TYPE 1
+#define P_TYPE 2
+#define B_TYPE 3
+#define D_TYPE 4
+#define DUMMY_TYPE 5 // used for record mp2 into AVI file in MTK recorder
+//#define V_SEQ_HDR 8
+//#define V_GOP_HDR 9
+//#define V_SEQ_END 10
+//#define AGL_SEQ_END 11
+/*! @} */
+
+/*! \name MPEG4 Picture Coding Type
+* @{
+*/
+#define VIS_OBJ 0x8b ///< visual_object_start_code, 000001B5
+#define VID_OBJ_LAY 0x85 ///< video_object_layer_start_code, 000001[20-2f]
+//#define VID_OBJ 0x84 ///< video_object_start_code, 000001[00~1f]
+#define GOVOP 0x89 ///< group_of_vop_start_code, 000001B3
+#define I_VOP 0x80 ///< vop_start_code 000001B6
+#define P_VOP 0x81 ///< vop_start_code 000001B6
+#define B_VOP 0x82 ///< vop_start_code 000001B6
+#define S_VOP 0x83 ///< vop_start_code 000001B6
+#define SH_I_VOP 0x98 ///< short_video_start_marker
+#define SH_P_VOP 0x99 ///< short_video_start_marker
+#define DX3_I_FRM 0xf0 ///< generated by firmware
+#define DX3_P_FRM 0xf1 ///< generated by firmware
+#define DUMMY_FRM 0xf2 ///< generated by firmware, used for dummy frame, like vop_coded 0
+/*! @} */
+
+/*! \name H264 Picture Coding Type
+* @{
+*/
+#define I_SLICE 0x64 ///< slice type 2 as I slice
+#define P_SLICE 0x65 ///< slice type 0 as P slice
+#define B_SLICE 0x66 ///< slice type 1 as B slice
+#define SI_SLICE 0x67 ///< slice type 4 as SI slice
+#define SP_SLICE 0x68 ///< slice type 3 as SP slice
+#define I_ALL_SLICE 0x6a ///< slice type 7 as I slice, all I type slices in this picture
+#define P_ALL_SLICE 0x6b ///< slice type 5 as P slice, all P type slices in this picture
+#define B_ALL_SLICE 0x6c ///< slice type 6 as B slice, all B type slices in this picture
+#define SI_ALL_SLICE 0x6d ///< slice type 9 as I slice, all SI type slices in this picture
+#define SP_ALL_SLICE 0x6f ///< slice type b as P slice, all SP type slices in this picture
+/*! @} */
+
+/*! \name WMV Picture Coding Type
+* @{
+*/
+#define IVOP 0xa0
+#define PVOP 0xa1
+#define BVOP 0xa2
+#define BIVOP 0xa3
+#define SKIPFRAME 0xa4
+/*! @} */
+
+/*! \name Real Video Picture Coding Type
+* @{
+*/
+#define INTRAPIC 0xB0
+#define FORCED_INTRAPIC 0xB1
+#define INTERPIC 0xB2
+#define TRUEBPIC 0xB3
+/*! @} */
+
+/*! \name MJPG Coding Type
+* @{
+*/
+#define MJPG_I_FRM 0xC0
+/*! @} */
+
+/*! \name AVS Picture Coding Type
+* @{
+*/
+#define I_PIC 0x0
+#define P_PIC 0x1
+#define B_PIC 0x2
+/*! @} */
+
+
+/*! \name VP6 Picture Coding Type
+* @{
+*/
+#define VP6_I_FRM 0x0
+#define VP6_P_FRM 0x1
+/*! @} */
+
+/*! \name Picture Coding Type Marco
+* @{
+*/
+
+#define fgIsIType_MP2(arg) ((arg&0xFF) == I_TYPE)
+
+#define fgIsIType_MP4(arg) (((arg&0xFF) == I_VOP) || \
+ ((arg&0xFF) == SH_I_VOP) || \
+ ((arg&0xFF) == DX3_I_FRM))
+
+#define fgIsIType_AVC(arg) ((arg & IDR_PIC) || \
+ ((arg&0xFF) == I_ALL_SLICE) || \
+ ((arg&0xFF) == I_SLICE) || \
+ ((arg&0xFF) == SI_SLICE) || \
+ ((arg&0xFF) == SI_ALL_SLICE))
+
+#define fgIsIType_WMV(arg) ((arg&0xFF) == IVOP)
+
+#define fgIsPType_MP2(arg) (((arg&0xFF) == P_TYPE) || \
+ ((arg&0xFF) == DUMMY_TYPE))
+
+#define fgIsPType_AVC(arg) (((arg&0xFF) == P_SLICE) || \
+ ((arg&0xFF) == SP_SLICE) || \
+ ((arg&0xFF) == P_ALL_SLICE) || \
+ ((arg&0xFF) == SP_ALL_SLICE))
+
+#define fgIsPType_WMV(arg) (((arg&0xFF) == PVOP) || \
+ ((arg&0xFF) == SKIPFRAME))
+
+#define fgIsBType_MP2(arg) ((arg&0xFF) == B_TYPE)
+
+#if 0
+#define fgIsPType_MP4(arg) (((arg&0xFF) == P_VOP) || \
+ ((arg&0xFF) == S_VOP) || \
+ ((arg&0xFF) == SH_P_VOP) || \
+ ((arg&0xFF) == DX3_P_FRM) || \
+ ((arg&0xFF) == DUMMY_FRM))
+#define fgIsBType_MP4(arg) ((arg&0xFF) == B_VOP)
+
+#else
+#define fgIsPType_MP4(arg) (((arg&0xFF) == P_VOP) || \
+ ((arg&0xFF) == S_VOP) || \
+ ((arg&0xFF) == SH_P_VOP) || \
+ ((arg&0xFF) == DX3_P_FRM))
+
+#define fgIsBType_MP4(arg) ((arg&0xFF) == B_VOP || \
+ ((arg&0xFF) == DUMMY_FRM))
+#endif
+
+#define fgIsBType_AVC(arg) (((arg&0xFF) == B_SLICE) || \
+ ((arg&0xFF) == SP_SLICE) || \
+ ((arg&0xFF) == B_ALL_SLICE))
+
+#define fgIsBType_WMV(arg) (((arg&0xFF) == BVOP) || \
+ ((arg&0xFF) == BIVOP))
+
+
+#define fgIsSeqHdr(arg) ((arg & SEQ_HDR) || \
+ (arg & SEQ_PS) || \
+ (arg & SUB_SEQ_PS) || \
+ ((arg&0xFF) == VIS_OBJ) || \
+ ((arg&0xFF) == VID_OBJ_LAY) || \
+ ((arg&0xFF) == SH_I_VOP) || \
+ ((arg&0xFF) == DX3_I_FRM))
+#define fgIsGopHdr(arg) ((arg & GOP_HDR) || \
+ ((arg&0xFF) == GOVOP))
+#define fgIsSeqEnd(arg) (arg & SEQ_END)
+#define fgIsAngleEnd(arg) (arg & ANGLE_END)
+
+#define fgIsIType(arg) (((arg&0xFF) == I_TYPE) || \
+ ((arg&0xFF) == I_VOP) || \
+ ((arg&0xFF) == SH_I_VOP) || \
+ ((arg&0xFF) == DX3_I_FRM) || \
+ (arg & IDR_PIC) || \
+ ((arg&0xFF) == I_ALL_SLICE) || \
+ ((arg&0xFF) == I_SLICE) || \
+ ((arg&0xFF) == SI_SLICE) || \
+ ((arg&0xFF) == SI_ALL_SLICE) || \
+ ((arg&0xFF) == IVOP) || \
+ ((arg&0xFF) == INTRAPIC) || \
+ ((arg&0xFF) == FORCED_INTRAPIC) || \
+ ((arg&0xFF) == VP6_I_FRM) )
+
+#if 0
+#define fgIsPType(arg) (((arg&0xFF) == P_TYPE) || \
+ ((arg&0xFF) == P_VOP) || \
+ ((arg&0xFF) == S_VOP) || \
+ ((arg&0xFF) == SH_P_VOP) || \
+ ((arg&0xFF) == DX3_P_FRM) || \
+ ((arg&0xFF) == DUMMY_TYPE) || \
+ ((arg&0xFF) == DUMMY_FRM) || \
+ ((arg&0xFF) == PVOP) || \
+ ((arg&0xFF) == P_SLICE) || \
+ ((arg&0xFF) == SP_SLICE) || \
+ ((arg&0xFF) == P_ALL_SLICE) || \
+ ((arg&0xFF) == SP_ALL_SLICE) || \
+ ((arg&0xFF) == SKIPFRAME))
+#define fgIsBType(arg) (((arg&0xFF) == B_TYPE) || \
+ ((arg&0xFF) == B_VOP) || \
+ ((arg&0xFF) == BVOP) || \
+ ((arg&0xFF) == B_SLICE) || \
+ ((arg&0xFF) == SP_SLICE) || \
+ ((arg&0xFF) == B_ALL_SLICE) || \
+ ((arg&0xFF) == BIVOP))
+#else
+#define fgIsPType(arg) (((arg&0xFF) == P_TYPE) || \
+ ((arg&0xFF) == P_VOP) || \
+ ((arg&0xFF) == S_VOP) || \
+ ((arg&0xFF) == SH_P_VOP) || \
+ ((arg&0xFF) == DX3_P_FRM) || \
+ ((arg&0xFF) == DUMMY_TYPE) || \
+ ((arg&0xFF) == PVOP) || \
+ ((arg&0xFF) == P_SLICE) || \
+ ((arg&0xFF) == SP_SLICE) || \
+ ((arg&0xFF) == P_ALL_SLICE) || \
+ ((arg&0xFF) == SP_ALL_SLICE) || \
+ ((arg&0xFF) == SKIPFRAME) || \
+ ((arg&0xFF) == INTERPIC) || \
+ ((arg&0xFF) == VP6_P_FRM) )
+//((arg&0xFF) == SKIPFRAME))
+
+#define fgIsBType(arg) (((arg&0xFF) == B_TYPE) || \
+ ((arg&0xFF) == B_VOP) || \
+ ((arg&0xFF) == DUMMY_FRM) || \
+ ((arg&0xFF) == BVOP) || \
+ ((arg&0xFF) == B_SLICE) || \
+ ((arg&0xFF) == SP_SLICE) || \
+ ((arg&0xFF) == B_ALL_SLICE) || \
+ ((arg&0xFF) == BIVOP) || \
+ ((arg&0xFF) == TRUEBPIC))
+//((arg&0xFF) == BIVOP))
+#endif
+
+#define fgIsM4vPic(arg) (((arg&0xFF) & 0x80) > 0)
+#define fgIsRefType(arg) ((arg & REF_PIC) || \
+ (fgIsPType(arg)) || \
+ (fgIsIType(arg)))
+#define fgIsH264IDRType(arg) (arg & IDR_PIC)
+
+//For some BDAV, all I frame type are I_SLICE, and which contain sequence header data.
+//For fix BDP00049920. Jie Zhang(MTK40414)@20100910
+#define fgIsH264IType(arg) ((arg & IDR_PIC) || ((arg&0xFF) == I_ALL_SLICE) || ((arg&0xFF) == I_SLICE))
+#define fgIsH264FileDataIType(arg) ((arg & IDR_PIC) || ((arg&0xFF) == I_ALL_SLICE) || ((arg&0xFF) == I_SLICE))
+#define fgIsH264GopEntry(arg) (((arg & SEQ_PS) && (fgIsH264IType(arg))) || ((arg & SUB_SEQ_PS) && (arg & ANCHOR_PIC)))
+#define fgIsH264FileDataGopEntry(arg) ((arg & SEQ_PS) && (fgIsH264FileDataIType(arg)))
+
+#define fgIsM4vShort(arg) (((arg&0xFF) == SH_I_VOP) || \
+ ((arg&0xFF) == SH_P_VOP))
+
+#define SetPicType(u4PicType, ePicType) (u4PicType = (u4PicType & 0xFFFFFF00) | (ePicType))
+#define GetPicType(u4PicType) (u4PicType & 0x000000FF)
+#define fgIsStillPic(u4PicType) (((fgIsSeqHdr(u4PicType) && fgIsGopHdr(u4PicType)) || ((u4PicType & SEQ_PS) && (u4PicType& PIC_PS))) && (fgIsIType(u4PicType) || (u4PicType & ANCHOR_PIC)) && fgIsSeqEnd(u4PicType))
+
+#define fgIsDummyPic(arg) ((arg&0xFF) == DUMMY_FRM)
+/*! @} */
+
+
+// *********************************************************************
+// Picture Structure
+// *********************************************************************
+/*! \name Picture Structure
+* @{
+*/
+#define TOP_FLD_PIC 1
+#define BTM_FLD_PIC 2
+#define FRM_PIC 3
+// The follow 2 define use in Reference Field Picture
+#define TWO_FLDPIC_TOPFIRST 4
+#define TWO_FLDPIC_BTMFIRST 5
+#define ERR_PIC_STRUCT 0xFF
+/*! @} */
+
+// *********************************************************************
+// Frame rate code
+// *********************************************************************
+/*! \name Frame rate code
+* @{
+*/
+// frame_rate_code in Table 6-4 of 13818-2
+#define FRC_23_976 1
+#define FRC_24 2
+#define FRC_25 3
+#define FRC_29_97 4
+#define FRC_30 5
+#define FRC_50 6
+#define FRC_59_94 7
+#define FRC_60 8
+// Reserved by 13818-2 and defined here for other frame rates
+#define FRC_1 9
+#define FRC_5 10
+#define FRC_8 11
+#define FRC_10 12
+#define FRC_12 13
+#define FRC_15 14
+#define FRC_16 15
+#define FRC_17 16
+#define FRC_18 17
+#define FRC_20 18
+// Reserved by WMV and defined here for other frame rates
+#define FRC_2 19
+#define FRC_6 20
+#define FRC_48 21
+#define FRC_70 22
+#define FRC_120 23
+#define FRC_VAR 24
+#define FRC_MAX (FRC_VAR+1)
+/*! @} */
+
+// *********************************************************************
+// TV system
+// *********************************************************************
+/*! \name Tv system
+* @{
+*/
+#define TVS_NTSC 1
+#define TVS_PAL 2
+/*! @} */
+
+// *********************************************************************
+// Aspect ratio
+// *********************************************************************
+/*! \name Aspect ratio
+* @{
+*/
+#define ASP_UNKNOW 0 // unknow
+#define ASP_1_1 1 // SAR, 1:1
+#define ASP_4_3 2 // DAR, 4:3 PAN-SCAN (NORMAL)
+#define ASP_16_9 3 // DAR, 16:9 FULL
+#define ASP_221_1 4 // DAR, 2.21:1
+#define ASP_4_3_LB 5 // DAR, 4:3 LB
+#define ASP_16_9_NORMAL 6 // DAR, 16:9 NORMAL
+#define ASP_UNDEFINED 7
+#define ASP_MAX_ASPECT_RATIO 8
+/*! @} */
+
+
+/*! \name Source aspect ratio
+* @{
+*/
+#define ENUM_SRC_ASPECT_RATIO
+
+typedef enum
+{
+ SRC_ASP_UNKNOW = 0,
+ SRC_ASP_1_1,
+ SRC_ASP_4_3_FULL,
+ SRC_ASP_14_9_LB,
+ SRC_ASP_14_9_LB_T,
+ SRC_ASP_16_9_LB,
+ SRC_ASP_16_9_LB_T,
+ SRC_ASP_16_9_LB_G,
+ SRC_ASP_14_9_FULL,
+ SRC_ASP_16_9_FULL,
+ SRC_ASP_221_1,
+ SRC_ASP_16_9_PS,
+ SRC_ASP_UNDEFINED,
+ SRC_ASP_CUSTOMIZED,
+ SRC_ASP_MAX
+} SOURCE_ASPECT_RATIO_T;
+/*! @} */
+
+typedef enum
+{
+ HDMI_PICTURE_4_3 = 0,
+ HDMI_PICTURE_16_9
+} HDMI_PICTURE_ASPECT_RATIO_T;
+
+
+//the HDMI_AFD_FORMT_T is defined by CEA-861D spec Table 88 AFD coding, kenny 2008/7/1
+typedef enum
+{
+ HDMI_BOX_16_9 = 0x02, //box 16:9 (top)
+ HDMI_BOX_14_9 = 0x03, //box 14:9 (top)
+ HDMI_BOX_OVER_16_9 = 0x04, //box > 16:9 (center)
+ HDMI_AS_PICTURE_AR = 0x08, //As the coded frame
+ HDMI_4_3_CENTER = 0x09, //4:3 (center)
+ HDMI_16_9_CENTER = 0x0a, //16:9 (center)
+ HDMI_14_9_CENTER = 0x0b, //14:9 (center)
+ HDMI_4_3_WITH_14_9_CENTER = 0x0d, //4:3 (with shoot & protect 14:9 center)
+ HDMI_16_9_WITH_14_9_CENTER = 0x0e, //16:9 (with shoot & protect 14:9 center)
+ HDMI_4_3_WITH_4_3_CENTER = 0x0f, //16:9 (with shoot & protect 4:3 center)
+
+} HDMI_AFD_FORMT_T;
+
+
+
+
+// Colour Primary
+#define COLOR_PRIMARY_709 1
+#define COLOR_PRIMARY_601 2
+
+
+// *********************************************************************
+// Pic Flag Info
+// *********************************************************************
+/*! \name Pic Flag Info
+* @{
+*/
+#define FBG_FLG_ALL (0xFFFFFFFF)
+#define FBG_FLG_PROGRESSIVE_SEQ (0x1 << 0) ///< progressive seq
+#define FBG_FLG_PROGRESSIVE_FRM (0x1 << 1) ///< progressive frm
+#define FBG_FLG_TOP_FLD_FIRST (0x1 << 2) ///< Top field first
+#define FBG_FLG_REPEAT_1ST_FLD (0x1 << 3) ///< repeat 1st field
+#define FBG_FLG_B_PIC_IN_RA (0x1 << 4) ///< B pic in Random Access
+#define FBG_FLG_1_FLD_PIC (0x1 << 5) ///< frame buffer constructed by 1 field pic
+#define FBG_FLG_2_FLD_PIC (0x1 << 6) ///< frame buffer constructed by 2 field pic
+#define FBG_FLG_NIPB_2_IPB (0x1 << 7) ///< 1 pic decode from !IPB to IPB
+#define FBG_FLG_WITH_XVYCC (0x1 << 8) ///< XVYCC Bitstream
+#define FBG_FLG_DRIP_PIC (0x1 << 9) ///< Drip picture
+#define FBG_FLG_OPEN_B (0x1 << 10) ///< Open B picture
+#define FBG_FLG_ADR_SWAP_ON (0x1 << 11) ///< Address swap mode on/off
+#define FBG_FLG_RASTER_SCAN_MODE (0x1 << 12) ///< Address swap mode
+#define FBG_FLG_PTS_CHK (0x1 << 13) ///< PTS needs to check
+#define FBG_FLG_FORCE_DISP (0x1 << 14) ///< Force disp
+#define FBG_FLG_PTS_RESET (0x1 << 15) ///< PTS reset
+#define FBG_FLG_INTERLACE_FRM (0x1 << 16) ///< Interlaced Frm
+#define FBG_FLG_REAL_PROGRESSIVE_FRM (0x1 << 17) ///< BD and Progressive frame
+#define FBG_FLG_USE_PTS (0x1 << 18)
+#define FBG_FLG_NR_PROCESSED (0x1 << 19)
+#define FBG_FLG_DISPLAY_REF (0x1 << 20)
+#define FBG_FLG_BD_DISC (0x1 << 21)
+#define FBG_FLG_AVC_CODEC (0x1 << 22)
+#define FBG_FLG_DECODING (0x1 << 23)
+#define FBG_FLG_L_SIGHT (0x1 << 24) ///< MVC for L sight frame
+#define FBG_FLG_R_SIGHT (0x1 << 25) ///< MVC for R sight frame
+#define FBG_FLG_SVCD_DISC (0x1 << 26) ///< MVC for R sight frame
+#define FBG_FLG_LAST_TFX_FRAME (0x1 << 27)
+#define FBG_FLG_SHARP_PROCESSED (0x1 << 28)
+#define FBG_FLG_BDJ_FRAME (0x1 << 29)
+#define FBG_FLG_DISABLE_VPQSOFTSTATISTICS (0x1 << 30) ///< Disable VPQ SoftStatistics Mode for Skype
+#define FBG_FLG_STILLPIC (0x1 << 31) ///< Still Picture Flag for Skype Jpeg Content Sharing
+
+/*! @} */
+
+/*! \name Picture Coding Type Marco
+* @{
+*/
+#define fgIsFbFlagSet(arg1, arg2) (arg1 & arg2)
+#define vSetFbFlag(arg1, arg2) (arg1 |= arg2)
+#define vClrFbFlag(arg1, arg2) (arg1 &= (~arg2))
+
+#define fgIs3DSource(arg) (arg & (FBG_FLG_L_SIGHT | FBG_FLG_R_SIGHT))
+
+// *********************************************************************
+// VDSCL Flag Info
+// *********************************************************************
+/*! \name Pic Flag Info
+* @{
+*/
+#define VDSCL_FLG_ALL 0xFFFFFFFF
+#define VDSCL_FLG_NO_VERTICAL_SUGGEST 0x1 << 0 ///< no vertical support when field pic
+/*! @} */
+
+/*! \name Picture Coding Type Marco
+* @{
+*/
+#define fgIsVDSCLFlagSet(arg1, arg2) (arg1 & arg2)
+#define vSetVDSCLFlag(arg1, arg2) (arg1 |= arg2)
+#define vClrVDSCLFlag(arg1, arg2) (arg1 &= (~arg2))
+
+// *********************************************************************
+// Invalid timestamp
+// *********************************************************************
+/*! \name Invalid timestamp
+* @{
+*/
+#define INVALID_TIMESTAMP (-1LL)
+#define INVALID_DURATION (-1)
+/*! @} */
+
+
+// *********************************************************************
+// Block size
+// *********************************************************************
+/*! \name Block size
+* @{
+*/
+#if (CONFIG_CHIP_VER_CURR == CONFIG_CHIP_VER_MT8520)
+#define BLOCKSIZE_H 16
+#else
+#define BLOCKSIZE_H 16
+#endif
+#define BLOCKSIZE_V 32
+//#define DRV_ALIGN_MASK(value, mask) (((value) + (mask - 1)) & (~(mask - 1)))
+#define DRV_ALIGN_MASK(value, mask) ((((value) + ((mask) - 1)) / (mask)) * (mask))
+/*! @} */
+
+// *********************************************************************
+// DSP reserved fifo size
+// *********************************************************************
+/*! \name DSP reserved fifo size
+* @{
+*/
+#define DSP_RESERVED_AUDIO_MAX_SZ 24576 //24k byte /*!< (Legacy Playback Special) */
+#define DSP_RESERVED_AUDIO_LPCM_SZ 24576 //24k byte
+#define DSP_RESERVED_AUDIO_AC_3_SZ 24576 //24k byte
+#define DSP_RESERVED_AUDIO_DTS_SZ 24576 //24k byte
+#define DSP_RESERVED_AUDIO_DOLBY_LOSSLESS_SZ 24576 //24k byte
+#define DSP_RESERVED_AUDIO_DD_PLUS_PRI_SZ 24576 //24k byte
+#define DSP_RESERVED_AUDIO_DTS_HD_NO_XLL_SZ 24576 //24k byte
+#define DSP_RESERVED_AUDIO_DTS_HD_XLL_SZ 24576 //24k byte
+#define DSP_RESERVED_AUDIO_DD_PLUS_SEC_SZ 24576 //24k byte
+#define DSP_RESERVED_AUDIO_DTS_HD_LBR_SZ 24576 //24k byte
+#define DSP_RESERVED_AUDIO_MPEG_SZ 24576 //24k byte
+#define DSP_RESERVED_AUDIO_DOLBY_TRUE_HD_COMPATIBLE_MODE_SZ 24576 //24k byte
+
+// *********************************************************************
+// SOURCE TYPE Info
+// *********************************************************************
+/*! \name SOURCE TYPE Info
+* @{
+*/
+
+#if CONFIG_DRV_3D_SUPPORT
+typedef enum
+{
+ SRC_2D_VIDEO = 0, ///< legacy 2D video
+ SRC_3D_VIDEO_FA, ///< alternate frame;
+ SRC_3D_VIDEO_TAB, ///< top and bottom;
+ SRC_3D_VIDEO_SBS ///< side by side;
+} DRV_3D_SOURCE_TYPE_T;
+#endif
+
+// *********************************************************************
+// xvYCC Info
+// *********************************************************************
+/*! \name xvYCC Info
+* @{
+*/
+/// xvYCC data
+typedef enum
+{
+ XVYCC_TYPE_NONE = 0,
+ XVYCC_TYPE_AVCHD = 1,
+ XVYCC_TYPE_AVCHD_FORCE = 2,
+} XVYCC_TYPE_T;
+
+typedef struct
+{
+ XVYCC_TYPE_T exvYCCType;
+ UINT32 u4RedData;
+ UINT32 u4GreenData;
+ UINT32 u4BlueData;
+} XVYCC_INFO_T;
+
+
+
+// *********************************************************************
+// Disc Type
+// *********************************************************************
+/*! \name Disc Type
+* @{
+*/
+typedef enum
+{
+ DT_BD = 0, ///< BD
+ DT_VCD, ///< VCD / SVCD
+ DT_DVD_VIDEO, ///< DVD video
+ DT_DVD_AUDIO, ///< DVD audio
+ DT_DVD_MVR, ///< DVD -VR
+ DT_DVD_PVR, ///< DVD + VR
+ DT_DATADISC, ///< Data Disc
+ DT_NRD, ///< Netflix
+ DT_FLV, ///< FLV
+ DT_SKY, ///< Skype
+#if (1 == CONFIG_DRV_OMX_SUPPORT)
+ DT_OMX, /// < OMX >
+#endif
+ DT_UNKNOW ///< unknow
+} DiscType;
+/*! @} */
+
+//#define fgIsSVCDData(eDiscType, fgMPEG2) (FALSE)
+#define fgIsSVCDData(eDiscType, fgMPEG2) ((eDiscType == DT_VCD) && fgMPEG2)
+#define fgIsBDData(eDiscType) (eDiscType == DT_BD)
+#define fgIsFileData(eDiscType) (eDiscType == DT_DATADISC)
+#define fgIsDVDData(eDiscType) (eDiscType == DT_DVD_VIDEO || eDiscType == DT_DVD_AUDIO || eDiscType == DT_DVD_MVR || eDiscType == DT_DVD_PVR)
+#define fgIsProgressiveBDData(eDiscType, fgProgressFrm) ((eDiscType == DT_BD) && fgProgressFrm)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //DRV_COMMON_H
+
diff --git a/drivers/misc/mediatek/vdec/include/drv_config.h b/drivers/misc/mediatek/vdec/include/drv_config.h
new file mode 100644
index 000000000..cbadbee80
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/drv_config.h
@@ -0,0 +1,22 @@
+#ifndef _DRV_CONFIG_H_
+#define _DRV_CONFIG_H_
+
+#define CONFIG_DRV_LINUX_DATA_CONSISTENCY 0
+#define CONFIG_DRV_HIGH_BITRATE_SPECIAL_PROC 0
+#define CONFIG_DRV_SUPPORT_RM 0
+#define CONFIG_DRAM256_MODEL 0
+#define CONFIG_DRV_3D_SUPPORT 0
+#define CONFIG_DRV_OMX_SUPPORT 0
+#define CONFIG_DRV_SUPPORT_DVD_AUDIO 0
+#define CONFIG_DRV_FTS_SUPPORT 0
+#define CONFIG_DRV_ONLY 0
+#define CONFIG_DRV_VERIFY_SUPPORT 1
+#define CONFIG_SECTION_BUILD_LINUX_KO 0
+#define CONFIG_DRV_VIRTUAL_ADDR 0
+
+#define VDEC_MVC_SUPPORT 0
+#define VDEC_DDR3_SUPPORT 0
+#define VDEC_TEST_ADDSWAP 0
+#define VDEC_MC_NBM_OFF 0
+
+#endif // _DRV_CONFIG_H_
diff --git a/drivers/misc/mediatek/vdec/include/type.h b/drivers/misc/mediatek/vdec/include/type.h
new file mode 100644
index 000000000..e273f34ec
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/type.h
@@ -0,0 +1,53 @@
+#ifndef _TYPE_H
+#define _TYPE_H
+
+#define ULONG unsigned long
+#define UINT unsigned int
+#define UCHAR unsigned char
+
+#define LONG long
+#define INT int
+#define CHAR char
+
+#define UINT64 unsigned long long
+#define UINT_32 unsigned long
+#define UINT_16 unsigned short
+#define UINT_8 unsigned char
+
+#define INT64 long long
+
+#define DWRD UINT32
+#define WORD UINT16
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#define HANDLE_T ULONG
+
+#if !defined(TRUE)
+#define TRUE true
+#endif
+
+#if !defined(FALSE)
+#define FALSE false
+#endif
+
+#define IN
+#define OUT
+
+#define TCHAR char
+
+#define CString char*
+
+#define LPSTR char*
+#define LPCTSTR char*
+
+#define DLL_FUNC
+
+#define TEXT
+
+//#define BIT(n) ((UINT_32) 1 << (n))
+#define BITS(m,n) (~(BIT(m)-1) & ((BIT(n) - 1) | BIT(n)))
+
+#endif
diff --git a/drivers/misc/mediatek/vdec/include/u_uerrcode.h b/drivers/misc/mediatek/vdec/include/u_uerrcode.h
new file mode 100644
index 000000000..6c99ec02c
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/u_uerrcode.h
@@ -0,0 +1,205 @@
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * $Workfile: $
+ *
+ * Project:
+ * --------
+ * MT8105
+ *
+ * Description:
+ * ------------
+ * Uniform error code definition
+ *
+ * Author:
+ * -------
+ * SC Lin
+ *
+ * Last changed:
+ * -------------
+ * $Author: richard.sun $
+ *
+ * $Modtime: $
+ *
+ * $Revision: #1 $
+****************************************************************************/
+
+/*
+ * Acknowledgement:
+ *
+ * This is modified from MTK Hefei's error code definition
+ *
+ *
+ */
+
+#ifndef _UERRCODE_H_
+#define _UERRCODE_H_
+
+/*****************************************************************************
+ * CODING GUIDE (README FIRST before include this)
+ *
+ * 1. Type of uniform error code is INT32, you can define you API prototype
+ * as:
+ *
+ * INT32 iFoofunc(void);
+ *
+ * 2. Use "iRet < 0" to check if error happens. You can use like:
+ *
+ * iRet = iFooFunc();
+ *
+ * if(iRet < 0)
+ * {
+ * // error happens, do something
+ * }
+ *
+ * If lower module return error value, you can just bypass to upper
+ * layer, then upper layer can easily know what happens.
+ *
+ * 3. The meaning of positive return value is defined by function
+ *
+ * 4. Define your error code like this:
+ *
+ * #define ERR_USBDRV_FOO UERRCODE(MODULE_USB_DRV, 1)
+ *
+ *
+ */
+
+
+/*****************************************************************************
+ * Error code structure :
+ *
+ * | 31(1 bit) | 30-29(2 bits) | 28-24 (5bits) | 23-16(8 bits) | 15-0(16 bits) |
+ * | Indicator | Layer ID | Module ID | Extened | Err Code |
+ *
+ * Indicator : 0 - success, 1 - error
+ * Layer ID : 0 - Application layer (APPL)
+ * 1 - Media Middleware layer (MMWL)
+ * 2 - System Middleware layer (SMWL)
+ * 3 - Driver layer (DRL)
+ * Module ID : module ID, defined below
+ * Extended : module dependent, but providee macro to add partial line info
+ * Err code : defined in each module's public include file,
+ * IF module ID is MODULE_COMMON, the errocode is
+ * defined here
+ *****************************************************************************/
+
+
+/**
+ * MACRO definition
+ */
+
+#define UERRCODE(modid, errid) \
+ ((INT32) \
+ ((INT32)(0x80000000) | \
+ (INT32)((modid & 0x7f) << 24) | \
+ (INT32)(errid & 0xffff)) \
+ )
+
+#define UOKCODE(modid, okid) \
+ ((INT32) \
+ ((INT32)(0x00000000) | \
+ (INT32)((modid & 0x7f) << 24) | \
+ (INT32)(okid & 0xffff)) \
+ )
+
+#define EXT_UERR(errcode) \
+ ((INT32) \
+ (INT32)(errcode & 0xff00ffff) | \
+ (INT32)((__LINE__ & 0xff) << 16) \
+ )
+
+/**
+ * If a module does not use the bit 15-12 for module error code, module owner can use this macro to log your line number in error code.
+ */
+#define EXT_UERR_12(errcode) \
+ ((INT32) \
+ (INT32)(errcode & 0xff000fff) | \
+ (INT32)((__LINE__ & 0xfff) << 12) \
+ )
+
+
+typedef INT32 MRESULT; // with MRESULT, we can define a function that reture is MRESULT such as MRESULT SetDVDSector();
+
+// Helper macro
+#define SUCCEEDED(Status) ((MRESULT)(Status) >= 0)
+#define FAILED(Status) ((MRESULT)(Status)<0)
+#define CHKMR if (FAILED(mr)) return mr
+
+
+/**
+ * Module ID
+ */
+
+
+#define MODULE_COMMON 0x00L /* common module */
+
+// Application Layer, add application module here
+#define APP_MODULE_BEGIN 0x01L /* common module */
+
+
+#define APP_MODULE_END 0x1FL /* common module */
+
+
+// Media MiddleWare Layer, add media middleware module here
+#define MMWL_MODULE_BEGIN 0x20L /* common module */
+#define MMWL_MODULE_MPC 0x21L //< Multimedia Playback Controller
+#define MMWL_MODULE_PB 0x26L /* playback engine*/
+#define MMWL_MODULE_TCM 0x28L /* Thumbnail cache manager */
+
+#define MMWL_MODULE_END 0x3FL /* common module */
+
+
+// System MiddleWare Layer, add system middleware module here
+#define SMWL_MODULE_BEGIN 0x40L /* common module */
+
+
+#define SMWL_MODULE_END 0x5FL /* common module */
+
+
+// Driver Layer, add driver module here
+#define DRL_MODULE_BEGIN 0x60L /* common module */
+#define DRL_MODULE_ESM 0x61L ///< Elementary stream interface manager
+#define DRL_MODULE_FBM 0x62L ///< Frame buffer manager
+#define DRL_MODULE_PSR 0x63L ///< Parser
+#define DRL_MODULE_DMX 0x64L ///< Transport stream demuxer
+#define DRL_MODULE_VDEC 0x65L ///< video decoder
+#define DRL_MODULE_PBBUF 0x66L ///< playback buffer
+#define DRL_MODULE_GCPU 0x67L ///< GCPU
+#define DRL_MODULE_CPSA 0x68L ///< CPS Agent
+#define DRL_MODULE_SPT 0x69L ///< Splitter
+#define DRL_MODULE_KM 0x6AL ///< KM
+#define DRL_MODULE_SYNCCTRL 0x70L ///< Sync Control
+#define DRL_MODULE_PMX 0x71L ///< Plane Mixer
+#define DRL_MODULE_AUD 0x72L ///< Audio Driver
+#define DRL_MODULE_AM 0x73L ///< AM
+#define DRL_MODULE_HDMI 0x74L ///< HDMI
+#define DRL_MODULE_AVD 0x75L ///< AVD
+#define DRL_MODULE_TVE 0x76L ///< TVE
+#define DRL_MODULE_VENC 0x77L ///< VENC
+#define DRL_MODULE_END 0x7FL /* common module */
+#define DRL_MODULE_PVR 0x80L ///< PVR
+
+// conflict with E_ABORT in fs.h, remark it
+
+// common definition
+#ifndef _WINERROR_
+
+#define S_OK ((MRESULT)0x00000000)
+#define E_FAIL UERRCODE(MODULE_COMMON,1)
+#define E_NOTIMPL UERRCODE(MODULE_COMMON,2)
+#define E_INVALIDARG UERRCODE(MODULE_COMMON,4)
+
+/*
+#define E_OUTOFMEMORY UERRCODE(MODULE_COMMON,3)
+#define E_NOINTERFACE UERRCODE(MODULE_COMMON,5)
+#define E_POINTER UERRCODE(MODULE_COMMON,6)
+#define E_HANDLE UERRCODE(MODULE_COMMON,7)
+#define E_ABORT UERRCODE(MODULE_COMMON,8)
+#define E_UNEXPECTED UERRCODE(MODULE_COMMON,9)
+#define E_ACCESSDENIED UERRCODE(MODULE_COMMON,10)
+*/
+#endif //_WINERROR_
+
+#endif // _UERRCODE_H_
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_common_if.h b/drivers/misc/mediatek/vdec/include/vdec_common_if.h
new file mode 100644
index 000000000..362ec118c
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_common_if.h
@@ -0,0 +1,81 @@
+#ifndef _VDEC_COMMON_IF_H_
+#define _VDEC_COMMON_IF_H_
+
+#include <mach/mt_typedefs.h>
+#include "u_uerrcode.h"
+//#include "x_printf.h"
+//#include "x_os.h"
+//#include "x_rtos.h"
+//#include "x_common.h"
+
+//#include "vdec_config.h"
+#include "vdec_errcode.h"
+#include "vdec_type.h"
+#include "vdec_info_common.h"
+#include "drv_common.h"
+
+//#include "drv_vdec.h"
+//#include "drv_fbm_if.h"
+//#include "drv_fbm_errcode.h"
+//#include "drv_esm_if.h"
+
+//#include "drv_config.h"
+
+#define VDSCL_SRC_MC (0x0<<0)
+#define VDSCL_SRC_PP (0x1<<1)
+#define VDSCL_SRC_FG (0x1<<2)
+
+#define VDSCL_SPEC_MPEG (0)
+#define VDSCL_SPEC_WMV (1)
+#define VDSCL_SPEC_264 (2)
+
+typedef struct _VDEC_DRV_IF
+{
+ // VDEC_CODEC_T eVdecCodecType;
+ void (* pvVDecInitProc)(UCHAR ucEsId);
+ INT32(* pi4VDecVParseProc)(UCHAR ucEsId, UINT32 u4VParseType);
+ BOOL (* pfgVDecVParseChkProc)(UCHAR ucEsId);
+ INT32(* pi4VDecUpdInfoToFbg)(UCHAR ucEsId);
+ void (* pvVDecStartToDecProc)(UCHAR ucEsId);
+ void (* pvVDecISR)(UCHAR ucEsId);
+ BOOL (* pfgIsVDecEnd)(UCHAR ucEsId);
+ BOOL (* pfgIsVDecDecErr)(UCHAR ucEsId);
+ BOOL (* pfgVDecResultChk)(UCHAR ucEsId);
+ BOOL (* pfgIsVDecInsToDispQ)(UCHAR ucEsId);
+ BOOL (* pfgIsVDecGetFrmToDispQ)(UCHAR ucEsId);
+ void (* pvVDecEndProc)(UCHAR ucEsId);
+ BOOL (*pfgVDecFlushDPB)(UCHAR ucEsId, BOOL fgWithOutput);
+ void (* pvVDecReleaseProc)(UCHAR ucEsId, BOOL fgResetHW);
+#ifdef VDEC_SR_SUPPORT
+ BOOL (* pvVDecGenEDPB)(UCHAR ucEsId);
+ BOOL (* pvVDecRestoreEDPB)(UCHAR ucEsId, BOOL fgRestore);
+ BOOL (* pfgIsVDecGetSRFrmToDispQ)(UCHAR ucEsId, BOOL fgSeqEnd, BOOL fgRefPic);
+ void (* pvVDecGetSeqFirstTarget)(UCHAR ucEsId);
+ void (* pvVDecReleaseSRDrvInfo)(UCHAR ucEsId);
+ BOOL (* pfgVDecGetDFBInfo)(UCHAR ucEsId, void **prDFBInfo);
+ void (* pvVDecRestoreSeqInfo)(UCHAR ucEsId);
+ BOOL (* pfgVDecRvsDone)(UCHAR ucEsId);
+ void (*pvReleaseRefFrame)(UCHAR ucEsId);
+ void (*pvVDecBackupInfo)(UCHAR ucEsId);
+#endif
+#if (defined(DRV_VDEC_VDP_RACING) || defined(VDEC_PIP_WITH_ONE_HW))
+ BOOL (* pfgIsVDecPreInsToDispQ)(UCHAR ucEsId);
+ BOOL (* pfgIsVDecPreGetFrmToDispQ)(UCHAR ucEsId);
+ BOOL (* pfgIsVDecReadyForDisp)(UCHAR ucEsId);
+ BOOL (* pfgIsVDecSetFBufInfo)(UCHAR ucEsId);
+#endif
+} VDEC_DRV_IF;
+
+extern VDEC_DRV_IF *VDec_GetMPEG2If(void);
+extern VDEC_DRV_IF *VDec_GetH264If(void);
+extern VDEC_DRV_IF *VDec_GetMPEG4If(void);
+extern VDEC_DRV_IF *VDec_GetWMVIf(void);
+extern VDEC_DRV_IF *VDec_GetRMIf(void);
+extern VDEC_DRV_IF *VDec_GetJPEGIf(void);
+extern VDEC_DRV_IF *VDec_GetVP6If(void);
+#ifdef VDEC_VP8_SUPPORT
+extern VDEC_DRV_IF *VDec_GetVP8If(void);
+#endif
+//extern void vVDecSetEsmInfo(UINT32 pu4Handle, Decoder_OpIf* pprDecoderOplIf, UCHAR ucMpvId, UCHAR ucEsId);
+
+#endif
diff --git a/drivers/misc/mediatek/vdec/include/vdec_config.h b/drivers/misc/mediatek/vdec/include/vdec_config.h
new file mode 100644
index 000000000..602244f3e
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_config.h
@@ -0,0 +1,115 @@
+#ifndef _VDEC_CONFIG_H_
+#define _VDEC_CONFIG_H_
+
+#if 0
+// Maximum PES Info number in ESM queue
+#ifndef MPV_MAX_PES_NS_PER_QUEUE
+#ifdef CC_MT5351_SLT
+#define MPV_MAX_PES_NS_PER_QUEUE 64
+#else
+#define MPV_MAX_PES_NS_PER_QUEUE 112
+#endif
+#endif
+
+// Message Queue Size
+#define MPV_MSG_Q_SIZE (MPV_MAX_PES_NS_PER_QUEUE + 16)
+
+// Command Queue Size
+#define MPV_CMD_Q_SIZE 5
+
+// ESM Q Underflow Number
+#define MPV_UDF_PES_NS 8
+
+//Error Count Threshold
+#define MPV_ERR_THRSD 0
+
+#define MPV_DETECT_REF_MISSING 0
+
+//Error Concealment method
+#define MPV_EC_METHOD 0 //0: 1389, 1: 5351, 2: 5351 no Intra
+#define MPV_EC_1389 0
+#define MPV_EC_5351_IPB 1
+#define MPV_EC_5351_PB 2
+
+
+//#define MPV_LOG_NS 1800 //60*30
+#define MPV_LOG_NS 900 //30*30
+
+#define MPV_DTS_INVALID_DRIFT 45000 //0.5sec
+#define MPV_DTS_DRIFT 9000 //0.1sec
+
+#define MPV_PTS_INVALID_DRIFT 900000 ///10sec
+#define MPV_PTS_DRIFT 18000
+
+
+//#define MPV_PTS_INVALID_DRIFT 90000 ///check for wrap, 1sec
+
+#define MPV_WAIT_DEC_TIME 100
+
+#define MPV_WAIT_DISP_NO_AVSYNC
+#if defined(MPV_WAIT_DISP)
+#define MPV_WAIT_DISP_TIME 100 // 100 ms
+#define MPV_AVSYNC_WAIT_DISP_TIME 500 // 500 ms
+#elif defined(MPV_WAIT_DISP_NO_AVSYNC)
+#define MPV_WAIT_DISP_TIME 200 // 200 ms
+#define MPV_AVSYNC_WAIT_DISP_TIME 0 // 0 ms
+#else
+#define MPV_WAIT_DISP_TIME 0 // Don't wait display, push mode
+#define MPV_AVSYNC_WAIT_DISP_TIME 0
+#endif
+
+#ifdef CC_MT5351_SLT
+#undef MPV_AVSYNC_WAIT_DISP_TIME
+#define MPV_AVSYNC_WAIT_DISP_TIME 0xFFFFFFFF
+#endif
+
+#define MPV_WAIT_DISP_UNLOCK_TIME 20 // 40 ms, wait display unlock when change fbg
+
+#ifdef MPV_VIRTUAL_PRS
+#undef MPV_WAIT_DISP_TIME
+#undef MPV_AVSYNC_WAIT_DISP_TIME
+#define MPV_WAIT_DISP_TIME 0xFFFFFFFF
+#define MPV_AVSYNC_WAIT_DISP_TIME 0xFFFFFFFF
+#endif
+
+#define MPV_FIRST_MODIFY
+//#define MPV_NO_PARSER
+//#define MPV_DUMP_FBUF
+#define NEW_FBM_SUPPORT
+//#define NEW_FBM_DEBUG
+//#define VDEC_MEM_ALLOC_SUPPORT
+//#define MPV_DUMP_H264_DEC_REG
+//#define MPV_CALLBACK_BY_VDEC
+#define FBM_ALLOC_SUPPORT
+//#define DRV_VDEC_TEMP_DEF
+//#define WMV_SW_DEC_BP
+#define FW_WRITE_QUANTIZATION_MATRIX
+#define VDEC_EVENT_TRIGGER
+#define VDEC_NO_FAC
+#define VDEC_IBC_ASP_SUPPORT
+//#define VDEC_LINE23_SUPPORT
+#define VDEC_FORCE_DISP_LAST_PIC_SUPPORT
+//#define MPV_DUMP_H264_CHKSUM
+#define VDSCL_SIZE_LIMIT_SUPPORT
+
+#define MPV_FIFO_CTRL_UDF 2
+#define MPV_FIFO_CTRL_OVF (MPV_MAX_PES_NS_PER_QUEUE)
+#define MPV_FIFO_CTRL_MIN 0 // 0 ms
+#define MPV_FIFO_CTRL_MAX 12000 // 133 ms
+#define MPV_FIFO_CTRL_STEP 3000 // 33 ms
+#define MPV_FIFO_CTRL_INIT 3000 // 33 ms
+#define MPV_FIFO_MONITOR_NS 15 // 15 packet per monitor
+
+#define MPV_FIFO_FULL_CNT_DOWN 60 // maintain 60 pictures
+
+//After dectecting all Intra slice in No I bitstream, wait 1 P to display.
+#define MPV_WAIT_P 1
+
+#define MPV_CC_QSIZE 600 //1800/3
+
+#define VDEC_8530_SUPPORT 1
+#endif
+
+#endif /* _MPV_CONFIG_H_ */
+
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_debug.h b/drivers/misc/mediatek/vdec/include/vdec_debug.h
new file mode 100644
index 000000000..f3f220d2d
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_debug.h
@@ -0,0 +1,8 @@
+#ifndef __VDEC_DEBUG_H__
+#define __VDEC_DEBUG_H__
+
+#define DEFINE_IS_LOG MPV_IsLog
+#include "x_debug.h"
+
+#endif /* __VDEC_DEBUG_H__ */
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_avs_info.h b/drivers/misc/mediatek/vdec/include/vdec_drv_avs_info.h
new file mode 100644
index 000000000..e24a405be
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_avs_info.h
@@ -0,0 +1,74 @@
+#ifndef _VDEC_DRV_AVS_INFO_H_
+#define _VDEC_DRV_AVS_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_avs.h"
+#include "vdec_info_common.h"
+
+#include "../hal/vdec_hal_if_avs.h"
+
+
+// Data unit type
+#define AVS_SEQ_HDR_SC 0x1B0
+#define AVS_SEQ_END_SC 0x1B1
+#define AVS_I_PICTURE_SC 0x1B3
+#define AVS_PB_PICTURE_SC 0x1B6
+#define AVS_USER_DATA_SC 0x1B2
+#define AVS_EXTENSION_SC 0x1B5
+#define AVS_VIDEO_EDIT_SC 0x1B7
+#define AVS_SLICE_SC_MIN 0x100
+#define AVS_SLICE_SC_MAX 0x1AF
+
+
+typedef struct _AVS_DRV_INFO_T
+{
+ UCHAR ucAVSDpbOutputFbId;
+ UCHAR ucPredFbId;
+ UINT32 u4PredSa;
+ UINT32 u4CurrStartCodeAddr;
+ UINT32 u4BitCount;
+ UINT32 u4DecErrInfo;
+ INT32 i4LatestIPOC;
+ INT64 i8BasePTS;
+ INT64 i8LatestRealPTS;
+ INT32 i4PreFrmPOC;
+ INT32 i4LatestRealPOC;
+ UINT32 u4LatestSPSId;
+} AVS_DRV_INFO_T;
+
+
+extern void vAVSInitProc(UCHAR ucEsId);
+extern INT32 i4AVSVParseProc(UCHAR ucEsId, UINT32 u4VParseType);
+extern BOOL fgAVSVParseChkProc(UCHAR ucEsId);
+extern INT32 i4AVSUpdInfoToFbg(UCHAR ucEsId);
+extern void vAVSStartToDecProc(UCHAR ucEsId);
+extern void vAVSISR(UCHAR ucEsId);
+extern BOOL fgIsAVSDecEnd(UCHAR ucEsId);
+extern BOOL fgIsAVSDecErr(UCHAR ucEsId);
+extern BOOL fgAVSResultChk(UCHAR ucEsId);
+extern BOOL fgIsAVSInsToDispQ(UCHAR ucEsId);
+extern BOOL fgIsAVSGetFrmToDispQ(UCHAR ucEsId);
+extern void vAVSEndProc(UCHAR ucEsId);
+extern BOOL fgAVSFlushDPB(UCHAR ucEsId, BOOL fgWithOutput);
+extern void vAVSReleaseProc(UCHAR ucEsId);
+
+
+
+// vdec_drv_AVS_parse.c
+extern void vSeq_Par_Set_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, AVS_DRV_INFO_T *prAVSDrvDecInfo);
+extern void vPic_Par_Set_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, AVS_DRV_INFO_T *prAVSDrvDecInfo);
+extern void vSEI_Rbsp(UINT32 u4BSID, UINT32 u4VDecID, AVS_DRV_INFO_T *prAVSDrvDecInfo);
+extern INT32 i4SlimParseSliceHeader(UINT32 u4VDecID, AVS_DRV_INFO_T *prAVSDrvDecInfo);
+extern INT32 i4ParseSliceHeader(UINT32 u4VDecID, AVS_DRV_INFO_T *prAVSDrvDecInfo);
+
+
+#endif
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_common_info.h b/drivers/misc/mediatek/vdec/include/vdec_drv_common_info.h
new file mode 100644
index 000000000..f7dc7f09a
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_common_info.h
@@ -0,0 +1,5 @@
+#ifndef _VDEC_DRV_COMMON_INFO_H_
+#define _VDEC_DRV_COMMON_INFO_H_
+
+
+#endif
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_fileio.h b/drivers/misc/mediatek/vdec/include/vdec_drv_fileio.h
new file mode 100644
index 000000000..33bedcaed
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_fileio.h
@@ -0,0 +1,42 @@
+#ifndef _VDEC_DRV_FILEIO_H_
+#define _VDEC_DRV_FILEIO_H_
+
+typedef struct _FilterInfo_T
+{
+ UINT32 u4WrIdx; ///< [OUT] interface handle
+ UINT32 u4Handle; ///< [OUT] interface handle
+ Filter_OpIf *pprFilterOpIf;
+} Filter_Info;
+
+typedef struct TScriptData
+{
+ UCHAR *pbTargetAddr;
+ UCHAR *pbRecAddr;
+ UCHAR *pbFileName;
+ UINT32 dwFileLength;
+ UINT32 dwRealGetBytes;
+} TScriptData;
+
+
+#if defined(MPV_NO_PARSER) || defined(MPV_READ_FILE)
+#ifndef VDEC_SR_SUPPORT
+#define V_FIFO_SZ 0x5000000 //80*1024*1024
+#else
+#define V_FIFO_SZ 0x6400000 //100*1024*1024 //only for SR
+#endif
+#endif
+
+UINT32 u4BreakPoint4Read(UCHAR *pucFileName, UINT32 u4StartAddr);
+void vBreakPoint4Write(UCHAR *pucFileName, UINT32 u4StartAddr, UINT32 u4FileSize);
+
+#if defined(MPV_NO_PARSER) || defined(MPV_READ_FILE)
+void VDec_Load_Data(UCHAR ucEsId);
+void VDec_Load_MPEG4_Data(UCHAR ucEsId);
+void VDec_Load_H264_Data(UCHAR ucEsId, BOOL fgDepView);
+#endif
+
+#if defined(MPV_NO_PARSER) || defined(MPV_DUMP_FBUF)
+void VDec_Dump_Data(UINT32 u4StartAddr, UINT32 u4FileSize, UINT32 u4FileCnt, UCHAR *pucAddStr);
+#endif
+
+#endif
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_h264_info.h b/drivers/misc/mediatek/vdec/include/vdec_drv_h264_info.h
new file mode 100644
index 000000000..90b3d12cc
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_h264_info.h
@@ -0,0 +1,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
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_h265_info.h b/drivers/misc/mediatek/vdec/include/vdec_drv_h265_info.h
new file mode 100644
index 000000000..2c39c85f9
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_h265_info.h
@@ -0,0 +1,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
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_jpeg_info.h b/drivers/misc/mediatek/vdec/include/vdec_drv_jpeg_info.h
new file mode 100644
index 000000000..e7b0386af
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_jpeg_info.h
@@ -0,0 +1,43 @@
+#ifndef _VDEC_DRV_JPEG_INFO_H_
+#define _VDEC_DRV_JPEG_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_mpeg.h"
+#include "vdec_info_common.h"
+
+/******************************************************************************
+* Local definition
+******************************************************************************/
+
+
+
+extern void vJPEGInitProc(UCHAR ucEsId);
+extern INT32 i4JPEGVParseProc(UCHAR ucEsId, UINT32 u4VParseType);
+extern BOOL fgJPEGVParseChkProc(UCHAR ucEsId);
+extern INT32 i4JPEGUpdInfoToFbg(UCHAR ucEsId);
+extern void vJPEGStartToDecProc(UCHAR ucEsId);
+extern void vJPEGISR(UCHAR ucEsId);
+extern BOOL fgIsJPEGDecEnd(UCHAR ucEsId);
+extern BOOL fgIsJPEGDecErr(UCHAR ucEsId);
+extern BOOL fgJPEGResultChk(UCHAR ucEsId);
+extern BOOL fgIsJPEGInsToDispQ(UCHAR ucEsId);
+extern BOOL fgIsJPEGGetFrmToDispQ(UCHAR ucEsId);
+extern void vJPEGEndProc(UCHAR ucEsId);
+extern BOOL fgJPEGFlushDPB(UCHAR ucEsId, BOOL fgWithOutput);
+extern void vJPEGReleaseProc(UCHAR ucEsId, BOOL fgResetHw);
+extern INT32 i4JPEGParser(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4VParseType);
+
+
+extern VDEC_DRV_IF *VDec_GetJPEGIf(void);
+
+
+#endif // _VDEC_DRV_JPEG_INFO_H_ \ No newline at end of file
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_mpeg2_info.h b/drivers/misc/mediatek/vdec/include/vdec_drv_mpeg2_info.h
new file mode 100644
index 000000000..ef032d1c4
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_mpeg2_info.h
@@ -0,0 +1,563 @@
+#ifndef _VDEC_DRV_MPEG2_INFO_H_
+#define _VDEC_DRV_MPEG2_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_mpeg.h"
+#include "vdec_info_common.h"
+
+/******************************************************************************
+* Local definition
+******************************************************************************/
+// start code
+#define PICTURE_START_CODE 0x100
+#define SLICE_START_CODE_MIN 0x101
+#define SLICE_START_CODE_MAX 0x1AF
+#define USER_DATA_START_CODE 0x1B2
+#define SEQUENCE_HEADER_CODE 0x1B3
+#define SEQUENCE_ERROR_CODE 0x1B4
+#define EXTENSION_START_CODE 0x1B5
+#define SEQUENCE_END_CODE 0x1B7
+#define GROUP_START_CODE 0x1B8
+#define SYSTEM_START_CODE_MIN 0x1B9
+#define SYSTEM_START_CODE_MAX 0x1FF
+
+// extension start code IDs
+#define SEQUENCE_EXTENSION_ID 1
+#define SEQUENCE_DISPLAY_EXTENSION_ID 2
+#define QUANT_MATRIX_EXTENSION_ID 3
+#define COPYRIGHT_EXTENSION_ID 4
+#define SEQUENCE_SCALABLE_EXTENSION_ID 5
+#define PICTURE_DISPLAY_EXTENSION_ID 7
+#define PICTURE_CODING_EXTENSION_ID 8
+#define PICTURE_SPATIAL_SCALABLE_EXTENSION_ID 9
+#define PICTURE_TEMPORAL_SCALABLE_EXTENSION_ID 10
+
+#define MAX_RETRY_COUNT 30
+#define MAX_USER_DATA_SIZE 200
+
+#define LEVEL_ID_LOW 10
+#define LEVEL_ID_MAIN 8
+#define LEVEL_ID_HIGH_1440 6
+#define LEVEL_ID_HIGH 4
+
+#define DEFAULT_H_SIZE 720
+#define DEFAULT_V_SIZE 480
+
+#define SCTE_CC 0x1
+
+#define MPEG2_DPB_NUM 3
+#define MPEG2_MAX_EDPB_NUM 30
+#define MPEG2_DFB_NUM 120
+
+#define MPEG1_MAX_HSIZE 352
+#define MPEG1_MAX_VSIZE 288
+
+#define MPEG2_PANSCAN_VECTOR_NS 3
+
+#define fgIsMPEG2SeqHdr(arg) (arg & SEQ_HDR)
+#define fgIsMPEG2GopHdr(arg) (arg & GOP_HDR)
+#define fgIsMPEG2SeqEnd(arg) (arg & SEQ_END)
+#define fgIsVOBUStill(arg1, arg2) ((arg1&AUTO_PAUSE)&&(arg2==VID_DEC_SPEED_TYPE_NORMAL))
+
+
+#define DVD24P_SEQ_STEP 4
+// Sequence Hdr
+typedef struct _MPEG2_SEQ_HDR_FIELD_T
+{
+ /* 32 Bit */
+ UINT32 u4FrameRate : 4;
+ UINT32 u4AspectRatio : 4;
+ UINT32 u4VSize : 12;
+ UINT32 u4HSize : 12;
+
+ /* 32 Bit */
+ UINT32 fgLoadNonIntra : 1;
+ UINT32 fgLoadIntra : 1;
+ UINT32 fgContrained : 1;
+ UINT32 u4VbvSize : 10;
+ UINT32 fgMark : 1;
+ UINT32 u4BitRate : 18;
+} MPEG2_SEQ_HDR_FIELD_T;
+
+typedef union _MPEG2_SEQ_HDR_UNION_T
+{
+
+
+ UINT32 au4Reg[2];
+ MPEG2_SEQ_HDR_FIELD_T rField;
+} MPEG2_SEQ_HDR_UNION_T;
+
+// Sequence Externsion Hdr
+typedef struct _MPEG2_SEQ_EXT_HDR_FIELD_T
+{
+ /* 32 Bit */
+ UINT32 fgMark : 1;
+ UINT32 u4BitRateExt : 12;
+ UINT32 u4VSizeExt : 2;
+ UINT32 u4HSizeExt : 2;
+ UINT32 u4ChromaFmt : 2;
+ UINT32 fgPrgsSeq : 1;
+ UINT32 u4LevelId : 4;
+ UINT32 u4ProfileId : 4;
+ UINT32 u4ExtId : 4;
+
+ /* 16 Bit */
+ UINT32 : 16;
+ UINT32 u4FrameRateExtD : 5;
+ UINT32 u4FrameRateExtN : 2;
+ UINT32 fgLowDelay : 1;
+ UINT32 u4VbvSizeExt : 8;
+} MPEG2_SEQ_EXT_HDR_FIELD_T;
+
+typedef union _MPEG2_SEQ_EXT_HDR_UNION_T
+{
+
+
+ UINT32 au4Reg[2];
+ MPEG2_SEQ_EXT_HDR_FIELD_T rField;
+} MPEG2_SEQ_EXT_HDR_UNION_T;
+
+// Sequence Display Externsion Hdr
+typedef struct _MPEG2_SEQ_DISP_EXT_HDR_FIELD_T
+{
+ /* 32/8 Bit */
+ UINT32 u4MatrixCoef : 8;
+ UINT32 u4TrasferChar : 8;
+ UINT32 u4ColorPrimary : 8;
+ UINT32 fgColorDesc : 1;
+ UINT32 u4VideoFmt : 3;
+ UINT32 u4ExtId : 4;
+
+ /* 29 Bit */
+ UINT32 : 3;
+ UINT32 u4DispVSize : 14;
+ UINT32 fgMark : 1;
+ UINT32 u4DispHSize : 14;
+} MPEG2_SEQ_DISP_EXT_HDR_FIELD_T;
+
+typedef union _MPEG2_SEQ_DISP_EXT_HDR_UNION_T
+{
+
+
+ UINT32 au4Reg[2];
+ MPEG2_SEQ_DISP_EXT_HDR_FIELD_T rField;
+} MPEG2_SEQ_DISP_EXT_HDR_UNION_T;
+
+
+// GOP Hdr
+typedef struct _MPEG2_GOP_HDR_FIELD_T
+{
+ /* 27 Bit */
+ UINT32 : 5;
+ UINT32 fgBrokenLink : 1;
+ UINT32 fgClosedGop : 1;
+ UINT32 u4Picture : 6;
+ UINT32 u4Second : 6;
+ UINT32 fgMark : 1;
+ UINT32 u4Minute : 6;
+ UINT32 u4Hour : 5;
+ UINT32 fgDropFrame : 1;
+} MPEG2_GOP_HDR_FIELD_T;
+
+typedef union _MPEG2_GOP_HDR_UNION_T
+{
+ UINT32 au4Reg[1];
+ MPEG2_GOP_HDR_FIELD_T rField;
+} MPEG2_GOP_HDR_UNION_T;
+
+// Picture Hdr
+typedef struct _MPEG2_PIC_HDR_FIELD_T
+{
+ /* 29 Bit */
+ UINT32 : 3;
+ UINT32 u4VbvDelay : 16;
+ UINT32 u4PicType : 3;
+ UINT32 u4TemporalRef : 10;
+} MPEG2_PIC_HDR_FIELD_T;
+
+typedef union _MPEG2_PIC_HDR_UNION_T
+{
+ UINT32 au4Reg[1];
+ MPEG2_PIC_HDR_FIELD_T rField;
+} MPEG2_PIC_HDR_UNION_T;
+
+// P PIC Hdr
+typedef struct _MPEG2_P_PIC_HDR_FIELD_T
+{
+ /* 4 Bit */
+ UINT32 : 28;
+ UINT32 u4ForwardFCode : 3;
+ UINT32 fgFullPelForward : 1;
+} MPEG2_P_PIC_HDR_FIELD_T;
+
+typedef union _MPEG2_P_PIC_HDR_UNION_T
+{
+ UINT32 au4Reg[1];
+ MPEG2_P_PIC_HDR_FIELD_T rField;
+} MPEG2_P_PIC_HDR_UNION_T;
+
+// B PIC Hdr
+typedef struct _MPEG2_B_PIC_HDR_FIELD_T
+{
+ /* 8 Bit */
+ UINT32 : 24;
+ UINT32 u4BackwardFCode : 3;
+ UINT32 fgFullPelBackward : 1;
+ UINT32 u4ForwardFCode : 3;
+ UINT32 fgFullPelForward : 1;
+} MPEG2_B_PIC_HDR_FIELD_T;
+
+typedef union _MPEG2_B_PIC_HDR_UNION_T
+{
+ UINT32 au4Reg[1];
+ MPEG2_B_PIC_HDR_FIELD_T rField;
+} MPEG2_B_PIC_HDR_UNION_T;
+
+// Picture Externsion Hdr
+typedef struct _MPEG2_PIC_EXT_HDR_FIELD_T
+{
+ /* 32 Bit */
+ UINT32 fgChroma420 : 1;
+ UINT32 fgRff : 1;
+ UINT32 fgAlternateScan : 1;
+ UINT32 fgIntraVlc : 1;
+ UINT32 fgQScale : 1;
+ UINT32 fgConcealmentMV : 1;
+ UINT32 fgFramePred : 1;
+ UINT32 fgTff : 1;
+ UINT32 u4PicStruture : 2;
+ UINT32 u4IntraDcPrecision : 2;
+ UINT32 u4FCode11 : 4;
+ UINT32 u4FCode10 : 4;
+ UINT32 u4FCode01 : 4;
+ UINT32 u4FCode00 : 4;
+ UINT32 u4ExtId : 4;
+
+ /* 22 Bit */
+ UINT32 : 10;
+ UINT32 u4SubCarrierPhase : 8;
+ UINT32 u4BurstAmplitude : 7;
+ UINT32 fgSubCarrier : 1;
+ UINT32 u4FieldSequence : 3;
+ UINT32 fgVAxis : 1;
+ UINT32 fgCompositeDisp : 1;
+ UINT32 fgPrgsFrame : 1;
+} MPEG2_PIC_EXT_HDR_FIELD_T;
+
+typedef union _MPEG2_PIC_EXT_HDR_UNION_T
+{
+ UINT32 au4Reg[2];
+ MPEG2_PIC_EXT_HDR_FIELD_T rField;
+} MPEG2_PIC_EXT_HDR_UNION_T;
+
+// Picture Display Externsion Hdr
+typedef struct _MPEG2_PIC_DISP_EXT_HDR_FIELD_T
+{
+ /* 17 Bit */
+ UINT32 : 15;
+ UINT32 fgMark : 1;
+ UINT32 u4Offset : 16;
+} MPEG2_PIC_DISP_EXT_HDR_FIELD_T;
+
+typedef union _MPEG2_PIC_DISP_EXT_HDR_UNION_T
+{
+
+
+ UINT32 au4Reg[1];
+ MPEG2_PIC_DISP_EXT_HDR_FIELD_T rField;
+} MPEG2_PIC_DISP_EXT_HDR_UNION_T;
+
+// C_o_p_y_R_i_g_h_t E_x_t_e_n_s_i_o_n H_d_r
+typedef struct _MPEG2_COPYRIGHT_EXT_HDR_FIELD_T
+{
+ /* 22 Bit */
+ UINT32 : 10;
+ UINT32 fgMark1 : 1;
+ UINT32 : 7;
+ UINT32 fgOriginal : 1;
+ UINT32 u4CopyRightId : 8;
+ UINT32 fgCopyFlag : 1;
+ UINT32 u4ExtId : 4;
+
+ /* 21 Bit */
+ UINT32 : 11;
+ UINT32 fgMark2 : 1;
+ UINT32 u4CopyRightNs1 : 20;
+
+ /* 23 Bit */
+ UINT32 : 9;
+ UINT32 fgMark3 : 1;
+ UINT32 u4CopyRightNs2 : 22;
+
+ /* 22 Bit */
+ UINT32 : 10;
+ UINT32 u4CopyRightNs3 : 22;
+} MPEG2_COPYRIGHT_EXT_HDR_FIELD_T;
+
+typedef union _MPEG2_COPYRIGHT_EXT_HDR_UNION_T
+{
+
+
+ UINT32 au4Reg[4];
+ MPEG2_COPYRIGHT_EXT_HDR_FIELD_T rField;
+} MPEG2_COPYRIGHT_EXT_HDR_UNION_T;
+
+// Sequence Header Structure
+typedef struct _MEPG2_SEQ_HDR_T
+{
+ BOOL fgSeqHdrValid;
+
+ UINT16 u2HSize; // horizontal size value in Sequence Header
+ UINT16 u2VSize; // vertical size value in Sequence Header
+ UCHAR ucAspRatInf; // aspect_ratio_information
+ UCHAR ucFrmRatCod; // frame_rate_code
+ UINT32 u4BitRatVal; // bit_rate_value;
+ // BOOL fgLoadIntraMatrix; // load_intra_quantizer_matrix;
+ // BOOL fgLoadNonIntraMatrix; // load_non_intra_quantizer_matrix;
+ BOOL fgProgressiveSeq;
+ UCHAR ucCrmaFmt; //chroma_format;
+ //BOOL fgClosedGop;
+ //BOOL fgBrokenLink;
+
+ UCHAR ucColourPrimaries; // BT.709 or BT.601
+
+ UINT16 u2DispHSize; // Disp horizontal size value in Sequence Header
+ UINT16 u2DispVSize; // Disp vertical size value in Sequence Header
+
+ UINT8 u1Profile;
+ UINT8 u1Level;
+} MEPG2_SEQ_HDR_T;
+
+typedef struct _MEPG2_GOP_HDR_T
+{
+ BOOL fgGopHdrValid;
+ BOOL fgClosedGop;
+ BOOL fgBrokenLink;
+ UINT32 u4Picture : 6;
+ UINT32 u4Second : 6;
+ UINT32 u4Minute : 6;
+ UINT32 u4Hour : 5;
+} MEPG2_GOP_HDR_T;
+
+// Picture & GOP Header Structure
+typedef struct _MEPG2_PIC_HDR_T
+{
+ BOOL fgPicHdrValid;
+
+ UINT32 u8PTS; // 90 KHz PTS value, 33/32 bit ?
+ UINT16 u2TemporalRef;
+
+ UCHAR ucPicCdTp;
+ UCHAR ucFullPelFordVec;
+ UCHAR ucFordFCode;
+ UCHAR ucFullPelBackVec;
+ UCHAR ucBackFCode;
+ UCHAR ucfcode[2][2];
+ UCHAR ucIntraDcPre;
+ UCHAR ucPicStruct;
+ BOOL fgTopFldFirst;
+ BOOL fgFrmPredFrmDct;
+ BOOL fgConcMotionVec;
+ BOOL fgQScaleType;
+ BOOL fgIntraVlcFmt;
+ BOOL fgAltScan;
+ BOOL fgRepFirstFld;
+ BOOL fgProgressiveFrm;
+
+ UCHAR ucPSVectorNum;
+ INT16 ai2HOffset[MPEG2_PANSCAN_VECTOR_NS];
+ INT16 ai2VOffset[MPEG2_PANSCAN_VECTOR_NS];
+} MEPG2_PIC_HDR_T;
+
+typedef enum
+{
+ MPEG2_DPB_STATUS_EMPTY = 0, // Free
+ MPEG2_DPB_STATUS_READY, // After Get
+ MPEG2_DPB_STATUS_DECODING, // After Lock
+ MPEG2_DPB_STATUS_DECODED, // After UnLock
+ MPEG2_DPB_STATUS_OUTPUTTED, // After Output
+ MPEG2_DPB_STATUS_FLD_DECODED, // After 1fld UnLock
+ MPEG2_DPB_STATUS_DEC_REF,
+ MPEG2_DPB_STATUS_OUT_REF,
+} MPEG2_DPB_COND_T;
+
+typedef enum
+{
+ MPEG2_DPB_FBUF_UNKNOWN = VDEC_FB_ID_UNKNOWN,
+ MPEG2_DPB_FREF_FBUF = 0,
+ MPEG2_DPB_BREF_FBUF = 1,
+ MPEG2_DPB_WORKING_FBUF = 2,
+} MPEG2_DPB_IDX_T;
+
+
+typedef struct _MPEG2_DBP_INFO_T
+{
+ BOOL fgVirtualDec;
+ UCHAR ucDpbFbId;
+ MPEG2_DPB_COND_T eDpbStatus;
+ UINT64 u8Pts;
+ UINT64 u8Offset;
+} MPEG2_DBP_INFO_T;
+
+typedef struct _MEPG2_DEC_PRM_T
+{
+ UCHAR ucSeqIErrCnt; //Count of continous I fram error
+ UCHAR ucDecFld;
+ UCHAR uc2ndFld;
+#if CONFIG_DRV_DVD_24P_SUPPORT
+ UINT8 u1DVD24PSeqStep;
+ BOOL fgValidDVD24P;
+#endif
+ BOOL fgLoadIntraMatrix; // load_intra_quantizer_matrix;
+ BOOL fgLoadNonIntraMatrix; // load_non_intra_quantizer_matrix;
+ UINT32 *pu4IntraMatrix;
+ UINT32 *pu4NonIntraMatrix;
+ UINT32 u4MatrixId;
+ UINT32 u4BitCount;
+ INT64 i8BasePTS;
+ UINT32 u4PreFrmTempRef;
+ UINT64 u8PreFrmOffset;
+ INT64 i8LatestRealPTS;
+ UINT32 u4LatestRealTempRef;
+ INT64 i8PredPTS;
+ INT64 i8PTSDuration;
+ INT64 u8LastCCPTS;
+ UINT32 u4CurrentQMatrixId;
+ UINT32 u4QMatrixCounter;
+ MPEG2_DPB_IDX_T eDpbOutputId;
+ MPEG2_DBP_INFO_T arMPEG2DpbInfo[MPEG2_DPB_NUM]; // 0: FRef, 1: BRef, 2:Working
+ MPEG2_DBP_INFO_T arMPEG2DebInfo[MPEG2_DPB_NUM]; // Deblocking buffer info
+ VDEC_NORM_INFO_T *prVDecNormInfo;
+ VDEC_PIC_INFO_T *prVDecPicInfo;
+ VDEC_FBM_INFO_T *prVDecFbmInfo;
+ VID_DEC_PB_MODE_T *prVDecPBInfo;
+ MEPG2_SEQ_HDR_T rMPEG2SeqHdr;
+ MEPG2_GOP_HDR_T rMPEG2GopHdr;
+ MEPG2_PIC_HDR_T rMPEG2PicHdr;
+ VDEC_INFO_MPEG_VFIFO_PRM_T rVDecMPEGVFifoPrm;
+ VDEC_INFO_MPEG_BS_INIT_PRM_T rVDecMPEGBsInitPrm[2];
+ VDEC_INFO_MPEG_QANTMATRIX_T rVDecMPEGIntraQM;
+ VDEC_INFO_MPEG_QANTMATRIX_T rVDecMPEGNonIntraQM;
+ VDEC_INFO_MPEG_ERR_INFO_T rVDecMPEGErrInfo;
+ VDEC_INFO_DEC_PRM_T rVDecNormHalPrm;
+#ifdef VDEC_SR_SUPPORT
+ UCHAR ucGopRefCnt;
+ UCHAR ucMPEG2CurrSeqId;
+ UCHAR ucMPEG2CurrGopId;
+ UCHAR ucMPEG2SeqHdrCnt;
+ UCHAR ucMPEG2GopHdrCnt;
+ UCHAR ucMPEG2GopCntOfSeq;
+ MEPG2_SEQ_HDR_T rMPEG2StoreSeqHdr[MPEG2_MAX_SEQ_NUM];
+ MEPG2_GOP_HDR_T rMPEG2StoreGopHdr[MPEG2_MAX_GOP_NUM];
+ MPEG2_DBP_INFO_T arMPEG2EDpbInfo[MPEG2_MAX_EDPB_NUM]; // 0: FRef, 1: BRef, 2:Working
+ MPEG_DFB_INFO_T arMPEG2DFBInfo[MPEG2_DFB_NUM];
+ BOOL fgStoreLoadIntraMatrix[MPEG2_MAX_SEQ_NUM];
+ BOOL fgStoreLoadNonIntraMatrix[MPEG2_MAX_SEQ_NUM];
+ UINT32 *pu4StoreIntraMatrix[MPEG2_MAX_SEQ_NUM];
+ UINT32 *pu4StoreNonIntraMatrix[MPEG2_MAX_SEQ_NUM];
+ //UINT32 u4MPEG2DFBIdx;
+#endif
+} MEPG2_DRV_INFO_T;
+
+/******************************************************************************
+* Function prototype
+******************************************************************************/
+//extern UINT32 _au4CurrentQMatrixId[MPV_MAX_VLD];
+//extern UINT32 _au4QMatrixCounter[MPV_MAX_VLD];
+
+extern INT32 vMPEG2Parser(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4VParseType);
+extern void vMPEG2SetColorPrimaries(MEPG2_DRV_INFO_T *prMPEG2DrvDecInfo, UINT32 u4ColorPrimaries);
+extern void vMPEG2SetSampleAsp(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4MPEG2Asp);
+extern void vMPEG2SetFrameTimingInfo(VDEC_ES_INFO_T *prVDecEsInfo, UCHAR ucFrameRate);
+
+
+
+/******************************************************************************
+* Local macro
+******************************************************************************/
+#define INVERSE_ENDIAN(value) \
+ (((value & 0xFF) << 24) + ((value & 0xFF00) << 8) + ((value & 0xFF0000) >> 8) + ((value & 0xFF000000) >> 24))
+
+#define CCSIZE(wp, rp, bufsize) \
+ (((wp) >= (rp)) ? ((wp) - (rp)) : (((bufsize) + (wp)) - (rp)))
+
+
+#define INVERSE_BIT_ORDER_8(value) \
+ { \
+ UCHAR ucTemp = 0; \
+ INT32 i4_i; \
+ for( i4_i = 0; i4_i<4; i4_i++) \
+ { \
+ ucTemp |= (value & (1 << i4_i)) << ((4-i4_i)*2 - 1); \
+ } \
+ for( i4_i = 4; i4_i<8; i4_i++) \
+ { \
+ ucTemp |= (value & (1 << i4_i)) >> ((i4_i-4)*2 + 1); \
+ } \
+ value = ucTemp; \
+ }
+
+
+extern void vMPEG2InitProc(UCHAR ucEsId);
+extern INT32 i4MPEG2VParseProc(UCHAR ucEsId, UINT32 u4VParseType);
+extern BOOL fgMPEG2VParseChkProc(UCHAR ucEsId);
+extern INT32 i4MPEG2UpdInfoToFbg(UCHAR ucEsId);
+extern void vMPEG2StartToDecProc(UCHAR ucEsId);
+extern void vMPEG2ISR(UCHAR ucEsId);
+extern BOOL fgIsMPEG2DecEnd(UCHAR ucEsId);
+extern BOOL fgIsMPEG2DecErr(UCHAR ucEsId);
+extern BOOL fgMPEG2ResultChk(UCHAR ucEsId);
+extern BOOL fgIsMPEG2InsToDispQ(UCHAR ucEsId);
+extern BOOL fgIsMPEG2GetFrmToDispQ(UCHAR ucEsId);
+extern void vMPEG2EndProc(UCHAR ucEsId);
+extern BOOL fgMPEG2FlushDPB(UCHAR ucEsId, BOOL fgWithOutput);
+extern void vMPEG2ReleaseProc(UCHAR ucEsId, BOOL fgResetHW);
+extern void vMPEG2SetMcBufAddr(UCHAR ucFbgId, VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vMPEG2DpbBufCopy(MEPG2_DRV_INFO_T *prMpeg2DrvInfo, UCHAR ucTarDpbBuf, UCHAR ucSrcDpbBuf);
+extern INT32 i4MPEG2OutputProc(UCHAR ucEsId, VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vMPEG2SetDownScaleParam(MEPG2_DRV_INFO_T *prMpeg2DrvInfo, BOOL fgEnable);
+extern void vFreeMPEG2WorkingArea(VDEC_ES_INFO_T *prVDecEsInfo);
+#if ((CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560) && CONFIG_DRV_FTS_SUPPORT)
+extern void vMPEG2SetLetterBoxParam(MEPG2_DRV_INFO_T *prMpeg2DrvInfo);
+#endif
+
+#ifdef VDEC_SR_SUPPORT
+extern BOOL fgMPEG2GenEDPB(UCHAR ucEsId);
+extern BOOL fgMPEG2RestoreEDPB(UCHAR ucEsId, BOOL fgRestore);
+extern BOOL fgIsMPEG2GetSRFrmToDispQ(UCHAR ucEsId, BOOL fgSeqEnd, BOOL fgRefPic);
+extern void vMPEG2GetSeqFirstTarget(UCHAR ucEsId);
+extern void vMPEG2ReleaseSRDrvInfo(UCHAR ucEsId);
+extern BOOL fgMPEG2GetDFBInfo(UCHAR ucEsId, void **prDFBInfo);
+extern void vMPEG2RestoreSeqInfo(UCHAR ucEsId);
+extern BOOL fgMPEG2RvsDone(UCHAR ucEsId);
+extern void vMPEG2ReleaseEDPB(UCHAR ucEsId);
+extern void pvMPEG2BackupInfo(UCHAR ucEsId);
+
+extern void vMPEG2EDpbPutBuf(VDEC_ES_INFO_T *prVDecEsInfo, MEPG2_DRV_INFO_T *prMpeg2DrvInfo, UCHAR ucSrcDpbBuf);
+extern void vMPEG2EDpbGetBuf(VDEC_ES_INFO_T *prVDecEsInfo, MEPG2_DRV_INFO_T *prMpeg2DrvInfo, UCHAR ucTarDpbBuf);
+extern INT32 i4MPEG2OutputProcSR(VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vMPEG2SetDFBInfo(VDEC_ES_INFO_T *prVDecEsInfo, BOOL fgIsRef);
+extern void vMPEGUpdPts(VDEC_ES_INFO_T *prVDecEsInfo, MEPG2_DRV_INFO_T *prMpeg2DrvInfo, BOOL fgRealOutput);
+extern void vMPEGUpdPtsSR(VDEC_ES_INFO_T *prVDecEsInfo, MEPG2_DRV_INFO_T *prMpeg2DrvInfo, BOOL fgRealOutput);
+#endif
+
+extern VDEC_DRV_IF *VDec_GetMPEG2If(void);
+
+#ifdef MPV_DUMP_FBUF
+extern void VDec_Dump_Data(UINT32 u4StartAddr, UINT32 u4FileSize, UINT32 u4FileCnt, UCHAR *pucAddStr);
+#endif
+
+#ifdef DRV_VDEC_SUPPORT_FBM_OVERLAY
+extern BOOL fgMPEG2NeedDoDscl(UCHAR ucEsId);
+#endif
+
+#endif
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_mpeg4_info.h b/drivers/misc/mediatek/vdec/include/vdec_drv_mpeg4_info.h
new file mode 100644
index 000000000..538e41b41
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_mpeg4_info.h
@@ -0,0 +1,930 @@
+#ifndef _VDEC_DRV_MPEG4_INFO_H_
+#define _VDEC_DRV_MPEG4_INFO_H_
+
+#include "drv_common.h"
+
+#include "vdec_common_if.h"
+#include "vdec_usage.h"
+
+#include "vdec_info_mpeg.h"
+#include "vdec_info_common.h"
+
+#define DISP_DUMMY_FRM
+#define VDEC_DEC_DUMMY_FRM
+#define VDEC_USE_MW_DXINFO
+
+#define VDEC_SUPPORT_HIGH_FRAME_RATE
+
+#if (CONFIG_CHIP_VER_CURR < CONFIG_CHIP_VER_MT8550)
+#define VDEC_MPEG4_SUPPORT_RESYNC_MARKER
+#endif
+
+/******************************************************************************
+* brief MPEG4 log monitor level
+******************************************************************************/
+#define VDEC_MPEG4_SYSTEM_MONITOR 1
+#define VDEC_MPEG4_ERROR_MONITOR 2
+#define VDEC_MPEG4_PTS_MONITOR 4
+#define VDEC_MPEG4_SEQ_HEADER_PARSER_MONITOR 6
+#define VDEC_MPEG4_VOP_HEADER_PARSER_MONITOR 7
+#define VDEC_MPEG4_ALL_MONITOR 9
+
+
+
+/******************************************************************************
+* Local definition
+******************************************************************************/
+/*! \name MPEG4 Video Start Code
+* @{
+*/
+/// Video Start Code
+#define VIDEO_START_CODE 0x00000100
+/// Video Object Start Code Min
+#define VIDEO_OBJECT_START_CODE_MIN 0x100
+/// Video Object Start Code Max
+#define VIDEO_OBJECT_START_CODE_MAX 0x11F
+/// Video Object Layer Start Code Min
+#define VIDEO_OBJECT_LAYER_START_CODE_MIN 0x120
+/// Video Object Start Code Max
+#define VIDEO_OBJECT_LAYER_START_CODE_MAX 0x12F
+/// Visual Object Sequence Start Code
+#define VISUAL_OBJECT_SEQUENCE_START_CODE 0x1B0
+/// Visual Object Sequence End Code
+#define VISUAL_OBJECT_SEQUENCE_END_CODE 0x1B1
+/// User Data Start Code
+#define USER_DATA_START_CODE 0x1B2
+/// Group of Vop Start Code
+#define GROUP_OF_VOP_START_CODE 0x1B3
+/// Video Session Error Code
+#define VIDEO_SESSION_ERROR_CODE 0x1B4
+/// Visual Object Start Code
+#define VISUAL_OBJECT_START_CODE 0x1B5
+#define VOP_START_CODE 0x1B6
+//Reserved 0x1B7, 0x1B8, 0x1B9
+/// FBA Object Start Code
+#define FBA_OBJ_START_CODE 0X1BA
+/// FBA Object Plane Start Code
+#define FBA_OBJ_PLANE_START_CODE 0x1BB
+/// Mesh Object Start Code
+#define MESH_OBJ_START_CODE 0x1BC
+/// Mesh Object Plane Start Code
+#define MESH_OBJ_PLANE_START_CODE 0x1BD
+/// Still Texture Object Start Code
+#define STILL_TEXT_OBJ_START_CODE 0x1BE
+/// Texture Spatial Layer Start Code
+#define TEXT_SPT_LAYER_START_CODE 0x1BF
+/// Texture SNR Layer Start Code
+#define TEXT_SNR_LAYER_START_CODE 0x1C0
+/// Texture Tile Start Code
+#define TEXT_TIL_START_CODE 0x1C1
+/// Texture Shape Layer Start Code
+#define TEXT_SHP_LAYER_START_CODE 0x1C2
+/// Stuffing Start Code
+#define STUFFING_START_CODE 0x1C3
+//Reserved 0x1C4, 0x1C5
+/// System Start Code Min
+#define SYSTEM_START_CODE_MIN 0x1C6
+/// System Start Code Max
+#define SYSTEM_START_CODE_MAX 0x1CF
+/// Short Video Start Code Mask
+#define SHORT_VIDEO_START_MASK 0xfffffc00
+/// Short Video Start Code Marker
+#define SHORT_VIDEO_START_MARKER 0x00008000
+
+#define SORENSON_H263_START_MASK 0xffff8000
+
+#define SORENSON_H263_START_MARKER 0x00008000
+/*! @} */
+
+/// Video Object Type Definition
+//Reserved 0x0
+#define VIDEO_ID 0x1
+#define STILL_TEXT_ID 0x2
+#define MESH_ID 0x3
+#define FBA_ID 0x4
+#define MESH_3D_ID 0x5
+#define EXTENDED_PAR 0xf
+/// Video Shape Definition: Regular, Binary, Binary Only, GrayScale
+#define RECTANGULAR_SHAPE 0x0
+#define BINARY_SHAPE 0x1
+#define BINARY_ONLY_SHAPE 0x2
+#define GRAYSCALE_SHAPE 0x3
+/// Sprite Mode: Not Used, Static, GMC
+#define SPRITE_NOTE_USED 0x0
+#define SPRITE_STATIC 0x1
+#define SPRITE_GMC 0x2
+#define SPRITE_RESERVED 0x3
+/// Default Video Horizontal Size
+#define DEFAULT_H_SIZE 720
+/// Default Video Vertical Size
+#define DEFAULT_V_SIZE 480
+/// MPEG4 Decoder Picture Buffer Number
+#define MPEG4_DPB_NUM 3
+/// Sprite Warping Error Code
+#define WARPING_PT_ERR 0x00000402
+
+#define fgIsMPEG4VideoStartCode(arg) ((arg & 0xFFFFFF00) == VIDEO_START_CODE)
+#define fgPureIsoM4v() (FALSE)
+#define u4Div2Slash(v1, v2) (((v1)+(v2)/2)/(v2))
+
+#ifndef VDEC_DEC_DUMMY_FRM
+
+#define fgIsMPEG4RefPic(arg) ( ((arg&0xFF) == I_VOP) || \
+ ((arg&0xFF) == SH_I_VOP) || \
+ ((arg&0xFF) == DX3_I_FRM) || \
+ ((arg&0xFF) == P_TYPE) || \
+ ((arg&0xFF) == P_VOP) || \
+ ((arg&0xFF) == S_VOP) ||\
+ ((arg&0xFF) == SH_I_VOP)||\
+ ((arg&0xFF) == SH_P_VOP) ||\
+ ((arg&0xFF) == DUMMY_FRM) ||\
+ ((arg&0xFF) == DX3_P_FRM))
+
+#else
+#define fgIsMPEG4RefPic(arg) ( ((arg&0xFF) == I_VOP) || \
+ ((arg&0xFF) == SH_I_VOP) || \
+ ((arg&0xFF) == DX3_I_FRM) || \
+ ((arg&0xFF) == P_TYPE) || \
+ ((arg&0xFF) == P_VOP) || \
+ ((arg&0xFF) == S_VOP) ||\
+ ((arg&0xFF) == SH_I_VOP)||\
+ ((arg&0xFF) == SH_P_VOP) ||\
+ ((arg&0xFF) == DX3_P_FRM))
+
+#endif
+/*! \name MPEG4 Working Buffer Size
+* @{
+* \ingroup Private
+*/
+#if 0
+#ifdef WRITE_FULL_DCAC_DATA
+#define DCAC_SZ ((((1920 / 16) * 4) * ((1088 / 16) * 4)) * 4) // (MBx * 4) * (MBy * 4) = 25920
+#else
+#define DCAC_SZ ((((1920 / 16) * 4) * (4)) * 4) // (MBx * 4) * (4) = 7680
+#endif
+#define MVEC_SZ (((1920 / 16) * 4 * (1088 / 16)) * 4) // (MBx * 4) * (MBy) = 6480
+#define BMB1_SZ (((1920 / 16) * 4 * (1088 / 16)) * 4) // (MBx * 4) * (MBy) = 6480
+#define BMB2_SZ (((1920 / 16) * 4 * (1088 / 16)) * 4) // (MBx * 4) * (MBy) = 6480
+#define BCODE_SZ (((1920 / 16) * 2) * 4) // (MBx * 2) = 90
+
+#else
+
+#ifdef WRITE_FULL_DCAC_DATA
+#if (CONFIG_CHIP_VER_CURR < CONFIG_CHIP_VER_MT8580)
+#define DCAC_SZ_W ((1920 / 16) * 4)
+#define DCAC_SZ_H ((1088 / 16) * 4 * 4) // (MBx * 4) * (MBy * 4) = 25920
+#else//>=MT8580
+#define DCAC_SZ_W ((4096 / 16) * 4)
+#define DCAC_SZ_H ((2048 / 16) * 4 * 4) // (MBx * 4) * (MBy * 4) = 25920
+#endif
+#else
+#if (CONFIG_CHIP_VER_CURR < CONFIG_CHIP_VER_MT8580)
+#define DCAC_SZ_W ((1920 / 16) * 4) // (MBx * 4) * (4) = 7680
+#define DCAC_SZ_H (4 * 4)
+#else//>=MT8580
+#define DCAC_SZ_W ((4096 / 16) * 4) // (MBx * 4) * (4) = 7680
+#define DCAC_SZ_H (4 * 4)
+#endif
+#endif
+
+#if (CONFIG_CHIP_VER_CURR < CONFIG_CHIP_VER_MT8580)
+#define MVEC_SZ_W ((1920 / 16) *4) // (MBx * 4) * (MBy) = 6480
+#define MVEC_SZ_H ((1088 / 16) * 4) // (MBx * 4) * (MBy) = 6480
+#define BMB1_SZ_W ((1920 / 16) * 4) // (MBx * 4) * (MBy) = 6480
+#define BMB1_SZ_H ((1088 / 16) * 4) // (MBx * 4) * (MBy) = 6480
+#define BMB2_SZ_W ((1920 / 16) * 4) // (MBx * 4) * (MBy) = 6480
+#define BMB2_SZ_H ((1088 / 16) * 4) // (MBx * 4) * (MBy) = 6480
+#define BCODE_SZ_W ((1920 / 16) * 2) // (MBx * 2) = 90
+#define BCODE_SZ_H (4) // (MBx * 2) = 90
+#else
+#define MVEC_SZ_W ((4096 / 16) *4) // (MBx * 4) * (MBy) = 6480
+#define MVEC_SZ_H ((2048 / 16) * 4) // (MBx * 4) * (MBy) = 6480
+#define BMB1_SZ_W ((4096 / 16) * 4) // (MBx * 4) * (MBy) = 6480
+#define BMB1_SZ_H ((2048 / 16) * 4) // (MBx * 4) * (MBy) = 6480
+#define BMB2_SZ_W ((4096 / 16) * 4) // (MBx * 4) * (MBy) = 6480
+#define BMB2_SZ_H ((2048 / 16) * 4) // (MBx * 4) * (MBy) = 6480
+#define BCODE_SZ_W ((4096 / 16) * 8) // (MBx * 8) = 90,is difference with <MT8580 IC
+#define BCODE_SZ_H (4) // (MBx * 2) = 90
+
+#endif
+#endif
+/*! @} */
+
+/// Quantization Matrix Mode
+typedef enum
+{
+ MPEG4_QMATRIX_INTER = 00, ///< Inter Quant Matrix
+ MPEG4_QMATRIX_INTRA = 1, ///< Intra Quant Matrix
+ MPEG4_QMATRIX_GRAY = 2, ///< Gray Scale Quant Matrix
+} MPEG4_QMATRIX_TYPE_T;
+/// Sprite Transmit Mode
+typedef enum
+{
+ SPRITE_TRANS_STOP = 0, ///< Sprite Transmittion Stop
+ SPRITE_TRANS_PEICE = 1, ///< Sprite Transmittion Piece
+ SPRITE_TRANS_UPDATE = 2, ///< Sprite Transmittion Update
+ SPRITE_TRANS_PAUSE = 3, ///< Sprite Transmittion Pause
+} MPEG4_SPRITE_TRANS_MODE_T;
+
+/*! \name MPEG4 Header Parsing Struct
+* @{
+* \ingroup Header
+*/
+/// Visual Object Sequence Header Field
+typedef struct _MPEG4_VOS_HDR_FIELD_T
+{
+ /* 8 Bit */
+ UINT32 : 24; ///< Reserved
+ UINT32 u4ProfileLevel : 8; ///< Profile And Level
+
+} MPEG4_VOS_HDR_FIELD_T;
+
+/// Visual Object Sequence Header Union
+typedef union _MPEG4_VOS_HDR_UNION_T
+{
+ UINT32 au4Reg[1];
+ MPEG4_VOS_HDR_FIELD_T rField;
+} MPEG4_VOS_HDR_UNION_T;
+
+/// Visual Object Header Field
+typedef struct _MPEG4_VISUAL_OBJECT_HDR_FIELD_T
+{
+ /* 12/5 Bit */
+ UINT32 : 20; ///< Reserved
+ UINT32 u4VoType : 4; ///< Visaul Object Type
+ UINT32 u4VoPrior : 3; ///< Visual Object Priority
+ UINT32 u4VoVerid : 4; ///< Visual Object Version Identify
+ UINT32 fgVoId : 1; ///< Visual Object Identifier
+} MPEG4_VISUAL_OBJECT_HDR_FIELD_T;
+/// Visual Object Header Union
+typedef union _MPEG4_VISUAL_OBJECT_HDR_UNION_T
+{
+ UINT32 au4Reg[1];
+ MPEG4_VISUAL_OBJECT_HDR_FIELD_T rField;
+} MPEG4_VISUAL_OBJECT_HDR_UNION_T;
+/// Video Signal Type Header Field
+typedef struct _MPEG4_VIDEO_SIGNAL_HDR_FIELD_T
+{
+ /* 30/1 Bit */
+ UINT32 : 2; ///< Reserved
+ UINT32 u4MatrixCoef : 8; ///< Matrix coefficients used in deriving luma and chroma from RGB primaries,
+ UINT32 u4TransChar : 8; ///< The opto-electronic transfer characteristic of the source picture
+ UINT32 u4ColorPrim : 8; ///< Chromaticity coordinates of the source primaries
+ UINT32 fgColorDsc : 1; ///< Indicates the presence of colour_primaries, transfer_characteristics and matrix_coefficients in the bitstream.
+ UINT32 u4VideoRng : 1; ///< Indicates the black level and range of the luminance and chrominance signals.
+ UINT32 u4VideoFmt : 3; ///< Indicating the representation of the pictures format
+ UINT32 fgSignalType : 1; ///< Indicates the presence of video_signal_type information.
+} MPEG4_VIDEO_SIGNAL_HDR_FIELD_T;
+/// Video Signal Type Header Union
+typedef union _MPEG4_VIDEO_SIGNAL_HDR_UNION_T
+{
+ UINT32 au4Reg[1];
+ MPEG4_VIDEO_SIGNAL_HDR_FIELD_T rField;
+} MPEG4_VIDEO_SIGNAL_HDR_UNION_T;
+
+/// Video Object Layer Header Field
+typedef struct _MPEG4_VOL_HDR_FIELD_T
+{
+ /* 17 Bit */
+ UINT32 : 15; ///< Reserved
+ UINT32 u4VolPrior : 3; ///< The priority of the video object layer.
+ UINT32 u4VolVerid : 4; ///< The version number of the video object layer.
+ UINT32 fgIsOlId : 1; ///< When set to '1' indicates that version identification and priority is specified for the visual object layer.
+ UINT32 u4VoTypeInd : 8; ///< Constrains the bitstream to use tools from the indicated object type only
+ UINT32 fgRandAccess : 1; ///< '1' to indicate that every VOP in this VOL is individually decodable.
+ /* 25 Bits*/
+ UINT32 : 7; ///< Reserved
+ UINT32 fgFixedVopRate : 1; ///< Indicates that all VOPs are coded with a fixed VOP rate.
+ UINT32 fgMark7 : 1; ///< Marker Bit
+ UINT32 u4VopTimeIncRes : 16; ///< The number of evenly spaced subintervals.
+ UINT32 fgMark6 : 1; ///< Marker Bit
+ UINT32 u4VolShapeExt : 4; ///< The number (up to 3) and type of auxiliary components that can be used.
+ UINT32 u4VolShape : 2; ///< Identifies the shape type of a video object layer
+ /* 16 Bits*/
+ UINT32 : 16; ///< Reserved
+ UINT32 u4FixVopTimeInc : 16; ///< This value represents the number of ticks between two successive VOPs in the display order.
+ /* 29 Bits*/
+ UINT32 : 3; ///< Reserved
+ UINT32 fgMark10 : 1; ///< Marker Bit
+ UINT32 u4VolHeight : 13; ///< The height of the displayable part of the luma in pixel units.
+ UINT32 fgMark9 : 1; ///< Marker Bit
+ UINT32 u4VolWidth : 13; ///< The width of the displayable part of the luma in pixel units.
+ UINT32 fgMark8 : 1; ///< Marker bit
+ /* 4 Bits*/
+ UINT32 : 28; ///< Reserved
+ UINT32 u4SpriteEnable : 2; ///< Define sprite mode
+ UINT32 fgObmcDisable : 1; ///< Disables overlapped block motion compensation.
+ UINT32 fgInterlaced : 1; ///< When set to ¡§1¡¨ indicates that the VOP may contain interlaced video.
+
+ /* 14 Bits*/
+ UINT32 : 18; ///< Reserved
+ UINT32 ucQuantType : 1; ///<
+ UINT32 fgLinearComp : 1; ///<
+ UINT32 fgComposeMethod : 1; ///<
+ UINT32 fgNoGrayQuantUpd : 1; ///<
+ UINT32 u4BitsPerPixel : 4; ///<
+ UINT32 u4QuantPrecision : 4; ///<
+ UINT32 fgNot8Bit : 1; ///<
+ UINT32 fgSadctDisable : 1; ///<
+} MPEG4_VOL_HDR_FIELD_T;
+/// Video Object Layer Header Union
+typedef union _MPEG4_VOL_HDR_UNION_T
+{
+ UINT32 au4Reg[6];
+ MPEG4_VOL_HDR_FIELD_T rField;
+} MPEG4_VOL_HDR_UNION_T;
+
+/// Aspect Ratio Information Header Field
+typedef struct _MPEG4_ASPECT_RATIO_HDR_FIELD_T
+{
+ /* 20 Bits*/
+ UINT32 : 12; ///< Reserved
+ UINT32 u4ParHeight : 8; ///< Indicates the vertical size of pixel aspect ratio.
+ UINT32 u4ParWidth : 8; ///< Indicates the horizontal size of pixel aspect ratio.
+ UINT32 u4AspectRatio : 4; ///< Defines the value of pixel aspect ratio.
+} MPEG4_ASPECT_RATIO_HDR_FIELD_T;
+/// Aspect Ratio Information Header Union
+typedef union _MPEG4_ASPECT_RATIO_HDR_UNION_T
+{
+ UINT32 au4Reg[1];
+ MPEG4_ASPECT_RATIO_HDR_FIELD_T rField;
+} MPEG4_ASPECT_RATIO_HDR_UNION_T;
+
+/// Video Object Layer Control Parameter Header Field
+typedef struct _MPEG4_VOL_CTRL_HDR_FIELD_T
+{
+ /* 21 Bits*/
+ UINT32 : 11; ///< Reserved
+ UINT32 fgMark1 : 1; ///< Marker Bit
+ UINT32 u4FirstHalfBR : 15; ///< Bitrate of the bitstream measured in units of 400 bits/second, rounded upwards. (MSB)
+ UINT32 fgVbvParm : 1; ///< Indicates presence of following VBV parameters
+ UINT32 u4LowDelay : 1; ///< Default value is 0 for visual object types that support B-VOP otherwise it is 1.
+ UINT32 u4ChromaFmt : 2; ///< The chrominance format
+ UINT32 fgVolCtrlParm : 1; ///< Indicates presence of the following parameters: chroma_format, low_delay, and vbv_parameters.
+ /* 32 Bits*/
+ UINT32 fgMark3 : 1; ///< Marker Bit
+ UINT32 u4FirstVbvSize : 15; ///< MSB of vbv_buffer_size
+ UINT32 fgMark2 : 1; ///< Marker Bit
+ UINT32 u4LatterHalfBR : 15; ///< Bitrate of the bitstream measured in units of 400 bits/second, rounded upwards. (LSB)
+
+ /* 31 Bits*/
+ UINT32 : 1; ///< Reserved
+ UINT32 fgMark5 : 1; ///< Marker bit
+ UINT32 u4LatterVbvOccu : 15; ///< LSB of vbv_occupancy
+ UINT32 fgMark4 : 1; ///< Marker bit
+ UINT32 u4FirstVbvOccu : 11; ///< MSB of vbv_occupancy
+ UINT32 u4LatterVbvSize : 3; ///< LSB of vbv_buffer_size
+} MPEG4_VOL_CTRL_HDR_FIELD_T;
+
+/// Video Object Layer Control Parameter Header Union
+typedef union _MPEG4_VOL_CTRL_HDR_UNION_T
+{
+ UINT32 au4Reg[3];
+ MPEG4_VOL_CTRL_HDR_FIELD_T rField;
+} MPEG4_VOL_CTRL_HDR_UNION_T;
+
+/// New Prediction Header Field
+typedef struct _MPEG4_NEW_PRED_HDR_FIELD_T
+{
+ /* 5 Bits*/
+ UINT32 : 27;
+ UINT32 fgReducedResVopEnable : 1;
+ UINT32 u4NewPredSegType : 1;
+ UINT32 u4ReqUpStreamMsgType : 2;
+ UINT32 fgNewPredEnable : 1;
+} MPEG4_NEW_PRED_HDR_FIELD_T;
+
+/// New Prediction Header Union
+typedef union _MPEG4_NEW_PRED_HDR_UNION_T
+{
+ UINT32 au4Reg[1];
+ MPEG4_NEW_PRED_HDR_FIELD_T rField;
+} MPEG4_NEW_PRED_HDR_UNION_T;
+
+/// Scalability Header Field
+typedef struct _MPEG4_SCAL_HDR_FIELD_T
+{
+ /* 27 Bits*/
+ UINT32 : 5;
+ UINT32 fgEnhacementType : 1;
+ UINT32 u4VerSampleFactorM : 5;
+ UINT32 u4VerSampleFactorN : 5;
+ UINT32 u4HorSampleFactorM : 5;
+ UINT32 u4HorSampleFactorN : 5;
+ UINT32 u4RefLayerSampleDirec : 1;
+ UINT32 u4RefLayerId : 4;
+ UINT32 u4HierarchyType : 1;
+
+ /* 22 Bits*/
+ UINT32 : 10;
+ UINT32 u4ShapeVerSampM : 5;
+ UINT32 u4ShapeVerSampN : 5;
+ UINT32 u4ShapeHorSampM : 5;
+ UINT32 u4ShapeHorSampN : 5;
+ UINT32 u4UseRefText : 1;
+ UINT32 u4UseRefShape : 1;
+} MPEG4_SCAL_HDR_FIELD_T;
+/// Scalability Header Field
+typedef union _MPEG4_SCAL_HDR_UNION_T
+{
+ UINT32 au4Reg[2];
+ MPEG4_SCAL_HDR_FIELD_T rField;
+} MPEG4_SCAL_HDR_UNION_T;
+
+/// Group of Video Object Plane Header Field
+typedef struct _MPEG4_GOP_HDR_FIELD_T
+{
+ /* 20 Bit */
+ UINT32 : 12;
+ UINT32 fgBrokenLink : 1;
+ UINT32 fgClosedGop : 1;
+ UINT32 u4Second : 6;
+ UINT32 fgMark : 1;
+ UINT32 u4Minute : 6;
+ UINT32 u4Hour : 5;
+} MPEG4_GOP_HDR_FIELD_T;
+
+/// Group of Video Object Plane Header Union
+typedef union _MPEG4_GOP_HDR_UNION_T
+{
+ UINT32 au4Reg[1];
+ MPEG4_GOP_HDR_FIELD_T rField;
+} MPEG4_GOP_HDR_UNION_T;
+
+/// Video Object Plane Short Header Field
+typedef struct _MPEG4_VOP_SHORT_HDR_FIELD_T
+{
+ /* 27 Bits*/
+ UINT32 : 5;
+ UINT32 u4ZeroBit : 1;
+ UINT32 u4VopQuant : 5;
+ UINT32 u4FourResZeroBits : 4;
+ UINT32 u4PicCdTp : 1;
+ UINT32 u4SourceFmt : 3;
+ UINT32 fgFullPicFreezeRel : 1;
+ UINT32 fgDocCameraInd : 1;
+ UINT32 fgSplitScreenInd : 1;
+ UINT32 ucZeroBit : 1;
+ UINT32 fgMark : 1;
+ UINT32 u4TempRef : 8;
+
+} MPEG4_VOP_SHORT_HDR_FIELD_T;
+
+/// Video Object Plane Short Header Union
+typedef union _MPEG4_VOP_SHORT_HDR_UNION_T
+{
+ UINT32 au4Reg[1];
+ MPEG4_VOP_SHORT_HDR_FIELD_T rField;
+} MPEG4_VOP_SHORT_HDR_UNION_T;
+/*! @} */
+
+/*! \name Struct for MPEG4 Driver Info
+* @{
+*/
+/// Visaul Object Sequence Information
+typedef struct _MEPG4_VOS_HDR_T
+{
+ BOOL fgVosHdrValid; ///< Indication wheter VOS header is valid or not
+ UCHAR ucProfileLevel; ///< Profile and Level
+} MEPG4_VOS_HDR_T;
+
+/// Visaul Object Object Information
+typedef struct _MEPG4_VISUAL_OBJECT_HDR_T
+{
+ BOOL fgVoHdrValid; ///< Is visual oject header valid
+ BOOL fgIsVoId; ///< flag to inform there is visual Object version info or not
+ UCHAR ucVoVerid; ///< visual object version id
+ UCHAR ucVoPrior; ///< visual object priority
+ UCHAR ucVoType; ///< visual object type
+
+ BOOL fgSignalType; ///< flag to inform there is signal type info or not
+ UCHAR ucVideoFmt; ///< video signal format
+ UCHAR ucVideoRange; ///< the black level and range of the luminance and chrominance signals.
+ BOOL fgColorDes; ///< flag to inform there is color description or not
+ UCHAR ucColorPrimaries; ///< the chromaticity coordinates of the source primaries
+ UCHAR ucTransferChar; ///< opto-electronic transfer characteristic of the source picture
+ UCHAR ucMatrixCoef; ///< the matrix coefficients used in deriving luma and chroma from RGB
+
+} MEPG4_VO_HDR_T;
+
+/// Visaul Object Sequence Layer Information
+typedef struct _MEPG4_VOL_HDR_T
+{
+ BOOL fgVolHdrValid; ///< Is Vol header valid or not
+ BOOL fgRandAccVol; ///< flag may be set to ¡§1¡¨ to indicate that every VOP in this VOL is individually decodable.
+ UCHAR ucVoTypeInd; ///< video object type indication
+ BOOL fgIsOlId; ///< '1' indicates that version id and priority is specified for the vOL
+ UCHAR ucVolVerid; ///< Vol version identification
+ UCHAR ucVolPrior ; ///< Vol priority
+ UCHAR u2FrmRatCod;
+
+
+ UCHAR ucAspectRatio; ///< Defines the value of pixel aspect ratio.
+ UCHAR ucParWidth; ///< Horizontal size of pixel aspect ratio.
+ UCHAR ucParHeight; ///< Vertical size of pixel aspect ratio.
+
+ BOOL fgVolCtrlParm; ///< '1' indicates presence of chroma_format, low_delay, and vbv_parameters.
+ UCHAR ucChromaFmt; ///< the chrominance format
+ UCHAR ucLowDelay; ///< '1' indicates the VOL contains no B-VOPs.
+ BOOL fgVbvParm; ///< '1' indicates presence of VBV parameters
+ UINT16 u2FirstBitRate;
+ UINT16 u2LatterBitRate;
+ UINT16 u2FirstVbvBufSize;
+ UCHAR ucLatterVbvBufSize;
+ UINT16 u2FirstVbvOccu;
+ UINT16 u2LatterVbvOccu;
+
+ UINT16 u2VolShape;
+ UCHAR ucVolShapeExt;
+ UINT16 u2VopTimeIncRes;
+ UCHAR ucVopTimeIncrementResolutionBits;
+ BOOL fgFixedVopRate;
+ UINT16 u2FixVopTimeInc;
+
+ UINT16 u2VolWidth;
+ UINT16 u2VolHeight;
+
+ BOOL fgInterlaced;
+ BOOL fgProgressiveFrm;
+ BOOL fgProgressiveSeq;
+
+ BOOL fgObmcDisable;
+ UCHAR ucSpriteMode;
+ UCHAR ucNoSpriteWarpPoint;
+ UCHAR ucSpriteAccuracy;
+ BOOL fgSpriteBrightChange;
+ BOOL fgLowLatencySpriteEn;
+ UCHAR ucEffectiveWarpingPoints;
+
+ BOOL fgSadctDisable;
+ BOOL fgNot8Bit;
+ UCHAR ucQuantPrecision;
+ UCHAR ucBitsPerPixel;
+
+ BOOL fgNoGrayQuantUpd;
+ BOOL fgCompositeMethod;
+ BOOL fgLinearComp;
+
+ UCHAR ucQuantType;
+
+ UCHAR ucQuarterSample;
+ BOOL fgComplexityEstDisable;
+
+ UCHAR fgResyncMarkerDisable;
+ BOOL fgDataPartition;
+ BOOL fgReversibleVLC;
+
+ BOOL fgNewpredEnable;
+ BOOL fgReducedResVopEnable;
+ BOOL fgScalability;
+ BOOL fgEnhancementType;
+} MEPG4_VOL_HDR_T;
+
+/// Gropu of Video Object Plane Information
+typedef struct _MEPG4_GOP_HDR_T
+{
+ BOOL fgGopHdrValid;
+ BOOL fgClosedGop;
+ BOOL fgBrokenLink;
+ UINT32 u4Second;
+ UINT32 u4Minute;
+ UINT32 u4Hour;
+} MEPG4_GOP_HDR_T;
+
+/// Video Object Plane Information
+typedef struct _MEPG4_VOP_HDR_T
+{
+ BOOL fgVopHdrValid;
+ UCHAR ucPreVopType;
+ UCHAR ucVopCdTp;
+ UCHAR ucPicStruct;
+ UINT16 u2VopTimeIncrement;
+ BOOL fgVopCoded;
+ UCHAR ucVopRoundingType;
+ BOOL fgVopReducedRes;
+
+ UINT32 u4TimeBase;
+ UINT32 u4RefPicTimeBase;
+ UINT32 u4CurrDispTime;
+ UINT32 u4PrevDispTime;
+ UINT32 u4NextDispTime;
+
+ UCHAR ucIntraDcVlcThr;
+ BOOL fgTopFieldFirst;
+ BOOL fgAltVerScanFlag;
+
+ UINT32 u2VopQuant;
+ UCHAR ucFcodeFwd;
+ UCHAR ucFcodeBwd;
+
+ BOOL fgSorensonH263;
+ BOOL fgVopShortHdrValid;
+ UCHAR ucTempRef;
+ BOOL fgSplitScreenInd;
+ BOOL fgDocCameraInd;
+ BOOL fgFullPicFreezeRel;
+ UCHAR ucSourceFmt;
+ UCHAR ucPreTempRef;
+
+ BOOL fgRepFirstFld;
+
+ INT32 i4WarpingMv[4][2];
+ VDEC_INFO_MPEG_DIR_MODE_T rDirMode;
+
+ //Divx3 Header
+ UINT32 u4Divx3SetPos;
+ UCHAR ucFrameMode;
+ BOOL fgAltIAcChromDct;
+ BOOL fgAltIAcChromDctIdx;
+ BOOL fgAltIAcLumDct;
+ BOOL fgAltIAcLumDctIdx;
+ BOOL fgAltIDcDct;
+ BOOL fgHasSkip;
+ BOOL fgAltPAcDct;
+ BOOL fgAltPAcDctIdx;
+ BOOL fgAltPDcDct;
+ BOOL fgAltMv;
+ BOOL fgSwitchRounding;
+
+} MEPG4_VOP_HDR_T;
+
+/// Divx Detail Information
+typedef struct _MEPG4_DIVX_INFO_T
+{
+ UINT32 u4UserDataCodecVersion;
+ UINT32 u4UserDataBuildNumber;
+ BOOL fgDivXM4v;
+ BOOL fgUseDivXInfo;
+ BOOL fgIsDivXFile;
+} MEPG4_DIVX_INFO_T;
+
+/// Decoded Picture Buffer Status Management
+typedef enum
+{
+ MPEG4_DPB_STATUS_EMPTY = 0, ///< DPB is Empty and Free
+ MPEG4_DPB_STATUS_READY, ///< DPB is ready for decoding
+ MPEG4_DPB_STATUS_DECODING, ///< DPB is used by decoder
+ MPEG4_DPB_STATUS_DECODED, ///< DPB contains decoded frame
+ MPEG4_DPB_STATUS_OUTPUTTED, ///< DPB was sent to display queue
+ MPEG4_DPB_STATUS_FLD_DECODED, ///< 1st field wad decoded
+ MPEG4_DPB_STATUS_DEC_REF, ///< DBP is used for reference
+ MPEG4_DPB_STATUS_OUT_REF, ///< DBP was displayed and is used for reference
+} MPEG4_DPB_COND_T;
+
+/// Decoded Picture Buffer Index
+typedef enum
+{
+ MPEG4_DPB_FBUF_UNKNOWN = VDEC_FB_ID_UNKNOWN,
+ MPEG4_DPB_FREF_FBUF = 0,
+ MPEG4_DPB_BREF_FBUF = 1,
+ MPEG4_DPB_WORKING_FBUF = 2,
+} MPEG4_DPB_IDX_T;
+
+/// Decoded Picture Buffer Information
+typedef struct _MPEG4_DBP_INFO_T
+{
+ BOOL fgVirtualDec;
+ UCHAR ucDpbFbId;
+ MPEG4_DPB_COND_T eDpbStatus;
+} MPEG4_DBP_INFO_T;
+/*! @} */
+
+/*! \name MPEG4 Driver Information
+* @{
+*/
+/// \ingroup API
+typedef struct _MEPG4_DEC_PRM_T
+{
+ BOOL fgLoadIntraMatrix; ///< Is load_intra_quantizer_matrix;
+ BOOL fgLoadNonIntraMatrix; ///< Is load_non_intra_quantizer_matrix;
+ UINT32 *pu4IntraMatrix; ///< Intra quantizer matrix pointer
+ UINT32 *pu4NonIntraMatrix; ///< Inter quantizer matrix pointer
+ UINT32 u4IntraMatrixLen; ///< Intra quantizer matrix length
+ UINT32 u4NonIntraMatrixLen; ///< Inter quantizer matrix length
+ UINT32 u4MatrixId; ///< Quantizer matrix index before matrix updated
+ UINT32 u4BitCount; ///< Consumed bits counter
+#if 0
+ UINT32 u4SkipCount;
+ UINT32 u4DummyCount;
+ INT64 u8BasePTS;
+ INT64 i8PredPTS;
+ INT64 i8PTSDuration;
+#endif
+ UCHAR ucDCACFbId;
+ UCHAR ucMVECFbId;
+ UCHAR ucBMB1FbId;
+ UCHAR ucBMB2FbId;
+ UCHAR ucBCODEFbId;
+ INT64 i8BasePTS;
+ INT64 i8LatestRealPTS;
+ INT64 i8DiffCnt;
+ INT64 i8DropIPCnt;
+ INT64 i8DropBCnt;
+ INT64 i8DummyCnt;
+ UINT32 u4CurrentQMatrixId; ///< Current quantizer matrix index
+ UINT32 u4QMatrixCounter; ///< Quantizer matrix count
+ MPEG4_DPB_IDX_T eDpbOutputId; ///< DPB output index: Unknown, FRef, BFre, Working
+ MPEG4_DBP_INFO_T arMPEG4DpbInfo[MPEG4_DPB_NUM]; // FbId and Dbp status
+ MPEG4_DBP_INFO_T arMPEG4DebInfo[MPEG4_DPB_NUM]; //Deblocking buffer info
+ VDEC_NORM_INFO_T *prVDecNormInfo; ///< Normal info: CodecType, EsId, VldId, BsId, LastPicTp, etc.
+ VDEC_PIC_INFO_T *prVDecPicInfo; ///< Picture info: PicStruct, PicType, PicW, PicH, FifoStart, etc.
+ VDEC_FBM_INFO_T *prVDecFbmInfo;
+ // VID_DEC_SEQUENCE_INFO_T rPrevSeqInfo; ///< Visual object Sequence Header
+ MEPG4_VOS_HDR_T rMPEG4VosHdr; ///< Visual object Sequence Header
+ MEPG4_VO_HDR_T rMPEG4VoHdr; ///< Visual Object Header
+ MEPG4_VOL_HDR_T rMPEG4VolHdr; ///< Video Object Layer Header
+ MEPG4_GOP_HDR_T rMPEG4GopHdr; ///< Group of Video Object Plane Header
+ MEPG4_VOP_HDR_T rMPEG4VopHdr; ///< Video Object Plane Header
+ MEPG4_DIVX_INFO_T rMPEG4DivxInfo; ///< Divx Info: Version, Build number
+ VDEC_INFO_MPEG_VFIFO_PRM_T rVDecMPEGVFifoPrm; ///< FifoSa, FifoEa
+ VDEC_INFO_MPEG_BS_INIT_PRM_T rVDecMPEGBsInitPrm[2]; ///< Barrel Shifter: Rd pointer, Wr pointer, FifoSa, FifoEa
+ VDEC_INFO_MPEG_QANTMATRIX_T rVDecMPEGIntraQM; ///< Intra quantizer array
+ VDEC_INFO_MPEG_QANTMATRIX_T rVDecMPEGNonIntraQM; ///< Inter quantizer array
+ VDEC_INFO_MPEG_ERR_INFO_T rVDecMPEGErrInfo; ///< Erro Info
+ VDEC_INFO_DEC_PRM_T rVDecNormHalPrm; ///< HAL parameter: picstruct, pictype, picW, picH
+ UCHAR ucLastOutFbId;
+ UCHAR ucDummyRefId;
+ BOOL ucDummyRefFbLock;
+ UCHAR ucOverSpecNtfyCnt;
+ BOOL fgDivXSupport;
+ BOOL fgDivXHTSupport;
+ BOOL fgDivXUltraSupport;
+ BOOL fgDivXHDSupport;
+#ifdef VDEC_SUPPORT_HIGH_FRAME_RATE
+ BOOL fgSeqUnknownFrameRate;
+ BOOL fgUseHighFrameRate;
+ UINT32 u4RealFrameDuration;
+#endif
+ UINT32 u4XvidCodecVersion; // XVID codec version
+ BOOL fgIsXvidCodec; // Video codec is XVID
+} MPEG4_DRV_INFO_T;
+/*! @} */
+
+/******************************************************************************
+* Function prototype
+******************************************************************************/
+//extern UINT32 _au4CurrentQMatrixId[MPV_MAX_VLD];
+//extern UINT32 _au4QMatrixCounter[MPV_MAX_VLD];
+
+
+extern void vMPEG4Dx3SufxChk(VDEC_ES_INFO_T *prVDecEsInfo);
+extern BOOL fgMPEG4ChkRealEnd(MPEG4_DRV_INFO_T *prMpeg4DrvInfo);
+
+/// \ingroup Header
+extern INT32 vMPEG4Parser(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4VParseType);
+
+extern void vSetMpeg4InitValue(VDEC_ES_INFO_T *prVDecEsInfo);
+
+/******************************************************************************
+* Local macro
+******************************************************************************/
+/// \ingroup VLD
+#define INVERSE_ENDIAN(value) \
+ (((value & 0xFF) << 24) + ((value & 0xFF00) << 8) + ((value & 0xFF0000) >> 8) + ((value & 0xFF000000) >> 24))
+/// \ingroup VLD
+#define CCSIZE(wp, rp, bufsize) \
+ (((wp) >= (rp)) ? ((wp) - (rp)) : (((bufsize) + (wp)) - (rp)))
+
+/// \ingroup VLD
+#define INVERSE_BIT_ORDER_8(value) \
+ { \
+ UCHAR ucTemp = 0; \
+ INT32 i4_i; \
+ for( i4_i = 0; i4_i<4; i4_i++) \
+ { \
+ ucTemp |= (value & (1 << i4_i)) << ((4-i4_i)*2 - 1); \
+ } \
+ for( i4_i = 4; i4_i<8; i4_i++) \
+ { \
+ ucTemp |= (value & (1 << i4_i)) >> ((i4_i-4)*2 + 1); \
+ } \
+ value = ucTemp; \
+ }
+
+/*! \name MPEG4 Driver API
+* @{
+*/
+/// \ingroup API
+/// This function allocates memory for driver information
+/// - This API can should be called in the begining.
+/// .
+/// \return None.
+extern void vMPEG4InitProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function parse mpeg4 bitstream headers
+/// - This API can should be called before starting to decode.
+/// .
+/// \return parsing result. Please reference to Vdec_errcode.h
+extern INT32 i4MPEG4VParseProc(
+ UCHAR ucEsId, ///< [IN] the ID of the elementary stream
+ UINT32 u4VParseType ///< [IN] the specified pic type or header
+);
+
+/// This function checks the parsing result.
+/// \return VDEC_NONE_ERROR: parse OK. Else: please reference to Vdec_errcode.h
+extern BOOL fgMPEG4VParseChkProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function updates information to Frame Buffer Group
+/// \return VDEC_NONE_ERROR: udate OK. Else: please reference to Vdec_errcode.h
+extern INT32 i4MPEG4UpdInfoToFbg(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function triggers Video decoder hardware
+///\ return None.
+extern void vMPEG4StartToDecProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function is interrrupt service routine
+///\ return None.
+extern void vMPEG4ISR(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+/// This function checks the decoded picture is complete or not
+/// - This API will check decoded picture in MB_X and MB_Y
+/// .
+///\ return TRUE: decode OK, FALSE: decoding failed, drop it
+extern BOOL fgIsMPEG4DecEnd(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function checks the decoded error type and count
+/// - This API will check decoded error type and count
+/// .
+///\ return TRUE: decode error, FALSE: decode correct
+extern BOOL fgIsMPEG4DecErr(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function checks is there any error code happened in HW
+///\ return TRUE: decode OK, FALSE: decoding failed, drop it
+extern BOOL fgMPEG4ResultChk(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function sets up frame buffer index ready for display
+///\ return TRUE: buffer index for display OK, FALSE: cannot get buffer for display
+extern BOOL fgIsMPEG4InsToDispQ(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function gets one decoded frame buffer and send to display
+///\ return TRUE: get frame buffer OK, FALSE: Cannot get buffer for display
+extern BOOL fgIsMPEG4GetFrmToDispQ(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function does ending procedure
+///\ return None.
+extern void vMPEG4EndProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+/// This function flushes all decoded picture in DPB Buffer
+///\ return TRUE: flush OK, FALSE: cannot get buffer for display
+extern BOOL fgMPEG4FlushDPB(
+ UCHAR ucEsId, ///< [IN] the ID of the elementary stream
+ BOOL fgWithOutput ///< [IN] '1' indicates to output decoded frame
+);
+/// This function will release resources accupied by decoder
+///\ return None.
+extern void vMPEG4ReleaseProc(
+ UCHAR ucEsId, ///< [IN] the ID of the elementary stream
+ BOOL fgResetHW
+);
+
+extern void vMPEG4SetMcBufAddr(UCHAR ucFbgId, VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vMPEG4DpbBufCopy(MPEG4_DRV_INFO_T *prMpeg4DrvInfo, UCHAR ucTarDpbBuf, UCHAR ucSrcDpbBuf);
+extern INT32 i4MPEG4OutputProc(UCHAR ucEsId, VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vSetMpeg2Var(MPEG4_DRV_INFO_T *prMpeg4DrvInfo);
+extern void vMPEG4SetColorPrimaries(MPEG4_DRV_INFO_T *prMPEG4DrvDecInfo, UINT32 u4ColorPrimaries);
+extern void vMPEG4SetSampleAsp(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4MPEG4Asp);
+extern void vMPEG4SetFrameTimingInfo(MPEG4_DRV_INFO_T *prMPEG4DrvDecInfo, UINT16 u2FrameRate);
+extern void _MPEG4SetDecPrm(MPEG4_DRV_INFO_T *prMpeg4DrvInfo);
+extern void vMPEG4CalGmcMv(MPEG4_DRV_INFO_T *prMpeg4DrvInfo);
+#ifdef FBM_ALLOC_SUPPORT
+extern void vFreeMpeg4WorkingArea(VDEC_ES_INFO_T *prVDecEsInfo);
+#endif
+extern void vMPEG4SetDownScaleParam(MPEG4_DRV_INFO_T *prMpeg4DrvInfo, BOOL fgEnable);
+
+/// This function will return vdec driver interface pointer
+///\ return VDEC_DRV_IF*
+extern VDEC_DRV_IF *VDec_GetMPEG4If(void);
+/*! @} */
+#if ((CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560) && CONFIG_DRV_FTS_SUPPORT)
+extern void vMPEG4SetLetterBoxParam(MPEG4_DRV_INFO_T *prMpeg4DrvInfo);
+#endif
+
+#ifdef MPV_DUMP_FBUF
+extern void VDec_Dump_Data(UINT32 u4StartAddr, UINT32 u4FileSize, UINT32 u4FileCnt, UCHAR *pucAddStr);
+#endif
+
+#ifdef DRV_VDEC_SUPPORT_FBM_OVERLAY
+extern BOOL fgMPEG4NeedDoDscl(UCHAR ucEsId);
+#endif
+
+#endif
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_rm_info.h b/drivers/misc/mediatek/vdec/include/vdec_drv_rm_info.h
new file mode 100644
index 000000000..c18fba4ed
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_rm_info.h
@@ -0,0 +1,168 @@
+#ifndef _VDEC_DRV_RM_INFO_H_
+#define _VDEC_DRV_RM_INFO_H_
+
+//#include "x_os.h"
+//#include "x_bim.h"
+//#include "x_assert.h"
+//#include "x_timer.h"
+
+#include "drv_common.h"
+
+#include "drv_imgresz.h"
+#include "drv_imgresz_errcode.h"
+
+#include "vdec_common_if.h"
+#include "vdec_usage.h"
+
+#include "vdec_info_rm.h"
+#include "vdec_info_common.h"
+
+/******************************************************************************
+* Local definition
+******************************************************************************/
+#define RM_DPB_NUM 3
+
+typedef enum
+{
+ RM_DPB_STATUS_EMPTY = 0, // Free
+ RM_DPB_STATUS_READY, // After Get
+ RM_DPB_STATUS_DECODING, // After Lock
+ RM_DPB_STATUS_DECODED, // After UnLock
+ RM_DPB_STATUS_OUTPUTTED, // After Output
+ RM_DPB_STATUS_FLD_DECODED, // After 1fld UnLock
+ RM_DPB_STATUS_DEC_REF,
+ RM_DPB_STATUS_OUT_REF,
+} RM_DPB_COND_T;
+
+typedef enum
+{
+ RM_DPB_FBUF_UNKNOWN = VDEC_FB_ID_UNKNOWN,
+ RM_DPB_FREF_FBUF = 0,
+ RM_DPB_BREF_FBUF = 1,
+ RM_DPB_WORKING_FBUF = 2,
+} RM_DPB_IDX_T;
+
+
+typedef struct _RM_DBP_INFO_T
+{
+ BOOL fgVirtualDec;
+ UCHAR ucDpbFbId;
+ RM_DPB_COND_T eDpbStatus;
+ UINT64 u8Pts;
+ UINT64 u8Offset;
+} RM_DBP_INFO_T;
+
+typedef struct _RM_DEC_PRM_T
+{
+ BOOL fgRV40; // Is RV9_RV10 ro RV8
+ BOOL fgGenRPRRefPic;
+
+ UCHAR ucDecFld;
+ UCHAR uc2ndFld;
+
+ UINT32 u4BitCount;
+ INT64 i8BasePTS;
+ INT64 i8LatestRealPTS;
+ INT64 i8DiffCnt;
+ INT64 i8DropIPCnt;
+ INT64 i8DropBCnt;
+ INT64 i8DummyCnt;
+
+ UINT64 u8PreFrmOffset;
+
+ RM_DPB_IDX_T eDpbOutputId;
+ RM_DBP_INFO_T arRMDpbInfo[RM_DPB_NUM]; // 0: FRef, 1: BRef, 2:Working
+
+ VDEC_NORM_INFO_T *prVDecNormInfo;
+ VDEC_PIC_INFO_T *prVDecPicInfo;
+ VDEC_FBM_INFO_T *prVDecFbmInfo;
+ VID_DEC_PB_MODE_T *prVDecPBInfo;
+
+ VDEC_INFO_RM_VFIFO_PRM_T rVDecRMVFifoPrm;
+ VDEC_INFO_RM_WORK_BUF_SA_T rVDecRMWorkBufSa;
+ VDEC_INFO_RM_BS_INIT_PRM_T rVDecRMBsInitPrm[2];
+ VDEC_INFO_RM_ERR_INFO_T rVDecRMErrInfo;
+ VDEC_INFO_RM_PICINFO_T rVDecRMPicInfo;
+ VDEC_INFO_RM_PICINFO_T rVDecRMNextPicInfo;
+ VDEC_INFO_RM_PICINFO_T rVDecRMPrevPicInfo;
+
+ VDEC_INFO_DEC_PRM_T rVDecNormHalPrm;
+
+ IMGRESZ_DRV_TICKET_T rImgReszTicket;
+ IMGRESZ_DRV_SRC_BUF_INFO_T rSrcBufInfo;
+ IMGRESZ_DRV_DST_BUF_INFO_T rDstBufInfo;
+ HANDLE_T hRmScaleEvent;
+} RM_DRV_INFO_T;
+
+/******************************************************************************
+* Function prototype
+******************************************************************************/
+
+extern INT32 vRMParser(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4VParseType, BOOL fgNextAUPic);
+//extern INT32 vRMParser(VDEC_ES_INFO_T* prVDecEsInfo, UINT32 u4VParseType);
+extern void vRMSetMcBufAddr(UCHAR ucFbgId, VDEC_ES_INFO_T *prVDecEsInfo);
+
+
+
+/******************************************************************************
+* Local macro
+******************************************************************************/
+#define INVERSE_ENDIAN(value) \
+ (((value & 0xFF) << 24) + ((value & 0xFF00) << 8) + ((value & 0xFF0000) >> 8) + ((value & 0xFF000000) >> 24))
+
+#define CCSIZE(wp, rp, bufsize) \
+ (((wp) >= (rp)) ? ((wp) - (rp)) : (((bufsize) + (wp)) - (rp)))
+
+
+#define INVERSE_BIT_ORDER_8(value) \
+ { \
+ UCHAR ucTemp = 0; \
+ INT32 i4_i; \
+ for( i4_i = 0; i4_i<4; i4_i++) \
+ { \
+ ucTemp |= (value & (1 << i4_i)) << ((4-i4_i)*2 - 1); \
+ } \
+ for( i4_i = 4; i4_i<8; i4_i++) \
+ { \
+ ucTemp |= (value & (1 << i4_i)) >> ((i4_i-4)*2 + 1); \
+ } \
+ value = ucTemp; \
+ }
+
+
+/******************************************************************************
+* Extern Function
+******************************************************************************/
+extern void vRMDpbBufCopy(RM_DRV_INFO_T *prRMDrvInfo, UCHAR ucTarDpbBuf, UCHAR ucSrcDpbBuf);
+extern INT32 i4RMOutputProc(VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vFreeRMWorkingArea(VDEC_ES_INFO_T *prVDecEsInfo);
+
+#ifdef RM_DRV_IMAGERESIZER_ENABLE
+extern INT32 i4RMRPR_ResourceInit(RM_DRV_INFO_T *prRMDrvInfo);
+extern INT32 i4RMRPR_ResourceFree(RM_DRV_INFO_T *prRMDrvInfo);
+extern INT32 i4RMRPR_WaitFinish(RM_DRV_INFO_T *prRMDrvInfo);
+extern INT32 i4RMRPR_SetTriggerScale(UCHAR ucEsId, RM_DRV_INFO_T *prRMDrvInfo);
+#endif //RM_DRV_IMAGERESIZER_ENABLE
+
+extern void vRMInitProc(UCHAR ucEsId);
+extern INT32 i4RMVParseProc(UCHAR ucEsId, UINT32 u4VParseType);
+extern BOOL fgRMVParseChkProc(UCHAR ucEsId);
+extern INT32 i4RMUpdInfoToFbg(UCHAR ucEsId);
+extern void vRMStartToDecProc(UCHAR ucEsId);
+extern void vRMISR(UCHAR ucEsId);
+extern BOOL fgIsRMDecEnd(UCHAR ucEsId);
+extern BOOL fgIsRMDecErr(UCHAR ucEsId);
+extern BOOL fgRMResultChk(UCHAR ucEsId);
+extern BOOL fgIsRMInsToDispQ(UCHAR ucEsId);
+extern BOOL fgIsRMGetFrmToDispQ(UCHAR ucEsId);
+extern void vRMEndProc(UCHAR ucEsId);
+extern BOOL fgRMFlushDPB(UCHAR ucEsId, BOOL fgWithOutput);
+extern void vRMReleaseProc(UCHAR ucEsId, BOOL fgResetHW);
+
+extern VDEC_DRV_IF *VDec_GetRMIf(void);
+#if ((CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560) && CONFIG_DRV_FTS_SUPPORT)
+extern void vRMSetLetterBoxParam(RM_DRV_INFO_T *prRMDrvInfo);
+#endif
+
+
+#endif // _VDEC_DRV_RM_INFO_H_
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_vp6_info.h b/drivers/misc/mediatek/vdec/include/vdec_drv_vp6_info.h
new file mode 100644
index 000000000..521fab416
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_vp6_info.h
@@ -0,0 +1,214 @@
+#ifndef _VDEC_DRV_VP6_INFO_H_
+#define _VDEC_DRV_VP6_INFO_H_
+
+#include "drv_common.h"
+
+#include "vdec_common_if.h"
+#include "vdec_usage.h"
+
+#include "vdec_info_vp6.h"
+#include "vdec_info_common.h"
+
+
+
+/******************************************************************************
+* Local definition
+******************************************************************************/
+/// VP6 Decoder Picture Buffer Number
+#define VP6_DPB_NUM 3
+
+/*! \name Struct for VP6 Driver Info
+* @{
+*/
+/// Decoded Picture Buffer Status Management
+typedef enum
+{
+ VP6_DPB_STATUS_EMPTY = 0, ///< DPB is Empty and Free
+ VP6_DPB_STATUS_READY, ///< DPB is ready for decoding
+ VP6_DPB_STATUS_DECODING, ///< DPB is used by decoder
+ VP6_DPB_STATUS_DECODED, ///< DPB contains decoded frame
+ VP6_DPB_STATUS_OUTPUTTED, ///< DPB was sent to display queue
+ VP6_DPB_STATUS_FLD_DECODED, ///< 1st field wad decoded
+ VP6_DPB_STATUS_DEC_REF, ///< DBP is used for reference
+ VP6_DPB_STATUS_OUT_REF, ///< DBP was displayed and is used for reference
+} VP6_DPB_COND_T;
+
+/// Decoded Picture Buffer Index
+typedef enum
+{
+ VP6_DPB_FBUF_UNKNOWN = VDEC_FB_ID_UNKNOWN,
+ VP6_DPB_GOLD_FBUF = 0,
+ VP6_DPB_PREV_FBUF = 1,
+ VP6_DPB_WORKING_FBUF = 2,
+} VP6_DPB_IDX_T;
+
+/// Decoded Picture Buffer Information
+typedef struct _VP6_DBP_INFO_T
+{
+ BOOL fgVirtualDec;
+ UCHAR ucDpbFbId;
+ VP6_DPB_COND_T eDpbStatus;
+} VP6_DBP_INFO_T;
+/*! @} */
+
+/*! \name VP6 Driver Information
+* @{
+*/
+/// \ingroup API
+typedef struct _VP6_DEC_PRM_T
+{
+ UINT32 u4BitCount; ///< Consumed bits counter
+ INT64 i8BasePTS;
+ INT64 i8LatestRealPTS;
+ INT64 i8DiffCnt;
+ INT64 i8DropIPCnt;
+ INT64 i8DropBCnt;
+ INT64 i8DummyCnt;
+ VP6_DPB_IDX_T eDpbOutputId; ///< DPB output index: Unknown, FRef, BFre, Working
+ VP6_DBP_INFO_T arVP6DpbInfo[VP6_DPB_NUM]; //Deblocking buffer info
+ VDEC_INFO_VP6_FRM_HDR_T rVDecVP6FrmHdr;
+ VDEC_NORM_INFO_T *prVDecNormInfo; ///< Normal info: CodecType, EsId, VldId, BsId, LastPicTp, etc.
+ VDEC_PIC_INFO_T *prVDecPicInfo; ///< Picture info: PicStruct, PicType, PicW, PicH, FifoStart, etc.
+ VDEC_FBM_INFO_T *prVDecFbmInfo;
+ // VID_DEC_SEQUENCE_INFO_T rPrevSeqInfo; ///< Visual object Sequence Header
+ VDEC_INFO_VP6_VFIFO_PRM_T rVDecVP6VFifoPrm; ///< FifoSa, FifoEa
+ VDEC_INFO_VP6_BS_INIT_PRM_T rVDecVP6BsInitPrm[2]; ///< Barrel Shifter: Rd pointer, Wr pointer, FifoSa, FifoEa
+ VDEC_INFO_VP6_ERR_INFO_T rVDecVP6ErrInfo; ///< Erro Info
+ VDEC_INFO_DEC_PRM_T rVDecNormHalPrm; ///< HAL parameter: picstruct, pictype, picW, picH
+ UCHAR ucLastOutFbId;
+#ifdef VDEC_SUPPORT_HIGH_FRAME_RATE
+ BOOL fgSeqUnknownFrameRate;
+ BOOL fgUseHighFrameRate;
+ UINT32 u4RealFrameDuration;
+#endif
+} VP6_DRV_INFO_T;
+/*! @} */
+
+/******************************************************************************
+* Function prototype
+******************************************************************************/
+/// \ingroup Header
+//extern INT32 vVp6Parser(VDEC_ES_INFO_T* prVDecEsInfo, UINT32 u4VParseType);
+//extern void vSetVp6InitValue(VDEC_ES_INFO_T* prVDecEsInfo);
+
+
+/*! \name VP6 Driver API
+* @{
+*/
+/// \ingroup API
+/// This function allocates memory for driver information
+/// - This API can should be called in the begining.
+/// .
+/// \return None.
+extern void vVP6InitProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function parse vp6 bitstream headers
+/// - This API can should be called before starting to decode.
+/// .
+/// \return parsing result. Please reference to Vdec_errcode.h
+extern INT32 i4VP6VParseProc(
+ UCHAR ucEsId, ///< [IN] the ID of the elementary stream
+ UINT32 u4VParseType ///< [IN] the specified pic type or header
+);
+
+/// This function checks the parsing result.
+/// \return VDEC_NONE_ERROR: parse OK. Else: please reference to Vdec_errcode.h
+extern BOOL fgVP6VParseChkProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function updates information to Frame Buffer Group
+/// \return VDEC_NONE_ERROR: udate OK. Else: please reference to Vdec_errcode.h
+extern INT32 i4VP6UpdInfoToFbg(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function triggers Video decoder hardware
+///\ return None.
+extern void vVP6StartToDecProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function is interrrupt service routine
+///\ return None.
+extern void vVP6ISR(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+/// This function checks the decoded picture is complete or not
+/// - This API will check decoded picture in MB_X and MB_Y
+/// .
+///\ return TRUE: decode OK, FALSE: decoding failed, drop it
+extern BOOL fgIsVP6DecEnd(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function checks the decoded error type and count
+/// - This API will check decoded error type and count
+/// .
+///\ return TRUE: decode error, FALSE: decode correct
+extern BOOL fgIsVP6DecErr(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function checks is there any error code happened in HW
+///\ return TRUE: decode OK, FALSE: decoding failed, drop it
+extern BOOL fgVP6ResultChk(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function sets up frame buffer index ready for display
+///\ return TRUE: buffer index for display OK, FALSE: cannot get buffer for display
+extern BOOL fgIsVP6InsToDispQ(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function gets one decoded frame buffer and send to display
+///\ return TRUE: get frame buffer OK, FALSE: Cannot get buffer for display
+extern BOOL fgIsVP6GetFrmToDispQ(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function does ending procedure
+///\ return None.
+extern void vVP6EndProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+/// This function flushes all decoded picture in DPB Buffer
+///\ return TRUE: flush OK, FALSE: cannot get buffer for display
+extern BOOL fgVP6FlushDPB(
+ UCHAR ucEsId, ///< [IN] the ID of the elementary stream
+ BOOL fgWithOutput ///< [IN] '1' indicates to output decoded frame
+);
+/// This function will release resources accupied by decoder
+///\ return None.
+extern void vVP6ReleaseProc(
+ UCHAR ucEsId, ///< [IN] the ID of the elementary stream
+ BOOL fgResetHW
+);
+
+extern INT32 vVP6Parser(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4VParseType);
+extern void vVP6SetMcBufAddr(UCHAR ucFbgId, VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vVP6DpbBufCopy(VP6_DRV_INFO_T *prVp6DrvInfo, UCHAR ucTarDpbBuf, UCHAR ucSrcDpbBuf);
+extern INT32 i4VP6OutputProc(UCHAR ucEsId, VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vVP6SetColorPrimaries(VP6_DRV_INFO_T *prVP6DrvDecInfo, UINT32 u4ColorPrimaries);
+extern void vVP6SetSampleAsp(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4VP6Asp);
+extern void vVP6SetFrameTimingInfo(VP6_DRV_INFO_T *prVP6DrvDecInfo, UINT16 u2FrameRate);
+extern void _VP6SetDecPrm(VP6_DRV_INFO_T *prVp6DrvInfo);
+extern void vVP6CalGmcMv(VP6_DRV_INFO_T *prVp6DrvInfo);
+#ifdef FBM_ALLOC_SUPPORT
+extern void vFreeVp6WorkingArea(VDEC_ES_INFO_T *prVDecEsInfo);
+#endif
+extern void vVP6SetDownScaleParam(VP6_DRV_INFO_T *prVp6DrvInfo, BOOL fgEnable);
+
+#ifdef DRV_VDEC_SUPPORT_FBM_OVERLAY
+extern BOOL fgVP6NeedDoDscl(UCHAR ucEsId);
+#endif
+
+/// This function will return vdec driver interface pointer
+///\ return VDEC_DRV_IF*
+extern VDEC_DRV_IF *VDec_GetVP6If(void);
+/*! @} */
+
+#endif
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_vp8_info.h b/drivers/misc/mediatek/vdec/include/vdec_drv_vp8_info.h
new file mode 100644
index 000000000..d0299e1d8
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_vp8_info.h
@@ -0,0 +1,219 @@
+#ifndef _VDEC_DRV_VP8_INFO_H_
+#define _VDEC_DRV_VP8_INFO_H_
+
+#include "drv_common.h"
+
+#include "vdec_common_if.h"
+#include "vdec_usage.h"
+
+#include "vdec_info_vp8.h"
+#include "vdec_info_common.h"
+
+
+
+/******************************************************************************
+* Local definition
+******************************************************************************/
+/// VP8 Decoder Picture Buffer Number
+#define VP8_DPB_NUM 4
+
+/*! \name Struct for VP8 Driver Info
+* @{
+*/
+/// Decoded Picture Buffer Status Management
+typedef enum
+{
+ VP8_DPB_STATUS_EMPTY = 0, ///< DPB is Empty and Free
+ VP8_DPB_STATUS_READY, ///< DPB is ready for decoding
+ VP8_DPB_STATUS_DECODING, ///< DPB is used by decoder
+ VP8_DPB_STATUS_DECODED, ///< DPB contains decoded frame
+ VP8_DPB_STATUS_OUTPUTTED, ///< DPB was sent to display queue
+ VP8_DPB_STATUS_FLD_DECODED, ///< 1st field wad decoded
+ VP8_DPB_STATUS_DEC_REF, ///< DBP is used for reference
+ VP8_DPB_STATUS_OUT_REF, ///< DBP was displayed and is used for reference
+} VP8_DPB_COND_T;
+
+/// Decoded Picture Buffer Index
+typedef enum
+{
+ VP8_DPB_FBUF_UNKNOWN = VDEC_FB_ID_UNKNOWN,
+ VP8_DPB_GOLD_FBUF = 0,
+ VP8_DPB_LAST_FBUF = 1,
+ VP8_DPB_ALT_FBUF = 2,
+ VP8_DPB_WORKING_FBUF = 3,
+} VP8_DPB_IDX_T;
+
+/// Decoded Picture Buffer Information
+typedef struct _VP8_DBP_INFO_T
+{
+ BOOL fgVirtualDec;
+ UCHAR ucDpbFbId;
+ VP8_DPB_COND_T eDpbStatus;
+} VP8_DBP_INFO_T;
+/*! @} */
+
+/*! \name VP8 Driver Information
+* @{
+*/
+/// \ingroup API
+typedef struct _VP8_DRV_INFO_T
+{
+ UINT32 u4BitCount; ///< Consumed bits counter
+ INT64 i8BasePTS;
+ INT64 i8LatestRealPTS;
+ INT64 i8DiffCnt;
+ INT64 i8DropIPCnt;
+ INT64 i8DropBCnt;
+ INT64 i8DummyCnt;
+ VP8_DPB_IDX_T eDpbOutputId; ///< DPB output index: Unknown, FRef, BFre, Working
+ VP8_DBP_INFO_T arVP8DpbInfo[VP8_DPB_NUM]; //Deblocking buffer info
+ VDEC_INFO_VP8_FRM_HDR_T rVDecVP8FrmHdr;
+ VDEC_NORM_INFO_T *prVDecNormInfo; ///< Normal info: CodecType, EsId, VldId, BsId, LastPicTp, etc.
+ VDEC_PIC_INFO_T *prVDecPicInfo; ///< Picture info: PicStruct, PicType, PicW, PicH, FifoStart, etc.
+ VDEC_FBM_INFO_T *prVDecFbmInfo;
+ // VID_DEC_SEQUENCE_INFO_T rPrevSeqInfo; ///< Visual object Sequence Header
+ VDEC_INFO_VP8_VFIFO_PRM_T rVDecVP8VFifoPrm; ///< FifoSa, FifoEa
+ VDEC_INFO_VP8_ERR_INFO_T rVDecVP8ErrInfo; ///< Erro Info
+ VDEC_INFO_DEC_PRM_T rVDecNormHalPrm; ///< HAL parameter: picstruct, pictype, picW, picH
+ VDEC_VP8_UPDST_T rVDecStatusUpdate;
+ UCHAR ucLastOutFbId;
+#ifdef VDEC_SUPPORT_HIGH_FRAME_RATE
+ BOOL fgSeqUnknownFrameRate;
+ BOOL fgUseHighFrameRate;
+ UINT32 u4RealFrameDuration;
+#endif
+} VP8_DRV_INFO_T;
+/*! @} */
+
+/******************************************************************************
+* Function prototype
+******************************************************************************/
+/// \ingroup Header
+extern INT32 vVP8Parser(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4VParseType);
+//extern void vSetVP8InitValue(VDEC_ES_INFO_T* prVDecEsInfo);
+
+
+/*! \name VP8 Driver API
+* @{
+*/
+/// \ingroup API
+/// This function allocates memory for driver information
+/// - This API can should be called in the begining.
+/// .
+/// \return None.
+extern void vVP8InitProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function parse VP8 bitstream headers
+/// - This API can should be called before starting to decode.
+/// .
+/// \return parsing result. Please reference to Vdec_errcode.h
+extern INT32 i4VP8VParseProc(
+ UCHAR ucEsId, ///< [IN] the ID of the elementary stream
+ UINT32 u4VParseType ///< [IN] the specified pic type or header
+);
+
+/// This function checks the parsing result.
+/// \return VDEC_NONE_ERROR: parse OK. Else: please reference to Vdec_errcode.h
+extern BOOL fgVP8VParseChkProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function updates information to Frame Buffer Group
+/// \return VDEC_NONE_ERROR: udate OK. Else: please reference to Vdec_errcode.h
+extern INT32 i4VP8UpdInfoToFbg(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function triggers Video decoder hardware
+///\ return None.
+extern void vVP8StartToDecProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function is interrrupt service routine
+///\ return None.
+extern void vVP8ISR(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+/// This function checks the decoded picture is complete or not
+/// - This API will check decoded picture in MB_X and MB_Y
+/// .
+///\ return TRUE: decode OK, FALSE: decoding failed, drop it
+extern BOOL fgIsVP8DecEnd(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function checks the decoded error type and count
+/// - This API will check decoded error type and count
+/// .
+///\ return TRUE: decode error, FALSE: decode correct
+extern BOOL fgIsVP8DecErr(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function checks is there any error code happened in HW
+///\ return TRUE: decode OK, FALSE: decoding failed, drop it
+extern BOOL fgVP8ResultChk(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function sets up frame buffer index ready for display
+///\ return TRUE: buffer index for display OK, FALSE: cannot get buffer for display
+extern BOOL fgIsVP8InsToDispQ(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function gets one decoded frame buffer and send to display
+///\ return TRUE: get frame buffer OK, FALSE: Cannot get buffer for display
+extern BOOL fgIsVP8GetFrmToDispQ(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+
+/// This function does ending procedure
+///\ return None.
+extern void vVP8EndProc(
+ UCHAR ucEsId ///< [IN] the ID of the elementary stream
+);
+/// This function flushes all decoded picture in DPB Buffer
+///\ return TRUE: flush OK, FALSE: cannot get buffer for display
+extern BOOL fgVP8FlushDPB(
+ UCHAR ucEsId, ///< [IN] the ID of the elementary stream
+ BOOL fgWithOutput ///< [IN] '1' indicates to output decoded frame
+);
+/// This function will release resources accupied by decoder
+///\ return None.
+extern void vVP8ReleaseProc(
+ UCHAR ucEsId, ///< [IN] the ID of the elementary stream
+ BOOL fgResetHW
+);
+
+extern UINT32 u4Vp8DecInit(VDEC_INFO_VP8_FRM_HDR_T *pVp8DecInfo);
+extern void vVP8SetMcBufAddr(UCHAR ucFbgId, VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vVP8UpdateBufInfo(VDEC_ES_INFO_T *prVDecEsInfo);
+extern VOID vVp8DecFinish(VDEC_INFO_VP8_FRM_HDR_T *pVp8DecInfo);
+extern void vVP8DpbBufCopy(VP8_DRV_INFO_T *prVP8DrvInfo, UCHAR ucTarDpbBuf, UCHAR ucSrcDpbBuf);
+extern INT32 i4VP8OutputProc(UCHAR ucEsId, VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vVP8SetColorPrimaries(VP8_DRV_INFO_T *prVP8DrvDecInfo, UINT32 u4ColorPrimaries);
+extern void vVP8SetSampleAsp(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4VP8Asp);
+extern void vVP8SetFrameTimingInfo(VP8_DRV_INFO_T *prVP8DrvDecInfo, UINT16 u2FrameRate);
+extern void _VP8SetDecPrm(VP8_DRV_INFO_T *prVP8DrvInfo);
+extern void vVP8CalGmcMv(VP8_DRV_INFO_T *prVP8DrvInfo);
+#ifdef FBM_ALLOC_SUPPORT
+extern void vFreeVP8WorkingArea(VDEC_ES_INFO_T *prVDecEsInfo);
+#endif
+
+extern void vVP8SetDownScaleParam(VP8_DRV_INFO_T *prVP8DrvInfo, BOOL fgEnable);
+#ifdef DRV_VDEC_SUPPORT_FBM_OVERLAY
+extern BOOL fgVP8NeedDoDscl(UCHAR ucEsId);
+#endif
+
+/// This function will return vdec driver interface pointer
+///\ return VDEC_DRV_IF*
+#ifdef VDEC_VP8_SUPPORT
+extern VDEC_DRV_IF *VDec_GetVP8If(void);
+#endif
+/*! @} */
+
+#endif
diff --git a/drivers/misc/mediatek/vdec/include/vdec_drv_wmv_info.h b/drivers/misc/mediatek/vdec/include/vdec_drv_wmv_info.h
new file mode 100644
index 000000000..5cadacc98
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_drv_wmv_info.h
@@ -0,0 +1,261 @@
+#ifndef _VDEC_DRV_WMV_INFO_H_
+#define _VDEC_DRV_WMV_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_wmv.h"
+#include "vdec_info_common.h"
+
+#if CONFIG_DRV_VERIFY_SUPPORT
+#include "../verify/vdec_verify_general.h"
+#endif
+
+/******************************************************************************
+* Local definition
+******************************************************************************/
+// WMV start code(s)
+#define WMV_SC_PREFIX 0x000001
+#define WMV_SC_ENDOFSEQ 0x10A
+#define WMV_SC_SLICE 0x10B
+#define WMV_SC_FIELD 0x10C
+#define WMV_SC_FRAME 0x10D
+#define WMV_SC_ENTRY 0x10E
+#define WMV_SC_SEQ 0x10F
+#define WMV_SC_SLICE_DATA 0x11B
+#define WMV_SC_FIELD_DATA 0x11C
+#define WMV_SC_FRAME_DATA 0x11D
+#define WMV_SC_ENTRY_DATA 0x11E
+#define WMV_SC_SEQ_DATA 0x11F
+
+// extension start code IDs
+
+
+// Working Buffer Define
+#if (!CONFIG_DRV_VERIFY_SUPPORT)
+#if 1
+#define Mv_1_SZ ((1920/16)*(1088/16)*4*4)
+#define Mv_2_SZ ((1920/16)*4*4)
+#define Bp_1_SZ (16*(1088/16))
+#define Bp_2_SZ (16*(1088/16))
+#define Bp_3_SZ (16*(1088/16))
+#define Bp_4_SZ (16*(1088/16))
+#define Mv_3_SZ ((1920/16)*4*4)
+#define Mv_1_2_SZ ((1920/16)*(1088/16)*4*4)
+#define DCAC_SZ ((((1920 / 16) * 4) * (4)) * 4) // (MBx * 4) * (4) = 7680
+#define DCAC_2_SZ ((((1920 / 16) * 4) * (4)) * 4)
+#define DEC_PP_SZ ((1920/16)*3*16)
+#else
+#define Mv_1_SZ 0x3fc00
+#define Mv_2_SZ 0x3fc00
+#define Bp_1_SZ 0x10000
+#define Bp_2_SZ 0x10000
+#define Bp_3_SZ 0x10000
+#define Bp_4_SZ 0x10000
+#define Mv_3_SZ 0x10000
+#define Mv_1_2_SZ 0x10000
+#define DCAC_SZ ((((2048 / 16) * 4) * (4)) * 4) // (MBx * 4) * (4) = 7680
+#define DCAC_2_SZ 0x100000
+#define DEC_PP_SZ ((2048/16)*9*8)*2
+#endif
+#endif
+
+#define INVALID_32 0xffffffff
+#define NO_USE 0xffffffff
+#define MAX_RETRY_COUNT1 200*1024
+#define WMV_DPB_NUM 3
+#define WMV_MAX_EDPB_NUM 30
+#define WMV_DFB_NUM 256
+#define WMV_MAX_SPS_NUM 30
+#define WMV_MAX_EPS_NUM 30
+#define WMV_MAX_ICOMPS_NUM 255
+
+#define fgIsWMVSeqHdr(arg) (arg & SEQ_HDR)
+#define fgIsWMVEntryPTR(arg) (arg & ENTRY_PTR)
+#define fgIsWMVSeqEnd(arg) (arg & SEQ_END)
+
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8550)
+#define WMV_NEW_HW_MODE //the new HW work mode only supportted by MT8550^
+#endif
+
+typedef enum // bit plane coding mode
+{
+ NORM2 = 0,
+ NORM6,
+ ROWSKIP,
+ COLSKIP,
+ DIFF2,
+ DIFF6,
+ RAW,
+} WMV_BP_MODE;
+
+typedef enum
+{
+ WMV_DPB_STATUS_EMPTY = 0, // Free
+ WMV_DPB_STATUS_READY, // After Get
+ WMV_DPB_STATUS_DECODING, // After Lock
+ WMV_DPB_STATUS_DECODED, // After UnLock
+ WMV_DPB_STATUS_OUTPUTTED, // After Output
+ WMV_DPB_STATUS_FLD_DECODED, // After 1fld UnLock
+ WMV_DPB_STATUS_DEC_REF,
+ WMV_DPB_STATUS_OUT_REF,
+} WMV_DPB_COND_T;
+
+typedef enum
+{
+ WMV_DPB_FBUF_UNKNOWN = VDEC_FB_ID_UNKNOWN,
+ WMV_DPB_FREF_FBUF = 0,
+ WMV_DPB_BREF_FBUF = 1,
+ WMV_DPB_WORKING_FBUF = 2,
+} WMV_DPB_IDX_T;
+
+
+typedef struct _WMV_DBP_INFO_T
+{
+ BOOL fgVirtualDec;
+ UCHAR ucDpbFbId;
+ WMV_DPB_COND_T eDpbStatus;
+ UINT64 u8Pts;
+ UINT64 u8Offset;
+} WMV_DBP_INFO_T;
+
+typedef struct _WMV_DEC_PRM_T
+{
+ UCHAR ucDecFld;
+ UCHAR uc2ndFld;
+ UCHAR ucPicStruct;
+ UINT32 u4BitCount;
+ BOOL fgCounting;
+ UINT32 u4PicHdrBits;
+ INT32 i4CodecVersion;
+ INT64 i8BasePTS;
+ INT64 i8DiffCnt;
+ INT64 i8DropIPCnt;
+ INT64 i8DropBCnt;
+ WMV_DPB_IDX_T eDpbOutputId;
+ WMV_DBP_INFO_T arWMVDpbInfo[WMV_DPB_NUM]; // 0: FRef, 1: BRef, 2:Working
+ VDEC_NORM_INFO_T *prVDecNormInfo;
+ VDEC_PIC_INFO_T *prVDecPicInfo;
+ VDEC_PIC_INFO_T *prVPrevPicInfo;
+ VDEC_FBM_INFO_T *prVDecFbmInfo;
+ // VID_DEC_PB_MODE_T *prVDecPBInfo;
+ // VID_DEC_SEQUENCE_INFO_T rCurrSeqInfo;
+
+ VDEC_INFO_WMV_SEQ_PRM_T rSPS;
+ VDEC_INFO_WMV_ETRY_PRM_T rEPS;
+ VDEC_INFO_WMV_PIC_PRM_T rPPS;
+ VDEC_INFO_WMV_ICOMP_PRM_T rICOMPS;
+
+ VDEC_INFO_WMV_VFIFO_PRM_T rVDecWmvVFifoPrm;
+ VDEC_INFO_WMV_BS_INIT_PRM_T rVDecWmvBsInitPrm[2];
+ VDEC_INFO_WMV_WORK_BUF_SA_T rVDecWmvWorkBufSa;
+ VDEC_INFO_WMV_ERR_INFO_T rVDecWmvErrInfo;
+ VDEC_INFO_DEC_PRM_T rVDecNormHalPrm;
+
+#ifdef VDEC_SR_SUPPORT
+ VDEC_INFO_WMV_WORK_BUF_SA_T rVDecWmvWorkBufSa2;
+ UCHAR ucEpsRefCnt;
+ UCHAR ucWMVCurrSeqId;
+ UCHAR ucWMVCurrEpsId;
+ UCHAR ucWMVSeqHdrCnt;
+ UCHAR ucWMVEpsHdrCnt;
+ UCHAR ucWMVEpsCntOfSps;
+ VDEC_INFO_WMV_SEQ_PRM_T rStoreSPS[WMV_MAX_SPS_NUM];
+ VDEC_INFO_WMV_ETRY_PRM_T rStoreEPS[WMV_MAX_EPS_NUM];
+
+ WMV_DBP_INFO_T arWMVEDpbInfo[WMV_MAX_EDPB_NUM]; // 0: FRef, 1: BRef, 2:Working
+ MPEG_DFB_INFO_T arWMVDFBInfo[WMV_DFB_NUM];
+ UCHAR ucWMVCurrICOMPSId;
+ VDEC_INFO_WMV_ICOMP_PRM_T rStoreICOMPS[WMV_MAX_ICOMPS_NUM];
+ UCHAR arICOMPSIdxTable[WMV_DFB_NUM][3];
+ VDEC_INFO_WMV_MV_BUF_SA_T rStoreMv[WMV_MAX_EDPB_NUM];
+ VDEC_INFO_WMV_SR_STORE_PRM_T rStoreParam[WMV_DFB_NUM];
+#endif
+
+ BOOL fgNoDecodeSpecial;
+} WMV_DRV_INFO_T;
+
+/******************************************************************************
+* Proc Function prototype
+******************************************************************************/
+
+extern BOOL fgWMVChkRealEnd(WMV_DRV_INFO_T *prWmvDrvInfo);;
+
+extern INT32 i4WMVParser(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4VParseType, UCHAR ucEsId);
+
+/******************************************************************************
+* Local macro
+******************************************************************************/
+
+/******************************************************************************
+* IF Function prototype
+******************************************************************************/
+extern void vWMVInitProc(UCHAR ucEsId);
+extern INT32 i4WMVVParseProc(UCHAR ucEsId, UINT32 u4VParseType);
+extern BOOL fgWMVVParseChkProc(UCHAR ucEsId);
+extern INT32 i4WMVUpdInfoToFbg(UCHAR ucEsId);
+extern void vWMVStartToDecProc(UCHAR ucEsId);
+extern void vWMVISR(UCHAR ucEsId);
+extern BOOL fgIsWMVDecEnd(UCHAR ucEsId);
+extern BOOL fgWMVResultChk(UCHAR ucEsId);
+extern BOOL fgIsWMVInsToDispQ(UCHAR ucEsId);
+extern BOOL fgIsWMVGetFrmToDispQ(UCHAR ucEsId);
+extern void vWMVEndProc(UCHAR ucEsId);
+extern BOOL fgWMVFlushDPB(UCHAR ucEsId, BOOL fgWithOutput);
+extern void vWMVReleaseProc(UCHAR ucEsId, BOOL fgResetHW);
+extern INT32 i4WMVOutputProc(VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vWMVSetDownScaleParam(WMV_DRV_INFO_T *prWmvDrvInfo, BOOL fgEnable);
+extern void vWMVDpbBufCopy(WMV_DRV_INFO_T *prWmvDrvInfo, UCHAR ucTarDpbBuf, UCHAR ucSrcDpbBuf);
+extern void vWMVSetMcBufAddr(UCHAR ucFbgId, VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vAllocWMVWorkingArea(/*VDEC_ES_INFO_T *prVDecEsInfo,*/ UCHAR ucEsId);
+extern void vFreeWMVWorkingArea(VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vInitVParserWMV(WMV_DRV_INFO_T *prWmvDrvInfo);
+extern VDEC_DRV_IF *VDec_GetWMVIf(void);
+#if ((CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560) && CONFIG_DRV_FTS_SUPPORT)
+extern void vWMVSetLetterBoxParam(WMV_DRV_INFO_T *prWmvDrvInfo);
+#endif
+
+#ifdef MPV_DUMP_FBUF
+extern void VDec_Dump_Data(UINT32 u4StartAddr, UINT32 u4FileSize, UINT32 u4FileCnt, UCHAR *pucAddStr);
+#endif
+
+#ifdef VDEC_SR_SUPPORT
+
+//vdec_drv_wmv_if.c interface
+extern BOOL fgWMVGenEDPB(UCHAR ucEsId);
+extern BOOL fgWMVRestoreEDPB(UCHAR ucEsId, BOOL fgRestore);
+extern BOOL fgIsWMVGetSRFrmToDispQ(UCHAR ucEsId, BOOL fgSeqEnd, BOOL fgRefPic);
+extern void vWMVGetSeqFirstTarget(UCHAR ucEsId);
+extern void vWMVReleaseSRDrvInfo(UCHAR ucEsId);
+extern BOOL fgWMVGetDFBInfo(UCHAR ucEsId, void **prDFBInfo);
+extern void vWMVRestoreSeqInfo(UCHAR ucEsId);
+extern BOOL fgWMVRvsDone(UCHAR ucEsId);
+extern void vWMVReleaseEDPB(UCHAR ucEsId);
+
+//vdec_drv_wmv_proc.c interface
+
+
+extern void vWMVEDpbPutBuf(VDEC_ES_INFO_T *prVDecEsInfo, WMV_DRV_INFO_T *prWMVDrvInfo, UCHAR ucSrcDpbBuf);
+extern void vWMVEDpbGetBuf(VDEC_ES_INFO_T *prVDecEsInfo, WMV_DRV_INFO_T *prWMVDrvInfo, UCHAR ucTarDpbBuf);
+extern INT32 i4WMVOutputProcSR(VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vWMVSetDFBInfo(VDEC_ES_INFO_T *prVDecEsInfo, BOOL fgIsRef);
+extern void vWMVUpdPts(VDEC_ES_INFO_T *prVDecEsInfo, WMV_DRV_INFO_T *prWMVDrvInfo, BOOL fgRealOutput);
+extern void vWMVUpdPtsSR(VDEC_ES_INFO_T *prVDecEsInfo, WMV_DRV_INFO_T *prWMVDrvInfo, BOOL fgRealOutput);
+
+extern INT32 i4WMVOutputProcSR(VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vWMVSetDFBInfo(VDEC_ES_INFO_T *prVDecEsInfo, BOOL fgIsRef);
+#endif
+
+#ifdef DRV_VDEC_SUPPORT_FBM_OVERLAY
+extern BOOL fgWMVNeedDoDscl(UCHAR ucEsId);
+#endif
+
+
+#endif
diff --git a/drivers/misc/mediatek/vdec/include/vdec_errcode.h b/drivers/misc/mediatek/vdec/include/vdec_errcode.h
new file mode 100644
index 000000000..77b22bc17
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_errcode.h
@@ -0,0 +1,178 @@
+#ifndef _VDEC_ERROR_CODE_H
+#define _VDEC_ERROR_CODE_H
+//#include "drv_config.h"
+
+#define VDEC_NONE_ERROR 0x00000000
+#define SEQH_LOC_ERR 0x00000001
+#define GOPH_LOC_ERR 0x00000002
+#define PICH_LOC_ERR 0x00000003
+#define SEQ_ERR_CODE 0x00000004
+#define HORI_SIZE_ERR 0x00000005
+#define VERT_SIZE_ERR 0x00000006
+#define MPEG_VER_ERR 0x00000007
+
+#define ASP_RAT_RES 0x00000000
+
+#define FRAME_RATE_ERR 0x00000008
+#define BIT_RATE_RES 0x00000009
+#define I_Q_MAT_ERR 0x0000000b
+#define NI_Q_MAT_ERR 0x0000000c
+
+#define SEQE_LOC_ERR 0x0000000d
+#define PROF_ID_RES 0x0000000e
+#define LEV_ID_RES 0x0000000f
+#define CH_FORMAT_RES 0x00000010
+
+
+#define SEQH_MKB_ERR 0x0
+#define SEQE_MKB_ERR 0x0
+#define COLOR_PRI_ERR 0x0
+#define TRA_CHA_ERR 0x0
+#define MAT_COE_ERR 0x0
+#define SEQDE_MKB_ERR 0x0
+#define GOP_MKB_ERR 0x0
+#define PICDE_MKB1_ERR 0x0
+#define PICDE_MKB2_ERR 0x0
+#define PICCE_MKB1_ERR 0x0
+#define PICCE_MKB2_ERR 0x0
+#define PICCE_MKB3_ERR 0x0
+
+
+#define PIC_COD_TYP_ERR 0x00000017
+#define F_CODE_00_ERR 0x00000018
+#define F_CODE_01_ERR 0x00000019
+#define F_CODE_10_ERR 0x0000001a
+#define F_CODE_11_ERR 0x0000001b
+#define PIC_STR_ERR 0x0000001c
+
+#define PICCE_RES_ERR 0x0000001f
+
+#define EXT_ST_COD_ERR 0x00000023
+#define USR_DAT_BG_ERR 0x00000024
+//#define CC_DAT_MKB_ERR 0x00000025
+
+#define PIC_DIM_ERR 0x00000030
+#define END_OF_FILE 0x00000031
+
+#define VDEC_PRS_INQ_COMPLETE 0x00000040
+#define VDEC_DRIP_FRM_PRS_COMPLETE 0x00000041
+
+#define NO_START_C_ERR1 0x00000251
+#define NO_START_C_ERR2 0x00000252
+#define NO_START_C_ERR3 0x00000253
+#define NO_START_C_ERR4 0x00000254
+#define NO_START_C_ERR5 0x00000255
+#define NO_START_C_ERR6 0x00000256
+#define NO_START_C_ERR7 0x00000257
+#define NO_START_C_ERR8 0x00000258
+#define NO_START_C_ERR9 0x00000259
+#define NO_START_C_ERR10 0x0000025A
+#define NO_START_C_ERR11 0x0000025B
+#define NO_START_C_ERR12 0x0000025C
+#define NO_START_C_ERR13 0x0000025D
+#define NO_START_C_ERR14 0x0000025E
+#define NO_START_C_ERR15 0x0000025F
+#define NO_START_C_ERR16 0x00000260
+#define NO_EXT_START_CODE 0x00000261
+
+#define EXT_DATA_IDX_ERR 0x00000026
+#define BAR_SHIFTER_ERR 0x00000029
+#define VLD_RDPTR_ERR 0x00000030
+#define FB_ID_UNKNOWN 0x00000031
+#define NO_DECODE 0x00000032
+#define DECODE_PREVIOUS_I 0x00000033
+#define FORBIDEN_ERR 0x00000034
+#define NO_PIC_SIZE_INFO 0x00000035
+#define BROKEN_LINK_B_SKIP 0x00000036
+#define JUMPMODE_NO_DECODE 0x00000037
+#define NO_ENOUGH_FBUF 0x00000038
+
+#define P_REFERNCE_INVALID 0x00009001
+#define B_REFERNCE_INVALID 0x00009002
+#define FIELD_ERR 0x00009004
+#define REFERNCE_MISSING 0x00009005
+#define FBG_ID_UNKNOWN 0x00009006
+#define B_WAIT_INTRA_PIC 0x00009007
+#define NEED_EXTRACT_CC 0x00009000
+
+#define H264_SET_INVALID 0x02640001
+
+#define VDEC_INV_CONN_INFO ((INT32) -256)
+
+// *********************************************************************
+// return value defined for MPEG4
+// *********************************************************************
+#define VOP_CODED_0 0x00000403
+#define VOP_DUMMY_CODED 0x00000404
+/* Short Header */
+#define SRC_FMT_ERR 0x00000201
+
+// *********************************************************************
+// return value defined for WMV
+// *********************************************************************
+#define WMV_XINTRA8_ERR 0x00000405
+
+// *********************************************************************
+// return value defined for over hardware spec
+// *********************************************************************
+#define VDEC_OVER_HW_SPEC_ERR 0x00000501
+#define VDEC_CHIP_BOUNDING_NOT_SUPPORT 0x00000502
+
+
+// *********************************************************************
+// return value define of vdec relate function
+// *********************************************************************
+#define VDEC_ERR 0
+#define VDEC_SUCCESS 1
+// no picture index to parse
+#define VDEC_NO_PIC 0x10
+// no free frame buffer to decode
+#define VDEC_NO_FBUF 0x11
+// wait until correct PTS to decode
+#define VDEC_WAIT_AVSYNC 0x12
+#define VDEC_SKIP_PIC 0x13
+#define VDEC_REPARSE 0x14
+// stream syntext error in seq/gop/picture layer
+#define VDEC_HDR_ERR 0xE0
+// DTS Time out
+#define VDEC_DTS_TIMEOUT 0xE1
+// decode Time out, video decoder fail to send decode end interrupt
+#define VDEC_DEC_TIMEOUT 0xE2
+// decode picture error, video decoder return Error Code
+#define VDEC_DEC_ERR 0xE3
+
+#define VDEC_HDR_SUCCESS 0x0
+
+//#if(CONFIG_DRV_VERIFY_SUPPORT )
+/* Visual Object layer */
+#define VIS_OBJ_TYPE_ERR 0x00000001
+#define M4V_NO_START_C_ERR1 0x00000002
+
+/* VOL layer */
+#define VOL_TOP_ERR 0x00000101
+#define UNKNOWN_SHAPE_ERR 0x00000102
+#define UNKNOWN_SPRITE_ERR 0x00000103
+#define GMC_BR_CHG_ERR 0x00000104
+#define NOT_8_BIT_ERR 0x00000105
+#define COMP_EST_ERR 0x00000106
+#define NEWPRED_ERR 0x00000107
+#define SCALABILITY_ERR 0x00000108
+#define INTRA_Q_BARSH_ERR 0x00000109
+#define NINTRA_Q_BARSH_ERR 0x0000010a
+#define DATA_PARTITION_ERR 0x0000010b
+
+/* Short Header */
+#define SRC_FMT_ERR 0x00000201
+
+/* GOV layer */
+#define GOV_MKB_ERR 0x00000301
+
+/* VOP layer */
+#define VOP_SC_ERR 0x00000401
+#define WARPING_PT_ERR 0x00000402
+#define VOP_CODED_0 0x00000403
+//#endif
+
+#endif
+
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_info_avs.h b/drivers/misc/mediatek/vdec/include/vdec_info_avs.h
new file mode 100644
index 000000000..f5c289cd0
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_info_avs.h
@@ -0,0 +1,215 @@
+#ifndef _VDEC_INFO_AVS_H_
+#define _VDEC_INFO_AVS_H_
+
+//#include "drv_config.h"
+//#include "drv_vdec.h"
+
+#if 1 // (!CONFIG_DRV_VERIFY_SUPPORT)
+#include "vdec_usage.h"
+#include "vdec_info_common.h"
+#else
+//#include "x_stl_lib.h"
+//#include "x_assert.h"
+//#include "u_pbinf.h"
+#endif
+
+#define REF_LIST_0 0
+#define REF_LIST_1 1
+#define REF_LIST_2 2
+#define AVS_MAX_FRM_BUFNUM 22
+#define AVS_MAX_REF_PICNUM 3
+
+#define AVS_PREV_P_IDX 1
+#define AVS_LAST_P_IDX 2
+#define AVS_PREV_FW_IDX 0
+#define AVS_FW_REF_IDX 1
+#define AVS_BW_REF_IDX 2
+#define AVS_CURR_WORK_IDX 3
+#define AVS_DPB_NUM 4
+
+typedef struct _VDEC_INFO_AVS_VFIFO_PRM_T_
+{
+ UINT32 u4VFifoSa; ///< Video Fifo memory start address
+ UINT32 u4VFifoEa; ///< Video Fifo memory end address
+} VDEC_INFO_AVS_VFIFO_PRM_T;
+
+typedef struct _VDEC_INFO_AVS_BS_INIT_PRM_T_
+{
+ UINT32 u4VLDRdPtr;
+ UINT32 u4VLDWrPtr;
+ UINT32 u4VFifoSa; ///< Video Fifo memory start address
+ UINT32 u4VFifoEa; ///< Video Fifo memory end address
+ UINT32 u4WritePointer;
+} VDEC_INFO_AVS_BS_INIT_PRM_T;
+
+typedef struct _VDEC_INFO_AVS_SEQ_HDR_T_
+{
+ UINT32 u4ProfileID;
+ UINT32 u4LevelID;
+ UINT32 u4IsProgSeq;
+ UINT32 u4HSize;
+ UINT32 u4VSize;
+ UINT32 u4ChromaFmt;
+ UINT32 u4SamplePrec;
+ UINT32 u4AspRatio;
+ UINT32 u4FrmRate ;
+ UINT32 u4BitRateL;
+ UINT32 u4MarketBitBR;
+ UINT32 u4BitRateU;
+ UINT32 u4LowDelay;
+ UINT32 u4MarkerBit;
+ UINT32 u4BBVSize;
+ UINT32 u4RsvBits;
+ UINT32 u4IsValid;
+ UINT32 u2WidthDec;
+ UINT32 u2HeightDec;
+ UINT32 u4LastHSize;
+ UINT32 u4LastVSize;
+} VDEC_INFO_AVS_SEQ_HDR_T;
+
+typedef struct _VDEC_INFO_AVS_PIC_HDR_T_
+{
+ UINT32 u4BBVDelay;
+ UINT32 u4TimeCodeFg;
+ UINT32 u4TimeCode;
+ UINT32 u4MarkerBit;
+ UINT32 u4BBVCheckTimes;
+ UINT32 u4PicCodingType;
+ UINT32 u4PicDistance;
+ UINT32 u4ProgFrm;
+ UINT32 u4PicStruct;
+ UINT32 u4AdvPredModeDisable;
+ UINT32 u4TFT;
+ UINT32 u4RFF;
+ UINT32 u4FixedPicQP;
+ UINT32 u4PicQP;
+ UINT32 u4PicRefFg;
+ UINT32 u4NoForwardRefFg;
+ UINT32 u4SkipModeFg;
+ UINT32 u4RsvBits;
+ UINT32 u4LoopFilterDisable;
+ UINT32 u4LoopFilterParamFg;
+ UINT32 u4IsValid; //stuffing bit
+ INT32 i4AlphaCOffset;
+ INT32 i4BetaOffset;
+ BOOL fgIsIPic;
+ BOOL fgSecField;
+} VDEC_INFO_AVS_PIC_HDR_T;
+
+typedef struct _VDEC_INFO_AVS_SLICE_HDR_T_
+{
+ UINT16 u2VPosExt;
+ UINT16 u2FixedSliceQP;
+ UINT16 u2SliceQP;
+ UINT16 u2SliceWeightFg;
+ UINT16 u2MBWeightFg;
+ UINT8 u1LumaScale[2];
+ INT8 i1LumaShift[2];
+ UINT8 u1ChromaScale[2];
+ INT8 i1ChromaShift[2];
+} VDEC_INFO_AVS_SLICE_DHR_T;
+
+typedef struct _VDEC_INFO_AVS_WORK_BUF_SA_T_
+{
+ UINT32 u4PredSa;
+ UINT32 u4Mv1;
+ UINT32 u4Mv2;
+} VDEC_INFO_AVS_WORK_BUF_SA_T;
+
+typedef struct _VDEC_INFO_AVS_FRAME_BUF_SA_T_
+{
+ UINT32 u4Pic0YSa;
+ UINT32 u4Pic0CSa;
+ UINT32 u4Pic1YSa;
+ UINT32 u4Pic1CSa;
+ UINT32 u4Pic2YSa;
+ UINT32 u4Pic2CSa;
+} VDEC_INFO_AVS_FRAME_BUF_SA_T;
+
+typedef struct _VDEC_INFO_AVS_FBUF_INFO_T_
+{
+ BOOL fgNonExisting;
+ BOOL fgIsBufRef;
+ BOOL fgIsErr;
+ BOOL fgIsNotDisp;
+ UCHAR ucFbId;
+
+ UINT8 u1FBufStatus; // 1:Top decoded, 2: Bottom decoded
+ UINT8 u1FBufRefType;
+ UINT8 u1TFldRefType;
+ UINT8 u1BFldRefType;
+
+ UINT32 u4FrameNum;
+ UINT32 u4SliceType;
+ INT32 i4FrameNumWrap;
+
+ UINT32 u4YAddr;
+ UINT32 u4CAddrOffset;
+
+ BOOL fgVirtualDec;
+ UINT64 u8Pts;
+ UINT64 u8Offset;
+
+ // Picture coding type
+ UINT8 u1PicCodingType;
+
+ // Frame picture distance
+ UINT32 u4PicDistance;
+
+#if(CONFIG_DRV_VERIFY_SUPPORT)
+ UINT32 u4W;
+ UINT32 u4H;
+ UINT32 u4DecOrder;
+ UINT32 u4DramPicSize; // change name to u4CAddrOffset and add u4MVStartAddr TODO:071021
+ UINT32 u4DramPicArea; // maybe will be removed TODO:071021
+ UINT32 u4Addr; // change name to u4YStartAddr TODO:071021
+#endif
+} VDEC_INFO_AVS_FBUF_INFO_T;
+
+typedef struct _VDEC_INFO_AVS_REF_BUF_T
+{
+ BOOL fgValid;
+
+ //FBM
+ UCHAR ucFbId;
+
+ // Fb Index
+ UINT8 u1DecFBufIdx;
+} VDEC_INFO_AVS_REF_BUF_T;
+
+typedef struct _VDEC_INFO_AVS_DEC_PRM_T_
+{
+ UINT32 u4FRefBufIdx;
+ INT32 i4MemBase;
+ UINT8 u1LastRefIdx;
+ UCHAR u1DecFBufIdx;
+ BOOL fgEnPP;
+ UINT32 u4MaxFBufNum;
+ // Decoding buffer
+ UCHAR *pucDecWorkBufY;
+ UCHAR *pucDecWorkBufC;
+ UCHAR *pucDecWorkBufMV;
+
+ //For 8320 PANDA
+ UINT32 u4VLDWrapperWrok;
+ UINT32 u4PPWrapperWrok;
+
+ VDEC_INFO_AVS_SEQ_HDR_T *prSeqHdr;
+ VDEC_INFO_AVS_PIC_HDR_T *prPicHdr;
+ VDEC_INFO_AVS_WORK_BUF_SA_T rAvsWorkBufSa;
+ VDEC_INFO_AVS_FRAME_BUF_SA_T rAvsFrameBufSa;
+ VDEC_INFO_AVS_FBUF_INFO_T arFBufInfo[AVS_DPB_NUM];
+ //VDEC_INFO_AVS_REF_BUF_T arRefFBufInfo[AVS_DPB_NUM];
+ VDEC_INFO_AVS_FBUF_INFO_T *prCurrFBufInfo;
+} VDEC_INFO_AVS_DEC_PRM_T;
+
+typedef struct _VDEC_HAL_DEC_AVS_ERR_INFO_T_
+{
+ UINT32 u4AvsErrCnt; ///< Video decode error count
+ UINT32 u4AvsErrRow; ///< Video decode error mb row
+ UINT32 u4AvsErrType; ///< Video decode error type
+ UINT16 u2AvsMBErrCnt;
+} VDEC_INFO_AVS_ERR_INFO_T;
+
+#endif //#ifndef _HAL_VDEC_AVS_IF_H_
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_info_common.h b/drivers/misc/mediatek/vdec/include/vdec_info_common.h
new file mode 100644
index 000000000..eba40f327
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_info_common.h
@@ -0,0 +1,327 @@
+#ifndef _VDEC_INFO_COMMON_H_
+#define _VDEC_INFO_COMMON_H_
+
+#include "chip_ver.h"
+#include "type.h"
+#include <mach/mt_typedefs.h>
+#include "vdec_info_h264.h"
+#include "vdec_info_h265.h"
+#include "vdec_info_wmv.h"
+#include "vdec_info_mpeg.h"
+#include "vdec_info_rm.h"
+#include "vdec_info_vp6.h"
+#include "vdec_info_vp8.h"
+#include "vdec_info_avs.h"
+#include <linux/kernel.h>
+#include <asm/memory.h>
+
+int UTIL_Printf(const char *format, ...);
+int sprintf(char *str, const char *format, ...);
+
+//#define CONFIG_DRV_VERIFY_SUPPORT 1
+#define CONFIG_DRV_FPGA_BOARD 1
+#if CONFIG_DRV_FPGA_BOARD
+#define IRQ_DISABLE
+//#define CAPTURE_ESA_LOG
+#ifdef CAPTURE_ESA_LOG
+#define CAPTURE_ALL_IN_ONE
+#define WRITE_ESA_PER_FRAME 0
+#endif
+#define VMMU_SUPPORT 0
+#endif
+#define CONFIG_DRV_LINUX 1
+#define START_CODE 0x00000001
+
+///*****Please Note : if you define the MEM_ALLOCATE_IOREMAP, please also modify the following file*****
+///ALPS_SW\TRUNK\ALPS\alps\mediatek\config\mt8320fpga_ldvt\autoconfig\kconfig\project
+///Change point : CONFIG_MAX_DRAM_SIZE_SUPPORT=0x10000000 ==> 0x08000000
+#define MEM_ALLOCATE_IOREMAP 1
+#if MEM_ALLOCATE_IOREMAP
+
+#define PHYSICAL(addr) m4u_v2p(addr)
+// #define VIRTUAL(addr) __va(addr)
+
+#else
+#define PHYSICAL(addr) __pa(addr)
+#define VIRTUAL(addr) __va(addr)
+
+#endif
+
+#define FILEBUF_SZ 1024*400
+#define CRC_SZ 819200
+#if MEM_ALLOCATE_IOREMAP
+#if VMMU_SUPPORT
+#define VMMU_SZ 0x400000 // need 64k align
+#define VMMU_SA 0x05000000 //0x08000000
+#define FILELIST_SA (VMMU_SA+VMMU_SZ)
+#else
+#ifdef VDEC_VP8_VERIFY_CODE
+#define FILELIST_SA 0x93400000//0x90C00000//0x9AC00000//0x9E500000//0x05000000 //0x08000000
+#else
+#define FILELIST_SA 0xeda00000 //0xe6000000 //0xB0000000 //0x44700000//0x4ab00000 //0x9A000000//0x05000000 //0x08000000
+#endif
+#endif
+#define VFIFO_SA (FILELIST_SA+FILE_LIST_SZ)
+#define GOLDY_SA (VFIFO_SA+V_FIFO_SZ)
+#define GOLDC_SA (GOLDY_SA+GOLD_Y_SZ)
+#define CRCBUF_SA (GOLDC_SA+GOLD_C_SZ)
+#ifdef CAPTURE_ESA_LOG
+#define ESALOG_SZ 1024*1024
+#define ESALOGTOTAL_SZ 4*1024*1024
+#define ESALOG_SA (CRCBUF_SA+CRC_SZ)
+#define FILEBUF_SA (ESALOG_SA+ESALOG_SZ)
+#else
+#define FILEBUF_SA (CRCBUF_SA+CRC_SZ)
+#endif
+#define WORKBUF_SA (FILEBUF_SA+FILEBUF_SZ)
+
+
+//#define WORKBUF_SA 0x0D800000
+#define ARFBUF_SA (WORKBUF_SA+PIC_Y_SZ+PIC_C_SZ)
+#if VDEC_VP8_WRAPPER_OFF
+#define GLDBUF_SA (ARFBUF_SA+DEC_PP_Y_SZ+DEC_PP_C_SZ)
+#define LSTBUF_SA (GLDBUF_SA+DEC_PP_Y_SZ+DEC_PP_C_SZ)
+#define VLDWRAP_SA (LSTBUF_SA+DEC_PP_Y_SZ+DEC_PP_C_SZ)
+#define PPWRAPY_SA (VLDWRAP_SA+VLD_PRED_SZ)
+#define PPWRAPC_SA (PPWRAPY_SA+PP_WRAPY_SZ)
+#define SEGIDWRAP_SA (PPWRAPC_SA+PP_WRAPC_SZ)
+
+#define PPYBUF_SA (LSTBUF_SA+DEC_PP_Y_SZ+DEC_PP_C_SZ)
+#else
+#define GLDBUF_SA (ARFBUF_SA+PIC_Y_SZ+PIC_C_SZ)
+#define LSTBUF_SA (GLDBUF_SA+PIC_Y_SZ+PIC_C_SZ)
+#define PPYBUF_SA (LSTBUF_SA+PIC_Y_SZ+PIC_C_SZ)
+#endif
+#define PPCBUF_SA (PPYBUF_SA+DEC_PP_Y_SZ)
+#define VLDWRAPWORK_SA (PPCBUF_SA+DEC_PP_C_SZ)
+#define PPWRAPWORK_SA (VLDWRAPWORK_SA+VLD_WRAP_SZ)
+
+
+//For AVS
+#define AVS_PIC_Y0 0x0D800000 //(PPWRAPWORK_SA + V_WRAP_SA)
+//#define AVS_PIC_C0 (AVS_PIC_Y0 + PIC_Y_SZ)
+#define AVS_PIC_Y1 (AVS_PIC_Y0 + PIC_Y_SZ + PIC_C_SZ)
+//#define AVS_PIC_C1 (AVS_PIC_Y1 + PIC_Y_SZ)
+#define AVS_PIC_Y2 (AVS_PIC_Y1 + PIC_Y_SZ + PIC_C_SZ)
+//#define AVS_PIC_C2 (AVS_PIC_Y2 + PIC_Y_SZ)
+#define AVS_PIC_Y3 (AVS_PIC_Y2 + PIC_Y_SZ + PIC_C_SZ)
+//#define AVS_PIC_C3 (AVS_PIC_Y3 + PIC_Y_SZ)
+#define AVS_VLD_PRED_BUF (AVS_PIC_Y3 + PIC_Y_SZ + PIC_C_SZ)
+#define AVS_VLD_MV1_BUF (AVS_VLD_PRED_BUF + AVS_VLD_PRED_SZ)
+#define AVS_VLD_MV2_BUF (AVS_VLD_MV1_BUF + AVS_VLD_MV_SZ)
+#define AVS_ADDSWAP_BUF (AVS_VLD_MV2_BUF + AVS_VLD_MV_SZ)
+#define AVS_VLDWRAPWORK_SA (AVS_ADDSWAP_BUF + ADDSWAP_BUF_SZ)
+#define AVS_PPWRAPWORK_SA (AVS_VLDWRAPWORK_SA + VLD_WRAP_SZ)
+#endif
+
+
+typedef struct _VDEC_PARAM_T_
+{
+ UINT32 u4InstanceId;
+ UINT32 u4Mode;
+ BOOL fgMVCType;
+} VDEC_PARAM_T;
+
+#define NO_PIC 0
+#define TOP_FIELD 1
+#define BOTTOM_FIELD 2
+#define FRAME 3
+#define TOP_BOTTOM_FIELD 4
+
+#if VDEC_8320_SUPPORT
+#define WMV_8320_SUPPORT 1
+#define AVC_8320_SUPPORT 1
+#else
+#define WMV_8320_SUPPORT 0
+#define AVC_8320_SUPPORT 0
+#endif
+#if VDEC_6589_SUPPORT
+#define MPEG4_6589_SUPPORT 1
+//#define MPEG4_6589_ERROR_CONCEAL
+#else
+#define MPEG4_6589_SUPPORT 0
+#endif
+
+#if VDEC_6582_SUPPORT
+#define MPEG4_6582_SUPPORT 1
+#else
+#define MPEG4_6582_SUPPORT 0
+#endif
+
+#define MPEG4_6582_NORMAL_DEBUG_MODE 0
+
+#define MPEG4_VLD_WRAPPER_PREFETCH_MODE 0
+#define WMV_LOG_TMP 0
+#define AVC_LOG_TMP 0
+
+#define AVC_NEW_CRC_COMPARE 1
+
+#define VDEC_VER_COMPARE_CRC 1
+
+#define MT6582_L2_EMULATION 0 // 0: No L2$ emulation, 1: L2$ emulation with DRAM, 2: Use L2$ for VLD & PP Wrapper
+
+
+//#define HEVC_ESA_NBM_LOG //Record ESA_NBM log
+//#define HEVC_DUMP_MC_VLDTOP_LOG // Record MC_VLDTOP_LOG
+//#define HEVC_DUMP_BITSTREAM_INFO // trigger HW to decode done for insert error
+//#define HEVC_DUMP_PIC_BITSTREAM // after SC to decode done
+
+#define HEVC_SDCARD_VFY
+#define HEVC_CRC_CMP
+//#define HEVC_DDR4 //enable this config HEVC_CRC_CMP should be turn off
+
+//#define HEVC_UFO_MODE
+#define HEVC_VP_MODE
+#define HEVC_STILL_IMAGE
+
+//#define VDEC_BW_FAKE_ENGINE_ON
+
+//#define VDEC_SIM_DUMP
+#ifdef VDEC_SIM_DUMP
+#define REG_LOG_NEW
+#endif
+
+#define H263_USE_SORENSON 0
+
+typedef enum
+{
+ VDEC_UNKNOWN = 0xFF,
+ VDEC_MPEG = 0x0, ///< MPEG Deocde Request
+ VDEC_MPEG1 = 0x1, ///< MPEG1 Deocde Request
+ VDEC_MPEG2 = 0x2, ///< MPEG2 Deocde Request
+ VDEC_DIVX3 = 0x3, ///< MPEG3 Deocde Request
+ VDEC_MPEG4 = 0x4, ///< MPEG4 Deocde Request
+ VDEC_WMV = 0x10, /// < WMV Decode Request
+ VDEC_WMV1 = 0x11, ///< WMV7 Deocde Request
+ VDEC_WMV2 = 0x12, ///< WMV8 Deocde Request
+ VDEC_WMV3 = 0x13, ///< WMV9 Deocde Request
+ VDEC_VC1 = 0x111, ///< VC1 Deocde Request
+ VDEC_H265 = 0x265, ///< H265 Deocde Request
+ VDEC_H264 = 0x264, ///< H264 Deocde Request
+ VDEC_H263 = 0x263, ///< H263 Deocde Request
+ VDEC_RM = 0x300, ///< RM Decode Request
+ VDEC_VP6 = 0x600, ///< VP6 Decode Request
+ VDEC_AVS = 0x700, ///< AVS Decode Request
+ VDEC_VP8 = 0x800, ///< VP8 Decode Request
+ VDEC_JPG = 0x900 ///< JPG Decode Request
+} VDEC_CODEC_T;
+
+
+/// Enumerate read pointer align type
+typedef enum
+{
+ BYTE_ALIGN = 0, ///< BYTE Align Request
+ WORD_ALIGN, ///< WORD Align Request
+ DWRD_ALIGN, ///< UINT32 Align Request
+} RPTR_ALIGN_TYPE;
+
+
+typedef struct _VDEC_INFO_VDSCL_PRM_T_
+{
+ BOOL fgDSCLEn; // 1: 709 to 601
+ BOOL fgEnColorCvt; // 1: 709 to 601
+ BOOL fgYOnly;
+ BOOL fgMbaff;
+ UCHAR ucPicStruct;
+ UCHAR ucScrAgent; // 0:MC 2:PP 3:FGT
+ UCHAR ucSpectType;
+ UCHAR ucScanType; //0: block 1:raster
+ UCHAR ucVdoFmt; // 0:420 1:422
+ UCHAR ucAddrSwapMode;
+ UINT32 u4DispW;
+ UINT32 u4SrcWidth;
+ UINT32 u4SrcHeight;
+ UINT32 u4SrcYOffH;
+ UINT32 u4SrcYOffV;
+ UINT32 u4SrcCOffH;
+ UINT32 u4SrcCOffV;
+ UINT32 u4TrgBufLen;
+ UINT32 u4TrgWidth;
+ UINT32 u4TrgHeight;
+ UINT32 u4TrgOffH;
+ UINT32 u4TrgOffV;
+ UINT32 u4TrgYAddr;
+ UINT32 u4TrgCAddr;
+ UINT32 u4WorkAddr;
+ UINT32 u4QY;
+ UINT32 u4QC;
+ UINT32 u4R_norm;
+ UINT32 u4OffY;
+ UINT32 u4OffC;
+
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8530)
+ UINT32 u4SclYOffH;
+ UINT32 u4SclCOffH;
+ UINT32 u4SclYOffV;
+ UINT32 u4SclCOffV;
+
+ BOOL fgLumaKeyEn;
+ UINT16 u2LumaKeyValue;
+#endif
+} VDEC_INFO_VDSCL_PRM_T;
+
+
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560)
+typedef struct _VDEC_INFO_LBD_PRM_T_
+{
+ UINT32 u4UpBoundStart;
+ UINT32 u4UpBoundEnd;
+ UINT32 u4LowBoundStart;
+ UINT32 u4LowBoundEnd;
+ UINT32 u4LeftBound;
+ UINT32 u4RightBound;
+ UINT32 u4YOffset;
+ UINT32 u4COffset;
+ UINT32 u4YValueThd;
+ UINT32 u4CValueThd;
+ UINT32 u4YCntThd;
+ UINT32 u4CCntThd;
+} VDEC_INFO_LBD_PRM_T;
+#endif
+
+
+typedef struct _VDEC_INFO_DEC_PRM_T_
+{
+ UCHAR ucPicStruct;
+ UCHAR ucPicType;
+ UCHAR ucDecFBufIdx;
+ UCHAR ucAddrSwapMode;
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560) //mtk40110 Qing.Li 2010/11/25, to fix mpeg4 DCAC Pred bug
+ UCHAR ucMpegSpecType; //1:mpeg12, 2:mpeg4&h263, 3:divx
+#endif
+ UINT32 u4PicBW;
+ UINT32 u4PicW;
+ UINT32 u4PicH;
+ //UFO
+#if 0
+ UINT32 u4UFO_LEN_SIZE_Y;
+ UINT32 u4PIC_SIZE_BS;
+ UINT32 u4PIC_SIZE_Y_BS;
+#endif
+ VDEC_INFO_VDSCL_PRM_T rDownScalerPrm;
+#if ((CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560) && CONFIG_DRV_FTS_SUPPORT)
+ VDEC_INFO_LBD_PRM_T rLBDPrm;
+#endif
+ void *prVDecCodecHalPrm;
+#if 1 //(CONFIG_DRV_VERIFY_SUPPORT)
+ union
+ {
+ VDEC_INFO_H264_DEC_PRM_T rVDecH264DecPrm;
+ VDEC_INFO_H265_DEC_PRM_T rVDecH265DecPrm;
+ VDEC_INFO_WMV_DEC_PRM_T rVDecWMVDecPrm;
+ VDEC_INFO_MPEG_DEC_PRM_T rVDecMPEGDecPrm;
+ VDEC_INFO_RM_DEC_PRM_T rVDecRMDecPrm;
+ VDEC_INFO_VP6_DEC_PRM_T rVDecVP6DecPrm;
+ VDEC_INFO_AVS_DEC_PRM_T rVDecAVSDecPrm;
+ VDEC_INFO_VP8_DEC_PRM_T rVDecVP8DecPrm;
+ } SpecDecPrm;
+#endif
+ //VDEC_UFO_SUPPORT
+ UINT32 u4PIC_SIZE_BS, u4UFO_LEN_SIZE_Y, u4PIC_SIZE_Y_BS;
+ UINT32 u4UFODramPicSize, u4UFODramPicArea;
+ UINT32 u4DramPicSize, u4DramPicArea;
+
+} VDEC_INFO_DEC_PRM_T;
+
+#endif //#ifndef _HAL_VDEC_COMMON_IF_H_
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_info_h264.h b/drivers/misc/mediatek/vdec/include/vdec_info_h264.h
new file mode 100644
index 000000000..cfffbd985
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_info_h264.h
@@ -0,0 +1,690 @@
+#ifndef _VDEC_INFO_H264_H_
+#define _VDEC_INFO_H264_H_
+
+#include "drv_config.h"
+//#include "drv_vdec.h"
+
+#include "vdec_info_common.h"
+#include "vdec_usage.h"
+#define VDEC_MVC_SUPPORT 1
+#define VDEC_UFO_SUPPORT 0
+
+typedef enum
+{
+ SEI_BUFFERING_PERIOD = 0,
+ SEI_PIC_TIMING, // 1
+ SEI_PAN_SCAN_RECT, // 2
+ SEI_FILLER_PAYLOAD, // 3
+ SEI_USER_DATA_REGISTERED_ITU_T_T35, // 4
+ SEI_USER_DATA_UNREGISTERED, // 5
+ SEI_RECOVERY_POINT, // 6
+ SEI_DEC_REF_PIC_MARKING_REPETITION, // 7
+ SEI_SPARE_PIC, // 8
+ SEI_SCENE_INFO, // 9
+ SEI_SUB_SEQ_INFO, // 10
+ SEI_SUB_SEQ_LAYER_CHARACTERISTICS, // 11
+ SEI_SUB_SEQ_CHARACTERISTICS, // 12
+ SEI_FULL_FRAME_FREEZE, // 13
+ SEI_FULL_FRAME_FREEZE_RELEASE, // 14
+ SEI_FULL_FRAME_SNAPSHOT, // 15
+ SEI_PROGRESSIVE_REFINEMENT_SEGMENT_START, // 16
+ SEI_PROGRESSIVE_REFINEMENT_SEGMENT_END, // 17
+ SEI_MOTION_CONSTRAINED_SLICE_GROUP_SET, // 18
+ SEI_FILM_GRAIN_CHARACTERISTICS, // 19
+ SEI_DEBLOCKING_FILTER_DISPLAY_PREFERENCE, // 20
+ SEI_STEREO_VIDEO_INFO, // 21
+ SEI_MVC_SCALABLE_NESTING = 37, // 37
+ SEI_MAX_ELEMENTS //!< number of maximum syntax elements 22
+} SEI_type;
+
+
+typedef struct _VDEC_INFO_H264_FGT_PRM_T_
+{
+ UCHAR ucMBXSize;
+ UCHAR ucMBYSize;
+ UCHAR ucDataScr; ///< 0:MC 1:PP
+ UCHAR *pucFGTScrYAddr;
+ UCHAR *pucFGTScrCAddr;
+ UCHAR *pucFGTTrgYAddr;
+ UCHAR *pucFGTTrgCAddr;
+ UINT32 u4Ctrl;
+} VDEC_INFO_H264_FGT_PRM_T;
+
+
+#define MAXIMUMVALUEOFcpb_cnt 32
+typedef struct _VDEC_INFO_H264_HRD_PRM_T_
+{
+ UINT32 u4CpbCntMinus1; // ue(v)
+ UINT32 u4BitRateScale; // u(4)
+ UINT32 u4CpbSizeScale; // u(4)
+ UINT32 u4BitRateValueMinus1 [MAXIMUMVALUEOFcpb_cnt]; // ue(v)
+ UINT32 u4CpbSizeValueMinus1 [MAXIMUMVALUEOFcpb_cnt]; // ue(v)
+ BOOL fgCbrFlag[MAXIMUMVALUEOFcpb_cnt]; // u(1)
+ UINT32 u4InitialCpbRemovalDelayLengthMinus1; // u(5)
+ UINT32 u4CpbRemovalDelayLengthMinus1; // u(5)
+ UINT32 u4DpbOutputDelayLengthMinus1; // u(5)
+ UINT32 u4TimeOffsetLength; // u(5)
+} VDEC_INFO_H264_HRD_PRM_T;
+
+
+typedef struct _VDEC_INFO_H264_VUI_PRM_T_
+{
+ BOOL fgAspectRatioInfoPresentFlag; // u(1)
+ UINT32 u4AspectRatioIdc; // u(8)
+ UINT32 u4SarWidth; // u(16)
+ UINT32 u4SarHeight; // u(16)
+ BOOL fgOverscanInfoPresentFlag; // u(1)
+ BOOL fgOverscanAppropriateFlag; // u(1)
+ BOOL fgVideoSignalTypePresentFlag; // u(1)
+ UINT32 u4VideoFormat; // u(3)
+ BOOL fgVideoFullRangeFlag; // u(1)
+ BOOL fgColourDescriptionPresentFlag; // u(1)
+ UINT32 u4ColourPrimaries; // u(8)
+ UINT32 u4TransferCharacteristics; // u(8)
+ UINT32 u4MatrixCoefficients; // u(8)
+ BOOL fgChromaLocationInfoPresentFlag; // u(1)
+ UINT32 u4ChromaSampleLocTypeTopField; // ue(v)
+ UINT32 u4ChromaSampleLocTypeBottomField; // ue(v)
+ BOOL fgTimingInfoPresentFlag; // u(1)
+ UINT32 u4NumUnitsInTick; // u(32)
+ UINT32 u4TimeScale; // u(32)
+ BOOL fgFixedFrameRateFlag; // u(1)
+ BOOL fgNalHrdParametersPresentFlag; // u(1)
+ VDEC_INFO_H264_HRD_PRM_T tNalHrdParameters; // hrd_paramters_t
+ BOOL fgVclHrdParametersPresentFlag; // u(1)
+ VDEC_INFO_H264_HRD_PRM_T tVclHrdParameters; // hrd_paramters_t
+ // if ((nal_hrd_parameters_present_flag || (vcl_hrd_parameters_present_flag))
+ BOOL fgLowDelayHrdFlag; // u(1)
+ BOOL fgPicStructPresentFlag; // u(1)
+ BOOL fgBitstreamRestrictionFlag; // u(1)
+ BOOL fgMotionVectorsOverPicBoundariesFlag; // u(1)
+ UINT32 u4MaxBytesPerPicDenom; // ue(v)
+ UINT32 u4MaxBitsPerMbDenom; // ue(v)
+ UINT32 u4Log2MaxMvLengthVertical; // ue(v)
+ UINT32 u4Log2MaxMvLengthHorizontal; // ue(v)
+ UINT32 u4NumReorderFrames; // ue(v)
+ UINT32 u4MaxDecFrameBuffering; // ue(v)
+} VDEC_INFO_H264_VUI_PRM_T;
+
+#if VDEC_MVC_SUPPORT
+#define MAX_MVC_VIEW_ID 5
+#define MAX_MVC_REF_FRM_NUM 5
+#define MAX_MVC_APPICABLE_OP_NUM 5 // Spec is 0~1023
+typedef struct _VDEC_INFO_MVC_SPS_EXTENSION_T_
+{
+ UINT16 ucNumViewsMinus1;
+ UINT16 aucViewId[MAX_MVC_VIEW_ID];
+ UINT16 aucNumAnchorRefsL0[MAX_MVC_VIEW_ID];
+ UINT16 aucAnchorRefL0[MAX_MVC_VIEW_ID][MAX_MVC_REF_FRM_NUM];
+ UINT16 aucNumAnchorRefsL1[MAX_MVC_VIEW_ID];
+ UINT16 aucAnchorRefL1[MAX_MVC_VIEW_ID][MAX_MVC_REF_FRM_NUM];
+ UINT16 aucNumNonAnchorRefsL0[MAX_MVC_VIEW_ID];
+ UINT16 aucNonAnchorRefL0[MAX_MVC_VIEW_ID][MAX_MVC_REF_FRM_NUM];
+ UINT16 aucNumNonAnchorRefsL1[MAX_MVC_VIEW_ID];
+ UINT16 aucNonAnchorRefL1[MAX_MVC_VIEW_ID][MAX_MVC_REF_FRM_NUM];
+ UINT16 ucNumLevelValuesSignalledMinus1;
+ UINT16 aucLevelIdc[MAX_MVC_VIEW_ID];
+ UINT16 au2NumApplicableOpsMinus1[MAX_MVC_VIEW_ID];
+ UINT16 aucApplicableOpTemporalId[MAX_MVC_VIEW_ID][MAX_MVC_APPICABLE_OP_NUM];
+ UINT16 au2ApplicableOpNumTargetViewsMinus1[MAX_MVC_VIEW_ID][MAX_MVC_APPICABLE_OP_NUM];
+ UINT16 au2ApplicableOpTargetViewsId[MAX_MVC_VIEW_ID][MAX_MVC_APPICABLE_OP_NUM][MAX_MVC_VIEW_ID];
+ UINT16 au2ApplicableOpNumViewsMinus1[MAX_MVC_VIEW_ID][MAX_MVC_APPICABLE_OP_NUM];
+} VDEC_INFO_MVC_SPS_EXTENSION_T;
+
+typedef struct _VDEC_INFO_MVC_VUI_EXTENSION_T_
+{
+ UINT32 u4NumOpsMinus1;
+ UCHAR ucTemporalId[MAX_MVC_APPICABLE_OP_NUM];
+ UCHAR ucNumTargetOutputViewsMinus1[MAX_MVC_APPICABLE_OP_NUM];
+ UCHAR aucViewId[MAX_MVC_APPICABLE_OP_NUM][MAX_MVC_VIEW_ID];
+ BOOL fgTimingInfoPresentFlag[MAX_MVC_APPICABLE_OP_NUM];
+ UINT32 u4NumUnitsInTick[MAX_MVC_APPICABLE_OP_NUM];
+ UINT32 u4TimeScale[MAX_MVC_APPICABLE_OP_NUM];
+ BOOL fgFixedFrameRateFlag[MAX_MVC_APPICABLE_OP_NUM];
+ BOOL fgNalHrdParametersPresentFlag[MAX_MVC_APPICABLE_OP_NUM];
+ BOOL fgVclHrdParametersPresentFlag[MAX_MVC_APPICABLE_OP_NUM];
+ BOOL fgLowDelayHrdFlag[MAX_MVC_APPICABLE_OP_NUM];
+ BOOL fgPicStructPresetFlag[MAX_MVC_APPICABLE_OP_NUM];
+} VDEC_INFO_MVC_VUI_EXTENSION_T;
+#endif
+
+#define MAXnum_ref_frames_in_pic_order_cnt_cycle 256
+typedef struct _VDEC_INFO_H264_SPS_T_
+{
+ BOOL fgSPSValid; // indicates the parameter set is valid
+ UINT32 u4ProfileIdc; // u(8)
+ BOOL fgConstrainedSet0Flag; // u(1)
+ BOOL fgConstrainedSet1Flag; // u(1)
+ BOOL fgConstrainedSet2Flag; // u(1)
+ BOOL fgConstrainedSet3Flag; // u(1)
+ BOOL fgConstrainedSet4Flag; // u(1)
+ UINT32 u4LevelIdc; // u(8)
+ UINT32 u4SeqParameterSetId; // ue(v)
+ UINT32 u4ChromaFormatIdc; // ue(v)
+ BOOL fgResidualColorTransformFlag;
+ UINT32 u4BitDepthLumaMinus8; // ue(v)
+ UINT32 u4BitDepthChromaMinus8; // ue(v)
+ BOOL fgQpprimeYZeroTransformBypassFlag;
+
+ BOOL fgSeqScalingMatrixPresentFlag; // u(1)
+ BOOL fgSeqScalingListPresentFlag[8]; // u(1)
+ CHAR cScalingList4x4[6][16]; // se(v)
+ CHAR cScalingList8x8[2][64]; // se(v)
+ BOOL fgUseDefaultScalingMatrix4x4Flag[6];
+ BOOL fgUseDefaultScalingMatrix8x8Flag[2];
+
+ UINT32 u4Log2MaxFrameNumMinus4; // ue(v)
+ UINT32 u4MaxFrameNum;
+ UINT32 u4PicOrderCntType;
+ UINT32 u4Log2MaxPicOrderCntLsbMinus4; // ue(v)
+ BOOL fgDeltaPicOrderAlwaysZeroFlag; // u(1)
+ INT32 i4OffsetForNonRefPic; // se(v)
+ INT32 i4OffsetForTopToBottomField; // se(v)
+ UINT32 u4NumRefFramesInPicOrderCntCycle; // ue(v)
+ INT32 i4OffsetForRefFrame[MAXnum_ref_frames_in_pic_order_cnt_cycle]; // se(v)
+ UINT32 u4NumRefFrames; // ue(v)
+ BOOL fgGapsInFrameNumValueAllowedFlag; // u(1)
+ UINT32 u4PicWidthInMbsMinus1; // ue(v)
+ UINT32 u4PicHeightInMapUnitsMinus1; // ue(v)
+ BOOL fgFrameMbsOnlyFlag; // u(1)
+ BOOL fgMbAdaptiveFrameFieldFlag; // u(1)
+ BOOL fgDirect8x8InferenceFlag; // u(1)
+ BOOL fgFrameCroppingFlag; // u(1)
+ UINT32 u4FrameCropLeftOffset; // ue(v)
+ UINT32 u4FrameCropRightOffset; // ue(v)
+ UINT32 u4FrameCropTopOffset; // ue(v)
+ UINT32 u4FrameCropBottomOffset; // ue(v)
+ UINT32 u4CropUnitX; // 1 or 2
+ UINT32 u4CropUnitY; // 1 or 2 or 4
+ BOOL fgVuiParametersPresentFlag; // u(1)
+ VDEC_INFO_H264_VUI_PRM_T rVUI; // vui_seq_parameters_t
+#if VDEC_MVC_SUPPORT
+ BOOL fgBitEqualToOne; // u(1)
+ VDEC_INFO_MVC_SPS_EXTENSION_T rMvcSPS;
+ BOOL fgMvcVuiParametersPresentFlag; // u(1)
+ VDEC_INFO_MVC_VUI_EXTENSION_T rMvcVUI;
+#endif
+} VDEC_INFO_H264_SPS_T;
+
+
+#define MAXnum_slice_groups_minus1 8
+typedef struct _VDEC_INFO_H264_PPS_T_
+{
+ BOOL fgPPSValid; // indicates the parameter set is valid
+ //UINT32 pic_parameter_set_id; // ue(v)
+ UINT32 u4SeqParameterSetId; // ue(v)
+ BOOL fgEntropyCodingModeFlag; // u(1)
+
+ BOOL fgTransform8x8ModeFlag; // u(1)
+
+ BOOL fgPicScalingMatrixPresentFlag; // u(1)
+ BOOL fgPicScalingListPresentFlag[8]; // u(1)
+ CHAR cScalingList4x4[6][16]; // se(v)
+ CHAR cScalingList8x8[2][64]; // se(v)
+ BOOL fgUseDefaultScalingMatrix4x4Flag[6];
+ BOOL fgUseDefaultScalingMatrix8x8Flag[2];
+
+ // if( pic_order_cnt_type < 2 ) in the sequence parameter set
+ BOOL fgPicOrderPresentFlag; // u(1)
+ UINT32 u4NumSliceGroupsMinus1; // ue(v)
+ UINT32 u4SliceGroupMapType; // ue(v)
+ // if( slice_group_map_type = = 0 )
+ UINT32 u4RunLengthMinus1[MAXnum_slice_groups_minus1]; // ue(v)
+ // else if( slice_group_map_type = = 2 )
+ UINT32 u4TopLeft[MAXnum_slice_groups_minus1]; // ue(v)
+ UINT32 u4BottomRight[MAXnum_slice_groups_minus1]; // ue(v)
+ // else if( slice_group_map_type = = 3 || 4 || 5
+ BOOL fgSliceGroupChangeDirectionFlag; // u(1)
+ UINT32 u4SliceGroupChangeRateMinus1; // ue(v)
+ // else if( slice_group_map_type = = 6 )
+ UINT32 u4PicSizeInMapUnitsMinus1; // ue(v)
+ UINT32 *pu4SliceGroupId; // complete MBAmap u(v)
+ UINT32 u4NumRefIdxL0ActiveMinus1; // ue(v)
+ UINT32 u4NumRefIdxL1ActiveMinus1; // ue(v)
+ BOOL fgWeightedPredFlag; // u(1)
+ UINT32 u4WeightedBipredIdc; // u(2)
+ INT32 i4PicInitQpMinus26; // se(v)
+ INT32 i4PicInitQsMinus26; // se(v)
+ INT32 i4ChromaQpIndexOffset; // se(v)
+
+ INT32 i4SecondChromaQpIndexOffset; // se(v)
+
+ BOOL fgDeblockingFilterControlPresentFlag; // u(1)
+ BOOL fgConstrainedIntraPredFlag; // u(1)
+ BOOL fgRedundantPicCntPresentFlag; // u(1)
+} VDEC_INFO_H264_PPS_T;
+
+
+typedef struct _VDEC_INFO_H264_SLICE_HDR_T_
+{
+ UINT32 u4FirstMbInSlice;
+ UINT32 u4SliceType;
+ UINT32 u4PPSID;
+ UINT32 u4FrameNum;
+ BOOL fgFieldPicFlag;
+ BOOL fgBottomFieldFlag;
+
+ UINT32 u4IdrPicId;
+ INT32 i4PicOrderCntLsb;
+ INT32 i4PicOrderCntMsb;
+ INT32 i4DeltaPicOrderCntBottom;
+ INT32 i4DeltaPicOrderCnt[2];
+ UINT32 u4RedundantPicCnt;
+ BOOL fgDirectSpatialMvPredFlag;
+ BOOL fgNumRefIdxActiveOverrideFlag;
+ UINT32 u4NumRefIdxL0ActiveMinus1;
+ UINT32 u4NumRefIdxL1ActiveMinus1;
+
+ BOOL fgRefPicListReorderingFlagL0;
+ BOOL fgRefPicListReorderingFlagL1;
+ UINT32 u4ReorderingOfPicNumsIdc;
+ UINT32 u4AbsDiffPicNumMinus1;
+ UINT32 u4LongTermPicNum;
+
+ UINT32 u4CabacInitIdc;
+ INT32 i4SliceQpDelta;
+
+ UINT32 u4LumaLog2WeightDenom;
+ UINT32 u4ChromaLog2WeightDenom;
+ BOOL fgLumaWeightL0Flag;
+ BOOL fgLumaWeightL1Flag;
+ BOOL fgChromaWeightL0Flag;
+ BOOL fgChromaWeightL1Flag;
+ UINT32 u4LumaWeightL0[32];
+ UINT32 u4LumaOffsetl0[32];
+ UINT32 u4ChromaWeightL0[32][2];
+ UINT32 u4ChromaOffsetL0[32][2];
+ UINT32 u4LumaWeightL1[32];
+ UINT32 u4LumaOffsetL1[32];
+ UINT32 u4ChromaWeightL1[32][2];
+ UINT32 u4ChromaOffsetL1[32][2];
+
+ BOOL fgNoOutputOfPriorPicsFlag;
+ BOOL fgLongTermReferenceFlag;
+ BOOL fgAdaptiveRefPicMarkingModeFlag;
+
+ UINT32 u4MemoryManagementControlOperation[32];
+ UINT32 u4DifferencOfPicNumsMinus1;
+ UINT32 u4LongTermFrameIdx;
+ UINT32 u4MaxLongTermFrameIdxPlus1;
+
+ BOOL fgSpForSwitchFlag;
+ INT32 i4SliceQsDelta;
+ UINT32 u4DisableDeblockingFilterIdc;
+ INT32 i4SliceAlphaC0OffsetDiv2;
+ INT32 i4SliceBetaOffsetDiv2;
+ UINT32 u4SliceGroupChangeCycle;
+
+ BOOL fgMmco5;
+} VDEC_INFO_H264_SLICE_HDR_T;
+
+typedef struct _VDEC_INFO_SEI_REC_POINT_T_
+{
+ UINT32 u4RecoveryFrameCnt;
+ BOOL fgExactMatchFlag;
+ BOOL fgBrokenLinkFlag;
+ UCHAR ucChangingSliceGroupIdc;
+} VDEC_INFO_SEI_REC_POINT_T;
+
+typedef enum
+{
+ H264_FRAME = 0,
+ H264_TOP_FLD = 1,
+ H264_BOT_FLD = 2,
+ H264_TWO_FLD_TOP_FLD_1ST = 3,
+ H264_TWO_FLD_BOT_FLD_1ST = 4,
+ H264_THREE_FLD_TOP_FLD_REP = 5,
+ H264_THREE_FLD_BOT_FLD_REP = 6,
+ H264_FRAME_DOUBLING = 7,
+ H264_FRAME_TRIPLING = 8,
+} H264_PiC_STRUCT_T;
+
+typedef struct _VDEC_INFO_SEI_PIC_TIMING_T_
+{
+ UINT32 u4CpbRemovalDelay;
+ UINT32 u4DpbOutputDelay;
+ UINT32 u4PicStruct;
+ BOOL fgClockTimeStampFlag[3];
+ UINT32 u4CtType;
+ BOOL fgNuitFieldBasedFlag;
+ UINT32 u4CountingType;
+ BOOL fgFullTimestampFlag;
+ BOOL fgDiscontinuityFlag;
+ BOOL fgCntDroppedFlag;
+ UINT32 u4NFrames;
+ BOOL fgSecondsFlag;
+ UINT32 u4SecondsValue;
+ BOOL fgMinutesFlag;
+ UINT32 u4MinutesValue;
+ BOOL fgHoursFlag;
+ UINT32 u4HoursValue;
+ UINT32 u4TimeOffset;
+} VDEC_INFO_SEI_PIC_TIMING_T;
+
+typedef struct _VDEC_INFO_SEI_XVYCC_T_
+{
+ UINT32 u4RedData;
+ UINT32 u4GreenData;
+ UINT32 u4BlueData;
+} VDEC_INFO_SEI_XVYCC_T;
+
+typedef struct _VDEC_INFO_H264_SEI_T_
+{
+ VDEC_INFO_SEI_REC_POINT_T rRecoverPointInfo;
+ VDEC_INFO_SEI_PIC_TIMING_T rPicTimingInfo;
+ VDEC_INFO_SEI_XVYCC_T rxvYCCInfo;
+ BOOL fgFilmGrainCharacteristicsCancelFlag;
+ UINT32 u4ModelId;
+ BOOL fgSeparateColourDescriptionPresentFlag;
+ UINT32 u4FilmGrainBitDepthLumaMinus8;
+ UINT32 u4FilmGrainBitDepthChromaMinus8;
+ BOOL fgFilmGrainFullRangeFlag;
+ UINT32 u4FilmGrainColourPrimaries;
+ UINT32 u4FilmGrainTransferCharacteristics;
+ UINT32 u4FilmGrainMatrixCoefficients;
+ UINT32 u4BlendingModeId;
+ UINT32 u4Log2ScaleFactor;
+ BOOL fgCompModelPresentFlag[3];
+ UINT32 u4NumIntensityIntervalsMinus1[3];
+ UINT32 u4NumModelValuesMinus1[3];
+ UINT32 u4IntensityIntervalLowerBound[3][256];
+ UINT32 u4IntensityIntervalUpperBound[3][256];
+ UCHAR *pucCompModelValue;
+ UINT32 u4FilmGrainCharacteristicsRepetitionPeriod;
+} VDEC_INFO_H264_SEI_T;
+
+#if VDEC_MVC_SUPPORT
+typedef struct _VDEC_INFO_MVC_EXTENSION_T_
+{
+ BOOL fgSvcExtensionFlag;
+#if MVC_PATCH_1
+ BOOL fgIdrFlag;
+#else
+ BOOL fgNonIdrFlag;
+#endif
+ UCHAR ucPriorityId;
+ UINT32 u4ViewId;
+ UCHAR ucTemporalId;
+ BOOL fgAnchorPicFlag;
+ BOOL fgInterViewFlag;
+ BOOL fgReservedOneBit;
+} VDEC_INFO_MVC_EXTENSION_T;
+#endif
+
+typedef struct _VDEC_INFO_H264_LAST_INFO_T_
+{
+ BOOL fgLastMmco5;
+ UCHAR ucLastNalUnitType;
+ UCHAR ucLastPicStruct;
+ UCHAR ucLastSPSId;
+ UCHAR ucLastSPSLevel;
+ INT32 i4LastPOC;
+ INT32 i4LastTFldPOC;
+ INT32 i4LastBFldPOC;
+ INT32 i4LastRefPOC;
+ INT32 i4LastRefTFldPOC;
+ INT32 i4LastRefBFldPOC;
+ INT32 i4LastRefPOCMsb;
+ INT32 i4LastRefPOCLsb;
+ INT32 i4LastFrameNumOffset;
+ UINT32 u4LastFrameNum;
+ UINT32 u4LastPicW;
+ UINT32 u4LastPicH;
+#if VDEC_MVC_SUPPORT
+ UCHAR ucLastDpbId;
+ UINT32 u4LastViewId;
+ BOOL fgLastAnchorPicFlag;
+ BOOL fgLastInterViewFlag;
+#endif
+} VDEC_INFO_H264_LAST_INFO_T;
+
+typedef enum
+{
+ H264_DPB_STATUS_EMPTY = 0, // Free
+ H264_DPB_STATUS_READY, // After Get
+ H264_DPB_STATUS_DECODING, // After Lock
+ H264_DPB_STATUS_DECODED, // After UnLock
+ H264_DPB_STATUS_OUTPUTTED, // After Output
+ H264_DPB_STATUS_FLD_DECODED, // After 1fld UnLock
+ H264_DPB_STATUS_DEC_REF, // LOCK for decoded but ref needed
+ H264_DPB_STATUS_FLD_DEC_REF, // LOCK for decoded but ref needed
+ H264_DPB_STATUS_OUT_REF, // LOCK for outputted but ref needed
+#ifdef DRV_VDEC_VDP_RACING
+ H264_DPB_STATUS_OUT_DECODING, // After Lock
+ H264_DPB_STATUS_OUT_FLD_DEC,
+#endif
+} H264_DPB_COND_T;
+
+typedef struct _VDEC_INFO_H264_FBUF_INFO_T_
+{
+ BOOL fgNonExisting;
+
+ H264_DPB_COND_T eH264DpbStatus;
+
+ UCHAR ucFBufStatus; // 1:Top decoded, 2: Bottom decoded
+ UCHAR ucFBufRefType;
+ UCHAR ucTFldRefType;
+ UCHAR ucBFldRefType;
+
+ UCHAR ucFbmFbId;
+
+ UINT32 u4FrameNum;
+ INT32 i4FrameNumWrap;
+
+ INT32 i4PicNum;
+ INT32 i4TFldPicNum;
+ INT32 i4BFldPicNum;
+ INT32 i4LongTermPicNum;
+ INT32 i4TFldLongTermPicNum;
+ INT32 i4BFldLongTermPicNum;
+
+ ULONG u4YStartAddr;
+ ULONG u4CAddrOffset;
+
+ UCHAR ucMvFbId;
+ ULONG u4MvStartAddr;
+
+ INT32 i4POC;
+ INT32 i4TFldPOC;
+ INT32 i4BFldPOC;
+
+ UINT32 u4TFldPara;
+ UINT32 u4BFldPara; // record for MV
+ // bit 0: field_pic_flag
+ // bit 1: mbaff_flag
+ UINT32 u4FrameCnt;
+
+ BOOL fgVirtualDec;
+ UINT64 u8Pts;
+ UINT64 u8Offset;
+
+ UCHAR ucH264DFBListIdx;
+
+#if VDEC_MVC_SUPPORT
+ UINT32 u4ViewId;
+#endif
+
+#if 1//(CONFIG_DRV_VERIFY_SUPPORT)
+ UINT32 u4W;
+ UINT32 u4H;
+ UINT32 u4DecOrder;
+ UINT32 u4DramPicSize; // change name to u4CAddrOffset and add u4MVStartAddr TODO:071021
+ UINT32 u4DramPicArea; // maybe will be removed TODO:071021
+ ULONG u4Addr; // change name to u4YStartAddr TODO:071021
+
+#else
+#endif
+
+ UINT32 u4LongTermFrameIdx;
+ UINT32 u4TFldLongTermFrameIdx;
+ UINT32 u4BFldLongTermFrameIdx;
+
+ //UCHAR ucLongTermFrameIdx;
+ //UCHAR ucTFldLongTermFrameIdx;
+ //UCHAR ucBFldLongTermFrameIdx;
+#if 1 //VDEC_UFO_SUPPORT
+ UCHAR ucPicStruct;
+#endif
+} VDEC_INFO_H264_FBUF_INFO_T;
+
+#define H264_MAX_PIC_LIST_NUM 32
+typedef struct _VDEC_INFO_H264_REF_PIC_LIST_T_
+{
+ UINT32 u4RefPicCnt;
+ UCHAR ucPicType[H264_MAX_PIC_LIST_NUM];
+ UCHAR ucRefType[H264_MAX_PIC_LIST_NUM];
+ UINT32 u4FBufIdx[H264_MAX_PIC_LIST_NUM];
+} VDEC_INFO_H264_REF_PIC_LIST_T;
+
+
+typedef struct _VDEC_INFO_H264_BS_INIT_PRM_T_
+{
+ ULONG u4VLDRdPtr;
+ ULONG u4VLDWrPtr;
+ ULONG u4VFifoSa; ///< Video Fifo memory start address
+ ULONG u4VFifoEa; ///< Video Fifo memory end address
+ ULONG u4PredSa;
+} VDEC_INFO_H264_BS_INIT_PRM_T;
+
+
+typedef struct _VDEC_INFO_H264_INIT_PRM_T_
+{
+ UINT32 u4FGSeedbase;
+ UINT32 u4CompModelValue;
+ UINT32 u4FGDatabase;
+} VDEC_INFO_H264_INIT_PRM_T;
+
+
+typedef struct _VDEC_INFO_H264_P_REF_PRM_T_
+{
+ UCHAR ucFBufIdx;
+ UINT32 u4FBufInfo;
+ UINT32 u4ListIdx;
+ ULONG u4FBufYStartAddr;
+ ULONG u4FBufCAddrOffset;
+ ULONG u4FBufMvStartAddr;
+ INT32 i4TFldPOC;
+ INT32 i4BFldPOC;
+ UINT32 u4TFldPara;
+ UINT32 u4BFldPara;
+ INT32 i4TFldLongTermPicNum;
+ INT32 i4BFldLongTermPicNum;
+ INT32 i4LongTermPicNum;
+ INT32 i4PicNum;
+ INT32 i4TFldPicNum;
+ INT32 i4BFldPicNum;
+
+#if VDEC_MVC_SUPPORT
+ UINT32 u4ViewId;
+#endif
+#if 1 //VDEC_UFO_SUPPORT
+ UCHAR ucPicStruct;
+#endif
+#if (CONFIG_DRV_VERIFY_SUPPORT)
+ //UINT32 u4FBufAddr;
+#endif
+} VDEC_INFO_H264_P_REF_PRM_T;
+
+
+typedef struct _VDEC_INFO_H264_POC_PRM_T_
+{
+ UCHAR ucPicStruct;
+ BOOL fgIsFrmPic;
+ INT32 i4POC;
+ INT32 i4TFldPOC;
+ INT32 i4BFldPOC;
+} VDEC_INFO_H264_POC_PRM_T;
+
+
+typedef struct _VDEC_INFO_H264_B_REF_PRM_T_
+{
+ UCHAR ucFBufIdx;
+ UINT32 u4FBufInfo;
+ UINT32 u4ListIdx;
+ ULONG u4FBufYStartAddr;
+ ULONG u4FBufCAddrOffset;
+ ULONG u4FBufMvStartAddr;
+ INT32 i4TFldPOC;
+ INT32 i4BFldPOC;
+ UINT32 u4TFldPara;
+ UINT32 u4BFldPara;
+ INT32 i4TFldLongTermPicNum;
+ INT32 i4BFldLongTermPicNum;
+ INT32 i4LongTermPicNum;
+ INT32 i4PicNum;
+ INT32 i4TFldPicNum;
+ INT32 i4BFldPicNum;
+ UCHAR ucFBufIdx1;
+ UINT32 u4ListIdx1;
+ ULONG u4FBufYStartAddr1;
+ ULONG u4FBufCAddrOffset1;
+ ULONG u4FBufMvStartAddr1;
+ INT32 i4LongTermPicNum1;
+ INT32 i4PicNum1;
+ INT32 i4TFldPOC1;
+ INT32 i4BFldPOC1;
+ UINT32 u4TFldPara1;
+ UINT32 u4BFldPara1;
+
+#if VDEC_MVC_SUPPORT
+ UINT32 u4ViewId;
+#endif
+#if 1 //VDEC_UFO_SUPPORT
+ UCHAR ucPicStruct, ucPicStruct1;
+#endif
+#if(CONFIG_DRV_VERIFY_SUPPORT)
+ //UINT32 bFBufIdx1;
+ //UINT32 u4FBufAddr1;
+ //UINT32 u4FBufAddr; // change name to u4FBufYStartAddr TODO:071021
+ //UINT32 u4DramPicSize; // change name to u4FBufCAddrOffset and add u4FBufMVStartAddr TODO:071021
+ //UINT32 u4DramPicSize1;
+
+#endif
+} VDEC_INFO_H264_B_REF_PRM_T;
+
+
+typedef struct _VDEC_INFO_H264_DEC_PRM_T_
+{
+ UCHAR ucNalRefIdc;
+ UCHAR ucNalUnitType;
+ BOOL fgIsIDRPic;
+ BOOL fgIsRecoveryPoint;
+ BOOL fgIsFrmPic;
+ UINT32 u4MaxLongTermFrameIdx;
+ //UCHAR bMaxUsedFBufNum;
+ UCHAR ucMaxFBufNum;
+ UINT32 u4RealPicH;
+ // Decode picture setting
+ INT32 i4FrmNumOffset;
+ UCHAR ucECLevel;
+ BOOL fgUserScalingMatrixPresentFlag; // u(1)
+ BOOL fgUserScalingListPresentFlag[8]; // u(1)
+
+ VDEC_INFO_H264_SPS_T *prSPS;
+ VDEC_INFO_H264_PPS_T *prPPS;
+ VDEC_INFO_H264_SLICE_HDR_T *prSliceHdr;
+ VDEC_INFO_H264_SEI_T *prSEI;
+#if VDEC_MVC_SUPPORT
+ VDEC_INFO_MVC_EXTENSION_T rMvcExtInfo;
+#endif
+ VDEC_INFO_H264_FGT_PRM_T *prFGTPrm;
+ VDEC_INFO_H264_LAST_INFO_T rLastInfo;
+
+ VDEC_INFO_H264_FBUF_INFO_T *prCurrFBufInfo;
+
+#if(1)
+ BOOL fgIsReduceMVBuffer;
+#endif
+ BOOL fgIsAllegMvcCfg;
+
+#if 1//AVC_8320_SUPPORT
+
+ ULONG u4VLDWrapperWrok;
+ ULONG u4PPWrapperWrok;
+#endif
+} VDEC_INFO_H264_DEC_PRM_T;
+
+
+
+#endif //#ifndef _HAL_VDEC_H264_IF_H_
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_info_h265.h b/drivers/misc/mediatek/vdec/include/vdec_info_h265.h
new file mode 100644
index 000000000..61f214475
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_info_h265.h
@@ -0,0 +1,592 @@
+#ifndef _VDEC_INFO_H265_H_
+#define _VDEC_INFO_H265_H_
+
+//#include "drv_config.h"
+//#include "drv_vdec.h"
+
+#include "vdec_info_common.h"
+#include "vdec_usage.h"
+#define VDEC_MVC_SUPPORT 0
+#define HEVC_STILL_IMG_MAX_WH 16896
+
+
+typedef struct _H265_PTLFlag_Data_
+{
+
+ UINT32 u4ProfileSpace;
+ BOOL bTierFlag;
+ UINT32 u4ProfileIdc;
+ BOOL bProfileCompatibilityFlag[32];
+ UINT32 u4LevelIdc;
+
+ BOOL bProgressiveSourceFlag;
+ BOOL bInterlacedSourceFlag;
+ BOOL bNonPackedConstraintFlag;
+ BOOL bFrameOnlyConstraintFlag;
+
+} H265_PTLFlag_Data, *pH265_PTLFlag_Data;
+
+typedef struct _H265_PTL_Data_
+{
+
+ BOOL bProfilePresentFlag;
+ H265_PTLFlag_Data generalPTL;
+ H265_PTLFlag_Data subLayerPTL[6];
+ BOOL bSubLayerProfilePresentFlag[6];
+ BOOL bSubLayerLevelPresentFlag[6];
+
+} H265_PTL_Data, *pH265_PTL_Data;
+
+#define SCALING_LIST_NUM 6 ///< list number for quantization matrix
+#define SCALING_LIST_NUM_32x32 2 ///< list number for quantization matrix 32x32
+#define SCALING_LIST_REM_NUM 6 ///< remainder of QP/6
+#define SCALING_LIST_START_VALUE 8 ///< start value for dpcm mode
+#define MAX_MATRIX_COEF_NUM 64 ///< max coefficient number for quantization matrix
+#define MAX_MATRIX_SIZE_NUM 8 ///< max size number for quantization matrix
+#define SCALING_LIST_DC 16 ///< default DC value
+
+enum ScalingListDIR
+{
+ SCALING_LIST_SQT = 0,
+ SCALING_LIST_VER,
+ SCALING_LIST_HOR,
+ SCALING_LIST_DIR_NUM
+};
+enum ScalingListSize
+{
+ SCALING_LIST_4x4 = 0,
+ SCALING_LIST_8x8,
+ SCALING_LIST_16x16,
+ SCALING_LIST_32x32,
+ SCALING_LIST_SIZE_NUM
+};
+
+typedef struct _H265_ScalingList_Data_
+{
+ INT32 i4ScalingListDC[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; //!< the DC value of the matrix coefficient for 16x16
+ BOOL bScalingListPredModeFlag [SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM];
+ UINT32 u4RefMatrixId[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; //!< RefMatrixID
+ INT32 *pScalingListDeltaCoef [SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; //!< quantization matrix
+ BOOL bUseTransformSkip;
+
+
+} H265_SL_Data, *pH265_SL_Data;
+
+
+#define MAX_NUM_REF_PICS 32
+typedef struct _H265_RPS_Data_
+{
+
+ UINT32 u4NumberOfPictures;
+ UINT32 u4NumberOfNegativePictures;
+ UINT32 u4NumberOfPositivePictures;
+ UINT32 u4NumberOfLongtermPictures;
+ INT32 i4DeltaPOC[MAX_NUM_REF_PICS];
+ INT32 i4POC[MAX_NUM_REF_PICS];
+ BOOL bUsed[MAX_NUM_REF_PICS];
+ BOOL bInterRPSPrediction;
+ UINT32 u4DeltaRIdxMinus1;
+ UINT32 u4DeltaRPS;
+ UINT32 u4NumRefIdc;
+ UINT32 u4RefIdc[17];
+ BOOL bCheckLTMSB[MAX_NUM_REF_PICS];
+ UINT32 u4PocLSBLT[MAX_NUM_REF_PICS];
+ UINT32 i4DeltaPOCMSBCycleLT[MAX_NUM_REF_PICS];
+ BOOL bDeltaPocMSBPresentFlag[MAX_NUM_REF_PICS];
+
+} H265_RPS_Data, *pH265_RPS_Data;
+
+
+#define MAX_CPB_CNT 32 ///< Upper bound of (cpb_cnt_minus1 + 1)
+#define MAX_TLAYER 8 ///< max number of temporal layer
+
+typedef struct _H265_SUB_HRD_Data_ //HRD Sub Layer Info
+{
+
+ BOOL bFixedPicRateFlag;
+ BOOL bFixedPicRateWithinCvsFlag;
+ UINT32 u4ElementalDurationInTcMinus1;
+ BOOL bLowDelayHrdFlag;
+ UINT32 u4CpbCntMinus1;
+ UINT32 u4BitRateValueMinus1[MAX_CPB_CNT][2];
+ UINT32 u4CpbSizeValueMinus1[MAX_CPB_CNT][2];
+ UINT32 u4DucpbSizeValueMinus1[MAX_CPB_CNT][2];
+ UINT32 u4DuBitRateValueMinus1[MAX_CPB_CNT][2];
+ BOOL bCbrFlag[MAX_CPB_CNT][2];
+
+} H265_SUB_HRD_Data;
+
+
+typedef struct _H265_HRD_Data_ //HRD Sub Layer Info
+{
+
+ BOOL bNalHrdParametersPresentFlag;
+ BOOL bVclHrdParametersPresentFlag;
+ BOOL bSubPicCpbParamsPresentFlag;
+ UINT32 u4TickDivisorMinus2;
+ UINT32 u4DuCpbRemovalDelayLengthMinus1;
+ BOOL bSubPicCpbParamsInPicTimingSEIFlag;
+ UINT32 u4DpbOutputDelayDuLengthMinus1;
+
+ UINT32 u4BitRateScale;
+ UINT32 u4CpbSizeScale;
+ UINT32 u4DucpbSizeScale;
+ UINT32 u4InitialCpbRemovalDelayLengthMinus1;
+ UINT32 u4AuCpbRemovalDelayLengthMinus1;
+ UINT32 u4DpbOutputDelayLengthMinus1;
+ H265_SUB_HRD_Data rSubLayerHRD[MAX_TLAYER];
+
+} H265_HRD_Data;
+
+
+typedef struct _H265_VUI_Data_
+{
+ BOOL bAspectRatioInfoPresentFlag;
+ INT32 i4AspectRatioIdc;
+ INT32 i4SarWidth;
+ INT32 i4SarHeight;
+ BOOL bOverscanInfoPresentFlag;
+ BOOL bOverscanAppropriateFlag;
+ BOOL bVideoSignalTypePresentFlag;
+ INT32 i4VideoFormat;
+ BOOL bVideoFullRangeFlag;
+ BOOL bColourDescriptionPresentFlag;
+ INT32 i4ColourPrimaries;
+ INT32 i4TransferCharacteristics;
+ INT32 i4MatrixCoefficients;
+ BOOL bChromaLocInfoPresentFlag;
+ INT32 i4ChromaSampleLocTypeTopField;
+ INT32 i4ChromaSampleLocTypeBottomField;
+ BOOL bNeutralChromaIndicationFlag;
+ BOOL bFieldSeqFlag;
+
+ //DefaultDisplayWindow
+ BOOL bDefaultDisplayWindowEnabledFlag;
+ INT32 i4DefaultDisplayWinLeftOffset;
+ INT32 i4DefaultDisplayWinRightOffset;
+ INT32 i4DefaultDisplayWinTopOffset;
+ INT32 i4DefaultDisplayWinBottomOffset;
+
+ BOOL bFrameFieldInfoPresentFlag;
+ BOOL bHrdParametersPresentFlag;
+ H265_HRD_Data rHdrParameters;
+
+ BOOL bBitstreamRestrictionFlag;
+ BOOL bTilesFixedStructureFlag;
+ BOOL bMotionVectorsOverPicBoundariesFlag;
+ BOOL bRestrictedRefPicListsFlag;
+ INT32 i4MinSpatialSegmentationIdc;
+ INT32 i4MaxBytesPerPicDenom;
+ INT32 i4MaxBitsPerMinCuDenom;
+ INT32 i4Log2MaxMvLengthHorizontal;
+ INT32 i4Log2MaxMvLengthVertical;
+
+ //TimingInfo
+ BOOL bTimingInfoPresentFlag;
+ UINT32 u4NumUnitsInTick;
+ UINT32 u4TimeScale;
+ BOOL bPocProportionalToTimingFlag;
+ INT32 i4NumTicksPocDiffOneMinus1;
+
+} H265_VUI_Data;
+
+
+#define MAXnum_ref_frames_in_pic_order_cnt_cycle 256
+typedef struct _H265_SPS_Data_
+{
+
+ BOOL bSPSValid; // indicates the parameter set is valid
+
+ UINT32 u4VPSId; // u(4)
+ UINT32 u4MaxTLayersMinus1; // u(3)
+ BOOL bTemporalIdNestingFlag; // u(1)
+ H265_PTL_Data rSPS_PTL; // ProfileTierLevel
+
+ UINT32 u4SeqParameterSetId; // ue(v)
+ UINT32 u4ChromaFormatIdc; // ue(v)
+ BOOL bSeparateColourPlaneFlag;
+ UINT32 u4PicWidthInLumaSamples; // ue(v)
+ UINT32 u4PicHeightInLumaSamples; // ue(v)
+
+ BOOL bConformanceWindowFlag; // u(1)
+ UINT32 u4ConfWinLeftOffset; // ue(v)
+ UINT32 u4ConfWinRightOffset; // ue(v)
+ UINT32 u4ConfWinTopOffset; // ue(v)
+ UINT32 u4ConfWinBottomOffset; // ue(v)
+
+ UINT32 u4SubWidthC;
+ UINT32 u4SubHeightC;
+ UINT32 u4FrameCropLeftOffset;
+ UINT32 u4FrameCropRightOffset;
+ UINT32 u4FrameCropTopOffset;
+ UINT32 u4FrameCropBottomOffset;
+
+ UINT32 u4BitDepthLumaMinus8; // ue(v)
+ UINT32 u4BitDepthChromaMinus8; // ue(v)
+ UINT32 u4QpBDOffsetY;
+ UINT32 u4QpBDOffsetC; // ue(v)
+
+ UINT32 u4Log2MaxPicOrderCntLsbMinus4; // ue(v)
+
+ //[notice] spec conflict u4MaxDecPicBufferingMinux1? u4MaxLatencyIncreasePlus1?
+ UINT32 u4MaxDecPicBuffering[8]; // ue(v)
+ UINT32 u4NumReorderPics[8]; // ue(v)
+ UINT32 u4MaxLatencyIncrease[8]; // ue(v)
+
+
+ UINT32 u4Log2MinCodingBlockSizeMinus3; // ue(v)
+ UINT32 u4Log2DiffMaxMinCodingBlockSize; // ue(v)
+ UINT32 u4MaxCUWidth;
+ UINT32 u4MaxCUHeight;
+
+ UINT32 u4Log2MinTransformBlockSizeMinus2; // ue(v)
+ UINT32 u4Log2DiffMaxMinTtransformBlockSize; // ue(v)
+ UINT32 u4QuadtreeTUMaxDepthInter; // ue(v)
+ UINT32 u4QuadtreeTUMaxDepthIntra; // ue(v)
+ UINT32 u4MaxTrSize;
+ UINT32 u4MaxCUDepth;
+
+ BOOL bScalingListFlag; // u(1)
+ BOOL bScalingListPresentFlag; // u(1)
+ BOOL bSL_Init;
+ H265_SL_Data rSPS_ScalingList; //ScalingList
+
+ BOOL bUseAMP; // u(1)
+ BOOL bUseSAO; // u(1)
+ BOOL bUsePCM; // u(1)
+
+ UINT32 u4PCMBitDepthLumaMinus1; // u(4)
+ UINT32 u4PCMBitDepthChromaMinus1; // u(4)
+ UINT32 u4PCMLog2LumaMinSizeMinus3; // ue(v)
+ UINT32 u4PCMLog2LumaMaxSize; // ue(v)
+ BOOL bPCMFilterDisableFlag; // u(1)
+
+ UINT32 u4NumShortTermRefPicSets; // ue(v)
+ pH265_RPS_Data pShortTermRefPicSets[64]; //RPS pointer array
+
+ BOOL bLongTermRefsPresent; // u(1)
+ UINT32 u4NumLongTermRefPicSPS; // ue(v)
+ UINT32 u4LtRefPicPocLsbSps[33]; // u(BitsForPOC)
+ BOOL bUsedByCurrPicLtSPSFlag[33]; // u(1)
+ UINT32 u4NumRefFrames;
+
+ BOOL bTMVPFlagsPresent; // u(1)
+ BOOL bUseStrongIntraSmoothing; // u(1)
+ BOOL bVuiParametersPresentFlag; // u(1)
+ H265_VUI_Data rVUI; // vui_seq_parameters_t
+ BOOL bSPSExtensionFlag; // u(1)
+ // read sps_extension_data_flag
+
+} H265_SPS_Data, *pH265_SPS_Data;
+
+
+#define MAX_TILES_WITTH_HEIGHT 64
+
+typedef struct _H265_PPS_Data_
+{
+
+ BOOL bPPSValid; // indicates the parameter set is valid
+ UINT32 u4PicParameterSetId; // ue(v)
+ UINT32 u4SeqParameterSetId; // ue(v)
+
+
+ BOOL bDependentSliceSegmentsEnabledFlag; // u(1)
+ BOOL bOutputFlagPresentFlag; // u(1)
+ UINT32 u4NumExtraSliceHeaderBits; // u(3)
+ BOOL bSignHideFlag; // u(1)
+ BOOL bCabacInitPresentFlag; // u(1)
+ UINT32 u4NumRefIdxL0DefaultActiveMinus1; // ue(v)
+ UINT32 u4NumRefIdxL1DefaultActiveMinus1; // ue(v)
+ INT32 i4PicInitQPMinus26; //se(v)
+ BOOL bConstrainedIntraPredFlag; // u(1)
+ BOOL bTransformSkipEnabledFlag; // u(1)
+ BOOL bCuQPDeltaEnabledFlag; // u(1)
+
+ UINT32 u4DiffCuQPDeltaDepth; // ue(v)
+ INT32 i4PPSCbQPOffset; //se(v)
+ INT32 i4PPSCrQPOffset; //se(v)
+
+ BOOL bPPSSliceChromaQpFlag; // u(1)
+ BOOL bWPPredFlag; // u(1)
+ BOOL bWPBiPredFlag; // u(1)
+ BOOL bTransquantBypassEnableFlag; // u(1)
+ BOOL bTilesEnabledFlag; // u(1)
+ BOOL bEntropyCodingSyncEnabledFlag; // u(1)
+
+ // if bTilesEnabledFlag
+ UINT32 u4NumColumnsMinus1; // ue(v)
+ UINT32 u4NumRowsMinus1; // ue(v)
+ BOOL bUniformSpacingFlag; // u(1)
+ UINT32 u4ColumnWidthMinus1[MAX_TILES_WITTH_HEIGHT]; // ue(v)
+ UINT32 u4RowHeightMinus1[MAX_TILES_WITTH_HEIGHT]; // ue(v)
+ BOOL bLoopFilterAcrossTilesEnabledFlag; // u(1)
+
+ BOOL bLoopFilterAcrossSlicesEnabledFlag; // u(1)
+ BOOL bDeblockingFilterControlPresentFlag; // u(1)
+
+ BOOL bDeblockingFilterOverrideEnabledFlag; // u(1)
+ BOOL bPicDisableDeblockingFilterFlag; // u(1)
+
+ INT32 i4DeblockingFilterBetaOffsetDiv2; //se(v)
+ INT32 i4DeblockingFilterTcOffsetDiv2; //se(v)
+
+ BOOL bPPSScalingListPresentFlag; // u(1)
+ BOOL bSL_Init;
+ H265_SL_Data rPPS_ScalingList; //ScalingList
+ BOOL bListsModificationPresentFlag; // u(1)
+ UINT32 u4Log2ParallelMergeLevelMinus2; // ue(v)
+ BOOL bSliceHeaderExtensionPresentFlag; // u(1)
+ BOOL bPPSExtensionFlag; // u(1)
+
+} H265_PPS_Data, *pH265_PPS_Data;
+
+
+typedef struct _H265_Slice_Hdr_Data_
+{
+ BOOL bFirstSliceSegmentInPic;
+ UINT32 u4PPSID;
+ BOOL bDependentSliceSegmentFlag;
+ UINT32 u4SliceSegmentAddress;
+ UINT32 u4SliceType;
+ UINT32 u4NalType;
+ BOOL bPicOutputFlag;
+ UINT32 u4ColourPlaneID;
+
+ INT32 i4POCMsb;
+ INT32 i4POCLsb;
+ INT32 i4POC;
+ H265_RPS_Data rLocalRPS;
+ pH265_RPS_Data pShortTermRefPicSets;
+
+ UINT32 u4NumOfLongTermSPS;
+ UINT32 u4NumOfLongTermPics;
+
+ BOOL bNumRefIdxActiveOverrideFlag;
+ BOOL bTMVPFlagsPresent;
+ BOOL bSaoEnabledFlag;
+ BOOL bSaoEnabledFlagChroma;
+
+ INT32 i4NumRefIdx[3]; // for multiple reference of current slice
+ BOOL bRefPicListModificationFlagL0;
+ BOOL bMvdL1ZeroFlag;
+ BOOL bCabacInitFlag;
+ BOOL bColFromL0Flag;
+ UINT32 u4ColRefIdx;
+ UINT32 u4FiveMinusMaxNumMergeCand;
+
+ INT32 i4SliceQp;
+ INT32 i4SliceQpDeltaCb;
+ INT32 i4SliceQpDeltaCr;
+
+ BOOL bDeblockingFilterOverrideFlag;
+ BOOL bDeblockingFilterDisableFlag;
+ INT32 i4DeblockingFilterBetaOffsetDiv2;
+ INT32 i4DeblockingFilterTcOffsetDiv2;
+ BOOL bLoopFilterAcrossSlicesEnabledFlag;
+ UINT32 u4SliceHeaderExtensionLength;
+
+ UINT32 u4NumEntryPointOffsets;
+ UINT32 u4OffsetLenMinus1;
+ BOOL bNoRaslOutputFlag;
+
+} H265_Slice_Hdr_Data, *pH265_Slice_Hdr_Data;
+
+
+typedef struct _H265_SEI_Data_
+{
+
+} H265_SEI_Data;
+
+
+typedef struct _VDEC_INFO_H265_TILE_INFO_T
+{
+ UINT32 u4TileWidth;
+ UINT32 u4TileHeight;
+ UINT32 u4RightEdgePosInCU;
+ UINT32 u4BottomEdgePosInCU;
+ UINT32 u4FirstCUAddr;
+
+} VDEC_INFO_H265_TILE_INFO_T;
+
+#define TILE_MAX_NUM 256
+typedef struct _VDEC_INFO_H265_PIC_INFO_T_
+{
+ INT32 bLowDelayFlag;
+ INT32 i4PocDiffList0[16];
+ INT32 i4PocDiffList1[16];
+ INT32 i4LongTermList0[16];
+ INT32 i4LongTermList1[16];
+ INT32 i4BuffIdList0[16];
+ INT32 i4BuffIdList1[16];
+ INT32 i4RefListNum;
+ INT32 i4List0DecOrderNo[16];
+ INT32 i4List1DecOrderNo[16];
+
+ INT32 i4DpbLTBuffCnt;
+ INT32 i4DpbLTBuffId[16];
+
+ //RPS info
+ INT32 i4StrNumDeltaPocs;
+ INT32 i4MaxStrNumNegPosPics;
+ INT32 i4StrNumNegPosPics;
+ INT32 i4NumLongTerm;
+ INT32 i4NumLongTermSps;
+
+ UINT32 u4PicWidthInCU;
+ UINT32 u4PicHeightInCU;
+ VDEC_INFO_H265_TILE_INFO_T rTileInfo[TILE_MAX_NUM];
+
+ UINT32 u4SliceCnt;
+ UINT32 u4IqSramAddrAccCnt;
+
+} VDEC_INFO_H265_PIC_INFO_T;
+
+
+typedef struct _VDEC_INFO_H265_LAST_INFO_T_
+{
+ BOOL fgLastMmco5;
+ UCHAR ucLastNalUnitType;
+ UCHAR ucLastPicStruct;
+ UCHAR ucLastSPSId;
+ UCHAR ucLastSPSLevel;
+ INT32 i4LastPOC;
+ INT32 i4LastRefPOC;
+ INT32 i4LastRefPOCMsb;
+ INT32 i4LastRefPOCLsb;
+ INT32 i4LastFrameNumOffset;
+ UINT32 u4LastFrameNum;
+ UINT32 u4LastPicW;
+ UINT32 u4LastPicH;
+
+} VDEC_INFO_H265_LAST_INFO_T;
+
+typedef enum
+{
+ H265_DPB_STATUS_EMPTY = 0, // Free
+ H265_DPB_STATUS_READY, // After Get
+ H265_DPB_STATUS_DECODING, // After Lock
+ H265_DPB_STATUS_DECODED, // After UnLock
+ H265_DPB_STATUS_OUTPUTTED, // After Output
+ H265_DPB_STATUS_FLD_DECODED, // After 1fld UnLock
+ H265_DPB_STATUS_DEC_REF, // LOCK for decoded but ref needed
+ H265_DPB_STATUS_FLD_DEC_REF, // LOCK for decoded but ref needed
+ H265_DPB_STATUS_OUT_REF, // LOCK for outputted but ref needed
+#ifdef DRV_VDEC_VDP_RACING
+ H265_DPB_STATUS_OUT_DECODING, // After Lock
+ H265_DPB_STATUS_OUT_FLD_DEC,
+#endif
+} H265_DPB_COND_T;
+
+typedef struct _VDEC_INFO_H265_FBUF_INFO_T_
+{
+ H265_DPB_COND_T eH265DpbStatus;
+
+ UCHAR ucFBufStatus;
+ UCHAR ucFBufRefType;
+
+ INT32 i4POC;
+ UINT32 u4PicCnt;
+ UINT32 u4POCBits;
+ BOOL bLtMsbPresentFlag;
+ BOOL bFirstSliceReferenced;
+
+ UINT32 u4YStartAddr;
+ UINT32 u4CAddrOffset;
+ UINT32 u4MvStartAddr;
+
+ // for UFO Mode
+ UINT32 u4YLenStartAddr;
+ UINT32 u4CLenStartAddr;
+ UINT32 u4UFOLenYsize;
+ UINT32 u4UFOLenCsize;
+ UINT32 u4PicSizeCBS;
+ UINT32 u4PicSizeYBS;
+ BOOL bIsUFOEncoded;
+
+#if 1//(CONFIG_DRV_VERIFY_SUPPORT)
+ UINT32 u4W;
+ UINT32 u4H;
+ UINT32 u4DecOrder;
+ UINT32 u4DramPicSize;
+ UINT32 u4DramPicArea;
+ UINT32 u4DramMvSize;
+ UINT32 u4Addr; // change name to u4YStartAddr TODO:071021
+#endif
+ BOOL bIsCopied;
+ BOOL bIsMain10;
+ BOOL bUsedByCurr;
+ BOOL bUsedAsLongTerm;
+
+
+} VDEC_INFO_H265_FBUF_INFO_T;
+
+#define H265_MAX_PIC_LIST_NUM 32
+typedef struct _VDEC_INFO_H265_REF_PIC_LIST_T_
+{
+ UINT32 u4RefPicCnt;
+ UINT32 u4FBufIdx[H265_MAX_PIC_LIST_NUM];
+
+} VDEC_INFO_H265_REF_PIC_LIST_T;
+
+
+typedef struct _VDEC_INFO_H265_BS_INIT_PRM_T_
+{
+ UINT32 u4VLDRdPtr;
+ UINT32 u4VLDWrPtr;
+ UINT32 u4VFifoSa; ///< Video Fifo memory start address
+ UINT32 u4VFifoEa; ///< Video Fifo memory end address
+ UINT32 u4PredSa;
+} VDEC_INFO_H265_BS_INIT_PRM_T;
+
+
+typedef struct _VDEC_INFO_H265_INIT_PRM_T_
+{
+ UINT32 u4FGSeedbase;
+ UINT32 u4CompModelValue;
+ UINT32 u4FGDatabase;
+} VDEC_INFO_H265_INIT_PRM_T;
+
+
+typedef struct _VDEC_INFO_H265_DEC_PRM_T_
+{
+
+ INT32 i4RAPOC;
+ INT32 i4CRAPOC;
+ INT32 i4PrePOC;
+ INT32 i4PrevT0POCLsb;
+ INT32 i4PrevT0POCMsb;
+ BOOL fgUserScalingMatrixPresentFlag; // u(1)
+ BOOL fgUserScalingListPresentFlag[8]; // u(1)
+ BOOL bFirstSliceInSequence;
+ BOOL bRefreshPending;
+ BOOL bPrevRAPisBLA;
+
+ UINT32 u4NuhTemporalId;
+ UCHAR ucMaxFBufNum;
+ // Decode picture setting
+
+ H265_SPS_Data *prSPS;
+ H265_PPS_Data *prPPS;
+ H265_Slice_Hdr_Data *prSliceHdr;
+ H265_SEI_Data *prSEI;
+ VDEC_INFO_H265_LAST_INFO_T rLastInfo;
+ VDEC_INFO_H265_FBUF_INFO_T *prCurrFBufInfo;
+
+ // For UFO mode verification
+ BOOL bIsUFOMode;
+ UINT32 u4RefUFOEncoded;
+
+ // For Error concealment
+ UCHAR ucPreFBIndex;
+ BOOL bNoDecode;
+
+ BOOL fgIsReduceMVBuffer;
+ UINT32 u4ReadPtrOffset;
+ UINT32 u4PreReadPtr;
+
+} VDEC_INFO_H265_DEC_PRM_T;
+
+
+
+#endif //#ifndef _HAL_VDEC_H265_IF_H_
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_info_mpeg.h b/drivers/misc/mediatek/vdec/include/vdec_info_mpeg.h
new file mode 100644
index 000000000..9539020f1
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_info_mpeg.h
@@ -0,0 +1,270 @@
+#ifndef _VDEC_INFO_MPEG_H_
+#define _VDEC_INFO_MPEG_H_
+
+//#include "drv_config.h"
+#include "chip_ver.h"
+
+#include "type.h"
+#include <mach/mt_typedefs.h>
+
+enum Vop_Coding_Type
+{
+ VCT_I = 0x0,
+ VCT_P = 0x1,
+ VCT_B = 0x2,
+ VCT_S = 0x3
+};
+
+
+enum Sprite_Enable
+{
+ SPRITE_NOT_USED = 0x0,
+ STATIC = 0x1,
+ GMC = 0x2
+};
+
+typedef struct _VDEC_INFO_MPEG_DIR_MODE_T_
+{
+ UINT32 u4Trd;
+ UINT32 u4Trb;
+ UINT32 u4Trdi;
+ UINT32 u4Trbi;
+ UINT32 u4TFrm;
+} VDEC_INFO_MPEG_DIR_MODE_T;
+
+
+typedef struct _VDEC_INFO_MPEG_VFIFO_PRM_T_
+{
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560)
+ UINT32 u4CodeType; ///< Video decoding type
+#endif
+ ULONG u4VFifoSa; ///< Video Fifo memory start address
+ ULONG u4VFifoEa; ///< Video Fifo memory end address
+} VDEC_INFO_MPEG_VFIFO_PRM_T;
+
+
+typedef struct _VDEC_INFO_MPEG_BS_INIT_PRM_T_
+{
+ ULONG u4ReadPointer;
+ ULONG u4WritePointer;
+ ULONG u4VFifoSa; ///< Video Fifo memory start address
+ ULONG u4VFifoEa; ///< Video Fifo memory end address
+} VDEC_INFO_MPEG_BS_INIT_PRM_T;
+
+
+typedef struct _VDEC_INFO_MPEG_QANTMATRIX_T_
+{
+ UCHAR ucQuantMatrix[64]; ///< Quantization matrix array
+} VDEC_INFO_MPEG_QANTMATRIX_T;
+
+
+typedef struct _VDEC_INFO_MPEG2_PIC_PRM_T_
+{
+ // Picture structure: FRM_PIC, TOP_FLD_PIC, BTM_FLD_PIC
+ UCHAR ucPicStruct;
+ // picture coding type: I_TYPE, B_TYPE, P_TYPE
+ UCHAR ucPicCdTp;
+ // frame_pred_frame_dct
+ UCHAR ucFrmPredFrmDct;
+ // concealment_motion_vectors
+ UCHAR ucConcMotVec;
+ // q_scale_type
+ UCHAR ucQScaleType;
+ // top field first
+ UCHAR ucTopFldFirst;
+ // full_pel_forward_vector
+ UCHAR ucFullPelFordVec;
+ // full_pel_backward_vector
+ UCHAR ucFullPelBackVec;
+ // intra_vld_format
+ UCHAR ucIntraVlcFmt;
+ // intra_dc_precision
+ UCHAR ucIntraDcPre;
+ // alternate_scan
+ UCHAR ucAltScan;
+
+ UCHAR pucfcode[2][2];
+ UCHAR ucFordFCode;
+ UCHAR ucBackFCode;
+} VDEC_INFO_MPEG2_PIC_PRM_T;
+
+
+typedef struct _VDEC_INFO_DIVX3_PIC_PRM_T_
+{
+ UCHAR ucAltIAcChromDct;
+ UCHAR ucAltIAcChromDctIdx;
+ UCHAR ucAltIAcLumDct;
+ UCHAR ucAltIAcLumDctIdx;
+ UCHAR ucAltIDcDct;
+ UCHAR ucHasSkip;
+ UCHAR ucAltPAcDct;
+ UCHAR ucAltPAcDctIdx;
+ UCHAR ucAltPDcDct;
+ UCHAR ucAltMv;
+ UCHAR ucFrameMode;
+ UCHAR ucSliceBoundary[5];
+} VDEC_INFO_DIVX3_PIC_PRM_T;
+
+
+typedef struct _VDEC_INFO_MPEG4_VOL_PRM_T_
+{
+ UCHAR ucShortVideoHeader;
+ UINT16 u2VopTimeIncrementResolution;
+ UCHAR ucInterlaced;
+ UCHAR ucQuantType;
+ UCHAR ucQuarterSample;
+ UCHAR ucResyncMarkerDisable;
+ UCHAR ucDataPartitioned;
+ UCHAR ucReversibleVlc;
+ UCHAR ucSourceFormat; // for short video header
+ UCHAR ucSorenson; //Sorenson H263
+} VDEC_INFO_MPEG4_VOL_PRM_T;
+
+
+typedef struct _VDEC_INFO_MPEG_GMC_PRM_T_
+{
+ UCHAR ucEffectiveWarpingPoints;
+ INT32 i4GmcYMvX;
+ INT32 i4GmcYMvY;
+ INT32 i4GmcCMvX;
+ INT32 i4GmcCMvY;
+} VDEC_INFO_MPEG_GMC_PRM_T;
+
+
+typedef struct _VDEC_INFO_MPEG4_VOP_PRM_T_
+{
+ UCHAR ucIntraDcVlcThr;
+ UCHAR fgTopFldFirst;
+ UCHAR ucFordFCode;
+ UCHAR ucBackFCode;
+ UCHAR ucBRefCdTp;
+ UCHAR fgAlternateVerticalScanFlag;
+ VDEC_INFO_MPEG_DIR_MODE_T *prDirMd; // for direct mode
+ VDEC_INFO_MPEG_GMC_PRM_T *prGmcPrm;
+} VDEC_INFO_MPEG4_VOP_PRM_T;
+
+
+typedef struct _VDEC_INFO_M4V_DEC_PRM_T_
+{
+ VDEC_INFO_MPEG4_VOL_PRM_T *prVol;
+ VDEC_INFO_MPEG4_VOP_PRM_T *prVop;
+} VDEC_INFO_M4V_DEC_PRM_T;
+
+
+typedef struct _VDEC_INFO_MPEG4_WORK_BUF_SA_T_
+{
+ ULONG u4DcacSa;
+ ULONG u4MvecSa;
+ ULONG u4Bmb1Sa;
+ ULONG u4Bmb2Sa;
+ ULONG u4BcodeSa;
+ ULONG u4VldWrapperSa;
+ ULONG u4PPWrapperSa;
+ //6589NEW 2.4, 2.5, 4.1
+ ULONG u4DataPartitionSa;
+ ULONG u4NotCodedSa;
+ ULONG u4MvDirectSa;
+} VDEC_INFO_MPEG4_WORK_BUF_SA_T;
+
+
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8580)
+typedef struct _VDEC_INFO_MPEG4_WORK_BUF_SZ_T_
+{
+ UINT32 u4DcacSize;
+ UINT32 u4BcodeSize;
+ UINT32 u4MVSize;
+ UINT32 u4MB1Size;
+ UINT32 u4MB2Size;
+ //6589NEW 2.3, 2.6
+ UINT32 u4DataPartitionSize;
+ UINT32 u4NotCodedSize;
+} VDEC_INFO_MPEG4_WORK_BUF_SZ_T;
+#endif
+
+
+typedef struct _VDEC_INFO_MPEG4_DEC_PRM_T_
+{
+ // common for MPEG4 and DivX3
+ UCHAR ucVopCdTp; // in MPEG4 VOP layer
+ UCHAR ucVopQuant; // in MPEG4 VOP layer
+ UCHAR ucVopRoundingType; // in MPEG4 VOP layer
+
+ // for unrestricted mv
+ UINT32 u4UmvPicW;
+ UINT32 u4UmvPicH;
+ UINT32 u4QPelType;
+ UINT32 u4CMvType;
+ VDEC_INFO_MPEG4_WORK_BUF_SA_T rMpeg4WorkBufSa;
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8580)
+ VDEC_INFO_MPEG4_WORK_BUF_SZ_T rMpeg4WorkBufSize;
+#endif
+ union
+ {
+ VDEC_INFO_DIVX3_PIC_PRM_T rDx3DecPrm;
+ VDEC_INFO_M4V_DEC_PRM_T rM4vDecPrm;
+ } rDep;
+} VDEC_INFO_MPEG4_DEC_PRM_T;
+
+
+typedef struct _VDEC_INFO_MPEG_FRAME_BUF_SA_T_
+{
+ ULONG u4Pic0YSa;
+ ULONG u4Pic0CSa;
+ ULONG u4Pic1YSa;
+ ULONG u4Pic1CSa;
+ ULONG u4Pic2YSa;
+ ULONG u4Pic2CSa;
+} VDEC_INFO_MPEG_FRAME_BUF_SA_T;
+
+
+typedef struct _VDEC_INFO_MPEG_PP_INFO_T_
+{
+ BOOL fgPpEnable;
+ BOOL fgPpDemoEn;
+ UINT8 u1PpLevel;
+ UINT8 au1MBqp[4];
+ UINT32 u4PpYBufSa;
+ UINT32 u4PpCBufSa;
+} VDEC_INFO_MPEG_PP_INFO_T;
+
+
+typedef struct _VDEC_INFO_MPEG_DEC_PRM_T_
+{
+ // MPEG version: 1, 2, 3, 4 (3: DivX 3.11)
+ UCHAR ucMpegVer;
+ UCHAR ucDecFld;
+ UINT32 u4FRefBufIdx;
+
+ // Decode picture setting
+ BOOL fgB21Mode;
+ BOOL fgRetErr;
+ BOOL fgIgnoreVdo;
+ BOOL fgDec2ndFld;
+ UINT32 u4DecXOff;
+ UINT32 u4DecYOff;
+ UINT32 u4DecW;
+ UINT32 u4DecH;
+ UINT32 u4MaxMbl;
+ UINT32 u4BBufStart;
+ UINT32 u4DramPicSize;
+ UINT32 u4DramPicArea;
+ VDEC_INFO_MPEG_FRAME_BUF_SA_T rMpegFrameBufSa;
+ VDEC_INFO_MPEG_PP_INFO_T rMpegPpInfo;
+ union
+ {
+ VDEC_INFO_MPEG2_PIC_PRM_T rMp2PicPrm;
+ VDEC_INFO_MPEG4_DEC_PRM_T rMp4DecPrm;
+ } rPicLayer;
+} VDEC_INFO_MPEG_DEC_PRM_T;
+
+
+typedef struct _VDEC_HAL_DEC_MPEG_ERR_INFO_T_
+{
+ UINT32 u4MpegErrCnt; ///< Video decode error count
+ UINT32 u4MpegErrRow; ///< Video decode error mb row
+ UINT32 u4MpegErrType; ///< Video decode error type
+ UINT16 u2MpegMBErrCnt;
+} VDEC_INFO_MPEG_ERR_INFO_T;
+
+#endif //#ifndef _VDEC_INFO_MPEG_H_
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_info_rm.h b/drivers/misc/mediatek/vdec/include/vdec_info_rm.h
new file mode 100644
index 000000000..2be7282be
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_info_rm.h
@@ -0,0 +1,234 @@
+#ifndef _VDEC_INFO_RM_H_
+#define _VDEC_INFO_RM_H_
+
+//#include "drv_config.h"
+
+#if 1 //(!CONFIG_DRV_VERIFY_SUPPORT)
+#include "vdec_usage.h"
+#include "vdec_info_common.h"
+#else
+#include "x_stl_lib.h"
+//#include "x_assert.h"
+//#include "u_pbinf.h"
+#endif
+
+
+#define RM_DRV_IMAGERESIZER_ENABLE
+
+#define VDECRM_DRV_EV_SCALE_DONE (1<<0)
+#define VDECRM_DRV_EV_SCALE_ABORT (1<<1)
+#define VDECRM_DRV_EV_SCALE_ERR (1<<2)
+#define VDECRM_DRV_EV_SCALE_READY (1<<3)
+#define VDECRM_DRV_EV_SCALE_TIMEOUT (1<<4)
+
+
+
+#define RM_MVHWBUF_SZ 0x1FE00
+#define RM_VLDPRED_SZ 0xC000
+
+#define RPR_WORK_Y_SZ (1920*1088)
+#define RPR_WORK_C_SZ (1920*1088 / 2)
+//#define PIC_Y_SZ (1920*1088)
+//#define PIC_C_SZ (1920*1088 / 2)
+
+#define RM_RSZWORKBUF_SZ 0x1800
+
+typedef enum
+{
+ RM_INTRAPIC, /* 0 (00) */
+ RM_FORCED_INTRAPIC, /* 1 (01) */
+ RM_INTERPIC, /* 2 (10) */
+ RM_TRUEBPIC /* 3 (11) */
+} EnumRMPicCodType;
+
+typedef struct _VDEC_INFO_RM_VFIFO_PRM_T_
+{
+ UINT32 u4VFifoSa; ///< Video Fifo memory start address
+ UINT32 u4VFifoEa; ///< Video Fifo memory end address
+} VDEC_INFO_RM_VFIFO_PRM_T;
+
+typedef struct _VDEC_HAL_DEC_RM_ERR_INFO_T_
+{
+ UINT32 u4RMErrCnt; ///< Video decode error count
+ UINT32 u4RMErrRow; ///< Video decode error mb row
+ UINT32 u4RMErrType; ///< Video decode error type
+ UINT16 u2RMMBErrCnt;
+} VDEC_INFO_RM_ERR_INFO_T;
+
+
+typedef struct _VDEC_INFO_RM_BS_INIT_PRM_T_
+{
+ UINT32 u4ReadPointer;
+ UINT32 u4WritePointer;
+ UINT32 u4VFifoSa; ///< Video Fifo memory start address
+ UINT32 u4VFifoEa; ///< Video Fifo memory end address
+} VDEC_INFO_RM_BS_INIT_PRM_T;
+
+
+
+//Init HW Work Buf when Init Process
+typedef struct _VDEC_INFO_RM_WORK_BUF_SA_T_
+{
+ UINT32 u4RMMvWorkBuf;
+ UINT32 u4RMVldWorkBuf;
+ UINT32 u4RMRPRRefBufY;
+ UINT32 u4RMRPRRefBufC;
+ UINT32 u4RPRHWWorkBuf;
+} VDEC_INFO_RM_WORK_BUF_SA_T;
+
+
+
+
+typedef struct _VDEC_INFO_RM_PICINFO_T_
+{
+ BOOL fgRV9; // TRUE -> RV9 FALSE -> RV8
+ EnumRMPicCodType ePtype;
+ UINT32 u4OrgWidth;
+ UINT32 u4OrgHeight;
+ UINT32 u4Width;
+ UINT32 u4Height;
+ UINT32 u4PctszSize;
+ UINT32 u4Pctsz;
+ UINT32 u4Pquant;
+ UINT32 u4Oquant;
+ UINT32 u4DFP;
+ UINT32 u4Tr;
+ UINT32 u4MbaSize;
+ UINT32 u4Mba;
+ UINT32 u4Rtype;
+ UINT32 u4Iratio;
+ UINT32 u4HdrSkip;
+ UINT32 u4NumSlice;
+ UINT32 au4SliceSize[128];
+ UINT32 u4BstLength;
+
+
+
+ BOOL fgBwdIsI;
+ //RV9, RV10
+ BOOL fgECC; // 1 Bit
+ UINT32 u4PSQuant; // 5 Bit
+ BOOL fgBit_Ver;
+ BOOL fgInterlace;
+ UINT32 u4OsvQuant;
+ BOOL fgDeblockPassThru;
+ UINT32 u4RvTr;
+ BOOL fgUserPrevWidth;
+
+ //RV8
+ UINT32 u4RvBistreamVersion; // 3 Bit
+ BOOL fgRType; // 1 Bit
+ UINT32 u4PicSz;
+
+ //HW Status
+ UINT32 u4RefQpMb0;
+
+ //Buf Inof
+ UINT32 u4OutBufY;
+ UINT32 u4OutBufC;
+ UINT32 u4FwdBufY;
+ UINT32 u4FwdBufC;
+ UINT32 u4BwdBufY;
+ UINT32 u4BwdBufC;
+
+ //Resize Pic Size Info
+ BOOL fgCurIsRPRPic;
+ UINT32 u4PrevDispWidth;
+ UINT32 u4PrevDispHeight;
+ UINT32 u4PrevDecWidth;
+ UINT32 u4PrevDecHeight;
+
+ //Emulation Info
+ UINT32 u4DecodedPicCnt;
+
+ UINT32 u4MCOutBufY;
+ UINT32 u4MCOutBufC;
+
+ //For HW Setting
+ UINT32 u4AddrSwapMode;
+ UINT32 u4InitInputWindow;
+
+ BOOL fgEnableCRC;
+ BOOL fgEnableMCOutput;
+ BOOL fgEnableDDR3;
+ BOOL fgEnableAddrSwap;
+ BOOL fgEnablePPOut;
+ UINT8 uRPRMode; //0: Disable RPR Mode, 1: Normal Mode, 2: Racing Mode
+ UINT32 u4RPRState;
+
+ //Iratio Calc
+ UINT32 u4TrWarp;
+ UINT32 u4FRefTr;
+ UINT32 u4BRefTr;
+ UINT32 u4IratioTr;
+ INT32 i4Trd;
+ INT32 i4Trb;
+} VDEC_INFO_RM_PICINFO_T;
+
+typedef struct _VDEC_INFO_RM_DEC_PRM_T_
+{
+ // MPEG version: 1, 2, 3, 4 (3: DivX 3.11)
+ UCHAR ucMpegVer;
+ UCHAR ucDecFld;
+ UINT32 u4FRefBufIdx;
+
+ // Decode picture setting
+ BOOL fgB21Mode;
+ BOOL fgRetErr;
+ BOOL fgIgnoreVdo;
+ BOOL fgDec2ndFld;
+ UINT32 u4DecXOff;
+ UINT32 u4DecYOff;
+ UINT32 u4DecW;
+ UINT32 u4DecH;
+ UINT32 u4MaxMbl;
+ UINT32 u4BBufStart;
+ //VDEC_INFO_MPEG_FRAME_BUF_SA_T rMpegFrameBufSa;
+ //VDEC_INFO_MPEG_PP_INFO_T rMpegPpInfo;
+ //VDEC_INFO_MPEG2_PIC_PRM_T rMp2PicPrm;
+
+ UINT32 u4MvHwWorkBuf; //
+ UINT32 u4VldPredWorkBuf; //
+ VDEC_INFO_RM_PICINFO_T rRMPicInfo; //Pic info from frminfo.bin //only for emulation
+ VDEC_INFO_RM_PICINFO_T rRMPicInfo_Preparsing; //Pic info from frminfo.bin //only for emulation and RPR Racing Mode
+ VDEC_INFO_RM_PICINFO_T rRMParsPicInfo; //Parsing Real RM Syntax
+ UINT32 u4RMFrmInfoBuf; //
+ UINT32 u4RMFrmInfoRPtr; //only for emulation
+
+ UINT32 u4RMGoldenDataBuf; //Golden Data
+ UINT32 u4RMGoldenDataBufRPtr; //Golden Data RPtr
+
+ UINT32 u4RMRingFlowTempFIFO; //Temp FIFO for Ring Case
+ UINT32 u4RMRingFlowTempFIFOSize; //Temp FIFO Size for Ring Case
+
+ UINT32 u4RMVFIFOWPtr; //FIFO Write Pointer
+ UINT32 u4RMFIFORPtr; //FIFO Read Pointer
+ UINT32 u4RMVFIFOSa; //VFIFO Sa
+ UINT32 u4RMVFIFOSz; //VFIFO Sz
+
+ UINT32 u4HWInputWindow;
+
+ //RPR Racing Mode Flag
+ BOOL fgRPRRacingModeEnable; //TRUE => Enable
+
+ UINT32 u4RMAddrSwapMode;
+
+
+ UINT32 u4ClipTotalFrameCnt; //Frame Number
+ UINT32 u4FrameInfoSize;
+ UINT32 u4FramePayloadSize;
+
+ UINT32 u4GlobalChecksumBuf;
+ UINT32 u4GlobalChecksumBufSize;
+
+ UINT32 u4CRCResultBufAddr;
+ UINT32 u4CRCCheckFrameNumber;
+ BOOL fgCRCLoadGoldenFlag;
+} VDEC_INFO_RM_DEC_PRM_T;
+
+
+
+#endif //#ifndef _VDEC_INFO_RM_H_
+
+
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_info_vp6.h b/drivers/misc/mediatek/vdec/include/vdec_info_vp6.h
new file mode 100644
index 000000000..ed1cc922f
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_info_vp6.h
@@ -0,0 +1,219 @@
+#ifndef _VDEC_INFO_VP6_H_
+#define _VDEC_INFO_VP6_H_
+
+//#include "drv_config.h"
+
+#if 1 //(!CONFIG_DRV_VERIFY_SUPPORT)
+#include "vdec_usage.h"
+#include "vdec_info_common.h"
+#else
+#include "x_stl_lib.h"
+//#include "x_assert.h"
+//#include "u_pbinf.h"
+#endif
+
+//#define VP6_I_FRM 0
+//#define VP6_P_FRM 1
+
+typedef enum
+{
+ VP6_PROFILE_SIMPLE = 0,
+ VP6_PROFILE_UNDEF_1,
+ VP6_PROFILE_UNDEF_2,
+ VP6_PROFILE_ADVANCED
+} VP6_PROFILE_T;
+
+typedef struct _VDEC_INFO_VP6_VFIFO_PRM_T_
+{
+ UINT32 u4VFifoSa; ///< Video Fifo memory start address
+ UINT32 u4VFifoEa; ///< Video Fifo memory end address
+} VDEC_INFO_VP6_VFIFO_PRM_T;
+
+
+typedef struct _VDEC_INFO_VP6_BS_INIT_PRM_T_
+{
+ UINT32 u4ReadPointer;
+ UINT32 u4WritePointer;
+ UINT32 u4VFifoSa; ///< Video Fifo memory start address
+ UINT32 u4VFifoEa; ///< Video Fifo memory end address
+} VDEC_INFO_VP6_BS_INIT_PRM_T;
+
+
+//MULTI-STREAM PANDA
+/* HUFF_NODE for decoder */
+typedef struct _HUFF_NODE
+{
+ UINT16 left; // 1 bit tells whether its a pointer or value
+ UINT16 right;// 1 bit tells whether its a pointer or value
+} HUFF_NODE;
+
+typedef struct _HUFF_CODE
+{
+ UINT16 hcode;
+ UINT16 len;
+} HUFF_CODE;
+
+typedef struct _SORTNODE
+{
+ INT32 next;
+ INT32 freq;
+ UINT16 value;
+} SORTNODE;
+//~MULTI-STREAM PANDA
+
+
+typedef struct _VDEC_INFO_VP6_FRM_HDR_T_
+{
+ BOOL fgFrmHdrValid;
+ // frame coding type: I_TYPE, P_TYPE
+ UCHAR ucFrameType;
+ // Quantizer setting
+ UCHAR ucDctQMask;
+
+ // 0: for one partition, 1 for two partitions
+ BOOL fgMultiStream;
+ //0 for BoolCoder, 1 for HuffmanCoder for 2nd data patition.
+ BOOL fgUseHuffman;
+ //Version of encoder used to encode frame.
+ UCHAR ucVp3VerNo;
+ // 0 for Simple, 3 for Advanced. (1 and 2 undefined)
+ VP6_PROFILE_T ucVpProfile;
+ // Reserved.
+ UCHAR ucReserved;
+ //Offset to 2nd partion
+ UINT16 u2Buff2Offset;
+ // Number of rows of 8x8 blocks in unscaled frame.
+ UINT16 u2VFragments;
+ // Number of cols of 8x8 blocks in unscaled frame.
+ UINT16 u2HFragments;
+ // Number of rows of 8x8 blocks in scaled frame.
+ UINT16 u2OutVFragments;
+ // Number of cols of 8x8 blocks in scaled frame.
+ UINT16 u2OutHFragments;
+
+
+ // Mode to use for scaling frame.
+ UCHAR ucScalingMode;
+ // Advanced Profile Only:
+ // 0 Prediction filter type is fixed and specified.
+ // 1 Auto-select bi-cubic or bi-linear prediction filter.
+ BOOL fgAutoSelectPMFlag;
+ //If Auto-SelectPMFlag == 1 only, threshold on prediction filter variance size.
+ UINT32 u4PredictionFilterVarThresh;
+ //If Auto-SelectPMFlag == 1 only, threshold on MV size.
+ UINT32 u4PredictionFilterMvSizeThresh;
+ // If Auto-SelectPMFlag == 0 only, threshold on MV size.
+ // 0 use Bi-linear filter.
+ // 1 use Bi-cubic filter.
+ BOOL fgBiCubicOrBiLinearFlag;
+ // Vp3VerNo == 8 Only, Selector to choose bi-cubic filter coefficients
+ UCHAR ucPreditionFilterAlpha;
+
+ // Inter Frame Header
+ // 0: Do not update the Golden Frame with this frame, 1: Decoded frame should become new Golden Frame.
+ BOOL fgRefreshGoldenFrame;
+ // Advanced Profile Only:
+ //0: Disable the loop filter, 1: Enable.
+ UINT16 u2LoopFilter;
+ // Advanced Profile Only:
+ // 0: Basic loop filter, 1: De-ringing loop filter.
+ BOOL fgLoopFilterSelector;
+
+ BOOL fgParse_Filter_Info;
+ UCHAR ucVrt_Shift;
+ UCHAR ucFilter_Mode;
+ UINT32 u4Sample_Variance_Threshold;
+ UINT32 u4Max_Vector_Length;
+ UINT32 u4Filter_Selection;
+
+ //HW related
+ UINT16 u2Vp56_Filter_Threshold;
+ UINT32 u4DQuant_Dc;
+ UINT32 u4DQuant_Ac;
+ UINT16 u2WidthDec;
+ UINT16 u2HeightDec;
+ UINT32 u4Mv_Thr_En;
+ UINT32 u4Var_Thr_En;
+ UINT32 u4BilinearFilter;
+ UINT32 u4FrameSize;
+ //~HW related
+
+ //Driver Flow Control
+ UCHAR ucPicStruct;
+ UCHAR ucColorPrimaries;
+ UINT16 u2FrmRatCod;
+ UCHAR ucAspectRatio;
+ //~Driver Flow
+} VDEC_INFO_VP6_FRM_HDR_T;
+
+
+typedef struct _VDEC_INFO_VP6_WORK_BUF_SA_T_
+{
+ //UINT32 u4Pic0YSa;
+ //UINT32 u4Pic0CSa;
+ //UINT32 u4Pic1YSa;
+ //UINT32 u4Pic1CSa;
+ //UINT32 u4Pic2YSa;
+ //UINT32 u4Pic2CSa;
+} VDEC_INFO_VP6_WORK_BUF_SA_T;
+
+typedef struct _VDEC_INFO_VP6_FRAME_BUF_SA_T_
+{
+ UINT32 u4Pic0YSa;
+ UINT32 u4Pic0CSa;
+ UINT32 u4Pic1YSa;
+ UINT32 u4Pic1CSa;
+ UINT32 u4Pic2YSa;
+ UINT32 u4Pic2CSa;
+
+ UINT32 u4PpYBufSa;
+ UINT32 u4PpCBufSa;
+} VDEC_INFO_VP6_FRAME_BUF_SA_T;
+
+typedef struct _VDEC_INFO_VP6_PP_INFO_T_
+{
+ BOOL fgPpEnable;
+ UINT8 u1PpLevel;
+ UINT8 au1MBqp[4];
+ UINT32 u4PpYBufSa;
+ UINT32 u4PpCBufSa;
+} VDEC_INFO_VP6_PP_INFO_T;
+
+#define VP6_ALPHA_ENABLE (1 << 0)
+#define VP6_ALPHA_FRAME (1 << 1)
+
+typedef struct _VDEC_INFO_VP6_DEC_PRM_T_
+{
+ //UCHAR ucVopCdTp; // in VP6
+ //UCHAR ucVopQuant; // in VP6
+ //#if CONFIG_DRV_VERIFY_SUPPORT
+ UINT32 u4FRefBufIdx;
+ //#endif
+ INT32 i4MemBase;
+ BOOL fgAdobeMode;
+ //UINT32 u4VLDWrapperWorkspace;
+ //UINT32 u4PPWrapperWorkspace;
+ VDEC_INFO_VP6_FRM_HDR_T *prFrmHdr;
+ //VDEC_INFO_VP6_WORK_BUF_SA_T rVp6WorkBufSa;
+ VDEC_INFO_VP6_FRAME_BUF_SA_T rVp6FrameBufSa;
+ VDEC_INFO_VP6_PP_INFO_T rVp6PpInfo;
+
+ // Alpha Channel
+ UINT8 u1AlphaFlag;
+ UINT32 au4VldWrapper[196];
+ UINT32 au4Reorder[16];
+ //~Alpha Channel
+
+} VDEC_INFO_VP6_DEC_PRM_T;
+
+
+typedef struct _VDEC_HAL_DEC_VP6_ERR_INFO_T_
+{
+ UINT32 u4Vp6ErrCnt; ///< Video decode error count
+ UINT32 u4Vp6ErrRow; ///< Video decode error mb row
+ UINT32 u4Vp6ErrType; ///< Video decode error type
+ UINT16 u2Vp6MBErrCnt;
+} VDEC_INFO_VP6_ERR_INFO_T;
+
+#endif //#ifndef _VDEC_INFO_VP6H_
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_info_vp8.h b/drivers/misc/mediatek/vdec/include/vdec_info_vp8.h
new file mode 100644
index 000000000..ca31dd616
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_info_vp8.h
@@ -0,0 +1,479 @@
+#ifndef _VDEC_INFO_VP8_H_
+#define _VDEC_INFO_VP8_H_
+
+#define VP8_USE_SMALLQT
+
+#define VP8_HEADERPARSE_HWACCELATOR
+
+#define VDEC_VP8_WRAPPER_OFF 0 //[Jackal Chen] If width or height > 2048, enable this!
+#define VDEC_VP8_WEBP_SUPPORT 0 //[Jackal Chen] If we will decode Webp, enable this!
+//VDEC_VP8_WEBP_SUPPORT_ME2_INTEGRATION only valid when VDEC_VP8_WEBP_SUPPORT = 1
+#define VDEC_VP8_WEBP_SUPPORT_ME2_INTEGRATION 0 //[Jackal Chen] If we will decode Webp with ME2 integration, enable this!
+//VP8_MB_ROW_MODE_SUPPORT_ME2_INTEGRATION only valid when VDEC_VP8_WEBP_SUPPORT_ME2_INTEGRATION = 1
+#define VP8_MB_ROW_MODE_SUPPORT_ME2_INTEGRATION 0 //[Jackal Chen] If we will decode Webp with ME2 integration, enable this!
+
+#if VP8_MB_ROW_MODE_SUPPORT_ME2_INTEGRATION
+typedef enum
+{
+ vVerResult_MB_ROW_DONE = 0,
+ vVerResult_FRAME_DONE = 1,
+ vVerResult_TIMEOUT = 2
+} vVerResult;
+#endif
+
+#if VDEC_VP8_WEBP_SUPPORT
+#define VP8_MB_ROW_MODE_SUPPORT 0 //[Jackal Chen]NO USED!
+#else
+#define VP8_MB_ROW_MODE_SUPPORT 0 //[Jackal Chen]NO USED!
+#endif
+#define VP8_I_FRM 0 //Key Frame
+#define VP8_P_FRM 1 // Prediction Frame
+
+#define VP8_VLD1 (0)
+#define VP8_VLD2 (1)
+#define VP8_BINTRAMODES (VP8_BPRED_MODE_B_HU+1) // 10
+#define VP8_SUBMVPREFS (1+VP8_BPRED_MODE_NEW4X4-VP8_BPRED_MODE_LEFT4X4)
+#define VP8_YMODES (VP8_MBPRED_MODE_B+1)
+#define VP8_UVMODES (VP8_MBPRED_MODE_TM+1)
+#define VP8_MVREFS (1+VP8_MBPRED_MODE_SPLITMV-VP8_MBPRED_MODE_NEARESTMV)
+#define VP8_BLOCK_TYPES (4)
+#define VP8_COEF_BANDS (8)
+#define VP8_PREV_COEF_CONTEXTS (3)
+#define VP8_COEF_TOKENS (12)
+#define VP8_PROB_TYPE(pBrob,btype) (pBrob+btype*VP8_COEF_BANDS*VP8_PREV_COEF_CONTEXTS*(VP8_COEF_TOKENS-1))
+#define VP8_PROB_BAND(pBtype,band) (pBtype+band*VP8_PREV_COEF_CONTEXTS*(VP8_COEF_TOKENS-1))
+#define VP8_PROB_CTXT(pBand,ctxtype) (pBand+ctxtype*(VP8_COEF_TOKENS-1))
+#define VP8_PROB_TOKEN(pCtxt,token) (pCtxt+token)
+
+#define VDEC_VP8_WAIT_DISP_TIME (1500)
+#define WAIT_THRD 0x1000
+#define DEC_RETRY_NUM 8000
+
+//#define VP8_KEY_FRAME (0)
+//#define VP8_INTER_FRAME (1)
+#define VP8_MINQ (0)
+#define VP8_MAXQ (127)
+#define VP8_QINDEX_RANGE (VP8_MAXQ+1)
+#define VP8_SEGMENT_ALTQ (0x01)
+#define VP8_SEGMENT_ALTLF (0x02)
+#define MB_FEATURE_TREE_PROBS (3)
+#define MAX_MB_SEGMENTS (4)
+#define MAX_REF_LF_DELTAS (4)
+#define MAX_MODE_LF_DELTAS (4)
+#define MAX_VP8_DATAPARTITION (8)
+#define MAX_FILTER_LVL (63)
+#define VP8_IVF_FILE_HEADER_SZ 0x20
+#define VP8_IVF_FRAME_HEADER_SZ 0x0C
+
+#define VDEC_GET_FLAGVAL(value,flg) (((value)&1)<<flg)
+#define VDEC_GET_RANGEVAL(value,s,e) (((value)&((1<<(e-s+1))-1))<<s)
+#define VDEC_REG_GET_VALUE(value,s,e) (((value)>>s)&((1<<(e-s+1))-1))
+#define VDEC_REG_SET_VALUE(reg,value,s,e) (reg=(reg&(~((1<<(e-s+1))<<s)))|(VDEC_GET_RANGEVAL(value,s,e)))
+#define VDEC_REG_GET_FLAG(value,p) (((value)>>p)&0x1)
+#define VDEC_REG_SET_FLAG(reg,value,p) (reg=(reg&(~(1<<p)))|(VDEC_GET_FLAGVAL(value,p)))
+#define VDEC_VP8_DQINDEXCLAMP(index) (index>127 ? 127 : (index<0 ? 0 : index))
+
+
+#define VDEC_CLRFLG(flg,index) ((flg) &= ~(1<<(index)))
+#define VDEC_SETFLG(flg,index) ((flg) |= (1<<(index)))
+#define VDEC_FLGSET(flg,index) (((flg)>>(index))&1)
+#define VDEC_SETFLG_COND(flg,index,cond) ((cond) ? VDEC_SETFLG(flg,index) : VDEC_CLRFLG(flg,index))
+#define VDEC_MEMALIGN(ptr,align) (ptr+=(align-(((UINT32)ptr)&(align-1))))
+#define VDEC_RPOS_INC(src,len,startaddr,endaddr) (src= (src+(len)>=endaddr) ? (startaddr+((src)+(len)-(endaddr))) : ((src)+(len)))
+#define VDEC_INTEGER(integer,src,len,startaddr,endaddr) \
+ { \
+ UCHAR uByte,uIntLen=0; \
+ integer=0; \
+ while(uIntLen<len) \
+ { \
+ uByte=*((UCHAR *)src); \
+ integer=(integer<<8)|uByte; \
+ uIntLen++;\
+ VDEC_RPOS_INC(src,1,startaddr,endaddr); \
+ } \
+ }
+
+#define VDEC_INTREVERSE(integer,len) \
+ { \
+ UINT32 u4Value=0,uIndex=0; \
+ while(uIndex<len) \
+ { \
+ u4Value=u4Value<<8|((integer&(0xff<<(uIndex*8)))>>(uIndex*8)); \
+ uIndex++; \
+ } \
+ integer=u4Value;\
+ }
+
+
+typedef enum
+{
+ VP8PARAM_NO_LPF,
+ VP8PARAM_SIMPLER_LPF,
+ VP8PARAM_BILINER_MCFILTER,
+ VP8PARAM_FULL_PIXEL,
+ VP8PARAM_COLOR,
+ VP8PARAM_CLAMP_TYPE,
+ VP8PARAM_SEGMENT_ENABLE,
+ VP8PARAM_SEGMENT_UPDATE_MAP,
+ VP8PARAM_SEGMENT_UPDATE_DATA,
+ VP8PARAM_SEGMENT_ABSDATA, // 0--Delta data, 1--Abs data.
+ VP8PARAM_MODEREF_IFDELTA_UPDATE,
+ VP8PARAM_MODEREF_LFDELTA_ENABLE,
+ VP8PARAM_REFRESH_GOLDEN,
+ VP8PARAM_REFRESH_ALTRF,
+ VP8PARAM_QINDEX_UPDATE,
+ VP8PARAM_REFRESH_PROBS,
+ VP8PARAM_REFRESH_LASTFRAME,
+ VP8PARAM_NOCOEF_SKIP,
+} VDEC_PARAM_VP8FLAG_T;
+
+typedef enum
+{
+ VP8_MBPRED_MODE_DC,
+ VP8_MBPRED_MODE_V,
+ VP8_MBPRED_MODE_H,
+ VP8_MBPRED_MODE_TM,
+ VP8_MBPRED_MODE_B,
+ VP8_MBPRED_MODE_NEARESTMV,
+ VP8_MBPRED_MODE_NEARMV,
+ VP8_MBPRED_MODE_ZEROMV,
+ VP8_MBPRED_MODE_NEWMV,
+ VP8_MBPRED_MODE_SPLITMV,
+ VP8_MBPRED_MODE_MAX
+} VDEC_VP8_MB_PREDICTION_MODE_T;
+
+typedef enum
+{
+ VP8_BPRED_MODE_B_DC,
+ VP8_BPRED_MODE_B_TM,
+ VP8_BPRED_MODE_B_VE,
+ VP8_BPRED_MODE_B_HE,
+ VP8_BPRED_MODE_B_LD,
+ VP8_BPRED_MODE_B_RD,
+ VP8_BPRED_MODE_B_VR,
+ VP8_BPRED_MODE_B_VL,
+ VP8_BPRED_MODE_B_HD,
+ VP8_BPRED_MODE_B_HU,
+ VP8_BPRED_MODE_LEFT4X4,
+ VP8_BPRED_MODE_ABOVE4X4,
+ VP8_BPRED_MODE_ZEOR4X4,
+ VP8_BPRED_MODE_NEW4X4,
+ VP8_BPRED_MODE_MAX
+} VDEC_VP8_B_PREDICTION_MODE_T;
+
+typedef enum
+{
+ VP8_MVREF_INTRA_FRAME,
+ VP8_MVREF_LAST_FRAME,
+ VP8_MVREF_GOLDEN_FRAME,
+ VP8_MVREF_ALTREF_FRAME,
+ VP8_MVREF_MAX
+} VDEC_VP8_MVREF_FRAME_T;
+
+typedef enum
+{
+ VP8_QTYPE_Y1AC = 0,
+ VP8_QTYPE_Y1DC,
+ VP8_QTYPE_Y2DC,
+ VP8_QTYPE_Y2AC,
+ VP8_QTYPE_UVDC,
+ VP8_QTYPE_UVAC,
+ VP8_QTYPE_MAX
+} VDEC_VP8_QTYPE_T;
+
+typedef enum
+{
+ VP8_QTABLE_Y1,
+ VP8_QTABLE_Y2,
+ VP8_QTABLE_UV,
+ VP8_QTALBE_MAX
+} VDEC_VP8_QTABLE_T;
+
+typedef enum
+{
+ VP8_MBLVL_ALT_Q,
+ VP8_MBLVL_ALT_LF,
+ VP8_MBLVL_MAX
+} VDEC_VP8_MBLVL_FEATURE;
+typedef enum
+{
+ VP8_LF_TYPE_NORMAL = 0,
+ VP8_LF_TYPE_SIMPLE
+} VDEC_VP8_FILTER_TYPE_T;
+
+typedef enum
+{
+ VP8_FRAME_CURRENT = 0,
+ VP8_FRAME_LAST,
+ VP8_FRAME_GOLD,
+ VP8_FRAME_ALT,
+ VP8_FRAME_NO_UPD
+} VDEC_VP8_FRAME_REFRESH_T;
+
+typedef enum
+{
+ VDEC_VP8_PIC_STATE,
+ VDEC_VP8_MB_STATE,
+ VDEC_VP8_COEF_STATE
+} VDEC_VP8_DECSTATE_T;
+
+typedef enum
+{
+ VP8_MVDEF_MV_MAX = 1024,
+ VP8_MVDEF_MVVALS = (2 * VP8_MVDEF_MV_MAX) + 1,
+ VP8_MVDEF_MVLONG_WIDHT = 10,
+ VP8_MVDEF_MVNUM_SHORT = 8,
+ VP8_MVDEF_MVPIS_SHORT = 0,
+ VP8_MVDEF_MVPSIGN,
+ VP8_MVDEF_MVPSHORT,
+ VP8_MVDEF_MVPBITS = VP8_MVDEF_MVPSHORT + VP8_MVDEF_MVNUM_SHORT - 1, // value is 9
+ VP8_MVDEF_MVPCOUNT = VP8_MVDEF_MVPBITS + VP8_MVDEF_MVLONG_WIDHT //value is 19
+} VDEC_VP8_MVDEF_T;
+
+
+typedef enum
+{
+ VP8_KEEPALT = 0,
+ VP8_LAST2ALT,
+ VP8_GOLD2ALT,
+ VP8_WORK2ALT
+} VDEC_VP8_ALTSTATE_T;
+
+typedef enum
+{
+ VP8_KEEPGOLD = 0,
+ VP8_LAST2GOLD,
+ VP8_ALT2GOLD,
+ VP8_WORK2GOLD
+} VDEC_VP8_GOLDSTATE_T;
+
+typedef enum
+{
+ VP8_KEEPLAST = 0,
+ VP8_WORK2LAST,
+} VDEC_VP8_LASTSTATE_T;
+
+typedef struct _VDEC_VP8_UPDST_T_
+{
+ VDEC_VP8_ALTSTATE_T eAltState;
+ VDEC_VP8_GOLDSTATE_T eGoldState;
+ VDEC_VP8_LASTSTATE_T eLastState;
+} VDEC_VP8_UPDST_T;
+
+
+
+typedef struct _VDEC_INFO_VP8_BS_INIT_PRM_T_
+{
+ UINT32 u4ReadPointer;
+ UINT32 u4WritePointer;
+ UINT32 u4VFifoSa; ///< Video Fifo memory start address
+ UINT32 u4VFifoEa; ///< Video Fifo memory end address
+} VDEC_INFO_VP8_BS_INIT_PRM_T;
+
+typedef struct _VDEC_INFO_VP8_VFIFO_PRM_T_
+{
+ ULONG u4VFifoSa; ///< Video Fifo memory start address
+ ULONG u4VFifoEa; ///< Video Fifo memory end address
+} VDEC_INFO_VP8_VFIFO_PRM_T;
+
+typedef struct _VDEC_INFO_VP8_FRAME_BUF_SA_T_
+{
+ UINT32 u4Pic0YSa;
+ UINT32 u4Pic1YSa;
+ UINT32 u4Pic2YSa;
+ UINT32 u4Pic3YSa;
+
+ UINT32 u4PpYBufSa;
+ UINT32 u4PpCBufSa;
+} VDEC_INFO_VP8_FRAME_BUF_SA_T;
+
+
+typedef struct _VDEC_HAL_DEC_VP8_ERR_INFO_T_
+{
+ UINT32 u4YoutRangeErr; ///< Video decode error count
+ UINT32 u4XoutRangeErr; ///< Video decode error mb row
+ UINT32 u4BlkCoefErr; ///< Video decode error type
+ UINT32 u4BitCnt1stPartErr;
+ UINT32 u4BitCnt2stPartErr;
+ UINT32 u4MCBusyOverflowErr;
+ UINT32 u4MDecTimoutInt;
+ UINT32 u4Vp8ErrCnt;
+} VDEC_INFO_VP8_ERR_INFO_T;
+
+typedef struct _VDEC_INFO_VP8_PP_INFO_T_
+{
+ BOOL fgPpEnable;
+ UINT8 u1PpLevel;
+ UINT8 au1MBqp[4];
+ UINT32 u4PpYBufSa;
+ UINT32 u4PpCBufSa;
+} VDEC_INFO_VP8_PP_INFO_T;
+
+typedef struct
+{
+ UINT8 Prob[VP8_MVDEF_MVPCOUNT];
+} VDEC_VP8_MV_CONTEXT_T;
+
+typedef struct
+{
+ //UINT8 BModeProb[VP8_BINTRAMODES-1];
+ UINT8 YModeProb[VP8_YMODES - 1];
+ UINT8 UVModeProb[VP8_UVMODES - 1];
+ //UINT8 SubMVRefProb[VP8_SUBMVPREFS-1];
+ UINT8 CoefProbs[VP8_BLOCK_TYPES][VP8_COEF_BANDS][VP8_PREV_COEF_CONTEXTS][VP8_COEF_TOKENS - 1];
+ VDEC_VP8_MV_CONTEXT_T MVC[2];
+ //VDEC_VP8_MV_CONTEXT_T PRE_MVC[2];
+} VDEC_VP8FRAME_CONTEXT_T;
+
+typedef struct
+{
+ UINT32 u4FlagParam;
+ UINT32 u4LastParam;
+ INT8 SegmentFeatureData[VP8_MBLVL_MAX][MAX_MB_SEGMENTS];
+ UINT8 SegmentTreeProbs[MB_FEATURE_TREE_PROBS];
+ INT8 RefLFDeltas[MAX_REF_LF_DELTAS];
+ INT8 ModeLFDeltas[MAX_MODE_LF_DELTAS];
+ INT8 RefFrameSignBias[VP8_MVREF_MAX];
+ VDEC_VP8_FILTER_TYPE_T eLoopFilterType;
+ INT8 iLoopFilterLvl;
+ INT8 iSharpLvl;
+ UINT8 uDataPartitionNum;
+ UINT8 uDataPartitionToken;
+ UINT8 uSkipFalseProb;
+ UINT8 uIntraProb;
+ UINT8 uLastProb;
+ UINT8 uGoldenProb;
+ UINT8 uCopyBuf2Gf; // 0:no 1:last-->gf 2: arf-->gf
+ UINT8 uCopyBuf2Arf; // 0:no 1:laast-->arf 2:gf-->arf
+ INT16 QIndexInfo[VP8_QTYPE_MAX];
+ UINT8 *puWorkingBuf;
+ VDEC_VP8FRAME_CONTEXT_T rLastFC;
+ VDEC_VP8FRAME_CONTEXT_T rCurFc;
+} VDEC_PARAM_VP8DEC_T;
+
+typedef struct _VDEC_INFO_VP8_FRM_HDR_T_
+{
+ UINT8 uFrameType;
+ UINT8 uShowFrame;
+ UINT8 uHScale;
+ UINT8 uVScale;
+ UINT32 u4Width;
+ UINT32 u4Height;
+ UINT8 uVersion;
+ ULONG u4ReadPointer; //[20101223][Youguo Li] marked for 8580 drv_emualtion build failed.
+ ULONG u4VldStartPos;
+ ULONG u4FifoStart;
+ ULONG u4FifoEnd;
+ UINT32 u4FirstPartLen;
+ UINT32 u4FrameSize;
+ ULONG u4WritePos;
+ ULONG u4GldYAddr;
+ ULONG u4AlfYAddr;
+ ULONG u4LstYAddr;
+ ULONG u4CurYAddr;
+ ULONG u4CurCAddr;
+ ULONG u4VLDWrapper;
+ ULONG u4SegIdWrapper;
+ ULONG u4PPWrapperY;
+ ULONG u4PPWrapperC;
+ ULONG u4VLDWrapperWrok;
+ ULONG u4PPWrapperWrok;
+ VDEC_PARAM_VP8DEC_T rVp8DecParam;
+ VDEC_INFO_VP8_FRAME_BUF_SA_T rVp8FrameBufSa;
+ //Driver Flow Control
+ UCHAR ucPicStruct;
+ UCHAR ucColorPrimaries;
+ UINT16 u2FrmRatCod;
+ UCHAR ucAspectRatio;
+} VDEC_INFO_VP8_FRM_HDR_T;
+
+#ifdef VDEC_VP8_HWDEBLOCK
+#define VDEC_PP_ENABLE TRUE
+#else
+#define VDEC_PP_ENABLE FALSE
+#endif
+
+#define VDEC_VP8WAIT_TIME (500)
+#define VDEC_VP8DEF_FRAME_RATE (30000)
+#define IPBMode 0x0
+#define IPMode 0x1
+#define IMode 0x2
+
+#define VP8_NO_PIC 0
+#define VP8_TOP_FIELD 1
+#define VP8_BOTTOM_FIELD 2
+#define VP8_FRAME 3
+
+typedef enum
+{
+ VP8_DEC_FLG_UNSUPPORT = 0,
+ VP8_DEC_FLG_INITED,
+ VP8_DEC_FLG_ENDCALPTS,
+ VP8_DEC_FLG_DECERROR,
+ VP8_DEC_FLG_VALIDPTS,
+ VP8_DEC_FLG_BSPWKBUF,
+ VP8_DEC_FLG_NEWGD,
+ VP8_DEC_FLG_LOCKED
+} VP8_DEC_FLAG;
+
+typedef struct
+{
+ BOOL fgRefreshGd;
+ BOOL fgKeyFrame;
+ BOOL fgLastKeyFrame;
+ BOOL fgInitedDec;
+ UINT32 u4WPtr;
+ UINT32 u4AddrMode;
+ UCHAR ucFbgId;
+ UCHAR ucFbgType;
+ UCHAR ucSyncMode;
+ UCHAR ucSkipMode;
+ UCHAR ucCurFbId;
+ UCHAR ucLastFbId;
+ UCHAR ucDbkFbId;
+ UCHAR ucGoldenFbId;
+ UCHAR ucAltFbId;
+ UCHAR ucDispFbId;
+ UINT32 u4NewWidth;
+ UINT32 u4NewHeight;
+ UINT32 u4Width;
+ UINT32 u4Height;
+ UINT32 u4Flag;
+ UINT32 u4ReadPtr;
+ UINT32 u4LastReadPtr;
+ UINT32 u4DispPts;
+ UINT32 u4Rate;
+ UINT32 u4FrameCounter;
+ UINT32 u4FbmLineSize;
+ UINT32 u4DataOffset;
+ UINT32 u4WorkBuf;
+ UINT32 u4RefPts;
+ UINT32 u4DeltaPTS;
+ INT32 i4DecRet;
+ UINT64 u8Offset;
+#ifdef CC_VP8_EMULATION
+ UINT32 u4CrcVal[2][4];
+#endif
+ INT8 RefTime[16];
+} VP8_DEC_PARAM_T;
+
+typedef struct
+{
+ VP8_DEC_PARAM_T rDecParam;
+ VDEC_INFO_VP8_FRM_HDR_T rVp8FrmHdr;
+ UINT8 uEsId;
+} VDEC_VP8_INFO_T;
+
+typedef struct _VDEC_INFO_VP8_DEC_PRM_T_
+{
+ UINT32 u4FRefBufIdx;
+ INT32 i4MemBase;
+ BOOL fgAdobeMode;
+ VDEC_INFO_VP8_FRM_HDR_T *prFrmHdr;
+ VDEC_INFO_VP8_FRAME_BUF_SA_T rVp8FrameBufSa;
+ VDEC_INFO_VP8_PP_INFO_T rVp8PpInfo;
+} VDEC_INFO_VP8_DEC_PRM_T;
+
+
+#endif //#ifndef _VDEC_INFO_VP8H_
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_info_wmv.h b/drivers/misc/mediatek/vdec/include/vdec_info_wmv.h
new file mode 100644
index 000000000..13a5536cb
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_info_wmv.h
@@ -0,0 +1,531 @@
+#ifndef _VDEC_INFO_WMV_H_
+#define _VDEC_INFO_WMV_H_
+
+//#include "drv_config.h"
+
+#include "vdec_usage.h"
+#include "vdec_info_common.h"
+
+#define MAXHALFQP 8
+#define MAXHIGHRATEQP 8
+#define MAX3QP 8
+
+#define MIN_BITRATE_MB_TABLE 50
+#define MAX_BITRATE_DCPred_IMBInPFrame 128
+#define NUMBITS_SLICE_SIZE 5 // maximum 32 MB's
+#define NUMBITS_SLICE_SIZE_WMV2 3 // To indicate Processor's #
+
+
+typedef enum
+{
+ ALL_4EDGES = 0,
+ DOUBLE_EDGES,
+ SINGLE_EDGES,
+ ALL_MBS
+} tagMbQtProfile;
+
+
+typedef enum
+{
+ Normal = 0,
+ RowPredict,
+ ColPredict
+} SKIPBITCODINGMODE;
+
+
+enum { LowRate = 1, MidRate, HighRate};
+
+enum {XFORMMODE_8x8, XFORMMODE_8x4, XFORMMODE_4x8, XFORMMODE_MBSWITCH/* pseudo-mode */, XFORMMODE_4x4};
+
+
+typedef enum
+{
+ WMV_Succeeded = 0,
+ WMV_Failed, // non-specific error; WMVideoDecReset() and try again at next keyframe.
+ WMV_BadMemory, // Catastrophic error; close codec and reinit before playing more content.
+ WMV_NoKeyFrameDecoded, // A keyframe must be the first frame after starting or a reset. WMVideoDecReset(), seek to a keyframe & continue.
+ WMV_CorruptedBits, // Corrupt bitstream; WMVideoDecReset() then seek to the next keyframe and try again.
+ WMV_UnSupportedOutputPixelFormat, // Try another color space (we generally like YV12, YUY2, and some RGB formats but not all WMV profiles map to all color spaces)
+ WMV_UnSupportedCompressedFormat, // Either FourCC or internal stream info indicates we can't play this clip.
+ WMV_InValidArguments, // Bad Arguement (can also occur when memory is corrupt).
+ WMV_BadSource, // N/A in a production decoder -- treat as a catastrophic error.
+
+ WMV_NoMoreOutput, // WMVideoDecGetOutput called when no output is available. Don't update screen but OK to continue to decode
+ WMV_EndOfFrame, // WMVDecCBGetData returns this when there is no more data available for this frame.
+ WMV_BrokenFrame, // Decoder thinks more data is needed but no more is available, treat as WMV_CorruptedBits
+
+ WMV_UnSupportedTransform // Returned by the CallBack if an indicated external output transform is not supported in hardware
+ // this is a request to the Codec to do the output transform inside the codec as part of GetOutput.
+} tagWMVDecodeStatus;
+
+
+typedef enum
+{
+ PROGRESSIVE = 0,
+ INTERLACEFRAME,
+ INTERLACEFIELD
+} tagFrameCodingMode;
+
+
+typedef enum
+{
+ NOT_WMV3 = -1,
+ WMV3_SIMPLE_PROFILE,
+ WMV3_MAIN_PROFILE,
+ WMV3_PC_PROFILE,
+ WMV3_ADVANCED_PROFILE,
+ WMV3_SCREEN
+} tagWMVProfile;
+
+
+typedef enum
+{
+ MIXED_MV,
+ ALL_1MV,
+ ALL_1MV_HALFPEL,
+ ALL_1MV_HALFPEL_BILINEAR,
+ INTENSITY_COMPENSATION
+} tagMvMode;
+
+
+typedef struct _VDEC_INFO_WMV_DQUANT_PRM_T_
+{
+ INT32 i4DoubleStepSize;
+ INT32 i4StepMinusStepIsEven;
+ INT32 i4DoublePlusStepSize;
+ INT32 i4DoublePlusStepSizeNeg;
+ INT32 i4DCStepSize; // For Intra
+} VDEC_INFO_WMV_DQUANT_PRM_T;
+
+
+typedef struct _VDEC_INFO_WMV_CMVSCALE_T_
+{
+ INT32 i4MaxZone1ScaledFarMVX;
+ INT32 i4MaxZone1ScaledFarMVY;
+ INT32 i4Zone1OffsetScaledFarMVX;
+ INT32 i4Zone1OffsetScaledFarMVY;
+ INT32 i4FarFieldScale1;
+ INT32 i4FarFieldScale2;
+ INT32 i4NearFieldScale;
+} VDEC_INFO_WMV_CMVSCALE_T;
+
+
+typedef struct _VDEC_INFO_WMV_MULTIRES_PRM_T_
+{
+ INT32 i4FrmWidthSrc;
+ INT32 i4FrmHeightSrc;
+ INT32 i4WidthDec;
+ INT32 iHeightDec;
+ UINT32 u4NumMBX;
+ UINT32 u4NumMBY;
+} VDEC_INFO_WMV_MULTIRES_PRM_T;
+
+
+typedef struct _VDEC_INFO_WMV_PAN_SCAN_WINDOW_T_
+{
+ UINT32 u4PanScanHorizOffset;
+ UINT32 u4PanScanVertOffset;
+ UINT32 u4PanScanWidth;
+ UINT32 u4PanScanHeight;
+} VDEC_INFO_WMV_PAN_SCAN_WINDOW_T;
+
+
+typedef struct _VDEC_INFO_WMV_SEQ_PRM_T_
+{
+ INT32 i4Profile;
+ INT32 i4WMV3Profile;
+ UINT8 u1Level;
+ BOOL fgVC1;
+ INT32 i4FrameRate;
+ UINT16 u2FrameRateToVdp;
+ INT32 i4BitRate;
+ BOOL fgPostProcInfoPresent;
+ BOOL fgBroadcastFlags;
+ BOOL fgInterlacedSource;
+ BOOL fgTemporalFrmCntr;
+ BOOL fgSeqFrameInterpolation;
+ BOOL fgProgSeqFrm;
+ BOOL fgDisplayExt;
+ UINT32 u4DispHorizSize;
+ UINT32 u4DispVertSize;
+ BOOL fgAspectRatioFlag;
+ INT32 i4AspectRatio;
+ INT32 i4AspectHorizSize;
+ INT32 i4AspectVertSize;
+ UINT16 u2AspectRatioToVdp;
+ BOOL fgFrameRateFlag;
+ BOOL fgFrameRateInd;
+ INT32 i4FrameRateNr;
+ INT32 i4FrameRateDr;
+ INT32 i4FrameRateExp;
+ BOOL fgColorFormatFlag;
+ INT32 i4ColorPrim;
+ INT32 i4TransferChar;
+ INT32 i4MatrixCoef;
+ BOOL fgHRDPrmFlag;
+ INT32 i4HRDNumLeakyBuckets;
+ BOOL fgFirstFrameAfterSPS;
+ // Simple & Main Profile
+ BOOL fgYUV411;
+ BOOL fgSpriteMode;
+ BOOL fgXintra8Switch;
+ BOOL fgMultiresEnabled;
+ INT32 i4ResIndex;
+ BOOL fgDCTTableMBEnabled;
+ BOOL fgPreProcRange;
+ INT32 i4NumBFrames;
+ BOOL fgRotatedIdct;
+ BOOL fgVCMInfoPresent;
+ // WMV7 & WMV8
+ BOOL fgMixedPel;
+ BOOL fgFrmHybridMVOn;
+ BOOL fgXintra8;
+ BOOL fgRndCtrlOn;
+ INT32 i4SliceCode;
+ BOOL fgSkipBitCoding;
+ BOOL fgNewPcbPcyTable;
+ BOOL fgCODFlagOn;
+ INT32 i4SkipBitModeV87;
+ INT32 i4Wmv8BpMode;
+ INT32 i4SkipBitCodingMode;
+ INT32 i4HufNewPCBPCYDec;
+ BOOL fg16bitXform;
+ BOOL fgStartCode;
+ BOOL fgRTMContent;
+ BOOL fgBetaContent;
+ INT32 i4BetaRTMMismatchIndex;
+ // Sequence header related
+ UINT32 u4MaxCodedWidth;
+ UINT32 u4MaxCodedHeight;
+ UINT32 u4MaxPicWidthSrc;
+ UINT32 u4MaxPicHeightSrc;
+ UINT32 u4PicWidthSrc;
+ UINT32 u4PicHeightSrc;
+ UINT32 u4PicWidthCmp;
+ UINT32 u4PicHeightCmp;
+ UINT32 u4PicWidthDec;
+ UINT32 u4PicHeightDec;
+ UINT32 u4NumMBX;
+ UINT32 u4NumMBY;
+ VDEC_INFO_WMV_MULTIRES_PRM_T rMultiResParams[4];
+} VDEC_INFO_WMV_SEQ_PRM_T;
+
+
+typedef struct _VDEC_INFO_WMV_ETRY_PRM_T_
+{
+ BOOL fgNewEntryPoint;
+ BOOL fgBrokenLink;
+ BOOL fgClosedEntryPoint;
+ BOOL fgPanScanPresent;
+ BOOL fgRefDistPresent;
+ INT32 i4RefFrameDistance;
+ BOOL fgLoopFilter;
+ BOOL fgUVHpelBilinear;
+ INT32 i4RangeState;
+ INT32 i4ReconRangeStateNew;
+ INT32 i4ReconRangeState;
+ BOOL fgExtendedMvMode;
+ INT32 i4MVRangeIndex;
+ INT32 i4DQuantCodingOn;
+ BOOL fgXformSwitch;
+ BOOL fgSequenceOverlap;
+ BOOL fgExplicitSeqQuantizer;
+ BOOL fgExplicitFrameQuantizer;
+ BOOL fgExplicitQuantizer;
+ BOOL fgNewDCQuant;
+ UINT32 u4CodedWidth;
+ UINT32 u4CodedHeight;
+ BOOL fgExtendedDeltaMvMode;
+ INT32 i4DeltaMVRangeIndex;
+ INT32 i4ExtendedDMVX;
+ INT32 i4ExtendedDMVY;
+ BOOL fgRangeRedYFlag;
+ BOOL fgRangeRedUVFlag;
+ INT32 i4RangeRedY;
+ INT32 i4RangeMapUV;
+ BOOL fgResolutionChange;
+} VDEC_INFO_WMV_ETRY_PRM_T;
+
+
+#define MAXPANSCANWINDOWS 4
+#define MAX_MBX 128 // for 1920 pixels, 1920/16=120
+#define MAX_MBY 68 // for 1080 pixels, 1080/16=67.5
+#define BP_MB_BITS 64 // represent 64 MB in a MB-row
+typedef struct _VDEC_INFO_WMV_PIC_PRM_T_
+{
+ UCHAR ucFrameCodingMode; // (FCM)
+ //Interlaced
+ BOOL fgInterlaceV2;
+ BOOL fgFieldMode;
+ BOOL fgInterpolateCurrentFrame;
+ BOOL fgUVProgressiveSubsampling;
+ INT32 i4PpMethod;
+ INT32 i4FrmCntMod4;
+ INT32 i4CurrentField; // 0:TOP, 1:BOTTOM field
+ INT32 i4CurrentTemporalField; // 0:1st field or frame picture, 1: 2nd field
+ UCHAR ucPicType; // (PTYPE)
+ UCHAR ucFirstFieldType;
+ UCHAR ucSecondFieldType;
+ UCHAR ucPrevPicType;
+ INT32 i4TemporalRef; // (TFCNTR)
+ INT32 i4MaxZone1ScaledFarMVX;
+ INT32 i4MaxZone1ScaledFarMVY;
+ INT32 i4Zone1OffsetScaledFarMVX;
+ INT32 i4Zone1OffsetScaledFarMVY;
+ INT32 i4FarFieldScale1;
+ INT32 i4FarFieldScale2;
+ INT32 i4NearFieldScale;
+
+ INT32 i4MaxZone1ScaledFarBackMVX;
+ INT32 i4MaxZone1ScaledFarBackMVY;
+ INT32 i4Zone1OffsetScaledFarBackMVX;
+ INT32 i4Zone1OffsetScaledFarBackMVY;
+ INT32 i4FarFieldScaleBack1;
+ INT32 i4FarFieldScaleBack2;
+ INT32 i4NearFieldScaleBack;
+
+ BOOL fgTwoRefPictures;
+ BOOL fgUseSameFieldForRef;
+ BOOL fgUseOppFieldForRef;
+ BOOL fgBackRefUsedHalfPel;
+ BOOL fgBackRefTopFieldHalfPelMode;
+ BOOL fgBackRefBottomFieldHalfPelMode;
+ BOOL fgMvResolution;
+ BOOL fgTopFieldFirst; // (TFF)
+ BOOL fgRepeatFirstField; // (RFF)
+ UCHAR ucRepeatFrameCount; // (RPTFRM)
+ UCHAR ucPSVectorNum;
+ VDEC_INFO_WMV_PAN_SCAN_WINDOW_T rPanScanWindowInfo[MAXPANSCANWINDOWS]; // (PS_HOFFSET, PS_VOFFSET, PS_WIDTH, PS_HEIGHT)
+ INT32 i4RndCtrl;
+ BOOL fgPostRC1;
+ INT32 i4BNumerator;
+ INT32 i4BDenominator;
+ INT32 i4BFrameReciprocal;
+ INT32 i4PicQtIdx; // (PQINDEX)
+ INT32 i4StepSize;
+ INT32 i4DCStepSize;
+ INT32 i4Overlap;
+ VDEC_INFO_WMV_DQUANT_PRM_T rDQuantParam3QPDeadzone[64];
+ VDEC_INFO_WMV_DQUANT_PRM_T rDQuantParam5QPDeadzone[64];
+ VDEC_INFO_WMV_DQUANT_PRM_T *prDQuantParam;
+ BOOL fgHalfStep; // (HALFQP)
+ BOOL fgUse3QPDZQuantizer; // (PQUANTIZER)
+ UINT32 u4DCTACInterTableIndx; // (TRANSACFRM)
+ UINT32 u4DCTACIntraTableIndx; // (TRANSACFRM2)
+ BOOL fgIntraDCTDCTable; // (TRANSDCTAB)
+ BOOL fgDCTTableMB;
+ INT32 i4SlicePicHeaderNum;
+ UINT32 u4SlicePicHeaderNumField;
+ BOOL fgDCPredIMBInPFrame;
+ UCHAR ucDQuantBiLevelStepSize;
+ BOOL fgDQuantOn;
+ INT32 i4Panning;
+ UCHAR ucDiffQtProfile;
+ BOOL fgDQuantBiLevel;
+ INT32 i4X9MVMode;
+ INT32 i4LumScale;
+ INT32 i4LumShift;
+ INT32 i4LumScaleTop;
+ INT32 i4LumScaleBottom;
+ INT32 i4LumShiftTop;
+ INT32 i4LumShiftBottom;
+ INT32 i4MBModeTable;
+ INT32 i4MvTable;
+ INT32 i4CBPTable;
+ INT32 i42MVBPTable;
+ INT32 i44MVBPTable;
+ BOOL fgMBXformSwitching;
+ INT32 i4FrameXformMode;
+ UINT32 u4ForwardRefPicType;
+ UINT32 u4BackwardRefPicType;
+ UINT32 u4BPRawFlag;
+ BOOL fgLuminanceWarp;
+ BOOL fgLuminanceWarpTop;
+ BOOL fgLuminanceWarpBottom;
+ // #if(CONFIG_DRV_VERIFY_SUPPORT)
+ BOOL fgWMVBrokenLink;
+ // #endif
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8550)
+ INT32 iForwardRefDistance;
+ INT32 iBackwardRefDistance;
+#endif
+} VDEC_INFO_WMV_PIC_PRM_T;
+
+
+typedef struct _VDEC_INFO_WMV_VFIFO_PRM_T_
+{
+ UINT32 u4CodeType; ///< Video decoding type
+ ULONG u4VFifoSa; ///< Video Fifo memory start address
+ ULONG u4VFifoEa; ///< Video Fifo memory end address
+} VDEC_INFO_WMV_VFIFO_PRM_T;
+
+
+typedef struct _VDEC_INFO_WMV_BS_INIT_PRM_T_
+{
+ ULONG u4ReadPointer;
+ ULONG u4WritePointer;
+ ULONG u4VFifoSa; ///< Video Fifo memory start address
+ ULONG u4VFifoEa; ///< Video Fifo memory end address
+} VDEC_INFO_WMV_BS_INIT_PRM_T;
+
+
+typedef struct _VDEC_INFO_WMV_WORK_BUF_SA_T_
+{
+ UCHAR ucMv1FbId;
+ UCHAR ucMv2FbId;
+ UCHAR ucMv3FbId;
+ UCHAR ucMv12FbId;
+ UCHAR ucBp1FbId;
+ UCHAR ucBp2FbId;
+ UCHAR ucBp3FbId;
+ UCHAR ucBp4FbId;
+ UCHAR ucDcacFbId;
+ UCHAR ucDcac2FbId;
+ UCHAR ucPp1FbId;
+ UCHAR ucPp2FbId;
+ ULONG u4Pic0YSa;
+ ULONG u4Pic0CSa;
+ ULONG u4Pic1YSa;
+ ULONG u4Pic1CSa;
+ ULONG u4Pic2YSa;
+ ULONG u4Pic2CSa;
+ ULONG u4Mv1Sa;
+ ULONG u4Mv2Sa;
+ ULONG u4Mv3Sa;
+ ULONG u4Bp1Sa;
+ ULONG u4Bp2Sa;
+ ULONG u4Bp3Sa;
+ ULONG u4Bp4Sa;
+ ULONG u4DcacSa;
+ ULONG u4Dcac2Sa;
+ ULONG u4Mv12Sa;
+ ULONG u4Pp1Sa;
+ ULONG u4Pp2Sa;
+ UCHAR ucRealMv1FbId;
+ UCHAR ucRealMv12FbId;
+
+ UCHAR ucDcacNewFbId;
+ UCHAR ucMvNewFbId;
+ UCHAR ucBp0NewFbId;
+ UCHAR ucBp1NewFbId;
+ UCHAR ucBp2NewFbId;
+ ULONG u4DcacNewSa;
+ ULONG u4MvNewSa;
+ ULONG u4Bp0NewSa;
+ ULONG u4Bp1NewSa;
+ ULONG u4Bp2NewSa;
+
+#if 1 //(WMV_8320_SUPPORT)
+ ULONG u4VLDWrapperWrok;
+ ULONG u4PPWrapperWrok;
+#endif
+} VDEC_INFO_WMV_WORK_BUF_SA_T;
+
+
+typedef struct _VDEC_INFO_WMV_DEC_BP_PRM_T_
+{
+ UCHAR ucFrameCodingMode;
+ UCHAR ucPicType;
+ INT32 i4CodecVersion;
+ INT32 i4Wmv8BpMode;
+ UINT32 u4PicHeightSrc;
+ UINT32 u4PicHeightDec;
+ UINT32 u4NumMBX;
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8580)
+ UINT32 u4NumMBY;
+#endif
+ VDEC_INFO_WMV_WORK_BUF_SA_T rWmvWorkBufSa;
+ BOOL fgWmvMode;
+} VDEC_INFO_WMV_DEC_BP_PRM_T;
+
+
+typedef struct _VDEC_INFO_WMV_ICOMP_T_
+{
+ INT32 i4Scale;
+ INT32 i4Shift;
+ INT32 i4Enable;
+} VDEC_INFO_WMV_ICOMP_T;
+
+
+typedef struct _VDEC_INFO_WMV_ICOMP_SET_T_
+{
+ VDEC_INFO_WMV_ICOMP_T New;
+ VDEC_INFO_WMV_ICOMP_T Old;
+} VDEC_INFO_WMV_ICOMP_SET_T;
+
+
+typedef struct _VDEC_INFO_WMV_ICOMP_PRM_T_
+{
+ UCHAR ucFrameTypeLast;
+ UCHAR ucFrameTypeLastTop;
+ UCHAR ucFrameTypeLastBot;
+ UCHAR ucPreProcessFrameStatus;
+ INT32 i4BoundaryUMVIcomp;
+ INT32 i4SecondFieldParity;
+ INT32 i4BoundaryUMVIcompEnable;
+ INT32 i4FirstFieldIntensityComp;
+ INT32 i4ResetMvDram;
+ VDEC_INFO_WMV_ICOMP_SET_T OldTopField;
+ VDEC_INFO_WMV_ICOMP_SET_T NewTopField;
+ VDEC_INFO_WMV_ICOMP_SET_T OldBotField;
+ VDEC_INFO_WMV_ICOMP_SET_T NewBotField;
+} VDEC_INFO_WMV_ICOMP_PRM_T;
+
+
+typedef struct _VDEC_INFO_WMV_DEC_PRM_T_
+{
+ INT32 i4CodecVersion;
+ INT32 i4MemBase;
+ UINT32 u4FRefBufIdx;
+ VDEC_INFO_WMV_SEQ_PRM_T *prSPS;
+ VDEC_INFO_WMV_ETRY_PRM_T *prEPS;
+ VDEC_INFO_WMV_PIC_PRM_T *prPPS;
+ VDEC_INFO_WMV_ICOMP_PRM_T *prICOMPS;
+ VDEC_INFO_WMV_WORK_BUF_SA_T rWmvWorkBufSa;
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8530)
+ UINT32 u4WMVSliceAddr[3];
+#endif
+ BOOL fgBwdRefPVOP;
+ BOOL fgWmvMode;
+} VDEC_INFO_WMV_DEC_PRM_T;
+
+
+typedef struct _VDEC_INFO_WMV_ERR_INFO_T_
+{
+ UINT32 u4MC_X;
+ UINT32 u4MC_Y;
+ UINT32 u4WmvErrCnt; ///< Video decode error count
+ UINT32 u4WmvErrRow; ///< Video decode error mb row
+ UINT32 u4WmvErrType; ///< Video decode error type
+} VDEC_INFO_WMV_ERR_INFO_T;
+
+
+typedef struct _VDEC_INFO_WMV_MV_BUF_SA_T_
+{
+ UCHAR ucMv1FbId;
+ ULONG u4Mv1Sa;
+ UCHAR ucMv12FbId;
+ ULONG u4Mv12Sa;
+ UCHAR ucMvNewFbId;
+ ULONG u4MvNewSa;
+} VDEC_INFO_WMV_MV_BUF_SA_T;
+
+typedef struct _VDEC_INFO_WMV_SR_STORE_PRM_T_
+{
+ //EPS parts
+ BOOL fgNewEntryPoint;
+ INT32 i4RefFrameDistance;
+
+ //PPS parts
+ //UCHAR ucPrevPicType;
+ //INT32 i4TemporalRef; // (TFCNTR)
+ //BOOL fgBackRefUsedHalfPel;
+ BOOL fgBackRefTopFieldHalfPelMode;
+ BOOL fgBackRefBottomFieldHalfPelMode;
+ //BOOL fgMBXformSwitching;
+ INT32 i4FrameXformMode;
+ UINT32 u4ForwardRefPicType;
+ UINT32 u4BackwardRefPicType;
+} VDEC_INFO_WMV_SR_STORE_PRM_T;
+#endif //#ifndef _HAL_VDEC_WMV_IF_H_
+
diff --git a/drivers/misc/mediatek/vdec/include/vdec_sr_usage.h b/drivers/misc/mediatek/vdec/include/vdec_sr_usage.h
new file mode 100644
index 000000000..e74a79445
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_sr_usage.h
@@ -0,0 +1,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
diff --git a/drivers/misc/mediatek/vdec/include/vdec_type.h b/drivers/misc/mediatek/vdec/include/vdec_type.h
new file mode 100644
index 000000000..deb0eb53c
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_type.h
@@ -0,0 +1,291 @@
+#ifndef _VDEC_TYPE_H_
+#define _VDEC_TYPE_H_
+
+#include "drv_config.h"
+//#include "chip_ver.h"
+// *********************************************************************
+// MPV Constant define
+// *********************************************************************
+#define DRAMA_NONCACH_BASE_ADDRESS 0xC0000000L
+
+#define VDEC_REMOVE_UNUSED_FUNC 0
+
+
+#if (!CONFIG_DRV_LINUX_DATA_CONSISTENCY)
+#define u4AbsDramANc(u4Ptr) PHYSICAL(u4Ptr) //(((UINT32)(u4Ptr)) & (~DRAMA_NONCACH_BASE_ADDRESS))
+#else
+#define u4AbsDramANc(u4Ptr) ((UINT32)(u4Ptr))
+#endif
+
+//MPEG Version
+#define MPEG1 1
+#define MPEG2 2
+
+//Header Type
+//#define SEQ_HDR 1
+//#define GOP_HDR 2
+//#define SEQ_END 3
+
+// for _ptPicIdx->dwVtype in MPEG1/2 and _u4PicCdTp in MPEG1/2/4
+#define I_TYPE 1
+#define P_TYPE 2
+#define B_TYPE 3
+#define D_TYPE 4
+// MPEG4 new picture Coding Type
+// for _ptPicIdx->dwVtype in MPEG4
+#define VIS_OBJ 0x8b // visual_object_start_code, 000001B5
+#define VID_OBJ_LAY 0x85 // video_object_layer_start_code, 000001[20-2f]
+//#define VID_OBJ 0x84 // video_object_start_code, 000001[00~1f]
+#define GOVOP 0x89 // group_of_vop_start_code, 000001B3
+#define I_VOP 0x80 // vop_start_code 000001B6
+#define P_VOP 0x81 // vop_start_code 000001B6
+#define B_VOP 0x82 // vop_start_code 000001B6
+#define S_VOP 0x83 // vop_start_code 000001B6
+#define SH_I_VOP 0x98 // short_video_start_marker
+#define SH_P_VOP 0x99 // short_video_start_marker
+#define DX3_I_FRM 0xf0 // generated by firmware
+#define DX3_P_FRM 0xf1 // generated by firmware
+// WMV picture type define
+#define IVOP 0xa0
+#define PVOP 0xa1
+#define BVOP 0xa2
+#define BIVOP 0xa3
+#define SKIPFRAME 0xa4
+
+
+// Picture Structure
+#define TOP_FLD_PIC 1
+#define BTM_FLD_PIC 2
+#define FRM_PIC 3
+// The follow 2 define use in Reference Field Picture
+#define TWO_FLDPIC_TOPFIRST 4
+#define TWO_FLDPIC_BTMFIRST 5
+#define ERR_PIC_STRUCT 0xFF
+#define PIC_STRUCT_MASK 0xF
+
+//Flags for pic
+#define PIC_FLAG_FORCE_DEC (0x1 << 0)
+#define PIC_FLAG_REAL_DEC (0x1 << 1)
+#define PIC_FLAG_REPEAT_1st_FLD (0x1 << 2)
+#define PIC_FLAG_BROKEN_LINK (0x1 << 3)
+#define PIC_FLAG_WITHOUT_NEXT_STARTCODE (0x1 << 4)
+
+//Flags for decoding
+#define DEC_FLG_2ND_FLD_PIC (0x1 << 0)
+#define DEC_DROP_2ND_FLD_PIC (0x1 << 1)
+#define DEC_NEED_2ND_FLD_PIC (0x1 << 2)
+
+//Status for decoding
+#define VDEC_CHK_BEF_VPARSE ((unsigned int)0x1 << 0)
+#define VDEC_WAIT_NEXT_I ((unsigned int)0x1 << 1)
+#define VDEC_PB_COND_PAUSE_MODE ((unsigned int)0x1 << 2)
+#define VDEC_DECODING ((unsigned int)0x1 << 3)
+#define VDEC_INQ_MODE_COMPLETE ((unsigned int)0x1 << 4)
+#define VDEC_CHK_WAIT_2ND_VPARSE ((unsigned int)0x1 << 5)
+#define VDEC_FAC_MODE_COMPLETE ((unsigned int)0x1<<6)
+#define VDEC_WAIT_PIC_SIZE ((unsigned int)0x1 << 7)
+#define VDEC_DRIP_FRM_PRS_MODE ((unsigned int)0x1 << 8)
+#define VDEC_DRIP_FRM_DEC_MODE ((unsigned int)0x1 << 9)
+#define VDEC_NO_DISP_PIC_BEF_I ((unsigned int)0x1 << 10)
+#define VDEC_WAIT_FB ((unsigned int)0x1 << 11)
+#define VDEC_NIPB_2_IPB ((unsigned int)0x1 << 12)
+#define VDEC_FORCE_FLUSH_DPB ((unsigned int)0x1 << 13)
+#define VDEC_DEC_DISP_ONE_FRAME ((unsigned int)0x1 << 14)
+#define VDEC_DEC_START_BY_INV_PTS ((unsigned int)0x1 << 15)
+#define VDEC_DEC_WITH_AVCHD_XVYCC ((unsigned int)0x1 << 16)
+#define VDEC_DEC_DRIP_PIC ((unsigned int)0x1 << 17)
+#define VDEC_INTERLACED_FRM ((unsigned int)0x1 << 18)
+#define VDEC_NO_DEC_NON_REF ((unsigned int)0x1 << 19)
+#define VDEC_DISP_LAST_PIC ((unsigned int)0x1 << 20)
+#define VDEC_UPD_VFIFO_ONLY ((unsigned int)0x1 << 21)
+#define VDEC_WITH_SEQ_END ((unsigned int)0x1 << 22)
+#define VDEC_PROGRESSIVE_SEQ ((unsigned int)0x1 << 23)
+#define VDEC_HANDLING_DEC_RES ((unsigned int)0x1 << 24)
+#define VDEC_DVDAUDIO_PIC ((unsigned int)0x1 << 25)
+#define VDEC_DEC_ERR_DROPPED ((unsigned int)0x1 << 26)
+#define VDEC_DEC_EOS ((unsigned int)0x1 << 27)
+#define VDEC_MVC_L_ALIGN_BASE ((unsigned int)0x1 << 28)
+#define VDEC_USE_PTS_REPLACE_FRAMERATE ((unsigned int)0x1 << 29) ///< check if USE PTS to replace frame rate for BD
+#define VDEC_DEC_WITH_HDV_XVCOLOR ((unsigned int)0x1 << 30)
+#define VDEC_DEC_INQUIRY_24P ((unsigned int)0x1 << 31)
+
+//MVC Status for decoding
+#define VDEC_MVC_DROP_PIC ((unsigned int)0x1 << 0)
+#define VDEC_MVC_VIRTUAL_DEC ((unsigned int)0x1 << 1)
+
+// VC1 PP SCALE TYPE
+#define PP_NO_SCALE (0x0)
+#define PP_SCALE_DOWN (0x1)
+#define PP_SCALE_UP (0x1 << 1)
+
+
+//Block Mode
+#define MC_BLK_TB 0
+#define MC_BLK_SWAP 1
+#define MC_BLK_NORM 2
+
+
+#define OFF 0
+#define ON 1
+
+
+// Referenc Buf / B Buf / Digest Buf / Post Processing Buf Index
+#define MC_REF_BUF_1 0
+#define MC_REF_BUF_2 1
+#define MC_DIG_BUF 2
+#define MC_B_BUF 3
+#define MC_Prg_B_BUF_1 4
+#define MC_Prg_B_BUF_2 5
+
+
+// Picture Field control for MC
+#define MC_TOP_FLD 0
+#define MC_BOTTOM_FLD 1
+
+#define MC_2ND_FLD_OFF 0
+#define MC_2ND_FLD_ON 1
+
+
+#define MPV_ES_ID_UNKNOWN 0xFF
+#define MPV_CHANNEL_ID_UNKNOWN 0xFF
+
+#define MPV_ESMQ_0 0
+#define MPV_ESMQ_1 1
+
+#define MPV_ESMQ_0_USED 1
+#define MPV_ESMQ_1_USED 2
+#define MPV_ESMQ_CLEAR 0xFF
+
+
+#define MPV_TYPE_SD 0
+#define MPV_TYPE_HD 1
+#define MPV_TYPE_720HD 720
+
+#ifdef DRV_VDEC_VDP_RACING
+#define MAX_MAIN_DI_FB_NUM 2
+#define MAX_SUB_DI_FB_NUM 2
+#else
+#define MAX_MAIN_DI_FB_NUM 4
+#define MAX_SUB_DI_FB_NUM 3
+#endif
+#define MAX_MVC_FB_NUM 3
+
+// Read address must 128 bit alignment
+#define MPV_READ_ADDR_ALIGN (128 / 8)
+
+// Quantization Table Size, 64 = 16 * 4 (Byte)
+#define MPV_MATRIX_SIZE 16
+#define MPV_MATRIX_RAW_SIZE ((MPV_MATRIX_SIZE * 8) + MPV_READ_ADDR_ALIGN)
+
+
+//Block Mode Alignment
+#define MPV_BLK_ALIGMENT 0x3F
+#define MPV_SWAP_BLK_ALIGMENT 0x7F
+
+#define VDEC_INV_8 0xFF
+#define VDEC_INV_16 0xFFFF
+#define VDEC_INV_32 0xFFFFFFFF
+#define VDEC_INV_64 0xFFFFFFFFFFFFFFFFLL
+
+#define STC_DELTA_MSB (0x80000000)
+
+#define MPV_FORCE_SD 1
+
+#define VDEC_FBG_ID_UNKNOWN 0xFF
+#define VDEC_FB_ID_UNKNOWN 0xFF
+#define FBM_MS_VDEC 0
+
+//For Closed Caption
+#define CC_LINE21_INDICATOR 0x4343
+#define CC_ATSC_IDENTIFIER 0x47413934
+#define CC_AFD_IDENTIFIER 0x44544731
+#define VC1_USER_DATA_IDENTIFIER 0x48444D56
+#define EIA_CC 0x03
+#define MAX_CC_DATA 0x03
+//#define FAILED(x) (x < 0)
+
+// For Line23
+#define LINE23_INDICATOR 0x53455346
+
+// For Offset Metadata
+#define OFFSET_METADATA_INDICATOR 0x4F464D44
+
+// For XVYcc
+#define AVCHD_XVYCC_IDENTIFIER 0x434C4944
+
+#define UUID_ISO_IEC_11578_0 0xA74602BB
+#define UUID_ISO_IEC_11578_1 0xF8A14CC0
+#define UUID_ISO_IEC_11578_2 0xA93648E3
+#define UUID_ISO_IEC_11578_3 0x91DCE761
+
+#define UUID_ISO_IEC_11578_0_BD 0x17EE8C60
+#define UUID_ISO_IEC_11578_1_BD 0xF84D11D9
+#define UUID_ISO_IEC_11578_2_BD 0x8CD60800
+#define UUID_ISO_IEC_11578_3_BD 0x200C9A66
+
+
+#define MAX_EDPB_NUM 30
+
+#define vSetPicFlag(arg1, arg2) arg1 |= (arg2)
+#define vClrPicFlagAll(arg1) arg1 = 0
+#define vClrPicFlag(arg1, arg2) arg1 &= (~(arg2))
+#define fgIsPicFlag(arg1, arg2) ((arg1 & (arg2)) > 0)
+
+#define vSetDecStatus(arg1, arg2) arg1 |= (arg2)
+#define vClrDecStatus(arg1, arg2) arg1 &= (~(arg2))
+#define fgIsDecStatus(arg1, arg2) ((arg1 & (arg2)) > 0)
+
+#define vSetDecMVCStatus(arg1, arg2) arg1 |= (arg2)
+#define vClrDecMVCStatus(arg1, arg2) arg1 &= (~(arg2))
+#define fgIsDecMVCStatus(arg1, arg2) ((arg1 & (arg2)) > 0)
+
+#define VDEC_ALIGN_MASK(value, mask) ((value + mask) & (~mask))
+
+#define VDEC_GET_FBG_ID(prVDecEsInfo) (prVDecEsInfo->rVDecFbmInfo.ucFbgId)
+
+#define fgIsMpeg1(prVDecEsInfo) (prVDecEsInfo->rVDecNormInfo.eVdecCodecType == VDEC_MPEG1)
+#define fgIsMpeg2(prVDecEsInfo) (prVDecEsInfo->rVDecNormInfo.eVdecCodecType == VDEC_MPEG2)
+
+#define fgIsMPEG2IPic(u4PicCdTp) ((u4PicCdTp & 0xff) == I_TYPE)
+
+#define fgIsMPEG2RefPic(u4PicCdTp) (((u4PicCdTp & 0xff) == I_TYPE) || \
+ ((u4PicCdTp & 0xff) == P_TYPE))
+
+#define fgIsWMVRefPic(u4PicCdTp) (((u4PicCdTp & 0xff) == IVOP) || \
+ ((u4PicCdTp & 0xff) == PVOP) || \
+ ((u4PicCdTp & 0xff) == SKIPFRAME))
+
+#define fgIsVDecFrmPic(ucPicStruct) (ucPicStruct == FRM_PIC)
+
+#define fgIsVDecFldPic(ucPicStruct) (ucPicStruct != FRM_PIC)
+
+#define vSetVDecFlag(u4DecFlag,arg) (u4DecFlag |= (arg))
+
+#define vClrVDecFlag(u4DecFlag,arg) (u4DecFlag &= (~(arg)))
+
+#define vToggleVDecFlag(u4DecFlag,arg) (u4DecFlag ^= (arg))
+#define fgIsVDecFlagSet(u4DecFlag,arg) ((u4DecFlag & (arg)) > 0)
+
+#define fgIsCCOutput(prVDecEsInfo) ((prVDecEsInfo->prVDecPBInfo->e_speed_type >= VID_DEC_SPEED_TYPE_PAUSE) \
+ && (prVDecEsInfo->prVDecPBInfo->e_speed_type <= VID_DEC_SPEED_TYPE_NORMAL))
+
+#define VDEC_ASSERT(arg) ASSERT(arg)
+
+#define VDEC_FORCEWHILE(arg) while(arg);
+
+#define fgIsRSFwdDec(arg) FALSE
+
+#define fgIsRSRvsDec(arg) FALSE
+
+#define fgIsVDecNorm(arg) ((arg >= VID_DEC_SPEED_TYPE_PAUSE) && (arg <= VID_DEC_SPEED_TYPE_NORMAL))
+
+#if 0//def NONCACHE
+#define MpvAddrWithNonCacheOffset(arg) CACHE(arg)
+#define MpvAddrWithoutNonCacheOffset(arg) NONCACHE(arg)
+#else
+#define MpvAddrWithNonCacheOffset(arg) (arg)//((arg & 0x0FFFFFFF) + 0xC0000000)
+#define MpvAddrWithoutNonCacheOffset(arg) (arg)//(arg & 0x0FFFFFFF)
+#endif
+
+
+#endif /* _MPV_TYPE_H_ */
diff --git a/drivers/misc/mediatek/vdec/include/vdec_usage.h b/drivers/misc/mediatek/vdec/include/vdec_usage.h
new file mode 100644
index 000000000..b6d087144
--- /dev/null
+++ b/drivers/misc/mediatek/vdec/include/vdec_usage.h
@@ -0,0 +1,1023 @@
+#ifndef _VDEC_USAGE_H_
+#define _VDEC_USAGE_H_
+
+#include "drv_config.h"
+//#include "x_stl_lib.h"
+//#include "x_assert.h"
+
+#include "vdec_common_if.h"
+//#include "u_pbinf.h"
+
+
+#ifndef CONFIG_DRV_OMX_SUPPORT
+#define CONFIG_DRV_OMX_SUPPORT 0
+#endif
+
+#if (1 == CONFIG_DRV_OMX_SUPPORT)
+#include "omx_vdec_vconv.h"
+#endif
+
+#define HW_SEARCH_START_CODE 0
+
+//#include "vdec_mpeg4_info.h"
+//#include "vdec_wmv_info.h"
+//#include "vdec_h264_info.h"
+
+#define VDEC_DYNAMIC_ALLOC 1
+
+//#define LOG(level, fmt...)
+//#define ASSERT(x) ((void)(x))
+//#define VERIFY(x) ((void)(x))
+#ifdef VDEC_SR_SUPPORT
+#include "vdec_sr_usage.h"
+
+#define MPV_CMD_SIZE 2
+#define SR_GET_AU_FAIL 0
+#define SR_GET_AU_CMD 1
+#define SR_GET_AU_PIC 2
+#define SR_GET_AU_RVS_END 3
+#define SR_GET_AU_CMD_SEQEND 4
+#define SR_GET_CMD_NOT_SEND 5
+
+#define MPEG2_MAX_SEQ_NUM 50
+#define MPEG2_MAX_GOP_NUM 50
+#endif
+
+#define VDEC_LOG_TIME 0
+#define VDEC_DRAM_BANDWIDTH_PEAK 0
+
+typedef enum
+{
+ VDEC_LOG_DEFAULT = 1 << 0,
+ VDEC_LOG_FrameRate = 1 << 1,
+ VDEC_LOG_LASTIPTS = 1 << 2,
+ VDEC_LOG_DROPPIC = 1 << 3,
+ VDEC_LOG_ASPECTRatio = 1 << 4,
+ VDEC_LOG_ESM2VDEC = 1 << 5,
+ VDEC_LOG_VDEC2VDP = 1 << 6,
+ VDEC_LOG_H264INOUT = 1 << 7,
+ VDEC_LOG_IBCCMD = 1 << 8,
+ VDEC_LOG_MPEG2 = 1 << 9,
+ VDEC_LOG_PICINFO = 1 << 10,
+ VDEC_LOG_PBMODE = 1 << 11,
+ VDEC_LOG_MWGetSet = 1 << 12,
+ VDEC_LOG_LetterBox = 1 << 13,
+ VDEC_LOG_OMX = 1 << 14,
+ VDEC_LOG_STATEMACHINE = 1 << 15,
+ VDEC_LOG_VP6 = 1 << 16,
+ VDEC_LOG_LEVEL17 = 1 << 17,
+ VDEC_LOG_LEVEL18 = 1 << 18,
+ VDEC_LOG_LEVEL19 = 1 << 19,
+ VDEC_LOG_LEVEL20 = 1 << 20,
+ VDEC_LOG_LEVEL21 = 1 << 21,
+ VDEC_LOG_LEVEL22 = 1 << 22,
+ VDEC_LOG_LEVEL23 = 1 << 23,
+ VDEC_LOG_LEVEL24 = 1 << 24,
+ VDEC_LOG_LEVEL25 = 1 << 25,
+ VDEC_LOG_LEVEL26 = 1 << 26,
+ VDEC_LOG_LEVEL27 = 1 << 27,
+ VDEC_LOG_LEVEL28 = 1 << 28,
+ VDEC_LOG_LEVEL29 = 1 << 29,
+ VDEC_LOG_LEVEL30 = 1 << 30,
+ VDEC_LOG_LEVEL31 = 1 << 31
+} VDEC_LOG_LEVEL_T;
+
+#if VDEC_MVC_SUPPORT
+#define BASE_VIEW_ID 0
+#define DEP_VIEW_ID 1
+
+typedef enum
+{
+ VDEC_MVC_NONE = 0,
+ VDEC_MVC_BASE,
+ VDEC_MVC_DEP,
+ VDEC_MVC_MAX = 0xFF,
+} VDEC_MVC_INFO_T;
+
+typedef enum
+{
+ MVC_CHK_WAIT_STATE,
+ MVC_CHK_FIN_STATE,
+ MVC_MAX = 0xFF,
+} VDEC_MVC_STATE_T;
+#endif
+
+typedef enum
+{
+ VDEC_INIT_STATE = 0,
+ VDEC_GET_ESM_INFO_STATE,
+ VDEC_VPARSE_PROC_STATE,
+ VDEC_VPARSE_CHK_STATE,
+ VDEC_START_TO_DEC_STATE,
+ VDEC_DECODING_STATE,
+ VDEC_INS_TO_DISP_Q_STATE,
+#if (defined(DRV_VDEC_VDP_RACING) || defined(VDEC_PIP_WITH_ONE_HW))
+ VDEC_DEC_DECISION_STATE,
+ VDEC_GET_FB_STATE,
+ VDEC_DEC_NOFBUF_STATE,
+ VDEC_PREPARE_FRMBUF_STATE,
+ VDEC_PRE_OUTPUT_FRMBUF_STATE,
+#endif
+#if VDEC_MVC_SUPPORT
+ MVC_BASE_WAIT_DEP_OUT_STATE = 0x15,
+ MVC_DEP_INIT_STATE = 0x20,
+ MVC_DEP_WAIT_BASE_DEC_STATE = 0x25,
+#endif
+ VDEC_STATE_MAX = 0xFF,
+} VDEC_STATE_T;
+
+typedef enum
+{
+ VDEC_STATE_PASS = 0,
+ VDEC_WAIT_1_TICK = 1,
+ VDEC_DROP_PIC = 2,
+ VDEC_INIT_STATE_WAIT = 0x10,
+ VDEC_GET_ESM_INFO_STATE_WAIT,
+#ifdef VDEC_PIP_WITH_ONE_HW
+ VDEC_DEC_DECISION_STATE_WAIT,
+#endif
+ VDEC_VPARSE_CHK_STATE_WAIT,
+ VDEC_START_TO_DEC_STATE_WAIT,
+ VDEC_DECODING_STATE_WAIT,
+ VDEC_INS_TO_DISP_Q_STATE_WAIT,
+#ifdef VDEC_SR_SUPPORT
+ VDEC_SR_REQ_STATE_WAIT,
+#endif
+#if VDEC_MVC_SUPPORT
+ MVC_BASE_DEP_STATE_WAIT,
+ MVC_DEP_INIT_STATE_WAIT,
+ MVC_DEP_BASE_STATE_WAIT,
+#endif
+ VDEC_GET_ESM_INFO_1_TICK_WAIT,
+ VDEC_STATE_WAIT_MAX = 0xFF,
+} VDEC_COND_T;
+
+typedef enum _VDEC_EVENT_T
+{
+ VDEC_EVENT_NONE = 0,
+ VDEC_EVENT_CMD = 1 << 0,
+ VDEC_EVENT_AU_VPIC = 1 << 1,
+ VDEC_EVENT_DEC_END = 1 << 2,
+ VDEC_EVENT_GET_FB = 1 << 3,
+ VDEC_EVENT_OUT_FB = 1 << 4,
+#ifdef VDEC_SR_SUPPORT
+ VDEC_EVENT_REQ_WAIT = 1 << 5,
+ VDEC_EVENT_CREAT_FBG = 1 << 6,
+ VDEC_EVENT_FWD_WAIT = 1 << 7,
+ VDEC_EVENT_SR0_STOP_WAIT = 1 << 8,
+ VDEC_EVENT_SR1_STOP_WAIT = 1 << 9,
+#endif
+#if VDEC_MVC_SUPPORT
+ VDEC_EVENT_BASE_WAIT = 1 << 10,
+ VDEC_EVENT_DEP_WAIT = 1 << 11,
+ VDEC_EVENT_DEP_STOP_WAIT = 1 << 14,
+#endif
+#ifdef VDEC_PIP_WITH_ONE_HW
+ VDEC_EVENT_GET_HW = 1 << 12,
+#endif
+#if (CONFIG_DRV_SUPPORT_DVD_AUDIO)
+ VDEC_EVENT_WAIT_NEXTPIC = 1 << 13,
+#endif
+ VDEC_EVENT_MAX = 0xff,
+} VDEC_EVENT_T;
+
+typedef enum _VDEC_ERR_DROP_LEVEL_T
+{
+ VDEC_ERR_DROP_ALL = 0, /* Level 0: Drop frame if there is error. (Default) */
+ VDEC_ERR_DROP_I, /* Level 1: Ignore P or B frame's error. If I-VOP is error, then, drop I-VOP. */
+ VDEC_ERR_DROP_NONE /* Level 2: Show every pictures. (I, P, B) */
+} VDEC_ERR_DROP_LEVEL_T;
+
+typedef struct _VDEC_COMM_INFO_T
+{
+ UCHAR ucVDecErrThd;
+} VDEC_COMM_INFO_T;
+
+typedef struct _VDEC_ESM_INFO_T
+{
+ UCHAR ucMpvId; ///<
+ UINT32 u4PicRdIdx;
+ // IBC_PathInfo *prIBCPathInfo; // Add only for DRV_IBC_InbandCmdTypeFirstPictureDisplay
+ UINT32 pu4Handle; ///< [OUT] interface handle
+ // Decoder_OpIf* pprDecoderOplIf; ///< [OUT] Interface for decoder operation
+} VDEC_ESM_INFO_T;
+
+typedef struct _VDEC_FBM_INFO_T
+{
+ UCHAR ucFbgId;
+ UCHAR ucFbgFbNum;
+ UCHAR ucFbgDpbNum;
+ UCHAR ucFbId;
+ UCHAR ucFbDbId;
+ UCHAR ucVDSCLFbId;
+ BOOL fgOnlyNeedFbDb;
+ UINT32 u4VDSCLWorkAddr;
+#ifdef VDSCL_SIZE_LIMIT_SUPPORT
+ UINT8 ucVDSCLMaxFbNum;
+#endif
+#ifdef VDEC_SR_SUPPORT
+ UCHAR ucVDSCLFbId2;
+ UINT32 u4VDSCLWorkAddr2;
+#endif
+ UINT32 u4FbgWidth;
+ UINT32 u4FbgHeight;
+ UINT32 u4FbgAllocWidth;
+ UINT32 u4WaitDispTime; // UINT32 u4WaitDispTime;
+ // VDSCL_INFO_T rVdsclInfo;
+ UINT32 u4VdsclFbWidth;
+ // FBM_CB rFbmCCCb;
+ // FBM_CB rFbmCb;
+ // FBM_CB rFbmGetFBCb;
+ // FBM_CB rFbmOutFBCb;
+ // FBM_FRAMEINFO *parFbmFrameInfo;
+#if (defined(DRV_VDEC_VDP_RACING) || defined(VDEC_PIP_WITH_ONE_HW))
+ UCHAR ucPrevFbId;
+#endif
+} VDEC_FBM_INFO_T;
+
+#if 0
+typedef struct _VDEC_NOTIFY_INFO_T
+{
+ void *pvPtsNfyTag;
+ PFN_PTS_NFY_FCT pfPtsNfyFct;
+ void *pvInpNfyTag;
+ PFN_ACQUIRE_FCT pfAcquireNfy;
+ PFN_RELEASE_FCT pfReleaseNfy;
+} VDEC_NOTIFY_INFO_T;
+#endif
+
+typedef struct _VDEC_SYNC_INFO_T
+{
+ UCHAR ucSyncMode;
+ UCHAR ucStcId;
+ BOOL fgSetStartPts;
+} VDEC_SYNC_INFO_T;
+
+typedef struct _VDEC_EC_INFO_T
+{
+ UCHAR ucECMethod;
+ UINT32 u4ErrThrsd;
+ BOOL fgDetectRefLost;
+} VDEC_EC_INFO_T;
+
+#if 0
+typedef struct _VDEC_PB_INFO_T
+{
+ UINT32 u4DecPicType;
+ UINT32 u4DecSpeed;
+ MPV_FRAME_ACCURATE_TYPE_T e_frame_accurate_type;
+ union
+ {
+ MPV_FRAME_ACCURATE_PTS_INFO_T t_frame_accurate_pts;
+ MPV_FRAME_ACCURATE_NUM_INFO_T t_frame_accurate_num;
+ } u;
+} VDEC_PB_INFO_T;
+#endif
+
+typedef struct _VDEC_MW_INFO_INFO
+{
+ UINT64 u8LatestIPicOffset;
+ UINT64 u8LatestIPicPts;
+ UINT64 u8LatestGopHdrOffset;
+ UINT64 u8LatestSeqHdrOffset;
+ // VID_DEC_INQUIRY_TYPE_T eInqType;
+ // VID_DEC_TIME_CODE_INFO_T tTimeCode;
+ // VID_DEC_SEQUENCE_INFO_T tSeqInfo;
+} VDEC_MW_INFO_T;
+
+typedef struct _VDEC_COMP_INFO_T
+{
+ UINT16 u2CompId;
+ UINT16 u2CompType;
+ UINT16 u2FilterId;
+ UINT16 u2FilterType;
+#ifdef VDEC_SR_SUPPORT
+ void *pvFilterIf;
+ void *pvFilterTag;
+#endif
+ UINT16 u2SyncCtrlId;
+ UINT16 u2SyncCtrlType;
+ void *pvSyncCtrlIf;
+ void *pvSyncCtrlTag;
+ UINT16 u2VdpId;
+ UINT16 u2VdpType;
+ void *pvVdpIf;
+ void *pvVdpTag;
+} VDEC_COMP_INFO_T;
+
+
+typedef struct _VDEC_PIC_INFO_T
+{
+ UCHAR ucPicStruct;
+ UINT32 u4PicType;
+ UINT32 u4PicWidth;
+ UINT32 u4PicHeight;
+ UINT32 u4PicAllocWidth;
+ UINT32 u4PicAllocHeight;
+ UINT64 u8DTS;
+ UINT64 u8PTS;
+ UINT64 u8Offset;
+ // PBINF_V rPbInf; ///< Playback information
+ UINT32 u4DecAddrY;
+ UINT32 u4DecAddrC;
+ UINT32 u4VdsclAddrY;
+ UINT32 u4VdsclAddrC;
+ UINT32 u4FifoStart;
+ UINT32 u4FifoEnd;
+ UINT32 u4VldReadPtr;
+ UINT32 u4VldWritePtr;
+ UINT32 u4PicEnd;
+ UINT32 u4VC1CCSa;
+ UINT32 u4CCIdx;
+ UCHAR arCCType[MAX_CC_DATA];
+ UINT16 arCCData[MAX_CC_DATA];
+ UINT32 u4PicFlag;
+ BOOL fgVirtaulDec;
+ BOOL fgForceVirtual;
+ // DiscType eDiscType;
+ UINT32 u4Duration;
+#if (CONFIG_DRV_SUPPORT_DVD_AUDIO)
+ BOOL fgBlkFrm;
+#endif
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8530)
+ UINT32 u4WMVSliceAddr[3];
+#endif
+ UINT32 u4xvColorR;
+ UINT32 u4xvColorG;
+ UINT32 u4xvColorB;
+ // VDEC_CUR_PIC_SPECIAL_INFO_T rSpecialInfo;
+
+ UINT32 u4RMSliceNum;
+ UINT32 auRM4SliceSize[128];
+ UINT32 u4EsdIndex;
+ UINT32 u4EsdNums;
+} VDEC_PIC_INFO_T;
+
+typedef struct _VDEC_IFRAME_INFO_T
+{
+ BOOL fgVDecNeeded;
+ UCHAR *pucIFrmVFifoPtr;
+ UINT32 u4IFrmSize;
+ UINT32 u4WrIdx; ///< [OUT] interface handle
+ UINT32 u4Handle; ///< [OUT] interface handle
+ // Filter_OpIf* pprFilterOpIf;
+} VDEC_IFRAME_INFO_T;
+
+
+typedef struct _VDEC_NORM_INFO_T
+{
+ // VDEC_CODEC_T eVdecCodecType;
+ UCHAR ucEsId;
+ UCHAR ucVldId;
+ UCHAR ucBsId;
+ UCHAR ucAddrSwapMode;
+ BOOL fgDeblocking;
+ BOOL fgDeblockingDemo;
+ UINT8 u1DeblockLevel;
+ UINT8 au1MBqp[4];
+ BOOL fgForceDropLevl;
+ VDEC_ERR_DROP_LEVEL_T eVDecDropLevl;
+ BOOL fgErrRefExist;
+#ifdef ENUM_SRC_ASPECT_RATIO
+#else
+ UCHAR ucPicAsp;
+#endif
+ UCHAR ucFrameRate;
+ UCHAR ucLastPicTp;
+ UCHAR ucLastPicStruct;
+ BOOL fgNewPic;
+ BOOL fgSeqChg;
+ UCHAR ucHScale;
+ UCHAR ucVScale;
+ UINT16 u2LineSize; // horizontal line size, due to block color mode
+ UINT64 u8LatestDecPTS;
+ UINT64 u8LatestOutPTS;
+ UINT64 u8LastIPTS;
+ UINT64 u81stIPTS;
+ UINT64 u8PTSOffset;
+ UINT32 u8LastIOffset;
+ // PBINF_V rLastIPbInf;
+ UINT32 u4LatestFrameRate;
+ UINT32 u4DisplayRef;
+#if 0//def FBM_DIGEST_MODE
+ UINT16 u2DigestLineSize;
+ UINT16 u2DigestHSize;
+ UINT16 u2DigestVSize;
+#endif
+ UINT32 u4PicSize;
+ UINT32 u4SampleWidth;
+ UINT32 u4SampleHeight;
+ UINT32 u4FrameTimingInfo;
+ UINT32 u4FrameDuration;
+ UINT32 u4ColorPrimaries;
+
+ UINT32 u4DecStatus;
+ UINT32 u4DecFlag;
+ UINT32 u4EventRec;
+ UINT32 u4DecReadPtr;
+
+ INT32 i4VParseErrCode;
+ INT32 i4VDecodeErrCode;
+ UINT32 u4PrsHdrType;
+ UINT32 u4RefFrmCnt;
+
+ INT32 i4RemainNum;
+ UINT32 u4ExpRemNum;
+
+ UINT32 u4FFDivisor;
+ UINT32 u4FFRemainder;
+ UINT32 u4FFTargetCnt;
+ UINT32 u4FFDivisorCnt;
+ UINT32 u4FFRemainderCnt;
+
+#if VDEC_MVC_SUPPORT
+ VDEC_MVC_INFO_T eVDecMvcInfo;
+ UINT32 u4MVCStatus;
+ BOOL fgMVCDecErr;
+ UINT32 u4MVCErrCnt;
+#endif
+ VDEC_EVENT_T eVDecEvent;
+ UINT64 u8PreRefPTS;
+
+ // VDEC_PATCH_T eVDecPatchChk;
+ BOOL fgIsProgressive;
+ BOOL fgIsVDPRacing;
+ BOOL fgIsOnlyOneHW;
+#if (1 == CONFIG_DRV_OMX_SUPPORT)
+ BOOL fgOmxInit;
+#endif
+
+#if (CONFIG_DRV_SUPPORT_DVD_AUDIO)
+ INT32 i4AUTargetIdx;
+ UINT32 u4FrameOffset;
+ BOOL fgQueueBlkFrm;
+#endif
+ // VID_DEC_DISC_TYPE_T u4DiscType;
+ UCHAR ucVDecFrameRate;
+ UINT64 u8NextPts;
+} VDEC_NORM_INFO_T;
+
+typedef struct _VDEC_LOG_INFO_T
+{
+ UINT32 u4FilterDelayCnt;
+ UINT32 u4FbmDelayCnt;
+ UINT32 u4DecTimeoutCnt;
+ UINT32 u4MaxDecSec;
+ UINT32 u4MaxDecMic;
+ UINT32 u4MaxDecPicCnt;
+ UINT32 u4LatestRPtr;
+ UINT32 u4PrintVideoDataOffset;
+ UINT32 u4PrintVideoDataLength;
+ BOOL fgForNoUpdRdPtr;
+ BOOL fgShowPTSInfo;
+ BOOL fgDramDump; //Dump dram flag.
+ BOOL fgDumpGroupPic;
+ BOOL fgDumpGroupVFifo; //Dump group video vfifo data flag.
+ BOOL fgDumpAllVFifo; //Dump all video vfifo data flag.
+ BOOL fgDumpBeforeVParse; //Dump video vfifo data before VParse
+ BOOL fgDumpAfterDecode; //Dump video vfifo data after decode
+ BOOL fgPrintVideoData;
+
+ UINT32 u4EmptyReportFreq;
+} VDEC_LOG_INFO_T;
+
+typedef struct _VDEC_BITRATE_INFO_T
+{
+ UINT32 u4BitrateCntFldNum;
+ UINT32 u4BitrateCntTotalPicLength;
+ UINT32 u4BitrateData;
+ UINT32 u4BitrateCntDuration;
+ UINT64 u8BitratePTSBase;
+} VDEC_BITRATE_INFO_T;
+
+#ifdef VDEC_SR_SUPPORT
+#define VDEC_MAX_RECORD_ASP_CNT 10
+#endif
+
+typedef struct _VDEC_ASP_INFO_T
+{
+ // SOURCE_ASPECT_RATIO_T eLine23Asp;
+ UINT64 u8ICBAspPTS;
+ // SOURCE_ASPECT_RATIO_T eIBCAsp;
+ // SOURCE_ASPECT_RATIO_T eMWAsp;
+ // SOURCE_ASPECT_RATIO_T eCodecAsp;
+ // SOURCE_ASPECT_RATIO_T eCurrAsp;
+#ifdef VDEC_SR_SUPPORT
+ // SOURCE_ASPECT_RATIO_T aeRecordAsp[VDEC_MAX_RECORD_ASP_CNT];
+ UINT64 au8AspOffset[VDEC_MAX_RECORD_ASP_CNT];
+ UINT8 u1RecordAspIdx;
+#endif
+} VDEC_ASP_INFO_T;
+
+typedef struct _VDEC_DEC_RES_INFO_T
+{
+ UINT32 u4DecResHandle;
+} VDEC_DEC_RES_INFO_T;
+
+typedef struct _VDEC_LOG_PIC_INFO_T
+{
+ INT32 i4ShowErrLevel;
+ UINT32 u4LastErrCount;
+ UINT64 u8DumpPicPTS;
+ UINT64 u8DumpPicOffset;
+ UINT64 u8DumpGroupPicStartPTS;
+ UINT64 u8DumpGroupPicEndPTS;
+ UINT64 u8DumpGroupPicStartOffset;
+ UINT64 u8DumpGroupPicEndOffset;
+ UINT64 u8DumpGroupVFifoStartPTS;
+ UINT64 u8DumpGroupVFifoEndPTS;
+ UINT64 u8DumpGroupVFifoStartOffset;
+ UINT64 u8DumpGroupVFifoEndOffset;
+ UINT32 u4PosixMem;
+ UINT32 u4PosixMemSize;
+ // HANDLE_T h_YFileHandle;
+ // HANDLE_T h_CFileHandle;
+ // HANDLE_T h_VFifoHandle[2];
+} VDEC_LOG_PIC_INFO_T;
+
+#ifdef DRV_VDEC_VDP_RACING
+typedef struct _VDEC_PIP_INFO_T
+{
+ BOOL fgGetAU;
+ BOOL fgDecoding;
+ BOOL fgWaitForHw;
+ BOOL fgNeedDec2ndField;
+ BOOL fgNoFbReParse;
+ BOOL fgNoFbDec;
+ BOOL fgIsCurrParsing;
+} VDEC_PIP_INFO_T;
+#endif
+
+typedef struct _VDEC_DBGLOG_INFO_T
+{
+ BOOL fgParsing;
+ BOOL fgParsChk;
+ BOOL fgStartDec;
+ BOOL fgGetFB;
+ BOOL fgTriggerHW;
+ BOOL fgResultChk;
+ BOOL fgClrFlag;
+} VDEC_DBGLOG_INFO_T;
+
+#if VDEC_MVC_SUPPORT
+#define MAX_OFT_SEQ 256
+#define MAX_GOP_NUM 120
+typedef struct _VDEC_OFFSET_METADATA_INFO_T
+{
+ UINT8 u1Frame_rate;
+ UINT64 u8Pts;
+ UINT64 u8MaxPts;
+ UINT8 u1NuSeq;
+ UINT8 u1NumFrame;
+ UINT8 *pucOFTInfoAddr;
+} VDEC_OFFSET_METADATA_INFO_T;
+#endif
+
+#if (1 == CONFIG_DRV_OMX_SUPPORT)
+typedef struct _OMX_VDEC_INFO
+{
+ UINT32 u4SA; /* start address */
+ UINT32 u4Used;
+ UINT32 u4Size; /* OMX_TOTAL_MEM_SIZE */
+ INT32 i4FifoRef; /* Reference cnouter */
+ vOmxVdecVConvCbFunc pvCbFunc;
+ void *pvCbPrivData;
+ VCodeC eCodeCType;
+ VCONV_VDEC_OMX_NFY_PARAM rNfyParam;
+ VCONV_VDEC_PIC_INFO_T rCurrPicInfo;
+ BOOL fgStopCmd;
+ BOOL fgEOSCmd;
+} OMX_VDEC_INFO_T;
+#endif
+
+typedef struct _VDEC_ES_INFO_T
+{
+ VDEC_STATE_T eVdecState;
+ // DRV_FBTYPE eVDecFBType; //Default: FBT_420_BK_YCBIND, MJPEG: FBT_420_RS
+ UCHAR ucBSNum;
+ UINT16 u2DecMode;
+ UINT16 u2PreMode;
+ UINT32 u4PicCnt;
+ UINT32 u4DecodedPicCnt;
+ UINT32 u4ErrPicCnt;
+ UINT32 u4DropPicCnt;
+ UINT32 u4OutputPicCnt;
+ UINT32 u4RealOutputPicCnt;
+ UINT64 u8StartPTS;
+ UINT32 u4CalcCount;
+ UINT32 u4FrmCnt;
+ UCHAR aucMatrix[MPV_MATRIX_RAW_SIZE];
+ VDEC_NORM_INFO_T rVDecNormInfo;
+ VDEC_PIC_INFO_T rVDecPrevPicInfo;
+ VDEC_PIC_INFO_T rVDecCurrPicInfo;
+ BOOL fgIsNextPicInfoExisted;
+ VDEC_PIC_INFO_T rVDecNextPicInfo;
+ VDEC_FBM_INFO_T rVDecFbmInfo;
+ //VDEC_NOTIFY_INFO_T rVDecNotifyInfo;
+ VDEC_SYNC_INFO_T rVDecSyncInfo;
+ VDEC_EC_INFO_T rVDecECInfo;
+ VDEC_MW_INFO_T rVDecMwInfo;
+ VDEC_IFRAME_INFO_T rVDecIFrmInfo;
+ VDEC_LOG_INFO_T rVDecLogInfo;
+ VDEC_BITRATE_INFO_T rVDecBitRateInfo;
+ VDEC_ASP_INFO_T rVDecAspInfo;
+ // VID_DEC_PB_MODE_T *prVDecPBInfo;
+#ifdef VDEC_SR_SUPPORT
+ VID_DEC_PB_MODE_T rVDecNewPBInfo;
+#endif
+ VDEC_COMP_INFO_T *prVDecCompInfo;
+ VDEC_DRV_IF *prVDecDrvIf;
+ UINT32 *prVDecDrvInfo;
+#if VDEC_DYNAMIC_ALLOC
+ UINT32 **ppu4VDecDrvInfoPoint;
+#endif
+ // VID_DEC_SEQUENCE_INFO_T rVDecSeqInfo;
+#ifdef VDEC_SR_SUPPORT
+ VDEC_SRM_INFO_T rVDecSRMInfo;
+ VDEC_SR_INFO_T rVDecSRInfo;
+ UCHAR aucStoreMatrix[MPEG2_MAX_SEQ_NUM][MPV_MATRIX_RAW_SIZE];
+#endif
+ VDEC_DEC_RES_INFO_T rVDecDecResInfo;
+ BOOL fgReDecode;
+ BOOL fgPipExist;
+ UCHAR ucReDecCnt;
+ UINT32 u4TotalReDecCnt;
+ UINT32 u4MaxReDecCnt;
+#if (defined(DRV_VDEC_VDP_RACING) || defined(VDEC_PIP_WITH_ONE_HW))
+ BOOL fgOutputCurrFBuf;
+ VDEC_PIP_INFO_T rVDecPipInfo;
+#endif
+#if VDEC_MVC_SUPPORT
+ VDEC_OFFSET_METADATA_INFO_T rVDecOMTData;
+ // VID_VDEC_3D_SOURCE_INFO_T rVDec3DSourceInfo;
+#endif
+ INT32 u4LogIdx;
+ VDEC_DBGLOG_INFO_T rVDecDbgLog[100];
+
+#if VDEC_LOG_TIME
+ UINT32 u4Over33Cnt;
+#endif
+ UINT64 u8PTSOffset;
+ //BOOL fgIdleState;
+
+#ifdef PHILIPS_PQL_SUPPORT
+ UINT32 u4QuanCntFldNum;
+ UINT32 u4QuantizationSum;
+ UINT8 u1QuantizationAvg;
+ BOOL fgGeneratedSrcStaAttr;
+ UCHAR ucSrcStaticAttr[5];
+ UCHAR ucSrcDynamicAttr[2];
+#endif
+} VDEC_ES_INFO_T;
+
+typedef struct _VDEC_MODELOG_INFO_T
+{
+ UINT32 u4LogLevel;
+ // VID_DEC_CTRL_T eDecCtrl;
+ BOOL fgDecModeFin;
+ UINT16 u2DecMode;
+ // VID_DEC_SPEED_TYPE_T e_speed_type;
+ UINT16 u2DesiredWidth;
+ UINT16 u2DesiredHeight;
+ UINT16 u2OriginalWidth;
+ UINT16 u2OriginalHeight;
+} VDEC_MODELOG_INFO_T;
+
+typedef struct _VDEC_INFO_T
+{
+ UCHAR ucMode;
+ // BOOL fgCheck[MPV_MAX_ES];
+ //x_vid_dec_nfy_fct pfErrNotify;
+#ifdef VDEC_UNIFORM_CB_SUPPORT
+ VID_DEC_CB_DATA rVDecCbData;
+ DRV_CB_REG_INFO_T rVDecCbInfo[MPV_MAX_ES];
+#else
+ // void* pvDecNfyTag[MPV_MAX_ES];
+ // x_vid_dec_nfy_fct pfDecNfyFct[MPV_MAX_ES];
+#endif
+} VDEC_INFO_T;
+
+typedef struct _VDEC_EVENT_INFO
+{
+ // HANDLE_T hEvent; ///< Event handle
+ VDEC_EVENT_T eVDecPreEventWait;
+ VDEC_EVENT_T eVDecWaitFor;
+} VDEC_EVENT_INFO;
+
+
+// *********************************************************************
+// MPV Structure define
+// *********************************************************************
+
+typedef struct _CC_INFO_T
+{
+ UINT32 u4BufRptr;
+ UINT32 u4Size;
+ // PTS_T u8Pts;
+ BOOL fgIsScte;
+} CC_INFO_T;
+
+
+typedef struct _CC_BUF_INFO_T
+{
+ UINT32 u4Rptr;
+ UINT32 u4Wptr;
+
+} CC_BUF_INFO_T;
+
+
+typedef struct _MPV_CC_T
+{
+ BOOL fgPlayCc;
+ BOOL fgPlayAnlgCc;
+ BOOL fgCcIPTmpIsScte;
+ BOOL fgCcPreRef;
+ UCHAR *pucCcBuf;
+ UCHAR *pucAnlgCcBuf;
+ UCHAR *pucCcTmpBuf;
+ UCHAR *pucCcAtscIPTmpBuf;
+ UCHAR *pucCcScteIPTmpBuf;
+ UINT32 u4CcBufSize;
+ UINT32 u4AnlgCcBufSize;
+ UINT32 u4AtscIPTmpSize;
+ UINT32 u4AtscIPTmpPts;
+ UINT32 u4ScteIPTmpSize;
+ UINT32 u4ScteIPTmpPts;
+ CC_INFO_T rCcInfo;
+ CC_INFO_T rAnlgCcInfo;
+ CC_BUF_INFO_T rCcBufInfo;
+ CC_BUF_INFO_T rAnlgCcBufInfo;
+ // HANDLE_T hCcQueue;
+ // HANDLE_T hAnlgCcQueue;
+ // PFN_CC_NFY_FCT pfCcNfyFct;
+ // PFN_CC_NFY_FCT pfAnlgCcNfyFct;
+ void *pvCcNfyTag;
+ void *pvAnlgCcNfyTag;
+
+} MPV_CC_T;
+
+// ESM Queue
+typedef struct _ESMQ_T
+{
+ UCHAR ucDropBNs;
+ UCHAR ucStarted;
+
+ UINT16 u2Count;
+ UINT16 u2UdfNs;
+ // HANDLE_T hMsgQueue;
+ // HANDLE_T hUnderFlowSema;
+ // HANDLE_T hCmdQueue;
+ // HANDLE_T hMutex;
+
+} ESMQ_T;
+
+typedef struct _VDEC_IBCMD_INFO
+{
+ BOOL fgSeqEnd;
+ BOOL fgvideoNotExist;
+ BOOL fgNextSeq;
+ UINT64 u8NoVideoSeqOffset;
+ BOOL fgForceReqPrevOne;
+ BOOL fgStreamEnd;
+ BOOL fgNoPrev;
+ // INT64 i8EndTime;
+ BOOL fgCmdSendFail;
+ BOOL fgCmdAsp;
+ // INT64 i8EpmapPTS;
+} VDEC_IBCMD_INFO;
+
+#if VDEC_LOG_TIME
+#define VDEC_START_TIME_LOG TRUE
+#define VDEC_END_TIME_LOG FALSE
+#define VDEC_START_WAIT_LOG TRUE
+#define VDEC_END_WAIT_LOG FALSE
+
+typedef enum _VDEC_PIP_TIME_TYPE_T
+{
+ VDEC_PIP_TIME_NONE = 0,
+ VDEC_PIP_TIME_AU ,
+ VDEC_PIP_TIME_AU_DD ,
+ VDEC_PIP_TIME_DD ,
+ VDEC_PIP_TIME_PRS ,
+ VDEC_PIP_TIME_PCK ,
+ VDEC_PIP_TIME_GFB ,
+ VDEC_PIP_TIME_STD ,
+ VDEC_PIP_TIME_RSC ,
+ VDEC_PIP_TIME_INS ,
+ VDEC_PIP_TIME_PDQ ,
+ VDEC_PIP_TIME_PQT ,
+ VDEC_PIP_TIME_PINS ,
+ VDEC_PIP_TIME_PPDQ ,
+ VDEC_PIP_TIME_NOFB ,
+ VDEC_PIP_TIME_MAX = 0xff,
+} VDEC_PIP_TIME_TYPE_T;
+
+typedef enum _VDEC_PIP_WAIT_TYPE_T
+{
+ VDEC_PIP_WAIT_NONE = 0,
+ VDEC_PIP_WAIT_HW ,
+ VDEC_PIP_WAIT_FB ,
+ VDEC_PIP_WAIT_DC ,
+ VDEC_PIP_WAIT_NOFB ,
+ VDEC_PIP_WAIT_MAX = 0xff,
+} VDEC_PIP_WAIT_TYPE_T;
+#endif
+
+// vdec_drv_if.c
+extern void VDec_SetSyncStc(UCHAR ucEsId);
+extern void vVDecSetSyncCtrlReadyToPlay(VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vVDecSetSyncCtrlStop(VDEC_ES_INFO_T *prVDecEsInfo);
+extern void vVDecSetSyncCtrlPrintLog(VDEC_ES_INFO_T *prVDecEsInfo, const CHAR *pucLog);
+extern VDEC_COMP_INFO_T *VDec_GetCompInfo(UCHAR ucEsId);
+extern void VDec_LockVld(UCHAR ucMpvId);
+//extern void vVDecSetVdpVdsclInfo(UCHAR ucEsId, VDSCL_INFO_T *prVdsclInfo);
+extern void vVDecChkVdpInFlush(UCHAR ucEsId);
+extern void VDec_Update_DiscInfo(UCHAR ucEsId);
+#if defined(MPV_NO_PARSER) || defined(MPV_DUMP_FBUF)
+extern void VDec_Dump_Data(UINT32 u4StartAddr, UINT32 u4FileSize, UINT32 u4FileCnt, UCHAR *pucAddStr);
+#endif
+//extern BOOL IsPBMode_SR(VID_DEC_SPEED_TYPE_T e_speed_type);
+extern UINT16 VDec_GetDecMode(UCHAR ucEsId);
+extern void VDec_SetDecMode(UCHAR ucEsId, UINT16 u2DecMode);
+extern void vVDecGetDecRes(UCHAR ucEsId);
+extern void vVDecReleaseDecRes(UCHAR ucEsId);
+#if VDEC_MVC_SUPPORT
+extern void VDec_GetOffsetMetaDataAddr(UCHAR ucEsId);
+extern void VDec_UpdateOffsetMetaData(UCHAR ucEsId);
+#endif
+
+// vdec_drv_esm.c
+extern BOOL fgIsEsmIFExisted(UCHAR ucEsId);
+extern BOOL fgIsEsmPicExisted(UCHAR ucEsId, UCHAR ucPicChkNum);
+extern BOOL fgIsEsmAUExisted(UCHAR ucEsId, BOOL fgIsChkBefVParser);
+
+#if VDEC_REMOVE_UNUSED_FUNC
+extern BOOL fgIsVDecCmdExisted(UCHAR ucEsId);
+#endif
+
+//extern void vVDecSetEsmInfo(UINT32 pu4Handle, Decoder_OpIf* pprDecoderOplIf, UCHAR ucMpvId, UCHAR ucEsId);
+extern VDEC_ESM_INFO_T *vVDecGetEsmInfo(UCHAR ucEsId);
+extern VDEC_ES_INFO_T *VDec_GetEsInfo(UCHAR ucEsId);
+extern UINT32 vVDecGetEsmHandle(UCHAR ucEsId);
+extern void VDec_SetCmd(UCHAR ucEsId, UINT16 u2Mode);
+extern void VDec_RetriveCmd(UCHAR ucEsId);
+extern void VDec_ClearEsInfo(UCHAR ucEsId);
+
+#if VDEC_REMOVE_UNUSED_FUNC
+extern void VDec_ClearSSStopEsInfo(UCHAR ucEsId);
+#endif
+
+extern void VDec_Update_Esm(UCHAR ucEsmQId, UINT32 u4Rp);
+extern void VDec_CreateEsmSema(UCHAR ucEsId);
+extern void VDec_DeleteEsmSema(UCHAR ucEsId);
+extern void VDec_ClearVDecInfo(void);
+extern void VDec_InitEsInfo(void);
+extern void VDec_InitModeLogInfo(void);
+extern VDEC_MODELOG_INFO_T *VDec_GetModeLogInfo(UCHAR ucEsId);
+extern VDEC_MODELOG_INFO_T *VDec_GetTempModeLogInfo(UCHAR ucEsId);
+extern void VDecDiplayModeLogDiff(UCHAR ucEsId);
+extern int VDecPrintf(UCHAR ucEsId, UINT32 ucLevel, CHAR *format, ...);
+extern BOOL fgIsNoNextStartCode(UCHAR ucEsId, UINT32 ucPicEnd);
+
+extern VDEC_INFO_T *VDec_GetVDecInfo(void);
+//extern void vVDecEsm_DataIn_Callback(ESIF_CBEVENT eEvent, void *pvData, void *pvPrivate);
+extern void VDecCreateEventGroup(UCHAR ucVDecEsId, CHAR *szBuf);
+extern void VDecSetEvent(UCHAR ucVDecEsId, VDEC_EVENT_T eVDecEvent);
+extern void VDecWaitEvent(UCHAR ucVDecEsId, VDEC_EVENT_T eVDecEventWaitFor);
+extern void VDecClearEvent(UCHAR ucVDecEsId);
+extern void VDecDeleteEventGroup(UCHAR ucVDecEsId);
+
+#if VDEC_REMOVE_UNUSED_FUNC
+extern MPV_CC_T *MPV_GetMpvCc(UCHAR ucEsId);
+extern void MPV_LockCcSema(UCHAR ucEsId);
+extern void MPV_UnlockCcSema(UCHAR ucEsId);
+extern void MPV_LockAnlgCcSema(UCHAR ucEsId);
+extern void MPV_UnlockAnlgCcSema(UCHAR ucEsId);
+#endif
+
+// vDec_parse_Proc.c
+#if VDEC_REMOVE_UNUSED_FUNC
+extern BOOL fgIs1stBSAvailable(void);
+#endif
+
+extern BOOL fgIs2ndBSSupport(void);
+
+#if VDEC_REMOVE_UNUSED_FUNC
+extern void vVDecVParseProc(UCHAR ucEsId);
+extern BOOL fgVDecVParseChkProc(UCHAR ucEsId);
+#endif
+
+// vdec_dec_proc.c
+extern void VDec_DecInit(void);
+extern void VDec_DecUninit(void);
+extern void VDec_IsrInit(void);
+extern void VDec_IsrStop(void);
+extern void VDec_CreateDecSema(UCHAR ucMpvId);
+extern void VDec_DeleteDecSema(UCHAR ucMpvId);
+extern INT32 i4VDecUpdFbmInfo(UCHAR ucEsId);
+extern BOOL fgVdecNeedDeblocking(UCHAR ucEsId);
+extern BOOL fgIsFBufAvailable(UCHAR ucEsId);
+extern void vVDecStartToDecProc(UCHAR ucEsId);
+extern BOOL fgIsVDecEnd(UCHAR ucEsId);
+
+#if VDEC_REMOVE_UNUSED_FUNC
+extern BOOL fgVDecResultChk(UCHAR ucEsId);
+#endif
+
+extern BOOL fgVDecChkRealEnd(UINT32 u4DecReadPtr, UINT32 u4PicStart, UINT32 u4PicEnd, UINT32 u4FifoStart, UINT32 u4FifoEnd);
+extern void vVDecEndProc(UCHAR ucEsId);
+
+#if VDEC_REMOVE_UNUSED_FUNC
+extern void vCntPicTime(VDEC_ES_INFO_T *prVDecEsInfo, UINT32 u4Idx, BOOL fgStart);
+#endif
+
+extern void vDropPic(UCHAR ucEsId);
+extern void VDec_FinDec(UCHAR ucMpvId);
+extern void vVDecRecFbStatus(UCHAR ucFbNum, UINT32 u4FbId, UINT32 u4FbStatus);
+extern void VDec_CreateVldSema(UCHAR ucMpvId);
+extern void VDec_LockVld(UCHAR ucMpvId);
+extern void VDec_UnlockVld(UCHAR ucMpvId);
+extern void VDec_DeleteVldSema(UCHAR ucMpvId);
+extern void vAVSyncTimeLog(VDEC_ES_INFO_T *prVDecEsInfo, UCHAR ucEsId, UINT32 u4Idx, BOOL fgStart);
+extern void vStopCmdTimeLog(BOOL fgStart);
+extern void vVDecChkFbStatus(UCHAR ucFbNum);
+
+#if VDEC_REMOVE_UNUSED_FUNC
+extern void vVDecChkFbEmpty(UCHAR ucFbNum);
+#endif
+
+#if VDEC_REMOVE_UNUSED_FUNC
+extern void vVDecChkFbRealEmpty(UCHAR ucFbNum, UCHAR ucFbIdx);
+#endif
+
+#if VDEC_REMOVE_UNUSED_FUNC
+extern void vVDecLog(UINT32 u4LogData);
+#endif
+
+#ifdef VDEC_EVENT_TRIGGER
+//extern BOOL fgIsWaitGetFBReady(FBM_CBID eCBID, void *pvArg, void *pvPrivData);
+//extern BOOL fgIsWaitOutFBReady(FBM_CBID eCBID, void *pvArg, void *pvPrivData);
+#endif
+//extern void vSetSkipNum(VDEC_ES_INFO_T *prVDecEsInfo, VID_DEC_PB_MODE_T* prPbInfo);
+//extern VOID vVDecAspTransfer(VDEC_ES_INFO_T *prVDecEsInfo, IBC_VideoAspectRatioType aspectRatio);
+extern INT32 i4VDecInsToDispQ(VDEC_ES_INFO_T *prVDecEsInfo, UCHAR ucFBGId, UCHAR ucFBId);
+//extern void vVDecUniCallback(UCHAR ucEsId, VID_DEC_COND_T eVDecCondition, UINT32 u4Data1, UINT32 u4Data2);
+#if VDEC_MVC_SUPPORT
+extern void vVDecUpdViewEsInfo(UCHAR ucEsId, VDEC_MVC_INFO_T eMvcInfo);
+extern UCHAR VDecGetViewEsId(UCHAR ucViewId);
+extern VDEC_ES_INFO_T *VDecGetViewEsInfo(UCHAR ucViewId);
+extern BOOL fgIsMvcAlignDrop(VDEC_ES_INFO_T *prVDecEsInfo);
+extern void VDec_CreateMvcStopSema(void);
+extern void VDec_LockMvcStopSema(UCHAR ucEsId);
+extern void VDec_UnlockMvcStopSema(UCHAR ucEsId);
+extern void VDec_DeleteMvcStopSema(void);
+#endif
+
+extern BOOL fgVDecFillBlkDFB(UCHAR ucEsId);
+
+// vdec_drv_norm_proc.c
+extern VDEC_COND_T VDec_NormProc(UCHAR ucEsId);
+extern void vVDecReleaseProc(UCHAR ucEsId);
+
+// vdec_hal_if_common.c
+extern INT32 i4VDEC_HAL_Common_Init(UINT32 u4ChipID);
+extern void vDEC_HAL_COMMON_SetVLDPower(UINT32 u4VDecID, BOOL fgOn);
+extern void vDEC_HAL_COMMON_PowerOn(void);
+extern void vDEC_HAL_COMMON_PowerOff(void);
+#if (CONFIG_CHIP_VER_CURR >= CONFIG_CHIP_VER_MT8560)
+extern void vVDEC_HAL_CLK_Set(UINT32 u4CodeType);
+#endif
+
+// vdec_drv_dec_proc.c
+//extern PATH_TYPE eVDecPath(UINT16 u2CompId);
+extern BOOL fgIsVDecPatch(UCHAR ucEsId);
+//extern INT32 i4VDecSetCurPicSpecialInfo(UCHAR ucEsId, VDEC_CUR_PIC_SPECIAL_INFO_T *prSepcialInfo);
+
+#ifdef VDEC_SR_SUPPORT
+#ifdef VDEC_UNIFORM_CB_SUPPORT
+//extern DRV_CB_REG_INFO_T* vVDecGetNfyInfo(UINT16 u2CompId);
+#else
+//extern VID_DEC_NFY_INFO_T* vVDecGetNfyInfo(UINT16 u2CompId);
+#endif
+extern VDEC_ESM_INFO_T *vVDecGetEsmInfo(UCHAR ucEsId);
+extern void VDec_FwdToSr(UCHAR ucEsId);
+extern void VDec_StopToSr(UCHAR ucEsId);
+extern void VDec_ClearSRReq(UCHAR ucEsId);
+extern VDEC_COND_T VDec_SRProc(UCHAR ucEsId);
+extern BOOL fgVDecIsESIFull(UCHAR ucEsId);
+extern void vVDecMoveWrPtr(UCHAR ucEsId, UINT32 u4NewFifoWp, UINT32 u4NewAUWrIdx);
+#endif
+
+extern UCHAR ucVDecGetRealAddSwapMode(UCHAR ucAddrSwapMode);
+extern UCHAR ucVDecGetRealVdsclAddSwapMode(UCHAR ucAddrSwapMode);
+extern UINT32 u4VDecGetCurPictureSize(VDEC_ES_INFO_T *prVDecEsInfo);
+
+#if (defined(DRV_VDEC_VDP_RACING) || defined(VDEC_PIP_WITH_ONE_HW))
+extern void VDec_CreatePipSema(void);
+extern void VDec_DeletePipSema(void);
+extern void VDec_LockPipSema(void);
+extern void VDec_UnlockPipSema(void);
+#endif
+extern void vVDecCntQuanFactor(UCHAR ucEsId);
+
+#endif