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

📄 mae_global.h

📁 AU1200嵌入式处理器媒体加速引擎(mae)的驱动
💻 H
字号:
#ifndef _MAE_GLOBAL_
#define _MAE_GLOBAL_

#include "mae_types.h"
#include "mae_debug.h"
#include "au1200_lcd.h"
#include "mae_fe.h"
#include "mae_be.h"
#include "mae_memory.h"
#include <Winbase.h> // for critical section


#define DRAW_VIDEO				1
#define DESKTOP_PLANE	0
#define MAE_PLANE		1
#define OVERLAY_PLANE	2

#ifdef __cplusplus
extern "C" {
#endif

#define MAE_PADDR(x)  ((UINT32)(x) - (UINT32)pmms + gMaePhysBaseAddress)


#define SYSINTR_DEVICES		8
#define SYSINTR_FIRMWARE	(SYSINTR_DEVICES+8)

#define HEALTH_OK				0
#define HEALTH_DROPPING_B		1<<0
#define HEALTH_FALLING_BEHIND	1<<1
#define HEALTH_SUBMIT_ERROR		1<<2

#ifdef USE_LCD_INT
#   define FRAME_INT AU1200_LCD_INT
#else
#   define FRAME_INT AU1200_SWT_INT
#endif


typedef struct tag_mae_master_t {

    // User memory pointer indicies
    // we need these to help the decoder and cmodel point into the current working data locations.
    // Because the decoder and cmodel are asynchronous
    // the cmodel and decoder will point to different buffers at any given time.
   UINT32 decoder_maeq_offset;
   UINT32 decoder_desc_offset;
   UINT32 buffer_offset;
#ifndef MAE_HW
   UINT32 decoder_extra_info_offset;
#endif
   UINT32 cmodel_maeq_offset;
   UINT32 cmodel_desc_offset;
#ifndef MAE_HW
   UINT32 cmodel_extra_info_offset;
   UINT32 MAEConfig_offset;
#endif
   UINT32 yuv_region_offset; // KK

    // Status of MAE hardware
	UINT32 state; // MAE_IDLE, MAE_FEBE_BUSY, MAE_FE_BUSY, FE_ENABLED, BE_ENABLED, LCD_ENABLED
    UINT32 video_out_linesize;
    UINT32 video_out_height;
    UINT32 initial_display_frame;
    UINT32 operating_mode;
    UINT32 operating_mode_status;
    UINT32 pipeline_be_delay;
    UINT32 pipeline_discard_delay;
    UINT32 playback_speed;

    UINT32 StillSleeping;
    void (*wake_up_function)(void);
    UINT32 nFramesInSystem;
    UINT32 InterruptMask;

    UINT32          fe_regmask; // KK - this makes it easier to switch from decoder address space to cmodel
    UINT32          decoder_pmms;
    UINT32          cmodel_pmms;

	// MAE Queue
	PMAEQ_T sw_proc;
	PMAEQ_T fe_wait;
	PMAEQ_T fe_proc;
	PMAEQ_T be_proc;
	PMAEQ_T maeq_free;

	// Display Queue
	PRGBQ_T rgb_write;
    PRGBQ_T rgb_timer;
	PRGBQ_T rgb_draw;
	PRGBQ_T rgb_free;

    // Anchor Frames
    PMAEQ_T b_anchor;
    PMAEQ_T f_anchor;

    struct fasync_struct *async_queue; // KK

	// Descriptors memory usage
    PUINT32 pDescRingStart;
    PUINT32 pDescRingEnd;
    PUINT32 pCurDescPtr;

	PUINT32 inuse_base;
	PUINT32 inuse_end;

    PUINT32 inuse_bufferbase;
    PUINT32 inuse_bufferend;

    PDATAQ_T data_inuse;
	PDATAQ_T data_free;

	PYUVQ_T yuv_inuse;
	PYUVQ_T yuv_free;

#ifndef MAE_HW
    PUINT32 extra_info_inuse_base;
    PUINT32 extra_info_inuse_end;
#endif

    PDUMPQ_T pDumpPtr;

} MAE_MASTER_T, *PMAE_MASTER_T;


#ifndef MAE_GLOBAL
#define EXTERN extern
#else
#define EXTERN
#endif

#ifndef MAE_GLOBAL
#define EXTERN extern
#else
#define EXTERN
#endif

EXTERN PMAE_MASTER_T pmms;
EXTERN UINT32 KRNL_MAE_MASTER_STRUCT;
EXTERN UINT32 KRNL_AVSYNC;
EXTERN UINT32 KRNL_MAEQ;
EXTERN UINT32 KRNL_DATAQ;
EXTERN UINT32 KRNL_YUVQ;
EXTERN UINT32 KRNL_RGBQ;
EXTERN UINT32 KRNL_MAE_CONFIG_STRUCT;      // KK - global structure - required only to work with the CModel
EXTERN UINT32 KRNL_DESCRIPTOR_BASE;
EXTERN UINT32 KRNL_DATA_BUFFER_BASE; // KK - holds the descriptor data
EXTERN UINT32 KRNL_YUV_FRAMES_BASE;
EXTERN UINT32 KRNL_RGB_FRAMES_BASE;
EXTERN UINT32 KRNL_SCRATCH_PAD_BASE; // HV - Base address of the Scratch Pad (for WMV9 filtering)
EXTERN UINT32 KRNL_DUMP_DATA_BASE;

EXTERN UINT32 MAE_FREEZE ;

EXTERN UINT32 DISABLE_FE ;
EXTERN UINT32 ENABLE_FE;
EXTERN UINT32 ENABLE_BE;


EXTERN PUINT32 memptr;
EXTERN PDBGOUT pdbgout;

EXTERN volatile UINT32 gbl_mask;


EXTERN AU1200_LCD *lcd ;
EXTERN UINT32 *gblYUVBuffer ;
EXTERN PYUVQ_T gblYUVq ;
EXTERN PDATAQ_T gblDataq;
EXTERN unsigned long tempval;


EXTERN u32 gMaePhysBaseAddress ;
EXTERN UINT32 MAE_RUNNING; 
EXTERN UINT32 ENABLE_LCD ;
EXTERN UINT32 ENABLE_DISCARD ;

EXTERN  UINT32 this_pts;
EXTERN  UINT32 prev_tnum ;

EXTERN  UINT32 display_ready ;
EXTERN  UINT32 nIgnorePTS ;

// KK - rev2
EXTERN UINT32 f_ptr ;
EXTERN UINT32 b_ptr ;
EXTERN LONGLONG previous_pts ;

EXTERN UINT32 my_fe_armed ;
EXTERN UINT32 my_be_armed ;

EXTERN PRGBQ_T rgb_scan ;
EXTERN PRGBQ_T rgb_holdfree ;
EXTERN PUINT32 display_addr;
// frame count to ignore PTSs for first 2 seconds
EXTERN int g_FrameCount;
EXTERN UINT32 gblBEOnly ;

EXTERN void *	gIntrEvent;
EXTERN int		gIntrnum;

EXTERN BOOL g_bDone;
EXTERN BOOL gDecoderSleeping;

// globals related to ioctl thread

EXTERN DWORD g_dwCode;
//EXTERN ContextTime_t *g_pContextTime;
EXTERN unsigned long g_pyuvbuf;
EXTERN unsigned long g_status;
EXTERN g_YUVIndex;
EXTERN BOOL g_bInCS;
//EXTERN MAE_MODE_STRUCT g_cur_mode;

EXTERN void IoctlThread();


#define au_writel(v,r)	( *((volatile u32  *)(r)) = (v) )
#define au_readl(r)		(*( (volatile u32  *)(r) ))	


EXTERN void update_operating_mode(PMAEQ_T el) ;

EXTERN CRITICAL_SECTION g_CriticalSection;
#define EnterCS(x) EnterCriticalSection(&x)
#define LeaveCS(x) LeaveCriticalSection(&x)

UINT32 video_out_rotation;

EXTERN uint32 g_StreamType;

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -