Beispiel #1
0
void CTSParserFilter::InputPinConnected( const AM_MEDIA_TYPE *pmt )
{
	REMUXER*  pRemuxer;
	HRESULT hr = m_pInputPin->GetParser( &pRemuxer );
	if ( hr != NOERROR  )
		return ;

	if ( m_bDebugFlag )
	{
		TUNE Tune={0};
		if ( m_dwSelectChannel != -1 )
		{
			Tune.channel = (unsigned short)m_dwSelectChannel;
		} 
		if ( m_dwSelectProgram != -1 )
		{
			Tune.u.unkn.data1 = (unsigned short)m_dwSelectProgram;
		}

		if ( m_dwSelectTSID > 0 )
		{
			Tune.tune_string_type = 1;
			Tune.u.unkn.tsid =  (unsigned short)m_dwSelectTSID;
		}

		SetupRemuxStreamTune( pRemuxer, &Tune );
		EnableTSPSI( pRemuxer );
		m_pInputPin->m_Tune = Tune;
		if ( m_szDebugFileSource[0] )
		{	if ( m_hDebugFileSource != NULL )
				fclose( m_hDebugFileSource );
			m_hDebugFileSource = fopen( m_szDebugFileSource, "rb" );  
		}


	}

	if ( !m_bSubtitleEnable )
		DisableSubtitle( pRemuxer );
}
Beispiel #2
0
int RemuxFile( unsigned short nTask, char* pInputFile, TUNE* pTune, int nInputFormat, 
			   char* pOutFile, int nOutputFormat, int nOption )
{
	REMUXER *pRemuxer;
	int ret, max_track_num;

	//if not specify a input format, detect it
	if ( nInputFormat == 0 )
		nInputFormat = DetectFileType( pInputFile );
	if ( nInputFormat == 0 )
		return 0;

	if ( nInputFormat == MPEG_M2TS ) 
		 max_track_num = MAX_TRACK_NUM *2;
	else
		 max_track_num = MAX_TRACK_NUM;

	pRemuxer = CreateRemuxer( nInputFormat, max_track_num, ES_BUFFER_SIZE );
	pRemuxer->task = nTask;

	SetupMessageDumper( pRemuxer->demuxer, (DUMP)RemuxMessageDumper, pRemuxer );

	ret = OpenFileSource( pRemuxer->demuxer, pInputFile, nInputFormat,  pTune );
	if ( !ret )
	{
		ReleaseRemuxer( pRemuxer );
		return 0;
	}

	if ( nOption & 0x01 ) 
		DisabeTSPtsFix( pRemuxer ); 

	if ( nOption & 0x02 ) 
		SetupEPGDump( pRemuxer, (DUMP)EPGDumper, pRemuxer );

	if ( nOption & 0x04 )
		DisableSubtitle( pRemuxer );


	SetupEPGDumpLanguage( pRemuxer, LanguageCode((unsigned char*)"eng") );

	if ( pOutFile != NULL && pOutFile[0] != 0x0 )
		CreateFileOutput( pRemuxer, pOutFile, nOutputFormat, max_track_num );

	if ( IS_TS_TYPE(nOutputFormat) )
		SetupBlockDataDumper( pRemuxer->demuxer, BlockBufferTSDump, pRemuxer->ts_builder );
	else
	if ( IS_PS_TYPE(nOutputFormat) )
		SetupBlockDataDumper( pRemuxer->demuxer, BlockBufferPSDump, pRemuxer->ps_builder );

	pRemuxer->state = 1;

	//looping pump data from file into remuxer
	PumpFileData( pRemuxer->demuxer, 0, RemuxFileProgressCallback, pRemuxer ); 

	PostStatusMessage( pRemuxer, "STREAM END (slot:0)" );

	ReleaseFileOutput( pRemuxer );
	CloseFileSource( pRemuxer->demuxer );
	ReleaseRemuxer( pRemuxer );
	
	return 1;
}