diff --git a/app/cpp/avMeta/avMeta.cpp b/app/cpp/avMeta/avMeta.cpp index 58492337..39149928 100644 --- a/app/cpp/avMeta/avMeta.cpp +++ b/app/cpp/avMeta/avMeta.cpp @@ -1,5 +1,6 @@ #include #include +#include #include @@ -11,7 +12,7 @@ int main( int argc, char** argv ) return( -1 ); } - avtranscoder::ProgressListener p; + avtranscoder::NoDisplayProgress p; avtranscoder::InputFile input( argv[1] ); input.analyse( p, avtranscoder::InputFile::eAnalyseLevelFull ); diff --git a/app/cpp/avTranscoder/avTranscoder.cpp b/app/cpp/avTranscoder/avTranscoder.cpp index 66d7ec2c..dc178c10 100644 --- a/app/cpp/avTranscoder/avTranscoder.cpp +++ b/app/cpp/avTranscoder/avTranscoder.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -17,7 +18,7 @@ void transcodeVideo( const char* inputfilename, const char* outputFilename ) // av_log_set_level( AV_LOG_DEBUG ); Profile profile( true ); - ProgressListener p; + ConsoleProgress p; InputFile input( inputfilename ); input.analyse( p ); diff --git a/app/cpp/avplay/AvReader.hpp b/app/cpp/avplay/AvReader.hpp index 82f0fb3b..448fd410 100644 --- a/app/cpp/avplay/AvReader.hpp +++ b/app/cpp/avplay/AvReader.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include "Reader.hpp" @@ -18,7 +19,7 @@ class AvReader : public Reader , _sourceImage( NULL ) , _imageToDisplay( NULL ) { - avtranscoder::ProgressListener p; + avtranscoder::ConsoleProgress p; _inputFile.analyse( p ); _videoStream = _inputFile.getProperties().videoStreams.at(0).streamId; diff --git a/app/cpp/genericProcessor/genericProcessor.cpp b/app/cpp/genericProcessor/genericProcessor.cpp index 734d0751..8746bd72 100644 --- a/app/cpp/genericProcessor/genericProcessor.cpp +++ b/app/cpp/genericProcessor/genericProcessor.cpp @@ -1,4 +1,4 @@ - +#include #include #include @@ -122,7 +122,7 @@ int main( int argc, char** argv ) if( verbose ) std::cout << "start Transcode" << std::endl; - avtranscoder::ProgressListener progress; + avtranscoder::ConsoleProgress progress; // video re-wrapping or transcoding if necessary transcoder.process( progress ); diff --git a/src/AvTranscoder/File/InputFile.cpp b/src/AvTranscoder/File/InputFile.cpp index c7770087..7e41deb5 100644 --- a/src/AvTranscoder/File/InputFile.cpp +++ b/src/AvTranscoder/File/InputFile.cpp @@ -64,7 +64,7 @@ InputFile::~InputFile() } } -InputFile& InputFile::analyse( ProgressListener& progress, const EAnalyseLevel level ) +InputFile& InputFile::analyse( IProgress& progress, const EAnalyseLevel level ) { assert( _formatContext != NULL ); @@ -134,7 +134,7 @@ InputFile& InputFile::analyse( ProgressListener& progress, const EAnalyseLevel l return *this; } -Properties InputFile::analyseFile( const std::string& filename, ProgressListener& progress, const EAnalyseLevel level ) +Properties InputFile::analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level ) { InputFile file( filename ); file.analyse( progress, level ); diff --git a/src/AvTranscoder/File/InputFile.hpp b/src/AvTranscoder/File/InputFile.hpp index d7e56d81..be6e4dd4 100644 --- a/src/AvTranscoder/File/InputFile.hpp +++ b/src/AvTranscoder/File/InputFile.hpp @@ -10,7 +10,7 @@ #include #include -#include +#include #include @@ -50,7 +50,7 @@ class AvExport InputFile * call this function before getProperties(). * @param progress callback to get analysis progression **/ - InputFile& analyse( ProgressListener& progress, const EAnalyseLevel level = eAnalyseLevelFull ); + InputFile& analyse( IProgress& progress, const EAnalyseLevel level = eAnalyseLevelFull ); /** * @brief Return media properties on the current InputFile. @@ -67,7 +67,7 @@ class AvExport InputFile * @param progress callback to get analysis progression * @return structure of media metadatas **/ - static Properties analyseFile( const std::string& filename, ProgressListener& progress, const EAnalyseLevel level = eAnalyseLevelFull ); + static Properties analyseFile( const std::string& filename, IProgress& progress, const EAnalyseLevel level = eAnalyseLevelFull ); /** * @brief Get stream type: video, audio, subtitle, etc. diff --git a/src/AvTranscoder/Metadatas/VideoStreamProperties.hpp b/src/AvTranscoder/Metadatas/VideoStreamProperties.hpp index 4d3b3683..a4c25d00 100644 --- a/src/AvTranscoder/Metadatas/VideoStreamProperties.hpp +++ b/src/AvTranscoder/Metadatas/VideoStreamProperties.hpp @@ -33,7 +33,7 @@ void getGopProperties( AVCodecContext* codecContext, AVCodec* codec, const int videoStreamIndex, - ProgressListener& progress + IProgress& progress ) { AVPacket pkt; @@ -108,7 +108,7 @@ std::string makeTimecodeMpegToString( uint32_t tc25bit ) VideoProperties videoStreamInfo( AVFormatContext* formatContext, const size_t videoStreamIndex, - ProgressListener& progress, + IProgress& progress, const InputFile::EAnalyseLevel level ) { diff --git a/src/AvTranscoder/ProgressListener.hpp b/src/AvTranscoder/ProgressListener.hpp deleted file mode 100644 index bb01eab3..00000000 --- a/src/AvTranscoder/ProgressListener.hpp +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef _AV_TRANSCODER_PROGRESS_LISTENER_HPP_ -#define _AV_TRANSCODER_PROGRESS_LISTENER_HPP_ - -#include -#include - -namespace avtranscoder -{ - -enum EJobStatus -{ - eJobStatusContinue = 0, - eJobStatusCancel -}; - -class ProgressListener -{ -public: - ProgressListener() - {} - - virtual ~ProgressListener() - {} - - virtual EJobStatus progress( const double processedDuration, const double programDuration ) - { - std::string progress( 80, '-' ); - std::string done( 80.0 * processedDuration / programDuration, '#' ); - progress.replace( 0, done.size(), done ); - - std::cout << std::setprecision(2) << std::fixed << "\r[" << progress << "] " << processedDuration << "/" << programDuration << std::flush; - - // if( processedFrames >= 100 ) - // return avtranscoder::eJobStatusCancel; - - return eJobStatusContinue; - } -}; - -} - -#endif \ No newline at end of file diff --git a/src/AvTranscoder/ProgressListener.i b/src/AvTranscoder/ProgressListener.i deleted file mode 100644 index 9b3ebafe..00000000 --- a/src/AvTranscoder/ProgressListener.i +++ /dev/null @@ -1,11 +0,0 @@ -%module(directors="1") AvTranscoder - - -%{ - #include -%} - -/* turn on director wrapping ProgressListener */ -%feature("director") ProgressListener; - -%include \ No newline at end of file diff --git a/src/AvTranscoder/Transcoder/Transcoder.cpp b/src/AvTranscoder/Transcoder/Transcoder.cpp index d6ca5b11..2ada4411 100644 --- a/src/AvTranscoder/Transcoder/Transcoder.cpp +++ b/src/AvTranscoder/Transcoder/Transcoder.cpp @@ -1,5 +1,7 @@ #include "Transcoder.hpp" + #include +#include namespace avtranscoder { @@ -238,7 +240,7 @@ bool Transcoder::processFrame() return true; } -void Transcoder::process( ProgressListener& progress ) +void Transcoder::process( IProgress& progress ) { size_t frame = 0; diff --git a/src/AvTranscoder/Transcoder/Transcoder.hpp b/src/AvTranscoder/Transcoder/Transcoder.hpp index f9e67199..64ab56bb 100644 --- a/src/AvTranscoder/Transcoder/Transcoder.hpp +++ b/src/AvTranscoder/Transcoder/Transcoder.hpp @@ -11,7 +11,7 @@ #include #include -#include +#include #include @@ -111,7 +111,7 @@ class Transcoder * @brief Process all the streams, and ended the process depending on the transcode politic. * @param progress */ - void process( ProgressListener& progress ); + void process( IProgress& progress ); /** * @brief Set the transcodage politic. diff --git a/src/AvTranscoder/avTranscoder.i b/src/AvTranscoder/avTranscoder.i index 2da7e36e..fa0c4a35 100644 --- a/src/AvTranscoder/avTranscoder.i +++ b/src/AvTranscoder/avTranscoder.i @@ -50,7 +50,7 @@ #include %} -%include "AvTranscoder/ProgressListener.i" +%include "AvTranscoder/progress/progress.i" namespace std { %template(IntPair) pair< size_t, size_t >; diff --git a/src/AvTranscoder/progress/ConsoleProgress.cpp b/src/AvTranscoder/progress/ConsoleProgress.cpp new file mode 100644 index 00000000..0af46498 --- /dev/null +++ b/src/AvTranscoder/progress/ConsoleProgress.cpp @@ -0,0 +1,27 @@ +#include "ConsoleProgress.hpp" + +#include +#include + +namespace avtranscoder +{ + +ConsoleProgress::~ConsoleProgress() +{ +} + +EJobStatus ConsoleProgress::progress( const double processedDuration, const double programDuration ) +{ + std::string progress( 80, '-' ); + std::string done( 80.0 * processedDuration / programDuration, '#' ); + progress.replace( 0, done.size(), done ); + + std::cout << std::setprecision(2) << std::fixed << "\r[" << progress << "] " << processedDuration << "/" << programDuration << std::flush; + + // if( processedFrames >= 100 ) + // return avtranscoder::eJobStatusCancel; + + return eJobStatusContinue; +} + +} diff --git a/src/AvTranscoder/progress/ConsoleProgress.hpp b/src/AvTranscoder/progress/ConsoleProgress.hpp new file mode 100644 index 00000000..6ce2e2ee --- /dev/null +++ b/src/AvTranscoder/progress/ConsoleProgress.hpp @@ -0,0 +1,22 @@ +#ifndef _AV_TRANSCODER_CONSOLE_PROGRESS_HPP_ +#define _AV_TRANSCODER_CONSOLE_PROGRESS_HPP_ + +#include "IProgress.hpp" + +namespace avtranscoder +{ + +/** + * @brief Implementation of IProgress, to display a progress bar in console. + */ +class ConsoleProgress : public IProgress +{ +public: + ~ConsoleProgress(); + + EJobStatus progress( const double processedDuration, const double programDuration ); +}; + +} + +#endif diff --git a/src/AvTranscoder/progress/IProgress.hpp b/src/AvTranscoder/progress/IProgress.hpp new file mode 100644 index 00000000..0b8a8db1 --- /dev/null +++ b/src/AvTranscoder/progress/IProgress.hpp @@ -0,0 +1,41 @@ +#ifndef _AV_TRANSCODER_IPROGRESS_LISTENER_HPP_ +#define _AV_TRANSCODER_IPROGRESS_LISTENER_HPP_ + +#include + +#include + +namespace avtranscoder +{ + +/** + * @brief Indicate the state of a process. + */ +enum EJobStatus +{ + eJobStatusContinue = 0, + eJobStatusCancel +}; + +/** + * @brief Base class of Progress. + * Inherit this class to have your own way to manage a progress bar. + * You can inherit this class in C++, but also in python / Java binding. + */ +class IProgress +{ +public: + virtual ~IProgress() {}; + + /** + * @brief Manage the progress. + * @param processedDuration: what is processed + * @param programDuration: what you need to process (the totality) + * @return eJobStatusContinue if we continue the progress or eJobStatusCancel to stop it. + */ + virtual EJobStatus progress( const double processedDuration, const double programDuration ) = 0; +}; + +} + +#endif \ No newline at end of file diff --git a/src/AvTranscoder/progress/NoDisplayProgress.hpp b/src/AvTranscoder/progress/NoDisplayProgress.hpp new file mode 100644 index 00000000..2a4d684c --- /dev/null +++ b/src/AvTranscoder/progress/NoDisplayProgress.hpp @@ -0,0 +1,26 @@ +#ifndef _AV_TRANSCODER_NO_DISPLAY_PROGRESS_HPP_ +#define _AV_TRANSCODER_NO_DISPLAY_PROGRESS_HPP_ + +#include "IProgress.hpp" + +namespace avtranscoder +{ + +/** + * @brief Implementation of IProgress, to manage cases when we need an IProgress but don't care of a progress bar. + */ +class NoDisplayProgress : public IProgress +{ +public: + ~NoDisplayProgress() + {} + + EJobStatus progress( const double processedDuration, const double programDuration ) + { + return eJobStatusContinue; + } +}; + +} + +#endif \ No newline at end of file diff --git a/src/AvTranscoder/progress/progress.i b/src/AvTranscoder/progress/progress.i new file mode 100644 index 00000000..13d1b666 --- /dev/null +++ b/src/AvTranscoder/progress/progress.i @@ -0,0 +1,15 @@ +%module(directors="1") AvTranscoder + + +%{ + #include + #include + #include +%} + +/* turn on director wrapping for IProgress */ +%feature("director") IProgress; + +%include +%include +%include