]> git.sesse.net Git - casparcg/blob - accelerator/cpu/image/image_mixer.h
2.1.0: Don't use 'struct' for interfaces, use 'class'.
[casparcg] / accelerator / cpu / image / image_mixer.h
1 #pragma once\r
2 \r
3 #include <common/forward.h>\r
4 #include <common/spl/memory.h>\r
5 \r
6 #include <core/mixer/image/blend_modes.h>\r
7 #include <core/mixer/image/image_mixer.h>\r
8 \r
9 #include <core/frame/frame_visitor.h>\r
10 \r
11 FORWARD1(boost, template<typename> class shared_future);\r
12 FORWARD1(boost, template<typename> class iterator_range);\r
13 FORWARD2(caspar, core, class write_frame);\r
14 FORWARD2(caspar, core, struct pixel_format_desc);\r
15 FORWARD2(caspar, core, struct video_format_desc);\r
16 FORWARD2(caspar, core, class data_frame);\r
17 FORWARD2(caspar, core, struct frame_transform);\r
18 \r
19 namespace caspar { namespace accelerator { namespace cpu {\r
20         \r
21 class image_mixer sealed : public core::image_mixer\r
22 {\r
23 public:\r
24         image_mixer();\r
25         \r
26         virtual void push(const core::frame_transform& frame);\r
27         virtual void visit(const core::data_frame& frame);\r
28         virtual void pop();\r
29 \r
30         void begin_layer(core::blend_mode blend_mode);\r
31         void end_layer();\r
32                 \r
33         // NOTE: Content of return future is only valid while future is valid.\r
34         virtual ::boost::shared_future<::boost::iterator_range<const uint8_t*>> operator()(const core::video_format_desc& format_desc) override;\r
35                 \r
36         virtual spl::shared_ptr<core::write_frame> create_frame(const void* tag, const core::pixel_format_desc& desc) override;\r
37 private:\r
38         struct impl;\r
39         spl::shared_ptr<impl> impl_;\r
40 };\r
41 \r
42 }}}