]> git.sesse.net Git - casparcg/commitdiff
concrt-exp: Improved diagnostic graphs API.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 25 Oct 2011 16:46:50 +0000 (16:46 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 25 Oct 2011 16:46:50 +0000 (16:46 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0 concrt-experimental@1467 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

12 files changed:
common/diagnostics/graph.cpp
common/diagnostics/graph.h
core/mixer/gpu/ogl_device.cpp
core/video_channel.cpp
modules/bluefish/consumer/bluefish_consumer.cpp
modules/decklink/consumer/decklink_consumer.cpp
modules/decklink/producer/decklink_producer.cpp
modules/ffmpeg/producer/ffmpeg_producer.cpp
modules/flash/producer/flash_producer.cpp
modules/oal/consumer/oal_consumer.cpp
modules/ogl/consumer/ogl_consumer.cpp
shell/casparcg.config

index 3ebb487c330f328a3f6365855c7717d5e83d12cd..a7c3bc61161cc56fe34a33b51f44c74df83ea61e 100644 (file)
@@ -125,7 +125,8 @@ private:
        \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
@@ -265,7 +266,7 @@ struct graph::implementation : public drawable
                : 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
@@ -348,30 +349,28 @@ private:
        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
@@ -428,11 +427,11 @@ void graph::add_guide(const std::string& name, double value)
        }\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
index e13f07067cc8f619c17599b646c702f1b49c60fe..59f8b46ba7572c0be93e53f859385f6a3b145cd7 100644 (file)
@@ -51,12 +51,11 @@ struct color
 \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
@@ -67,8 +66,8 @@ private:
        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
index 35c9f978e86c7c13dbf6c9ce496e2f89dc397bc6..866231d22c78f915c0b4bd03cbeec75216a3a476 100644 (file)
@@ -41,9 +41,10 @@ ogl_device::ogl_device()
        , 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
index 2aae8e945daa869dd7df4d1711bfca26773dafe3..60fa41eebf3743f9be42b9864a31f785ce6204bd 100644 (file)
@@ -64,8 +64,7 @@ struct video_channel::implementation : boost::noncopyable
        \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
@@ -76,7 +75,8 @@ public:
                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
index 3f501cc1239a76b7884f9aaaf730b8b24f35a32d..0d4acf54a695dae72914f38708938f1c5b68c736 100644 (file)
@@ -55,7 +55,7 @@ struct bluefish_consumer : boost::noncopyable
 \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
@@ -85,13 +85,14 @@ public:
        {\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
index e8c04ad54efa56a88de7d2c867707db962d69b15..95b957a4c5e8cc1db2fb4cd223a08c4136ef917c 100644 (file)
@@ -157,7 +157,7 @@ struct decklink_consumer : public IDeckLinkVideoOutputCallback, public IDeckLink
        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
@@ -180,12 +180,13 @@ public:
                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
index e35ad94d5de8f3735ba42d2ffc08f0f10cfa1428..600a8b2d87481a45d53a0d0a6c603587b6cacb48 100644 (file)
@@ -97,7 +97,6 @@ public:
                , 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
@@ -105,7 +104,8 @@ public:
                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
@@ -131,8 +131,6 @@ public:
                                                                        << boost::errinfo_api_function("StartStreams"));\r
 \r
                CASPAR_LOG(info) << print() << L" Successfully Initialized.";\r
-\r
-               graph_->start();\r
        }\r
 \r
        ~decklink_producer()\r
index dcb76a1047e20946a46a796b76e91cd6f4779207..af36f2ab8501bf0d89f56572df190723ba59ebd9 100644 (file)
@@ -57,25 +57,25 @@ namespace caspar { namespace ffmpeg {
                \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
@@ -84,7 +84,6 @@ public:
                , 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
@@ -126,7 +125,8 @@ public:
                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
@@ -144,7 +144,7 @@ public:
                {               \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
index 07c0d63340fd170c8a0220357963bf89e028b420..ee40bbfe1bae33db0318ddee1b34bbac9cdfec72 100644 (file)
@@ -274,19 +274,19 @@ public:
                , 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
@@ -341,7 +341,7 @@ public:
                                }\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
index 5272125b5c6bd05fc6540a649250f4536addc40f..5ec6efbfe38c5f98e10a3c961c4a59f25317a908 100644 (file)
@@ -56,8 +56,7 @@ struct oal_consumer : public core::frame_consumer,  public sf::SoundStream
        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
@@ -65,6 +64,9 @@ public:
 \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
index 51738b7d1d84b330a3b4160cb2a7df832a8d941e..814d75bdcda1aecce35452edb4762a8b17ffa758 100644 (file)
@@ -136,7 +136,6 @@ public:
                , 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
@@ -145,6 +144,8 @@ public:
                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
index 10b31e58189251f3d0e56d47be39c1c9c56b96de..9351152d545f6d08c20541ff61f8adb159afebca 100644 (file)
         </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