\r
void do_register_drawable(const std::shared_ptr<drawable>& drawable)\r
{\r
- drawables_.push_back(drawable);\r
+ if(std::find(drawables_.begin(), drawables_.end(), drawable) == drawables_.end())\r
+ drawables_.push_back(drawable);\r
}\r
\r
static context& get_instance()\r
: name_(name)\r
, text_(name_){}\r
\r
- void update_text(const std::string& value)\r
+ void set_text(const std::string& value)\r
{\r
text_ = value;\r
}\r
implementation& operator=(implementation&);\r
};\r
\r
-graph::graph(const std::string& name, bool start) : impl_(env::properties().get("configuration.diagnostics.graphs", true) ? new implementation(name) : nullptr)\r
+graph::graph() : impl_(env::properties().get("configuration.diagnostics.graphs", true) ? new implementation("") : nullptr)\r
{\r
- if(start)\r
- graph::start();\r
-}\r
\r
-void graph::start()\r
-{ \r
- if(impl_)\r
- context::register_drawable(impl_);\r
}\r
\r
-void graph::update_text(const std::string& value)\r
+void graph::set_text(const std::string& value)\r
{\r
if(impl_)\r
{ \r
auto p = impl_;\r
context::begin_invoke([=]\r
{ \r
- p->update_text(value);\r
+ p->set_text(value);\r
});\r
}\r
}\r
\r
+void graph::set_text(const std::wstring& value)\r
+{\r
+ set_text(narrow(value));\r
+}\r
+\r
void graph::update_value(const std::string& name, double value)\r
{\r
if(impl_)\r
}\r
}\r
\r
-safe_ptr<graph> create_graph(const std::string& name, bool start)\r
+void register_graph(const safe_ptr<graph>& graph)\r
{\r
- return safe_ptr<graph>(new graph(name, start));\r
+ if(graph->impl_)\r
+ context::register_drawable(graph->impl_);\r
}\r
-\r
//namespace v2\r
//{ \r
// \r
\r
class graph\r
{\r
- friend safe_ptr<graph> create_graph(const std::string& name, bool start);\r
- graph(const std::string& name, bool start = true);\r
- graph(const printer& parent_printer, bool start = true);\r
+ friend void register_graph(const safe_ptr<graph>& graph);\r
public:\r
- void start();\r
- void update_text(const std::string& value);\r
+ graph();\r
+ void set_text(const std::string& value);\r
+ void set_text(const std::wstring& value);\r
void update_value(const std::string& name, double value);\r
void set_value(const std::string& name, double value);\r
void set_color(const std::string& name, color c);\r
std::shared_ptr<implementation> impl_;\r
};\r
\r
-safe_ptr<graph> create_graph(const std::string& name, bool start = true);\r
- \r
+void register_graph(const safe_ptr<graph>& graph);\r
+\r
//namespace v2\r
//{\r
// \r
, pattern_(nullptr)\r
, attached_texture_(0)\r
, active_shader_(0)\r
- , graph_(diagnostics::create_graph("gpu", true))\r
{\r
graph_->set_color("fence", diagnostics::color(1.0f, 0.0f, 0.0f));\r
+ graph_->set_text("gpu");\r
+ diagnostics::register_graph(graph_);\r
\r
std::fill(binded_textures_.begin(), binded_textures_.end(), 0);\r
std::fill(viewport_.begin(), viewport_.end(), 0);\r
\r
public:\r
implementation(int index, const video_format_desc& format_desc, ogl_device& ogl) \r
- : graph_(diagnostics::create_graph(narrow(print()), false))\r
- , format_desc_(format_desc)\r
+ : format_desc_(format_desc)\r
, governor_(3)\r
, output_(new caspar::core::output(mixer_frames_, format_desc))\r
, mixer_(new caspar::core::mixer(stage_frames_, mixer_frames_, format_desc, ogl))\r
graph_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f)); \r
graph_->set_color("output-time", diagnostics::color(1.0f, 0.5f, 0.0f));\r
graph_->set_color("mix-time", diagnostics::color(1.0f, 1.0f, 0.9f));\r
- graph_->start();\r
+ graph_->set_text(print());\r
+ diagnostics::register_graph(graph_);\r
\r
CASPAR_LOG(info) << print() << " Successfully Initialized.";\r
}\r
\r
const std::wstring model_name_;\r
\r
- std::shared_ptr<diagnostics::graph> graph_;\r
+ safe_ptr<diagnostics::graph> graph_;\r
boost::timer frame_timer_;\r
boost::timer tick_timer_;\r
boost::timer sync_timer_; \r
{\r
executor_.set_capacity(core::consumer_buffer_depth());\r
\r
- graph_ = diagnostics::create_graph(narrow(print()));\r
graph_->add_guide("tick-time", 0.5);\r
graph_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f)); \r
graph_->add_guide("frame-time", 0.5f); \r
graph_->set_color("frame-time", diagnostics::color(1.0f, 0.0f, 0.0f));\r
graph_->set_color("sync-time", diagnostics::color(0.5f, 1.0f, 0.2f));\r
graph_->set_color("input-buffer", diagnostics::color(1.0f, 1.0f, 0.0f));\r
+ graph_->set_text(print());\r
+ diagnostics::register_graph(graph_);\r
\r
//Setting output Video mode\r
if(BLUE_FAIL(set_card_property(blue_, VIDEO_MODE, vid_fmt_))) \r
tbb::concurrent_bounded_queue<std::shared_ptr<core::read_frame>> video_frame_buffer_;\r
tbb::concurrent_bounded_queue<std::shared_ptr<core::read_frame>> audio_frame_buffer_;\r
\r
- std::shared_ptr<diagnostics::graph> graph_;\r
+ safe_ptr<diagnostics::graph> graph_;\r
boost::timer tick_timer_;\r
\r
public:\r
video_frame_buffer_.set_capacity(1);\r
audio_frame_buffer_.set_capacity(1);\r
\r
- graph_ = diagnostics::create_graph(narrow(print()));\r
graph_->add_guide("tick-time", 0.5);\r
graph_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f)); \r
graph_->set_color("late-frame", diagnostics::color(0.6f, 0.3f, 0.3f));\r
graph_->set_color("dropped-frame", diagnostics::color(0.3f, 0.6f, 0.3f));\r
graph_->set_color("flushed-frame", diagnostics::color(0.4f, 0.3f, 0.8f));\r
+ graph_->set_text(print());\r
+ diagnostics::register_graph(graph_);\r
\r
enable_video(get_display_mode(output_, format_desc_.format, bmdFormat8BitBGRA, bmdVideoOutputFlagDefault));\r
\r
, model_name_(get_model_name(decklink_))\r
, format_desc_(format_desc)\r
, device_index_(device_index)\r
- , graph_ (diagnostics::create_graph("", false))\r
{ \r
graph_->add_guide("tick-time", 0.5);\r
graph_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f)); \r
graph_->set_color("frame-time", diagnostics::color(1.0f, 0.0f, 0.0f));\r
graph_->set_color("dropped-frame", diagnostics::color(0.3f, 0.6f, 0.3f));\r
graph_->set_color("output-buffer", diagnostics::color(0.0f, 1.0f, 0.0f));\r
- graph_->update_text(narrow(print()));\r
+ graph_->set_text(narrow(print()));\r
+ diagnostics::register_graph(graph_);\r
\r
auto display_mode = get_display_mode(input_, format_desc_.format, bmdFormat8BitYUV, bmdVideoInputFlagDefault);\r
\r
<< boost::errinfo_api_function("StartStreams"));\r
\r
CASPAR_LOG(info) << print() << L" Successfully Initialized.";\r
-\r
- graph_->start();\r
}\r
\r
~decklink_producer()\r
\r
struct ffmpeg_producer : public core::frame_producer\r
{ \r
- const std::wstring filename_;\r
- const int start_;\r
- const bool loop_;\r
- const size_t length_;\r
+ const std::wstring filename_;\r
+ const int start_;\r
+ const bool loop_;\r
+ const size_t length_;\r
\r
- call<input::target_element_t> throw_away_;\r
- unbounded_buffer<input::target_element_t> packets_;\r
+ call<input::target_element_t> throw_away_;\r
+ unbounded_buffer<input::target_element_t> packets_;\r
std::shared_ptr<unbounded_buffer<frame_muxer2::video_source_element_t>> video_;\r
std::shared_ptr<unbounded_buffer<frame_muxer2::audio_source_element_t>> audio_;\r
- unbounded_buffer<frame_muxer2::target_element_t> frames_;\r
+ unbounded_buffer<frame_muxer2::target_element_t> frames_;\r
\r
- const safe_ptr<diagnostics::graph> graph_;\r
+ const safe_ptr<diagnostics::graph> graph_;\r
\r
- input input_; \r
- std::unique_ptr<frame_muxer2> muxer_;\r
- std::shared_ptr<video_decoder> video_decoder_;\r
- std::shared_ptr<audio_decoder> audio_decoder_; \r
+ input input_; \r
+ std::unique_ptr<frame_muxer2> muxer_;\r
+ std::shared_ptr<video_decoder> video_decoder_;\r
+ std::shared_ptr<audio_decoder> audio_decoder_; \r
\r
- safe_ptr<core::basic_frame> last_frame_;\r
+ safe_ptr<core::basic_frame> last_frame_;\r
\r
public:\r
explicit ffmpeg_producer(const safe_ptr<core::frame_factory>& frame_factory, const std::wstring& filename, const std::wstring& filter, bool loop, int start, size_t length) \r
, loop_(loop)\r
, length_(length)\r
, throw_away_([](const input::target_element_t&){})\r
- , graph_(diagnostics::create_graph("", false))\r
, input_(packets_, graph_, filename_, loop, start, length)\r
, last_frame_(core::basic_frame::empty())\r
{ \r
muxer_.reset(new frame_muxer2(video_.get(), audio_.get(), frames_, video_decoder_ ? video_decoder_->fps() : frame_factory->get_video_format_desc().fps, frame_factory));\r
\r
graph_->set_color("underflow", diagnostics::color(0.6f, 0.3f, 0.9f)); \r
- graph_->start();\r
+ graph_->set_text(print());\r
+ diagnostics::register_graph(graph_);\r
\r
input_.start();\r
}\r
{ \r
auto frame_element = Concurrency::receive(frames_, 10);\r
frame = last_frame_ = frame_element.first;\r
- graph_->update_text(narrow(print()));\r
+ graph_->set_text(narrow(print()));\r
}\r
catch(operation_timed_out&)\r
{ \r
, filename_(filename) \r
, width_(width > 0 ? width : frame_factory->get_video_format_desc().width)\r
, height_(height > 0 ? height : frame_factory->get_video_format_desc().height)\r
- , graph_(diagnostics::create_graph("flash", false))\r
{ \r
if(!boost::filesystem::exists(filename))\r
BOOST_THROW_EXCEPTION(file_not_found() << boost::errinfo_file_name(narrow(filename))); \r
\r
- graph_->set_color("underflow", diagnostics::color(0.6f, 0.3f, 0.9f)); \r
+ graph_->set_color("underflow", diagnostics::color(0.6f, 0.3f, 0.9f));\r
+ graph_->set_text(print());\r
+ diagnostics::register_graph(graph_);\r
\r
Concurrency::send(last_frame_, core::basic_frame::empty());\r
\r
fps_ = 0;\r
is_running_ = true;\r
\r
- graph_->start();\r
start();\r
}\r
\r
}\r
\r
fps_ = static_cast<int>(renderer.fps()*100.0);\r
- graph_->update_text(narrow(print()));\r
+ graph_->set_text(narrow(print()));\r
}\r
}\r
catch(...)\r
int preroll_count_;\r
public:\r
oal_consumer() \r
- : graph_(diagnostics::create_graph(narrow(print())))\r
- , container_(16)\r
+ : container_(16)\r
, preroll_count_(0)\r
{\r
if(core::consumer_buffer_depth() < 3)\r
\r
graph_->add_guide("tick-time", 0.5);\r
graph_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f)); \r
+ graph_->set_text(print());\r
+ diagnostics::register_graph(graph_);\r
+\r
is_running_ = true;\r
input_.set_capacity(core::consumer_buffer_depth()-2);\r
}\r
, screen_height_(format_desc.height)\r
, square_width_(format_desc.square_width)\r
, square_height_(format_desc.square_height)\r
- , graph_(diagnostics::create_graph(narrow(print())))\r
, input_buffer_(core::consumer_buffer_depth()-1)\r
, filter_(format_desc.field_mode == core::field_mode::progressive || !config.auto_deinterlace ? L"" : L"YADIF=0:-1", boost::assign::list_of(PIX_FMT_BGRA))\r
{ \r
graph_->add_guide("frame-time", 0.5);\r
graph_->set_color("frame-time", diagnostics::color(1.0f, 0.0f, 0.0f));\r
graph_->set_color("dropped-frame", diagnostics::color(0.3f, 0.6f, 0.3f));\r
+ graph_->set_text(print());\r
+ diagnostics::register_graph(graph_);\r
\r
DISPLAY_DEVICE d_device = {sizeof(d_device), 0}; \r
std::vector<DISPLAY_DEVICE> displayDevices;\r
</decklink>\r
</consumers>\r
</channel>\r
+ <channel>\r
+ <video-mode>PAL</video-mode>\r
+ <consumers>\r
+ <bluefish>\r
+ <device>1</device>\r
+ <embedded-audio>true</embedded-audio>\r
+ </bluefish>\r
+ </consumers>\r
+ </channel>\r
</channels>\r
<controllers>\r
<tcp>\r