Skip to content

Commit 926d5c1

Browse files
author
Clement Champetier
committed
Transcoder / StreamTranscoder: refactoring
* Transcoder: * Suppress _inputStreams, _generatorAudio, and _generatorVideo. * These objects concern the corresponding StreamTranscoder. * StreamTranscoder: * Create dummy: constructor needs an ICodec instead of an IInputEssence (symmetry with what we ask to the user for adding a dummy stream with "add" functions of Transcoder). * Instanciate a Generator (Video or Audio) in this constructor. * Add comments in constructor. * Destructor: all data manipulate by the StreamTranscoder are now instanciate by the object, so can delete all of them without thinking of a different owner.
1 parent bddc5f8 commit 926d5c1

File tree

4 files changed

+47
-67
lines changed

4 files changed

+47
-67
lines changed

src/AvTranscoder/transcoder/StreamTranscoder.cpp

Lines changed: 41 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,15 @@ StreamTranscoder::StreamTranscoder(
162162
}
163163

164164
StreamTranscoder::StreamTranscoder(
165-
IInputEssence& inputEssence,
165+
const ICodec& inputCodec,
166166
OutputFile& outputFile,
167167
const Profile::ProfileDesc& profile
168168
)
169169
: _inputStream( NULL )
170170
, _outputStream( NULL )
171171
, _sourceBuffer( NULL )
172172
, _frameBuffer( NULL )
173-
, _inputEssence( &inputEssence )
173+
, _inputEssence( NULL )
174174
, _generatorEssence( NULL )
175175
, _currentEssence( NULL )
176176
, _outputEssence( NULL )
@@ -189,66 +189,70 @@ StreamTranscoder::StreamTranscoder(
189189

190190
if( profile.find( Profile::avProfileType )->second == Profile::avProfileTypeVideo )
191191
{
192-
AvOutputVideo* outputVideo = new AvOutputVideo();
193-
194-
_outputEssence = outputVideo;
195-
196-
VideoFrameDesc inputFrameDesc = static_cast<GeneratorVideo*>( _inputEssence )->getVideoCodec().getVideoFrameDesc();
192+
// Create input essence based on a given input VideoCodec
193+
GeneratorVideo* generatorVideo = new GeneratorVideo();
194+
generatorVideo->setVideoCodec( static_cast<VideoCodec>( inputCodec ) );
195+
_inputEssence = generatorVideo;
197196

197+
// Create inputFrame, and outputFrame which is based on a given profile
198+
VideoFrameDesc inputFrameDesc = static_cast<VideoCodec>( inputCodec ).getVideoFrameDesc();
198199
VideoFrameDesc outputFrameDesc = inputFrameDesc;
199200
outputFrameDesc.setParameters( profile );
201+
_sourceBuffer = new VideoFrame( inputFrameDesc );
202+
_frameBuffer = new VideoFrame( outputFrameDesc );
203+
204+
// Create output essence
205+
AvOutputVideo* outputVideo = new AvOutputVideo();
200206
outputVideo->setProfile( profile, outputFrameDesc );
207+
_outputEssence = outputVideo;
201208

209+
// Create a video stream in the output file
202210
_outputStream = &outputFile.addVideoStream( outputVideo->getVideoCodec() );
203-
_sourceBuffer = new VideoFrame( inputFrameDesc );
204-
_frameBuffer = new VideoFrame( outputFrameDesc );
205211

206212
_transform = new VideoTransform();
207213

208-
_currentEssence = _inputEssence;
209-
210-
return;
214+
_currentEssence = _inputEssence;
211215
}
212-
213-
if( profile.find( Profile::avProfileType )->second == Profile::avProfileTypeAudio )
216+
else if( profile.find( Profile::avProfileType )->second == Profile::avProfileTypeAudio )
214217
{
215-
AvOutputAudio* outputAudio = new AvOutputAudio();
216-
217-
_outputEssence = outputAudio;
218-
219-
AudioFrameDesc inputFrameDesc = static_cast<GeneratorAudio*>( _inputEssence )->getAudioCodec().getFrameDesc();
218+
// Create input essence based on a given input AudioCodec
219+
GeneratorAudio* generatorAudio = new GeneratorAudio();
220+
generatorAudio->setAudioCodec( static_cast<const AudioCodec&>( inputCodec ) );
221+
_inputEssence = generatorAudio;
220222

223+
// Create inputFrame, and outputFrame which is based on a given profile
224+
AudioFrameDesc inputFrameDesc = static_cast<const AudioCodec&>( inputCodec ).getFrameDesc();
221225
AudioFrameDesc outputFrameDesc = inputFrameDesc;
222226
outputFrameDesc.setParameters( profile );
227+
_sourceBuffer = new AudioFrame( inputFrameDesc );
228+
_frameBuffer = new AudioFrame( outputFrameDesc );
229+
230+
// Create output essence
231+
AvOutputAudio* outputAudio = new AvOutputAudio();
223232
outputAudio->setProfile( profile, outputFrameDesc );
233+
_outputEssence = outputAudio;
224234

235+
// Create an audio stream in the output file
225236
_outputStream = &outputFile.addAudioStream( outputAudio->getAudioCodec() );
226-
_sourceBuffer = new AudioFrame( inputFrameDesc );
227-
_frameBuffer = new AudioFrame( outputFrameDesc );
228237

229238
_transform = new AudioTransform();
230-
239+
231240
_currentEssence = _inputEssence;
232-
return;
233241
}
234-
235-
throw std::runtime_error( "unupported stream type" );
242+
else
243+
{
244+
throw std::runtime_error( "unupported stream type" );
245+
}
236246
}
237247

238248
StreamTranscoder::~StreamTranscoder()
239249
{
240-
if( _frameBuffer )
241-
delete _frameBuffer;
242-
if( _sourceBuffer )
243-
delete _sourceBuffer;
244-
if( _inputEssence && _inputStream )
245-
delete _inputEssence;
246-
if( _generatorEssence )
247-
delete _generatorEssence;
248-
if( _outputEssence )
249-
delete _outputEssence;
250-
if( _transform )
251-
delete _transform;
250+
delete _frameBuffer;
251+
delete _sourceBuffer;
252+
delete _generatorEssence;
253+
delete _outputEssence;
254+
delete _transform;
255+
delete _inputEssence;
252256
}
253257

254258
void StreamTranscoder::init()

src/AvTranscoder/transcoder/StreamTranscoder.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class AvExport StreamTranscoder
3636
* @brief encode from a generated stream
3737
* @note offset feature has no sense here
3838
**/
39-
StreamTranscoder( IInputEssence& inputEssence, OutputFile& outputFile, const Profile::ProfileDesc& profile );
39+
StreamTranscoder( const ICodec& inputCodec, OutputFile& outputFile, const Profile::ProfileDesc& profile );
4040

4141
~StreamTranscoder();
4242

src/AvTranscoder/transcoder/Transcoder.cpp

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ Transcoder::Transcoder( OutputFile& outputFile )
1111
: _outputFile( outputFile )
1212
, _inputFiles()
1313
, _streamTranscoders()
14-
, _inputStreams()
15-
, _generatorAudio()
16-
, _generatorVideo()
1714
, _profile( true )
1815
, _outputFps( 25 )
1916
, _eProcessMethod ( eProcessMethodLongest )
@@ -33,14 +30,6 @@ Transcoder::~Transcoder()
3330
{
3431
delete (*it);
3532
}
36-
for( std::vector< GeneratorAudio* >::iterator it = _generatorAudio.begin(); it != _generatorAudio.end(); ++it )
37-
{
38-
delete (*it);
39-
}
40-
for( std::vector< GeneratorVideo* >::iterator it = _generatorVideo.begin(); it != _generatorVideo.end(); ++it )
41-
{
42-
delete (*it);
43-
}
4433
}
4534

4635
void Transcoder::add( const std::string& filename, const size_t streamIndex, const std::string& profileName, const size_t offset )
@@ -245,9 +234,7 @@ void Transcoder::process( IProgress& progress )
245234
{
246235
size_t frame = 0;
247236

248-
if( ! _inputStreams.size() &&
249-
! _generatorVideo.size() &&
250-
! _generatorAudio.size() )
237+
if( ! _streamTranscoders.size() )
251238
{
252239
throw std::runtime_error( "missing input streams in transcoder" );
253240
}
@@ -346,7 +333,6 @@ void Transcoder::addRewrapStream( const std::string& filename, const size_t stre
346333
{
347334
InputFile* referenceFile = addInputFile( filename, streamIndex );
348335
_streamTranscoders.push_back( new StreamTranscoder( referenceFile->getStream( streamIndex ), _outputFile ) );
349-
_inputStreams.push_back( &referenceFile->getStream( streamIndex ) );
350336
}
351337

352338
void Transcoder::addTranscodeStream( const std::string& filename, const size_t streamIndex, Profile::ProfileDesc& profile, const size_t offset )
@@ -359,7 +345,6 @@ void Transcoder::addTranscodeStream( const std::string& filename, const size_t s
359345
case AVMEDIA_TYPE_AUDIO:
360346
{
361347
_streamTranscoders.push_back( new StreamTranscoder( referenceFile->getStream( streamIndex ), _outputFile, profile, -1 , offset ) );
362-
_inputStreams.push_back( &referenceFile->getStream( streamIndex ) );
363348
break;
364349
}
365350
case AVMEDIA_TYPE_DATA:
@@ -382,7 +367,6 @@ void Transcoder::addTranscodeStream( const std::string& filename, const size_t s
382367
case AVMEDIA_TYPE_AUDIO:
383368
{
384369
_streamTranscoders.push_back( new StreamTranscoder( referenceFile->getStream( streamIndex ), _outputFile, profile, subStreamIndex, offset ) );
385-
_inputStreams.push_back( &referenceFile->getStream( streamIndex ) );
386370
break;
387371
}
388372
case AVMEDIA_TYPE_DATA:
@@ -404,20 +388,16 @@ void Transcoder::addDummyStream( const Profile::ProfileDesc& profile, const ICod
404388
{
405389
if( _verbose )
406390
std::cout << "add a generated audio stream" << std::endl;
407-
_generatorAudio.push_back( new GeneratorAudio() );
408-
_generatorAudio.back()->setAudioCodec( static_cast<AudioCodec>( codec ) );
409-
410-
_streamTranscoders.push_back( new StreamTranscoder( *_generatorAudio.back(), _outputFile, profile ) );
391+
392+
_streamTranscoders.push_back( new StreamTranscoder( codec, _outputFile, profile ) );
411393
}
412394

413395
if( profile.find( Profile::avProfileType )->second == Profile::avProfileTypeVideo )
414396
{
415397
if( _verbose )
416398
std::cout << "add generated video stream" << std::endl;
417-
_generatorVideo.push_back( new GeneratorVideo() );
418-
_generatorVideo.back()->setVideoCodec( static_cast<VideoCodec>( codec ) );
419-
420-
_streamTranscoders.push_back( new StreamTranscoder( *_generatorVideo.back(), _outputFile, profile ) );
399+
400+
_streamTranscoders.push_back( new StreamTranscoder( codec, _outputFile, profile ) );
421401
}
422402
}
423403

src/AvTranscoder/transcoder/Transcoder.hpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,6 @@ class AvExport Transcoder
173173
std::vector< InputFile* > _inputFiles; ///< The list of input files which contain added streams.
174174

175175
std::vector< StreamTranscoder* > _streamTranscoders; ///< The streams of the output media file after process.
176-
177-
std::vector< IInputStream* > _inputStreams; ///< Objects to manage streams based on existing media files.
178-
std::vector< GeneratorAudio* > _generatorAudio; ///< Objects to manage silent audio streams.
179-
std::vector< GeneratorVideo* > _generatorVideo; ///< Objects to manage silent video streams (black images).
180176

181177
Profile _profile; ///< Objet to get existing profiles, and add new ones for the Transcoder.
182178

0 commit comments

Comments
 (0)