]> 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 d5c8f7f542c49e342bf16db269e72bedda94d1d2..ba4d0a3915d20c5f4bf73a4ecb029b6ede7f2b85 100644 (file)
@@ -1,56 +1,46 @@
-#pragma once\r
-\r
-#include <common/forward.h>\r
-#include <common/memory.h>\r
-\r
-#include <core/mixer/image/blend_modes.h>\r
-#include <core/mixer/image/image_mixer.h>\r
-\r
-#include <core/frame/frame.h>\r
-#include <core/frame/frame_visitor.h>\r
-#include <core/video_format.h>\r
-\r
-FORWARD1(boost, template<typename> class shared_future);\r
-FORWARD1(boost, template<typename> class iterator_range);\r
-FORWARD2(caspar, core, class frame);\r
-FORWARD2(caspar, core, struct pixel_format_desc);\r
-FORWARD2(caspar, core, struct video_format_desc);\r
-FORWARD2(caspar, core, class mutable_frame);\r
-FORWARD2(caspar, core, struct frame_transform);\r
-\r
-namespace caspar { namespace accelerator { namespace cpu {\r
-       \r
-typedef std::vector<uint8_t, tbb::cache_aligned_allocator<uint8_t>> buffer;\r
-\r
-class image_mixer sealed : public core::image_mixer\r
-{\r
-public:\r
-\r
-       // Static Members\r
-\r
-       // Constructors\r
-\r
-       image_mixer();\r
-       ~image_mixer();\r
-\r
-       // Methods      \r
-\r
-       virtual void begin_layer(core::blend_mode blend_mode);\r
-       virtual void end_layer();\r
-\r
-       virtual void push(const core::frame_transform& frame);\r
-       virtual void visit(const core::const_frame& frame);\r
-       virtual void pop();\r
-               \r
-       boost::unique_future<array<const std::uint8_t>> operator()(const core::video_format_desc& format_desc) override;\r
-               \r
-       core::mutable_frame create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) override;\r
-\r
-       // Properties\r
-\r
-private:\r
-       struct impl;\r
-       spl::unique_ptr<impl> impl_;\r
-};\r
-\r
+#pragma once
+
+#include <common/forward.h>
+#include <common/memory.h>
+
+#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>
+
+namespace caspar { namespace accelerator { namespace cpu {
+       
+typedef cache_aligned_vector<uint8_t> buffer;
+
+class image_mixer final : public core::image_mixer
+{
+public:
+
+       // Static Members
+
+       // Constructors
+
+       image_mixer(int channel_id);
+       ~image_mixer();
+
+       // Methods      
+
+       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, bool straighten_alpha) 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_;
+};
+
 }}}
\ No newline at end of file