1 #include "../StdAfx.h"
\r
3 #include "frame_consumer.h"
\r
5 #include <common/memory/safe_ptr.h>
\r
7 #include <tbb/spin_rw_mutex.h>
\r
9 namespace caspar { namespace core {
\r
11 std::vector<const consumer_factory_t> c_factories;
\r
12 tbb::spin_rw_mutex c_factories_mutex;
\r
14 void register_consumer_factory(const consumer_factory_t& factory)
\r
16 tbb::spin_rw_mutex::scoped_lock(c_factories_mutex, true);
\r
17 c_factories.push_back(factory);
\r
20 safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params)
\r
23 BOOST_THROW_EXCEPTION(invalid_argument() << arg_name_info("params") << arg_value_info(""));
\r
25 tbb::spin_rw_mutex::scoped_lock(c_factories_mutex, false);
\r
26 auto consumer = frame_consumer::empty();
\r
27 std::any_of(c_factories.begin(), c_factories.end(), [&](const consumer_factory_t& factory) -> bool
\r
31 consumer = factory(params);
\r
35 CASPAR_LOG_CURRENT_EXCEPTION();
\r
37 return consumer != frame_consumer::empty();
\r
40 if(consumer == frame_consumer::empty())
\r
41 BOOST_THROW_EXCEPTION(file_not_found() << msg_info("No match found for supplied commands. Check syntax."));
\r