⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vde_types.h

📁 SAMSUNG 5009的源代码
💻 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 + -