📄 ifo.h
字号:
#ifndef __IFO_H__
#define __IFO_H__
#include "Struct.h"
//#include "API/HAPI/SH_MEM_api.h"
#if _COP_CAPTURE_LOGO_USED
//#define IFO_OUT_BUF_SIZE 0x78000 //480KB
#define IFO_OUT_BUF_START IFO_OUT_BUF_ADR // + 2
#define IFO_OUT_BUF_END IFO_OUT_BUF_ADR + 0x020000
#define IFO_QM_BASE IFO_QM_ADR
#define IFO_QM_SIZE 256
#define MAX_SIZE_IFO_WRITE_FLASH 32000
/* input buffer pointer change functions */
/* output buffer pointer change functions */
#define ADR_TE_CHANGE(x) rIFO_ADR_TE=x
#define ADR_TO_CHANGE(x) rIFO_ADR_TO=x
#define ADR_BE_CHANGE(x) rIFO_ADR_BE=x
#define ADR_BO_CHANGE(x) rIFO_ADR_BO=x
/* CMD description and setting */
#define IFO_RESET 0x04
#define IFO_NO_OPERATION 0x00
#define IFO_CONTINUE 0x01
#define START_PICTURE 0x02
#define START_DATA 0x03
#define IFO_SET_CMD(x) rIFO_CMD=x
/* interrupt control functions */
#define IFO_ALL_INT_ENABLE() rIFO_IRQM=0X0000000F
#define IFO_ALL_INT_DISABLE() rIFO_IRQM=0X00
#define IFO_INT_ENABLE(x) rIFO_IRQM|=(0x01<<x)
#define IFO_IRQ_CLEAR(x) rIFO_IRQ|=(0x01<<x)
#define IFO_ENABLE() rIFO_CLC= 1
#define IFO_DISABLE() rIFO_CLC= 0
/* interrupt bit position */
#define MB_READY 0
#define SLICE_READY 1
#define PICTURE_READY 2
#define END_ADR_REACHED 3
/* rate control parameters */
//#define HOR_PIC_SIZE 720
//#define VERT_PIC_SIZE 480
//#define HOR_MB_SIZE HOR_PIC_SIZE/16
//#define VERT_MB_SIZE VERT_PIC_SIZE/16
#define Q_START_VAL 10
#define BITS_PER_PIC 80*1024*8
#define PARAMETER_R 2*BITS_PER_PIC
#define B_FULLNESS_D0 Q_START_VAL * PARAMETER_R / 31
#define SPARE_I_SPACE 0x5000 // 20KB
/* rate control mode definition */
#define NORM 0 // 100% tar_bits_pic
#define REDUCED 1 // 90% tar_bits_pic
#define EMERGENCY 2 // 80% tar_bits_pic
//#define BITS_PER_MB BITS_PER_PIC/(HOR_MB_SIZE*VERT_MB_SIZE)
/* buffer control */
#define NUM_OF_TOTAL_I 6
#define S5H_IFO_HISR_STACK_SIZE 512
#define IFO_TASK_STACK_SIZE 10000
#define IFO_TASK_PRIORITY 3
#define logo_size 0x10000
/* Error return code */
typedef unsigned char Error;
/* Global variables for IFO */
extern unsigned int num_of_MB; // the num of MB per picture
extern int gIFO_bCount; //count the used ifo node
extern BOOL gIFO_encoding; //identify the ifo is running or not
extern SysQueue_t gIFO_queue;
extern SysSema_t gIFO_sema_sync;
extern SysSema_t gIFO_sema_cmd;
extern SysTask_t gIFO_task;
extern UINT gIFO_IRQ_IDX[2];
extern unsigned char captured_logo[logo_size];
typedef enum {
IFO_START_ENCODING,
IFO_OUTBUF_AVAIL,
IFO_CONTINUE_ENCODING,
IFO_PIC_FINISH,
IFO_OUTBUF_FILLED,
IFO_STOP_ENCODING
} IFO_CtrlCmd_et;
typedef struct {
IFO_CtrlCmd_et msg_id;
} IFO_Msg_st;
typedef struct {
UCHAR * tar_addr;
UCHAR * out_buf_addr;
} IFO_DumpParam_st;
typedef struct {
BM_FILLEDLIST *pFilled_list;
BM_NODE *pBuf_out;
} IFO_Output_st;
typedef struct{
BOOL aborted;
BOOL pic_finished;
BOOL incorrect_param;
}IFO_Flag_st;
typedef struct{
UINT src_width;
UINT src_height;
UINT disp_format;
}IFO_VpParam_st;
typedef enum {
IFO_STATE_ABORT,
IFO_STATE_ENABLE_IFO,
IFO_STATE_SET_PARAM,
IFO_STATE_WR_SEQ_HD,
IFO_STATE_DUMP_DATA,
IFO_STATE_GET_OUT_BUF,
IFO_STATE_START_ENCODING,
IFO_STATE_CONTINUE,
IFO_STATE_PIC_FINISH,
IFO_STATE_STOP,
IFO_STATE_IDLE,
IFO_STATE_WAIT_OUTBUF,
IFO_STATE_WAIT_BUF_FILLED
} IFO_State_et;
/* functions for IFO */
void IFO_PreInit(void);
void IFO_Encoding(VOID);
void ifoTask(UNSIGNED argc, void * argv);
void ifoProcessStart(void);
void ifoProcessContinue(void);
void ifoProcessOutbufAvail(void);
void ifoProcessOutbufFilled(void);
void ifoProcessPicFinish(void);
void ifoProcessStopEncoding(void);
void ifoStateManager(void);
void ifoStateEnableIFO(void);
void ifoStateSetParam(void);
void ifoStateWrSeqHd(void);
void ifoStateDumpData(void);
void ifoStateGetOutBuf(void);
void ifoStateEncoding(void);
void ifoStateContinue(void);
BOOL ifoUseCmdReadySema(void);
SYS_RETURN ifoReleaseWaitCmdReady(void);
void ifoStateStop(void);
int ifoOutbufFilledCallback(int param1, int param2);
int ifoOutbufAvailCallback(int param1, int param2);
void ifo_dump_capd_logo(UCHAR * target_addr , UCHAR * buf_addr);
SysLisrEntryPtr_t Ifo_Isr(void);
UINT IFO_GetInvQmValues( UINT qm_adr, UINT index);
void IFO_SetInvQMatrix( void );
/* interrupt service routine */
#endif // __IFO_H__
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -