{ \r
const int channel_index_;\r
const safe_ptr<diagnostics::graph> graph_;\r
+ monitor::subject monitor_subject_;\r
boost::timer consume_timer_;\r
\r
video_format_desc format_desc_;\r
implementation(const safe_ptr<diagnostics::graph>& graph, const video_format_desc& format_desc, int channel_index) \r
: channel_index_(channel_index)\r
, graph_(graph)\r
+ , monitor_subject_("/output")\r
, format_desc_(format_desc)\r
, executor_(L"output")\r
{\r
}\r
\r
graph_->set_value("consume-time", consume_timer_.elapsed()*format_desc_.fps*0.5);\r
+ monitor_subject_ << monitor::message("/consume_time") % (consume_timer_.elapsed());\r
}\r
catch(...)\r
{\r
return consumers_.empty();\r
});\r
}\r
+\r
+ monitor::subject& monitor_output()\r
+ { \r
+ return monitor_subject_;\r
+ }\r
};\r
\r
output::output(const safe_ptr<diagnostics::graph>& graph, const video_format_desc& format_desc, int channel_index) : impl_(new implementation(graph, format_desc, channel_index)){}\r
boost::unique_future<boost::property_tree::wptree> output::info() const{return impl_->info();}\r
boost::unique_future<boost::property_tree::wptree> output::delay_info() const{return impl_->delay_info();}\r
bool output::empty() const{return impl_->empty();}\r
+monitor::subject& output::monitor_output() { return impl_->monitor_output(); }\r
}}
\ No newline at end of file
#pragma once\r
\r
#include "../consumer/frame_consumer.h"\r
+#include "../monitor/monitor.h"\r
\r
#include <common/memory/safe_ptr.h>\r
#include <common/concurrency/target.h>\r
boost::unique_future<boost::property_tree::wptree> delay_info() const;\r
\r
bool empty() const;\r
+\r
+ monitor::subject& monitor_output();\r
private:\r
struct implementation;\r
safe_ptr<implementation> impl_;\r
\r
stage_->monitor_output().attach_parent(monitor_subject_);\r
mixer_->monitor_output().attach_parent(monitor_subject_);\r
+ output_->monitor_output().attach_parent(monitor_subject_);\r
\r
CASPAR_LOG(info) << print() << " Successfully Initialized.";\r
}\r