TS_INFO_PARSER* CreateTSInfoParser( int nMaxStreamNum, int nStreamFormat, int nSubFormat ) { int i; TS_INFO_PARSER *pTSInfoParser = SAGETV_MALLOC( sizeof(TS_INFO_PARSER) ); pTSInfoParser->ts_filter = CreateTSFilter( DEFAULT_PAT_NUM, DEFAULT_PMT_NUM, nStreamFormat, nSubFormat ); //ATSC_STREAM, TERRESTRIAL; pTSInfoParser->max_stream_num = nMaxStreamNum; pTSInfoParser->ts_streams.ts_element = SAGETV_MALLOC( nMaxStreamNum*sizeof(TS_ELEMENT) ); pTSInfoParser->ts_streams.total_streams = nMaxStreamNum; pTSInfoParser->es_streams.es_element = SAGETV_MALLOC( nMaxStreamNum*sizeof(ES_ELEMENT) ); pTSInfoParser->es_streams.total_streams = nMaxStreamNum; pTSInfoParser->av_streams.av_element = SAGETV_MALLOC( nMaxStreamNum*sizeof(AV_ELEMENT) ); pTSInfoParser->av_streams.total_streams = nMaxStreamNum; pTSInfoParser->es_buffer = SAGETV_MALLOC( nMaxStreamNum*sizeof(ES_BUFFER) ); for ( i = 0; i<nMaxStreamNum; i++ ) { pTSInfoParser->es_buffer[i].buffer = SAGETV_MALLOC( TMP_ES_BUFFER_SIZE ); pTSInfoParser->es_buffer[i].buffer_size = TMP_ES_BUFFER_SIZE; } pTSInfoParser->ts_filter->dumper.pat_dumper = (DUMP)PATDumper; pTSInfoParser->ts_filter->dumper.pat_dumper_context = pTSInfoParser; pTSInfoParser->ts_filter->dumper.pmt_dumper = (DUMP)PMTDumper; pTSInfoParser->ts_filter->dumper.pmt_dumper_context = pTSInfoParser; pTSInfoParser->ts_filter->dumper.pcr_dumper = (DUMP)PCRDumper; pTSInfoParser->ts_filter->dumper.pcr_dumper_context = pTSInfoParser; pTSInfoParser->ts_filter->dumper.stream_dumper = (DUMP)StreamDumper; pTSInfoParser->ts_filter->dumper.stream_dumper_context = pTSInfoParser; pTSInfoParser->ts_filter->psi_parser->dumper.channel_info_dumper = (DUMP)ChannelInfoDumper; pTSInfoParser->ts_filter->psi_parser->dumper.channel_info_context = pTSInfoParser; pTSInfoParser->ts_filter->psi_parser->dumper.pid_dumper = (DUMP)PSIPidDumper; pTSInfoParser->ts_filter->psi_parser->dumper.pid_context = pTSInfoParser; pTSInfoParser->ts_filter->psi_parser->dumper.system_time_dumper = (DUMP)SystemTimeDumper; pTSInfoParser->ts_filter->psi_parser->dumper.system_time_context = pTSInfoParser; //pTSInfoParser->ts_filter->psi_parser->dumper.tune_info_dumper = (DUMP)TuneInfoDumper; //pTSInfoParser->ts_filter->psi_parser->dumper.tune_info_context = pTSInfoParser; //pTSInfoParser->ts_filter->psi_parser->dumper.message_dumper = (DUMP)MessageDumper; //pTSInfoParser->ts_filter->psi_parser->dumper.message_context = pTSInfoParser; pTSInfoParser->utc_sec_start = 0; pTSInfoParser->pcr_sec_start = 0; pTSInfoParser->max_check_limit = 1024*1024*32; //max check 64M data for avinfo SageLog(( _LOG_TRACE, 3, TEXT("TS Info Parser filter is created version 1.0.2 .") )); return pTSInfoParser; }
TS_CHANNEL_PARSER* CreateTSChannelParser( int nMaxStreamNum, int nStreamFormat, int nSubFormat ) { int i; TS_CHANNEL_PARSER *pTSChannelParser = SAGETV_MALLOC( sizeof(TS_CHANNEL_PARSER) ); pTSChannelParser->ts_filter = CreateTSFilter( DEFAULT_PAT_NUM, DEFAULT_PMT_NUM, nStreamFormat, nSubFormat ); //ATSC_STREAM, TERRESTRIAL; pTSChannelParser->max_stream_num = nMaxStreamNum; pTSChannelParser->ts_streams.ts_element = SAGETV_MALLOC( nMaxStreamNum*sizeof(TS_ELEMENT) ); pTSChannelParser->ts_streams.total_streams = nMaxStreamNum; pTSChannelParser->es_streams.es_element = SAGETV_MALLOC( nMaxStreamNum*sizeof(ES_ELEMENT) ); pTSChannelParser->es_streams.total_streams = nMaxStreamNum; pTSChannelParser->av_streams.av_element = SAGETV_MALLOC( nMaxStreamNum*sizeof(AV_ELEMENT) ); pTSChannelParser->av_streams.total_streams = nMaxStreamNum; pTSChannelParser->es_buffer = SAGETV_MALLOC( nMaxStreamNum*sizeof(ES_BUFFER_) ); for ( i = 0; i<nMaxStreamNum; i++ ) { pTSChannelParser->es_buffer[i].buffer = SAGETV_MALLOC( TMP_ES_BUFFER_SIZE ); pTSChannelParser->es_buffer[i].buffer_size = TMP_ES_BUFFER_SIZE; } pTSChannelParser->ts_filter->dumper.pat_dumper = (DUMP)PATDumper; pTSChannelParser->ts_filter->dumper.pat_dumper_context = pTSChannelParser; pTSChannelParser->ts_filter->dumper.pmt_dumper = (DUMP)PMTDumper; pTSChannelParser->ts_filter->dumper.pmt_dumper_context = pTSChannelParser; pTSChannelParser->ts_filter->dumper.stream_dumper = (DUMP)StreamDumper; pTSChannelParser->ts_filter->dumper.stream_dumper_context = pTSChannelParser; pTSChannelParser->ts_filter->psi_parser->dumper.channel_info_dumper = (DUMP)ChannelInfoDumper; pTSChannelParser->ts_filter->psi_parser->dumper.channel_info_context = pTSChannelParser; pTSChannelParser->ts_filter->psi_parser->dumper.pid_dumper = (DUMP)PSIPidDumper; pTSChannelParser->ts_filter->psi_parser->dumper.pid_context = pTSChannelParser; InitScanData( pTSChannelParser, nStreamFormat, nSubFormat ); pTSChannelParser->max_check_limit = 1024*1024*12; //max check 12M data for avinfo SageLog(( _LOG_TRACE, 3, TEXT("TS Channel Parser is created version 1.0.0 .") )); return pTSChannelParser; }