From 6fae3651b0b09effba6f5bad5351a0e4ee413ac2 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Nov 2015 09:46:46 +0100 Subject: [PATCH 01/21] Added JsonWriter classes --- src/AvTranscoder/JsonWriter.cpp | 26 +++++++++ src/AvTranscoder/JsonWriter.hpp | 99 +++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 src/AvTranscoder/JsonWriter.cpp create mode 100644 src/AvTranscoder/JsonWriter.hpp diff --git a/src/AvTranscoder/JsonWriter.cpp b/src/AvTranscoder/JsonWriter.cpp new file mode 100644 index 00000000..76fc2572 --- /dev/null +++ b/src/AvTranscoder/JsonWriter.cpp @@ -0,0 +1,26 @@ +#include "JsonWriter.hpp" + +namespace avtranscoder { +namespace json { + +template <> +JsonStreamWriter& JsonStreamWriter::operator<<(bool value) +{ + stream << (value ? "true" : "false"); + return *this; +} +template <> +JsonStreamWriter& JsonStreamWriter::operator<<(const char *string) +{ + stream << '"' << string << '"'; + return *this; +} +template <> +JsonStreamWriter& JsonStreamWriter::operator<<(JsonNull) +{ + stream << "null"; + return *this; +} + +} +} diff --git a/src/AvTranscoder/JsonWriter.hpp b/src/AvTranscoder/JsonWriter.hpp new file mode 100644 index 00000000..199a913c --- /dev/null +++ b/src/AvTranscoder/JsonWriter.hpp @@ -0,0 +1,99 @@ +#ifndef _AV_TRANSCODER_JSONWRITER_HPP_ +#define _AV_TRANSCODER_JSONWRITER_HPP_ + +#include "common.hpp" + +#include +#include + +namespace avtranscoder { +namespace json { + +// To manage 'null' element in JSON +struct JsonNull {}; + +/** + * + */ +class AvExport JsonStreamWriter +{ +public: + JsonStreamWriter() : first(true) {} + virtual ~JsonStreamWriter() {} + + virtual std::string build() { + finish(); + return stream.str(); + } + +protected: + friend class JsonObjectStreamWriter; + friend class JsonArrayStreamWriter; + std::ostringstream stream; + bool first; + + template + JsonStreamWriter& operator<<(T value) + { + stream << value; + return *this; + } + + JsonStreamWriter& addSep() + { + if (first) { + first = false; + } else { + stream << ','; + } + return *this; + } + + virtual std::ostream& finish() = 0; +}; + +// Write a boolean to the stream. +template <> JsonStreamWriter& JsonStreamWriter::operator<<(bool value); +// Write a string to the stream. +template <> JsonStreamWriter& JsonStreamWriter::operator<<(const char *string); +// Write null (empty value) to the stream. +template <> JsonStreamWriter& JsonStreamWriter::operator<<(JsonNull); + +// Write an object to the stream. +class AvExport JsonObjectStreamWriter : public JsonStreamWriter +{ +public: + JsonObjectStreamWriter() { stream << '{'; } + + template + JsonObjectStreamWriter& operator<<(const std::pair pair) + { + addSep() << pair.first << ':' << pair.second; + return *this; + } + +protected: + virtual std::ostream& finish() { return stream << '}'; } +}; + +// Write an array to the stream. +class AvExport JsonArrayStreamWriter : public JsonStreamWriter +{ +public: + JsonArrayStreamWriter() { stream << '['; } + + template + JsonArrayStreamWriter& operator<<(T value) + { + addSep() << value; + return *this; + } + +protected: + virtual std::ostream& finish() { return stream << ']'; } +}; + +} +} + +#endif From 21659f1a2634fee736d2a8870d18c923428460ca Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Nov 2015 09:47:11 +0100 Subject: [PATCH 02/21] StreamProperties: added getPropertiesAsJson method --- src/AvTranscoder/mediaProperty/StreamProperties.cpp | 11 +++++++++++ src/AvTranscoder/mediaProperty/StreamProperties.hpp | 1 + 2 files changed, 12 insertions(+) diff --git a/src/AvTranscoder/mediaProperty/StreamProperties.cpp b/src/AvTranscoder/mediaProperty/StreamProperties.cpp index b388982c..5c6e5217 100644 --- a/src/AvTranscoder/mediaProperty/StreamProperties.cpp +++ b/src/AvTranscoder/mediaProperty/StreamProperties.cpp @@ -1,5 +1,7 @@ #include "StreamProperties.hpp" +#include + #include namespace avtranscoder @@ -77,4 +79,13 @@ PropertyMap StreamProperties::getPropertiesAsMap() const return dataMap; } +std::string StreamProperties::getPropertiesAsJson() const +{ + json::JsonObjectStreamWriter writer; + PropertyMap properties = getPropertiesAsMap(); + for(PropertyMap::iterator it = properties.begin(); it != properties.end(); ++it) + writer << std::make_pair(it->first.c_str(), it->second.c_str()); + return writer.build(); +} + } diff --git a/src/AvTranscoder/mediaProperty/StreamProperties.hpp b/src/AvTranscoder/mediaProperty/StreamProperties.hpp index a70a9dbe..70ef635f 100644 --- a/src/AvTranscoder/mediaProperty/StreamProperties.hpp +++ b/src/AvTranscoder/mediaProperty/StreamProperties.hpp @@ -26,6 +26,7 @@ class AvExport StreamProperties const AVFormatContext& getAVFormatContext() const { return *_formatContext; } #endif + std::string getPropertiesAsJson() const; ///< Return all properties as a json format. PropertyMap getPropertiesAsMap() const; ///< Return all properties as a map (name of property, value) virtual PropertyVector getPropertiesAsVector() const; ///< Same data with a specific order From f27165da35a3a82b6fe3f56b61d9af8413f6e72a Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Nov 2015 09:48:24 +0100 Subject: [PATCH 03/21] FileProperties: added getPropertiesAsMap method --- src/AvTranscoder/mediaProperty/FileProperties.cpp | 15 +++++++++++++++ src/AvTranscoder/mediaProperty/FileProperties.hpp | 1 + 2 files changed, 16 insertions(+) diff --git a/src/AvTranscoder/mediaProperty/FileProperties.cpp b/src/AvTranscoder/mediaProperty/FileProperties.cpp index 96fe269a..cd7f8f0b 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.cpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.cpp @@ -235,6 +235,21 @@ PropertyVector FileProperties::getPropertiesAsVector() const return data; } +PropertyMap FileProperties::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; +} + void FileProperties::clearStreamProperties() { _streams.clear(); diff --git a/src/AvTranscoder/mediaProperty/FileProperties.hpp b/src/AvTranscoder/mediaProperty/FileProperties.hpp index 5646034d..1330fdfb 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.hpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.hpp @@ -81,6 +81,7 @@ class AvExport FileProperties const AVFormatContext& getAVFormatContext() { return *_avFormatContext; } #endif + PropertyMap getPropertiesAsMap() const; ///< Return all properties as a map (name of property, value) PropertyVector getPropertiesAsVector() const; ///< Return all file properties as a vector (name of property: value) private: From 0aa6a581b3924237d0a177eb33426d048a46941c Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Nov 2015 09:54:22 +0100 Subject: [PATCH 04/21] FileProperties: added getPropertiesAsJson method --- .../mediaProperty/FileProperties.cpp | 71 +++++++++++++++++++ .../mediaProperty/FileProperties.hpp | 1 + 2 files changed, 72 insertions(+) diff --git a/src/AvTranscoder/mediaProperty/FileProperties.cpp b/src/AvTranscoder/mediaProperty/FileProperties.cpp index cd7f8f0b..c0830b2a 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.cpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.cpp @@ -1,5 +1,6 @@ #include "FileProperties.hpp" +#include #include #include @@ -250,6 +251,76 @@ PropertyMap FileProperties::getPropertiesAsMap() const return dataMap; } +std::string FileProperties::getPropertiesAsJson() const +{ + json::JsonObjectStreamWriter writer; + { + // format + json::JsonArrayStreamWriter array; + PropertyMap properties = getPropertiesAsMap(); + json::JsonObjectStreamWriter format; + for(PropertyMap::iterator it = properties.begin(); it != properties.end(); ++it) + format << std::make_pair(it->first.c_str(), it->second.c_str()); + array << format.build(); + writer << std::make_pair("format", array.build()); + } + { + // video streams + json::JsonArrayStreamWriter video; + for( std::vector< avtranscoder::VideoProperties >::const_iterator it = _videoStreams.begin(); it != _videoStreams.end(); ++it ) + { + video << it->getPropertiesAsJson(); + } + writer << std::make_pair("video", video.build()); + } + { + // audio streams + json::JsonArrayStreamWriter audio; + for( std::vector< avtranscoder::AudioProperties >::const_iterator it = _audioStreams.begin(); it != _audioStreams.end(); ++it ) + { + audio << it->getPropertiesAsJson(); + } + writer << std::make_pair("audio", audio.build()); + } + { + // data streams + json::JsonArrayStreamWriter data; + for( std::vector< avtranscoder::DataProperties >::const_iterator it = _dataStreams.begin(); it != _dataStreams.end(); ++it ) + { + data << it->getPropertiesAsJson(); + } + writer << std::make_pair("data", data.build()); + } + { + // subtitle streams + json::JsonArrayStreamWriter subtitle; + for( std::vector< avtranscoder::SubtitleProperties >::const_iterator it = _subtitleStreams.begin(); it != _subtitleStreams.end(); ++it ) + { + subtitle << it->getPropertiesAsJson(); + } + writer << std::make_pair("subtitle", subtitle.build()); + } + { + // attachement streams + json::JsonArrayStreamWriter attachement; + for( std::vector< avtranscoder::AttachementProperties >::const_iterator it = _attachementStreams.begin(); it != _attachementStreams.end(); ++it ) + { + attachement << it->getPropertiesAsJson(); + } + writer << std::make_pair("attachement", attachement.build()); + } + { + // unknown streams + json::JsonArrayStreamWriter unknown; + for( std::vector< avtranscoder::UnknownProperties >::const_iterator it = _unknownStreams.begin(); it != _unknownStreams.end(); ++it ) + { + unknown << it->getPropertiesAsJson(); + } + writer << std::make_pair("unknown", unknown.build()); + } + return writer.build(); +} + void FileProperties::clearStreamProperties() { _streams.clear(); diff --git a/src/AvTranscoder/mediaProperty/FileProperties.hpp b/src/AvTranscoder/mediaProperty/FileProperties.hpp index 1330fdfb..a8c89785 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.hpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.hpp @@ -81,6 +81,7 @@ class AvExport FileProperties const AVFormatContext& getAVFormatContext() { return *_avFormatContext; } #endif + std::string getPropertiesAsJson() const; ///< Return all properties as a json format. PropertyMap getPropertiesAsMap() const; ///< Return all properties as a map (name of property, value) PropertyVector getPropertiesAsVector() const; ///< Return all file properties as a vector (name of property: value) From 603c97eac0bccfebfd6b41037ca717d30f6f5e43 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Nov 2015 10:20:17 +0100 Subject: [PATCH 05/21] mediaProperty: use a default value if cannot access a property Therefore, the "null" value represents the null json element. --- src/AvTranscoder/mediaProperty/AudioProperties.hpp | 4 ++-- src/AvTranscoder/mediaProperty/FileProperties.hpp | 2 +- src/AvTranscoder/mediaProperty/PixelProperties.cpp | 4 ++-- src/AvTranscoder/mediaProperty/PixelProperties.hpp | 2 +- src/AvTranscoder/mediaProperty/StreamProperties.hpp | 2 +- src/AvTranscoder/mediaProperty/VideoProperties.hpp | 2 +- src/AvTranscoder/mediaProperty/util.hpp | 5 +++++ 7 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.hpp b/src/AvTranscoder/mediaProperty/AudioProperties.hpp index f1eda58b..4452cca9 100644 --- a/src/AvTranscoder/mediaProperty/AudioProperties.hpp +++ b/src/AvTranscoder/mediaProperty/AudioProperties.hpp @@ -42,11 +42,11 @@ class AvExport AudioProperties : public StreamProperties { try { - detail::add( data, key, (this->*getter)() ); + detail::add( data, key, (this->*getter)() ); } catch( const std::exception& e ) { - detail::add( data, key, e.what() ); + detail::add( data, key, detail::propertyValueIfError ); } } #endif diff --git a/src/AvTranscoder/mediaProperty/FileProperties.hpp b/src/AvTranscoder/mediaProperty/FileProperties.hpp index a8c89785..176d1792 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.hpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.hpp @@ -96,7 +96,7 @@ class AvExport FileProperties } catch( const std::exception& e ) { - detail::add( data, key, e.what() ); + detail::add( data, key, "null" ); } } #endif diff --git a/src/AvTranscoder/mediaProperty/PixelProperties.cpp b/src/AvTranscoder/mediaProperty/PixelProperties.cpp index bce3f023..01aa43f0 100644 --- a/src/AvTranscoder/mediaProperty/PixelProperties.cpp +++ b/src/AvTranscoder/mediaProperty/PixelProperties.cpp @@ -306,7 +306,7 @@ PropertyVector PixelProperties::getPropertiesAsVector() const } catch( const std::exception& e ) { - detail::add( data, "subsampling", e.what() ); + detail::add( data, "subsampling", detail::propertyValueIfError ); } addProperty( data, "isBigEndian", &PixelProperties::isBigEndian ); @@ -336,7 +336,7 @@ PropertyVector PixelProperties::getPropertiesAsVector() const } catch( const std::exception& e ) { - detail::add( data, "channels", e.what() ); + detail::add( data, "channels", detail::propertyValueIfError ); } return data; diff --git a/src/AvTranscoder/mediaProperty/PixelProperties.hpp b/src/AvTranscoder/mediaProperty/PixelProperties.hpp index b1137199..8d680063 100644 --- a/src/AvTranscoder/mediaProperty/PixelProperties.hpp +++ b/src/AvTranscoder/mediaProperty/PixelProperties.hpp @@ -95,7 +95,7 @@ class AvExport PixelProperties } catch( const std::exception& e ) { - detail::add( data, key, e.what() ); + detail::add( data, key, detail::propertyValueIfError ); } } #endif diff --git a/src/AvTranscoder/mediaProperty/StreamProperties.hpp b/src/AvTranscoder/mediaProperty/StreamProperties.hpp index 70ef635f..d824007a 100644 --- a/src/AvTranscoder/mediaProperty/StreamProperties.hpp +++ b/src/AvTranscoder/mediaProperty/StreamProperties.hpp @@ -41,7 +41,7 @@ class AvExport StreamProperties } catch( const std::exception& e ) { - detail::add( dataVector, key, e.what() ); + detail::add( dataVector, key, detail::propertyValueIfError ); } } #endif diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.hpp b/src/AvTranscoder/mediaProperty/VideoProperties.hpp index a357e4c5..a445d0bc 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.hpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.hpp @@ -100,7 +100,7 @@ class AvExport VideoProperties : public StreamProperties } catch( const std::exception& e ) { - detail::add( dataVector, key, e.what() ); + detail::add( dataVector, key, detail::propertyValueIfError ); } } #endif diff --git a/src/AvTranscoder/mediaProperty/util.hpp b/src/AvTranscoder/mediaProperty/util.hpp index 69122fe6..35790561 100644 --- a/src/AvTranscoder/mediaProperty/util.hpp +++ b/src/AvTranscoder/mediaProperty/util.hpp @@ -25,6 +25,11 @@ typedef std::map< std::string, std::string > PropertyMap; namespace detail { +/** + * If cannot access the property, get this value. + */ +const std::string propertyValueIfError = "null"; + template void add( PropertyVector& propertyVector, const std::string& key, const T& value ) { From 9e777332268ae641218107beae5d290f44591df9 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Nov 2015 10:25:28 +0100 Subject: [PATCH 06/21] avMeta: added help --- app/avMeta/avMeta.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/app/avMeta/avMeta.cpp b/app/avMeta/avMeta.cpp index ed7cf320..19bd3610 100644 --- a/app/avMeta/avMeta.cpp +++ b/app/avMeta/avMeta.cpp @@ -7,10 +7,29 @@ int main( int argc, char** argv ) { + std::string help; + help += "Usage\n"; + help += "\tavmeta INPUT_FILE [--help]\n"; + if( argc != 2 ) { - std::cout << "avmeta require a media filename" << std::endl; - return( -1 ); + std::cout << help << std::endl; + return( 1 ); + } + + // List command line arguments + std::vector< std::string > arguments; + for( int argument = 1; argument < argc; ++argument ) + { + arguments.push_back( argv[argument] ); + } + for( size_t argument = 0; argument < arguments.size(); ++argument ) + { + if( arguments.at( argument ) == "--help" ) + { + std::cout << help << std::endl; + return 0; + } } avtranscoder::preloadCodecsAndFormats(); From 8a720b64101e948e713749711d6f53ad973a4c7e Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Nov 2015 10:30:06 +0100 Subject: [PATCH 07/21] avMeta: added --json option to print properties as json --- app/avMeta/avMeta.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/app/avMeta/avMeta.cpp b/app/avMeta/avMeta.cpp index 19bd3610..c8cf7c8e 100644 --- a/app/avMeta/avMeta.cpp +++ b/app/avMeta/avMeta.cpp @@ -7,11 +7,15 @@ int main( int argc, char** argv ) { + bool toJson = false; + std::string help; help += "Usage\n"; - help += "\tavmeta INPUT_FILE [--help]\n"; + help += "\tavmeta INPUT_FILE [--json][--help]\n"; + help += "Command line options\n"; + help += "\t--json: print properties as json\n"; - if( argc != 2 ) + if( argc < 2 ) { std::cout << help << std::endl; return( 1 ); @@ -30,6 +34,10 @@ int main( int argc, char** argv ) std::cout << help << std::endl; return 0; } + else if( arguments.at( argument ) == "--json" ) + { + toJson = true; + } } avtranscoder::preloadCodecsAndFormats(); @@ -40,5 +48,8 @@ int main( int argc, char** argv ) input.analyse( p, avtranscoder::eAnalyseLevelFirstGop ); // display file properties - std::cout << input; + if( toJson ) + std::cout << input.getProperties().getPropertiesAsJson() << std::endl; + else + std::cout << input; } From 327f41bfaafb8537dc2e1935df86a83d361a86df Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Nov 2015 10:30:19 +0100 Subject: [PATCH 08/21] avMeta: set log level to QUIET --- app/avMeta/avMeta.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/app/avMeta/avMeta.cpp b/app/avMeta/avMeta.cpp index c8cf7c8e..1097ea2a 100644 --- a/app/avMeta/avMeta.cpp +++ b/app/avMeta/avMeta.cpp @@ -41,6 +41,7 @@ int main( int argc, char** argv ) } avtranscoder::preloadCodecsAndFormats(); + avtranscoder::Logger::setLogLevel( AV_LOG_QUIET ); // analyse inputFile avtranscoder::InputFile input( argv[1] ); From 15b3de8c09e5b43f291c16091c5b97e9bedf81b1 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Nov 2015 10:39:42 +0100 Subject: [PATCH 09/21] FileProperties: update doc of getPropertiesAsMap/AsVector methods * getPropertiesAsJson returns all properties of the file. * This is not the case of getPropertiesAsMap/AsVector methods... --- src/AvTranscoder/mediaProperty/FileProperties.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AvTranscoder/mediaProperty/FileProperties.hpp b/src/AvTranscoder/mediaProperty/FileProperties.hpp index 176d1792..1cc50883 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.hpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.hpp @@ -82,8 +82,8 @@ class AvExport FileProperties #endif std::string getPropertiesAsJson() const; ///< Return all properties as a json format. - PropertyMap getPropertiesAsMap() const; ///< Return all properties as a map (name of property, value) - PropertyVector getPropertiesAsVector() const; ///< Return all file properties as a vector (name of property: value) + PropertyMap getPropertiesAsMap() const; ///< Return format properties as a map (name of property, value) + PropertyVector getPropertiesAsVector() const; ///< Return format properties as a vector (name of property: value) private: #ifndef SWIG From 6a63e4b6dae061a2f7547d07072f160c09a56570 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Nov 2015 10:42:09 +0100 Subject: [PATCH 10/21] Moved JsonWriter class to mediaProperty folder --- src/AvTranscoder/mediaProperty/FileProperties.cpp | 2 +- src/AvTranscoder/{ => mediaProperty}/JsonWriter.cpp | 0 src/AvTranscoder/{ => mediaProperty}/JsonWriter.hpp | 6 +++--- src/AvTranscoder/mediaProperty/StreamProperties.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) rename src/AvTranscoder/{ => mediaProperty}/JsonWriter.cpp (100%) rename src/AvTranscoder/{ => mediaProperty}/JsonWriter.hpp (92%) diff --git a/src/AvTranscoder/mediaProperty/FileProperties.cpp b/src/AvTranscoder/mediaProperty/FileProperties.cpp index c0830b2a..c0736229 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.cpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.cpp @@ -1,6 +1,6 @@ #include "FileProperties.hpp" -#include +#include #include #include diff --git a/src/AvTranscoder/JsonWriter.cpp b/src/AvTranscoder/mediaProperty/JsonWriter.cpp similarity index 100% rename from src/AvTranscoder/JsonWriter.cpp rename to src/AvTranscoder/mediaProperty/JsonWriter.cpp diff --git a/src/AvTranscoder/JsonWriter.hpp b/src/AvTranscoder/mediaProperty/JsonWriter.hpp similarity index 92% rename from src/AvTranscoder/JsonWriter.hpp rename to src/AvTranscoder/mediaProperty/JsonWriter.hpp index 199a913c..69b3d585 100644 --- a/src/AvTranscoder/JsonWriter.hpp +++ b/src/AvTranscoder/mediaProperty/JsonWriter.hpp @@ -1,7 +1,7 @@ -#ifndef _AV_TRANSCODER_JSONWRITER_HPP_ -#define _AV_TRANSCODER_JSONWRITER_HPP_ +#ifndef _AV_TRANSCODER_MEDIA_PROPERTY_JSONWRITER_HPP_ +#define _AV_TRANSCODER_MEDIA_PROPERTY_JSONWRITER_HPP_ -#include "common.hpp" +#include #include #include diff --git a/src/AvTranscoder/mediaProperty/StreamProperties.cpp b/src/AvTranscoder/mediaProperty/StreamProperties.cpp index 5c6e5217..da730be8 100644 --- a/src/AvTranscoder/mediaProperty/StreamProperties.cpp +++ b/src/AvTranscoder/mediaProperty/StreamProperties.cpp @@ -1,6 +1,6 @@ #include "StreamProperties.hpp" -#include +#include #include From ffab1fc760f62b8e814f8e5e329eb5bfdc7af6ad Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Wed, 25 Nov 2015 11:03:31 +0100 Subject: [PATCH 11/21] pyTest: added test to check file properties as json --- test/pyTest/testProperties.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/test/pyTest/testProperties.py b/test/pyTest/testProperties.py index 3cc5cd19..7ba41514 100644 --- a/test/pyTest/testProperties.py +++ b/test/pyTest/testProperties.py @@ -2,11 +2,13 @@ # Check if environment is setup to run the tests if os.environ.get('AVTRANSCODER_TEST_AUDIO_WAVE_FILE') is None or \ - os.environ.get('AVTRANSCODER_TEST_VIDEO_MP4_FILE') is None: + os.environ.get('AVTRANSCODER_TEST_AUDIO_MP4_FILE') is None or \ + os.environ.get('AVTRANSCODER_TEST_VIDEO_MOV_FILE') is None: from nose.plugins.skip import SkipTest raise SkipTest("Need to define environment variables " "AVTRANSCODER_TEST_AUDIO_WAVE_FILE and " - "AVTRANSCODER_TEST_VIDEO_MP4_FILE") + "AVTRANSCODER_TEST_VIDEO_MP4_FILE and " + "AVTRANSCODER_TEST_VIDEO_MOV_FILE") from nose.tools import * @@ -38,6 +40,7 @@ def testAddMetadataDate(): assert_in( metadata_to_check, properties.getMetadatas() ) + def testAddImpossibleMetadata(): """ Can't add an impossible metadata to the outputFile. @@ -94,6 +97,7 @@ def testCheckVideoProperties(): assert_equals( round(videoStream.getDuration(), 2), expectedDuration ) assert_equals( videoStream.getFps(), expectedFps ) + def testCheckAudioProperties(): """ Check properties of an audio stream. @@ -122,4 +126,19 @@ def testCheckAudioProperties(): assert_equals( round(audioStream.getDuration(), 2), expectedDuration ) assert_equals( audioStream.getChannels(), expectedChannels ) assert_equals( audioStream.getChannelLayout(), expectedChannelLayout ) - assert_equals( audioStream.getSampleRate(), expectedSampleRate ) \ No newline at end of file + assert_equals( audioStream.getSampleRate(), expectedSampleRate ) + + +def testCheckFilePropertiesAsJson(): + """ + Check file properties as json. + """ + # get src file + inputFileName = os.environ['AVTRANSCODER_TEST_VIDEO_MOV_FILE'] + inputFile = av.InputFile( inputFileName ) + + import json + # throw exception if it is not a valid JSON + json.loads(inputFile.getProperties().getPropertiesAsJson()) + + From 8642888a8e3b5f2e65485488e04fa143e146d48e Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 3 Dec 2015 09:58:37 +0100 Subject: [PATCH 12/21] JsonWriter: improved documentation --- src/AvTranscoder/mediaProperty/JsonWriter.hpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/AvTranscoder/mediaProperty/JsonWriter.hpp b/src/AvTranscoder/mediaProperty/JsonWriter.hpp index 69b3d585..a53d3160 100644 --- a/src/AvTranscoder/mediaProperty/JsonWriter.hpp +++ b/src/AvTranscoder/mediaProperty/JsonWriter.hpp @@ -9,11 +9,13 @@ namespace avtranscoder { namespace json { -// To manage 'null' element in JSON +/** + * @brief To manage 'null' element in JSON + */ struct JsonNull {}; /** - * + * @brief Based class to write element to a stream. */ class AvExport JsonStreamWriter { @@ -59,7 +61,9 @@ template <> JsonStreamWriter& JsonStreamWriter::operator<<(const char *string); // Write null (empty value) to the stream. template <> JsonStreamWriter& JsonStreamWriter::operator<<(JsonNull); -// Write an object to the stream. +/** + * @brief Write an object to a stream. + */ class AvExport JsonObjectStreamWriter : public JsonStreamWriter { public: @@ -76,7 +80,9 @@ class AvExport JsonObjectStreamWriter : public JsonStreamWriter virtual std::ostream& finish() { return stream << '}'; } }; -// Write an array to the stream. +/** + * @brief Write an array to a stream. + */ class AvExport JsonArrayStreamWriter : public JsonStreamWriter { public: From f5ef5d15ec267a56490a832e2b8cea2389246cab Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 3 Dec 2015 09:59:30 +0100 Subject: [PATCH 13/21] FileProperty: use const propertyValueIfError when cannot access a property Instead of an hardcoded value. --- src/AvTranscoder/mediaProperty/FileProperties.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AvTranscoder/mediaProperty/FileProperties.hpp b/src/AvTranscoder/mediaProperty/FileProperties.hpp index 1cc50883..2a3688e5 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.hpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.hpp @@ -96,7 +96,7 @@ class AvExport FileProperties } catch( const std::exception& e ) { - detail::add( data, key, "null" ); + detail::add( data, key, detail::propertyValueIfError ); } } #endif From 8c335265790d76072a311562e7272e1029453457 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 3 Dec 2015 10:07:13 +0100 Subject: [PATCH 14/21] mediaProperty: rename 'getPropertiesAsVector/Map/Json' methods to 'asVector/Map/Json' --- app/avMeta/avMeta.cpp | 2 +- .../mediaProperty/AudioProperties.cpp | 4 ++-- .../mediaProperty/AudioProperties.hpp | 2 +- .../mediaProperty/FileProperties.cpp | 22 +++++++++---------- .../mediaProperty/FileProperties.hpp | 6 ++--- .../mediaProperty/PixelProperties.cpp | 2 +- .../mediaProperty/PixelProperties.hpp | 2 +- .../mediaProperty/StreamProperties.cpp | 10 ++++----- .../mediaProperty/StreamProperties.hpp | 6 ++--- .../mediaProperty/VideoProperties.cpp | 6 ++--- .../mediaProperty/VideoProperties.hpp | 2 +- src/AvTranscoder/mediaProperty/print.cpp | 16 +++++++------- test/pyTest/testProperties.py | 2 +- test/pyTest/testTranscoderRewrap.py | 4 ++-- 14 files changed, 43 insertions(+), 43 deletions(-) diff --git a/app/avMeta/avMeta.cpp b/app/avMeta/avMeta.cpp index 1097ea2a..5253717e 100644 --- a/app/avMeta/avMeta.cpp +++ b/app/avMeta/avMeta.cpp @@ -50,7 +50,7 @@ int main( int argc, char** argv ) // display file properties if( toJson ) - std::cout << input.getProperties().getPropertiesAsJson() << std::endl; + std::cout << input.getProperties().asJson() << std::endl; else std::cout << input; } diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.cpp b/src/AvTranscoder/mediaProperty/AudioProperties.cpp index 8cdace84..df83269c 100644 --- a/src/AvTranscoder/mediaProperty/AudioProperties.cpp +++ b/src/AvTranscoder/mediaProperty/AudioProperties.cpp @@ -173,12 +173,12 @@ size_t AudioProperties::getTicksPerFrame() const return _codecContext->ticks_per_frame; } -PropertyVector AudioProperties::getPropertiesAsVector() const +PropertyVector AudioProperties::asVector() const { PropertyVector data; // Add properties of base class - PropertyVector basedProperty = StreamProperties::getPropertiesAsVector(); + PropertyVector basedProperty = StreamProperties::asVector(); data.insert( data.begin(), basedProperty.begin(), basedProperty.end() ); addProperty( data, "codecId", &AudioProperties::getCodecId ); diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.hpp b/src/AvTranscoder/mediaProperty/AudioProperties.hpp index 4452cca9..44e96168 100644 --- a/src/AvTranscoder/mediaProperty/AudioProperties.hpp +++ b/src/AvTranscoder/mediaProperty/AudioProperties.hpp @@ -33,7 +33,7 @@ class AvExport AudioProperties : public StreamProperties AVCodecContext& getAVCodecContext() { return *_codecContext; } #endif - PropertyVector getPropertiesAsVector() const; + PropertyVector asVector() const; private: #ifndef SWIG diff --git a/src/AvTranscoder/mediaProperty/FileProperties.cpp b/src/AvTranscoder/mediaProperty/FileProperties.cpp index c0736229..2eeab452 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.cpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.cpp @@ -207,7 +207,7 @@ size_t FileProperties::getNbStreams() const return _avFormatContext->nb_streams; } -PropertyVector FileProperties::getPropertiesAsVector() const +PropertyVector FileProperties::asVector() const { PropertyVector data; @@ -236,11 +236,11 @@ PropertyVector FileProperties::getPropertiesAsVector() const return data; } -PropertyMap FileProperties::getPropertiesAsMap() const +PropertyMap FileProperties::asMap() const { PropertyMap dataMap; - PropertyVector dataVector( getPropertiesAsVector() ); + PropertyVector dataVector( asVector() ); for( PropertyVector::const_iterator it = dataVector.begin(); it != dataVector.end(); ++it ) @@ -251,13 +251,13 @@ PropertyMap FileProperties::getPropertiesAsMap() const return dataMap; } -std::string FileProperties::getPropertiesAsJson() const +std::string FileProperties::asJson() const { json::JsonObjectStreamWriter writer; { // format json::JsonArrayStreamWriter array; - PropertyMap properties = getPropertiesAsMap(); + PropertyMap properties = asMap(); json::JsonObjectStreamWriter format; for(PropertyMap::iterator it = properties.begin(); it != properties.end(); ++it) format << std::make_pair(it->first.c_str(), it->second.c_str()); @@ -269,7 +269,7 @@ std::string FileProperties::getPropertiesAsJson() const json::JsonArrayStreamWriter video; for( std::vector< avtranscoder::VideoProperties >::const_iterator it = _videoStreams.begin(); it != _videoStreams.end(); ++it ) { - video << it->getPropertiesAsJson(); + video << it->asJson(); } writer << std::make_pair("video", video.build()); } @@ -278,7 +278,7 @@ std::string FileProperties::getPropertiesAsJson() const json::JsonArrayStreamWriter audio; for( std::vector< avtranscoder::AudioProperties >::const_iterator it = _audioStreams.begin(); it != _audioStreams.end(); ++it ) { - audio << it->getPropertiesAsJson(); + audio << it->asJson(); } writer << std::make_pair("audio", audio.build()); } @@ -287,7 +287,7 @@ std::string FileProperties::getPropertiesAsJson() const json::JsonArrayStreamWriter data; for( std::vector< avtranscoder::DataProperties >::const_iterator it = _dataStreams.begin(); it != _dataStreams.end(); ++it ) { - data << it->getPropertiesAsJson(); + data << it->asJson(); } writer << std::make_pair("data", data.build()); } @@ -296,7 +296,7 @@ std::string FileProperties::getPropertiesAsJson() const json::JsonArrayStreamWriter subtitle; for( std::vector< avtranscoder::SubtitleProperties >::const_iterator it = _subtitleStreams.begin(); it != _subtitleStreams.end(); ++it ) { - subtitle << it->getPropertiesAsJson(); + subtitle << it->asJson(); } writer << std::make_pair("subtitle", subtitle.build()); } @@ -305,7 +305,7 @@ std::string FileProperties::getPropertiesAsJson() const json::JsonArrayStreamWriter attachement; for( std::vector< avtranscoder::AttachementProperties >::const_iterator it = _attachementStreams.begin(); it != _attachementStreams.end(); ++it ) { - attachement << it->getPropertiesAsJson(); + attachement << it->asJson(); } writer << std::make_pair("attachement", attachement.build()); } @@ -314,7 +314,7 @@ std::string FileProperties::getPropertiesAsJson() const json::JsonArrayStreamWriter unknown; for( std::vector< avtranscoder::UnknownProperties >::const_iterator it = _unknownStreams.begin(); it != _unknownStreams.end(); ++it ) { - unknown << it->getPropertiesAsJson(); + unknown << it->asJson(); } writer << std::make_pair("unknown", unknown.build()); } diff --git a/src/AvTranscoder/mediaProperty/FileProperties.hpp b/src/AvTranscoder/mediaProperty/FileProperties.hpp index 2a3688e5..c5a3aa30 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.hpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.hpp @@ -81,9 +81,9 @@ class AvExport FileProperties const AVFormatContext& getAVFormatContext() { return *_avFormatContext; } #endif - std::string getPropertiesAsJson() const; ///< Return all properties as a json format. - PropertyMap getPropertiesAsMap() const; ///< Return format properties as a map (name of property, value) - PropertyVector getPropertiesAsVector() const; ///< Return format properties as a vector (name of property: value) + std::string asJson() const; ///< Return all properties as a json format. + PropertyMap asMap() const; ///< Return format properties as a map (name of property, value) + PropertyVector asVector() const; ///< Return format properties as a vector (name of property: value) private: #ifndef SWIG diff --git a/src/AvTranscoder/mediaProperty/PixelProperties.cpp b/src/AvTranscoder/mediaProperty/PixelProperties.cpp index 01aa43f0..5f114ccb 100644 --- a/src/AvTranscoder/mediaProperty/PixelProperties.cpp +++ b/src/AvTranscoder/mediaProperty/PixelProperties.cpp @@ -238,7 +238,7 @@ std::vector PixelProperties::getChannels() const return channels; } -PropertyVector PixelProperties::getPropertiesAsVector() const +PropertyVector PixelProperties::asVector() const { PropertyVector data; diff --git a/src/AvTranscoder/mediaProperty/PixelProperties.hpp b/src/AvTranscoder/mediaProperty/PixelProperties.hpp index 8d680063..30ac7aa9 100644 --- a/src/AvTranscoder/mediaProperty/PixelProperties.hpp +++ b/src/AvTranscoder/mediaProperty/PixelProperties.hpp @@ -80,7 +80,7 @@ class AvExport PixelProperties const AVPixFmtDescriptor* getAVPixFmtDescriptor() const { return _pixelDesc; } #endif - PropertyVector getPropertiesAsVector() const; ///< Return all pixel properties as a vector (name of property: value) + PropertyVector asVector() const; ///< Return all pixel properties as a vector (name of property: value) private: void init( const AVPixelFormat avPixelFormat ); diff --git a/src/AvTranscoder/mediaProperty/StreamProperties.cpp b/src/AvTranscoder/mediaProperty/StreamProperties.cpp index da730be8..47ddd48b 100644 --- a/src/AvTranscoder/mediaProperty/StreamProperties.cpp +++ b/src/AvTranscoder/mediaProperty/StreamProperties.cpp @@ -47,7 +47,7 @@ AVMediaType StreamProperties::getStreamType() const return _formatContext->streams[_streamIndex]->codec->codec_type; } -PropertyVector StreamProperties::getPropertiesAsVector() const +PropertyVector StreamProperties::asVector() const { PropertyVector data; @@ -64,11 +64,11 @@ PropertyVector StreamProperties::getPropertiesAsVector() const return data; } -PropertyMap StreamProperties::getPropertiesAsMap() const +PropertyMap StreamProperties::asMap() const { PropertyMap dataMap; - PropertyVector dataVector( getPropertiesAsVector() ); + PropertyVector dataVector( asVector() ); for( PropertyVector::const_iterator it = dataVector.begin(); it != dataVector.end(); ++it ) @@ -79,10 +79,10 @@ PropertyMap StreamProperties::getPropertiesAsMap() const return dataMap; } -std::string StreamProperties::getPropertiesAsJson() const +std::string StreamProperties::asJson() const { json::JsonObjectStreamWriter writer; - PropertyMap properties = getPropertiesAsMap(); + PropertyMap properties = asMap(); for(PropertyMap::iterator it = properties.begin(); it != properties.end(); ++it) writer << std::make_pair(it->first.c_str(), it->second.c_str()); return writer.build(); diff --git a/src/AvTranscoder/mediaProperty/StreamProperties.hpp b/src/AvTranscoder/mediaProperty/StreamProperties.hpp index d824007a..bae20c93 100644 --- a/src/AvTranscoder/mediaProperty/StreamProperties.hpp +++ b/src/AvTranscoder/mediaProperty/StreamProperties.hpp @@ -26,9 +26,9 @@ class AvExport StreamProperties const AVFormatContext& getAVFormatContext() const { return *_formatContext; } #endif - std::string getPropertiesAsJson() const; ///< Return all properties as a json format. - PropertyMap getPropertiesAsMap() const; ///< Return all properties as a map (name of property, value) - virtual PropertyVector getPropertiesAsVector() const; ///< Same data with a specific order + std::string asJson() const; ///< Return all properties as a json format. + PropertyMap asMap() const; ///< Return all properties as a map (name of property, value) + virtual PropertyVector asVector() 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 d67329ff..35385996 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.cpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.cpp @@ -598,12 +598,12 @@ void VideoProperties::analyseGopStructure( IProgress& progress ) } } -PropertyVector VideoProperties::getPropertiesAsVector() const +PropertyVector VideoProperties::asVector() const { PropertyVector data; // Add properties of base class - PropertyVector basedProperty = StreamProperties::getPropertiesAsVector(); + PropertyVector basedProperty = StreamProperties::asVector(); data.insert( data.begin(), basedProperty.begin(), basedProperty.end() ); addProperty( data, "codecId", &VideoProperties::getCodecId ); @@ -647,7 +647,7 @@ PropertyVector VideoProperties::getPropertiesAsVector() const addProperty( data, "referencesFrames", &VideoProperties::getReferencesFrames ); // Add properties of the pixel - PropertyVector pixelProperties = _pixelProperties.getPropertiesAsVector(); + PropertyVector pixelProperties = _pixelProperties.asVector(); data.insert( data.end(), pixelProperties.begin(), pixelProperties.end() ); return data; diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.hpp b/src/AvTranscoder/mediaProperty/VideoProperties.hpp index a445d0bc..f9e9bd65 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.hpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.hpp @@ -81,7 +81,7 @@ class AvExport VideoProperties : public StreamProperties const PixelProperties& getPixelProperties() const { return _pixelProperties; } #endif - PropertyVector getPropertiesAsVector() const; + PropertyVector asVector() const; private: /** diff --git a/src/AvTranscoder/mediaProperty/print.cpp b/src/AvTranscoder/mediaProperty/print.cpp index e344092d..799d2b0d 100644 --- a/src/AvTranscoder/mediaProperty/print.cpp +++ b/src/AvTranscoder/mediaProperty/print.cpp @@ -15,7 +15,7 @@ std::ostream& operator<<( std::ostream& flux, const FileProperties& fileProperti flux << std::left; flux << separator << " Wrapper " << separator << std::endl; - PropertyVector properties = fileProperties.getPropertiesAsVector(); + PropertyVector properties = fileProperties.asVector(); for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; @@ -29,7 +29,7 @@ std::ostream& operator<<( std::ostream& flux, const StreamProperties& streamProp flux << std::left; flux << separator << " Stream " << separator << std::endl; - PropertyVector properties = streamProperties.getPropertiesAsVector(); + PropertyVector properties = streamProperties.asVector(); for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; @@ -43,7 +43,7 @@ std::ostream& operator<<( std::ostream& flux, const VideoProperties& videoProper flux << std::left; flux << separator << " Video stream " << separator << std::endl; - PropertyVector properties = videoProperties.getPropertiesAsVector(); + PropertyVector properties = videoProperties.asVector(); for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; @@ -57,7 +57,7 @@ std::ostream& operator<<( std::ostream& flux, const AudioProperties& audioProper flux << std::left; flux << separator << " Audio stream " << separator << std::endl; - PropertyVector properties = audioProperties.getPropertiesAsVector(); + PropertyVector properties = audioProperties.asVector(); for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; @@ -70,7 +70,7 @@ std::ostream& operator<<( std::ostream& flux, const DataProperties& dataProperti { flux << separator << " Data stream " << separator << std::endl; - PropertyVector properties = dataProperties.getPropertiesAsVector(); + PropertyVector properties = dataProperties.asVector(); for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; @@ -83,7 +83,7 @@ std::ostream& operator<<( std::ostream& flux, const SubtitleProperties& subtitle { flux << separator << " Subtitle stream " << separator << std::endl; - PropertyVector properties = subtitleProperties.getPropertiesAsVector(); + PropertyVector properties = subtitleProperties.asVector(); for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; @@ -96,7 +96,7 @@ std::ostream& operator<<( std::ostream& flux, const AttachementProperties& attac { flux << separator << " Attachement stream " << separator << std::endl; - PropertyVector properties = attachementProperties.getPropertiesAsVector(); + PropertyVector properties = attachementProperties.asVector(); for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; @@ -109,7 +109,7 @@ std::ostream& operator<<( std::ostream& flux, const UnknownProperties& unknownPr { flux << separator << " Unknown stream " << separator << std::endl; - PropertyVector properties = unknownProperties.getPropertiesAsVector(); + PropertyVector properties = unknownProperties.asVector(); for( PropertyVector::iterator it = properties.begin(); it != properties.end(); ++it ) { flux << std::setw( keyWidth ) << it->first << ": " << it->second << std::endl; diff --git a/test/pyTest/testProperties.py b/test/pyTest/testProperties.py index 7ba41514..442d647d 100644 --- a/test/pyTest/testProperties.py +++ b/test/pyTest/testProperties.py @@ -139,6 +139,6 @@ def testCheckFilePropertiesAsJson(): import json # throw exception if it is not a valid JSON - json.loads(inputFile.getProperties().getPropertiesAsJson()) + json.loads(inputFile.getProperties().asJson()) diff --git a/test/pyTest/testTranscoderRewrap.py b/test/pyTest/testTranscoderRewrap.py index f3d74339..732c1852 100644 --- a/test/pyTest/testTranscoderRewrap.py +++ b/test/pyTest/testTranscoderRewrap.py @@ -31,8 +31,8 @@ def checkStream(src_stream, dst_stream): """ Check the values of the given streams properties. """ - src_propertiesMap = src_stream.getPropertiesAsMap() - dst_propertiesMap = dst_stream.getPropertiesAsMap() + src_propertiesMap = src_stream.asMap() + dst_propertiesMap = dst_stream.asMap() for key in dst_propertiesMap: # skip metadata of stream if key in [x[0] for x in src_stream.getMetadatas()]: From 788ce25f43513a7c20dbb3a99dbe668c4c08d4b7 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 3 Dec 2015 10:14:35 +0100 Subject: [PATCH 15/21] FileProperties: added allPropertiesAsJson method * FileProperties::asJson returns the format properties. * FileProperties::allPropertiesAsJson returns all properties. * It is to keep a symmetry between all 'properties' classes with their 'asJson' method. --- app/avMeta/avMeta.cpp | 2 +- .../mediaProperty/FileProperties.cpp | 19 ++++++++++++------- .../mediaProperty/FileProperties.hpp | 3 ++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/app/avMeta/avMeta.cpp b/app/avMeta/avMeta.cpp index 5253717e..d931602f 100644 --- a/app/avMeta/avMeta.cpp +++ b/app/avMeta/avMeta.cpp @@ -50,7 +50,7 @@ int main( int argc, char** argv ) // display file properties if( toJson ) - std::cout << input.getProperties().asJson() << std::endl; + std::cout << input.getProperties().allPropertiesAsJson() << std::endl; else std::cout << input; } diff --git a/src/AvTranscoder/mediaProperty/FileProperties.cpp b/src/AvTranscoder/mediaProperty/FileProperties.cpp index 2eeab452..a065c4a4 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.cpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.cpp @@ -252,17 +252,22 @@ PropertyMap FileProperties::asMap() const } std::string FileProperties::asJson() const +{ + json::JsonObjectStreamWriter writer; + PropertyMap properties = asMap(); + for(PropertyMap::iterator it = properties.begin(); it != properties.end(); ++it) + writer << std::make_pair(it->first.c_str(), it->second.c_str()); + return writer.build(); +} + +std::string FileProperties::allPropertiesAsJson() const { json::JsonObjectStreamWriter writer; { // format - json::JsonArrayStreamWriter array; - PropertyMap properties = asMap(); - json::JsonObjectStreamWriter format; - for(PropertyMap::iterator it = properties.begin(); it != properties.end(); ++it) - format << std::make_pair(it->first.c_str(), it->second.c_str()); - array << format.build(); - writer << std::make_pair("format", array.build()); + json::JsonArrayStreamWriter format; + format << asJson(); + writer << std::make_pair("format", format.build()); } { // video streams diff --git a/src/AvTranscoder/mediaProperty/FileProperties.hpp b/src/AvTranscoder/mediaProperty/FileProperties.hpp index c5a3aa30..02013053 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.hpp +++ b/src/AvTranscoder/mediaProperty/FileProperties.hpp @@ -81,7 +81,8 @@ class AvExport FileProperties const AVFormatContext& getAVFormatContext() { return *_avFormatContext; } #endif - std::string asJson() const; ///< Return all properties as a json format. + std::string allPropertiesAsJson() const; ///< Return all properties as a json format. + std::string asJson() const; ///< Return all format properties as a json format. PropertyMap asMap() const; ///< Return format properties as a map (name of property, value) PropertyVector asVector() const; ///< Return format properties as a vector (name of property: value) From 21d16c4721508c97244bf335c17491ba9cac99d0 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 3 Dec 2015 10:17:35 +0100 Subject: [PATCH 16/21] Rename 'mediaProperty' folder to 'properties' --- app/avMeta/avMeta.cpp | 2 +- src/AvTranscoder/avTranscoder.i | 2 +- src/AvTranscoder/file/InputFile.cpp | 14 +++---- src/AvTranscoder/file/InputFile.hpp | 2 +- src/AvTranscoder/file/OutputFile.hpp | 2 +- .../AttachementProperties.hpp | 2 +- .../AudioProperties.cpp | 0 .../AudioProperties.hpp | 2 +- .../DataProperties.cpp | 0 .../DataProperties.hpp | 2 +- .../FileProperties.cpp | 2 +- .../FileProperties.hpp | 16 ++++---- .../JsonWriter.cpp | 0 .../JsonWriter.hpp | 0 .../PixelProperties.cpp | 0 .../PixelProperties.hpp | 2 +- .../StreamProperties.cpp | 2 +- .../StreamProperties.hpp | 2 +- .../SubtitleProperties.hpp | 2 +- .../UnknownProperties.hpp | 2 +- .../VideoProperties.cpp | 0 .../VideoProperties.hpp | 2 +- .../{mediaProperty => properties}/print.cpp | 0 .../{mediaProperty => properties}/print.hpp | 0 .../properties.i} | 40 +++++++++---------- .../{mediaProperty => properties}/util.cpp | 0 .../{mediaProperty => properties}/util.hpp | 0 src/AvTranscoder/reader/AudioReader.cpp | 2 +- src/AvTranscoder/reader/AudioReader.hpp | 2 +- src/AvTranscoder/reader/IReader.cpp | 2 +- src/AvTranscoder/reader/IReader.hpp | 2 +- src/AvTranscoder/reader/VideoReader.cpp | 2 +- src/AvTranscoder/reader/VideoReader.hpp | 4 +- src/AvTranscoder/stream/IInputStream.hpp | 2 +- 34 files changed, 57 insertions(+), 57 deletions(-) rename src/AvTranscoder/{mediaProperty => properties}/AttachementProperties.hpp (86%) rename src/AvTranscoder/{mediaProperty => properties}/AudioProperties.cpp (100%) rename src/AvTranscoder/{mediaProperty => properties}/AudioProperties.hpp (95%) rename src/AvTranscoder/{mediaProperty => properties}/DataProperties.cpp (100%) rename src/AvTranscoder/{mediaProperty => properties}/DataProperties.hpp (86%) rename src/AvTranscoder/{mediaProperty => properties}/FileProperties.cpp (99%) rename src/AvTranscoder/{mediaProperty => properties}/FileProperties.hpp (91%) rename src/AvTranscoder/{mediaProperty => properties}/JsonWriter.cpp (100%) rename src/AvTranscoder/{mediaProperty => properties}/JsonWriter.hpp (100%) rename src/AvTranscoder/{mediaProperty => properties}/PixelProperties.cpp (100%) rename src/AvTranscoder/{mediaProperty => properties}/PixelProperties.hpp (98%) rename src/AvTranscoder/{mediaProperty => properties}/StreamProperties.cpp (97%) rename src/AvTranscoder/{mediaProperty => properties}/StreamProperties.hpp (97%) rename src/AvTranscoder/{mediaProperty => properties}/SubtitleProperties.hpp (86%) rename src/AvTranscoder/{mediaProperty => properties}/UnknownProperties.hpp (85%) rename src/AvTranscoder/{mediaProperty => properties}/VideoProperties.cpp (100%) rename src/AvTranscoder/{mediaProperty => properties}/VideoProperties.hpp (98%) rename src/AvTranscoder/{mediaProperty => properties}/print.cpp (100%) rename src/AvTranscoder/{mediaProperty => properties}/print.hpp (100%) rename src/AvTranscoder/{mediaProperty/mediaProperty.i => properties/properties.i} (59%) rename src/AvTranscoder/{mediaProperty => properties}/util.cpp (100%) rename src/AvTranscoder/{mediaProperty => properties}/util.hpp (100%) diff --git a/app/avMeta/avMeta.cpp b/app/avMeta/avMeta.cpp index d931602f..9aa0d2d3 100644 --- a/app/avMeta/avMeta.cpp +++ b/app/avMeta/avMeta.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include diff --git a/src/AvTranscoder/avTranscoder.i b/src/AvTranscoder/avTranscoder.i index bb39d9c0..1ec80796 100644 --- a/src/AvTranscoder/avTranscoder.i +++ b/src/AvTranscoder/avTranscoder.i @@ -22,7 +22,7 @@ %} %include "AvTranscoder/progress/progress.i" -%include "AvTranscoder/mediaProperty/mediaProperty.i" +%include "AvTranscoder/properties/properties.i" %include "AvTranscoder/frame/frame.i" %include "AvTranscoder/profile/profile.i" diff --git a/src/AvTranscoder/file/InputFile.cpp b/src/AvTranscoder/file/InputFile.cpp index 38086a24..e49e838f 100644 --- a/src/AvTranscoder/file/InputFile.cpp +++ b/src/AvTranscoder/file/InputFile.cpp @@ -1,12 +1,12 @@ #include "InputFile.hpp" -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include extern "C" { #include diff --git a/src/AvTranscoder/file/InputFile.hpp b/src/AvTranscoder/file/InputFile.hpp index 1280ba21..5588d41a 100644 --- a/src/AvTranscoder/file/InputFile.hpp +++ b/src/AvTranscoder/file/InputFile.hpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/AvTranscoder/file/OutputFile.hpp b/src/AvTranscoder/file/OutputFile.hpp index a2b7c1a3..ccf97b62 100644 --- a/src/AvTranscoder/file/OutputFile.hpp +++ b/src/AvTranscoder/file/OutputFile.hpp @@ -3,7 +3,7 @@ #include -#include +#include #include #include diff --git a/src/AvTranscoder/mediaProperty/AttachementProperties.hpp b/src/AvTranscoder/properties/AttachementProperties.hpp similarity index 86% rename from src/AvTranscoder/mediaProperty/AttachementProperties.hpp rename to src/AvTranscoder/properties/AttachementProperties.hpp index 944c6a77..68fa724f 100644 --- a/src/AvTranscoder/mediaProperty/AttachementProperties.hpp +++ b/src/AvTranscoder/properties/AttachementProperties.hpp @@ -1,7 +1,7 @@ #ifndef _AV_TRANSCODER_MEDIA_PROPERTY_ATTACHEMENT_PROPERTIES_HPP #define _AV_TRANSCODER_MEDIA_PROPERTY_ATTACHEMENT_PROPERTIES_HPP -#include +#include namespace avtranscoder { diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.cpp b/src/AvTranscoder/properties/AudioProperties.cpp similarity index 100% rename from src/AvTranscoder/mediaProperty/AudioProperties.cpp rename to src/AvTranscoder/properties/AudioProperties.cpp diff --git a/src/AvTranscoder/mediaProperty/AudioProperties.hpp b/src/AvTranscoder/properties/AudioProperties.hpp similarity index 95% rename from src/AvTranscoder/mediaProperty/AudioProperties.hpp rename to src/AvTranscoder/properties/AudioProperties.hpp index 44e96168..5add4b69 100644 --- a/src/AvTranscoder/mediaProperty/AudioProperties.hpp +++ b/src/AvTranscoder/properties/AudioProperties.hpp @@ -1,7 +1,7 @@ #ifndef _AV_TRANSCODER_MEDIA_PROPERTY_AUDIO_PROPERTIES_HPP #define _AV_TRANSCODER_MEDIA_PROPERTY_AUDIO_PROPERTIES_HPP -#include +#include #include diff --git a/src/AvTranscoder/mediaProperty/DataProperties.cpp b/src/AvTranscoder/properties/DataProperties.cpp similarity index 100% rename from src/AvTranscoder/mediaProperty/DataProperties.cpp rename to src/AvTranscoder/properties/DataProperties.cpp diff --git a/src/AvTranscoder/mediaProperty/DataProperties.hpp b/src/AvTranscoder/properties/DataProperties.hpp similarity index 86% rename from src/AvTranscoder/mediaProperty/DataProperties.hpp rename to src/AvTranscoder/properties/DataProperties.hpp index 55c44d28..ec6bef8f 100644 --- a/src/AvTranscoder/mediaProperty/DataProperties.hpp +++ b/src/AvTranscoder/properties/DataProperties.hpp @@ -1,7 +1,7 @@ #ifndef _AV_TRANSCODER_MEDIA_PROPERTY_DATA_PROPERTIES_HPP #define _AV_TRANSCODER_MEDIA_PROPERTY_DATA_PROPERTIES_HPP -#include +#include namespace avtranscoder { diff --git a/src/AvTranscoder/mediaProperty/FileProperties.cpp b/src/AvTranscoder/properties/FileProperties.cpp similarity index 99% rename from src/AvTranscoder/mediaProperty/FileProperties.cpp rename to src/AvTranscoder/properties/FileProperties.cpp index a065c4a4..007266c4 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.cpp +++ b/src/AvTranscoder/properties/FileProperties.cpp @@ -1,6 +1,6 @@ #include "FileProperties.hpp" -#include +#include #include #include diff --git a/src/AvTranscoder/mediaProperty/FileProperties.hpp b/src/AvTranscoder/properties/FileProperties.hpp similarity index 91% rename from src/AvTranscoder/mediaProperty/FileProperties.hpp rename to src/AvTranscoder/properties/FileProperties.hpp index 02013053..edc681c0 100644 --- a/src/AvTranscoder/mediaProperty/FileProperties.hpp +++ b/src/AvTranscoder/properties/FileProperties.hpp @@ -2,17 +2,17 @@ #define _AV_TRANSCODER_MEDIA_PROPERTY_FILE_PROPERTIES_HPP #include -#include +#include #include #include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include #include #include diff --git a/src/AvTranscoder/mediaProperty/JsonWriter.cpp b/src/AvTranscoder/properties/JsonWriter.cpp similarity index 100% rename from src/AvTranscoder/mediaProperty/JsonWriter.cpp rename to src/AvTranscoder/properties/JsonWriter.cpp diff --git a/src/AvTranscoder/mediaProperty/JsonWriter.hpp b/src/AvTranscoder/properties/JsonWriter.hpp similarity index 100% rename from src/AvTranscoder/mediaProperty/JsonWriter.hpp rename to src/AvTranscoder/properties/JsonWriter.hpp diff --git a/src/AvTranscoder/mediaProperty/PixelProperties.cpp b/src/AvTranscoder/properties/PixelProperties.cpp similarity index 100% rename from src/AvTranscoder/mediaProperty/PixelProperties.cpp rename to src/AvTranscoder/properties/PixelProperties.cpp diff --git a/src/AvTranscoder/mediaProperty/PixelProperties.hpp b/src/AvTranscoder/properties/PixelProperties.hpp similarity index 98% rename from src/AvTranscoder/mediaProperty/PixelProperties.hpp rename to src/AvTranscoder/properties/PixelProperties.hpp index 30ac7aa9..b9b4ad6e 100644 --- a/src/AvTranscoder/mediaProperty/PixelProperties.hpp +++ b/src/AvTranscoder/properties/PixelProperties.hpp @@ -2,7 +2,7 @@ #define _AV_TRANSCODER_FRAME_PIXEL_PROPERTIES_HPP_ #include -#include +#include extern "C" { #include diff --git a/src/AvTranscoder/mediaProperty/StreamProperties.cpp b/src/AvTranscoder/properties/StreamProperties.cpp similarity index 97% rename from src/AvTranscoder/mediaProperty/StreamProperties.cpp rename to src/AvTranscoder/properties/StreamProperties.cpp index 47ddd48b..c7c3e909 100644 --- a/src/AvTranscoder/mediaProperty/StreamProperties.cpp +++ b/src/AvTranscoder/properties/StreamProperties.cpp @@ -1,6 +1,6 @@ #include "StreamProperties.hpp" -#include +#include #include diff --git a/src/AvTranscoder/mediaProperty/StreamProperties.hpp b/src/AvTranscoder/properties/StreamProperties.hpp similarity index 97% rename from src/AvTranscoder/mediaProperty/StreamProperties.hpp rename to src/AvTranscoder/properties/StreamProperties.hpp index bae20c93..6a52a611 100644 --- a/src/AvTranscoder/mediaProperty/StreamProperties.hpp +++ b/src/AvTranscoder/properties/StreamProperties.hpp @@ -2,7 +2,7 @@ #define _AV_TRANSCODER_MEDIA_PROPERTY_STREAM_PROPERTIES_HPP #include -#include +#include #include namespace avtranscoder diff --git a/src/AvTranscoder/mediaProperty/SubtitleProperties.hpp b/src/AvTranscoder/properties/SubtitleProperties.hpp similarity index 86% rename from src/AvTranscoder/mediaProperty/SubtitleProperties.hpp rename to src/AvTranscoder/properties/SubtitleProperties.hpp index 98bb54ce..ebfc7f41 100644 --- a/src/AvTranscoder/mediaProperty/SubtitleProperties.hpp +++ b/src/AvTranscoder/properties/SubtitleProperties.hpp @@ -1,7 +1,7 @@ #ifndef _AV_TRANSCODER_MEDIA_PROPERTY_SUBTITLE_PROPERTIES_HPP #define _AV_TRANSCODER_MEDIA_PROPERTY_SUBTITLE_PROPERTIES_HPP -#include +#include namespace avtranscoder { diff --git a/src/AvTranscoder/mediaProperty/UnknownProperties.hpp b/src/AvTranscoder/properties/UnknownProperties.hpp similarity index 85% rename from src/AvTranscoder/mediaProperty/UnknownProperties.hpp rename to src/AvTranscoder/properties/UnknownProperties.hpp index b396035f..5385fc4b 100644 --- a/src/AvTranscoder/mediaProperty/UnknownProperties.hpp +++ b/src/AvTranscoder/properties/UnknownProperties.hpp @@ -1,7 +1,7 @@ #ifndef _AV_TRANSCODER_MEDIA_PROPERTY_UNKNOWN_PROPERTIES_HPP #define _AV_TRANSCODER_MEDIA_PROPERTY_UNKNOWN_PROPERTIES_HPP -#include +#include namespace avtranscoder { diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.cpp b/src/AvTranscoder/properties/VideoProperties.cpp similarity index 100% rename from src/AvTranscoder/mediaProperty/VideoProperties.cpp rename to src/AvTranscoder/properties/VideoProperties.cpp diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.hpp b/src/AvTranscoder/properties/VideoProperties.hpp similarity index 98% rename from src/AvTranscoder/mediaProperty/VideoProperties.hpp rename to src/AvTranscoder/properties/VideoProperties.hpp index f9e9bd65..c3e59de8 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.hpp +++ b/src/AvTranscoder/properties/VideoProperties.hpp @@ -3,7 +3,7 @@ #include "PixelProperties.hpp" -#include +#include #include #include diff --git a/src/AvTranscoder/mediaProperty/print.cpp b/src/AvTranscoder/properties/print.cpp similarity index 100% rename from src/AvTranscoder/mediaProperty/print.cpp rename to src/AvTranscoder/properties/print.cpp diff --git a/src/AvTranscoder/mediaProperty/print.hpp b/src/AvTranscoder/properties/print.hpp similarity index 100% rename from src/AvTranscoder/mediaProperty/print.hpp rename to src/AvTranscoder/properties/print.hpp diff --git a/src/AvTranscoder/mediaProperty/mediaProperty.i b/src/AvTranscoder/properties/properties.i similarity index 59% rename from src/AvTranscoder/mediaProperty/mediaProperty.i rename to src/AvTranscoder/properties/properties.i index fea549f6..e80e70ce 100644 --- a/src/AvTranscoder/mediaProperty/mediaProperty.i +++ b/src/AvTranscoder/properties/properties.i @@ -1,14 +1,14 @@ %{ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include using namespace avtranscoder; %} @@ -46,13 +46,13 @@ namespace std { %template(ChannelVector) vector< avtranscoder::Channel >; } -%include -%include -%include -%include -%include -%include -%include -%include -%include -%include +%include +%include +%include +%include +%include +%include +%include +%include +%include +%include diff --git a/src/AvTranscoder/mediaProperty/util.cpp b/src/AvTranscoder/properties/util.cpp similarity index 100% rename from src/AvTranscoder/mediaProperty/util.cpp rename to src/AvTranscoder/properties/util.cpp diff --git a/src/AvTranscoder/mediaProperty/util.hpp b/src/AvTranscoder/properties/util.hpp similarity index 100% rename from src/AvTranscoder/mediaProperty/util.hpp rename to src/AvTranscoder/properties/util.hpp diff --git a/src/AvTranscoder/reader/AudioReader.cpp b/src/AvTranscoder/reader/AudioReader.cpp index 2c8a081e..c80d4728 100644 --- a/src/AvTranscoder/reader/AudioReader.cpp +++ b/src/AvTranscoder/reader/AudioReader.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include namespace avtranscoder { diff --git a/src/AvTranscoder/reader/AudioReader.hpp b/src/AvTranscoder/reader/AudioReader.hpp index 9547b983..b3d9c7cf 100644 --- a/src/AvTranscoder/reader/AudioReader.hpp +++ b/src/AvTranscoder/reader/AudioReader.hpp @@ -4,7 +4,7 @@ #include "IReader.hpp" #include -#include +#include namespace avtranscoder { diff --git a/src/AvTranscoder/reader/IReader.cpp b/src/AvTranscoder/reader/IReader.cpp index a83608b2..081c37b5 100644 --- a/src/AvTranscoder/reader/IReader.cpp +++ b/src/AvTranscoder/reader/IReader.cpp @@ -1,6 +1,6 @@ #include "IReader.hpp" -#include +#include #include diff --git a/src/AvTranscoder/reader/IReader.hpp b/src/AvTranscoder/reader/IReader.hpp index f9b3f088..527acf14 100644 --- a/src/AvTranscoder/reader/IReader.hpp +++ b/src/AvTranscoder/reader/IReader.hpp @@ -4,7 +4,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/AvTranscoder/reader/VideoReader.cpp b/src/AvTranscoder/reader/VideoReader.cpp index 3efa12fc..a57d308c 100644 --- a/src/AvTranscoder/reader/VideoReader.cpp +++ b/src/AvTranscoder/reader/VideoReader.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include namespace avtranscoder { diff --git a/src/AvTranscoder/reader/VideoReader.hpp b/src/AvTranscoder/reader/VideoReader.hpp index 02170e72..f95b0b98 100644 --- a/src/AvTranscoder/reader/VideoReader.hpp +++ b/src/AvTranscoder/reader/VideoReader.hpp @@ -4,8 +4,8 @@ #include "IReader.hpp" #include -#include -#include +#include +#include namespace avtranscoder { diff --git a/src/AvTranscoder/stream/IInputStream.hpp b/src/AvTranscoder/stream/IInputStream.hpp index b0d258ba..10e72d65 100644 --- a/src/AvTranscoder/stream/IInputStream.hpp +++ b/src/AvTranscoder/stream/IInputStream.hpp @@ -1,7 +1,7 @@ #ifndef _AV_TRANSCODER_CODED_STREAM_I_INPUT_STREAM_HPP_ #define _AV_TRANSCODER_CODED_STREAM_I_INPUT_STREAM_HPP_ -#include +#include #include #include From 94f541da2edd766fdb2bff67f0164a6a64e106dd Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 3 Dec 2015 11:01:06 +0100 Subject: [PATCH 17/21] pyTest: get all properties as json when testCheckFilePropertiesAsJson --- test/pyTest/testProperties.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pyTest/testProperties.py b/test/pyTest/testProperties.py index 442d647d..5737624a 100644 --- a/test/pyTest/testProperties.py +++ b/test/pyTest/testProperties.py @@ -139,6 +139,6 @@ def testCheckFilePropertiesAsJson(): import json # throw exception if it is not a valid JSON - json.loads(inputFile.getProperties().asJson()) + json.loads(inputFile.getProperties().allPropertiesAsJson()) From 5bbb8984dd6e06ca2ca54b313ac5f9f027f72ffb Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 3 Dec 2015 11:02:11 +0100 Subject: [PATCH 18/21] pyTest: fix how to check env before launching the testProperties --- test/pyTest/testProperties.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pyTest/testProperties.py b/test/pyTest/testProperties.py index 5737624a..15dd54c2 100644 --- a/test/pyTest/testProperties.py +++ b/test/pyTest/testProperties.py @@ -2,7 +2,7 @@ # Check if environment is setup to run the tests if os.environ.get('AVTRANSCODER_TEST_AUDIO_WAVE_FILE') is None or \ - os.environ.get('AVTRANSCODER_TEST_AUDIO_MP4_FILE') is None or \ + os.environ.get('AVTRANSCODER_TEST_VIDEO_MP4_FILE') is None or \ os.environ.get('AVTRANSCODER_TEST_VIDEO_MOV_FILE') is None: from nose.plugins.skip import SkipTest raise SkipTest("Need to define environment variables " From 184a1835b8651b405754b34a0c39d18700d858e9 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 3 Dec 2015 11:42:44 +0100 Subject: [PATCH 19/21] properties: fix json validity on Windows * Added JsonStreamWriter::escapeJsonString to escape strings accordingly to the JSON standard. --- src/AvTranscoder/properties/JsonWriter.cpp | 15 +++++++++++++++ src/AvTranscoder/properties/JsonWriter.hpp | 12 ++++++++++++ test/pyTest/testProperties.py | 4 +--- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/AvTranscoder/properties/JsonWriter.cpp b/src/AvTranscoder/properties/JsonWriter.cpp index 76fc2572..9e04c8bf 100644 --- a/src/AvTranscoder/properties/JsonWriter.cpp +++ b/src/AvTranscoder/properties/JsonWriter.cpp @@ -1,8 +1,23 @@ #include "JsonWriter.hpp" +#include +#include + namespace avtranscoder { namespace json { +std::string JsonStreamWriter::escapeJsonString(const std::string& input) +{ + std::ostringstream ss; + for (std::string::const_iterator iter = input.begin(); iter != input.end(); iter++) { + switch (*iter) { + case '\\': ss << "\\\\"; break; + default: ss << *iter; break; + } + } + return ss.str(); +} + template <> JsonStreamWriter& JsonStreamWriter::operator<<(bool value) { diff --git a/src/AvTranscoder/properties/JsonWriter.hpp b/src/AvTranscoder/properties/JsonWriter.hpp index a53d3160..f07ffbb0 100644 --- a/src/AvTranscoder/properties/JsonWriter.hpp +++ b/src/AvTranscoder/properties/JsonWriter.hpp @@ -52,6 +52,9 @@ class AvExport JsonStreamWriter } virtual std::ostream& finish() = 0; + + // Escape strings accordingly to the JSON standard + std::string escapeJsonString(const std::string& input); }; // Write a boolean to the stream. @@ -76,6 +79,15 @@ class AvExport JsonObjectStreamWriter : public JsonStreamWriter return *this; } + template<> + JsonObjectStreamWriter& operator<<(const std::pair pair) + { + std::string first(pair.first); + std::string second(pair.second); + addSep() << escapeJsonString(first).c_str() << ':' << escapeJsonString(second).c_str(); + return *this; + } + protected: virtual std::ostream& finish() { return stream << '}'; } }; diff --git a/test/pyTest/testProperties.py b/test/pyTest/testProperties.py index 15dd54c2..5761ebee 100644 --- a/test/pyTest/testProperties.py +++ b/test/pyTest/testProperties.py @@ -138,7 +138,5 @@ def testCheckFilePropertiesAsJson(): inputFile = av.InputFile( inputFileName ) import json - # throw exception if it is not a valid JSON + # json.loads method throws a ValueError if it is not a valid JSON. json.loads(inputFile.getProperties().allPropertiesAsJson()) - - From 533569294d30e9da0ac7c7cbc16985b921f8dddb Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Fri, 4 Dec 2015 18:51:30 +0100 Subject: [PATCH 20/21] JsonWriter: fix compilation with gcc * The error was: 'explicit specialization in non-namespace scope'. * Solution: move the specializations of the member templates outside of the class body. --- src/AvTranscoder/properties/JsonWriter.cpp | 9 +++++++++ src/AvTranscoder/properties/JsonWriter.hpp | 12 +++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/AvTranscoder/properties/JsonWriter.cpp b/src/AvTranscoder/properties/JsonWriter.cpp index 9e04c8bf..bf637065 100644 --- a/src/AvTranscoder/properties/JsonWriter.cpp +++ b/src/AvTranscoder/properties/JsonWriter.cpp @@ -18,6 +18,15 @@ std::string JsonStreamWriter::escapeJsonString(const std::string& input) return ss.str(); } +template<> +JsonObjectStreamWriter& JsonObjectStreamWriter::operator<<(const std::pair pair) +{ + std::string first(pair.first); + std::string second(pair.second); + addSep() << escapeJsonString(first).c_str() << ':' << escapeJsonString(second).c_str(); + return *this; +} + template <> JsonStreamWriter& JsonStreamWriter::operator<<(bool value) { diff --git a/src/AvTranscoder/properties/JsonWriter.hpp b/src/AvTranscoder/properties/JsonWriter.hpp index f07ffbb0..b41ed8f9 100644 --- a/src/AvTranscoder/properties/JsonWriter.hpp +++ b/src/AvTranscoder/properties/JsonWriter.hpp @@ -79,19 +79,13 @@ class AvExport JsonObjectStreamWriter : public JsonStreamWriter return *this; } - template<> - JsonObjectStreamWriter& operator<<(const std::pair pair) - { - std::string first(pair.first); - std::string second(pair.second); - addSep() << escapeJsonString(first).c_str() << ':' << escapeJsonString(second).c_str(); - return *this; - } - protected: virtual std::ostream& finish() { return stream << '}'; } }; +template<> +JsonObjectStreamWriter& JsonObjectStreamWriter::operator<<(const std::pair pair); + /** * @brief Write an array to a stream. */ From adb18bc2342f2f1f49396a2d361515230dcd68d1 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Mon, 7 Dec 2015 10:39:12 +0100 Subject: [PATCH 21/21] Appveyor: check chocolatey log on failure --- appveyor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appveyor.yml b/appveyor.yml index c28a79d1..7da1a14a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -27,6 +27,7 @@ test_script: - tools/appveyor.python.nosetests.bat on_failure: + - type "C:\ProgramData\chocolatey\logs\chocolatey.log" - type "C:\projects\avtranscoder\build\CMakeFiles\CMakeOutput.log" #on_success: