]> git.sesse.net Git - casparcg/blobdiff - core/consumer/output.h
Merge branch '2.1.0' of https://github.com/CasparCG/Server into 2.1.0
[casparcg] / core / consumer / output.h
index 02e021f8c939c5e32c1fdac740ad182a04e8dac9..85a925632ad778ca4d0c4becdb1ffd45a70ed103 100644 (file)
 #pragma once
 
 #include "../monitor/monitor.h"
+#include "../fwd.h"
 
 #include <common/forward.h>
 #include <common/future_fwd.h>
 #include <common/memory.h>
-#include <common/reactive.h>
 
 #include <boost/property_tree/ptree_fwd.hpp>
 
+#include <future>
+
 FORWARD2(caspar, diagnostics, class graph);
 
 namespace caspar { namespace core {
        
-class output /* final */ : public monitor::observable
+class output final
 {
        output(const output&);
        output& operator=(const output&);
@@ -44,25 +46,24 @@ public:
 
        // Constructors
 
-       explicit output(spl::shared_ptr<diagnostics::graph> graph, const struct video_format_desc& format_desc, int channel_index);
+       explicit output(spl::shared_ptr<caspar::diagnostics::graph> graph, const video_format_desc& format_desc, const core::audio_channel_layout& channel_layout, int channel_index);
        
        // Methods
 
-       void operator()(class const_frame frame, const struct video_format_desc& format_desc);
+       // Returns when submitted to consumers, but the future indicates when the consumers are ready for a new frame.
+       std::future<void> operator()(const_frame frame, const video_format_desc& format_desc, const core::audio_channel_layout& channel_layout);
        
-       void add(const spl::shared_ptr<class frame_consumer>& consumer);
-       void add(int index, const spl::shared_ptr<class frame_consumer>& consumer);
-       void remove(const spl::shared_ptr<class frame_consumer>& consumer);
+       void add(const spl::shared_ptr<frame_consumer>& consumer);
+       void add(int index, const spl::shared_ptr<frame_consumer>& consumer);
+       void remove(const spl::shared_ptr<frame_consumer>& consumer);
        void remove(int index);
        
-       // 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
 
-       boost::unique_future<boost::property_tree::wptree> info() const;
+       std::future<boost::property_tree::wptree> info() const;
+       std::future<boost::property_tree::wptree> delay_info() const;
 
 private:
        struct impl;