From 0b7fbdc12b6bfa764c883317d79e4f0605d7cf4d Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 3 Jun 2015 18:50:42 +0200 Subject: [PATCH 1/7] InputFile/OutputFile: can get format name/long name/mime type * Fix #193 --- src/AvTranscoder/file/InputFile.cpp | 22 ++++++++++++++++++++++ src/AvTranscoder/file/InputFile.hpp | 4 ++++ src/AvTranscoder/file/OutputFile.cpp | 21 +++++++++++++++++++++ src/AvTranscoder/file/OutputFile.hpp | 5 +++++ 4 files changed, 52 insertions(+) diff --git a/src/AvTranscoder/file/InputFile.cpp b/src/AvTranscoder/file/InputFile.cpp index ace44270..b7ce08b4 100644 --- a/src/AvTranscoder/file/InputFile.cpp +++ b/src/AvTranscoder/file/InputFile.cpp @@ -116,6 +116,28 @@ InputStream& InputFile::getStream( size_t index ) } } + +std::string InputFile::getFormatName() const +{ + if( _formatContext.getAVInputFormat().name == NULL ) + return "unknown"; + return std::string(_formatContext.getAVInputFormat().name); +} + +std::string InputFile::getFormatLongName() const +{ + if( _formatContext.getAVInputFormat().long_name == NULL ) + return "unknown"; + return std::string(_formatContext.getAVInputFormat().long_name); +} + +std::string InputFile::getFormatMimeType() const +{ + if( _formatContext.getAVInputFormat().mime_type == NULL ) + return "unknown"; + return std::string(_formatContext.getAVInputFormat().mime_type); +} + double InputFile::getFps() { double fps = 1; diff --git a/src/AvTranscoder/file/InputFile.hpp b/src/AvTranscoder/file/InputFile.hpp index 46cda564..a84e8ee7 100644 --- a/src/AvTranscoder/file/InputFile.hpp +++ b/src/AvTranscoder/file/InputFile.hpp @@ -80,6 +80,10 @@ class AvExport InputFile **/ InputStream& getStream( size_t index ); + std::string getFormatName() const; + std::string getFormatLongName() const; + std::string getFormatMimeType() const; + FormatContext& getFormatContext() { return _formatContext; } /** diff --git a/src/AvTranscoder/file/OutputFile.cpp b/src/AvTranscoder/file/OutputFile.cpp index e4185e62..bd0214ea 100644 --- a/src/AvTranscoder/file/OutputFile.cpp +++ b/src/AvTranscoder/file/OutputFile.cpp @@ -85,6 +85,27 @@ IOutputStream& OutputFile::getStream( const size_t streamId ) return *_outputStreams.at( streamId ); } +std::string OutputFile::getFormatName() const +{ + if( _formatContext.getAVOutputFormat().name == NULL ) + return "unknown"; + return std::string(_formatContext.getAVOutputFormat().name); +} + +std::string OutputFile::getFormatLongName() const +{ + if( _formatContext.getAVOutputFormat().long_name == NULL ) + return "unknown"; + return std::string(_formatContext.getAVOutputFormat().long_name); +} + +std::string OutputFile::getFormatMimeType() const +{ + if( _formatContext.getAVOutputFormat().mime_type == NULL ) + return "unknown"; + return std::string(_formatContext.getAVOutputFormat().mime_type); +} + bool OutputFile::beginWrap( ) { LOG_DEBUG( "Begin wrap of OutputFile" ) diff --git a/src/AvTranscoder/file/OutputFile.hpp b/src/AvTranscoder/file/OutputFile.hpp index 8acb3f35..51d77268 100644 --- a/src/AvTranscoder/file/OutputFile.hpp +++ b/src/AvTranscoder/file/OutputFile.hpp @@ -53,6 +53,11 @@ class AvExport OutputFile : public IOutputFile void addMetadata( const std::string& key, const std::string& value ); IOutputStream& getStream( const size_t streamId ); + + std::string getFormatName() const; + std::string getFormatLongName() const; + std::string getFormatMimeType() const; + FormatContext& getFormatContext() { return _formatContext; } /** From 71875891299d62125e3bf9f69374bc7e309b4c70 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 4 Jun 2015 15:59:16 +0200 Subject: [PATCH 2/7] util: remove getFormat() function Not necessary since InputFile/OutputFile can return the format name... And much more! --- src/AvTranscoder/util.cpp | 14 -------------- src/AvTranscoder/util.hpp | 5 ----- 2 files changed, 19 deletions(-) diff --git a/src/AvTranscoder/util.cpp b/src/AvTranscoder/util.cpp index a98376e1..3d5225d9 100644 --- a/src/AvTranscoder/util.cpp +++ b/src/AvTranscoder/util.cpp @@ -12,20 +12,6 @@ extern "C" { namespace avtranscoder { -std::string getFormat( const std::string& filename ) -{ - std::string format( "" ); - - AVOutputFormat* avOutputFormat = av_guess_format( NULL, filename.c_str(), NULL); - if( avOutputFormat ) - { - if( avOutputFormat->name ) - format = std::string( avOutputFormat->name ); - } - - return format; -} - bool matchFormat( const std::string& format, const std::string& filename ) { AVOutputFormat* avOutputFormat = av_guess_format( format.c_str(), filename.c_str(), NULL); diff --git a/src/AvTranscoder/util.hpp b/src/AvTranscoder/util.hpp index 66e4b711..257be39d 100644 --- a/src/AvTranscoder/util.hpp +++ b/src/AvTranscoder/util.hpp @@ -19,11 +19,6 @@ 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 - */ -std::string AvExport getFormat( const std::string& filename ); - /** * @brief Check if a format name corresponds to the format of a given filename */ From 992c45e0611f7d0dd384f5f40a3b26a83d9d9f23 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 4 Jun 2015 16:00:06 +0200 Subject: [PATCH 3/7] OutputFile: add getFilename function --- src/AvTranscoder/file/OutputFile.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/AvTranscoder/file/OutputFile.hpp b/src/AvTranscoder/file/OutputFile.hpp index 51d77268..44df3206 100644 --- a/src/AvTranscoder/file/OutputFile.hpp +++ b/src/AvTranscoder/file/OutputFile.hpp @@ -54,6 +54,7 @@ class AvExport OutputFile : public IOutputFile IOutputStream& getStream( const size_t streamId ); + std::string getFilename() const { return _filename; } std::string getFormatName() const; std::string getFormatLongName() const; std::string getFormatMimeType() const; From cae95e4d75631f7158ecc3263b7e29fbb69fa98d Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 4 Jun 2015 16:01:06 +0200 Subject: [PATCH 4/7] InputFile: add documentation --- src/AvTranscoder/file/InputFile.hpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/AvTranscoder/file/InputFile.hpp b/src/AvTranscoder/file/InputFile.hpp index a84e8ee7..bad262c1 100644 --- a/src/AvTranscoder/file/InputFile.hpp +++ b/src/AvTranscoder/file/InputFile.hpp @@ -60,11 +60,6 @@ class AvExport InputFile * @note Activate a stream results in buffered its data when processing **/ void activateStream( const size_t streamIndex, const bool activate = true ); - - /** - * @return Return the resource to access - **/ - std::string getFilename() const { return _filename; } /** * @brief Return media properties on the current InputFile. @@ -80,8 +75,21 @@ class AvExport InputFile **/ InputStream& getStream( size_t index ); + std::string getFilename() const { return _filename; } + + /** + * @brief A comma separated list of short names for the format, or unknown. + */ std::string getFormatName() const; + + /** + * @brief Descriptive name for the format, meant to be more human-readable than name, or unknown. + */ std::string getFormatLongName() const; + + /** + * @brief Comma-separated list of mime types, or unknown. + */ std::string getFormatMimeType() const; FormatContext& getFormatContext() { return _formatContext; } From c5fcc6894f40ed94c8ef2abcf50a393fec2c4bae Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 4 Jun 2015 16:02:12 +0200 Subject: [PATCH 5/7] OutputFile: add documentation --- src/AvTranscoder/file/OutputFile.hpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/AvTranscoder/file/OutputFile.hpp b/src/AvTranscoder/file/OutputFile.hpp index 44df3206..27deefee 100644 --- a/src/AvTranscoder/file/OutputFile.hpp +++ b/src/AvTranscoder/file/OutputFile.hpp @@ -55,8 +55,20 @@ class AvExport OutputFile : public IOutputFile IOutputStream& getStream( const size_t streamId ); std::string getFilename() const { return _filename; } + + /** + * @brief A comma separated list of short names for the format, or unknown. + */ std::string getFormatName() const; + + /** + * @brief Descriptive name for the format, meant to be more human-readable than name, or unknown. + */ std::string getFormatLongName() const; + + /** + * @brief Comma-separated list of mime types, or unknown. + */ std::string getFormatMimeType() const; FormatContext& getFormatContext() { return _formatContext; } From f18ebaea67879debeeb1f01d35b8e211097ffc2e Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 4 Jun 2015 16:25:01 +0200 Subject: [PATCH 6/7] InputFile: fix build of getFormatMimeType() when libavformat <= 55 --- src/AvTranscoder/file/InputFile.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/AvTranscoder/file/InputFile.cpp b/src/AvTranscoder/file/InputFile.cpp index b7ce08b4..8e7748f6 100644 --- a/src/AvTranscoder/file/InputFile.cpp +++ b/src/AvTranscoder/file/InputFile.cpp @@ -133,9 +133,14 @@ std::string InputFile::getFormatLongName() const std::string InputFile::getFormatMimeType() const { +#if LIBAVFORMAT_VERSION_MAJOR <= 55 + LOG_WARN("Cannot get mime type format of '" << _filename << "' because your libavformat library has a major version <= 55.") + return "not available"; +#else if( _formatContext.getAVInputFormat().mime_type == NULL ) return "unknown"; return std::string(_formatContext.getAVInputFormat().mime_type); +#endif } double InputFile::getFps() From 1b0f75f03fd0a46ac8525015ebcce063403b5a7b Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 4 Jun 2015 16:44:13 +0200 Subject: [PATCH 7/7] InputFile/OutputFile: add log and return empty if format parameters are unknown --- src/AvTranscoder/file/InputFile.cpp | 15 ++++++++++++--- src/AvTranscoder/file/InputFile.hpp | 6 +++--- src/AvTranscoder/file/OutputFile.cpp | 15 ++++++++++++--- src/AvTranscoder/file/OutputFile.hpp | 6 +++--- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/AvTranscoder/file/InputFile.cpp b/src/AvTranscoder/file/InputFile.cpp index 8e7748f6..eb415eda 100644 --- a/src/AvTranscoder/file/InputFile.cpp +++ b/src/AvTranscoder/file/InputFile.cpp @@ -120,14 +120,20 @@ InputStream& InputFile::getStream( size_t index ) std::string InputFile::getFormatName() const { if( _formatContext.getAVInputFormat().name == NULL ) - return "unknown"; + { + LOG_WARN("Unknown demuxer format name of '" << _filename << "'.") + return ""; + } return std::string(_formatContext.getAVInputFormat().name); } std::string InputFile::getFormatLongName() const { if( _formatContext.getAVInputFormat().long_name == NULL ) - return "unknown"; + { + LOG_WARN("Unknown demuxer format long name of '" << _filename << "'.") + return ""; + } return std::string(_formatContext.getAVInputFormat().long_name); } @@ -138,7 +144,10 @@ std::string InputFile::getFormatMimeType() const return "not available"; #else if( _formatContext.getAVInputFormat().mime_type == NULL ) - return "unknown"; + { + LOG_WARN("Unknown demuxer format mime type of '" << _filename << "'.") + return ""; + } return std::string(_formatContext.getAVInputFormat().mime_type); #endif } diff --git a/src/AvTranscoder/file/InputFile.hpp b/src/AvTranscoder/file/InputFile.hpp index bad262c1..2ed6d98c 100644 --- a/src/AvTranscoder/file/InputFile.hpp +++ b/src/AvTranscoder/file/InputFile.hpp @@ -78,17 +78,17 @@ class AvExport InputFile std::string getFilename() const { return _filename; } /** - * @brief A comma separated list of short names for the format, or unknown. + * @brief A comma separated list of short names for the format, or empty if unknown. */ std::string getFormatName() const; /** - * @brief Descriptive name for the format, meant to be more human-readable than name, or unknown. + * @brief Descriptive name for the format, meant to be more human-readable than name, or empty if unknown. */ std::string getFormatLongName() const; /** - * @brief Comma-separated list of mime types, or unknown. + * @brief Comma-separated list of mime types, or empty if unknown. */ std::string getFormatMimeType() const; diff --git a/src/AvTranscoder/file/OutputFile.cpp b/src/AvTranscoder/file/OutputFile.cpp index bd0214ea..c318c771 100644 --- a/src/AvTranscoder/file/OutputFile.cpp +++ b/src/AvTranscoder/file/OutputFile.cpp @@ -88,21 +88,30 @@ IOutputStream& OutputFile::getStream( const size_t streamId ) std::string OutputFile::getFormatName() const { if( _formatContext.getAVOutputFormat().name == NULL ) - return "unknown"; + { + LOG_WARN("Unknown muxer format name of '" << _filename << "'.") + return ""; + } return std::string(_formatContext.getAVOutputFormat().name); } std::string OutputFile::getFormatLongName() const { if( _formatContext.getAVOutputFormat().long_name == NULL ) - return "unknown"; + { + LOG_WARN("Unknown muxer format long name of '" << _filename << "'.") + return ""; + } return std::string(_formatContext.getAVOutputFormat().long_name); } std::string OutputFile::getFormatMimeType() const { if( _formatContext.getAVOutputFormat().mime_type == NULL ) - return "unknown"; + { + LOG_WARN("Unknown muxer format mime type of '" << _filename << "'.") + return ""; + } return std::string(_formatContext.getAVOutputFormat().mime_type); } diff --git a/src/AvTranscoder/file/OutputFile.hpp b/src/AvTranscoder/file/OutputFile.hpp index 27deefee..8a22a138 100644 --- a/src/AvTranscoder/file/OutputFile.hpp +++ b/src/AvTranscoder/file/OutputFile.hpp @@ -57,17 +57,17 @@ class AvExport OutputFile : public IOutputFile std::string getFilename() const { return _filename; } /** - * @brief A comma separated list of short names for the format, or unknown. + * @brief A comma separated list of short names for the format, or empty if unknown. */ std::string getFormatName() const; /** - * @brief Descriptive name for the format, meant to be more human-readable than name, or unknown. + * @brief Descriptive name for the format, meant to be more human-readable than name, or empty if unknown. */ std::string getFormatLongName() const; /** - * @brief Comma-separated list of mime types, or unknown. + * @brief Comma-separated list of mime types, or empty if unknown. */ std::string getFormatMimeType() const;