diff --git a/src/AvTranscoder/Transcoder/Transcoder.cpp b/src/AvTranscoder/Transcoder/Transcoder.cpp index 57de7ddf..f72bb5b0 100644 --- a/src/AvTranscoder/Transcoder/Transcoder.cpp +++ b/src/AvTranscoder/Transcoder/Transcoder.cpp @@ -16,6 +16,14 @@ Transcoder::Transcoder( OutputFile& outputFile ) Transcoder::~Transcoder() { + for( std::vector< InputFile* >::iterator it = _inputFiles.begin(); it != _inputFiles.end(); ++it ) + { + delete (*it); + } + for( std::vector< StreamTranscoder* >::iterator it = _streamTranscoders.begin(); it != _streamTranscoders.end(); ++it ) + { + delete (*it); + } } void Transcoder::add( const std::string& filename, const size_t streamIndex, const std::string& profileName ) @@ -54,7 +62,7 @@ bool Transcoder::processFrame() std::cout << "process frame" << std::endl; for( size_t streamIndex = 0; streamIndex < _streamTranscoders.size(); ++streamIndex ) { - if( ! _streamTranscoders.at( streamIndex ).processFrame() ) + if( ! _streamTranscoders.at( streamIndex )->processFrame() ) { _streamTranscoders.clear(); } @@ -117,7 +125,7 @@ void Transcoder::addRewrapStream( const std::string& filename, const size_t stre { InputFile* referenceFile = addInputFile( filename, streamIndex ); - _streamTranscoders.push_back( StreamTranscoder( referenceFile->getStream( streamIndex ), _outputFile ) ); + _streamTranscoders.push_back( new StreamTranscoder( referenceFile->getStream( streamIndex ), _outputFile ) ); _inputStreams.push_back( &referenceFile->getStream( streamIndex ) ); } @@ -129,13 +137,13 @@ void Transcoder::addTranscodeStream( const std::string& filename, const size_t s { case AVMEDIA_TYPE_VIDEO: { - _streamTranscoders.push_back( StreamTranscoder( referenceFile->getStream( streamIndex ), _outputFile, profile ) ); + _streamTranscoders.push_back( new StreamTranscoder( referenceFile->getStream( streamIndex ), _outputFile, profile ) ); _inputStreams.push_back( &referenceFile->getStream( streamIndex ) ); break; } case AVMEDIA_TYPE_AUDIO: { - _streamTranscoders.push_back( StreamTranscoder( referenceFile->getStream( streamIndex ), _outputFile, profile ) ); + _streamTranscoders.push_back( new StreamTranscoder( referenceFile->getStream( streamIndex ), _outputFile, profile ) ); _inputStreams.push_back( &referenceFile->getStream( streamIndex ) ); break; } @@ -157,13 +165,13 @@ void Transcoder::addDummyStream( Profile::ProfileDesc& profile ) if( profile.find( Profile::avProfileType )->second == Profile::avProfileTypeAudio ) { _dummyAudio.push_back( DummyAudio() ); - _streamTranscoders.push_back( StreamTranscoder( _dummyAudio.back(), _outputFile, profile ) ); + _streamTranscoders.push_back( new StreamTranscoder( _dummyAudio.back(), _outputFile, profile ) ); } if( profile.find( Profile::avProfileType )->second == Profile::avProfileTypeVideo ) { _dummyVideo.push_back( DummyVideo() ); - _streamTranscoders.push_back( StreamTranscoder( _dummyVideo.back(), _outputFile, profile ) ); + _streamTranscoders.push_back( new StreamTranscoder( _dummyVideo.back(), _outputFile, profile ) ); } } @@ -171,11 +179,11 @@ InputFile* Transcoder::addInputFile( const std::string& filename, const size_t s { InputFile* referenceFile = NULL; - for( std::vector< InputFile >::iterator it = _inputFiles.begin(); it != _inputFiles.end(); ++it ) + for( std::vector< InputFile* >::iterator it = _inputFiles.begin(); it != _inputFiles.end(); ++it ) { - if( (*it).getFilename() == filename ) + if( (*it)->getFilename() == filename ) { - referenceFile = &(*it); + referenceFile = (*it); break; } } @@ -184,8 +192,8 @@ InputFile* Transcoder::addInputFile( const std::string& filename, const size_t s { if( _verbose ) std::cout << "new InputFile for " << filename << std::endl; - _inputFiles.push_back( InputFile( filename ) ); - referenceFile = &_inputFiles.back(); + _inputFiles.push_back( new InputFile( filename ) ); + referenceFile = _inputFiles.back(); } referenceFile->readStream( streamIndex ); diff --git a/src/AvTranscoder/Transcoder/Transcoder.hpp b/src/AvTranscoder/Transcoder/Transcoder.hpp index 11e50631..c68a32ca 100644 --- a/src/AvTranscoder/Transcoder/Transcoder.hpp +++ b/src/AvTranscoder/Transcoder/Transcoder.hpp @@ -55,10 +55,10 @@ class Transcoder private: OutputFile& _outputFile; - std::vector< InputFile > _inputFiles; + std::vector< InputFile* > _inputFiles; std::vector< InputStream* > _inputStreams; - std::vector< StreamTranscoder > _streamTranscoders; + std::vector< StreamTranscoder* > _streamTranscoders; std::vector< DummyAudio > _dummyAudio; std::vector< DummyVideo > _dummyVideo;