]> git.sesse.net Git - casparcg/commitdiff
* Extracted module startup from server.cpp to a generated included_modules.h.
authorHelge Norberg <helge.norberg@svt.se>
Fri, 10 Apr 2015 10:50:36 +0000 (12:50 +0200)
committerHelge Norberg <helge.norberg@svt.se>
Fri, 10 Apr 2015 10:50:36 +0000 (12:50 +0200)
* Each module CMakeLists.txt adds itself to included_modules.h, so if a project is not built under for example linux included_modules.h will not try to include the flash module.

32 files changed:
.gitignore
CMakeLists.txt
core/CMakeLists.txt
core/module_dependencies.h [new file with mode: 0644]
modules/CMakeLists.txt
modules/bluefish/CMakeLists.txt
modules/bluefish/bluefish.cpp
modules/bluefish/bluefish.h
modules/decklink/CMakeLists.txt
modules/decklink/decklink.cpp
modules/decklink/decklink.h
modules/ffmpeg/CMakeLists.txt
modules/ffmpeg/ffmpeg.cpp
modules/ffmpeg/ffmpeg.h
modules/flash/CMakeLists.txt
modules/flash/flash.cpp
modules/flash/flash.h
modules/image/CMakeLists.txt
modules/image/image.cpp
modules/image/image.h
modules/oal/CMakeLists.txt
modules/oal/oal.cpp
modules/oal/oal.h
modules/psd/CMakeLists.txt
modules/psd/psd_scene_producer.cpp
modules/psd/psd_scene_producer.h
modules/screen/CMakeLists.txt
modules/screen/screen.cpp
modules/screen/screen.h
shell/CMakeLists.txt
shell/included_modules.tmpl [new file with mode: 0644]
shell/server.cpp

index f3cc6864a0f04c75f3940bab4014e18455e2750a..1eeef3fa225e1608a8c614199fb48c4de02f3837 100644 (file)
@@ -1,4 +1,5 @@
 /version.h
+/shell/included_modules.h
 
 /unit-test/bin
 /unit-test/tmp
index 5a1d576b6f0f9d1e5cdb4c68c2d48081240cc73f..bb6d853ccb2ea500c230bb133258c7abf6600d5d 100644 (file)
@@ -76,10 +76,46 @@ endif ()
 cmake_policy(SET CMP0045 OLD)
 include(CMake/PrecompiledHeader.cmake)
 
+set(CASPARCG_MODULE_INCLUDE_STATEMENTS "" CACHE INTERNAL "")
+set(CASPARCG_MODULE_INIT_STATEMENTS            "" CACHE INTERNAL "")
+set(CASPARCG_MODULE_UNINIT_STATEMENTS  "" CACHE INTERNAL "")
+set(CASPARCG_MODULE_PROJECTS                   "" CACHE INTERNAL "")
+
+function(casparcg_add_include_statement HEADER_FILE_TO_INCLUDE)
+       set(CASPARCG_MODULE_INCLUDE_STATEMENTS "${CASPARCG_MODULE_INCLUDE_STATEMENTS}"
+                       "#include <${HEADER_FILE_TO_INCLUDE}>"
+                       CACHE INTERNAL "")
+endfunction()
+
+function(casparcg_add_init_statement INIT_FUNCTION_NAME NAME_TO_LOG)
+       set(CASPARCG_MODULE_INIT_STATEMENTS "${CASPARCG_MODULE_INIT_STATEMENTS}"
+                       "       ${INIT_FUNCTION_NAME}(dependencies)\;"
+                       "       CASPAR_LOG(info) << L\"Initialized ${NAME_TO_LOG} module.\"\;"
+                       ""
+                       CACHE INTERNAL "")
+endfunction()
+
+function(casparcg_add_uninit_statement UNINIT_FUNCTION_NAME)
+       set(CASPARCG_MODULE_UNINIT_STATEMENTS "${CASPARCG_MODULE_UNINIT_STATEMENTS}"
+                       "       ${UNINIT_FUNCTION_NAME}()\;"
+                       CACHE INTERNAL "")
+endfunction()
+
+function(casparcg_add_module_project PROJECT)
+       set(CASPARCG_MODULE_PROJECTS "${CASPARCG_MODULE_PROJECTS}" "${PROJECT}" CACHE INTERNAL "")
+endfunction()
+
+# http://stackoverflow.com/questions/7172670/best-shortest-way-to-join-a-list-in-cmake
+function(join_list VALUES GLUE OUTPUT)
+       string (REGEX REPLACE "([^\\]|^);" "\\1${GLUE}" _TMP_STR "${VALUES}")
+       string (REGEX REPLACE "[\\](.)" "\\1" _TMP_STR "${_TMP_STR}") #fixes escaping
+       set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
+endfunction()
+
 add_subdirectory(accelerator)
 add_subdirectory(common)
 add_subdirectory(core)
 add_subdirectory(modules)
+
 add_subdirectory(protocol)
 add_subdirectory(shell)
-
index 8978b45ced809b865d9bbc2a4b68cc874dfa6a80..90940807f7c7fa073fe3274075d84fc9819f3365 100644 (file)
@@ -109,6 +109,7 @@ set(HEADERS
                producer/stage.h
                producer/variable.h
 
+               module_dependencies.h
                system_info_provider.h
                StdAfx.h
                thumbnail_generator.h
diff --git a/core/module_dependencies.h b/core/module_dependencies.h
new file mode 100644 (file)
index 0000000..d37ecec
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>
+*
+* This file is part of CasparCG (www.casparcg.com).
+*
+* CasparCG is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* CasparCG is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with CasparCG. If not, see <http://www.gnu.org/licenses/>.
+*
+* Author: Helge Norberg, helge.norberg@svt.se
+*/
+
+#pragma once
+
+#include <common/memory.h>
+
+#include "system_info_provider.h"
+#include "producer/cg_proxy.h"
+#include "producer/media_info/media_info_repository.h"
+
+namespace caspar { namespace core {
+
+struct module_dependencies
+{
+       const spl::shared_ptr<system_info_provider_repository>  system_info_provider_repo;
+       const spl::shared_ptr<cg_producer_registry>                             cg_registry;
+       const spl::shared_ptr<media_info_repository>                    media_info_repo;
+
+       module_dependencies(
+                       spl::shared_ptr<system_info_provider_repository> system_info_provider_repo,
+                       spl::shared_ptr<cg_producer_registry> cg_registry,
+                       spl::shared_ptr<media_info_repository> media_info_repo)
+               : system_info_provider_repo(std::move(system_info_provider_repo))
+               , cg_registry(std::move(cg_registry))
+               , media_info_repo(std::move(media_info_repo))
+       {
+       }
+};
+
+}}
index 17216bbcf1d69f2132862bdc4a13fb9c668fbd65..f87dd447d41339ada35216b1d17a7a3ee6c1d078 100644 (file)
@@ -1,19 +1,21 @@
 cmake_minimum_required (VERSION 2.6)
 project ("modules")
 
+add_subdirectory(ffmpeg)
+
 if (MSVC)
        add_subdirectory(bluefish)
        add_subdirectory(decklink)
+       add_subdirectory(oal)
+       add_subdirectory(screen)
 endif ()
 
-add_subdirectory(ffmpeg)
+add_subdirectory(image)
 
 if (MSVC)
        add_subdirectory(flash)
-       add_subdirectory(image)
-       add_subdirectory(oal)
        add_subdirectory(psd)
-       add_subdirectory(reroute)
-       add_subdirectory(screen)
 endif ()
 
+add_subdirectory(reroute)
+
index 790d7c28176db3b9b530c09b8ac59f44b68817a8..0551dd05684e50389e9a2082867a1b4727b3923b 100644 (file)
@@ -35,3 +35,7 @@ source_group(sources ./*)
 source_group(sources\\consumer consumer/*)
 
 target_link_libraries(bluefish common core)
+
+casparcg_add_include_statement("modules/bluefish/bluefish.h")
+casparcg_add_init_statement("bluefish::init" "bluefish")
+casparcg_add_module_project("bluefish")
index 0f897b8292b9e85eb97a83fdb3d58a65c143234d..34a83a33f91fe265781ae8e9ca477cb1495c6941 100644 (file)
@@ -76,7 +76,7 @@ std::vector<std::wstring> device_list()
        return devices;
 }
 
-void init(const spl::shared_ptr<core::system_info_provider_repository>& repo)
+void init(core::module_dependencies dependencies)
 {
        try
        {
@@ -86,7 +86,7 @@ void init(const spl::shared_ptr<core::system_info_provider_repository>& repo)
 
        core::register_consumer_factory(create_consumer);
        core::register_preconfigured_consumer_factory(L"bluefish", create_preconfigured_consumer);
-       repo->register_system_info_provider([](boost::property_tree::wptree& info)
+       dependencies.system_info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info)
        {
                info.add(L"system.bluefish.version", version());
 
index 390f5dec44aeb29436da260182ea4f6a600cb512..b23d1ec70e2c1c92c233ac5ec42c47489fa9314a 100644 (file)
 
 #pragma once
 
-#include <string>
-#include <vector>
+#include <core/module_dependencies.h>
 
-#include <common/memory.h>
+namespace caspar { namespace bluefish {
 
-namespace caspar {
-namespace core {
+void init(core::module_dependencies dependencies);
 
-class system_info_provider_repository;
-
-}
-
-namespace bluefish {
-
-void init(const spl::shared_ptr<core::system_info_provider_repository>& repo);
-
-}}
\ No newline at end of file
+}}
index 632ccd9ef9e65212d284adc7db47f00c422eaa83..1b9cf2ac463139b124983de355b0c52aa8fc4714 100644 (file)
@@ -43,3 +43,7 @@ source_group(sources\\interop interop/*)
 source_group(sources\\producer producer/*)
 
 target_link_libraries(decklink common core ffmpeg)
+
+casparcg_add_include_statement("modules/decklink/decklink.h")
+casparcg_add_init_statement("decklink::init" "decklink")
+casparcg_add_module_project("decklink")
index ca2e41fe6abae159d50224158cbaa87bf4d21a3c..95d7a70c175d0da35fcaa187e775baad9578ca54 100644 (file)
@@ -98,7 +98,7 @@ std::vector<std::wstring> device_list()
        return devices;
 }
 
-void init(const spl::shared_ptr<core::system_info_provider_repository>& repo)
+void init(core::module_dependencies dependencies)
 {
        struct co_init
        {
@@ -113,7 +113,7 @@ void init(const spl::shared_ptr<core::system_info_provider_repository>& repo)
        core::register_consumer_factory(create_consumer);
        core::register_preconfigured_consumer_factory(L"decklink", create_preconfigured_consumer);
        core::register_producer_factory(create_producer);
-       repo->register_system_info_provider([](boost::property_tree::wptree& info)
+       dependencies.system_info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info)
        {
                info.add(L"system.decklink.version", version());
 
@@ -122,4 +122,4 @@ void init(const spl::shared_ptr<core::system_info_provider_repository>& repo)
        });
 }
 
-}}
\ No newline at end of file
+}}
index 060a9ca6f68feceedd4ae890f749876f71072ad6..4231e5c16cfab5de3728385997635d1a95378e3a 100644 (file)
 
 #pragma once
 
-#include <string>
-#include <vector>
+#include <core/module_dependencies.h>
 
-#include <common/memory.h>
+namespace caspar { namespace decklink {
 
-namespace caspar {
-namespace core {
+void init(core::module_dependencies dependencies);
 
-class system_info_provider_repository;
-
-}
-
-namespace decklink {
-
-void init(const spl::shared_ptr<core::system_info_provider_repository>& repo);
-
-}}
\ No newline at end of file
+}}
index 65ecbdf9a2739d87c35492d430a73a43cce5aead..392a13273d03e2304ce6076119a94ec70e5ac226 100644 (file)
@@ -72,3 +72,8 @@ source_group(sources\\producer\\video producer/video/*)
 source_group(sources\\producer producer/*)
 
 target_link_libraries(ffmpeg common core)
+
+casparcg_add_include_statement("modules/ffmpeg/ffmpeg.h")
+casparcg_add_init_statement("ffmpeg::init" "ffmpeg")
+casparcg_add_uninit_statement("ffmpeg::uninit")
+casparcg_add_module_project("ffmpeg")
index 871d984b2c9ca3204af86b037e1c1eb1c2e77af5..a29d9395ded7ec90cc3950a8464acb3f2a29f5ae 100644 (file)
@@ -235,9 +235,7 @@ std::wstring swscale_version()
        return make_version(::swscale_version());
 }
 
-void init(
-               const spl::shared_ptr<core::media_info_repository>& media_info_repo,
-               const spl::shared_ptr<core::system_info_provider_repository>& system_info_repo)
+void init(core::module_dependencies dependencies)
 {
        av_lockmgr_register(ffmpeg_lock_callback);
        av_log_set_callback(log_callback);
@@ -252,7 +250,7 @@ void init(
        core::register_preconfigured_consumer_factory(L"file", create_preconfigured_consumer);
        core::register_producer_factory(create_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
@@ -270,7 +268,7 @@ void init(
 
                                return try_get_duration(file, info.duration, info.time_base);
                        });
-       system_info_repo->register_system_info_provider([](boost::property_tree::wptree& info)
+       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());
index e96e8b067eac3061d083087892d21079ae3e50ae..e47e74cf44ba1fe90a097611f556a0a7b4c2150c 100644 (file)
 #pragma once
 
 #include <string>
+#include <core/module_dependencies.h>
 
-#include <common/memory.h>
+namespace caspar { namespace ffmpeg {
 
-namespace caspar {
-namespace core {
-
-struct media_info_repository;
-class system_info_provider_repository;
-
-}
-
-namespace ffmpeg {
-
-void init(
-               const spl::shared_ptr<core::media_info_repository>& media_info_repo,
-               const spl::shared_ptr<core::system_info_provider_repository>& system_info_repo);
+void init(core::module_dependencies dependencies);
 void uninit();
 
-}}
\ No newline at end of file
+}}
index 75a641e109475b26c4dff2bf314da764b81ef198..40b95123130718adc9bd028647a4bba113ead48b 100644 (file)
@@ -44,3 +44,7 @@ source_group(sources\\util util/*)
 source_group(sources ./*)
 
 target_link_libraries(flash common core)
+
+casparcg_add_include_statement("modules/flash/flash.h")
+casparcg_add_init_statement("flash::init" "flash")
+casparcg_add_module_project("flash")
index 0a415cc54f27573121c1424119b165f176ee9a86..e648e70457b5fd1e26da74255243347a12fd568c 100644 (file)
@@ -48,9 +48,9 @@ namespace caspar { namespace flash {
 std::wstring version();
 std::wstring cg_version();
 
-std::wstring get_absolute(const std::wstring& filename)
+std::wstring get_absolute(const std::wstring& base_folder, const std::wstring& filename)
 {
-       return (boost::filesystem::path(env::template_folder()) / filename).wstring();
+       return (boost::filesystem::path(base_folder) / filename).wstring();
 }
 
 class flash_cg_proxy : public core::cg_proxy, boost::noncopyable
@@ -164,6 +164,9 @@ spl::shared_ptr<core::frame_producer> create_ct_producer(
                const core::video_format_desc& format_desc,
                const std::vector<std::wstring>& params)
 {
+       if (params.empty() || !boost::filesystem::exists(get_absolute(env::media_folder(), params.at(0)) + L".ct"))
+               return core::frame_producer::empty();
+
        auto flash_producer = flash::create_producer(frame_factory, format_desc, {});
        auto producer = flash_producer;
        flash_cg_proxy(producer, env::media_folder()).add(0, params[0], true, L"", L"");
@@ -171,14 +174,11 @@ spl::shared_ptr<core::frame_producer> create_ct_producer(
        return producer;
 }
 
-void init(
-               const spl::shared_ptr<core::media_info_repository>& media_info_repo,
-               const spl::shared_ptr<core::system_info_provider_repository>& info_provider_repo,
-               const spl::shared_ptr<core::cg_producer_registry>& cg_registry)
+void init(core::module_dependencies dependencies)
 {
        core::register_producer_factory(create_ct_producer);
        core::register_producer_factory(create_swf_producer);
-       media_info_repo->register_extractor([](const std::wstring& file, const std::wstring& extension, core::media_info& info)
+       dependencies.media_info_repo->register_extractor([](const std::wstring& file, const std::wstring& extension, core::media_info& info)
        {
                if (extension != L".CT" && extension != L".SWF")
                        return false;
@@ -187,18 +187,18 @@ void init(
 
                return true;
        });
-       info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info)
+       dependencies.system_info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info)
        {
                info.add(L"system.flash", version());
        });
-       info_provider_repo->register_version_provider(L"FLASH", &version);
-       info_provider_repo->register_version_provider(L"TEMPLATEHOST", &cg_version);
-       cg_registry->register_cg_producer(
+       dependencies.system_info_provider_repo->register_version_provider(L"FLASH", &version);
+       dependencies.system_info_provider_repo->register_version_provider(L"TEMPLATEHOST", &cg_version);
+       dependencies.cg_registry->register_cg_producer(
                        L"flash",
                        { L".ft", L".ct" },
                        [](const std::wstring& filename)
                        {
-                               return read_template_meta_info(get_absolute(filename) + L".ft");
+                               return read_template_meta_info(get_absolute(env::template_folder(), filename) + L".ft");
                        },
                        [](const spl::shared_ptr<core::frame_producer>& producer)
                        {
index b57278bf411997ff3cfa5c4858c17ddc55644d1d..0dbc582d1783a68b6b2b7021abeb84a919f5bf14 100644 (file)
 
 #pragma once
 
-#include <common/memory.h>
+#include <core/module_dependencies.h>
 
-namespace caspar {
+namespace caspar { namespace flash {
 
-namespace core {
+void init(core::module_dependencies dependencies);
 
-struct media_info_repository;
-class system_info_provider_repository;
-class cg_producer_registry;
-
-}
-
-namespace flash {
-
-void init(
-               const spl::shared_ptr<core::media_info_repository>& media_info_repo,
-               const spl::shared_ptr<core::system_info_provider_repository>& info_provider_repo,
-               const spl::shared_ptr<core::cg_producer_registry>& cg_registry);
-
-}}
\ No newline at end of file
+}}
index c68a05db52bfac372d3515802ab3e17276e37cd7..504d9f7771f85cac278f74fba6cbd0f3d399f068 100644 (file)
@@ -42,3 +42,8 @@ source_group(sources\\util util/*)
 source_group(sources ./*)
 
 target_link_libraries(image common core)
+
+casparcg_add_include_statement("modules/image/image.h")
+casparcg_add_init_statement("image::init" "image")
+casparcg_add_uninit_statement("image::uninit")
+casparcg_add_module_project("image")
index 7146feaca06f9a681ca2647b739af86238ba9e42..66c208205f5250346559bf142774ebcdefbe479d 100644 (file)
@@ -44,16 +44,14 @@ std::wstring version()
        return u16(FreeImage_GetVersion());
 }
 
-void init(
-               const spl::shared_ptr<core::media_info_repository>& repo,
-               const spl::shared_ptr<core::system_info_provider_repository>& system_info_repo)
+void init(core::module_dependencies dependencies)
 {
        FreeImage_Initialise();
        core::register_producer_factory(create_scroll_producer);
        core::register_producer_factory(create_producer);
        core::register_thumbnail_producer_factory(create_thumbnail_producer);
        core::register_consumer_factory(create_consumer);
-       repo->register_extractor([](const std::wstring& file, const std::wstring& extension, core::media_info& info)
+       dependencies.media_info_repo->register_extractor([](const std::wstring& file, const std::wstring& extension, core::media_info& info)
        {
                if (extension == L".TGA"
                        || extension == L".COL"
@@ -70,7 +68,7 @@ void init(
 
                return false;
        });
-       system_info_repo->register_system_info_provider([](boost::property_tree::wptree& info)
+       dependencies.system_info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info)
        {
                info.add(L"system.freeimage", version());
        });
index 888865052018a42576ee40a73d4a64e137888e70..55643158d03880b627183017c7ed1f28daf99710 100644 (file)
 
 #pragma once
 
-#include <string>
+#include <core/module_dependencies.h>
 
-#include <common/memory.h>
+namespace caspar { namespace image {
 
-namespace caspar {
-
-namespace core {
-
-struct media_info_repository;
-class system_info_provider_repository;
-
-}
-
-namespace image {
-
-void init(
-               const spl::shared_ptr<core::media_info_repository>& repo,
-               const spl::shared_ptr<core::system_info_provider_repository>& system_info_repo);
+void init(core::module_dependencies dependencies);
 void uninit();
 
 }}
index 236ce16f9129f6412abc8820129d0767947f5ceb..f534a25d8c64a710d65c981ba326c492d9240d40 100644 (file)
@@ -26,3 +26,7 @@ source_group(sources\\consumer consumer/*)
 source_group(sources ./*)
 
 target_link_libraries(oal common core)
+
+casparcg_add_include_statement("modules/oal/oal.h")
+casparcg_add_init_statement("oal::init" "oal")
+casparcg_add_module_project("oal")
index f7276462443c822e55f3a0e02383c4f9e7d7eb47..77321f9d25b6ca7431d42ff32a2df7cb7c104280 100644 (file)
 
 namespace caspar { namespace oal {
 
-void init()
+void init(core::module_dependencies dependencies)
 {
        core::register_consumer_factory(create_consumer);
        core::register_preconfigured_consumer_factory(L"system-audio", create_preconfigured_consumer);
 }
 
-}}
\ No newline at end of file
+}}
index 59cd93dab1856b905ddc394e19e3d164b324b769..3f0392b79c1a28a686a595b52eeda4cc79816713 100644 (file)
 
 #pragma once
 
+#include <core/module_dependencies.h>
+
 namespace caspar { namespace oal {
 
-void init();
+void init(core::module_dependencies dependencies);
 
-}}
\ No newline at end of file
+}}
index dc98daaec55e9f71e140ca3854f81950a0a691f8..93a36f37a66007550d775cc2cab89ab657dbaf29 100644 (file)
@@ -39,3 +39,7 @@ source_group(sources\\util util/*)
 source_group(sources ./*)
 
 target_link_libraries(psd common core)
+
+casparcg_add_include_statement("modules/psd/psd_scene_producer.h")
+casparcg_add_init_statement("psd::init" "psd")
+casparcg_add_module_project("psd")
index 6e4e9d5f3faa50a8ae3f1147ca661e2a79210fbd..b0070aef5d52d9a42def432f274d7b19665d2a57 100644 (file)
 
 namespace caspar { namespace psd {
 
-void init()
-{
-       core::register_producer_factory(create_psd_scene_producer);
-}
-
 core::text::text_info get_text_info(const boost::property_tree::wptree& ptree)
 {
        core::text::text_info result;
@@ -396,4 +391,9 @@ spl::shared_ptr<core::frame_producer> create_psd_scene_producer(const spl::share
        return root;
 }
 
+void init(core::module_dependencies dependencies)
+{
+       core::register_producer_factory(create_psd_scene_producer);
+}
+
 }}
\ No newline at end of file
index 882cc5a8f72483f9733cfcba17bee8ed53bc5e05..f0c27f00b1a18f3e24216d0bebf67601647b7fce 100644 (file)
 
 #pragma once
 
-#include <core/producer/frame_producer.h>
-
-#include <string>
-#include <vector>
-#include <common/memory.h>
+#include <core/module_dependencies.h>
 
 namespace caspar { namespace psd {
 
-void init();
-
-spl::shared_ptr<core::frame_producer> create_psd_scene_producer(const spl::shared_ptr<core::frame_factory>& frame_factory, const core::video_format_desc& format_desc, const std::vector<std::wstring>& params);
+void init(core::module_dependencies dependencies);
 
-}}
\ No newline at end of file
+}}
index 417f78e2df44f6d089cdc404d6bdd56f1db31ce7..dece08daeb2f3c02ae85294b85d060ed1b7e1487 100644 (file)
@@ -29,3 +29,7 @@ source_group(sources\\consumer consumer/*)
 source_group(sources ./*)
 
 target_link_libraries(screen common core ffmpeg)
+
+casparcg_add_include_statement("modules/screen/screen.h")
+casparcg_add_init_statement("screen::init" "screen")
+casparcg_add_module_project("screen")
index 0e6e90d7460a84116b47e6e6a5ce3106478da8a7..15a7ca12a07c76fedb0012a5d09bfa21a316a943 100644 (file)
 
 namespace caspar { namespace screen {
 
-void init()
+void init(core::module_dependencies dependencies)
 {
        core::register_consumer_factory(create_consumer);
        core::register_preconfigured_consumer_factory(L"screen", create_preconfigured_consumer);
 }
 
-}}
\ No newline at end of file
+}}
index a112b657ee408b8f6428ba8be3af26a334bc6597..85f760029c0d861aa1229f45a10451599e76a673 100644 (file)
 
 #pragma once
 
+#include <core/module_dependencies.h>
+
 namespace caspar { namespace screen {
 
-void init();
+void init(core::module_dependencies dependencies);
 
-}}
\ No newline at end of file
+}}
index f39048b68cb5b00930a014e50b7e5aa62f7bf16a..4919abd2e42fb58294f936f377a73aaa4f399a68 100644 (file)
@@ -1,6 +1,11 @@
 cmake_minimum_required (VERSION 2.6)
 project (shell)
 
+join_list("${CASPARCG_MODULE_INCLUDE_STATEMENTS}" "\n" CASPARCG_MODULE_INCLUDE_STATEMENTS)
+join_list("${CASPARCG_MODULE_INIT_STATEMENTS}" "\n" CASPARCG_MODULE_INIT_STATEMENTS)
+join_list("${CASPARCG_MODULE_UNINIT_STATEMENTS}" "\n" CASPARCG_MODULE_UNINIT_STATEMENTS)
+configure_file("${PROJECT_SOURCE_DIR}/included_modules.tmpl" "${PROJECT_SOURCE_DIR}/included_modules.h")
+
 if (MSVC)
        set(OS_SPECIFIC_SOURCES
                        resource.h
@@ -16,6 +21,7 @@ set(SOURCES
                stdafx.cpp
 )
 set(HEADERS
+               included_modules.h
                server.h
                stdafx.h
 )
@@ -36,15 +42,8 @@ target_link_libraries(casparcg
                core
                protocol
 
-               bluefish
-               decklink
-               ffmpeg
-               flash
-               image
-               oal
-               psd
+               "${CASPARCG_MODULE_PROJECTS}"
                reroute
-               screen
 
                alibcof64.lib
                jpeg.lib
diff --git a/shell/included_modules.tmpl b/shell/included_modules.tmpl
new file mode 100644 (file)
index 0000000..e786360
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Generated file.
+ */
+
+#pragma once
+
+#include <common/log.h>
+
+#include <core/module_dependencies.h>
+${CASPARCG_MODULE_INCLUDE_STATEMENTS}
+
+namespace caspar {
+
+void initialize_modules(const core::module_dependencies& dependencies)
+{${CASPARCG_MODULE_INIT_STATEMENTS}}
+
+void uninitialize_modules()
+{${CASPARCG_MODULE_UNINIT_STATEMENTS}
+}
+
+}
index 072cd82e194f3ea6a3d2199a6c2ba3d87fde63e8..aadb90dc49daee52b83800e58dfd8c8d93622a0a 100644 (file)
@@ -21,6 +21,7 @@
 #include "stdafx.h"
 
 #include "server.h"
+#include "included_modules.h"
 
 #include <accelerator/accelerator.h>
 
 #include <core/diagnostics/osd_graph.h>
 #include <core/system_info_provider.h>
 
-#include <modules/bluefish/bluefish.h>
-#include <modules/decklink/decklink.h>
-#include <modules/ffmpeg/ffmpeg.h>
-#include <modules/flash/flash.h>
-#include <modules/oal/oal.h>
-#include <modules/screen/screen.h>
-#include <modules/image/image.h>
 #include <modules/image/consumer/image_consumer.h>
-#include <modules/psd/psd_scene_producer.h>
 
 #include <protocol/asio/io_service_manager.h>
 #include <protocol/amcp/AMCPProtocolStrategy.h>
@@ -110,29 +103,10 @@ struct server::impl : boost::noncopyable
                core::diagnostics::osd::register_sink();
                diag_subject_->attach_parent(monitor_subject_);
 
-               ffmpeg::init(media_info_repo_, system_info_provider_repo_);
-               CASPAR_LOG(info) << L"Initialized ffmpeg module.";
-                                                         
-               bluefish::init(system_info_provider_repo_);
-               CASPAR_LOG(info) << L"Initialized bluefish module.";
-                                                         
-               decklink::init(system_info_provider_repo_);       
-               CASPAR_LOG(info) << L"Initialized decklink module.";
-                                                                                                                 
-               oal::init();              
-               CASPAR_LOG(info) << L"Initialized oal module.";
-                                                         
-               screen::init();           
-               CASPAR_LOG(info) << L"Initialized ogl module.";
-
-               image::init(media_info_repo_, system_info_provider_repo_);
-               CASPAR_LOG(info) << L"Initialized image module.";
-
-               flash::init(media_info_repo_, system_info_provider_repo_, cg_registry_);
-               CASPAR_LOG(info) << L"Initialized flash module.";
-
-               psd::init();              
-               CASPAR_LOG(info) << L"Initialized psd module.";
+               initialize_modules(module_dependencies(
+                               system_info_provider_repo_,
+                               cg_registry_,
+                               media_info_repo_));
 
                core::text::init();
 
@@ -176,8 +150,7 @@ struct server::impl : boost::noncopyable
                boost::this_thread::sleep(boost::posix_time::milliseconds(500));
                //Sleep(500); // HACK: Wait for asynchronous destruction of producers and consumers.
 
-               image::uninit();
-               ffmpeg::uninit();
+               uninitialize_modules();
                core::diagnostics::osd::shutdown();
        }