]> git.sesse.net Git - casparcg/blob - accelerator/cpu/image/image_mixer.h
2.1.0: Refactored away "write_frame", only "data_frame" and "draw_frame" are needed.
[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 #include <core/video_format.h>\r
11 \r
12 FORWARD1(boost, template<typename> class shared_future);\r
13 FORWARD1(boost, template<typename> class iterator_range);\r
14 FORWARD2(caspar, core, class data_frame);\r
15 FORWARD2(caspar, core, struct pixel_format_desc);\r
16 FORWARD2(caspar, core, struct video_format_desc);\r
17 FORWARD2(caspar, core, class data_frame);\r
18 FORWARD2(caspar, core, struct frame_transform);\r
19 \r
20 namespace caspar { namespace accelerator { namespace cpu {\r
21         \r
22 class image_mixer sealed : public core::image_mixer\r
23 {\r
24 public:\r
25         image_mixer();\r
26         \r
27         virtual void push(const core::frame_transform& frame);\r
28         virtual void visit(const core::data_frame& frame);\r
29         virtual void pop();\r
30 \r
31         void begin_layer(core::blend_mode blend_mode);\r
32         void end_layer();\r
33                 \r
34         // NOTE: Content of return future is only valid while future is valid.\r
35         virtual ::boost::shared_future<::boost::iterator_range<const uint8_t*>> operator()(const core::video_format_desc& format_desc) override;\r
36                 \r
37         virtual spl::shared_ptr<core::data_frame> create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) override;\r
38 private:\r
39         struct impl;\r
40         spl::shared_ptr<impl> impl_;\r
41 };\r
42 \r
43 }}}