]> git.sesse.net Git - casparcg/blob - accelerator/cpu/image/image_mixer.h
55f2b416bd08c514975acd93f024eabfa2ae8464
[casparcg] / accelerator / cpu / image / image_mixer.h
1 #pragma once
2
3 #include <common/forward.h>
4 #include <common/memory.h>
5
6 #include <core/mixer/image/blend_modes.h>
7 #include <core/mixer/image/image_mixer.h>
8 #include <core/fwd.h>
9
10 #include <core/frame/frame.h>
11 #include <core/frame/frame_visitor.h>
12 #include <core/video_format.h>
13
14 namespace caspar { namespace accelerator { namespace cpu {
15         
16 typedef cache_aligned_vector<uint8_t> buffer;
17
18 class image_mixer final : public core::image_mixer
19 {
20 public:
21
22         // Static Members
23
24         // Constructors
25
26         image_mixer(int channel_id);
27         ~image_mixer();
28
29         // Methods      
30
31         virtual void push(const core::frame_transform& frame);
32         virtual void visit(const core::const_frame& frame);
33         virtual void pop();
34                 
35         std::future<array<const std::uint8_t>> operator()(const core::video_format_desc& format_desc, bool straighten_alpha) override;
36                 
37         core::mutable_frame create_frame(const void* tag, const core::pixel_format_desc& desc, const core::audio_channel_layout& channel_layout) override;
38
39         // Properties
40
41 private:
42         struct impl;
43         spl::unique_ptr<impl> impl_;
44 };
45
46 }}}