]> git.sesse.net Git - casparcg/blob - modules/ffmpeg/producer/frame_muxer.h
f6730c2a879d23a1eab470b71054e17316b05a3a
[casparcg] / modules / ffmpeg / producer / frame_muxer.h
1 #pragma once\r
2 \r
3 #include <common/memory/safe_ptr.h>\r
4 \r
5 #include <boost/noncopyable.hpp>\r
6 \r
7 #include <vector>\r
8 \r
9 struct AVFrame;\r
10 \r
11 namespace caspar { \r
12         \r
13 namespace core {\r
14 \r
15 class write_frame;\r
16 class basic_frame;\r
17 struct frame_factory;\r
18 \r
19 }\r
20 \r
21 class frame_muxer : boost::noncopyable\r
22 {\r
23 public:\r
24         frame_muxer(double in_fps, const safe_ptr<core::frame_factory>& frame_factory);\r
25         \r
26         void push(const std::shared_ptr<AVFrame>& video_frame, int hints = 0);\r
27         void push(const std::shared_ptr<std::vector<int16_t>>& audio_samples);\r
28         \r
29         void commit();\r
30 \r
31         bool video_ready() const;\r
32         bool audio_ready() const;\r
33 \r
34         size_t size() const;\r
35         bool empty() const;\r
36 \r
37         int64_t calc_nb_frames(int64_t nb_frames) const;\r
38 \r
39         safe_ptr<core::basic_frame> pop();\r
40 private:\r
41         struct implementation;\r
42         safe_ptr<implementation> impl_;\r
43 };\r
44 \r
45 }