3 #undef BOOST_PARAMETER_MAX_ARITY
4 #define BOOST_PARAMETER_MAX_ARITY 7
6 #include "../video_format.h"
8 #include <common/memory.h>
9 #include <common/forward.h>
10 #include <common/array.h>
12 #include <boost/range.hpp>
13 #include <boost/any.hpp>
15 #include <tbb/cache_aligned_allocator.h>
20 FORWARD1(boost, template<typename> class shared_future);
22 namespace caspar { namespace core {
24 typedef std::vector<int32_t, tbb::cache_aligned_allocator<int32_t>> audio_buffer;
27 class mutable_frame /* final */
29 mutable_frame(const mutable_frame&);
30 mutable_frame& operator=(const mutable_frame&);
37 explicit mutable_frame(std::vector<array<std::uint8_t>> image_buffers,
38 audio_buffer audio_buffer,
40 const struct pixel_format_desc& desc);
45 mutable_frame(mutable_frame&& other);
46 mutable_frame& operator=(mutable_frame&& other);
48 void swap(mutable_frame& other);
52 const struct pixel_format_desc& pixel_format_desc() const;
54 const array<std::uint8_t>& image_data(std::size_t index = 0) const;
55 const core::audio_buffer& audio_data() const;
57 array<std::uint8_t>& image_data(std::size_t index = 0);
58 core::audio_buffer& audio_data();
60 std::size_t width() const;
61 std::size_t height() const;
63 const void* stream_tag() const;
64 const void* data_tag() const;
66 const core::frame_geometry& geometry() const;
67 void set_geometry(const frame_geometry& g);
71 spl::unique_ptr<impl> impl_;
74 class const_frame /* final */
80 static const const_frame& empty();
84 explicit const_frame(const void* tag = nullptr);
85 explicit const_frame(boost::shared_future<array<const std::uint8_t>> image,
86 audio_buffer audio_buffer,
88 const struct pixel_format_desc& desc);
89 const_frame(mutable_frame&& other);
94 const_frame(const_frame&& other);
95 const_frame& operator=(const_frame&& other);
96 const_frame(const const_frame&);
97 const_frame& operator=(const const_frame& other);
101 const struct pixel_format_desc& pixel_format_desc() const;
103 array<const std::uint8_t> image_data(int index = 0) const;
104 const core::audio_buffer& audio_data() const;
106 std::size_t width() const;
107 std::size_t height() const;
108 std::size_t size() const;
110 const void* stream_tag() const;
111 const void* data_tag() const;
113 const core::frame_geometry& geometry() const;
114 void set_geometry(const frame_geometry& g);
116 bool operator==(const const_frame& other);
117 bool operator!=(const const_frame& other);
118 bool operator<(const const_frame& other);
119 bool operator>(const const_frame& other);
123 spl::shared_ptr<impl> impl_;