📄 vde_types.h
字号:
/******************************************************************************
* Filename : VDE_types.h
* Start : 2005.1.18
* By : Inseo Han
* Contact : ishan@samsung.com
* Description :
******************************************************************************
*/
#ifndef _VDE_TYPES_H_
#define _VDE_TYPES_H_
#ifdef __cplusplus
extern "C" {
#endif
#if _SH_SUPPORT_BAT_VIDEO
#define VDE_BAT_UNIT_1KB (0<<4)
#define VDE_BAT_UNIT_2KB (1<<4)
#define VDE_BAT_UNIT_4KB (2<<4)
#define VDE_BAT_UNIT_8KB (3<<4)
#define VDE_BAT_ENABLE 1
#if _USE_FIX_B2R_REW_POINT_BUG
/* MAP00 is reserved for the M2VD B2R rewind bug (20060327,ishan) */
#define VDE_BAT_UNIT_NUM 47
#else
#define VDE_BAT_UNIT_NUM 48
#endif
#define VDE_BAT_UNIT_BIT_1KB (10)
#define VDE_BAT_UNIT_BIT_2KB (11)
#define VDE_BAT_UNIT_BIT_4KB (12)
#define VDE_BAT_UNIT_BIT_8KB (13)
#if 1
/* This should be changed according to the VBV buffer size in SH_MEM_api.h */
#define VDE_BAT_UNIT_TYPE VDE_BAT_UNIT_4KB
#define VDE_BAT_UNIT_BIT VDE_BAT_UNIT_BIT_4KB
#else
#if MM_VBV_BUF_UNIT_SIZE == MM_VBV_BUF_UNIT_1K
#define VDE_BAT_UNIT_TYPE VDE_BAT_UNIT_1KB
#define VDE_BAT_UNIT_BIT VDE_BAT_UNIT_BIT_1KB
#elif MM_VBV_BUF_UNIT_SIZE == MM_VBV_BUF_UNIT_2K
#define VDE_BAT_UNIT_TYPE VDE_BAT_UNIT_2KB
#define VDE_BAT_UNIT_BIT VDE_BAT_UNIT_BIT_2KB
#elif MM_VBV_BUF_UNIT_SIZE == MM_VBV_BUF_UNIT_4K
#define VDE_BAT_UNIT_TYPE VDE_BAT_UNIT_4KB
#define VDE_BAT_UNIT_BIT VDE_BAT_UNIT_BIT_4KB
#else
#define VDE_BAT_UNIT_TYPE VDE_BAT_UNIT_8KB
#define VDE_BAT_UNIT_BIT VDE_BAT_UNIT_BIT_8KB
#endif
#endif
#define VDE_BAT_UNIT_SIZE MM_VBV_BUF_UNIT_SIZE
/* Physical address */
#if _USE_FIX_B2R_REW_POINT_BUG
#define VDE_BAT_PHY_BASE MM_VBV_FOR_B2R_REW_BUG
#else
#define VDE_BAT_PHY_BASE MM_VBV_BUF_START
#endif
#define VDE_BAT_PHY_END (MM_VBV_BUF_START + MM_VBV_BUF_SIZE)
/* Logical address */
#if _USE_FIX_B2R_REW_POINT_BUG
#define VDE_BAT_LOG_LB VDE_BAT_PHY_BASE
#define VDE_BAT_VBV_AREA_START (VDE_BAT_PHY_BASE + VDE_BAT_UNIT_SIZE)
#else
#define VDE_BAT_LOG_LB VDE_BAT_PHY_BASE
#define VDE_BAT_VBV_AREA_START VDE_BAT_LOG_LB
#endif
#define VDE_BAT_LOG_UB (VDE_BAT_VBV_AREA_START + VDE_BAT_UNIT_SIZE*VDE_BAT_UNIT_NUM)
#define VDE_BAT_VBV_AREA_END VDE_BAT_LOG_UB
typedef struct {
UINT bat_rd_index; /* from 0 to (2*VDE_BAT_UNIT_NIM-1) */
UINT bat_wr_index; /* from 0 to (2*VDE_BAT_UNIT_NIM-1) */
/* If the number of the input filled list is more than VDE_BAT_UNIT_NUM,
input nodes which are not set to BAT MAP are put to 'wait_filled_list' */
BM_FILLEDLIST wait_filled_list;
} VDE_BatInfo_st;
#endif
/******************************************************
* The modulo unit of the PTS of 90kHz
*****************************************************/
#define VDE_PTS_REMAIN_UNIT 100
/******************************************************
* The valid picture size
*****************************************************/
#define VDE_VALID_HOR_SIZE_MIN 16
#define VDE_VALID_VERT_SIZE_MIN 16
#define VDE_VALID_HOR_SIZE_MAX 720
#define VDE_VALID_VERT_SIZE_MAX 576
/******************************************************
* VDE Errors
*****************************************************/
typedef enum {
VDE_ERR_NONE = 0,
VDE_ERR_NOT_ATTACHED,
VDE_ERR_ABORTED,
VDE_ERR_PARSE,
VDE_ERR_NO_CMD_RDY, /* Not yet finished */
VDE_ERR_DEC,
VDE_ERR_TIMEOUT,
VDE_ERR_UNDERFLOW,
VDE_ERR_OUTBUF
} VDE_Error_et;
/******************************************************
* Pulldown flag state
*****************************************************/
typedef enum {
VDE_PD_INIT, /* Set after new GOP */
VDE_PD_READY1, /* Likely to be pulldown after two more pic */
VDE_PD_READY2, /* Likely to be pulldown after one more pic */
VDE_PD_SET, /* Pulldown source */
VDE_PD_NONE /* No pulldown source */
} VDE_Pulldown_et;
/******************************************************
* Picture state
*****************************************************/
typedef enum {
/* The first field of the field structure picture */
VDE_PIC_FIRST_FIELD,
/* The second field of the field structure picture */
VDE_PIC_SEC_FIELD,
/* The frame structure picture */
VDE_PIC_FRAME
} VDE_PicState_et;
/******************************************************
* PTS information structure for PTS management
*****************************************************/
typedef struct {
UINT gop_id;
UINT temp_ref;
VDE_PicState_et pic_state;
GenPtm_st end_pts;
UINT end_pts_remain;
} VDE_PicPts_st;
typedef struct {
VDE_PicPts_st i_pic;
VDE_PicPts_st prev_pic;
} VDE_PtsInfo_st;
/* Added for calculating the frame rate from the stream PTS when there's no seq_hd
(20060217,ishan) */
typedef struct {
UINT gop_id;
UINT temp_ref;
VDE_PicState_et pic_state;
GenPtm_st start_pts;
} VDE_StreamPtsInfo_st;
/******************************************************
* VDE Video header structures
*****************************************************/
typedef struct
{
UINT hor_size; /* source horizontal size */
UINT vert_size; /* source vertical size */
UINT seq_ext;
UCHAR mpeg_mode;
UCHAR frame_rate_code;
UINT bit_rate_val;
} VDE_SeqHd_st;
typedef struct {
VDE_SeqHd_st hd;
/* Extra information */
UINT field_duration;
UINT field_duration_remain;
} VDE_SeqInfo_st;
/* GOP layer information */
typedef struct {
BOOL closed_gop;
} VDE_GopHd_st;
typedef struct {
VDE_GopHd_st hd;
/* Extra information */
/* Added for PTS management */
UINT gop_id;
} VDE_GopInfo_st;
/* Picture layer information */
typedef struct
{
/* Header information in a picture layer */
UCHAR pic_type;
UINT temp_ref;
/* Header information of a picture coding extention */
UINT pic_cod_ext;
/* Header information of a picture display extention */
UCHAR num_of_fcentre_offset;
UINT frame_centre_h_v_1;
UINT frame_centre_h_v_2;
UINT frame_centre_h_v_3;
UCHAR pic_struc;
}VDE_PicHd_st;
typedef struct {
VDE_PicHd_st hd;
/* Extra information */
UINT offset;
/* Added for PTS management */
UINT gop_id;
GenPtm_st pts;
UINT field_duration;
UINT field_duration_remain;
/* For pull-down state */
VDE_Pulldown_et pulldown_state;
/* Picture state */
VDE_PicState_et pic_state;
} VDE_PicInfo_st;
typedef enum {
VDE_DEC_NONE,
VDE_DEC_NONE_AFTER_STILL,
VDE_DEC_DECODED
} VDE_DecState_et;
typedef enum {
VDE_STATE_GET_INBUF_PREP,
VDE_STATE_PARSE_PREP,
VDE_STATE_DEC_PIC_PREP,
VDE_STATE_CHECK_EOS_PREP,
VDE_STATE_WAIT_INBUF_PREP,
#if _USE_NEW_VIDEO_TRICK_OLD
VDE_STATE_DEC_IPS,
VDE_STATE_DEC_SUSPEND,
#endif
VDE_STATE_STOP,
VDE_STATE_LAST_PIC,
VDE_STATE_WAIT_CMD_RDY,
VDE_STATE_WAIT_FIRST_STILL_DISPLAYED,
VDE_STATE_WAIT_GOTO_DEC_PIC, /* For normal to FF 2x(with IPs) (20051020,ishan) */
VDE_STATE_END
} VDE_State_et;
typedef struct {
BOOL seq_hd_found;
/* (20060217,ishan) */
BOOL seq_hd_found_after_stop; /* TRUE if seq_hd is found at least once after stop */
/* TRUE if the stream PTS is preferred to be used when the stream PTS is different from the calculated PTS.
This is set TRUE when the first pic PTS after skip is calculated from the different GOP
or the field duration is changed by calculating the stream PTS. */
BOOL use_stream_pts;
BOOL field_duration_obtained; /* TRUE if field_duration is obtained from PTS */
BOOL find_i_pic;
BOOL skip_b_pic;
BOOL normal_from_trick; /* TRUE, if play from I pic only trick play */
BOOL skip_happen; /* TRUE, if picture is not put to output filled list */
BOOL play_mem; /* TRUE, if PlayMem */
SH_PlayFrameMode_et dec_mode;
BOOL one_dec_per_unit;
#if _USE_NEW_VIDEO_TRICK_OLD
BOOL is_dec_per_unit;
BOOL high_bitrate_video;
#endif
BOOL aborted;
BOOL seq_end;
BOOL dec_end; /* TRUE, if all the video data is decoded */
/* For field structure handling */
UINT prev_temp_ref;
UCHAR prev_pic_type; /* For field structure handling (20060316,ishan) */
UINT prev_gop_id; /* For field structure handling (2006323,ishan) */
VDE_PicState_et pic_state;
/* Decoding information */
VDE_Pulldown_et pulldown_state;
VDE_Error_et error; /* Last error happened */
VDE_CmdRet_et cmd_ret;
#if _USE_B2R_ZOOM_CHANGE
BOOL stop_rewind_for_dec_range;
#endif
#if (_USE_B2R_ZOOM_CHANGE) || (_USE_HANDLE_B2R_LAST_MB_ERROR)
BOOL restart_rewind;
#endif
/* TRUE if the frame structure when rVD_DEC_RANGE is set */
BOOL is_frame_struct_at_dec_range;
/* TRUE if scrambled VCD disc is loaded */
BOOL is_scrambled_vcd_stream;
/* If skip one picture without decoding, set TRUE.
This flag is used when skip picture in 2xFF mode for field picture */
BOOL skip_one_field_pic;
BOOL invalid_seq_hd; /* TRUE if invalid size seq_hd found (20050731,ishan) */
/* decode state after stop (20050826,ishan) */
VDE_DecState_et decoded_after_stop;
BOOL dec_logo; /* TRUE if it's in decoding logo (20050913,ishan) */
#if (_M2VD_CONCEAL_TYPE != M2VD_NO_BLACK_CONCEAL)
BOOL new_seq; /* TRUE if the new seq is to decode */
#endif
} VDE_Flag_st;
typedef struct {
BM_FILLEDLIST filled_list;
BM_FILLEDLIST keep_filled_list; /* Filled list to keep for B2R */
BM_NODE * pBuf;
#if _VDE_USE_ALL_DATA
BM_NODE * tail_node;
#endif
#if _M2VD_REL_INPUT_LATER
/* Add to update the PTS properly when the vbv node is released later (20060118,ishan) */
BM_NODE * pBuf_last_used;
UINT pic_addr_last; /* changed from proc_ptr to pic_addr (20060217,ishan) */
#endif
GenPtm_st stream_pts;
UINT unit_id;
} VDE_Input_st;
typedef struct {
/* Stream header information */
VDE_SeqInfo_st seq_info;
VDE_SeqInfo_st seq_info_backup;
VDE_GopInfo_st gop_info;
VDE_PicInfo_st pic_info;
VDE_PicInfo_st pic_info_ref1;
VDE_PicInfo_st pic_info_ref2;
#if _USE_B2R_ZOOM_CHANGE
UINT dec_range_start;
UINT dec_range_end;
UINT last_pic_addr;
#elif _USE_B2R_ZOOM_CHANGE_REWIND
UINT dec_range_start;
UINT dec_range_end;
BOOL dec_range_changed;
#endif
#if _USE_M2VD_REWIND_INT
UINT rewind_num;
#endif
#if _USE_FSMC
BOOL fsmc_on;
#endif
#if _USE_HANDLE_B2R_LAST_MB_ERROR
UINT last_b_pic_addr;
#endif
} VDE_Output_st;
/******************************************************
* VDE message types
*****************************************************/
typedef enum {
VDE_CTRL_INIT,
VDE_CTRL_START,
VDE_CTRL_INBUF_FILLED,
VDE_CTRL_OUTBUF_AVAIL,
VDE_CTRL_STOP,
VDE_CTRL_PLAY_MEM,
#if _USE_NEW_VIDEO_TRICK_OLD
VDE_CTRL_CONT_DEC,
#endif
VDE_CTRL_NEXT_SEQ
} VDE_CtrlCmd_et;
typedef struct {
BOOL play_logo;
} VDE_PlayParam_st;
typedef union {
VDE_PlayParam_st play;
} VDE_Param_st;
typedef struct {
VDE_CtrlCmd_et msg_id;
VDE_Param_st param;
} VDE_Msg_st;
#if _VDE_USE_DATA_TASK
typedef enum {
VDE_REL_INPUT,
VDE_REL_STOP
} VDE_ReleaseCmd_et;
typedef union {
BM_NODE *node;
} VDE_ReleaseParam_st;
typedef struct {
VDE_ReleaseCmd_et msg_id;
VDE_ReleaseParam_st param;
} VDE_ReleaseMsg_st;
#endif
/******************************************************
* Video decoder core functions
*****************************************************/
typedef struct {
UINT start_addr;
UINT end_addr;
BOOL need_flush;
} VdeSetInputInParam_st;
typedef struct {
UINT pic_type;
UINT top_addr;
UINT bot_addr;
} VdeSetOutputInParam_st;
typedef struct {
BOOL frame_toggle;
#if _APP_CAP_FUNC_VCD_DIGEST_PREVIEW
BOOL freeze_toggle0; // _APP_CAP_FUNC_VCD_DIGEST_PREVIEW -- zb 051226
#endif
} VdeDecPicInParam_st;
typedef struct {
BOOL seq_hd_found;
BOOL gop_hd_found;
VDE_SeqHd_st *pSeq_hd;
VDE_GopHd_st *pGop_hd;
VDE_PicHd_st *pPic_hd;
} VdeParseOutParam_st;
#if _VDE_B2R_EMPTY_CONCEAL
/******************************************************
* Handling of B2R buffer underflow due to data empty
*****************************************************/
typedef enum {
VDE_EM_NONE = 0,
VDE_EM_SET,
VDE_EM_RESTORE
} VDE_StateB2REmpty_et;
typedef struct {
VDE_StateB2REmpty_et state;
UINT org_stream_data[2];
} VDE_HandleB2REmpty_st;
#endif
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -