From 4ec5a3ff800342ce048cc478be1d8177de8cc708 Mon Sep 17 00:00:00 2001 From: Marc-Antoine ARNAUD Date: Wed, 2 Jul 2014 12:43:26 -0400 Subject: [PATCH 1/7] remove audioRewrapper application --- app/SConscript | 15 --- app/audioRewrapper/audioRewrapper.cpp | 151 -------------------------- 2 files changed, 166 deletions(-) delete mode 100644 app/audioRewrapper/audioRewrapper.cpp diff --git a/app/SConscript b/app/SConscript index bb19bb54..8c245659 100644 --- a/app/SConscript +++ b/app/SConscript @@ -66,19 +66,6 @@ avprocessor = env.Program( ], ) -audioRewrapper = env.Program( - 'audioWrap', - Glob( 'audioRewrapper/*.cpp' ), - LIBS = [ - sAvTranscoder, - 'avutil', - 'avformat', - 'avcodec', - 'swscale', - resampleLibraryName, - ] - ) - if platform.system() != 'Windows': avplayer = env.Program( 'avplayer', @@ -128,9 +115,7 @@ avprofiles = env.Program( ) env.Depends( avmeta, sAvTranscoder ) -env.Depends( audioRewrapper, sAvTranscoder ) env.Alias( "install", env.Install(os.path.join( installPrefix, "bin" ), avmeta ) ) env.Alias( "install", env.Install(os.path.join( installPrefix, "bin" ), avprocessor ) ) env.Alias( "install", env.Install(os.path.join( installPrefix, "bin" ), avtransform ) ) -env.Alias( "install", env.Install(os.path.join( installPrefix, "bin" ), audioRewrapper ) ) diff --git a/app/audioRewrapper/audioRewrapper.cpp b/app/audioRewrapper/audioRewrapper.cpp deleted file mode 100644 index eb5c3b80..00000000 --- a/app/audioRewrapper/audioRewrapper.cpp +++ /dev/null @@ -1,151 +0,0 @@ -#include -#include - -#include -#include - -#include -#include - -#include - -void rewrapAudio( const char* inputfilename, const char* outputFilename ) -{ - using namespace avtranscoder; - - av_log_set_level( AV_LOG_FATAL ); - av_log_set_level( AV_LOG_DEBUG ); - - ProgressListener p; - - InputFile inputFile( inputfilename ); - inputFile.analyse( p ); - - size_t audioStreamId = inputFile.getProperties().audioStreams.at( 0 ).streamId; - - inputFile.readStream( audioStreamId ); - - OutputFile outputFile( outputFilename ); - - outputFile.setup(); - - AvOutputStream& audioStream = outputFile.addAudioStream( inputFile.getStream( audioStreamId ).getAudioDesc() ); - - outputFile.beginWrap(); - - DataStream data; - - // Encodage/transcodage - std::cout << "start re-wrapping" << std::endl; - - size_t frame = 0; - - while( inputFile.getStream( audioStreamId ).readNextPacket( data ) ) - { - std::cout << "\rprocess frame " << (int)frame - 1 << std::flush; - - audioStream.wrap( data ); - - ++frame; - } - outputFile.endWrap(); - std::cout << std::endl; -} - -void transcodeAudio( const char* inputfilename, const char* outputFilename ) -{ - using namespace avtranscoder; - - av_log_set_level( AV_LOG_FATAL ); - av_log_set_level( AV_LOG_DEBUG ); - - ProgressListener p; - - InputFile inputFile( inputfilename ); - inputFile.analyse( p ); - - OutputFile outputFile( outputFilename ); - outputFile.setup(); - - // init audio decoders - size_t audioStreamId = inputFile.getProperties().audioStreams.at( 0 ).streamId; - InputAudio inputAudio( inputFile.getStream( audioStreamId ) ); - inputFile.readStream( audioStreamId ); - - // init audio encoders - OutputAudio outputAudio; - AudioDesc& audioOutputDesc = outputAudio.getAudioDesc(); - audioOutputDesc.setAudioCodec( "pcm_s24le" ); - audioOutputDesc.setAudioParameters( - inputFile.getStream( 0 ).getAudioDesc().getSampleRate(), - inputFile.getStream( 0 ).getAudioDesc().getChannels(), - AV_SAMPLE_FMT_S16//,inputFile.getStream( 0 ).getAudioDesc().getSampleFormat() - ); - - if( ! outputAudio.setup( ) ) - { - throw std::runtime_error( "error during initialising audio output stream" ); - } - - AvOutputStream& audioStream = outputFile.addAudioStream( audioOutputDesc ); - outputFile.beginWrap(); - - // init convert - AudioEssenceTransform audioEssenceTransform; - - DataStream codedFrame; - - // start transcoding process - std::cout << "start transcoding" << std::endl; - - AudioFrame audioFrameSource( inputFile.getStream( 0 ).getAudioDesc().getFrameDesc() ); - AudioFrame audioFrameToEncode( audioOutputDesc.getFrameDesc() ); - - size_t frame = 0; - while( inputAudio.readNextFrame( audioFrameSource ) ) - { - std::cout << "\rprocess frame " << (int)frame - 1 << std::flush; - - audioEssenceTransform.convert( audioFrameSource, audioFrameToEncode ); - - outputAudio.encodeFrame( audioFrameToEncode, codedFrame ); - - audioStream.wrap( codedFrame ); - - ++frame; - // if you want to stop the transcoding process (after 10s at 48,1 KHz) -// if(frame == 10*48100) -// break; - } - std::cout << std::endl; - - outputAudio.encodeFrame( codedFrame ); - audioStream.wrap( codedFrame ); - - // end of transcoding process - - outputFile.endWrap(); -} - -int main( int argc, char** argv ) -{ - if( argc <= 2 ) - { - std::cout << "audiorewrapper require medias filename" << std::endl; - std::cout << "example: audioWrap inputfile.ext outputfile.ext" << std::endl; - return( -1 ); - } - - std::cout << "start ..." << std::endl; - - try - { - rewrapAudio( argv[1], argv[2] ); - //transcodeAudio( argv[1], argv[2] ); - } - catch( std::exception &e ) - { - std::cout << "[ERROR] " << e.what() << std::endl; - } - std::cout << "end ..." << std::endl; -} From f9738a99d4a40361ed65d89e9298dbaa317e8425 Mon Sep 17 00:00:00 2001 From: Marc-Antoine ARNAUD Date: Wed, 2 Jul 2014 13:07:55 -0400 Subject: [PATCH 2/7] set a simplest API to get libraries version --- app/avInfo/avInfo.cpp | 18 +++--- src/AvTranscoder/Description.cpp | 101 ++++++++++++++++++------------- src/AvTranscoder/Description.hpp | 27 ++++++++- 3 files changed, 89 insertions(+), 57 deletions(-) diff --git a/app/avInfo/avInfo.cpp b/app/avInfo/avInfo.cpp index bc5bdf06..94e279f5 100644 --- a/app/avInfo/avInfo.cpp +++ b/app/avInfo/avInfo.cpp @@ -6,19 +6,15 @@ int main( int argc, char** argv ) { - avtranscoder::AvVersions versions( avtranscoder::getVersion() ); + avtranscoder::Libraries libs( avtranscoder::getLibraries() ); - for( avtranscoder::AvVersions::iterator libVersion = versions.begin(); libVersion != versions.end(); ++libVersion ) + for( avtranscoder::Libraries::iterator library = libs.begin(); library != libs.end(); ++library ) { - std::cout << std::left << std::setw( 15 ) << (*libVersion).first; - std::cout << std::left << std::setw( 30 ) << avtranscoder::getLicence(); - - std::stringstream completeVersion; - for( std::vector::iterator version = (*libVersion).second.begin(); version != (*libVersion).second.end(); ++version ) - { - completeVersion << *version << "."; - } - std::cout << completeVersion.str() << std::endl; + std::cout << std::left; + std::cout << std::setw( 15 ) << (*library).getName(); + std::cout << std::setw( 10 ) << (*library).getStringVersion(); + std::cout << std::setw( 30 ) << (*library).getLicence(); + std::cout << std::endl; } // std::cout << "avinfo" << std::endl; diff --git a/src/AvTranscoder/Description.cpp b/src/AvTranscoder/Description.cpp index 0ed30da4..6361ec44 100644 --- a/src/AvTranscoder/Description.cpp +++ b/src/AvTranscoder/Description.cpp @@ -16,64 +16,79 @@ extern "C" { } #include -#include //sort, unique +#include +#include namespace avtranscoder { -std::map< std::string, std::vector > getVersion() +Library::Library( const std::string& name, const std::string& licence, const size_t major, const size_t minor, const size_t release ) + : _name( name ) + , _licence( licence ) + , _major( major ) + , _minor( minor ) + , _release( release ) { - std::map< std::string, std::vector > version; +} - std::vector avutilVersion; - avutilVersion.push_back( LIBAVUTIL_VERSION_MAJOR ); - avutilVersion.push_back( LIBAVUTIL_VERSION_MINOR ); - avutilVersion.push_back( LIBAVUTIL_VERSION_MICRO ); +std::string Library::getName() +{ + return _name; +} - std::vector avformatVersion; - avformatVersion.push_back( LIBAVFORMAT_VERSION_MAJOR ); - avformatVersion.push_back( LIBAVFORMAT_VERSION_MINOR ); - avformatVersion.push_back( LIBAVFORMAT_VERSION_MICRO ); +std::vector Library::getVersion() +{ + std::vector version; + version.push_back( _major ); + version.push_back( _minor ); + version.push_back( _release ); + return version; +} - std::vector avcodecVersion; - avcodecVersion.push_back( LIBAVCODEC_VERSION_MAJOR ); - avcodecVersion.push_back( LIBAVCODEC_VERSION_MINOR ); - avcodecVersion.push_back( LIBAVCODEC_VERSION_MICRO ); +std::string Library::getStringVersion() +{ + std::stringstream version; + version << _major << "."; + version << _minor << "."; + version << _release; + return version.str(); +} - std::vector swscaleVersion; - swscaleVersion.push_back( LIBSWSCALE_VERSION_MAJOR ); - swscaleVersion.push_back( LIBSWSCALE_VERSION_MINOR ); - swscaleVersion.push_back( LIBSWSCALE_VERSION_MICRO ); +size_t Library::getMajorVersion() +{ + return _major; +} -#ifdef AV_RESAMPLE_LIBRARY - std::vector avresampleVersion; - avresampleVersion.push_back( LIBAVRESAMPLE_VERSION_MAJOR ); - avresampleVersion.push_back( LIBAVRESAMPLE_VERSION_MINOR ); - avresampleVersion.push_back( LIBAVRESAMPLE_VERSION_MICRO ); -#else - std::vector swresampleVersion; - swresampleVersion.push_back( LIBSWRESAMPLE_VERSION_MAJOR ); - swresampleVersion.push_back( LIBSWRESAMPLE_VERSION_MINOR ); - swresampleVersion.push_back( LIBSWRESAMPLE_VERSION_MICRO ); -#endif +size_t Library::getMinorVersion() +{ + return _minor; +} - version[ "avutil" ] = avutilVersion; - version[ "avformat" ] = avformatVersion; - version[ "avcodec" ] = avcodecVersion; - version[ "swscale" ] = swscaleVersion; -#ifdef AV_RESAMPLE_LIBRARY - version[ "avresample" ] = avresampleVersion; -#else - version[ "swresample" ] = swresampleVersion; -#endif +size_t Library::getReleaseVersion() +{ + return _release; +} - return version; +std::string Library::getLicence() +{ + return _licence; } -std::string getLicence() +Libraries getLibraries() { - std::string licence( avutil_license() ); - return licence; + Libraries libs; + + libs.push_back( Library( "avutil", avutil_license(), LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, LIBAVUTIL_VERSION_MICRO ) ); + libs.push_back( Library( "avformat", avformat_license(), LIBAVFORMAT_VERSION_MAJOR, LIBAVFORMAT_VERSION_MINOR, LIBAVFORMAT_VERSION_MICRO ) ); + libs.push_back( Library( "avcodec", avcodec_license(), LIBAVCODEC_VERSION_MAJOR, LIBAVCODEC_VERSION_MINOR, LIBAVCODEC_VERSION_MICRO ) ); +#ifdef AV_RESAMPLE_LIBRARY + libs.push_back( Library( "avresample", avutil_license(), LIBAVRESAMPLE_VERSION_MAJOR, LIBAVRESAMPLE_VERSION_MINOR, LIBAVRESAMPLE_VERSION_MICRO ) ); +#else + libs.push_back( Library( "swresample", avutil_license(), LIBSWRESAMPLE_VERSION_MAJOR, LIBSWRESAMPLE_VERSION_MINOR, LIBSWRESAMPLE_VERSION_MICRO ) ); +#endif + libs.push_back( Library( "swscale", avutil_license(), LIBSWSCALE_VERSION_MAJOR, LIBSWSCALE_VERSION_MINOR, LIBSWSCALE_VERSION_MICRO ) ); + + return libs; } std::vector getInputExtensions() diff --git a/src/AvTranscoder/Description.hpp b/src/AvTranscoder/Description.hpp index 9319830b..68cea001 100644 --- a/src/AvTranscoder/Description.hpp +++ b/src/AvTranscoder/Description.hpp @@ -10,10 +10,31 @@ namespace avtranscoder { -typedef std::map< std::string, std::vector > AvVersions; +class Library +{ +public: + Library( const std::string& name, const std::string& licence, const size_t major, const size_t minor, const size_t release ); + + std::string getName(); + + std::vector getVersion(); + std::string getStringVersion(); + size_t getMajorVersion(); + size_t getMinorVersion(); + size_t getReleaseVersion(); + + std::string getLicence(); +private: + std::string _name; + std::string _licence; + size_t _major; + size_t _minor; + size_t _release; +}; + +typedef std::vector< Library > Libraries; -AvVersions getVersion(); -std::string getLicence(); +Libraries getLibraries(); std::vector getInputExtensions(); From 55a96d35830c4c4196bf227553f922f987f6b6a3 Mon Sep 17 00:00:00 2001 From: Marc-Antoine ARNAUD Date: Thu, 3 Jul 2014 05:26:35 -0400 Subject: [PATCH 3/7] return virtual class, not specific to correct overloading --- src/AvTranscoder/File/OutputFile.cpp | 6 +++--- src/AvTranscoder/File/OutputFile.hpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/AvTranscoder/File/OutputFile.cpp b/src/AvTranscoder/File/OutputFile.cpp index 8e141311..b18de13b 100644 --- a/src/AvTranscoder/File/OutputFile.cpp +++ b/src/AvTranscoder/File/OutputFile.cpp @@ -59,7 +59,7 @@ bool OutputFile::setup() return _formatContext != NULL; } -AvOutputStream& OutputFile::addVideoStream( const VideoDesc& videoDesc ) +OutputStream& OutputFile::addVideoStream( const VideoDesc& videoDesc ) { assert( _formatContext != NULL ); @@ -93,7 +93,7 @@ AvOutputStream& OutputFile::addVideoStream( const VideoDesc& videoDesc ) return *_outputStreams.back(); } -AvOutputStream& OutputFile::addAudioStream( const AudioDesc& audioDesc ) +OutputStream& OutputFile::addAudioStream( const AudioDesc& audioDesc ) { assert( _formatContext != NULL ); @@ -112,7 +112,7 @@ AvOutputStream& OutputFile::addAudioStream( const AudioDesc& audioDesc ) return *_outputStreams.back(); } -AvOutputStream& OutputFile::getStream( const size_t streamId ) +OutputStream& OutputFile::getStream( const size_t streamId ) { if( streamId >= _outputStreams.size() ) throw std::runtime_error( "unable to get output stream (out of range)" ); diff --git a/src/AvTranscoder/File/OutputFile.hpp b/src/AvTranscoder/File/OutputFile.hpp index b44fbf21..65540dff 100644 --- a/src/AvTranscoder/File/OutputFile.hpp +++ b/src/AvTranscoder/File/OutputFile.hpp @@ -47,21 +47,21 @@ class AvExport OutputFile * @note call setup() before adding any stream * @param videoDesc description of output stream **/ - virtual AvOutputStream& addVideoStream( const VideoDesc& videoDesc ); + virtual OutputStream& addVideoStream( const VideoDesc& videoDesc ); /** * @brief Add an audio output stream using the description. * @note call setup() before adding any stream * @param audioDesc description of output stream **/ - virtual AvOutputStream& addAudioStream( const AudioDesc& audioDesc ); + virtual OutputStream& addAudioStream( const AudioDesc& audioDesc ); /** * @brief get the output stream description. * @param streamId select the output stream * @return the output stream reference **/ - virtual AvOutputStream& getStream( const size_t streamId ); + virtual OutputStream& getStream( const size_t streamId ); /** * @brief Initialise the wrapping From bd7c740d11de9b6852924bb32efefc019713f165 Mon Sep 17 00:00:00 2001 From: Marc-Antoine ARNAUD Date: Thu, 3 Jul 2014 05:53:10 -0400 Subject: [PATCH 4/7] add virual class on essence transform --- .../AudioEssenceTransform.cpp | 26 +++++++++---------- .../AudioEssenceTransform.hpp | 11 ++++---- .../EssenceTransform/EssenceTransform.hpp | 26 +++++++++++++++++++ .../VideoEssenceTransform.cpp | 19 ++++++++++---- .../VideoEssenceTransform.hpp | 11 ++++---- 5 files changed, 63 insertions(+), 30 deletions(-) create mode 100644 src/AvTranscoder/EssenceTransform/EssenceTransform.hpp diff --git a/src/AvTranscoder/EssenceTransform/AudioEssenceTransform.cpp b/src/AvTranscoder/EssenceTransform/AudioEssenceTransform.cpp index dab4f22c..793c475d 100644 --- a/src/AvTranscoder/EssenceTransform/AudioEssenceTransform.cpp +++ b/src/AvTranscoder/EssenceTransform/AudioEssenceTransform.cpp @@ -39,8 +39,11 @@ AudioEssenceTransform::AudioEssenceTransform() { } -bool AudioEssenceTransform::init( const AudioFrame& src, const AudioFrame& dst ) +bool AudioEssenceTransform::init( const Frame& srcFrame, const Frame& dstFrame ) { + const AudioFrame& src = static_cast( srcFrame ); + const AudioFrame& dst = static_cast( dstFrame ); + _audioConvertContext = AllocResampleContext(); if( !_audioConvertContext ) @@ -64,27 +67,24 @@ bool AudioEssenceTransform::init( const AudioFrame& src, const AudioFrame& dst ) return true; } -void AudioEssenceTransform::convert( const AudioFrame& src, AudioFrame& dst ) +void AudioEssenceTransform::convert( const Frame& srcFrame, Frame& dstFrame ) { if( ! _isInit ) - { - _isInit = init( src, dst ); - _isInit = true; - } + _isInit = init( srcFrame, dstFrame ); - if( dst.getSize() != src.getSize() ) - dst.getBuffer().resize( src.getSize(), 0 ); + if( dstFrame.getSize() != srcFrame.getSize() ) + dstFrame.getBuffer().resize( srcFrame.getSize(), 0 ); - const unsigned char* srcData = src.getPtr(); - unsigned char* dstData = dst.getPtr(); + const unsigned char* srcData = srcFrame.getPtr(); + unsigned char* dstData = dstFrame.getPtr(); #ifdef AV_RESAMPLE_LIBRARY - avresample_convert( _audioConvertContext, (uint8_t**)&dstData, 0, dst.getSize(), (uint8_t**)&srcData, 0, src.getSize() ); + avresample_convert( _audioConvertContext, (uint8_t**)&dstData, 0, dstFrame.getSize(), (uint8_t**)&srcData, 0, srcFrame.getSize() ); #else - swr_convert( _audioConvertContext, &dstData, dst.getSize(), &srcData, src.getSize() ); + swr_convert( _audioConvertContext, &dstData, dstFrame.getSize(), &srcData, srcFrame.getSize() ); #endif - dst.setNbSamples( src.getNbSamples() ); + static_cast( dstFrame ).setNbSamples( static_cast( srcFrame ).getNbSamples() ); } } diff --git a/src/AvTranscoder/EssenceTransform/AudioEssenceTransform.hpp b/src/AvTranscoder/EssenceTransform/AudioEssenceTransform.hpp index 4854a941..ad83b31c 100644 --- a/src/AvTranscoder/EssenceTransform/AudioEssenceTransform.hpp +++ b/src/AvTranscoder/EssenceTransform/AudioEssenceTransform.hpp @@ -1,7 +1,8 @@ #ifndef _AV_TRANSCODER_ESSENCE_TRANSFORM_AUDIO_ESSENCE_TRANSFORM_HPP #define _AV_TRANSCODER_ESSENCE_TRANSFORM_AUDIO_ESSENCE_TRANSFORM_HPP -#include +#include +#include "EssenceTransform.hpp" #ifdef AV_RESAMPLE_LIBRARY #define ResampleContext AVAudioResampleContext @@ -14,17 +15,15 @@ class ResampleContext; namespace avtranscoder { -class AudioFrame; - -class AvExport AudioEssenceTransform +class AvExport AudioEssenceTransform : public EssenceTransform { public: AudioEssenceTransform(); - void convert( const AudioFrame& src, AudioFrame& dst ); + void convert( const Frame& srcFrame, Frame& dstFrame ); private: - bool init( const AudioFrame& src, const AudioFrame& dst ); + bool init( const Frame& srcFrame, const Frame& dstFrame ); ResampleContext* _audioConvertContext; diff --git a/src/AvTranscoder/EssenceTransform/EssenceTransform.hpp b/src/AvTranscoder/EssenceTransform/EssenceTransform.hpp new file mode 100644 index 00000000..4acc3556 --- /dev/null +++ b/src/AvTranscoder/EssenceTransform/EssenceTransform.hpp @@ -0,0 +1,26 @@ +#ifndef _AV_TRANSCODER_ESSENCE_TRANSFORM_ESSENCE_TRANSFORM_HPP_ +#define _AV_TRANSCODER_ESSENCE_TRANSFORM_ESSENCE_TRANSFORM_HPP_ + +#include + +namespace avtranscoder +{ + +class AvExport EssenceTransform +{ +public: + EssenceTransform() + {} + + virtual ~EssenceTransform() + {} + + virtual void convert( const Frame& src, Frame& dst ) = 0; + +protected: + virtual bool init( const Frame& src, const Frame& dst ) = 0; +}; + +} + +#endif diff --git a/src/AvTranscoder/EssenceTransform/VideoEssenceTransform.cpp b/src/AvTranscoder/EssenceTransform/VideoEssenceTransform.cpp index 34d82bd9..d662b350 100644 --- a/src/AvTranscoder/EssenceTransform/VideoEssenceTransform.cpp +++ b/src/AvTranscoder/EssenceTransform/VideoEssenceTransform.cpp @@ -14,6 +14,9 @@ extern "C" { #endif } +#include +#include + #include #include #include @@ -34,8 +37,11 @@ VideoEssenceTransform::VideoEssenceTransform() { } -bool VideoEssenceTransform::init( const Image& src, const Image& dst ) +bool VideoEssenceTransform::init( const Frame& srcFrame, const Frame& dstFrame ) { + const Image& src = static_cast( srcFrame ); + const Image& dst = static_cast( dstFrame ); + assert( src.desc().getWidth() != 0 ); assert( src.desc().getHeight() != 0 ); assert( src.desc().getWidth() == dst.desc().getWidth() ); @@ -76,8 +82,11 @@ bool VideoEssenceTransform::init( const Image& src, const Image& dst ) return true; } -void VideoEssenceTransform::convert( const Image& src, Image& dst ) +void VideoEssenceTransform::convert( const Frame& srcFrame, Frame& dstFrame ) { + const Image& src = static_cast( srcFrame ); + Image& dst = static_cast( dstFrame ); + assert( src.desc().getWidth() != 0 ); assert( src.desc().getHeight() != 0 ); assert( src.desc().getWidth() == dst.desc().getWidth() ); @@ -86,12 +95,12 @@ void VideoEssenceTransform::convert( const Image& src, Image& dst ) assert( src.desc().getPixelDesc().getComponents() == dst.desc().getPixelDesc().getComponents() ); if( ! _isInit ) - _isInit = init( src, dst ); + _isInit = init( srcFrame, dstFrame ); for( size_t plane = 0; plane < MAX_SWS_PLANE; ++plane ) { - _srcData.at( plane ) = (uint8_t*)const_cast< unsigned char* >( src.getPtr() + _srcOffsets.at( plane ) ); - _dstData.at( plane ) = (uint8_t*)dst.getPtr() + _dstOffsets.at( plane ); + _srcData.at( plane ) = (uint8_t*) const_cast< unsigned char* >( src.getPtr() + _srcOffsets.at( plane ) ); + _dstData.at( plane ) = (uint8_t*) dst.getPtr() + _dstOffsets.at( plane ); } if( !_imageConvertContext ) diff --git a/src/AvTranscoder/EssenceTransform/VideoEssenceTransform.hpp b/src/AvTranscoder/EssenceTransform/VideoEssenceTransform.hpp index 02250b54..4606ce7f 100644 --- a/src/AvTranscoder/EssenceTransform/VideoEssenceTransform.hpp +++ b/src/AvTranscoder/EssenceTransform/VideoEssenceTransform.hpp @@ -1,26 +1,25 @@ #ifndef _AV_TRANSCODER_ESSENCE_TRANSFORM_VIDEO_ESSENCE_TRANSFORM_HPP #define _AV_TRANSCODER_ESSENCE_TRANSFORM_VIDEO_ESSENCE_TRANSFORM_HPP -#include -#include +#include +#include "EssenceTransform.hpp" #include -#include class SwsContext; namespace avtranscoder { -class AvExport VideoEssenceTransform +class AvExport VideoEssenceTransform : public EssenceTransform { public: VideoEssenceTransform(); - void convert( const Image& src, Image& dst ); + void convert( const Frame& srcFrame, Frame& dstFrame ); private: - bool init( const Image& src, const Image& dst ); + bool init( const Frame& srcFrame, const Frame& dstFrame ); SwsContext* _imageConvertContext; From ffeece9d48af1ae18a737e9b933aeb8a8b983d00 Mon Sep 17 00:00:00 2001 From: Marc-Antoine ARNAUD Date: Thu, 3 Jul 2014 07:06:31 -0400 Subject: [PATCH 5/7] adding EssenceTransform in StreamTranscoder --- .../Transcoder/StreamTranscoder.cpp | 22 +++++++++++++++++-- .../Transcoder/StreamTranscoder.hpp | 5 +++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/AvTranscoder/Transcoder/StreamTranscoder.cpp b/src/AvTranscoder/Transcoder/StreamTranscoder.cpp index ab3e7de0..47f984c6 100644 --- a/src/AvTranscoder/Transcoder/StreamTranscoder.cpp +++ b/src/AvTranscoder/Transcoder/StreamTranscoder.cpp @@ -3,6 +3,9 @@ #include +#include +#include + #include namespace avtranscoder @@ -14,11 +17,13 @@ StreamTranscoder::StreamTranscoder( ) : _inputStream( &inputStream ) , _outputStream( NULL ) + , _sourceBuffer( NULL ) , _frameBuffer( NULL ) , _videoFrameBuffer( NULL ) , _audioFrameBuffer( NULL ) , _inputEssence( NULL ) , _outputEssence( NULL ) + , _transform( NULL ) , _transcodeStream( false ) { // create a re-wrapping case @@ -46,11 +51,13 @@ StreamTranscoder::StreamTranscoder( ) : _inputStream( &inputStream ) , _outputStream( NULL ) + , _sourceBuffer( NULL ) , _frameBuffer( NULL ) , _videoFrameBuffer( NULL ) , _audioFrameBuffer( NULL ) , _inputEssence( NULL ) , _outputEssence( NULL ) + , _transform( NULL ) , _transcodeStream( true ) { // create a transcode case @@ -67,9 +74,13 @@ StreamTranscoder::StreamTranscoder( _outputEssence->setProfile( profile ); _outputStream = &outputFile.addVideoStream( outputVideo->getVideoDesc() ); + + _sourceBuffer = new Image( _inputStream->getVideoDesc().getImageDesc() ); _videoFrameBuffer = new Image( outputVideo->getVideoDesc().getImageDesc() ); _frameBuffer = _videoFrameBuffer; + _transform = new VideoEssenceTransform(); + break; } case AVMEDIA_TYPE_AUDIO : @@ -83,9 +94,13 @@ StreamTranscoder::StreamTranscoder( _outputEssence->setProfile( profile ); _outputStream = &outputFile.addAudioStream( outputAudio->getAudioDesc() ); + + _sourceBuffer = new AudioFrame( _inputStream->getAudioDesc().getFrameDesc() ); _audioFrameBuffer = new AudioFrame( outputAudio->getAudioDesc().getFrameDesc() ); _frameBuffer = _audioFrameBuffer; + _transform = new AudioEssenceTransform(); + break; } default: @@ -103,11 +118,13 @@ StreamTranscoder::StreamTranscoder( ) : _inputStream( NULL ) , _outputStream( NULL ) + , _sourceBuffer( NULL ) , _frameBuffer( NULL ) , _videoFrameBuffer( NULL ) , _audioFrameBuffer( NULL ) , _inputEssence( &inputEssence ) , _outputEssence( NULL ) + , _transform( NULL ) , _transcodeStream( true ) { if( ! profile.count( Profile::avProfileType ) ) @@ -177,14 +194,15 @@ bool StreamTranscoder::processTranscode() { assert( _inputEssence != NULL ); assert( _outputEssence != NULL ); + assert( _sourceBuffer != NULL ); assert( _frameBuffer != NULL ); std::cout << "transcode" << std::endl; DataStream dataStream; - if( _inputEssence->readNextFrame( *_frameBuffer ) ) + if( _inputEssence->readNextFrame( *_sourceBuffer ) ) { - std::cout << "encode" << std::endl; + _transform->convert( *_sourceBuffer, *_frameBuffer ); _outputEssence->encodeFrame( *_frameBuffer, dataStream ); } else diff --git a/src/AvTranscoder/Transcoder/StreamTranscoder.hpp b/src/AvTranscoder/Transcoder/StreamTranscoder.hpp index 996816e9..32bab884 100644 --- a/src/AvTranscoder/Transcoder/StreamTranscoder.hpp +++ b/src/AvTranscoder/Transcoder/StreamTranscoder.hpp @@ -16,6 +16,8 @@ namespace avtranscoder { +class EssenceTransform; + class StreamTranscoder { public: @@ -52,6 +54,7 @@ class StreamTranscoder InputStream* _inputStream; OutputStream* _outputStream; + Frame* _sourceBuffer; Frame* _frameBuffer; Image* _videoFrameBuffer; AudioFrame* _audioFrameBuffer; @@ -59,6 +62,8 @@ class StreamTranscoder InputEssence* _inputEssence; OutputEssence* _outputEssence; + EssenceTransform* _transform; + bool _transcodeStream; From 69d65cd68be50649f039c7827d5a6faddefa3068 Mon Sep 17 00:00:00 2001 From: Marc-Antoine ARNAUD Date: Thu, 3 Jul 2014 07:07:44 -0400 Subject: [PATCH 6/7] delete Transform in StreamTransform --- src/AvTranscoder/Transcoder/StreamTranscoder.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/AvTranscoder/Transcoder/StreamTranscoder.cpp b/src/AvTranscoder/Transcoder/StreamTranscoder.cpp index 47f984c6..86149b80 100644 --- a/src/AvTranscoder/Transcoder/StreamTranscoder.cpp +++ b/src/AvTranscoder/Transcoder/StreamTranscoder.cpp @@ -167,6 +167,8 @@ StreamTranscoder::~StreamTranscoder() delete _inputEssence; if( _outputEssence ) delete _outputEssence; + if( _transform ) + delete _transform; } From 133738341ef7fd6353948c3d6df33c4bc3679b03 Mon Sep 17 00:00:00 2001 From: Marc-Antoine ARNAUD Date: Thu, 3 Jul 2014 07:11:05 -0400 Subject: [PATCH 7/7] remove build warning --- app/optionChecker/optionChecker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/optionChecker/optionChecker.cpp b/app/optionChecker/optionChecker.cpp index acafa022..76900836 100644 --- a/app/optionChecker/optionChecker.cpp +++ b/app/optionChecker/optionChecker.cpp @@ -60,7 +60,7 @@ void displayOptions( avtranscoder::OptionLoader::OptionArray& options ) } } -int optionChecker( const std::string& inputfilename ) +void optionChecker( const std::string& inputfilename ) { avtranscoder::OptionLoader optionLoader;