3 #include "frame_format.h"
\r
5 #include "gpu_frame_transform.h"
\r
10 #include <boost/noncopyable.hpp>
\r
14 #include <boost/tuple/tuple.hpp>
\r
16 namespace caspar { namespace core {
\r
18 typedef std::array<std::pair<size_t, size_t>, 4> planar_frame_dimension;
\r
22 rectangle(double left, double top, double right, double bottom)
\r
23 : left(left), top(top), right(right), bottom(bottom)
\r
31 class gpu_frame : boost::noncopyable
\r
34 virtual ~gpu_frame(){}
\r
36 virtual unsigned char* data(size_t index = 0);
\r
37 virtual size_t size(size_t index = 0) const;
\r
38 virtual size_t width(size_t index = 0) const;
\r
39 virtual size_t height(size_t index = 0) const;
\r
41 virtual std::vector<short>& audio_data();
\r
43 virtual double alpha() const;
\r
44 virtual void alpha(double value);
\r
46 virtual double x() const;
\r
47 virtual double y() const;
\r
48 virtual void translate(double x, double y);
\r
49 virtual void texcoords(const rectangle& texcoords);
\r
51 virtual void mode(video_mode mode);
\r
52 virtual video_mode mode() const;
\r
54 virtual void set_pixel_format(pixel_format format);
\r
56 static std::shared_ptr<gpu_frame> null()
\r
58 static auto my_null_frame = std::shared_ptr<gpu_frame>(new gpu_frame(0,0));
\r
59 return my_null_frame;
\r
63 gpu_frame(size_t width, size_t height);
\r
64 gpu_frame(const planar_frame_dimension& data_size);
\r
66 friend class gpu_frame_processor;
\r
68 virtual void begin_write();
\r
69 virtual void end_write();
\r
70 virtual void begin_read();
\r
71 virtual void end_read();
\r
72 virtual void draw(const gpu_frame_transform_ptr& transform);
\r
73 virtual void reset();
\r
76 struct implementation;
\r
77 std::shared_ptr<implementation> impl_;
\r
79 typedef std::shared_ptr<gpu_frame> gpu_frame_ptr;
\r