1 #include "../StdAfx.h"
\r
3 #include "frame_producer.h"
\r
4 #include "color/color_producer.h"
\r
6 #include <common/memory/safe_ptr.h>
\r
8 #include <tbb/spin_rw_mutex.h>
\r
10 namespace caspar { namespace core {
\r
12 std::vector<const producer_factory_t> p_factories;
\r
13 tbb::spin_rw_mutex p_factories_mutex;
\r
15 void register_producer_factory(const producer_factory_t& factory)
\r
17 tbb::spin_rw_mutex::scoped_lock(p_factories_mutex, true);
\r
18 p_factories.push_back(factory);
\r
21 safe_ptr<core::frame_producer> create_producer(const std::vector<std::wstring>& params)
\r
24 BOOST_THROW_EXCEPTION(invalid_argument() << arg_name_info("params") << arg_value_info(""));
\r
26 tbb::spin_rw_mutex::scoped_lock(p_factories_mutex, false);
\r
27 auto producer = frame_producer::empty();
\r
28 std::any_of(p_factories.begin(), p_factories.end(), [&](const producer_factory_t& factory) -> bool
\r
32 producer = factory(params);
\r
36 CASPAR_LOG_CURRENT_EXCEPTION();
\r
38 return producer != frame_producer::empty();
\r
41 if(producer == frame_producer::empty())
\r
42 producer = create_color_producer(params);
\r
44 if(producer == frame_producer::empty())
\r
45 BOOST_THROW_EXCEPTION(file_not_found() << msg_info("No match found for supplied commands. Check syntax."));
\r