]> git.sesse.net Git - casparcg/blob - core/frame/frame.h
2.1.0: -Moved NTSC DV padding into ffmpeg/muxer.
[casparcg] / core / frame / frame.h
1 #pragma once\r
2 \r
3 #undef BOOST_PARAMETER_MAX_ARITY\r
4 #define BOOST_PARAMETER_MAX_ARITY 7\r
5 \r
6 #include "../video_format.h"\r
7 \r
8 #include <common/memory.h>\r
9 #include <common/forward.h>\r
10 #include <common/array.h>\r
11 \r
12 #include <boost/range.hpp>\r
13 #include <boost/any.hpp>\r
14 \r
15 #include <tbb/cache_aligned_allocator.h>\r
16 \r
17 #include <cstddef>\r
18 #include <cstdint>\r
19 \r
20 FORWARD1(boost, template<typename> class shared_future);\r
21 \r
22 namespace caspar { namespace core {\r
23         \r
24 typedef std::vector<int32_t, tbb::cache_aligned_allocator<int32_t>> audio_buffer;\r
25 \r
26 class mutable_frame sealed\r
27 {\r
28         mutable_frame(const mutable_frame&);\r
29         mutable_frame& operator=(const mutable_frame&);\r
30 public: \r
31 \r
32         // Static Members\r
33 \r
34         // Constructors\r
35 \r
36         explicit mutable_frame(std::vector<array<std::uint8_t>> image_buffers, \r
37                                                 audio_buffer audio_buffer, \r
38                                                 const void* tag, \r
39                                                 const struct pixel_format_desc& desc);\r
40         ~mutable_frame();\r
41 \r
42         // Methods\r
43 \r
44         mutable_frame(mutable_frame&& other);\r
45         mutable_frame& operator=(mutable_frame&& other);\r
46 \r
47         void swap(mutable_frame& other);\r
48                         \r
49         // Properties\r
50                         \r
51         const struct pixel_format_desc& pixel_format_desc() const;\r
52 \r
53         const array<std::uint8_t>& image_data(std::size_t index = 0) const;\r
54         const core::audio_buffer& audio_data() const;\r
55 \r
56         array<std::uint8_t>& image_data(std::size_t index = 0);\r
57         core::audio_buffer& audio_data();\r
58         \r
59         std::size_t width() const;\r
60         std::size_t height() const;\r
61                                                                 \r
62         const void* stream_tag() const;\r
63         const void* data_tag() const;\r
64                         \r
65 private:\r
66         struct impl;\r
67         spl::unique_ptr<impl> impl_;\r
68 };\r
69 \r
70 class const_frame sealed\r
71 {\r
72 public: \r
73 \r
74         // Static Members\r
75 \r
76         static const const_frame& empty();\r
77 \r
78         // Constructors\r
79 \r
80         explicit const_frame(const void* tag = nullptr);\r
81         explicit const_frame(boost::shared_future<array<const std::uint8_t>> image, \r
82                                                 audio_buffer audio_buffer, \r
83                                                 const void* tag, \r
84                                                 const struct pixel_format_desc& desc);\r
85         const_frame(mutable_frame&& other);\r
86         ~const_frame();\r
87 \r
88         // Methods\r
89 \r
90         const_frame(const_frame&& other);\r
91         const_frame& operator=(const_frame&& other);\r
92         const_frame(const const_frame&);\r
93         const_frame& operator=(const const_frame& other);\r
94                                 \r
95         // Properties\r
96                                 \r
97         const struct pixel_format_desc& pixel_format_desc() const;\r
98 \r
99         array<const std::uint8_t> image_data(int index = 0) const;\r
100         const core::audio_buffer& audio_data() const;\r
101                 \r
102         std::size_t width() const;\r
103         std::size_t height() const;\r
104         std::size_t size() const;\r
105                                                                 \r
106         const void* stream_tag() const;\r
107         const void* data_tag() const;\r
108 \r
109         bool operator==(const const_frame& other);\r
110         bool operator!=(const const_frame& other);\r
111         bool operator<(const const_frame& other);\r
112         bool operator>(const const_frame& other);\r
113                         \r
114 private:\r
115         struct impl;\r
116         spl::shared_ptr<impl> impl_;\r
117 };\r
118 \r
119 }}