📄 msapi_demux.h
字号:
/**************************************************************************************************
Author: Timothy Hsu / HDTV
<< MStar demux api >>
**************************************************************************************************/
#ifndef _MSAPI_DMX_H
#define _MSAPI_DMX_H
#include "datatype.h"
#include "debug.h"
/*definition ====================================================================================*/
#define MSAPI_DMX_MAX_FILTER_NUMBER 40/*DRV_SF_MAX_FLT_NUMBER*/
#define MSAPI_DMX_MATCH_PATTERN_LENGTH 16/*HW_SF_MATCH_PATTERN_LENGTH*/
#define MSAPI_DMX_INVALID_FLT_ID 0xff
#define MSAPI_DMX_TIMEOUT_INFINITE 0xffff
#define MSAPI_DMX_INVALID_PID 0x1fff
#define MSAPI_DMX_INVALID_PCR 0xffffffff
#define MSAPI_DMX_INVALID_TS_RATE 0xffffffff
#define MSAPI_DMX_DONT_CARE_TABLE_ID 0xff
#define MSAPI_DMX_DONT_CARE_SUB_TABLE_ID 0xffff
#define MSAPI_DMX_DONT_CARE_SECTION_NUM 0xff
#define MSAPI_DMX_DONT_CARE_EXTEND_ID 0xffffffff
#define MSAPI_DMX_SECTION_1K 1024/*HW_SF_SECTION_1K*/
#define MSAPI_DMX_SECTION_4K 4096/*HW_SF_SECTION_4K*/
/*enumeration ===================================================================================*/
//<<filter state>>===============================================================================//
typedef enum
{
MSAPI_DMX_FILTER_STATE_CLOSED = 0,
MSAPI_DMX_FILTER_STATE_INITIAL = 1,
MSAPI_DMX_FILTER_STATE_SET = 2,
MSAPI_DMX_FILTER_STATE_READY = 4,
MSAPI_DMX_FILTER_STATE_RUNNING = 8,
MSAPI_DMX_FILTER_STATE_GOTDATA = 16,
MSAPI_DMX_FILTER_STATE_GOTPES = 17,
MSAPI_DMX_FILTER_STATE_TIMEOUT = 18,
MSAPI_DMX_FILTER_STATE_OVERFLOW = 19,
MSAPI_DMX_FILTER_STATE_CRCCORRECT = 32,
MSAPI_DMX_FILTER_STATE_CRCINCORRECT = 33,
MSAPI_DMX_FILTER_STATE_STOP = 64
}MSAPI_DMX_FILTER_STATE;
//<<filter status>>==============================================================================//
typedef enum
{
MSAPI_DMX_FILTER_STATUS_OK = 1,
MSAPI_DMX_FILTER_STATUS_TIMEOUT = 2,
MSAPI_DMX_FILTER_STATUS_SECAVAILABLE = 3,
MSAPI_DMX_FILTER_STATUS_CRCINCORRECT = 4,
MSAPI_DMX_FILTER_STATUS_REQUESTMEET = 5,
MSAPI_DMX_FILTER_STATUS_PESAVAILABLE = 6,
MSAPI_DMX_FILTER_STATUS_COPYSECERR = 7,
MSAPI_DMX_FILTER_STATUS_OVERFLOW = 8,
MSAPI_DMX_FILTER_STATUS_ERROR = 9
}MSAPI_DMX_FILTER_STATUS;
//<<filter type>>================================================================================//
typedef enum
{
MSAPI_DMX_FILTER_TYPE_VIDEO = 1, //to video fifo
MSAPI_DMX_FILTER_TYPE_AUDIO = 2, //to audio fifo
MSAPI_DMX_FILTER_TYPE_SUBTITLE = 3, //to subtitle buffer
MSAPI_DMX_FILTER_TYPE_TELETEXT = 4, //to teletext buffer
MSAPI_DMX_FILTER_TYPE_PES = 5, //to section buffer
MSAPI_DMX_FILTER_TYPE_SECTION_1K = 6, //to section buffer
MSAPI_DMX_FILTER_TYPE_SECTION_4K = 7, //to section buffer
MSAPI_DMX_FILTER_TYPE_PCR = 8, //no output
MSAPI_DMX_FILTER_TYPE_PACKET = 9, //to section buffer
MSAPI_DMX_FILTER_TYPE_PACKET_PUSI = 10, //to section buffer
MSAPI_DMX_FILTER_TYPE_OAD = 11, //to oad buffer
MSAPI_DMX_FILTER_TYPE_RECORD = 12, //to record buffer
MSAPI_DMX_FILTER_TYPE_PLAYBACK = 13 //from playback buffer
}MSAPI_DMX_FILTER_TYPE;
//<<scrambling type>>============================================================================//
typedef enum
{
MSAPI_DMX_SCRAMBLING_FREE = 1, //no scrambling
MSAPI_DMX_SCRAMBLING_PACKET = 2, //packet layer scrambling
MSAPI_DMX_SCRAMBLING_PES = 3, //pes layer scrambling
MSAPI_DMX_SCRAMBLING_UNKNOWN = 4 //unknown
}MSAPI_DMX_SCRAMBLING_TYPE;
/*data structure ================================================================================*/
//<<section monitor parameter>>==================================================================//
typedef struct msAPI_Dmx_SectionMonitor_Para
{
U16 u16PID;
MSAPI_DMX_FILTER_TYPE enSectionFltType;
U8 au8MatchByte[MSAPI_DMX_MATCH_PATTERN_LENGTH];
U8 au8MaskByte[MSAPI_DMX_MATCH_PATTERN_LENGTH];
U8 au8NotMatchByte[MSAPI_DMX_MATCH_PATTERN_LENGTH];
void (*pfNotify)(U8 u8FID, MSAPI_DMX_FILTER_STATUS enFilterStatus);
U16 u16TimeoutMilliSec;
BOOLEAN bOneShot;
U8* pu8FID;
}_msAPI_Dmx_SectionMonitor_Para;
//<<section get parameter>>======================================================================//
typedef struct msAPI_Dmx_SectionGet_Para
{
U16 u16PID;
MSAPI_DMX_FILTER_TYPE enSectionFltType;
U8 au8MatchByte[MSAPI_DMX_MATCH_PATTERN_LENGTH];
U8 au8MaskByte[MSAPI_DMX_MATCH_PATTERN_LENGTH];
U8 au8NotMatchByte[MSAPI_DMX_MATCH_PATTERN_LENGTH];
U8* pu8Section;
U16 u16MaxSecSize;
U16 u16TimeoutMilliSec;
BOOLEAN bCheckCrc;
}_msAPI_Dmx_SectionGet_Para;
/*function ======================================================================================*/
#ifdef MSAPI_DMX
#define MSAPI_DMX_INTERFACE
#else
#define MSAPI_DMX_INTERFACE extern
#endif
MSAPI_DMX_INTERFACE MSAPI_DMX_FILTER_STATUS msAPI_DMX_SectionMonitor(_msAPI_Dmx_SectionMonitor_Para * pstSectionMonitor);
MSAPI_DMX_INTERFACE MSAPI_DMX_FILTER_STATUS msAPI_DMX_SectionGet(_msAPI_Dmx_SectionGet_Para * pstSectionGet);
MSAPI_DMX_INTERFACE MSAPI_DMX_FILTER_STATUS msAPI_DMX_StartFilter(U16 u16Pid, MSAPI_DMX_FILTER_TYPE enFltType, U8 *pu8FID);
MSAPI_DMX_INTERFACE MSAPI_DMX_FILTER_STATUS msAPI_DMX_ScramblingMonitor(U16 u16PID, U16 u16TimeoutMilliSec, void (*pfNotify)(U8 u8FID, MSAPI_DMX_FILTER_STATUS enFilterStatus), U8* pu8FID, BOOLEAN bPesHeaderOnly);
MSAPI_DMX_INTERFACE MSAPI_DMX_SCRAMBLING_TYPE msAPI_DMX_ScramblingGet(U16 u16PID, U16 u16TimeoutMilliSec, U8* pu8Packet, U16 u16MaxPacketSize);
MSAPI_DMX_INTERFACE BOOLEAN msAPI_DMX_Initial(void);
#if (PLATFORM == MCU8051) //================================================<<<
MSAPI_DMX_INTERFACE void msAPI_DMX_Semaphore_Reset(void);
#endif//PLATFORM_MCU8051 //=================================================>>>
MSAPI_DMX_INTERFACE U8 msAPI_DMX_Open(MSAPI_DMX_FILTER_TYPE enFltType);
MSAPI_DMX_INTERFACE void msAPI_DMX_SetPid(U8 u8FID, U16 u16PID);
MSAPI_DMX_INTERFACE void msAPI_DMX_SetPattern1(U8 u8FID, U8* pu8Match, U8* pu8Mask, U8* pu8NotMatch);
MSAPI_DMX_INTERFACE void msAPI_DMX_SetPattern2(U8 u8FID, U8 u8TableID, U16 u16SubTableID, U8 u8SectionNum, U32 u32ExtendID);
MSAPI_DMX_INTERFACE void msAPI_DMX_SetTimer(U8 u8FID, U16 u16TimeoutMilliSec, BOOLEAN b8OneShot);
MSAPI_DMX_INTERFACE void msAPI_DMX_SetNotify(U8 u8FID, void (*pfNotify)(U8 u8FID, MSAPI_DMX_FILTER_STATUS enFilterStatus));
#if (PLATFORM != MCU8051) //================================================<<<
MSAPI_DMX_INTERFACE void msAPI_DMX_SetDeCsa(U8 u8FID, U8 *control_word, U8 Layer);
#endif//PLATFORM_MCU8051 //=================================================>>>
MSAPI_DMX_INTERFACE void msAPI_DMX_Reset(U8 u8FID);
MSAPI_DMX_INTERFACE void msAPI_DMX_Start(U8 u8FID);
MSAPI_DMX_INTERFACE BOOLEAN msAPI_DMX_MonitorStateChange(U8 u8FID);
MSAPI_DMX_INTERFACE void msAPI_DMX_Polling(void);
#if (PLATFORM == WINDOWS) //================================================<<<
MSAPI_DMX_INTERFACE unsigned __stdcall msAPI_DMX_Thread(void* param);
#endif//PLATFORM_WINDOWS //=================================================>>>
MSAPI_DMX_INTERFACE BOOLEAN msAPI_DMX_CopySection(U8 u8FID, U8* pu8Section, U16 u16MaxLength);
MSAPI_DMX_INTERFACE BOOLEAN msAPI_DMX_CopyPacket(U8 u8FID, U8* pu8Packet, U16 u16MaxLength);
#if (PLATFORM != MCU8051) //================================================<<<
MSAPI_DMX_INTERFACE U16 msAPI_DMX_CopyPes(U8 u8FID, U8* pu8Pes, U16 u16CopyLength, U8 u8PesComplete);
#else //<<<=================================================================>>>
MSAPI_DMX_INTERFACE U16 msAPI_DMX_CopyPes(U8 u8FID, U32 pu8Pes, U16 u16CopyLength, U8 u8PesComplete);
#endif//PLATFORM_MCU8051 //=================================================>>>
MSAPI_DMX_INTERFACE BOOLEAN msAPI_DMX_CheckCRC32(U8* pu8Section);
MSAPI_DMX_INTERFACE void msAPI_DMX_Stop(U8 u8FID);
MSAPI_DMX_INTERFACE void msAPI_DMX_Close(U8 u8FID);
MSAPI_DMX_INTERFACE U8 msAPI_DMX_GetFree1KFilterNo(void);
MSAPI_DMX_INTERFACE U8 msAPI_DMX_GetFree4KFilterNo(void);
MSAPI_DMX_INTERFACE MSAPI_DMX_FILTER_STATE msAPI_DMX_GetFilterState(U8 u8FID);
MSAPI_DMX_INTERFACE U16 msAPI_DMX_GetFilterPID(U8 u8FID);
#if (PLATFORM == MCU8051) //================================================<<<
MSAPI_DMX_INTERFACE BOOLEAN msAPI_DMX_LifeInsurance(void);
#endif//PLATFORM_MCU8051 //=================================================>>>
#if (PLATFORM == MCU8051) //================================================<<<
MSAPI_DMX_INTERFACE void msAPI_DMX_EnableReserveFlt(BOOLEAN enable);
#endif//PLATFORM_MCU8051 //=================================================>>>
#if ((PLATFORM == MCU8051) && BUILD_SYSDEBUG) //============================<<<
MSAPI_DMX_INTERFACE void msAPI_DMX_GetSections(U16 u16PID, U8 u8TableID);
MSAPI_DMX_INTERFACE void msAPI_DMX_TestSection(void);
MSAPI_DMX_INTERFACE void msAPI_DMX_GetPackets(U16 u16PID);
MSAPI_DMX_INTERFACE void msAPI_DMX_GetPes(U16 u16PID);
MSAPI_DMX_INTERFACE void msAPI_DMX_Recording(U16 u16PID);
MSAPI_DMX_INTERFACE void msAPI_DMX_Playbacking(U16 u16PID);
MSAPI_DMX_INTERFACE void msAPI_DMX_ShowStatusAll(void);
#endif // (PLATFORM_MCU8051 && BUILD_SYSDEBUG) //===========================>>>
#if (PLATFORM != MCU8051) //================================================<<<
MSAPI_DMX_INTERFACE void msAPI_DMX_ShowStatusAll(void);
MSAPI_DMX_INTERFACE void msAPI_DMX_TestSection(void);
MSAPI_DMX_INTERFACE void msAPI_DMX_TestPacket(void);
MSAPI_DMX_INTERFACE void msAPI_DMX_TestCsa1(void);
MSAPI_DMX_INTERFACE void msAPI_DMX_TestCsa2(void);
MSAPI_DMX_INTERFACE void msAPI_DMX_GetSections(U16 u16PID, U8 u8TableID);
MSAPI_DMX_INTERFACE void msAPI_DMX_GetPackets(U16 u16PID);
MSAPI_DMX_INTERFACE U32 msAPI_DMX_ScopePackets(U16 u16PID);
MSAPI_DMX_INTERFACE U32 msAPI_DMX_MeasureTsRate(U16 u16PID);
MSAPI_DMX_INTERFACE void msAPI_DMX_GetPes(U16 u16PID);
MSAPI_DMX_INTERFACE void msAPI_DMX_GetEmmEcm(U16 u16PID);
MSAPI_DMX_INTERFACE U32 msAPI_DMX_GetPcr(U16 u16PID);
#endif//PLATFORM_MCU8051 //=================================================>>>
#if ((PLATFORM != MCU8051) || BUILD_SYSDEBUG) //============================<<<
MSAPI_DMX_INTERFACE void msAPI_DMX_PlayAv(U16 u16VPID, U16 u16APID, U16 u16PcrPID);
MSAPI_DMX_INTERFACE void msAPI_DMX_StatusAv(void);
MSAPI_DMX_INTERFACE void msAPI_DMX_StopAv(void);
MSAPI_DMX_INTERFACE void msAPI_DMX_PlayTtx(U16 u16TtxPID);
MSAPI_DMX_INTERFACE void msAPI_DMX_DumpTtx(U16 u16TtxPID);
MSAPI_DMX_INTERFACE void msAPI_DMX_GetOad(U16 u16OadPID);
#endif// (PLATFORM_MCU8051 || BUILD_SYSDEBUG) //============================>>>
/*===============================================================================================*/
#endif /*_MSAPI_DMX_H END */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -