diff options
| author | Meizu OpenSource <patchwork@meizu.com> | 2016-08-15 10:19:42 +0800 |
|---|---|---|
| committer | Meizu OpenSource <patchwork@meizu.com> | 2016-08-15 10:19:42 +0800 |
| commit | d2e1446d81725c351dc73a03b397ce043fb18452 (patch) | |
| tree | 4dbc616b7f92aea39cd697a9084205ddb805e344 /drivers/misc/mediatek/vdec/include | |
| download | android_kernel_m2note-d2e1446d81725c351dc73a03b397ce043fb18452.tar.gz | |
first commit
Diffstat (limited to 'drivers/misc/mediatek/vdec/include')
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 |
