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