diff --git a/src/AvTranscoder/StreamTranscoder.cpp b/src/AvTranscoder/StreamTranscoder.cpp index a4259dd3..f342bbcc 100644 --- a/src/AvTranscoder/StreamTranscoder.cpp +++ b/src/AvTranscoder/StreamTranscoder.cpp @@ -8,7 +8,11 @@ StreamTranscoder::StreamTranscoder( AvInputStream& stream, OutputFile& outputFil : _stream( &stream ) , _frameBuffer( NULL ) , _inputStreamReader( NULL ) + , _inputStreamVideo( NULL ) + , _inputStreamAudio( NULL ) , _outputStreamWriter( NULL ) + , _outputStreamVideo( NULL ) + , _outputStreamAudio( NULL ) , _outputFile( &outputFile ) , _streamIndex( streamId ) , _transcodeStream( false ) @@ -19,10 +23,16 @@ StreamTranscoder::~StreamTranscoder() { if( _frameBuffer ) delete _frameBuffer; - if( _inputStreamReader ) - delete _inputStreamReader; - if( _outputStreamWriter ) - delete _outputStreamWriter; + + if( _inputStreamVideo ) + delete _inputStreamVideo; + if( _inputStreamAudio ) + delete _inputStreamAudio; + + if( _outputStreamVideo ) + delete _outputStreamVideo; + if( _outputStreamAudio ) + delete _outputStreamAudio; } void StreamTranscoder::init( const std::string& profile ) @@ -33,7 +43,8 @@ void StreamTranscoder::init( const std::string& profile ) { case AVMEDIA_TYPE_VIDEO : { - _inputStreamReader = new InputStreamVideo( *_stream ); + _inputStreamVideo = new InputStreamVideo( *_stream ); + _inputStreamReader = _inputStreamVideo; _inputStreamReader->setup(); // re-wrap only, get output descriptor from input @@ -43,18 +54,20 @@ void StreamTranscoder::init( const std::string& profile ) break; } - OutputStreamVideo* outputStreamVideo = new OutputStreamVideo(); - _outputStreamWriter = outputStreamVideo; + _outputStreamVideo = new OutputStreamVideo(); + _outputStreamWriter = _outputStreamVideo; _outputStreamWriter->setProfile( profile ); - _outputFile->addVideoStream( outputStreamVideo->getVideoDesc() ); - _frameBuffer = new Image( outputStreamVideo->getVideoDesc().getImageDesc() ); + _outputFile->addVideoStream( _outputStreamVideo->getVideoDesc() ); + _videoFrameBuffer = new Image( _outputStreamVideo->getVideoDesc().getImageDesc() ); + _frameBuffer = _videoFrameBuffer; break; } case AVMEDIA_TYPE_AUDIO : { - _inputStreamReader = new InputStreamAudio( *_stream ); + _inputStreamAudio = new InputStreamAudio( *_stream ); + _inputStreamReader = _inputStreamAudio; _inputStreamReader->setup(); // re-wrap only, get output descriptor from input @@ -64,12 +77,13 @@ void StreamTranscoder::init( const std::string& profile ) break; } - OutputStreamAudio* outputStreamAudio = new OutputStreamAudio(); - _outputStreamWriter = outputStreamAudio; + _outputStreamAudio = new OutputStreamAudio(); + _outputStreamWriter = _outputStreamAudio; - outputStreamAudio->setProfile( profile ); - _outputFile->addAudioStream( outputStreamAudio->getAudioDesc() ); - _frameBuffer = new AudioFrame( outputStreamAudio->getAudioDesc().getFrameDesc() ); + _outputStreamWriter->setProfile( profile ); + _outputFile->addAudioStream( _outputStreamAudio->getAudioDesc() ); + _audioFrameBuffer = new AudioFrame( _outputStreamAudio->getAudioDesc().getFrameDesc() ); + _frameBuffer = _audioFrameBuffer; break; } diff --git a/src/AvTranscoder/StreamTranscoder.hpp b/src/AvTranscoder/StreamTranscoder.hpp index f9545656..0bed2856 100644 --- a/src/AvTranscoder/StreamTranscoder.hpp +++ b/src/AvTranscoder/StreamTranscoder.hpp @@ -31,10 +31,17 @@ class StreamTranscoder private: AvInputStream* _stream; - Frame* _frameBuffer; + Frame* _frameBuffer; + Image* _videoFrameBuffer; + AudioFrame* _audioFrameBuffer; InputStreamReader* _inputStreamReader; + InputStreamVideo* _inputStreamVideo; + InputStreamAudio* _inputStreamAudio; + OutputStreamWriter* _outputStreamWriter; + OutputStreamVideo* _outputStreamVideo; + OutputStreamAudio* _outputStreamAudio; OutputFile* _outputFile;