]> git.sesse.net Git - casparcg/blob - accelerator/cpu/image/image_mixer.h
2.1.0: Use const_ types consistently when no modification is expected, instead of...
[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.h>\r
10 #include <core/frame/frame_visitor.h>\r
11 #include <core/video_format.h>\r
12 \r
13 FORWARD1(boost, template<typename> class shared_future);\r
14 FORWARD1(boost, template<typename> class iterator_range);\r
15 FORWARD2(caspar, core, class frame);\r
16 FORWARD2(caspar, core, struct pixel_format_desc);\r
17 FORWARD2(caspar, core, struct video_format_desc);\r
18 FORWARD2(caspar, core, class mutable_frame);\r
19 FORWARD2(caspar, core, struct frame_transform);\r
20 \r
21 namespace caspar { namespace accelerator { namespace cpu {\r
22         \r
23 typedef std::vector<uint8_t, tbb::cache_aligned_allocator<uint8_t>> buffer;\r
24 \r
25 class image_mixer sealed : public core::image_mixer\r
26 {\r
27 public:\r
28 \r
29         // Static Members\r
30 \r
31         // Constructors\r
32 \r
33         image_mixer();\r
34         ~image_mixer();\r
35 \r
36         // Methods      \r
37 \r
38         virtual void begin_layer(core::blend_mode blend_mode);\r
39         virtual void end_layer();\r
40 \r
41         virtual void push(const core::frame_transform& frame);\r
42         virtual void visit(const core::const_frame& frame);\r
43         virtual void pop();\r
44                 \r
45         virtual boost::unique_future<core::const_array> operator()(const core::video_format_desc& format_desc) override;\r
46                 \r
47         virtual core::mutable_frame create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) override;\r
48 \r
49         // Properties\r
50 \r
51 private:\r
52         struct impl;\r
53         spl::unique_ptr<impl> impl_;\r
54 };\r
55 \r
56 }}}