]> git.sesse.net Git - casparcg/blobdiff - modules/ffmpeg/ffmpeg.cpp
* Added logging of severe diagnostics events to log at warning level. graph::set_tag...
[casparcg] / modules / ffmpeg / ffmpeg.cpp
index 9a5d650f44245d0a6c0aa85a46781e5fd77bf5c6..7a151f05b62879d6754560a5e736c08c307f6e84 100644 (file)
 
 #include "StdAfx.h"
 
+#include "ffmpeg.h"
+
 #include "consumer/ffmpeg_consumer.h"
+#include "consumer/streaming_consumer.h"
 #include "producer/ffmpeg_producer.h"
 #include "producer/util/util.h"
 
@@ -31,6 +34,9 @@
 #include <core/producer/frame_producer.h>
 #include <core/producer/media_info/media_info.h>
 #include <core/producer/media_info/media_info_repository.h>
+#include <core/system_info_provider.h>
+
+#include <boost/property_tree/ptree.hpp>
 
 #include <tbb/recursive_mutex.h>
 
@@ -198,7 +204,39 @@ void log_callback(void* ptr, int level, const char* fmt, va_list vl)
 //}
 //#pragma warning (pop)
 
-void init(const spl::shared_ptr<core::media_info_repository>& media_info_repo)
+std::wstring make_version(unsigned int ver)
+{
+       std::wstringstream str;
+       str << ((ver >> 16) & 0xFF) << L"." << ((ver >> 8) & 0xFF) << L"." << ((ver >> 0) & 0xFF);
+       return str.str();
+}
+
+std::wstring avcodec_version()
+{
+       return make_version(::avcodec_version());
+}
+
+std::wstring avformat_version()
+{
+       return make_version(::avformat_version());
+}
+
+std::wstring avutil_version()
+{
+       return make_version(::avutil_version());
+}
+
+std::wstring avfilter_version()
+{
+       return make_version(::avfilter_version());
+}
+
+std::wstring swscale_version()
+{
+       return make_version(::swscale_version());
+}
+
+void init(core::module_dependencies dependencies)
 {
        av_lockmgr_register(ffmpeg_lock_callback);
        av_log_set_callback(log_callback);
@@ -209,10 +247,13 @@ void init(const spl::shared_ptr<core::media_info_repository>& media_info_repo)
     avformat_network_init();
     avcodec_register_all();
        
-       core::register_consumer_factory([](const std::vector<std::wstring>& params){return create_consumer(params);});
-       core::register_producer_factory(create_producer);
+       dependencies.consumer_registry->register_consumer_factory(L"FFMpeg Consumer", create_consumer, describe_consumer);
+       dependencies.consumer_registry->register_consumer_factory(L"Streaming Consumer",  create_streaming_consumer, describe_streaming_consumer);
+       dependencies.consumer_registry->register_preconfigured_consumer_factory(L"file", create_preconfigured_consumer);
+       dependencies.consumer_registry->register_preconfigured_consumer_factory(L"stream", create_preconfigured_streaming_consumer);
+       dependencies.producer_registry->register_producer_factory(L"FFmpeg Producer", create_producer, describe_producer);
        
-       media_info_repo->register_extractor(
+       dependencies.media_info_repo->register_extractor(
                        [](const std::wstring& file, const std::wstring& extension, core::media_info& info) -> bool
                        {
                                // TODO: merge thumbnail generation from 2.0
@@ -230,7 +271,14 @@ void init(const spl::shared_ptr<core::media_info_repository>& media_info_repo)
 
                                return try_get_duration(file, info.duration, info.time_base);
                        });
-
+       dependencies.system_info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info)
+       {
+               info.add(L"system.ffmpeg.avcodec", avcodec_version());
+               info.add(L"system.ffmpeg.avformat", avformat_version());
+               info.add(L"system.ffmpeg.avfilter", avfilter_version());
+               info.add(L"system.ffmpeg.avutil", avutil_version());
+               info.add(L"system.ffmpeg.swscale", swscale_version());
+       });
 }
 
 void uninit()
@@ -240,36 +288,4 @@ void uninit()
        av_lockmgr_register(nullptr);
 }
 
-std::wstring make_version(unsigned int ver)
-{
-       std::wstringstream str;
-       str << ((ver >> 16) & 0xFF) << L"." << ((ver >> 8) & 0xFF) << L"." << ((ver >> 0) & 0xFF);
-       return str.str();
-}
-
-std::wstring avcodec_version()
-{
-       return make_version(::avcodec_version());
-}
-
-std::wstring avformat_version()
-{
-       return make_version(::avformat_version());
-}
-
-std::wstring avutil_version()
-{
-       return make_version(::avutil_version());
-}
-
-std::wstring avfilter_version()
-{
-       return make_version(::avfilter_version());
-}
-
-std::wstring swscale_version()
-{
-       return make_version(::swscale_version());
-}
-
 }}
\ No newline at end of file