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 ); }
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; }