From 56f322ec1a496cb2a6fe6b7c5ffb2987e2ad0876 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Mar 2015 10:55:33 +0100 Subject: [PATCH 01/34] util: get format/videoCodec/audioCodec names with a map Instead of two functions for each case: short and long names. --- src/AvTranscoder/util.cpp | 110 ++++++-------------------------------- src/AvTranscoder/util.hpp | 19 +++---- 2 files changed, 24 insertions(+), 105 deletions(-) diff --git a/src/AvTranscoder/util.cpp b/src/AvTranscoder/util.cpp index 1d567077..d85bf193 100644 --- a/src/AvTranscoder/util.cpp +++ b/src/AvTranscoder/util.cpp @@ -6,6 +6,8 @@ extern "C" { #include } +#include + namespace avtranscoder { @@ -116,27 +118,9 @@ AVSampleFormat getAVSampleFormat( const std::string& sampleFormat ) return av_get_sample_fmt( sampleFormat.c_str() ); } -std::vector getFormatsLongNames() -{ - std::vector formatsLongNames; - - AVOutputFormat* fmt = NULL; - while( ( fmt = av_oformat_next( fmt ) ) ) - { - // skip undefined codec - if( fmt->video_codec == AV_CODEC_ID_NONE ) - continue; - - if( ! fmt->long_name ) - continue; - - formatsLongNames.push_back( std::string( fmt->long_name ) ); - } - return formatsLongNames; -} -std::vector getFormatsShortNames() +NamesArray getFormatsNames() { - std::vector formatsShortNames; + NamesArray formatsNames; AVOutputFormat* fmt = NULL; while( ( fmt = av_oformat_next( fmt ) ) ) @@ -145,47 +129,17 @@ std::vector getFormatsShortNames() if( fmt->video_codec == AV_CODEC_ID_NONE ) continue; - if( ! fmt->name ) + if( ! fmt->name && ! fmt->long_name ) continue; - formatsShortNames.push_back( std::string( fmt->name ) ); + formatsNames.push_back( std::make_pair( std::string( fmt->name ? fmt->name : "" ), std::string( fmt->long_name ? fmt->long_name : "" ) ) ); } - return formatsShortNames; + return formatsNames; } -std::vector getVideoCodecsLongNames() -{ - std::vector videoCodecsLongNames; - - AVCodec* c = NULL; - while( ( c = av_codec_next( c ) ) != NULL ) - { -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT( 53, 34, 0 ) - if( ! c->encode ) - continue; -#else - if( ! c->encode2 ) - continue; -#endif - switch( c->type ) - { - case AVMEDIA_TYPE_VIDEO: - { - if( ! c->long_name ) - continue; - - videoCodecsLongNames.push_back( std::string( c->long_name ) ); - break; - } - default: - break; - } - } - return videoCodecsLongNames; -} -std::vector getVideoCodecsShortNames() +NamesArray getVideoCodecsNames() { - std::vector videoCodecsShortNames; + NamesArray videoCodecsNames; AVCodec* c = NULL; while( ( c = av_codec_next( c ) ) != NULL ) @@ -201,52 +155,22 @@ std::vector getVideoCodecsShortNames() { case AVMEDIA_TYPE_VIDEO: { - if( ! c->name ) + if( ! c->name && ! c->long_name ) continue; - videoCodecsShortNames.push_back( std::string( c->name ) ); + videoCodecsNames.push_back( std::make_pair( std::string( c->name ? c->name : "" ), std::string( c->long_name ? c->long_name : "" ) ) ); break; } default: break; } } - return videoCodecsShortNames; + return videoCodecsNames; } -std::vector getAudioCodecsLongNames() -{ - std::vector audioCodecsLongNames; - - AVCodec* c = NULL; - while( ( c = av_codec_next( c ) ) != NULL ) - { -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT( 53, 34, 0 ) - if( ! c->encode ) - continue; -#else - if( ! c->encode2 ) - continue; -#endif - switch( c->type ) - { - case AVMEDIA_TYPE_AUDIO: - { - if( ! c->long_name ) - continue; - - audioCodecsLongNames.push_back( std::string( c->long_name ) ); - break; - } - default: - break; - } - } - return audioCodecsLongNames; -} -std::vector getAudioCodecsShortNames() +NamesArray getAudioCodecsNames() { - std::vector audioCodecsShortNames; + NamesArray audioCodecsNames; AVCodec* c = NULL; while( ( c = av_codec_next( c ) ) != NULL ) @@ -262,17 +186,17 @@ std::vector getAudioCodecsShortNames() { case AVMEDIA_TYPE_AUDIO: { - if( ! c->name ) + if( ! c->name && ! c->long_name ) continue; - audioCodecsShortNames.push_back( std::string( c->name ) ); + audioCodecsNames.push_back( std::make_pair( std::string( c->name ? c->name : "" ), std::string( c->long_name ? c->long_name : "" ) ) ); break; } default: break; } } - return audioCodecsShortNames; + return audioCodecsNames; } OptionArrayMap getOutputFormatOptions() diff --git a/src/AvTranscoder/util.hpp b/src/AvTranscoder/util.hpp index 5c39302e..bde5a27f 100644 --- a/src/AvTranscoder/util.hpp +++ b/src/AvTranscoder/util.hpp @@ -17,6 +17,7 @@ namespace avtranscoder { typedef std::map OptionArrayMap; +typedef std::vector< std::pair > NamesArray; //< short/long names of format/video codec/audio codec /** * @brief Get format name from a given filename @@ -53,25 +54,19 @@ AVPixelFormat getAVPixelFormat( const std::string& pixelFormat ); AVSampleFormat getAVSampleFormat( const std::string& sampleFormat ); /** - * @brief Get long name of all format supported by FFmpeg / libav. - * @see getFormatsShortNames: to get short names + * @brief Get array of short/long names of all format supported by FFmpeg / libav. */ -std::vector getFormatsLongNames(); -std::vector getFormatsShortNames(); +NamesArray getFormatsNames(); /** - * @brief Get long name of all video codec supported by FFmpeg / libav. - * @see getVideoCodecsShortNames: to get short names + * @brief Get array of short/long names of all video codec supported by FFmpeg / libav. */ -std::vector getVideoCodecsLongNames(); -std::vector getVideoCodecsShortNames(); +NamesArray getVideoCodecsNames(); /** - * @brief Get long name of all audio codec supported by FFmpeg / libav. - * @see getAudioCodecsShortNames: to get short names + * @brief Get array of short/long names of all audio codec supported by FFmpeg / libav. */ -std::vector getAudioCodecsLongNames(); -std::vector getAudioCodecsShortNames(); +NamesArray getAudioCodecsNames(); /** * @brief Get the list of options for each output format From c47b8ed6f676d1a42cdcf7885f5bdd9d7ae043a9 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Mar 2015 10:56:24 +0100 Subject: [PATCH 02/34] util: AvExport all functions --- src/AvTranscoder/util.hpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/AvTranscoder/util.hpp b/src/AvTranscoder/util.hpp index bde5a27f..66e4b711 100644 --- a/src/AvTranscoder/util.hpp +++ b/src/AvTranscoder/util.hpp @@ -33,55 +33,55 @@ bool AvExport matchFormat( const std::string& format, const std::string& filenam * @brief Get pixel format supported by a video codec. * @param videoCodecName: the video codec name (empty if not indicated, and so get all pixel formats supported by all video codecs). */ -std::vector getPixelFormats( const std::string& videoCodecName = "" ); +std::vector AvExport getPixelFormats( const std::string& videoCodecName = "" ); /** * @brief Get sample format supported by an audio codec. * @param audioCodecName: the audio codec name (empty if not indicated, and so get all sample formats supported by all audio codecs). */ -std::vector getSampleFormats( const std::string& audioCodecName = "" ); +std::vector AvExport getSampleFormats( const std::string& audioCodecName = "" ); /** * @brief Get the corresponding AVPixelFormat from the pixel format name * @param pixelFormat: the name of the pixel format */ -AVPixelFormat getAVPixelFormat( const std::string& pixelFormat ); +AVPixelFormat AvExport getAVPixelFormat( const std::string& pixelFormat ); /** * @brief Get the corresponding AVSampleFormat from the sample format name * @param sampleFormat: the name of the sample format */ -AVSampleFormat getAVSampleFormat( const std::string& sampleFormat ); +AVSampleFormat AvExport getAVSampleFormat( const std::string& sampleFormat ); /** * @brief Get array of short/long names of all format supported by FFmpeg / libav. */ -NamesArray getFormatsNames(); +NamesArray AvExport getFormatsNames(); /** * @brief Get array of short/long names of all video codec supported by FFmpeg / libav. */ -NamesArray getVideoCodecsNames(); +NamesArray AvExport getVideoCodecsNames(); /** * @brief Get array of short/long names of all audio codec supported by FFmpeg / libav. */ -NamesArray getAudioCodecsNames(); +NamesArray AvExport getAudioCodecsNames(); /** * @brief Get the list of options for each output format */ -OptionArrayMap getOutputFormatOptions(); +OptionArrayMap AvExport getOutputFormatOptions(); /** * @brief Get the list of options for each video codec */ -OptionArrayMap getVideoCodecOptions(); +OptionArrayMap AvExport getVideoCodecOptions(); /** * @brief Get the list of options for each audio codec */ -OptionArrayMap getAudioCodecOptions(); +OptionArrayMap AvExport getAudioCodecOptions(); } From 6cc5adda61356f0223d9e9381a6a5e272131cb97 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Mar 2015 11:13:45 +0100 Subject: [PATCH 03/34] Option: add SWIG interface --- src/AvTranscoder/avTranscoder.i | 3 +-- src/AvTranscoder/option.i | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 src/AvTranscoder/option.i diff --git a/src/AvTranscoder/avTranscoder.i b/src/AvTranscoder/avTranscoder.i index 6ea1ddd8..e3ebaa7a 100644 --- a/src/AvTranscoder/avTranscoder.i +++ b/src/AvTranscoder/avTranscoder.i @@ -16,7 +16,6 @@ %{ #include -#include #include %} @@ -30,9 +29,9 @@ namespace std { %include "AvTranscoder/profile/profile.i" %include -%include %include +%include "AvTranscoder/option.i" %include "AvTranscoder/codec/codec.i" %include "AvTranscoder/stream/stream.i" %include "AvTranscoder/decoder/decoder.i" diff --git a/src/AvTranscoder/option.i b/src/AvTranscoder/option.i new file mode 100644 index 00000000..ff550d2e --- /dev/null +++ b/src/AvTranscoder/option.i @@ -0,0 +1,15 @@ +%{ +#include +%} + +namespace std { +// Allow vector of object with no default constructor +%ignore vector< avtranscoder::Option >::vector(size_type); +%ignore vector< avtranscoder::Option >::resize; + +// Create instantiations of a template classes +%template(OptionArray) vector< avtranscoder::Option >; +%template(IntPair) pair< size_t, size_t >; +} + +%include From 5cf90ee5956626971f0ffa1dbcd9993e70f3a262 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Mar 2015 11:21:34 +0100 Subject: [PATCH 04/34] util: add SWIG interface --- src/AvTranscoder/avTranscoder.i | 5 +---- src/AvTranscoder/util.i | 9 +++++++++ 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 src/AvTranscoder/util.i diff --git a/src/AvTranscoder/avTranscoder.i b/src/AvTranscoder/avTranscoder.i index e3ebaa7a..8d463428 100644 --- a/src/AvTranscoder/avTranscoder.i +++ b/src/AvTranscoder/avTranscoder.i @@ -19,10 +19,6 @@ #include %} -namespace std { -%template(IntPair) pair< size_t, size_t >; -} - %include "AvTranscoder/progress/progress.i" %include "AvTranscoder/mediaProperty/mediaProperty.i" %include "AvTranscoder/frame/frame.i" @@ -32,6 +28,7 @@ namespace std { %include %include "AvTranscoder/option.i" +%include "AvTranscoder/util.i" %include "AvTranscoder/codec/codec.i" %include "AvTranscoder/stream/stream.i" %include "AvTranscoder/decoder/decoder.i" diff --git a/src/AvTranscoder/util.i b/src/AvTranscoder/util.i new file mode 100644 index 00000000..f670928f --- /dev/null +++ b/src/AvTranscoder/util.i @@ -0,0 +1,9 @@ +%{ +#include +%} + +namespace std { +%template(StrVector) vector< string >; +} + +%include From ce30cb83f44e284427a41778ac37af16a529b7af Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Tue, 31 Mar 2015 16:59:54 +0200 Subject: [PATCH 05/34] CMake: deploy avtranscoder python lib with python interface --- src/CMakeLists.txt | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9dcbbb78..ad05a7b6 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -48,11 +48,8 @@ install( PATTERN "*.hpp" PATTERN "*.i" ) -set(LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/lib") -install( - DIRECTORY "${LIBRARY_OUTPUT_PATH}" - DESTINATION "${CMAKE_INSTALL_PREFIX}" -) +install(TARGETS avtranscoder-static DESTINATION lib/) +install(TARGETS avtranscoder-shared DESTINATION lib/) ### Install AvTranscoder ressource install( @@ -106,7 +103,8 @@ if(SWIG_FOUND) FILES ${AVTRANSCODER_PYTHON_BINDING_FILE} ${AVTRANSCODER_PYTHON_INIT_FILE} DESTINATION ${AVTRANSCODER_PYTHON_MODULE_OUTPUT_DIR} ) - # Install __init__.py + # Install python lib and __init__.py files + install(TARGETS ${SWIG_MODULE_avtranscoder-py_REAL_NAME} DESTINATION "lib/python${PYTHONLIBS_VERSION_STRING}/site-packages/pyAvTranscoder/") install(CODE "file(WRITE ${CMAKE_INSTALL_PREFIX}/${AVTRANSCODER_PYTHON_MODULE_OUTPUT_DIR}/__init__.py)") else() message("PYTHON not found, will not build python binding.") @@ -152,7 +150,8 @@ if(SWIG_FOUND) COMMAND ${Java_JAR_EXECUTABLE} cf ${AVTRANSCODER_JAR_NAME} "-C" ${AVTRANSCODER_JAVA_CLASS_OUTPUT_PATH} "." ) - # Install jar file + # Install java lib and jar files + install(TARGETS ${SWIG_MODULE_avtranscoder-java_REAL_NAME} DESTINATION lib/) install(FILES ${AVTRANSCODER_JAR_PATH}/${AVTRANSCODER_JAR_NAME} DESTINATION "share/java/") else() message("JAVA not found, will not build java binding.") From 44db4a5cf29c83a045f5657c29dc8f85edce61ce Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 1 Apr 2015 17:39:54 +0200 Subject: [PATCH 06/34] ProfileLoader: load only files with extension .prf --- src/AvTranscoder/profile/util.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/AvTranscoder/profile/util.hpp b/src/AvTranscoder/profile/util.hpp index 144c25e4..16122779 100644 --- a/src/AvTranscoder/profile/util.hpp +++ b/src/AvTranscoder/profile/util.hpp @@ -59,7 +59,7 @@ int getFilesInDir( const std::string& dir, std::vector< std::string >& files ) { const std::string filename( findData.cFileName ); bool isdir = ( findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) != 0; - if( ! isdir ) + if( ! isdir && filename.find(".prf") != std::string::npos ) files.push_back( filename ); int rval = FindNextFile( findHandle, &findData ); @@ -81,7 +81,8 @@ int getFilesInDir( const std::string& dir, std::vector< std::string >& files ) const std::string filename( dirp->d_name ); if( filename == "." || filename == ".." ) continue; - files.push_back( filename ); + if( filename.find(".prf") != std::string::npos ) + files.push_back( filename ); } closedir( dp ); #endif From 01eec193a78a3204c10c1e241d4a5709c6d98021 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 1 Apr 2015 18:00:12 +0200 Subject: [PATCH 07/34] Transcoder: can call process without argument Default behavior is to call process with no display of progression. Fix #116 --- src/AvTranscoder/transcoder/Transcoder.cpp | 6 ++++++ src/AvTranscoder/transcoder/Transcoder.hpp | 1 + 2 files changed, 7 insertions(+) diff --git a/src/AvTranscoder/transcoder/Transcoder.cpp b/src/AvTranscoder/transcoder/Transcoder.cpp index 16705616..62c95964 100644 --- a/src/AvTranscoder/transcoder/Transcoder.cpp +++ b/src/AvTranscoder/transcoder/Transcoder.cpp @@ -224,6 +224,12 @@ bool Transcoder::processFrame() return true; } +void Transcoder::process() +{ + NoDisplayProgress progress; + process( progress ); +} + void Transcoder::process( IProgress& progress ) { if( _streamTranscoders.size() == 0 ) diff --git a/src/AvTranscoder/transcoder/Transcoder.hpp b/src/AvTranscoder/transcoder/Transcoder.hpp index 56c30922..2ee36b56 100644 --- a/src/AvTranscoder/transcoder/Transcoder.hpp +++ b/src/AvTranscoder/transcoder/Transcoder.hpp @@ -120,6 +120,7 @@ class AvExport Transcoder * @see IProgress */ void process( IProgress& progress ); + void process(); ///< Call process with no display of progression /** * @param streamIndex: careful about the order of stream insertion of the Transcoder. From c0aed474eb8b8fadcce3e3354d5be09eb3887d57 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 1 Apr 2015 18:17:53 +0200 Subject: [PATCH 08/34] mediaProperty: rename typedef PropertiesMap to PropertyVector * Same same in SWIG interface. * It's a vector of pair, not a map! --- src/AvTranscoder/file/OutputFile.cpp | 4 +- src/AvTranscoder/file/OutputFile.hpp | 2 +- .../mediaProperty/AttachementProperties.cpp | 12 +-- .../mediaProperty/AttachementProperties.hpp | 6 +- .../mediaProperty/AudioProperties.cpp | 44 +++++----- .../mediaProperty/AudioProperties.hpp | 12 +-- .../mediaProperty/DataProperties.cpp | 12 +-- .../mediaProperty/DataProperties.hpp | 6 +- .../mediaProperty/FileProperties.cpp | 36 ++++---- .../mediaProperty/FileProperties.hpp | 12 +-- .../mediaProperty/PixelProperties.cpp | 46 +++++----- .../mediaProperty/PixelProperties.hpp | 8 +- .../mediaProperty/SubtitleProperties.cpp | 12 +-- .../mediaProperty/SubtitleProperties.hpp | 6 +- .../mediaProperty/UnknownProperties.cpp | 12 +-- .../mediaProperty/UnknownProperties.hpp | 6 +- .../mediaProperty/VideoProperties.cpp | 84 +++++++++---------- .../mediaProperty/VideoProperties.hpp | 12 +-- src/AvTranscoder/mediaProperty/print.hpp | 28 +++---- src/AvTranscoder/mediaProperty/util.cpp | 14 ++-- src/AvTranscoder/mediaProperty/util.hpp | 16 ++-- 21 files changed, 195 insertions(+), 195 deletions(-) diff --git a/src/AvTranscoder/file/OutputFile.cpp b/src/AvTranscoder/file/OutputFile.cpp index 5177bf79..c1858c44 100644 --- a/src/AvTranscoder/file/OutputFile.cpp +++ b/src/AvTranscoder/file/OutputFile.cpp @@ -132,9 +132,9 @@ bool OutputFile::endWrap( ) return true; } -void OutputFile::addMetadata( const PropertiesMap& dataMap ) +void OutputFile::addMetadata( const PropertyVector& data ) { - for( PropertiesMap::const_iterator it = dataMap.begin(); it != dataMap.end(); ++it ) + for( PropertyVector::const_iterator it = data.begin(); it != data.end(); ++it ) { addMetadata( it->first, it->second ); } diff --git a/src/AvTranscoder/file/OutputFile.hpp b/src/AvTranscoder/file/OutputFile.hpp index e7a44147..d48222c1 100644 --- a/src/AvTranscoder/file/OutputFile.hpp +++ b/src/AvTranscoder/file/OutputFile.hpp @@ -41,7 +41,7 @@ class AvExport OutputFile : public IOutputFile * @brief Add metadata to the output file. * @note Depending on the format, you are not sure to find your metadata after the transcode. */ - void addMetadata( const PropertiesMap& dataMap ); + void addMetadata( const PropertyVector& data ); void addMetadata( const std::string& key, const std::string& value ); IOutputStream& getStream( const size_t streamId ); diff --git a/src/AvTranscoder/mediaProperty/AttachementProperties.cpp b/src/AvTranscoder/mediaProperty/AttachementProperties.cpp index 0424ce55..24e8a6c5 100644 --- a/src/AvTranscoder/mediaProperty/AttachementProperties.cpp +++ b/src/AvTranscoder/mediaProperty/AttachementProperties.cpp @@ -20,25 +20,25 @@ size_t AttachementProperties::getStreamId() const return _formatContext->streams[_streamIndex]->id; } -PropertiesMap AttachementProperties::getPropertiesAsMap() const +PropertyVector AttachementProperties::getPropertiesAsVector() const { - PropertiesMap dataMap; + PropertyVector data; try { - detail::add( dataMap, "streamId", getStreamId() ); + detail::add( data, "streamId", getStreamId() ); } catch( const std::exception& e ) { - detail::add( dataMap, "streamId", e.what() ); + detail::add( data, "streamId", e.what() ); } for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex ) { - detail::add( dataMap, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); + detail::add( data, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); } - return dataMap; + return data; } } diff --git a/src/AvTranscoder/mediaProperty/AttachementProperties.hpp b/src/AvTranscoder/mediaProperty/AttachementProperties.hpp index 4d5af3ca..0e963557 100644 --- a/src/AvTranscoder/mediaProperty/AttachementProperties.hpp +++ b/src/AvTranscoder/mediaProperty/AttachementProperties.hpp @@ -15,19 +15,19 @@ class AvExport AttachementProperties size_t getStreamIndex() const { return _streamIndex; } size_t getStreamId() const; - PropertiesMap& getMetadatas() { return _metadatas; } + PropertyVector& getMetadatas() { return _metadatas; } #ifndef SWIG const AVFormatContext& getAVFormatContext() { return *_formatContext; } #endif - PropertiesMap getPropertiesAsMap() const; ///< Return all attachement properties as a map (name of property: value) + PropertyVector getPropertiesAsVector() const; ///< Return all attachement properties as a vector (name of property: value) private: const AVFormatContext* _formatContext; ///< Has link (no ownership) size_t _streamIndex; - PropertiesMap _metadatas; + PropertyVector _metadatas; }; } diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.cpp b/src/AvTranscoder/mediaProperty/AudioProperties.cpp index f30698b3..2bdefaa0 100644 --- a/src/AvTranscoder/mediaProperty/AudioProperties.cpp +++ b/src/AvTranscoder/mediaProperty/AudioProperties.cpp @@ -202,33 +202,33 @@ double AudioProperties::getDuration() const return duration; } -PropertiesMap AudioProperties::getPropertiesAsMap() const -{ - PropertiesMap dataMap; - - addProperty( dataMap, "streamId", &AudioProperties::getStreamId ); - addProperty( dataMap, "codecId", &AudioProperties::getCodecId ); - addProperty( dataMap, "codecName", &AudioProperties::getCodecName ); - addProperty( dataMap, "codecLongName", &AudioProperties::getCodecLongName ); - addProperty( dataMap, "sampleFormatName", &AudioProperties::getSampleFormatName ); - addProperty( dataMap, "sampleFormatLongName", &AudioProperties::getSampleFormatLongName ); - addProperty( dataMap, "sampleRate", &AudioProperties::getSampleRate ); - addProperty( dataMap, "bitRate", &AudioProperties::getBitRate ); - addProperty( dataMap, "nbSamples", &AudioProperties::getNbSamples ); - addProperty( dataMap, "channels", &AudioProperties::getChannels ); - addProperty( dataMap, "channelLayout", &AudioProperties::getChannelLayout ); - addProperty( dataMap, "channelName", &AudioProperties::getChannelName ); - addProperty( dataMap, "channelDescription", &AudioProperties::getChannelDescription ); - addProperty( dataMap, "ticksPerFrame", &AudioProperties::getTicksPerFrame ); - addProperty( dataMap, "timeBase", &AudioProperties::getTimeBase ); - addProperty( dataMap, "duration", &AudioProperties::getDuration ); +PropertyVector AudioProperties::getPropertiesAsVector() const +{ + PropertyVector data; + + addProperty( data, "streamId", &AudioProperties::getStreamId ); + addProperty( data, "codecId", &AudioProperties::getCodecId ); + addProperty( data, "codecName", &AudioProperties::getCodecName ); + addProperty( data, "codecLongName", &AudioProperties::getCodecLongName ); + addProperty( data, "sampleFormatName", &AudioProperties::getSampleFormatName ); + addProperty( data, "sampleFormatLongName", &AudioProperties::getSampleFormatLongName ); + addProperty( data, "sampleRate", &AudioProperties::getSampleRate ); + addProperty( data, "bitRate", &AudioProperties::getBitRate ); + addProperty( data, "nbSamples", &AudioProperties::getNbSamples ); + addProperty( data, "channels", &AudioProperties::getChannels ); + addProperty( data, "channelLayout", &AudioProperties::getChannelLayout ); + addProperty( data, "channelName", &AudioProperties::getChannelName ); + addProperty( data, "channelDescription", &AudioProperties::getChannelDescription ); + addProperty( data, "ticksPerFrame", &AudioProperties::getTicksPerFrame ); + addProperty( data, "timeBase", &AudioProperties::getTimeBase ); + addProperty( data, "duration", &AudioProperties::getDuration ); for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex ) { - detail::add( dataMap, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); + detail::add( data, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); } - return dataMap; + return data; } } diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.hpp b/src/AvTranscoder/mediaProperty/AudioProperties.hpp index 54805c33..a55d9206 100644 --- a/src/AvTranscoder/mediaProperty/AudioProperties.hpp +++ b/src/AvTranscoder/mediaProperty/AudioProperties.hpp @@ -35,27 +35,27 @@ class AvExport AudioProperties Rational getTimeBase() const; double getDuration() const; - PropertiesMap& getMetadatas() { return _metadatas; } + PropertyVector& getMetadatas() { return _metadatas; } #ifndef SWIG const AVFormatContext& getAVFormatContext() { return *_formatContext; } AVCodecContext& getAVCodecContext() { return *_codecContext; } #endif - PropertiesMap getPropertiesAsMap() const; ///< Return all audio properties as a map (name of property: value) + PropertyVector getPropertiesAsVector() const; ///< Return all audio properties as a vector (name of property: value) private: #ifndef SWIG template - void addProperty( PropertiesMap& dataMap, const std::string& key, T (AudioProperties::*getter)(void) const ) const + void addProperty( PropertyVector& data, const std::string& key, T (AudioProperties::*getter)(void) const ) const { try { - detail::add( dataMap, key, (this->*getter)() ); + detail::add( data, key, (this->*getter)() ); } catch( const std::exception& e ) { - detail::add( dataMap, key, e.what() ); + detail::add( data, key, e.what() ); } } #endif @@ -66,7 +66,7 @@ class AvExport AudioProperties AVCodec* _codec; ///< Has link (no ownership) size_t _streamIndex; - PropertiesMap _metadatas; + PropertyVector _metadatas; }; } diff --git a/src/AvTranscoder/mediaProperty/DataProperties.cpp b/src/AvTranscoder/mediaProperty/DataProperties.cpp index fb876a5d..763278d9 100644 --- a/src/AvTranscoder/mediaProperty/DataProperties.cpp +++ b/src/AvTranscoder/mediaProperty/DataProperties.cpp @@ -29,25 +29,25 @@ size_t DataProperties::getStreamId() const return _formatContext->streams[_streamIndex]->id; } -PropertiesMap DataProperties::getPropertiesAsMap() const +PropertyVector DataProperties::getPropertiesAsVector() const { - PropertiesMap dataMap; + PropertyVector data; try { - detail::add( dataMap, "streamId", getStreamId() ); + detail::add( data, "streamId", getStreamId() ); } catch( const std::exception& e ) { - detail::add( dataMap, "streamId", e.what() ); + detail::add( data, "streamId", e.what() ); } for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex ) { - detail::add( dataMap, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); + detail::add( data, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); } - return dataMap; + return data; } void DataProperties::detectAncillaryData() diff --git a/src/AvTranscoder/mediaProperty/DataProperties.hpp b/src/AvTranscoder/mediaProperty/DataProperties.hpp index 53ae480a..b6b4b463 100644 --- a/src/AvTranscoder/mediaProperty/DataProperties.hpp +++ b/src/AvTranscoder/mediaProperty/DataProperties.hpp @@ -15,13 +15,13 @@ class AvExport DataProperties size_t getStreamIndex() const { return _streamIndex; } size_t getStreamId() const; - PropertiesMap& getMetadatas() { return _metadatas; } + PropertyVector& getMetadatas() { return _metadatas; } #ifndef SWIG const AVFormatContext& getAVFormatContext() { return *_formatContext; } #endif - PropertiesMap getPropertiesAsMap() const; ///< Return all data properties as a map (name of property: value) + PropertyVector getPropertiesAsVector() const; ///< Return all data properties as a vector (name of property: value) private: void detectAncillaryData(); @@ -30,7 +30,7 @@ class AvExport DataProperties const AVFormatContext* _formatContext; ///< Has link (no ownership) size_t _streamIndex; - PropertiesMap _metadatas; + PropertyVector _metadatas; }; } diff --git a/src/AvTranscoder/mediaProperty/FileProperties.cpp b/src/AvTranscoder/mediaProperty/FileProperties.cpp index 76a87c7e..14870dd9 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.cpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.cpp @@ -129,33 +129,33 @@ size_t FileProperties::getNbStreams() const return _formatContext->nb_streams; } -PropertiesMap FileProperties::getPropertiesAsMap() const +PropertyVector FileProperties::getPropertiesAsVector() const { - PropertiesMap dataMap; + PropertyVector data; - addProperty( dataMap, "filename", &FileProperties::getFilename ); - addProperty( dataMap, "formatName", &FileProperties::getFormatName ); - addProperty( dataMap, "formatLongName", &FileProperties::getFormatLongName ); + addProperty( data, "filename", &FileProperties::getFilename ); + addProperty( data, "formatName", &FileProperties::getFormatName ); + addProperty( data, "formatLongName", &FileProperties::getFormatLongName ); - addProperty( dataMap, "startTime", &FileProperties::getStartTime ); - addProperty( dataMap, "duration", &FileProperties::getDuration ); - addProperty( dataMap, "bitrate", &FileProperties::getBitRate ); - addProperty( dataMap, "numberOfStreams", &FileProperties::getNbStreams ); - addProperty( dataMap, "numberOfPrograms", &FileProperties::getProgramsCount ); + addProperty( data, "startTime", &FileProperties::getStartTime ); + addProperty( data, "duration", &FileProperties::getDuration ); + addProperty( data, "bitrate", &FileProperties::getBitRate ); + addProperty( data, "numberOfStreams", &FileProperties::getNbStreams ); + addProperty( data, "numberOfPrograms", &FileProperties::getProgramsCount ); - detail::add( dataMap, "numberOfVideoStreams", getNbVideoStreams() ); - detail::add( dataMap, "numberOfAudioStreams", getNbAudioStreams() ); - detail::add( dataMap, "numberOfDataStreams", getNbDataStreams() ); - detail::add( dataMap, "numberOfSubtitleStreams", getNbSubtitleStreams() ); - detail::add( dataMap, "numberOfAttachementStreams", getNbAttachementStreams() ); - detail::add( dataMap, "numberOfUnknownStreams", getNbUnknownStreams() ); + detail::add( data, "numberOfVideoStreams", getNbVideoStreams() ); + detail::add( data, "numberOfAudioStreams", getNbAudioStreams() ); + detail::add( data, "numberOfDataStreams", getNbDataStreams() ); + detail::add( data, "numberOfSubtitleStreams", getNbSubtitleStreams() ); + detail::add( data, "numberOfAttachementStreams", getNbAttachementStreams() ); + detail::add( data, "numberOfUnknownStreams", getNbUnknownStreams() ); for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex ) { - detail::add( dataMap, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); + detail::add( data, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); } - return dataMap; + return data; } void FileProperties::clearStreamProperties() diff --git a/src/AvTranscoder/mediaProperty/FileProperties.hpp b/src/AvTranscoder/mediaProperty/FileProperties.hpp index 98dc1ce7..82747b1f 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.hpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.hpp @@ -32,7 +32,7 @@ class AvExport FileProperties size_t getBitRate() const; ///< total stream bitrate in bit/s, 0 if not available (result of a computation by ffmpeg) size_t getPacketSize() const; - PropertiesMap& getMetadatas() { return _metadatas; } + PropertyVector& getMetadatas() { return _metadatas; } size_t getNbStreams() const; size_t getNbVideoStreams() const { return _videoStreams.size(); } @@ -72,22 +72,22 @@ class AvExport FileProperties const std::vector< avtranscoder::UnknownProperties >& getUnknownPropertiesProperties() const { return _unknownStreams; } #endif - PropertiesMap getPropertiesAsMap() const; ///< Return all file properties as a map (name of property: value) + PropertyVector getPropertiesAsVector() const; ///< Return all file properties as a vector (name of property: value) void clearStreamProperties(); ///< Clear all array of stream properties private: #ifndef SWIG template - void addProperty( PropertiesMap& dataMap, const std::string& key, T (FileProperties::*getter)(void) const ) const + void addProperty( PropertyVector& data, const std::string& key, T (FileProperties::*getter)(void) const ) const { try { - detail::add( dataMap, key, (this->*getter)() ); + detail::add( data, key, (this->*getter)() ); } catch( const std::exception& e ) { - detail::add( dataMap, key, e.what() ); + detail::add( data, key, e.what() ); } } #endif @@ -102,7 +102,7 @@ class AvExport FileProperties std::vector< AttachementProperties > _attachementStreams; ///< Array of properties per attachement stream std::vector< UnknownProperties > _unknownStreams; ///< Array of properties per unknown stream - PropertiesMap _metadatas; + PropertyVector _metadatas; }; } diff --git a/src/AvTranscoder/mediaProperty/PixelProperties.cpp b/src/AvTranscoder/mediaProperty/PixelProperties.cpp index f18fa7a8..e476c435 100644 --- a/src/AvTranscoder/mediaProperty/PixelProperties.cpp +++ b/src/AvTranscoder/mediaProperty/PixelProperties.cpp @@ -223,16 +223,16 @@ std::vector PixelProperties::getChannels() const return channels; } -PropertiesMap PixelProperties::getPropertiesAsMap() const +PropertyVector PixelProperties::getPropertiesAsVector() const { - PropertiesMap dataMap; + PropertyVector data; - addProperty( dataMap, "pixelName", &PixelProperties::getPixelName ); - addProperty( dataMap, "pixelFormatName", &PixelProperties::getPixelFormatName ); - addProperty( dataMap, "bitDepth", &PixelProperties::getBitsPerPixel ); - addProperty( dataMap, "nbComponents", &PixelProperties::getNbComponents ); - addProperty( dataMap, "chromaWidth", &PixelProperties::getChromaWidth ); - addProperty( dataMap, "chromaHeight", &PixelProperties::getChromaHeight ); + addProperty( data, "pixelName", &PixelProperties::getPixelName ); + addProperty( data, "pixelFormatName", &PixelProperties::getPixelFormatName ); + addProperty( data, "bitDepth", &PixelProperties::getBitsPerPixel ); + addProperty( data, "nbComponents", &PixelProperties::getNbComponents ); + addProperty( data, "chromaWidth", &PixelProperties::getChromaWidth ); + addProperty( data, "chromaHeight", &PixelProperties::getChromaHeight ); try { @@ -255,11 +255,11 @@ PropertiesMap PixelProperties::getPropertiesAsMap() const colorComponents = "YUV"; break; } - detail::add( dataMap, "colorComponents", colorComponents ); + detail::add( data, "colorComponents", colorComponents ); } catch( const std::exception& e ) { - detail::add( dataMap, "colorComponents", e.what() ); + detail::add( data, "colorComponents", e.what() ); } try @@ -286,21 +286,21 @@ PropertiesMap PixelProperties::getPropertiesAsMap() const subsampling = "None"; break; } - detail::add( dataMap, "subsampling", subsampling ); + detail::add( data, "subsampling", subsampling ); } catch( const std::exception& e ) { - detail::add( dataMap, "subsampling", e.what() ); + detail::add( data, "subsampling", e.what() ); } - addProperty( dataMap, "isBigEndian", &PixelProperties::isBigEndian ); - addProperty( dataMap, "hasAlpha", &PixelProperties::hasAlpha ); - addProperty( dataMap, "isPlanar", &PixelProperties::isPlanar ); - addProperty( dataMap, "isIndexedColors", &PixelProperties::isIndexedColors ); - addProperty( dataMap, "bitWiseAcked", &PixelProperties::isBitWisePacked ); - addProperty( dataMap, "isHardwareAccelerated", &PixelProperties::isHardwareAccelerated ); - addProperty( dataMap, "rgbPixel", &PixelProperties::isRgbPixelData ); - addProperty( dataMap, "isPseudoPaletted", &PixelProperties::isPseudoPaletted ); + addProperty( data, "isBigEndian", &PixelProperties::isBigEndian ); + addProperty( data, "hasAlpha", &PixelProperties::hasAlpha ); + addProperty( data, "isPlanar", &PixelProperties::isPlanar ); + addProperty( data, "isIndexedColors", &PixelProperties::isIndexedColors ); + addProperty( data, "bitWiseAcked", &PixelProperties::isBitWisePacked ); + addProperty( data, "isHardwareAccelerated", &PixelProperties::isHardwareAccelerated ); + addProperty( data, "rgbPixel", &PixelProperties::isRgbPixelData ); + addProperty( data, "isPseudoPaletted", &PixelProperties::isPseudoPaletted ); try { @@ -315,15 +315,15 @@ PropertiesMap PixelProperties::getPropertiesAsMap() const channelValue << " - "; channelValue << "bitStep " << channels.at( channelIndex ).bitStep; - detail::add( dataMap, channelName.str(), channelValue.str() ); + detail::add( data, channelName.str(), channelValue.str() ); } } catch( const std::exception& e ) { - detail::add( dataMap, "channels", e.what() ); + detail::add( data, "channels", e.what() ); } - return dataMap; + return data; } } diff --git a/src/AvTranscoder/mediaProperty/PixelProperties.hpp b/src/AvTranscoder/mediaProperty/PixelProperties.hpp index b94b3d5d..945fd1db 100644 --- a/src/AvTranscoder/mediaProperty/PixelProperties.hpp +++ b/src/AvTranscoder/mediaProperty/PixelProperties.hpp @@ -79,22 +79,22 @@ class AvExport PixelProperties const AVPixFmtDescriptor* getAVPixFmtDescriptor() const { return _pixelDesc; } #endif - PropertiesMap getPropertiesAsMap() const; ///< Return all pixel properties as a map (name of property: value) + PropertyVector getPropertiesAsVector() const; ///< Return all pixel properties as a vector (name of property: value) private: void init( const AVPixelFormat avPixelFormat ); #ifndef SWIG template - void addProperty( PropertiesMap& dataMap, const std::string& key, T (PixelProperties::*getter)(void) const ) const + void addProperty( PropertyVector& data, const std::string& key, T (PixelProperties::*getter)(void) const ) const { try { - detail::add( dataMap, key, (this->*getter)() ); + detail::add( data, key, (this->*getter)() ); } catch( const std::exception& e ) { - detail::add( dataMap, key, e.what() ); + detail::add( data, key, e.what() ); } } #endif diff --git a/src/AvTranscoder/mediaProperty/SubtitleProperties.cpp b/src/AvTranscoder/mediaProperty/SubtitleProperties.cpp index e4aa15ad..ac83fa75 100644 --- a/src/AvTranscoder/mediaProperty/SubtitleProperties.cpp +++ b/src/AvTranscoder/mediaProperty/SubtitleProperties.cpp @@ -20,25 +20,25 @@ size_t SubtitleProperties::getStreamId() const return _formatContext->streams[_streamIndex]->id; } -PropertiesMap SubtitleProperties::getPropertiesAsMap() const +PropertyVector SubtitleProperties::getPropertiesAsVector() const { - PropertiesMap dataMap; + PropertyVector data; try { - detail::add( dataMap, "streamId", getStreamId() ); + detail::add( data, "streamId", getStreamId() ); } catch( const std::exception& e ) { - detail::add( dataMap, "streamId", e.what() ); + detail::add( data, "streamId", e.what() ); } for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex ) { - detail::add( dataMap, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); + detail::add( data, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); } - return dataMap; + return data; } } diff --git a/src/AvTranscoder/mediaProperty/SubtitleProperties.hpp b/src/AvTranscoder/mediaProperty/SubtitleProperties.hpp index 96816d80..f0d1751b 100644 --- a/src/AvTranscoder/mediaProperty/SubtitleProperties.hpp +++ b/src/AvTranscoder/mediaProperty/SubtitleProperties.hpp @@ -15,19 +15,19 @@ class AvExport SubtitleProperties size_t getStreamIndex() const { return _streamIndex; } size_t getStreamId() const; - PropertiesMap& getMetadatas() { return _metadatas; } + PropertyVector& getMetadatas() { return _metadatas; } #ifndef SWIG const AVFormatContext& getAVFormatContext() { return *_formatContext; } #endif - PropertiesMap getPropertiesAsMap() const; ///< Return all subtitle properties as a map (name of property: value) + PropertyVector getPropertiesAsVector() const; ///< Return all subtitle properties as a vector (name of property: value) private: const AVFormatContext* _formatContext; ///< Has link (no ownership) size_t _streamIndex; - PropertiesMap _metadatas; + PropertyVector _metadatas; }; } diff --git a/src/AvTranscoder/mediaProperty/UnknownProperties.cpp b/src/AvTranscoder/mediaProperty/UnknownProperties.cpp index ce80113b..61595690 100644 --- a/src/AvTranscoder/mediaProperty/UnknownProperties.cpp +++ b/src/AvTranscoder/mediaProperty/UnknownProperties.cpp @@ -20,25 +20,25 @@ size_t UnknownProperties::getStreamId() const return _formatContext->streams[_streamIndex]->id; } -PropertiesMap UnknownProperties::getPropertiesAsMap() const +PropertyVector UnknownProperties::getPropertiesAsVector() const { - PropertiesMap dataMap; + PropertyVector data; try { - detail::add( dataMap, "streamId", getStreamId() ); + detail::add( data, "streamId", getStreamId() ); } catch( const std::exception& e ) { - detail::add( dataMap, "streamId", e.what() ); + detail::add( data, "streamId", e.what() ); } for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex ) { - detail::add( dataMap, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); + detail::add( data, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); } - return dataMap; + return data; } } diff --git a/src/AvTranscoder/mediaProperty/UnknownProperties.hpp b/src/AvTranscoder/mediaProperty/UnknownProperties.hpp index 91f83351..2604b50b 100644 --- a/src/AvTranscoder/mediaProperty/UnknownProperties.hpp +++ b/src/AvTranscoder/mediaProperty/UnknownProperties.hpp @@ -15,19 +15,19 @@ class AvExport UnknownProperties size_t getStreamIndex() const { return _streamIndex; } size_t getStreamId() const; - PropertiesMap& getMetadatas() { return _metadatas; } + PropertyVector& getMetadatas() { return _metadatas; } #ifndef SWIG const AVFormatContext& getAVFormatContext() { return *_formatContext; } #endif - PropertiesMap getPropertiesAsMap() const; ///< Return unknown properties as a map (name of property: value) + PropertyVector getPropertiesAsVector() const; ///< Return unknown properties as a vector (name of property: value) private: const AVFormatContext* _formatContext; ///< Has link (no ownership) size_t _streamIndex; - PropertiesMap _metadatas; + PropertyVector _metadatas; }; } diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.cpp b/src/AvTranscoder/mediaProperty/VideoProperties.cpp index 7e522ce4..fc678d59 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.cpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.cpp @@ -637,40 +637,40 @@ void VideoProperties::analyseGopStructure( IProgress& progress ) } } -PropertiesMap VideoProperties::getPropertiesAsMap() const -{ - PropertiesMap dataMap; - - addProperty( dataMap, "streamId", &VideoProperties::getStreamId ); - addProperty( dataMap, "codecId", &VideoProperties::getCodecId ); - addProperty( dataMap, "codecName", &VideoProperties::getCodecName ); - addProperty( dataMap, "codecLongName", &VideoProperties::getCodecLongName ); - addProperty( dataMap, "profile", &VideoProperties::getProfile ); - addProperty( dataMap, "profileName", &VideoProperties::getProfileName ); - addProperty( dataMap, "level", &VideoProperties::getLevel ); - addProperty( dataMap, "startTimecode", &VideoProperties::getStartTimecodeString ); - addProperty( dataMap, "width", &VideoProperties::getWidth ); - addProperty( dataMap, "height", &VideoProperties::getHeight ); - addProperty( dataMap, "pixelAspectRatio", &VideoProperties::getSar ); - addProperty( dataMap, "displayAspectRatio", &VideoProperties::getDar ); - addProperty( dataMap, "dtgActiveFormat", &VideoProperties::getDtgActiveFormat ); - addProperty( dataMap, "colorTransfert", &VideoProperties::getColorTransfert ); - addProperty( dataMap, "colorspace", &VideoProperties::getColorspace ); - addProperty( dataMap, "colorRange", &VideoProperties::getColorRange ); - addProperty( dataMap, "colorPrimaries", &VideoProperties::getColorPrimaries ); - addProperty( dataMap, "chromaSampleLocation", &VideoProperties::getChromaSampleLocation ); - addProperty( dataMap, "interlaced ", &VideoProperties::isInterlaced ); - addProperty( dataMap, "topFieldFirst", &VideoProperties::isTopFieldFirst ); - addProperty( dataMap, "fieldOrder", &VideoProperties::getFieldOrder ); - addProperty( dataMap, "timeBase", &VideoProperties::getTimeBase ); - addProperty( dataMap, "duration", &VideoProperties::getDuration ); - addProperty( dataMap, "fps", &VideoProperties::getFps ); - addProperty( dataMap, "nbFrame", &VideoProperties::getNbFrames ); - addProperty( dataMap, "ticksPerFrame", &VideoProperties::getTicksPerFrame ); - addProperty( dataMap, "bitRate", &VideoProperties::getBitRate ); - addProperty( dataMap, "maxBitRate", &VideoProperties::getMaxBitRate ); - addProperty( dataMap, "minBitRate", &VideoProperties::getMinBitRate ); - addProperty( dataMap, "gopSize", &VideoProperties::getGopSize ); +PropertyVector VideoProperties::getPropertiesAsVector() const +{ + PropertyVector data; + + addProperty( data, "streamId", &VideoProperties::getStreamId ); + addProperty( data, "codecId", &VideoProperties::getCodecId ); + addProperty( data, "codecName", &VideoProperties::getCodecName ); + addProperty( data, "codecLongName", &VideoProperties::getCodecLongName ); + addProperty( data, "profile", &VideoProperties::getProfile ); + addProperty( data, "profileName", &VideoProperties::getProfileName ); + addProperty( data, "level", &VideoProperties::getLevel ); + addProperty( data, "startTimecode", &VideoProperties::getStartTimecodeString ); + addProperty( data, "width", &VideoProperties::getWidth ); + addProperty( data, "height", &VideoProperties::getHeight ); + addProperty( data, "pixelAspectRatio", &VideoProperties::getSar ); + addProperty( data, "displayAspectRatio", &VideoProperties::getDar ); + addProperty( data, "dtgActiveFormat", &VideoProperties::getDtgActiveFormat ); + addProperty( data, "colorTransfert", &VideoProperties::getColorTransfert ); + addProperty( data, "colorspace", &VideoProperties::getColorspace ); + addProperty( data, "colorRange", &VideoProperties::getColorRange ); + addProperty( data, "colorPrimaries", &VideoProperties::getColorPrimaries ); + addProperty( data, "chromaSampleLocation", &VideoProperties::getChromaSampleLocation ); + addProperty( data, "interlaced ", &VideoProperties::isInterlaced ); + addProperty( data, "topFieldFirst", &VideoProperties::isTopFieldFirst ); + addProperty( data, "fieldOrder", &VideoProperties::getFieldOrder ); + addProperty( data, "timeBase", &VideoProperties::getTimeBase ); + addProperty( data, "duration", &VideoProperties::getDuration ); + addProperty( data, "fps", &VideoProperties::getFps ); + addProperty( data, "nbFrame", &VideoProperties::getNbFrames ); + addProperty( data, "ticksPerFrame", &VideoProperties::getTicksPerFrame ); + addProperty( data, "bitRate", &VideoProperties::getBitRate ); + addProperty( data, "maxBitRate", &VideoProperties::getMaxBitRate ); + addProperty( data, "minBitRate", &VideoProperties::getMinBitRate ); + addProperty( data, "gopSize", &VideoProperties::getGopSize ); std::string gop; for( size_t frameIndex = 0; frameIndex < _gopStructure.size(); ++frameIndex ) @@ -678,22 +678,22 @@ PropertiesMap VideoProperties::getPropertiesAsMap() const gop += _gopStructure.at( frameIndex ).first; gop += " "; } - detail::add( dataMap, "gop", gop ); - //detail::add( dataMap, "isClosedGop", isClosedGop() ); + detail::add( data, "gop", gop ); + //detail::add( data, "isClosedGop", isClosedGop() ); - addProperty( dataMap, "hasBFrames", &VideoProperties::hasBFrames ); - addProperty( dataMap, "referencesFrames", &VideoProperties::getReferencesFrames ); + addProperty( data, "hasBFrames", &VideoProperties::hasBFrames ); + addProperty( data, "referencesFrames", &VideoProperties::getReferencesFrames ); for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex ) { - detail::add( dataMap, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); + detail::add( data, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); } // Add properties of the pixel - PropertiesMap pixelProperties = _pixelProperties.getPropertiesAsMap(); - dataMap.insert( dataMap.end(), pixelProperties.begin(), pixelProperties.end() ); + PropertyVector pixelProperties = _pixelProperties.getPropertiesAsVector(); + data.insert( data.end(), pixelProperties.begin(), pixelProperties.end() ); - return dataMap; + return data; } } diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.hpp b/src/AvTranscoder/mediaProperty/VideoProperties.hpp index 22bc4f03..256ea93f 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.hpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.hpp @@ -75,7 +75,7 @@ class AvExport VideoProperties std::vector< std::pair< char, bool > > getGopStructure() const { return _gopStructure; } //@} - PropertiesMap& getMetadatas() { return _metadatas; } + PropertyVector& getMetadatas() { return _metadatas; } #ifndef SWIG const AVFormatContext& getAVFormatContext() { return *_formatContext; } @@ -83,7 +83,7 @@ class AvExport VideoProperties const PixelProperties& getPixelProperties() const { return _pixelProperties; } #endif - PropertiesMap getPropertiesAsMap() const; ///< Return all video and pixel properties as a map (name of property: value) + PropertyVector getPropertiesAsVector() const; ///< Return all video and pixel properties as a vector (name of property: value) private: /** @@ -94,15 +94,15 @@ class AvExport VideoProperties #ifndef SWIG template - void addProperty( PropertiesMap& dataMap, const std::string& key, T (VideoProperties::*getter)(void) const ) const + void addProperty( PropertyVector& dataVector, const std::string& key, T (VideoProperties::*getter)(void) const ) const { try { - detail::add( dataMap, key, (this->*getter)() ); + detail::add( dataVector, key, (this->*getter)() ); } catch( const std::exception& e ) { - detail::add( dataMap, key, e.what() ); + detail::add( dataVector, key, e.what() ); } } #endif @@ -120,7 +120,7 @@ class AvExport VideoProperties bool _isTopFieldFirst; std::vector< std::pair< char, bool > > _gopStructure; //@} - PropertiesMap _metadatas; + PropertyVector _metadatas; }; } diff --git a/src/AvTranscoder/mediaProperty/print.hpp b/src/AvTranscoder/mediaProperty/print.hpp index f9c96324..05399ec8 100644 --- a/src/AvTranscoder/mediaProperty/print.hpp +++ b/src/AvTranscoder/mediaProperty/print.hpp @@ -19,8 +19,8 @@ std::ostream& operator<<( std::ostream& flux, const FileProperties& fileProperti flux << std::left; flux << separator << " Wrapper " << separator << std::endl; - PropertiesMap properties = fileProperties.getPropertiesAsMap(); - for( PropertiesMap::iterator it = properties.begin(); it != properties.end(); ++it ) + PropertyVector properties = fileProperties.getPropertiesAsVector(); + for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; } @@ -33,8 +33,8 @@ std::ostream& operator<<( std::ostream& flux, const VideoProperties& videoProper flux << std::left; flux << separator << " Video stream " << separator << std::endl; - PropertiesMap properties = videoProperties.getPropertiesAsMap(); - for( PropertiesMap::iterator it = properties.begin(); it != properties.end(); ++it ) + PropertyVector properties = videoProperties.getPropertiesAsVector(); + for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; } @@ -47,8 +47,8 @@ std::ostream& operator<<( std::ostream& flux, const AudioProperties& audioProper flux << std::left; flux << separator << " Audio stream " << separator << std::endl; - PropertiesMap properties = audioProperties.getPropertiesAsMap(); - for( PropertiesMap::iterator it = properties.begin(); it != properties.end(); ++it ) + PropertyVector properties = audioProperties.getPropertiesAsVector(); + for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; } @@ -60,8 +60,8 @@ std::ostream& operator<<( std::ostream& flux, const DataProperties& dataProperti { flux << separator << " Data stream " << separator << std::endl; - PropertiesMap properties = dataProperties.getPropertiesAsMap(); - for( PropertiesMap::iterator it = properties.begin(); it != properties.end(); ++it ) + PropertyVector properties = dataProperties.getPropertiesAsVector(); + for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; } @@ -73,8 +73,8 @@ std::ostream& operator<<( std::ostream& flux, const SubtitleProperties& subtitle { flux << separator << " Subtitle stream " << separator << std::endl; - PropertiesMap properties = subtitleProperties.getPropertiesAsMap(); - for( PropertiesMap::iterator it = properties.begin(); it != properties.end(); ++it ) + PropertyVector properties = subtitleProperties.getPropertiesAsVector(); + for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; } @@ -86,8 +86,8 @@ std::ostream& operator<<( std::ostream& flux, const AttachementProperties& attac { flux << separator << " Attachement stream " << separator << std::endl; - PropertiesMap properties = attachementProperties.getPropertiesAsMap(); - for( PropertiesMap::iterator it = properties.begin(); it != properties.end(); ++it ) + PropertyVector properties = attachementProperties.getPropertiesAsVector(); + for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; } @@ -99,8 +99,8 @@ std::ostream& operator<<( std::ostream& flux, const UnknownProperties& unknownPr { flux << separator << " Unknown stream " << separator << std::endl; - PropertiesMap properties = unknownProperties.getPropertiesAsMap(); - for( PropertiesMap::iterator it = properties.begin(); it != properties.end(); ++it ) + PropertyVector properties = unknownProperties.getPropertiesAsVector(); + for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; } diff --git a/src/AvTranscoder/mediaProperty/util.cpp b/src/AvTranscoder/mediaProperty/util.cpp index 1f752e57..7be54102 100644 --- a/src/AvTranscoder/mediaProperty/util.cpp +++ b/src/AvTranscoder/mediaProperty/util.cpp @@ -9,24 +9,24 @@ namespace detail { template<> -void add( PropertiesMap& propertiesMap, const std::string& key, const std::string& value ) +void add( PropertyVector& propertyVector, const std::string& key, const std::string& value ) { - propertiesMap.push_back( std::make_pair( key, value ) ); + propertyVector.push_back( std::make_pair( key, value ) ); } template<> -void add( PropertiesMap& propertiesMap, const std::string& key, const bool& value ) +void add( PropertyVector& propertyVector, const std::string& key, const bool& value ) { - add( propertiesMap, key, value ? "True" : "False" ); + add( propertyVector, key, value ? "True" : "False" ); } template<> -void add( PropertiesMap& propertiesMap, const std::string& key, const Rational& value ) +void add( PropertyVector& propertyVector, const std::string& key, const Rational& value ) { - add( propertiesMap, key, value.num / (double) value.den ); + add( propertyVector, key, value.num / (double) value.den ); } -void fillMetadataDictionnary( AVDictionary* avdictionnary, PropertiesMap& metadata ) +void fillMetadataDictionnary( AVDictionary* avdictionnary, PropertyVector& metadata ) { AVDictionaryEntry* tag = NULL; while( ( tag = av_dict_get( avdictionnary, "", tag, AV_DICT_IGNORE_SUFFIX ) ) ) diff --git a/src/AvTranscoder/mediaProperty/util.hpp b/src/AvTranscoder/mediaProperty/util.hpp index 0e49e9a8..ecc41a33 100644 --- a/src/AvTranscoder/mediaProperty/util.hpp +++ b/src/AvTranscoder/mediaProperty/util.hpp @@ -16,34 +16,34 @@ namespace avtranscoder { /** - * @brief PropertyMap is a vector of pair, because the order of properties matters to us. + * @brief PropertyVector is a vector of pair, because the order of properties matters to us. */ -typedef std::vector< std::pair > PropertiesMap; +typedef std::vector< std::pair > PropertyVector; namespace detail { template -void add( PropertiesMap& propertiesMap, const std::string& key, const T& value ) +void add( PropertyVector& propertyVector, const std::string& key, const T& value ) { std::stringstream ss; ss << value; - add( propertiesMap, key, ss.str() ); + add( propertyVector, key, ss.str() ); } template<> -void add( PropertiesMap& propertiesMap, const std::string& key, const std::string& value ); +void add( PropertyVector& propertyVector, const std::string& key, const std::string& value ); template<> -void add( PropertiesMap& propertiesMap, const std::string& key, const bool& value ); +void add( PropertyVector& propertyVector, const std::string& key, const bool& value ); template<> -void add( PropertiesMap& propertiesMap, const std::string& key, const Rational& value ); +void add( PropertyVector& propertyVector, const std::string& key, const Rational& value ); /** * @brief Fill metadata parameter with the given AVDictionary. */ -void AvExport fillMetadataDictionnary( AVDictionary* avdictionnary, PropertiesMap& metadata ); +void AvExport fillMetadataDictionnary( AVDictionary* avdictionnary, PropertyVector& metadata ); } From a5ceb7f64751875e843305aa6318a49550b23ef1 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 1 Apr 2015 18:34:03 +0200 Subject: [PATCH 09/34] mediaProperty: can get video and audio properties by a vector or a map Fix #141 --- .../mediaProperty/AudioProperties.cpp | 15 +++++++++++++++ .../mediaProperty/AudioProperties.hpp | 3 ++- .../mediaProperty/VideoProperties.cpp | 15 +++++++++++++++ .../mediaProperty/VideoProperties.hpp | 3 ++- src/AvTranscoder/mediaProperty/util.hpp | 2 ++ 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.cpp b/src/AvTranscoder/mediaProperty/AudioProperties.cpp index 2bdefaa0..80802df1 100644 --- a/src/AvTranscoder/mediaProperty/AudioProperties.cpp +++ b/src/AvTranscoder/mediaProperty/AudioProperties.cpp @@ -231,4 +231,19 @@ PropertyVector AudioProperties::getPropertiesAsVector() const return data; } +PropertyMap AudioProperties::getPropertiesAsMap() const +{ + PropertyMap dataMap; + + PropertyVector dataVector( getPropertiesAsVector() ); + for( PropertyVector::const_iterator it = dataVector.begin(); + it != dataVector.end(); + ++it ) + { + dataMap.insert( std::make_pair( it->first, it->second ) ); + } + + return dataMap; +} + } diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.hpp b/src/AvTranscoder/mediaProperty/AudioProperties.hpp index a55d9206..2c7b258d 100644 --- a/src/AvTranscoder/mediaProperty/AudioProperties.hpp +++ b/src/AvTranscoder/mediaProperty/AudioProperties.hpp @@ -42,7 +42,8 @@ class AvExport AudioProperties AVCodecContext& getAVCodecContext() { return *_codecContext; } #endif - PropertyVector getPropertiesAsVector() const; ///< Return all audio properties as a vector (name of property: value) + PropertyMap getPropertiesAsMap() const; ///< Return all audio properties as a map (name of property, value) + PropertyVector getPropertiesAsVector() const; ///< Same data with a specific order private: #ifndef SWIG diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.cpp b/src/AvTranscoder/mediaProperty/VideoProperties.cpp index fc678d59..7ccad12b 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.cpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.cpp @@ -696,4 +696,19 @@ PropertyVector VideoProperties::getPropertiesAsVector() const return data; } +PropertyMap VideoProperties::getPropertiesAsMap() const +{ + PropertyMap dataMap; + + PropertyVector dataVector( getPropertiesAsVector() ); + for( PropertyVector::const_iterator it = dataVector.begin(); + it != dataVector.end(); + ++it ) + { + dataMap.insert( std::make_pair( it->first, it->second ) ); + } + + return dataMap; +} + } diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.hpp b/src/AvTranscoder/mediaProperty/VideoProperties.hpp index 256ea93f..79b2d32b 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.hpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.hpp @@ -83,7 +83,8 @@ class AvExport VideoProperties const PixelProperties& getPixelProperties() const { return _pixelProperties; } #endif - PropertyVector getPropertiesAsVector() const; ///< Return all video and pixel properties as a vector (name of property: value) + PropertyMap getPropertiesAsMap() const; ///< Return all video and pixel properties as a map (name of property, value) + PropertyVector getPropertiesAsVector() const; ///< Same data with a specific order private: /** diff --git a/src/AvTranscoder/mediaProperty/util.hpp b/src/AvTranscoder/mediaProperty/util.hpp index ecc41a33..69122fe6 100644 --- a/src/AvTranscoder/mediaProperty/util.hpp +++ b/src/AvTranscoder/mediaProperty/util.hpp @@ -9,6 +9,7 @@ extern "C" { #include #include +#include #include #include @@ -19,6 +20,7 @@ namespace avtranscoder * @brief PropertyVector is a vector of pair, because the order of properties matters to us. */ typedef std::vector< std::pair > PropertyVector; +typedef std::map< std::string, std::string > PropertyMap; namespace detail { From b66c7bc1b19414ffb794b6cf040c96b8bc939b20 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 2 Apr 2015 13:53:46 +0200 Subject: [PATCH 10/34] Transcoder: fix addInputFile check if stream isActivated --- src/AvTranscoder/transcoder/Transcoder.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/AvTranscoder/transcoder/Transcoder.cpp b/src/AvTranscoder/transcoder/Transcoder.cpp index 16705616..e5ae5f4f 100644 --- a/src/AvTranscoder/transcoder/Transcoder.cpp +++ b/src/AvTranscoder/transcoder/Transcoder.cpp @@ -345,7 +345,8 @@ InputFile* Transcoder::addInputFile( const std::string& filename, const size_t s for( std::vector< InputFile* >::iterator it = _inputFiles.begin(); it != _inputFiles.end(); ++it ) { - if( ( (*it)->getFilename() == filename ) ) + if( ( (*it)->getFilename() == filename ) && + ! (*it)->getStream( streamIndex ).isActivated() ) { referenceFile = (*it); LOG_DEBUG( "Get instance of InputFile from '" << filename << "'" ) From b493e58d16112a0054b775ec3012ec691eb37869 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Tue, 31 Mar 2015 17:02:42 +0200 Subject: [PATCH 11/34] CMake: set rpath of avtranscoder-python lib --- src/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ad05a7b6..ce6cf8db 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -94,6 +94,13 @@ if(SWIG_FOUND) set_target_properties(${SWIG_MODULE_avtranscoder-py_REAL_NAME} PROPERTIES SOVERSION ${AVTRANSCODER_VERSION_MAJOR}) set_target_properties(${SWIG_MODULE_avtranscoder-py_REAL_NAME} PROPERTIES VERSION ${AVTRANSCODER_VERSION}) endif() + # Force the library to look in the project lib folder relatively + set_target_properties(${SWIG_MODULE_avtranscoder-py_REAL_NAME} PROPERTIES INSTALL_RPATH_USE_LINK_PATH 1) + if(APPLE) + set_target_properties(${SWIG_MODULE_avtranscoder-py_REAL_NAME} PROPERTIES INSTALL_RPATH "@loader_path/../../..") + else() + set_target_properties(${SWIG_MODULE_avtranscoder-py_REAL_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN/../../..:$ORIGIN") + endif() swig_link_libraries(avtranscoder-py avtranscoder-shared ${PYTHON_LIBRARIES}) # Install python interface From dbd4c6ef82cc093067b6336f475976f8d2f55788 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 2 Apr 2015 14:56:08 +0200 Subject: [PATCH 12/34] CMake: deploy java libs in lib/java Force the library to look in the project lib folder relatively. --- src/CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ce6cf8db..0ed44259 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -141,6 +141,13 @@ if(SWIG_FOUND) set_target_properties(${SWIG_MODULE_avtranscoder-java_REAL_NAME} PROPERTIES SOVERSION ${AVTRANSCODER_VERSION_MAJOR}) set_target_properties(${SWIG_MODULE_avtranscoder-java_REAL_NAME} PROPERTIES VERSION ${AVTRANSCODER_VERSION}) endif() + # Force the library to look in the project lib folder relatively + set_target_properties(${SWIG_MODULE_avtranscoder-java_REAL_NAME} PROPERTIES INSTALL_RPATH_USE_LINK_PATH 1) + if(APPLE) + set_target_properties(${SWIG_MODULE_avtranscoder-java_REAL_NAME} PROPERTIES INSTALL_RPATH "@loader_path/..") + else() + set_target_properties(${SWIG_MODULE_avtranscoder-java_REAL_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN/..:$ORIGIN") + endif() swig_link_libraries(avtranscoder-java avtranscoder-shared) # Post build of java binding : compile java files (generate class files) and create jar @@ -158,7 +165,7 @@ if(SWIG_FOUND) ) # Install java lib and jar files - install(TARGETS ${SWIG_MODULE_avtranscoder-java_REAL_NAME} DESTINATION lib/) + install(TARGETS ${SWIG_MODULE_avtranscoder-java_REAL_NAME} DESTINATION "lib/java") install(FILES ${AVTRANSCODER_JAR_PATH}/${AVTRANSCODER_JAR_NAME} DESTINATION "share/java/") else() message("JAVA not found, will not build java binding.") From 629a7a87c91d710fa2414d94193554714682723f Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 2 Apr 2015 15:02:31 +0200 Subject: [PATCH 13/34] CMake: add build path in the linker search for avtranscoder shared library INSTALL_RPATH_USE_LINK_PATH is a boolean that if set to true will append directories in the linker search path and outside the project to the INSTALL_RPATH. --- src/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0ed44259..69958051 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -35,6 +35,7 @@ else() endif() set_target_properties(avtranscoder-shared PROPERTIES SOVERSION ${AVTRANSCODER_VERSION_MAJOR}) set_target_properties(avtranscoder-shared PROPERTIES VERSION ${AVTRANSCODER_VERSION}) +set_target_properties(avtranscoder-shared PROPERTIES INSTALL_RPATH_USE_LINK_PATH 1) target_link_libraries(avtranscoder-shared ${FFMPEG_LIBRARIES}) target_include_directories(avtranscoder-shared PUBLIC ${AVTRANSCODER_SRC_PATH} ${FFMPEG_INCLUDE_DIR}) From 1d1d9add94d6e43cb7cc951173128bd9461f573b Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 2 Apr 2015 15:05:19 +0200 Subject: [PATCH 14/34] Travis: clean PYTHONPATH before launch tests --- tools/travis.python.nosetests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/travis.python.nosetests.sh b/tools/travis.python.nosetests.sh index 4f235c43..d59cc745 100644 --- a/tools/travis.python.nosetests.sh +++ b/tools/travis.python.nosetests.sh @@ -1,7 +1,7 @@ #!/bin/bash # Get avtranscoder library -export PYTHONPATH=`pwd`/build/dist/lib:`pwd`/build/dist/lib/python2.7.6/site-packages/:$PYTHONPATH +export PYTHONPATH=`pwd`/build/dist/lib/python2.7.6/site-packages/:$PYTHONPATH # Get avtranscoder profiles export AVPROFILES=`pwd`/build/dist/share/ressource From 79e8bb9f17bd3496def79855fdf297bbb466db4e Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 2 Apr 2015 15:23:18 +0200 Subject: [PATCH 15/34] Travis: use matrix to build with ffmpeg/libav Fix #138 --- .travis.yml | 9 +++++++-- tools/travis.linux.install.deps.sh | 22 ++++++++++++++++------ tools/travis.osx.install.deps.sh | 8 +++++++- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9d565e17..f1dab5cb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,14 @@ +env: + matrix: + - DEPENDENCY_MODE=libav + - DEPENDENCY_MODE=ffmpeg + +language: cpp + os: - linux - osx -language: cpp - compiler: - gcc - clang diff --git a/tools/travis.linux.install.deps.sh b/tools/travis.linux.install.deps.sh index 534f08e2..c3af0376 100644 --- a/tools/travis.linux.install.deps.sh +++ b/tools/travis.linux.install.deps.sh @@ -10,9 +10,19 @@ sudo apt-get install -qq python-dev doxygen sudo apt-get install -qq freeglut3-dev libxmu-dev sudo apt-get install -qq python-nose -# Build FFmpeg 2.2.9 -sudo wget https://www.ffmpeg.org/releases/ffmpeg-2.2.9.tar.bz2 -sudo bunzip2 ffmpeg-2.2.9.tar.bz2 -sudo tar -xvf ffmpeg-2.2.9.tar -cd ffmpeg-2.2.9 -./configure --disable-yasm --enable-shared --disable-static && make && sudo make install +if [[ ${DEPENDENCY_MODE} == "ffmpeg" ]]; then + export FFMPEG_VERSION=2.2.9 + sudo wget https://www.ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 + sudo bunzip2 ffmpeg-${FFMPEG_VERSION}.tar.bz2 + sudo tar -xvf ffmpeg-${FFMPEG_VERSION}.tar + cd ffmpeg-${FFMPEG_VERSION} + sudo ./configure --disable-yasm --enable-shared --disable-static && sudo make && sudo make install + +elif [[ ${DEPENDENCY_MODE} == "libav" ]]; then + export LIBAV_VERSION=11.3 + sudo wget https://libav.org/releases/libav-${LIBAV_VERSION}.tar.gz + sudo tar -xvf libav-${LIBAV_VERSION}.tar.gz + cd libav-${LIBAV_VERSION} + sudo ./configure --disable-yasm --enable-shared --disable-static && sudo make && sudo make install + +fi diff --git a/tools/travis.osx.install.deps.sh b/tools/travis.osx.install.deps.sh index 1896b401..3c168552 100644 --- a/tools/travis.osx.install.deps.sh +++ b/tools/travis.osx.install.deps.sh @@ -3,4 +3,10 @@ brew update brew install gcc cmake swig -brew install ffmpeg freeglut doxygen +brew install freeglut doxygen + +if [[ ${DEPENDENCY_MODE} == "ffmpeg" ]]; then + brew install ffmpeg + +elif [[ ${DEPENDENCY_MODE} == "libav" ]]; then + brew install libav From 8732cbe6ae05dd157792cd7a85632b1eb3981ea6 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Fri, 3 Apr 2015 14:32:18 +0200 Subject: [PATCH 16/34] pyTest: update testTranscoderRewrap Since getPropertiesAsMap returns a map. --- test/pyTest/testTranscoderRewrap.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/pyTest/testTranscoderRewrap.py b/test/pyTest/testTranscoderRewrap.py index 2d4163b8..0b6e41fe 100644 --- a/test/pyTest/testTranscoderRewrap.py +++ b/test/pyTest/testTranscoderRewrap.py @@ -51,11 +51,11 @@ def testRewrapAudioStream(): # check audio properties src_propertiesMap = src_audioStream.getPropertiesAsMap() dst_propertiesMap = dst_audioStream.getPropertiesAsMap() - for i in range(0, len(src_propertiesMap)): + for key in src_propertiesMap: # @todo: don't skip channel layout - if src_propertiesMap[i][0] == "channelLayout": + if key == "channelLayout": continue - assert_equals( src_propertiesMap[i], dst_propertiesMap[i] ) + assert_equals( src_propertiesMap[key], dst_propertiesMap[key] ) def testRewrapVideoStream(): """ @@ -95,5 +95,5 @@ def testRewrapVideoStream(): # check audio properties src_propertiesMap = src_videoStream.getPropertiesAsMap() dst_propertiesMap = dst_videoStream.getPropertiesAsMap() - for i in range(0, len(src_propertiesMap)): - assert_equals( src_propertiesMap[i], dst_propertiesMap[i] ) + for key in src_propertiesMap: + assert_equals( src_propertiesMap[key], dst_propertiesMap[key] ) From 7bbbdac2de7c6accc854cc575e05f445d24d6f39 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Fri, 3 Apr 2015 15:19:41 +0200 Subject: [PATCH 17/34] mediaProperty: add based class StreamProperties --- .../mediaProperty/AttachementProperties.cpp | 44 ------------------- .../mediaProperty/AttachementProperties.hpp | 26 +++-------- .../mediaProperty/AudioProperties.cpp | 20 +-------- .../mediaProperty/AudioProperties.hpp | 17 ++----- .../mediaProperty/DataProperties.cpp | 41 ----------------- .../mediaProperty/DataProperties.hpp | 26 +++-------- ...tleProperties.cpp => StreamProperties.cpp} | 28 ++++++++++-- .../mediaProperty/StreamProperties.hpp | 38 ++++++++++++++++ .../mediaProperty/SubtitleProperties.hpp | 26 +++-------- .../mediaProperty/UnknownProperties.cpp | 44 ------------------- .../mediaProperty/UnknownProperties.hpp | 26 +++-------- .../mediaProperty/VideoProperties.cpp | 18 +------- .../mediaProperty/VideoProperties.hpp | 16 ++----- .../mediaProperty/mediaProperty.i | 2 + 14 files changed, 92 insertions(+), 280 deletions(-) delete mode 100644 src/AvTranscoder/mediaProperty/AttachementProperties.cpp rename src/AvTranscoder/mediaProperty/{SubtitleProperties.cpp => StreamProperties.cpp} (56%) create mode 100644 src/AvTranscoder/mediaProperty/StreamProperties.hpp delete mode 100644 src/AvTranscoder/mediaProperty/UnknownProperties.cpp diff --git a/src/AvTranscoder/mediaProperty/AttachementProperties.cpp b/src/AvTranscoder/mediaProperty/AttachementProperties.cpp deleted file mode 100644 index 24e8a6c5..00000000 --- a/src/AvTranscoder/mediaProperty/AttachementProperties.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "AttachementProperties.hpp" - -#include - -namespace avtranscoder -{ - -AttachementProperties::AttachementProperties( const FormatContext& formatContext, const size_t index ) - : _formatContext( &formatContext.getAVFormatContext() ) - , _streamIndex( index ) -{ - if( _formatContext ) - detail::fillMetadataDictionnary( _formatContext->streams[index]->metadata, _metadatas ); -} - -size_t AttachementProperties::getStreamId() const -{ - if( ! _formatContext ) - throw std::runtime_error( "unknown format context" ); - return _formatContext->streams[_streamIndex]->id; -} - -PropertyVector AttachementProperties::getPropertiesAsVector() const -{ - PropertyVector data; - - try - { - detail::add( data, "streamId", getStreamId() ); - } - catch( const std::exception& e ) - { - detail::add( data, "streamId", e.what() ); - } - - for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex ) - { - detail::add( data, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); - } - - return data; -} - -} diff --git a/src/AvTranscoder/mediaProperty/AttachementProperties.hpp b/src/AvTranscoder/mediaProperty/AttachementProperties.hpp index 0e963557..944c6a77 100644 --- a/src/AvTranscoder/mediaProperty/AttachementProperties.hpp +++ b/src/AvTranscoder/mediaProperty/AttachementProperties.hpp @@ -1,33 +1,17 @@ #ifndef _AV_TRANSCODER_MEDIA_PROPERTY_ATTACHEMENT_PROPERTIES_HPP #define _AV_TRANSCODER_MEDIA_PROPERTY_ATTACHEMENT_PROPERTIES_HPP -#include -#include -#include +#include namespace avtranscoder { -class AvExport AttachementProperties +class AvExport AttachementProperties: public StreamProperties { public: - AttachementProperties( const FormatContext& formatContext, const size_t index ); - - size_t getStreamIndex() const { return _streamIndex; } - size_t getStreamId() const; - PropertyVector& getMetadatas() { return _metadatas; } - -#ifndef SWIG - const AVFormatContext& getAVFormatContext() { return *_formatContext; } -#endif - - PropertyVector getPropertiesAsVector() const; ///< Return all attachement properties as a vector (name of property: value) - -private: - const AVFormatContext* _formatContext; ///< Has link (no ownership) - - size_t _streamIndex; - PropertyVector _metadatas; + AttachementProperties( const FormatContext& formatContext, const size_t index ) + : StreamProperties( formatContext, index ) + {} }; } diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.cpp b/src/AvTranscoder/mediaProperty/AudioProperties.cpp index 80802df1..d93031f2 100644 --- a/src/AvTranscoder/mediaProperty/AudioProperties.cpp +++ b/src/AvTranscoder/mediaProperty/AudioProperties.cpp @@ -14,10 +14,7 @@ namespace avtranscoder { AudioProperties::AudioProperties( const FormatContext& formatContext, const size_t index ) - : _formatContext( &formatContext.getAVFormatContext() ) - , _codecContext( NULL ) - , _codec( NULL ) - , _streamIndex( index ) + : StreamProperties( formatContext, index ) { if( _formatContext ) _codecContext = _formatContext->streams[index]->codec; @@ -231,19 +228,4 @@ PropertyVector AudioProperties::getPropertiesAsVector() const return data; } -PropertyMap AudioProperties::getPropertiesAsMap() const -{ - PropertyMap dataMap; - - PropertyVector dataVector( getPropertiesAsVector() ); - for( PropertyVector::const_iterator it = dataVector.begin(); - it != dataVector.end(); - ++it ) - { - dataMap.insert( std::make_pair( it->first, it->second ) ); - } - - return dataMap; -} - } diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.hpp b/src/AvTranscoder/mediaProperty/AudioProperties.hpp index 2c7b258d..06952be9 100644 --- a/src/AvTranscoder/mediaProperty/AudioProperties.hpp +++ b/src/AvTranscoder/mediaProperty/AudioProperties.hpp @@ -1,16 +1,14 @@ #ifndef _AV_TRANSCODER_MEDIA_PROPERTY_AUDIO_PROPERTIES_HPP #define _AV_TRANSCODER_MEDIA_PROPERTY_AUDIO_PROPERTIES_HPP -#include -#include -#include +#include #include namespace avtranscoder { -class AvExport AudioProperties +class AvExport AudioProperties : public StreamProperties { public: AudioProperties( const FormatContext& formatContext, const size_t index ); @@ -23,7 +21,6 @@ class AvExport AudioProperties std::string getChannelName() const; std::string getChannelDescription() const; - size_t getStreamIndex() const { return _streamIndex; } size_t getStreamId() const; size_t getCodecId() const; size_t getSampleRate() const; @@ -35,15 +32,11 @@ class AvExport AudioProperties Rational getTimeBase() const; double getDuration() const; - PropertyVector& getMetadatas() { return _metadatas; } - #ifndef SWIG - const AVFormatContext& getAVFormatContext() { return *_formatContext; } AVCodecContext& getAVCodecContext() { return *_codecContext; } #endif - PropertyMap getPropertiesAsMap() const; ///< Return all audio properties as a map (name of property, value) - PropertyVector getPropertiesAsVector() const; ///< Same data with a specific order + PropertyVector getPropertiesAsVector() const; private: #ifndef SWIG @@ -62,12 +55,8 @@ class AvExport AudioProperties #endif private: - const AVFormatContext* _formatContext; ///< Has link (no ownership) AVCodecContext* _codecContext; ///< Has link (no ownership) AVCodec* _codec; ///< Has link (no ownership) - - size_t _streamIndex; - PropertyVector _metadatas; }; } diff --git a/src/AvTranscoder/mediaProperty/DataProperties.cpp b/src/AvTranscoder/mediaProperty/DataProperties.cpp index 763278d9..b552dda4 100644 --- a/src/AvTranscoder/mediaProperty/DataProperties.cpp +++ b/src/AvTranscoder/mediaProperty/DataProperties.cpp @@ -2,54 +2,13 @@ extern "C" { #include -#include -#include } #include -#include namespace avtranscoder { -DataProperties::DataProperties( const FormatContext& formatContext, const size_t index ) - : _formatContext( &formatContext.getAVFormatContext() ) - , _streamIndex( index ) -{ - //detectAncillaryData( _formatContext, _streamIndex ); - - if( _formatContext ) - detail::fillMetadataDictionnary( _formatContext->streams[index]->metadata, _metadatas ); -} - -size_t DataProperties::getStreamId() const -{ - if( ! _formatContext ) - throw std::runtime_error( "unknown format context" ); - return _formatContext->streams[_streamIndex]->id; -} - -PropertyVector DataProperties::getPropertiesAsVector() const -{ - PropertyVector data; - - try - { - detail::add( data, "streamId", getStreamId() ); - } - catch( const std::exception& e ) - { - detail::add( data, "streamId", e.what() ); - } - - for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex ) - { - detail::add( data, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); - } - - return data; -} - void DataProperties::detectAncillaryData() { AVPacket pkt; diff --git a/src/AvTranscoder/mediaProperty/DataProperties.hpp b/src/AvTranscoder/mediaProperty/DataProperties.hpp index b6b4b463..55c44d28 100644 --- a/src/AvTranscoder/mediaProperty/DataProperties.hpp +++ b/src/AvTranscoder/mediaProperty/DataProperties.hpp @@ -1,36 +1,20 @@ #ifndef _AV_TRANSCODER_MEDIA_PROPERTY_DATA_PROPERTIES_HPP #define _AV_TRANSCODER_MEDIA_PROPERTY_DATA_PROPERTIES_HPP -#include -#include -#include +#include namespace avtranscoder { -class AvExport DataProperties +class AvExport DataProperties : public StreamProperties { public: - DataProperties( const FormatContext& formatContext, const size_t index ); - - size_t getStreamIndex() const { return _streamIndex; } - size_t getStreamId() const; - PropertyVector& getMetadatas() { return _metadatas; } - -#ifndef SWIG - const AVFormatContext& getAVFormatContext() { return *_formatContext; } -#endif - - PropertyVector getPropertiesAsVector() const; ///< Return all data properties as a vector (name of property: value) + DataProperties( const FormatContext& formatContext, const size_t index ) + : StreamProperties( formatContext, index ) + {} private: void detectAncillaryData(); - -private: - const AVFormatContext* _formatContext; ///< Has link (no ownership) - - size_t _streamIndex; - PropertyVector _metadatas; }; } diff --git a/src/AvTranscoder/mediaProperty/SubtitleProperties.cpp b/src/AvTranscoder/mediaProperty/StreamProperties.cpp similarity index 56% rename from src/AvTranscoder/mediaProperty/SubtitleProperties.cpp rename to src/AvTranscoder/mediaProperty/StreamProperties.cpp index ac83fa75..14a34d52 100644 --- a/src/AvTranscoder/mediaProperty/SubtitleProperties.cpp +++ b/src/AvTranscoder/mediaProperty/StreamProperties.cpp @@ -1,11 +1,11 @@ -#include "SubtitleProperties.hpp" +#include "StreamProperties.hpp" #include namespace avtranscoder { -SubtitleProperties::SubtitleProperties( const FormatContext& formatContext, const size_t index ) +StreamProperties::StreamProperties( const FormatContext& formatContext, const size_t index ) : _formatContext( &formatContext.getAVFormatContext() ) , _streamIndex( index ) { @@ -13,14 +13,19 @@ SubtitleProperties::SubtitleProperties( const FormatContext& formatContext, cons detail::fillMetadataDictionnary( _formatContext->streams[index]->metadata, _metadatas ); } -size_t SubtitleProperties::getStreamId() const +StreamProperties::~StreamProperties() +{ + +} + +size_t StreamProperties::getStreamId() const { if( ! _formatContext ) throw std::runtime_error( "unknown format context" ); return _formatContext->streams[_streamIndex]->id; } -PropertyVector SubtitleProperties::getPropertiesAsVector() const +PropertyVector StreamProperties::getPropertiesAsVector() const { PropertyVector data; @@ -41,4 +46,19 @@ PropertyVector SubtitleProperties::getPropertiesAsVector() const return data; } +PropertyMap StreamProperties::getPropertiesAsMap() const +{ + PropertyMap dataMap; + + PropertyVector dataVector( getPropertiesAsVector() ); + for( PropertyVector::const_iterator it = dataVector.begin(); + it != dataVector.end(); + ++it ) + { + dataMap.insert( std::make_pair( it->first, it->second ) ); + } + + return dataMap; +} + } diff --git a/src/AvTranscoder/mediaProperty/StreamProperties.hpp b/src/AvTranscoder/mediaProperty/StreamProperties.hpp new file mode 100644 index 00000000..773ca70f --- /dev/null +++ b/src/AvTranscoder/mediaProperty/StreamProperties.hpp @@ -0,0 +1,38 @@ +#ifndef _AV_TRANSCODER_MEDIA_PROPERTY_STREAM_PROPERTIES_HPP +#define _AV_TRANSCODER_MEDIA_PROPERTY_STREAM_PROPERTIES_HPP + +#include +#include +#include + +namespace avtranscoder +{ + +/// Virtual based class of properties for all types of stream +class AvExport StreamProperties +{ +public: + StreamProperties( const FormatContext& formatContext, const size_t index ); + virtual ~StreamProperties() = 0; + + size_t getStreamIndex() const { return _streamIndex; } + size_t getStreamId() const; + PropertyVector& getMetadatas() { return _metadatas; } + +#ifndef SWIG + const AVFormatContext& getAVFormatContext() { return *_formatContext; } +#endif + + PropertyMap getPropertiesAsMap() const; ///< Return all properties as a map (name of property, value) + PropertyVector getPropertiesAsVector() const; ///< Same data with a specific order + +protected: + const AVFormatContext* _formatContext; ///< Has link (no ownership) + + size_t _streamIndex; + PropertyVector _metadatas; +}; + +} + +#endif diff --git a/src/AvTranscoder/mediaProperty/SubtitleProperties.hpp b/src/AvTranscoder/mediaProperty/SubtitleProperties.hpp index f0d1751b..98bb54ce 100644 --- a/src/AvTranscoder/mediaProperty/SubtitleProperties.hpp +++ b/src/AvTranscoder/mediaProperty/SubtitleProperties.hpp @@ -1,33 +1,17 @@ #ifndef _AV_TRANSCODER_MEDIA_PROPERTY_SUBTITLE_PROPERTIES_HPP #define _AV_TRANSCODER_MEDIA_PROPERTY_SUBTITLE_PROPERTIES_HPP -#include -#include -#include +#include namespace avtranscoder { -class AvExport SubtitleProperties +class AvExport SubtitleProperties : public StreamProperties { public: - SubtitleProperties( const FormatContext& formatContext, const size_t index ); - - size_t getStreamIndex() const { return _streamIndex; } - size_t getStreamId() const; - PropertyVector& getMetadatas() { return _metadatas; } - -#ifndef SWIG - const AVFormatContext& getAVFormatContext() { return *_formatContext; } -#endif - - PropertyVector getPropertiesAsVector() const; ///< Return all subtitle properties as a vector (name of property: value) - -private: - const AVFormatContext* _formatContext; ///< Has link (no ownership) - - size_t _streamIndex; - PropertyVector _metadatas; + SubtitleProperties( const FormatContext& formatContext, const size_t index ) + : StreamProperties( formatContext, index ) + {} }; } diff --git a/src/AvTranscoder/mediaProperty/UnknownProperties.cpp b/src/AvTranscoder/mediaProperty/UnknownProperties.cpp deleted file mode 100644 index 61595690..00000000 --- a/src/AvTranscoder/mediaProperty/UnknownProperties.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "UnknownProperties.hpp" - -#include - -namespace avtranscoder -{ - -UnknownProperties::UnknownProperties( const FormatContext& formatContext, const size_t index ) - : _formatContext( &formatContext.getAVFormatContext() ) - , _streamIndex( index ) -{ - if( _formatContext ) - detail::fillMetadataDictionnary( _formatContext->streams[index]->metadata, _metadatas ); -} - -size_t UnknownProperties::getStreamId() const -{ - if( ! _formatContext ) - throw std::runtime_error( "unknown format context" ); - return _formatContext->streams[_streamIndex]->id; -} - -PropertyVector UnknownProperties::getPropertiesAsVector() const -{ - PropertyVector data; - - try - { - detail::add( data, "streamId", getStreamId() ); - } - catch( const std::exception& e ) - { - detail::add( data, "streamId", e.what() ); - } - - for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex ) - { - detail::add( data, _metadatas.at( metadataIndex ).first, _metadatas.at( metadataIndex ).second ); - } - - return data; -} - -} diff --git a/src/AvTranscoder/mediaProperty/UnknownProperties.hpp b/src/AvTranscoder/mediaProperty/UnknownProperties.hpp index 2604b50b..b396035f 100644 --- a/src/AvTranscoder/mediaProperty/UnknownProperties.hpp +++ b/src/AvTranscoder/mediaProperty/UnknownProperties.hpp @@ -1,33 +1,17 @@ #ifndef _AV_TRANSCODER_MEDIA_PROPERTY_UNKNOWN_PROPERTIES_HPP #define _AV_TRANSCODER_MEDIA_PROPERTY_UNKNOWN_PROPERTIES_HPP -#include -#include -#include +#include namespace avtranscoder { -class AvExport UnknownProperties +class AvExport UnknownProperties : public StreamProperties { public: - UnknownProperties( const FormatContext& formatContext, const size_t index ); - - size_t getStreamIndex() const { return _streamIndex; } - size_t getStreamId() const; - PropertyVector& getMetadatas() { return _metadatas; } - -#ifndef SWIG - const AVFormatContext& getAVFormatContext() { return *_formatContext; } -#endif - - PropertyVector getPropertiesAsVector() const; ///< Return unknown properties as a vector (name of property: value) - -private: - const AVFormatContext* _formatContext; ///< Has link (no ownership) - - size_t _streamIndex; - PropertyVector _metadatas; + UnknownProperties( const FormatContext& formatContext, const size_t index ) + : StreamProperties( formatContext, index ) + {} }; } diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.cpp b/src/AvTranscoder/mediaProperty/VideoProperties.cpp index 7ccad12b..3f877b3c 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.cpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.cpp @@ -16,10 +16,9 @@ namespace avtranscoder { VideoProperties::VideoProperties( const FormatContext& formatContext, const size_t index, IProgress& progress, const EAnalyseLevel level ) - : _formatContext( &formatContext.getAVFormatContext() ) + : StreamProperties( formatContext, index ) , _codecContext( NULL ) , _codec( NULL ) - , _streamIndex( index ) , _pixelProperties() , _isInterlaced( false ) , _isTopFieldFirst( false ) @@ -696,19 +695,4 @@ PropertyVector VideoProperties::getPropertiesAsVector() const return data; } -PropertyMap VideoProperties::getPropertiesAsMap() const -{ - PropertyMap dataMap; - - PropertyVector dataVector( getPropertiesAsVector() ); - for( PropertyVector::const_iterator it = dataVector.begin(); - it != dataVector.end(); - ++it ) - { - dataMap.insert( std::make_pair( it->first, it->second ) ); - } - - return dataMap; -} - } diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.hpp b/src/AvTranscoder/mediaProperty/VideoProperties.hpp index 79b2d32b..adddb098 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.hpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.hpp @@ -3,10 +3,8 @@ #include "PixelProperties.hpp" -#include -#include +#include #include -#include #include extern "C" { @@ -20,7 +18,7 @@ extern "C" { namespace avtranscoder { -class AvExport VideoProperties +class AvExport VideoProperties : public StreamProperties { public: VideoProperties( const FormatContext& formatContext, const size_t index, IProgress& progress, const EAnalyseLevel level = eAnalyseLevelFirstGop ); @@ -44,7 +42,6 @@ class AvExport VideoProperties Rational getSar() const; // sample/pixel aspect ratio Rational getDar() const; // display aspect ratio - size_t getStreamIndex() const { return _streamIndex; } size_t getStreamId() const; size_t getCodecId() const; size_t getBitRate() const; ///< in bits/s @@ -75,16 +72,12 @@ class AvExport VideoProperties std::vector< std::pair< char, bool > > getGopStructure() const { return _gopStructure; } //@} - PropertyVector& getMetadatas() { return _metadatas; } - #ifndef SWIG - const AVFormatContext& getAVFormatContext() { return *_formatContext; } AVCodecContext& getAVCodecContext() { return *_codecContext; } const PixelProperties& getPixelProperties() const { return _pixelProperties; } #endif - PropertyMap getPropertiesAsMap() const; ///< Return all video and pixel properties as a map (name of property, value) - PropertyVector getPropertiesAsVector() const; ///< Same data with a specific order + PropertyVector getPropertiesAsVector() const; private: /** @@ -109,11 +102,9 @@ class AvExport VideoProperties #endif private: - const AVFormatContext* _formatContext; ///< Has link (no ownership) AVCodecContext* _codecContext; ///< Has link (no ownership) AVCodec* _codec; ///< Has link (no ownership) - size_t _streamIndex; PixelProperties _pixelProperties; //@{ // Can acces these data when analyse first gop @@ -121,7 +112,6 @@ class AvExport VideoProperties bool _isTopFieldFirst; std::vector< std::pair< char, bool > > _gopStructure; //@} - PropertyVector _metadatas; }; } diff --git a/src/AvTranscoder/mediaProperty/mediaProperty.i b/src/AvTranscoder/mediaProperty/mediaProperty.i index 75a734c7..a814a2cd 100644 --- a/src/AvTranscoder/mediaProperty/mediaProperty.i +++ b/src/AvTranscoder/mediaProperty/mediaProperty.i @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -47,6 +48,7 @@ namespace std { %include %include %include +%include %include %include %include From e53ed0f30caf1c9a73d96fdf07355010a72e26bc Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Fri, 3 Apr 2015 15:23:32 +0200 Subject: [PATCH 18/34] mediaProperty: add streamIndex when access all properties --- src/AvTranscoder/mediaProperty/AudioProperties.cpp | 1 + src/AvTranscoder/mediaProperty/StreamProperties.cpp | 1 + src/AvTranscoder/mediaProperty/VideoProperties.cpp | 1 + 3 files changed, 3 insertions(+) diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.cpp b/src/AvTranscoder/mediaProperty/AudioProperties.cpp index d93031f2..ac0412bd 100644 --- a/src/AvTranscoder/mediaProperty/AudioProperties.cpp +++ b/src/AvTranscoder/mediaProperty/AudioProperties.cpp @@ -204,6 +204,7 @@ PropertyVector AudioProperties::getPropertiesAsVector() const PropertyVector data; addProperty( data, "streamId", &AudioProperties::getStreamId ); + detail::add( data, "streamIndex", getStreamIndex() ); addProperty( data, "codecId", &AudioProperties::getCodecId ); addProperty( data, "codecName", &AudioProperties::getCodecName ); addProperty( data, "codecLongName", &AudioProperties::getCodecLongName ); diff --git a/src/AvTranscoder/mediaProperty/StreamProperties.cpp b/src/AvTranscoder/mediaProperty/StreamProperties.cpp index 14a34d52..dbfca9eb 100644 --- a/src/AvTranscoder/mediaProperty/StreamProperties.cpp +++ b/src/AvTranscoder/mediaProperty/StreamProperties.cpp @@ -37,6 +37,7 @@ PropertyVector StreamProperties::getPropertiesAsVector() const { detail::add( data, "streamId", e.what() ); } + detail::add( data, "streamIndex", getStreamIndex() ); for( size_t metadataIndex = 0; metadataIndex < _metadatas.size(); ++metadataIndex ) { diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.cpp b/src/AvTranscoder/mediaProperty/VideoProperties.cpp index 3f877b3c..07fa5ee9 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.cpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.cpp @@ -641,6 +641,7 @@ PropertyVector VideoProperties::getPropertiesAsVector() const PropertyVector data; addProperty( data, "streamId", &VideoProperties::getStreamId ); + detail::add( data, "streamIndex", getStreamIndex() ); addProperty( data, "codecId", &VideoProperties::getCodecId ); addProperty( data, "codecName", &VideoProperties::getCodecName ); addProperty( data, "codecLongName", &VideoProperties::getCodecLongName ); From bede28c593a77b4177f03c9cafadf91cc10842eb Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Tue, 7 Apr 2015 11:27:03 +0200 Subject: [PATCH 19/34] VideoProperties: get size from AVPacket if not available in AVFrame --- src/AvTranscoder/mediaProperty/VideoProperties.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.cpp b/src/AvTranscoder/mediaProperty/VideoProperties.cpp index 7e522ce4..0e3a4ec7 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.cpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.cpp @@ -405,7 +405,7 @@ size_t VideoProperties::getBitRate() const if( ! _codecContext->width || ! _codecContext->height ) throw std::runtime_error( "cannot compute bit rate: invalid frame size" ); - + // discard no frame type when decode _codecContext->skip_frame = AVDISCARD_NONE; @@ -429,7 +429,11 @@ size_t VideoProperties::getBitRate() const avcodec_decode_video2( _codecContext, frame, &gotFrame, &pkt ); if( gotFrame ) { +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 54, 7, 100 ) gopFramesSize += frame->pkt_size; +#else + gopFramesSize += pkt.size; +#endif ++count; } } From 606e04387390831948054bff6b68aabd164a84be Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Tue, 7 Apr 2015 11:28:45 +0200 Subject: [PATCH 20/34] VideoProperties: get pkt_size with function when getBitRate According to the documentation, "It [AVFrame::pkt_size] must be accessed using av_frame_get_pkt_size() and av_frame_set_pkt_size()" --- src/AvTranscoder/mediaProperty/VideoProperties.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.cpp b/src/AvTranscoder/mediaProperty/VideoProperties.cpp index 0e3a4ec7..926ab050 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.cpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.cpp @@ -430,7 +430,7 @@ size_t VideoProperties::getBitRate() const if( gotFrame ) { #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 54, 7, 100 ) - gopFramesSize += frame->pkt_size; + gopFramesSize += av_frame_get_pkt_size( frame ); #else gopFramesSize += pkt.size; #endif From a262d51925cca880f9b7b0b99a73e1f65489a089 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 9 Apr 2015 11:33:18 +0200 Subject: [PATCH 21/34] Travis: launch tests only when build with ffmpeg AvTranscoder with libav works on opensuse 12.1. Need to test on ubuntu (Travis distrib) to understand why pyTests crash. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f1dab5cb..08f7ca96 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,4 +33,4 @@ script: # Launch tests - cd .. - chmod +x tools/travis.python.nosetests.sh - - if [ "${TRAVIS_OS_NAME}" = "linux" ]; then ./tools/travis.python.nosetests.sh; fi + - if [ "${TRAVIS_OS_NAME}" = "linux" && "${DEPENDENCY_MODE}" = "ffmpeg" ]; then ./tools/travis.python.nosetests.sh; fi From 77d8f6471f5f0aba624644672685247d4951d5a9 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 1 Apr 2015 17:40:52 +0200 Subject: [PATCH 22/34] Ressource: add presets for h264 low/hq Remove default h264 preset. Fix #147 --- ressource/v_h264.prf | 5 ----- ressource/v_h264_hq.prf | 9 +++++++++ ressource/v_h264_lq.prf | 9 +++++++++ 3 files changed, 18 insertions(+), 5 deletions(-) delete mode 100644 ressource/v_h264.prf create mode 100755 ressource/v_h264_hq.prf create mode 100755 ressource/v_h264_lq.prf diff --git a/ressource/v_h264.prf b/ressource/v_h264.prf deleted file mode 100644 index 2f3fe261..00000000 --- a/ressource/v_h264.prf +++ /dev/null @@ -1,5 +0,0 @@ -avProfileName=h264 -avProfileLongName=h264 High -avProfileType=avProfileTypeVideo -codec=h264 -profile=High diff --git a/ressource/v_h264_hq.prf b/ressource/v_h264_hq.prf new file mode 100755 index 00000000..28b5fec0 --- /dev/null +++ b/ressource/v_h264_hq.prf @@ -0,0 +1,9 @@ +avProfileName=h264-hq +avProfileLongName=H.264 High Quality +avProfileType=avProfileTypeVideo +codec=h264 +pix_fmt=yuv422p +profile=high422 +preset=slow +tune=fastdecode,zerolatency +level=5 diff --git a/ressource/v_h264_lq.prf b/ressource/v_h264_lq.prf new file mode 100755 index 00000000..396bd0b9 --- /dev/null +++ b/ressource/v_h264_lq.prf @@ -0,0 +1,9 @@ +avProfileName=h264-lq +avProfileLongName=H.264 Low Quality +avProfileType=avProfileTypeVideo +codec=h264 +pix_fmt=yuv420p +profile=baseline +preset=ultrafast +tune=fastdecode,zerolatency +level=3 From 5c5f4c82ae949ace39b659957e417ad02f30697d Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 16 Apr 2015 12:02:38 +0200 Subject: [PATCH 23/34] Transcoder: can get array of StreamTranscoder --- src/AvTranscoder/transcoder/Transcoder.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/AvTranscoder/transcoder/Transcoder.hpp b/src/AvTranscoder/transcoder/Transcoder.hpp index 2ee36b56..1c56944a 100644 --- a/src/AvTranscoder/transcoder/Transcoder.hpp +++ b/src/AvTranscoder/transcoder/Transcoder.hpp @@ -122,6 +122,11 @@ class AvExport Transcoder void process( IProgress& progress ); void process(); ///< Call process with no display of progression + /** + * @brief Return the list of streams added to the transcoder. + */ + std::vector< StreamTranscoder* >& getStreamTranscoders() { return _streamTranscoders; } + /** * @param streamIndex: careful about the order of stream insertion of the Transcoder. * @return a reference to a stream manage by the Transcoder. From 1e022d3575e17adc101a5a808e73cea2fbc6a7d3 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 16 Apr 2015 12:02:52 +0200 Subject: [PATCH 24/34] Transcoder: can get ProcessMethod --- src/AvTranscoder/transcoder/Transcoder.hpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/AvTranscoder/transcoder/Transcoder.hpp b/src/AvTranscoder/transcoder/Transcoder.hpp index 1c56944a..43729344 100644 --- a/src/AvTranscoder/transcoder/Transcoder.hpp +++ b/src/AvTranscoder/transcoder/Transcoder.hpp @@ -133,6 +133,12 @@ class AvExport Transcoder */ StreamTranscoder& getStreamTranscoder( size_t streamIndex ) const { return *_streamTranscoders.at( streamIndex ); } + /** + * @brief Get current processMethod + * @see EProcessMethod + */ + EProcessMethod getProcessMethod() const { return _eProcessMethod; } + /** * @brief Set the transcoding policy. * @note By default eProcessMethodBasedOnStream at index 0. From 16fcadb548fbcf450629316c02be5205e6b821be Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 16 Apr 2015 12:05:56 +0200 Subject: [PATCH 25/34] Encoders: log profile in debug --- src/AvTranscoder/encoder/AudioEncoder.cpp | 2 ++ src/AvTranscoder/encoder/VideoEncoder.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/AvTranscoder/encoder/AudioEncoder.cpp b/src/AvTranscoder/encoder/AudioEncoder.cpp index ca250e06..bb3d6acb 100644 --- a/src/AvTranscoder/encoder/AudioEncoder.cpp +++ b/src/AvTranscoder/encoder/AudioEncoder.cpp @@ -135,6 +135,8 @@ bool AudioEncoder::encodeFrame( Frame& codedFrame ) void AudioEncoder::setProfile( const ProfileLoader::Profile& profile, const AudioFrameDesc& frameDesc ) { + LOG_DEBUG( "Set profile of audio encoder with:\n" << profile ) + // set sampleRate, number of channels, sample format _codec.setAudioParameters( frameDesc ); diff --git a/src/AvTranscoder/encoder/VideoEncoder.cpp b/src/AvTranscoder/encoder/VideoEncoder.cpp index 2272add6..1b462417 100644 --- a/src/AvTranscoder/encoder/VideoEncoder.cpp +++ b/src/AvTranscoder/encoder/VideoEncoder.cpp @@ -128,6 +128,8 @@ bool VideoEncoder::encodeFrame( Frame& codedFrame ) void VideoEncoder::setProfile( const ProfileLoader::Profile& profile, const avtranscoder::VideoFrameDesc& frameDesc ) { + LOG_DEBUG( "Set profile of video encoder with:\n" << profile ) + // set width, height, pixel format, fps _codec.setImageParameters( frameDesc ); From 778635c85cf19c987738ac05545ea0dffdeb54cc Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 16 Apr 2015 12:08:16 +0200 Subject: [PATCH 26/34] Decoders: log profile in debug --- src/AvTranscoder/decoder/AudioDecoder.cpp | 2 ++ src/AvTranscoder/decoder/VideoDecoder.cpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/AvTranscoder/decoder/AudioDecoder.cpp b/src/AvTranscoder/decoder/AudioDecoder.cpp index b7bbf9aa..21e91d16 100644 --- a/src/AvTranscoder/decoder/AudioDecoder.cpp +++ b/src/AvTranscoder/decoder/AudioDecoder.cpp @@ -147,6 +147,8 @@ bool AudioDecoder::decodeNextFrame() void AudioDecoder::setProfile( const ProfileLoader::Profile& profile ) { + LOG_DEBUG( "Set profile of audio decoder with:\n" << profile ) + AudioCodec& codec = _inputStream->getAudioCodec(); // set threads before any other options diff --git a/src/AvTranscoder/decoder/VideoDecoder.cpp b/src/AvTranscoder/decoder/VideoDecoder.cpp index 2dca1a8e..8e8b4543 100644 --- a/src/AvTranscoder/decoder/VideoDecoder.cpp +++ b/src/AvTranscoder/decoder/VideoDecoder.cpp @@ -105,7 +105,9 @@ void VideoDecoder::flushDecoder() } void VideoDecoder::setProfile( const ProfileLoader::Profile& profile ) -{ +{ + LOG_DEBUG( "Set profile of video decoder with:\n" << profile ) + VideoCodec& codec = _inputStream->getVideoCodec(); // set threads before any other options From 45696d1c7303a355b41b8d77b5957599e0f2130f Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 16 Apr 2015 12:08:47 +0200 Subject: [PATCH 27/34] Formats: log profile in debug --- src/AvTranscoder/file/InputFile.cpp | 4 +++- src/AvTranscoder/file/OutputFile.cpp | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/AvTranscoder/file/InputFile.cpp b/src/AvTranscoder/file/InputFile.cpp index f87b66c0..e0cfda87 100644 --- a/src/AvTranscoder/file/InputFile.cpp +++ b/src/AvTranscoder/file/InputFile.cpp @@ -199,7 +199,9 @@ double InputFile::getFps() } void InputFile::setProfile( const ProfileLoader::Profile& profile ) -{ +{ + LOG_DEBUG( "Set profile of input file with:\n" << profile ) + for( ProfileLoader::Profile::const_iterator it = profile.begin(); it != profile.end(); ++it ) { if( (*it).first == constants::avProfileIdentificator || diff --git a/src/AvTranscoder/file/OutputFile.cpp b/src/AvTranscoder/file/OutputFile.cpp index c1858c44..1e4c38dd 100644 --- a/src/AvTranscoder/file/OutputFile.cpp +++ b/src/AvTranscoder/file/OutputFile.cpp @@ -147,6 +147,8 @@ void OutputFile::addMetadata( const std::string& key, const std::string& value ) void OutputFile::setProfile( const ProfileLoader::Profile& profile ) { + LOG_DEBUG( "Set profile of output file with:\n" << profile ) + // check if output format indicated is valid with the filename extension if( ! matchFormat( profile.find( constants::avProfileFormat )->second, _filename ) ) { From f14cddf923683dc1dd5f3215afe9d979824b4d48 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 16 Apr 2015 12:15:42 +0200 Subject: [PATCH 28/34] util - getVideo/AudioCodecOptions: don't skip codecs without encode function --- src/AvTranscoder/util.cpp | 46 ++++++++++++++------------------------- 1 file changed, 16 insertions(+), 30 deletions(-) diff --git a/src/AvTranscoder/util.cpp b/src/AvTranscoder/util.cpp index d85bf193..afdfaa19 100644 --- a/src/AvTranscoder/util.cpp +++ b/src/AvTranscoder/util.cpp @@ -229,29 +229,22 @@ OptionArrayMap getOutputFormatOptions() OptionArrayMap getVideoCodecOptions() { - std::map< std::string, std::vector