]> git.sesse.net Git - casparcg/blob - protocol/media.cpp
2.0.0.2: Moved ATL init to shell.
[casparcg] / protocol / media.cpp
1 #include "StdAfx.h"\r
2 \r
3 #include "media.h"\r
4 \r
5 #include <core/producer/color/color_producer.h>\r
6 #include <core/producer/ffmpeg/ffmpeg_producer.h>\r
7 #include <core/producer/flash/cg_producer.h>\r
8 #include <core/producer/image/image_producer.h>\r
9 #include <core/producer/decklink/decklink_producer.h>\r
10 #include <core/producer/screen/screen_producer.h>\r
11 #include <core/producer/silverlight/silverlight_producer.h>\r
12 \r
13 #include <core/consumer/bluefish/bluefish_consumer.h>\r
14 #include <core/consumer/decklink/decklink_consumer.h>\r
15 #include <core/consumer/ogl/ogl_consumer.h>\r
16 #include <core/consumer/oal/oal_consumer.h>\r
17 #include <core/consumer/ffmpeg/ffmpeg_consumer.h>\r
18 //#include "../producer/image/image_scroll_producer.h"\r
19 \r
20 #include <common/exception/exceptions.h>\r
21 \r
22 #include <boost/assign.hpp>\r
23 #include <boost/filesystem.hpp>\r
24 \r
25 using namespace boost::assign;\r
26 \r
27 namespace caspar { namespace protocol { \r
28         \r
29 using namespace core;\r
30 \r
31 safe_ptr<core::frame_producer> create_producer(const std::vector<std::wstring>& params)\r
32 {               \r
33         typedef std::function<safe_ptr<core::frame_producer>(const std::vector<std::wstring>&)> factory_t;\r
34 \r
35         const auto factories = list_of<factory_t>\r
36                 (&core::flash::create_ct_producer)\r
37         //      (&image::create_image_scroll_producer)\r
38                 (&core::ffmpeg::create_ffmpeg_producer)\r
39                 (&core::image::create_image_producer)\r
40                 (&core::create_decklink_producer)\r
41                 (&core::create_color_producer)\r
42                 (&core::create_screen_producer)\r
43                 (&core::create_silverlight_producer);\r
44 \r
45         if(params.empty())\r
46                 BOOST_THROW_EXCEPTION(invalid_argument() << arg_name_info("params") << arg_value_info(""));\r
47 \r
48         auto producer = frame_producer::empty();\r
49         std::any_of(factories.begin(), factories.end(), [&](const factory_t& factory) -> bool\r
50                 {\r
51                         try\r
52                         {\r
53                                 producer = factory(params);\r
54                         }\r
55                         catch(...)\r
56                         {\r
57                                 CASPAR_LOG_CURRENT_EXCEPTION();\r
58                         }\r
59                         return producer != frame_producer::empty();\r
60                 });\r
61 \r
62         return producer;\r
63 }\r
64 \r
65 safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params)\r
66 {               \r
67         typedef std::function<safe_ptr<core::frame_consumer>(const std::vector<std::wstring>&)> factory_t;\r
68 \r
69         const auto factories = list_of<factory_t>\r
70                 (&core::create_bluefish_consumer)\r
71                 (&core::create_decklink_consumer)\r
72                 (&core::create_oal_consumer)\r
73                 (&core::create_ogl_consumer)\r
74                 (&core::create_ffmpeg_consumer);\r
75 \r
76         if(params.empty())\r
77                 BOOST_THROW_EXCEPTION(invalid_argument() << arg_name_info("params") << arg_value_info(""));\r
78 \r
79         auto consumer = frame_consumer::empty();\r
80         std::any_of(factories.begin(), factories.end(), [&](const factory_t& factory) -> bool\r
81                 {\r
82                         try\r
83                         {\r
84                                 consumer = factory(params);\r
85                         }\r
86                         catch(...)\r
87                         {\r
88                                 CASPAR_LOG_CURRENT_EXCEPTION();\r
89                         }\r
90                         return consumer != frame_consumer::empty();\r
91                 });\r
92 \r
93         return consumer;\r
94 }\r
95 \r
96 }}\r