From 3d5937f74e662cb0a94dfe6392d046e6c203656c Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Fri, 5 Dec 2014 09:58:25 +0100 Subject: [PATCH 1/3] Transcoder/StreamTranscoder: rename init to preProcessCodecLatency * init does not mean anything. * pyTest testTranscoderDummy: remove uncessary call of preprocessCodecLatency. --- src/AvTranscoder/transcoder/StreamTranscoder.cpp | 2 +- src/AvTranscoder/transcoder/StreamTranscoder.hpp | 4 ++-- src/AvTranscoder/transcoder/Transcoder.cpp | 6 +++--- src/AvTranscoder/transcoder/Transcoder.hpp | 4 ++-- test/pyTest/testSetFrame.py | 4 ++-- test/pyTest/testTranscoderDummy.py | 4 ---- 6 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/AvTranscoder/transcoder/StreamTranscoder.cpp b/src/AvTranscoder/transcoder/StreamTranscoder.cpp index 41fa3e00..034d8138 100644 --- a/src/AvTranscoder/transcoder/StreamTranscoder.cpp +++ b/src/AvTranscoder/transcoder/StreamTranscoder.cpp @@ -257,7 +257,7 @@ StreamTranscoder::~StreamTranscoder() delete _inputEssence; } -void StreamTranscoder::init() +void StreamTranscoder::preProcessCodecLatency() { // rewrap case: no need to take care of the latency of codec if( ! _inputEssence ) diff --git a/src/AvTranscoder/transcoder/StreamTranscoder.hpp b/src/AvTranscoder/transcoder/StreamTranscoder.hpp index e5d40ff8..2567f37f 100644 --- a/src/AvTranscoder/transcoder/StreamTranscoder.hpp +++ b/src/AvTranscoder/transcoder/StreamTranscoder.hpp @@ -41,11 +41,11 @@ class AvExport StreamTranscoder ~StreamTranscoder(); /** - * @brief Init before encoding to pre-process frames necessary to delete the latency. + * @brief Pre-process codec latency. * @note This can be called several times with no side effects. * @note Can take a little bit of time. */ - void init(); + void preProcessCodecLatency(); /** * @brief process a single frame for the current stream diff --git a/src/AvTranscoder/transcoder/Transcoder.cpp b/src/AvTranscoder/transcoder/Transcoder.cpp index 2791bbd2..0bbb5bec 100644 --- a/src/AvTranscoder/transcoder/Transcoder.cpp +++ b/src/AvTranscoder/transcoder/Transcoder.cpp @@ -243,13 +243,13 @@ void Transcoder::add( StreamTranscoder& stream ) _streamTranscoders.push_back( &stream ); } -void Transcoder::init() +void Transcoder::preProcessCodecLatency() { for( size_t streamIndex = 0; streamIndex < _streamTranscoders.size(); ++streamIndex ) { if( _verbose ) std::cout << "init stream " << streamIndex << std::endl; - _streamTranscoders.at( streamIndex )->init(); + _streamTranscoders.at( streamIndex )->preProcessCodecLatency(); } } @@ -285,7 +285,7 @@ void Transcoder::process( IProgress& progress ) if( _verbose ) std::cout << "begin transcoding" << std::endl; - init(); + preProcessCodecLatency(); _outputFile.beginWrap(); diff --git a/src/AvTranscoder/transcoder/Transcoder.hpp b/src/AvTranscoder/transcoder/Transcoder.hpp index ea50ddce..acc65f33 100644 --- a/src/AvTranscoder/transcoder/Transcoder.hpp +++ b/src/AvTranscoder/transcoder/Transcoder.hpp @@ -100,11 +100,11 @@ class AvExport Transcoder void add( StreamTranscoder& streamTranscoder); /** - * @brief Initialize all streams added, by ensure process necessary frames in case of latency. + * @brief Initialize all added streams, processing codec latency. * @note This can be called several times with no side effects. * @note Can take a little bit of time. */ - void init(); + void preProcessCodecLatency(); /** * @brief Process the next frame of all streams. diff --git a/test/pyTest/testSetFrame.py b/test/pyTest/testSetFrame.py index 241cdf22..a488fb58 100644 --- a/test/pyTest/testSetFrame.py +++ b/test/pyTest/testSetFrame.py @@ -35,7 +35,7 @@ def testSetVideoFrame(): videoEssence = transcoder.getStreamTranscoder( 0 ).getCurrentEssence() # start process - transcoder.init() + transcoder.preProcessCodecLatency() ouputFile.beginWrap() # process 255 frames @@ -88,7 +88,7 @@ def testSetAudioFrame(): audioEssence = transcoder.getStreamTranscoder( 0 ).getCurrentEssence() # start process - transcoder.init() + transcoder.preProcessCodecLatency() ouputFile.beginWrap() # process 255 frames diff --git a/test/pyTest/testTranscoderDummy.py b/test/pyTest/testTranscoderDummy.py index cdc145f4..6964c824 100644 --- a/test/pyTest/testTranscoderDummy.py +++ b/test/pyTest/testTranscoderDummy.py @@ -90,8 +90,6 @@ def testTranscodeDummyAudio(): audioCodec.setAudioParameters( audioDesc ) transcoder.add( "", 0, "wave24b48kmono", audioCodec ) - transcoder.init() - ouputFile.beginWrap() transcoder.processFrame() ouputFile.endWrap() @@ -116,8 +114,6 @@ def testTranscodeDummyVideo(): videoCodec.setImageParameters( imageDesc ) transcoder.add( "", 0, "dnxhd120", videoCodec ) - transcoder.init() - ouputFile.beginWrap() transcoder.processFrame() ouputFile.endWrap() From 7db51363775bf2f6088da5a120bc9a1d55edaaff Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Fri, 5 Dec 2014 10:18:25 +0100 Subject: [PATCH 2/3] Transcoder: fix preProcessCodecLatency Need to call it after beginWrap. --- src/AvTranscoder/transcoder/Transcoder.cpp | 5 +++-- test/pyTest/testSetFrame.py | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/AvTranscoder/transcoder/Transcoder.cpp b/src/AvTranscoder/transcoder/Transcoder.cpp index 0bbb5bec..0a20f12d 100644 --- a/src/AvTranscoder/transcoder/Transcoder.cpp +++ b/src/AvTranscoder/transcoder/Transcoder.cpp @@ -285,10 +285,11 @@ void Transcoder::process( IProgress& progress ) if( _verbose ) std::cout << "begin transcoding" << std::endl; - preProcessCodecLatency(); - + _outputFile.beginWrap(); + preProcessCodecLatency(); + double totalDuration = getTotalDurationFromProcessMethod(); size_t frame = 0; diff --git a/test/pyTest/testSetFrame.py b/test/pyTest/testSetFrame.py index a488fb58..744a85c7 100644 --- a/test/pyTest/testSetFrame.py +++ b/test/pyTest/testSetFrame.py @@ -35,8 +35,8 @@ def testSetVideoFrame(): videoEssence = transcoder.getStreamTranscoder( 0 ).getCurrentEssence() # start process - transcoder.preProcessCodecLatency() ouputFile.beginWrap() + transcoder.preProcessCodecLatency() # process 255 frames for i in range(0,255): @@ -88,8 +88,8 @@ def testSetAudioFrame(): audioEssence = transcoder.getStreamTranscoder( 0 ).getCurrentEssence() # start process - transcoder.preProcessCodecLatency() ouputFile.beginWrap() + transcoder.preProcessCodecLatency() # process 255 frames for i in range(0,255): From e9cac6bcebde561555b214140094ea15b6ddc48e Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Fri, 5 Dec 2014 10:35:55 +0100 Subject: [PATCH 3/3] OutputFile: check if at least one stream exists when getProgressDuration --- src/AvTranscoder/file/OutputFile.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/AvTranscoder/file/OutputFile.cpp b/src/AvTranscoder/file/OutputFile.cpp index b3efd712..d143b6ff 100644 --- a/src/AvTranscoder/file/OutputFile.cpp +++ b/src/AvTranscoder/file/OutputFile.cpp @@ -293,11 +293,10 @@ void OutputFile::setProfile( const ProfileLoader::Profile& profile ) double OutputFile::getProgressDuration() { - AVStream* firstOutputStream = _formatContext->streams[0]; - if( firstOutputStream == NULL ) + if( _formatContext->nb_streams == 0 ) throw std::runtime_error( "at least one stream must be set to get the progress duration" ); - double duration = av_q2d( firstOutputStream->time_base ) * firstOutputStream->cur_dts; - return duration; + AVStream* firstOutputStream = _formatContext->streams[0]; + return av_q2d( firstOutputStream->time_base ) * firstOutputStream->cur_dts; } }