]> git.sesse.net Git - casparcg/blob - core/channel.h
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
[casparcg] / core / channel.h
1 #pragma once\r
2 \r
3 #include "consumer/frame_consumer_device.h"\r
4 #include "mixer/frame_mixer_device.h"\r
5 #include "producer/frame_producer_device.h"\r
6 \r
7 #include <common/memory/safe_ptr.h>\r
8 \r
9 #include <boost/noncopyable.hpp>\r
10 #include <boost/thread/future.hpp>\r
11 \r
12 namespace caspar { namespace core {\r
13 \r
14 ////////////////////////////////////////////////////////////////////////////////////////////////////\r
15 /// \class      channel\r
16 ///\r
17 /// \brief\r
18 ///             \r
19 ///                |**********| <-   empty frame   <- |***********| <-   frame format  <- |**********|\r
20 ///   PROTOCOL ->  | PRODUCER |                       |   MIXER   |                       | CONSUMER |  -> DISPLAY DEVICE\r
21 ///                |**********| -> rendered frames -> |***********| -> formatted frame -> |**********|\r
22 ///   \r
23 ////////////////////////////////////////////////////////////////////////////////////////////////////\r
24 class channel : boost::noncopyable\r
25 {\r
26 public:\r
27         explicit channel(int index, const video_format_desc& format_desc);\r
28         channel(channel&& other);\r
29 \r
30         const safe_ptr<frame_producer_device>& producer();\r
31         const safe_ptr<frame_mixer_device>& mixer();\r
32         const safe_ptr<frame_consumer_device>& consumer();\r
33 \r
34         const video_format_desc& get_video_format_desc() const;\r
35         void set_video_format_desc(const video_format_desc& format_desc);\r
36 \r
37         std::wstring print() const;\r
38 \r
39 private:\r
40         struct implementation;\r
41         safe_ptr<implementation> impl_;\r
42 };\r
43 \r
44 }}