]> git.sesse.net Git - casparcg/blob - modules/ffmpeg/producer/frame_muxer.h
2.0.1: ffmpeg: Replaced TBB implementation with better Concurrency Runtime based...
[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 <agents.h>\r
10 #include <vector>\r
11 \r
12 struct AVFrame;\r
13 \r
14 namespace caspar { \r
15         \r
16 namespace core {\r
17 \r
18 class write_frame;\r
19 class basic_frame;\r
20 struct frame_factory;\r
21 \r
22 }\r
23 \r
24 namespace ffmpeg {\r
25 \r
26 class frame_muxer : boost::noncopyable\r
27 {\r
28 public:\r
29         frame_muxer(double in_fps, const safe_ptr<core::frame_factory>& frame_factory);\r
30         \r
31         void push(const std::shared_ptr<AVFrame>& video_frame, int hints = 0);\r
32         void push(const std::shared_ptr<core::audio_buffer>& audio_samples);\r
33         \r
34         void commit();\r
35 \r
36         bool video_ready() const;\r
37         bool audio_ready() const;\r
38 \r
39         size_t size() const;\r
40         bool empty() const;\r
41 \r
42         int64_t calc_nb_frames(int64_t nb_frames) const;\r
43 \r
44         safe_ptr<core::basic_frame> pop();\r
45 private:\r
46         struct implementation;\r
47         safe_ptr<implementation> impl_;\r
48 };\r
49 \r
50 class frame_muxer2 : boost::noncopyable\r
51 {\r
52 public:\r
53         \r
54         typedef Concurrency::ISource<bool>                                                                      token_t;\r
55         typedef Concurrency::ISource<std::shared_ptr<AVFrame>>                          video_source_t;\r
56         typedef Concurrency::ISource<std::shared_ptr<core::audio_buffer>>       audio_source_t;\r
57         typedef Concurrency::ITarget<std::shared_ptr<core::basic_frame>>        target_t;\r
58 \r
59         frame_muxer2(token_t& active_token,\r
60                                  video_source_t& video_source,\r
61                                  audio_source_t& audio_source, \r
62                                  target_t& target,\r
63                                  double in_fps, \r
64                                  const safe_ptr<core::frame_factory>& frame_factory);\r
65         \r
66         int64_t calc_nb_frames(int64_t nb_frames) const;\r
67 private:\r
68         struct implementation;\r
69         safe_ptr<implementation> impl_;\r
70 };\r
71 \r
72 }}