#pragma once
#include <common/memory.h>
-#include <common/reactive.h>
#include <common/forward.h>
+#include "fwd.h"
+
#include "monitor/monitor.h"
#include <boost/property_tree/ptree_fwd.hpp>
-FORWARD3(caspar, core, ogl, class accelerator);
-FORWARD2(caspar, core, class stage);
-FORWARD2(caspar, core, class mixer);
-FORWARD2(caspar, core, class output);
-FORWARD2(caspar, core, class image_mixer);
-FORWARD2(caspar, core, struct video_format_desc);
-FORWARD2(caspar, core, class frame_factory);
+#include <functional>
namespace caspar { namespace core {
-
-class video_channel sealed : public monitor::observable
+
+class video_channel final
{
video_channel(const video_channel&);
video_channel& operator=(const video_channel&);
// Constructors
- explicit video_channel(int index, const video_format_desc& format_desc, std::unique_ptr<image_mixer> image_mixer);
+ explicit video_channel(
+ int index,
+ const video_format_desc& format_desc,
+ const audio_channel_layout& channel_layout,
+ std::unique_ptr<image_mixer> image_mixer);
~video_channel();
// Methods
-
- // monitor::observable
- void subscribe(const monitor::observable::observer_ptr& o) override;
- void unsubscribe(const monitor::observable::observer_ptr& o) override;
+ monitor::subject& monitor_output();
// Properties
- const core::stage& stage() const;
- core::stage& stage();
- const core::mixer& mixer() const;
- core::mixer& mixer();
- const core::output& output() const;
- core::output& output();
-
- core::video_format_desc video_format_desc() const;
- void video_format_desc(const core::video_format_desc& format_desc);
-
- spl::shared_ptr<core::frame_factory> frame_factory();
-
- boost::property_tree::wptree info() const;
+ const core::stage& stage() const;
+ core::stage& stage();
+ const core::mixer& mixer() const;
+ core::mixer& mixer();
+ const core::output& output() const;
+ core::output& output();
+
+ core::video_format_desc video_format_desc() const;
+ void video_format_desc(const core::video_format_desc& format_desc);
+ core::audio_channel_layout audio_channel_layout() const;
+ void audio_channel_layout(const core::audio_channel_layout& channel_layout);
+
+ std::shared_ptr<void> add_tick_listener(std::function<void()> listener);
+
+ spl::shared_ptr<core::frame_factory> frame_factory();
+
+ boost::property_tree::wptree info() const;
+ boost::property_tree::wptree delay_info() const;
+ int index() const;
private:
struct impl;
spl::unique_ptr<impl> impl_;
};
-}}
\ No newline at end of file
+}}