]> git.sesse.net Git - casparcg/blobdiff - accelerator/cpu/image/image_mixer.h
[image_producer] refuse too large images nicely instead of letting OpenGL tell us...
[casparcg] / accelerator / cpu / image / image_mixer.h
index bb3e649700d3cba88bef78985b7f9288b13dcbe3..ba4d0a3915d20c5f4bf73a4ecb029b6ede7f2b85 100644 (file)
@@ -5,24 +5,17 @@
 
 #include <core/mixer/image/blend_modes.h>
 #include <core/mixer/image/image_mixer.h>
+#include <core/fwd.h>
 
 #include <core/frame/frame.h>
 #include <core/frame/frame_visitor.h>
 #include <core/video_format.h>
 
-FORWARD1(boost, template<typename> class shared_future);
-FORWARD1(boost, template<typename> class iterator_range);
-FORWARD2(caspar, core, class frame);
-FORWARD2(caspar, core, struct pixel_format_desc);
-FORWARD2(caspar, core, struct video_format_desc);
-FORWARD2(caspar, core, class mutable_frame);
-FORWARD2(caspar, core, struct frame_transform);
-
 namespace caspar { namespace accelerator { namespace cpu {
        
-typedef std::vector<uint8_t, tbb::cache_aligned_allocator<uint8_t>> buffer;
+typedef cache_aligned_vector<uint8_t> buffer;
 
-class image_mixer /* final */ : public core::image_mixer
+class image_mixer final : public core::image_mixer
 {
 public:
 
@@ -30,24 +23,21 @@ public:
 
        // Constructors
 
-       image_mixer();
+       image_mixer(int channel_id);
        ~image_mixer();
 
        // Methods      
 
-       virtual void begin_layer(core::blend_mode blend_mode);
-       virtual void end_layer();
-
        virtual void push(const core::frame_transform& frame);
        virtual void visit(const core::const_frame& frame);
        virtual void pop();
                
-       std::future<array<const std::uint8_t>> operator()(const core::video_format_desc& format_desc) override;
+       std::future<array<const std::uint8_t>> operator()(const core::video_format_desc& format_desc, bool straighten_alpha) override;
                
-       core::mutable_frame create_frame(const void* tag, const core::pixel_format_desc& desc) override;
+       core::mutable_frame create_frame(const void* tag, const core::pixel_format_desc& desc, const core::audio_channel_layout& channel_layout) override;
 
        // Properties
-
+       int get_max_frame_size() override;
 private:
        struct impl;
        spl::unique_ptr<impl> impl_;