Esempio n. 1
0
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;
}
Esempio n. 2
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;
}