frameparser.h
来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· C头文件 代码 · 共 254 行
H
254 行
/******************************************************************************
** *
** File Name: platform.h *
** Copyright: 2007-2008 Telepath Technologies Corp. All rights reserved.*
** Version: 1.1 *
** Description: This file define the Digital TV Sub multiplex Frame *
** Parser interface. *
** *
*******************************************************************************
** Edit History *
** ------------------------------------------------------------------------- *
** DATE NAME DESCRIPTION *
** 09/21/2007 pxd Create. *
*******************************************************************************/
#ifndef _FRAMEPARSER_H
#define _FRAMEPARSER_H
#include "tptypes.h"
/*----------------------------------------------------------------------------*
** Macro Define *
**----------------------------------------------------------------------------*/
// Debug flag
//#define DEBUG_USE_FULL_MULTIPLEX_FRAME_DATA
#ifdef DEBUG_USE_FULL_MULTIPLEX_FRAME_DATA
#define FRAME_START_FIELD_WIDTH 4 // 32 bit frame start field for full multiplex frame test
#define FRAME_TYPE_FIELD_WIDTH 19 // 19 byte frame header field for full multiplex frame test
#else
#define FRAME_START_FIELD_WIDTH 4 // 16 bit frame start field
#define FRAME_TYPE_FIELD_WIDTH 28 // 28 byte frame header field
#endif
#define NIT_PART1_WIDTH 13 // part1 include tableId--netnamelength field total 13 bytes
#define NIT_PART2_WIDTH 6 // part2 include freqpointid--netotherfreqnum field total 6 bytes
#define NIT_PART3_WIDTH 1 // part3 near net num field 1 byte
#define NIT_OTHER_FREQPOINT_PARAM_WIDTH 6 // 6 byte, the param field width of a other frequency pointer
#define NIT_NEAR_NET_PARAM_WIDTH 8 // 8 byte, the param field width of a near net
#define CSCT_PART1_WIDTH 8 // 8 byte, include tableId,section length,section id, section number,updateflag,service number
#define CSCT_ONE_SERVICE_CONF_WIDTH 3 // 3 byte, include sectionId and frequency pointer id
#define SSCT_PART1_WIDTH 8 // 8 byte, include tableId,section length,section id, section number,updateflag,service number
#define SSCT_ONE_SERVICE_CONF_WIDTH 3 // 3 byte, include sectionId and frequency pointer id
#define EB_PART1_WIDTH 4 // 4 byte, include table id,cast id and cast data length
#define ESGDT_PART1_WIDTH 3 // 3 byte, include table id, section length
#define ESGDT_PART2_WIDTH 1 // 1 byte, include section id , the number of section field
#define EADT_PART1_WIDTH 3 // 3 byte, include table id, section length
#define EADT_PART2_WIDTH 5 // 5 byte, include update id, section id, the number of section
#define EADT_ONE_SERVICE_CONF_WIDTH 10 // 10 byte, include CA id, service id, EMM data type, ECM data type, ECM transmit mode
#define EADT_ONE_SERVICE_RESERVE_WIDTH 4 // 30 bits, reserve field
#define HEADER_LENGTH_FIELD_WIDTH 1 // header length 8 bits
#define HEADER_TAG_FIELD_WIDTH 1 // include 5 tag field 8 bits
#define HEADER_CRC_FIELD_WIDTH 4 // 32 bits CRC check field
#define VIDEO_DATA_HEADER_LENGTH_FIELD_WIDTH 2 // 12 bits video data header length field
#define VIDEO_DATA_HEADER_UNIT_PARAM_WIDTH 3 // 24 bits video unit param field
#define AUDIO_DATA_HEADER_UNIT_NUM_FIELD_WIDTH 1 // 8 bits audio unit number field
#define AUDIO_DATA_HEADER_UNIT_PARAM_WIDTH 5 // 40 bits audio unit param field
#define OTHER_DATA_HEADER_UNIT_NUM_FIELD_WIDTH 1 // 8 bits other unit number field
#define OTHER_DATA_HEADER_UNIT_PARAM_WIDTH 3 // 24 bits other unit param field
#define MUXSUBFRAME_BUF_SIZE 65536
#define MAXLATMLENGTH 8 // latm audio data max len
#define COMMAND_RESPONSE_DATA_MAX_SIZE 24 // command response data max len
#define TIMEOUT_MSEC 100UL
#ifdef DEBUG_USE_FULL_MULTIPLEX_FRAME_DATA
#define FRAME_START_TAG "\x00\x00\x00\x01"
#else
#define FRAME_START_TAG "\xbd\xaa\xdb\x55"
#endif
/*----------------------------------------------------------------------------*
** Data Structures *
**----------------------------------------------------------------------------*/
typedef enum
{
FRAME_TYPE_CONTROL_INFO=0,
FRAME_TYPE_MULTIPLEX_SUBFRAME,
FRAME_TYPE_COMMAND_RESPONSE=3
}FRAME_TYPE_E;
typedef enum
{
FRAME_CTRL_INFO_SUB_TYPE_NIT=1,
FRAME_CTRL_INFO_SUB_TYPE_CMCT,
FRAME_CTRL_INFO_SUB_TYPE_CSCT,
FRAME_CTRL_INFO_SUB_TYPE_SMCT,
FRAME_CTRL_INFO_SUB_TYPE_SST,
FRAME_CTRL_INFO_SUB_TYPE_ESGDT,
FRAME_CTRL_INFO_SUB_TYPE_EADT,
FRAME_CTRL_INFO_SUB_TYPE_EB = 0x10
}FRAME_CTRL_INFO_SUB_TYPE_E;
typedef struct
{
#ifdef PLATFORM_BIG_ENDIAN
TP_UINT8 StartPlayTime_isValid:1;
TP_UINT8 VideoField_isValid:1;
TP_UINT8 AudioField_isValid:1;
TP_UINT8 OtherField_isValid:1;
TP_UINT8 ExtendField_isValid:1;
TP_UINT8 Encryption_Indicator:2;
TP_UINT8 Reserve:1;
#else
TP_UINT8 Reserve:1;
TP_UINT8 Encryption_Indicator:2;
TP_UINT8 ExtendField_isValid:1;
TP_UINT8 OtherField_isValid:1;
TP_UINT8 AudioField_isValid:1;
TP_UINT8 VideoField_isValid:1;
TP_UINT8 StartPlayTime_isValid:1;
#endif
}HEADER_TAG_T;
typedef struct
{
#ifdef PLATFORM_BIG_ENDIAN
TP_UINT8 ArithmeticType:3;
TP_UINT8 BitRateField_isValid:1;
TP_UINT8 DisplayAreaField_isValid:1;
TP_UINT8 ResolutionField_isValid:1;
TP_UINT8 FramFreqField_isValid:1;
TP_UINT8 Reserve:1;
#else
TP_UINT8 Reserve:1;
TP_UINT8 FramFreqField_isValid:1;
TP_UINT8 ResolutionField_isValid:1;
TP_UINT8 DisplayAreaField_isValid:1;
TP_UINT8 BitRateField_isValid:1;
TP_UINT8 ArithmeticType:3;
#endif
}VIDEO_STREAM_PARAM_TAG_T;
typedef struct
{
#ifdef PLATFORM_BIG_ENDIAN
TP_UINT8 ArithmeticType:4;
TP_UINT8 BitRateField_isValid:1;
TP_UINT8 SamplerateField_isValid:1;
TP_UINT8 DescriptionField_isValid:1;
TP_UINT8 Reserve:1;
#else
TP_UINT8 Reserve:1;
TP_UINT8 DescriptionField_isValid:1;
TP_UINT8 SamplerateField_isValid:1;
TP_UINT8 BitRateField_isValid:1;
TP_UINT8 ArithmeticType:4;
#endif
}AUDIO_STREAM_PARAM_TAG_T;
/* multiplex sub frame parser state */
typedef enum
{
TP_FP_STATE_GET_FRAME_START =0,
TP_FP_STATE_GET_FRAME_TYPE,
//
TP_FP_STATE_GET_NIT_NET_NAME_LENGTH,
TP_FP_STATE_GET_NIT_OTHERFREQPOINT_NUM,
TP_FP_STATE_GET_NIT_NEAR_NET_NUM,
TP_FP_STATE_GET_NIT_CONTENT,
TP_FP_STATE_GET_CSCT_SECTION_LENGTH,
TP_FP_STATE_GET_CSCT_CONTENT,
TP_FP_STATE_GET_SSCT_SECTION_LENGTH,
TP_FP_STATE_GET_SSCT_CONTENT,
TP_FP_STATE_GET_ESGDT_SECTION_LENGTH,
TP_FP_STATE_GET_ESGDT_CONTENT,
TP_FP_STATE_GET_EADT_SECTION_LENGTH,
TP_FP_STATE_GET_EADT_CONTENT,
TP_FP_STATE_GET_EB_DATA_LENGTH,
TP_FP_STATE_GET_EB_DATA,
TP_FP_STATE_GET_HEADER_LENGTH ,
TP_FP_STATE_GET_HEADER_CONTENT,
TP_FP_STATE_GET_VIDEO_DATA_HEADER_LENGTH,
TP_FP_STATE_GET_VIDEO_DATA_HEADER,
TP_FP_STATE_GET_VIDEO_DATA_HEADER_CONTENT,
TP_FP_STATE_GET_VIDEO_DATA,
TP_FP_STATE_GET_AUDIO_DATA_HEADER_UNITNUM,
TP_FP_STATE_GET_AUDIO_DATA_HEADER,
TP_FP_STATE_GET_AUDIO_DATA_HEADER_CONTENT,
TP_FP_STATE_GET_AUDIO_DATA,
TP_FP_STATE_GET_OTHER_DATA_HEADER_UNITNUM,
TP_FP_STATE_GET_OTHER_DATA_HEADER,
TP_FP_STATE_GET_OTHER_DATA,
TP_FP_STATE_END,
TP_FP_STATE_MAX
}TP_FRAME_PARSER_STATE_E;
typedef struct
{
TP_FRAME_PARSER_STATE_E ParserState;
TP_UINT8 HeaderLength; // 8 bit
HEADER_TAG_T HeaderTag; // 8 bit
TP_INT32 VideoFieldLength;
TP_UINT16 VideoStreamTotal;
TP_INT32 AudioFieldLength;
TP_UINT16 AudioStreamTotal;
TP_INT32 OtherFieldLength;
TP_UINT8 *FrameData;
TP_INT32 VideoDataHeaderLength;
TP_UINT8* VideoDataHeader;
TP_UINT8* CurUnitHeader;
TP_UINT16 CurUnitLen;
TP_STREAM_VIDEO_FRAME_T *CurVideoFrame;
TP_STREAM_AUDIO_FRAME_T *CurAudioFrame;
TP_INT16 AudioUnitNum;
TP_UINT8* AudioDataHeader;
TP_INT16 OtherUnitNum;
TP_STREAM_OTHER_DATA_FRAME_T *CurOtherFrame;
TP_UINT32 DisCardDatalen;
TP_UINT32 CmdResponse;
TP_UINT32 CmdResult;
TP_UINT8 CmdResData[COMMAND_RESPONSE_DATA_MAX_SIZE];
TP_INT Error;
/*********************************************/
VIDEO_STREAM_PARAM_TAG_T VideoStreamParamTag[TP_VIDEO_STREAM_NUM_MAX];
AUDIO_STREAM_PARAM_TAG_T AudioStreamParamTag[TP_AUDIO_STREAM_NUM_MAX];
TP_UINT8 FrameBuf[MUXSUBFRAME_BUF_SIZE];
TP_INT32 FrameDataLen;
TP_LANGUAGE_TYPE_E Language;
TP_UINT16 PlayingAudioStream;
#ifdef DEBUG_USE_FULL_MULTIPLEX_FRAME_DATA
TP_INT32 multiplexcount;
#endif
}FRAME_PARSER_T;
typedef enum
{
ENCRYPTION_TYPE_NONE=0,
ENCRYPTION_TYPE_DECRYPTED=1,
ENCRYPTION_TYPE_ENCRYPTED=2
}ENCRYPTION_TYPE_E;
typedef VOID (*TP_STATE_FUNC)(FRAME_PARSER_T*, TP_DTV_STREAM_T*);
VOID FrameParserClean(FRAME_PARSER_T *fp);
VOID FreeSysConfDataMem(TP_DTV_STREAM_T *stream);
VOID FreeEbDataMem(TP_DTV_STREAM_T *stream);
VOID FreeVideoDataMem(TP_DTV_STREAM_T *stream, TP_BOOL freeall);
VOID FreeAudioDataMem(TP_DTV_STREAM_T *stream, TP_BOOL freeall);
void FreeOtherDataMem(TP_DTV_STREAM_T *stream, TP_BOOL freeall);
#endif /* _FRAMEPARSER_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?