Skip to content

Commit 3088120

Browse files
author
Clement Champetier
committed
Transcoder: add private method manageInfinityStreamFromProcessMethod
Can call setProcessMethod before adding the streams.
1 parent 50222f3 commit 3088120

File tree

2 files changed

+38
-29
lines changed

2 files changed

+38
-29
lines changed

src/AvTranscoder/transcoder/Transcoder.cpp

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,8 @@ void Transcoder::process( IProgress& progress )
277277
if( _streamTranscoders.size() == 0 )
278278
throw std::runtime_error( "missing input streams in transcoder" );
279279

280+
manageInfinityStreamFromProcessMethod();
281+
280282
if( _verbose )
281283
std::cout << "begin transcoding" << std::endl;
282284
init();
@@ -313,34 +315,6 @@ void Transcoder::setProcessMethod( const EProcessMethod eProcessMethod, const si
313315
{
314316
_eProcessMethod = eProcessMethod;
315317
_mainStreamIndex = indexBasedStream;
316-
317-
for( size_t i = 0; i < _streamTranscoders.size(); ++i )
318-
{
319-
switch( _eProcessMethod )
320-
{
321-
case eProcessMethodShortest :
322-
if( _streamTranscoders.at( i )->getDuration() == getMinTotalDuration() )
323-
_streamTranscoders.at( i )->setInfinityStream( false );
324-
else
325-
_streamTranscoders.at( i )->setInfinityStream( true );
326-
break;
327-
case eProcessMethodLongest :
328-
if( _streamTranscoders.at( i )->getDuration() == getMaxTotalDuration() )
329-
_streamTranscoders.at( i )->setInfinityStream( false );
330-
else
331-
_streamTranscoders.at( i )->setInfinityStream( true );
332-
break;
333-
case eProcessMethodBasedOnStream :
334-
if( i != _mainStreamIndex )
335-
_streamTranscoders.at( i )->setInfinityStream( true );
336-
else
337-
_streamTranscoders.at( i )->setInfinityStream( false );
338-
break;
339-
case eProcessMethodInfinity :
340-
_streamTranscoders.at( i )->setInfinityStream( true );
341-
break;
342-
}
343-
}
344318
}
345319

346320
void Transcoder::setVerbose( bool verbose )
@@ -523,4 +497,35 @@ double Transcoder::getTotalDurationFromProcessMethod() const
523497
}
524498
}
525499

500+
void Transcoder::manageInfinityStreamFromProcessMethod()
501+
{
502+
for( size_t i = 0; i < _streamTranscoders.size(); ++i )
503+
{
504+
switch( _eProcessMethod )
505+
{
506+
case eProcessMethodShortest :
507+
if( _streamTranscoders.at( i )->getDuration() == getMinTotalDuration() )
508+
_streamTranscoders.at( i )->setInfinityStream( false );
509+
else
510+
_streamTranscoders.at( i )->setInfinityStream( true );
511+
break;
512+
case eProcessMethodLongest :
513+
if( _streamTranscoders.at( i )->getDuration() == getMaxTotalDuration() )
514+
_streamTranscoders.at( i )->setInfinityStream( false );
515+
else
516+
_streamTranscoders.at( i )->setInfinityStream( true );
517+
break;
518+
case eProcessMethodBasedOnStream :
519+
if( i != _mainStreamIndex )
520+
_streamTranscoders.at( i )->setInfinityStream( true );
521+
else
522+
_streamTranscoders.at( i )->setInfinityStream( false );
523+
break;
524+
case eProcessMethodInfinity :
525+
_streamTranscoders.at( i )->setInfinityStream( true );
526+
break;
527+
}
528+
}
529+
}
530+
526531
}

src/AvTranscoder/transcoder/Transcoder.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ class AvExport Transcoder
125125

126126
/**
127127
* @brief Set the transcodage politic.
128-
* @note Call it after adding the streams.
129128
* @note By default eProcessMethodLongest.
130129
* @param indexBasedStream: in case of process method eProcessMethodBasedOnStream, stop transcode at the end of the indicated stream.
131130
*/
@@ -170,6 +169,11 @@ class AvExport Transcoder
170169
*/
171170
double getTotalDurationFromProcessMethod() const;
172171

172+
/**
173+
* @brief Set for each StreamTranscoder if it is an infinity stream (switch to generator at the end of the stream).
174+
*/
175+
void manageInfinityStreamFromProcessMethod();
176+
173177
private:
174178
OutputFile& _outputFile; ///< The output media file after process.
175179
std::vector< InputFile* > _inputFiles; ///< The list of input files which contain added streams.

0 commit comments

Comments
 (0)