@@ -17,6 +17,7 @@ Transcoder::Transcoder( OutputFile& outputFile )
17
17
, _outputFps( 25 )
18
18
, _finalisedStreams( 0 )
19
19
, _eProcessMethod ( eProcessMethodLongest )
20
+ , _indexBasedStream( 0 )
20
21
, _verbose( false )
21
22
{
22
23
_outputFile.setup ();
@@ -275,6 +276,9 @@ void Transcoder::process( IProgress& progress )
275
276
case eProcessMethodLongest :
276
277
totalDuration = getMaxTotalDuration ();
277
278
break ;
279
+ case eProcessMethodBasedOnStream :
280
+ totalDuration = getStreamDuration ( _indexBasedStream );
281
+ break ;
278
282
case eProcessMethodInfinity :
279
283
totalDuration = std::numeric_limits<double >::max ();
280
284
break ;
@@ -304,9 +308,10 @@ void Transcoder::process( IProgress& progress )
304
308
_outputFile.endWrap ();
305
309
}
306
310
307
- void Transcoder::setProcessMethod ( const EProcessMethod eProcessMethod )
311
+ void Transcoder::setProcessMethod ( const EProcessMethod eProcessMethod, const size_t indexBasedStream )
308
312
{
309
313
_eProcessMethod = eProcessMethod;
314
+ _indexBasedStream = indexBasedStream;
310
315
311
316
for ( size_t i = 0 ; i < _streamTranscoders.size (); ++i )
312
317
{
@@ -324,6 +329,12 @@ void Transcoder::setProcessMethod( const EProcessMethod eProcessMethod )
324
329
else
325
330
_streamTranscoders.at ( i )->setInfinityStream ( true );
326
331
break ;
332
+ case eProcessMethodBasedOnStream :
333
+ if ( i != _indexBasedStream )
334
+ _streamTranscoders.at ( i )->setInfinityStream ( true );
335
+ else
336
+ _streamTranscoders.at ( i )->setInfinityStream ( false );
337
+ break ;
327
338
case eProcessMethodInfinity :
328
339
_streamTranscoders.at ( i )->setInfinityStream ( true );
329
340
break ;
@@ -447,13 +458,18 @@ InputFile* Transcoder::addInputFile( const std::string& filename, const size_t s
447
458
return referenceFile;
448
459
}
449
460
461
+ double Transcoder::getStreamDuration ( size_t indexStream ) const
462
+ {
463
+ return _streamTranscoders.at ( indexStream )->getDuration ();
464
+ }
465
+
450
466
double Transcoder::getMinTotalDuration () const
451
467
{
452
468
double minTotalDuration = std::numeric_limits<double >::max ();
453
469
454
470
for ( size_t i = 0 ; i < _streamTranscoders.size (); ++i )
455
471
{
456
- minTotalDuration = std::min ( _streamTranscoders. at ( i )-> getDuration ( ), minTotalDuration );
472
+ minTotalDuration = std::min ( getStreamDuration ( i ), minTotalDuration );
457
473
}
458
474
return minTotalDuration;
459
475
}
@@ -464,7 +480,7 @@ double Transcoder::getMaxTotalDuration() const
464
480
465
481
for ( size_t i = 0 ; i < _streamTranscoders.size (); ++i )
466
482
{
467
- maxTotalDuration = std::max ( _streamTranscoders. at ( i )-> getDuration ( ), maxTotalDuration );
483
+ maxTotalDuration = std::max ( getStreamDuration ( i ), maxTotalDuration );
468
484
}
469
485
return maxTotalDuration;
470
486
}
0 commit comments