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 + -
显示快捷键?