📄 mae_global.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 + -