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