static int PATDumper( void* pContext, uint8_t* pData, int nSize ) { TS_CHANNEL_PARSER *pTSChannelParser = (TS_CHANNEL_PARSER*)pContext; PAT_DATA *pPatData = (PAT_DATA*)pData; TS_PAT *pPat = (TS_PAT*)pPatData->pat_table; int16_t pat_index = pPatData->pat_index; uint16_t tsid = pPat->tsid; int program_num = pPat->total_program_number; int i, tsid_locked=0; ASSERT( pContext != NULL ); ASSERT( nSize == sizeof(PAT_DATA) ); if ( (pTSChannelParser->state & PROGRAM_FOUND) ) { return 0; } SageLog(( _LOG_TRACE, 3, TEXT("PAT-%d:Program (total channel:%d, tsid:%d )"), pat_index, program_num, tsid )); for ( i = 0; i<program_num; i++ ) { SageLog(( _LOG_TRACE, 3, TEXT("\tPMT pid:0x%04x program:%04d"), pPat->program_pid[i], pPat->program_number[i] )); if ( pPat->program_number[i] >= 0 ) { SageLog(( _LOG_TRACE, 3, TEXT("program %d is added into pid table (%d)"), pPat->program_number[i], i)); { PID_ITEM pid_inf; pid_inf.pid = pPat->program_pid[i]; pid_inf.type = PID_TYPE_PROGRAM; pid_inf.service = 0; pTSChannelParser->dumper.pid_dumper( pTSChannelParser->dumper.pid_dumper_context, &pid_inf, sizeof(pid_inf) ); pTSChannelParser->state |= PROGRAM_FOUND; } } } tsid_locked = CheckTsId( pTSChannelParser, tsid )>0; if ( tsid_locked ) { SageLog(( _LOG_TRACE, 3, TEXT("tsid %d is locked (%d)"), tsid, i)); pTSChannelParser->state |= TSID_LOCKED; return 1; } return 0; }
static int PATDumper( void* pContext, unsigned char* pData, int nSize ) { TS_INFO_PARSER *pTSInfoParser = (TS_INFO_PARSER*)pContext; PAT_DATA *pPatData = (PAT_DATA*)pData; TS_PAT *pPat = (TS_PAT*)pPatData->pat_table; short pat_index = pPatData->pat_index; unsigned short tsid = pPat->tsid; int program_num = pPat->total_program_number; int i, tsid_locked=0, program_found=-1; ASSERT( pContext != NULL ); ASSERT( nSize == sizeof(PAT_DATA) ); //SageLog(( _LOG_TRACE, 3, TEXT("****************PAT ****************** %x"), pTSInfoParser->state ) ); if ( (pTSInfoParser->state & PROGRAM_FOUND) ) { return 0; } SageLog(( _LOG_TRACE, 3, TEXT("PAT-%d:Program (total channel:%d, tsid:%d )"), pat_index, program_num, tsid )); for ( i = 0; i<program_num; i++ ) { SageLog(( _LOG_TRACE, 3, TEXT("\tPMT pid:0x%04x program:%04d"), pPat->program_pid[i], pPat->program_number[i] )); if ( CheckProgramId( pTSInfoParser, pPat->program_number[i], tsid )>0 ) program_found = i; } for ( i = 0; i<program_num; i++ ) { if ( pTSInfoParser->dumper.pid_dumper ) { PID_ITEM pid_inf; pid_inf.pid = pPat->program_pid[i]; pid_inf.type = PID_TYPE_PROGRAM; pid_inf.service = 0; pTSInfoParser->dumper.pid_dumper( pTSInfoParser->dumper.pid_dumper_context, &pid_inf, sizeof(pid_inf) ); } } if ( program_found >= 0 ) { SageLog(( _LOG_TRACE, 3, TEXT("program %d is locked (%d)"), pPat->program_number[program_found], i)); if ( !(pTSInfoParser->state & PROGRAM_FOUND ) ) { pTSInfoParser->state |= PROGRAM_FOUND; if ( pTSInfoParser->dumper.pid_dumper ) { PID_ITEM pid_inf; pid_inf.pid = pPat->program_pid[program_found]; pid_inf.type = PID_TYPE_PROGRAM; pid_inf.service = tsid; pid_inf.data = pPat->program_number[program_found]; pTSInfoParser->dumper.pid_dumper( pTSInfoParser->dumper.pid_dumper_context, &pid_inf, sizeof(pid_inf) ); } } } tsid_locked = CheckTsId( pTSInfoParser, tsid )>0; if ( tsid_locked ) { SageLog(( _LOG_TRACE, 3, TEXT("tsid %d is locked (%d)"), tsid, i)); pTSInfoParser->state |= TSID_LOCKED; return 1; } return 0; }