]> git.sesse.net Git - casparcg/commitdiff
2.0.0.2: Refactoring.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 29 May 2011 11:09:25 +0000 (11:09 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 29 May 2011 11:09:25 +0000 (11:09 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@825 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

common/concurrency/executor.h
core/consumer/frame_consumer_device.cpp
core/mixer/frame_mixer_device.cpp
core/mixer/read_frame.cpp
core/mixer/write_frame.h
core/producer/frame_producer.cpp
core/producer/frame_producer.h
core/producer/frame_producer_device.cpp
core/producer/frame_producer_device.h

index f96962b9a00e9e363494fe9f36d22208e9784036..e2d4d0243bf0c5251f5844525f5d52876a3bb869 100644 (file)
@@ -68,6 +68,14 @@ enum priority
        priority_count\r
 };\r
 \r
+enum priority_class\r
+{\r
+       high_priority_class,\r
+       above_normal_priority_class,\r
+       normal_priority_class,\r
+       below_normal_priority_clas\r
+};\r
+\r
 namespace internal\r
 {\r
        template<typename T>\r
@@ -132,6 +140,21 @@ public:
        {\r
                execution_queue_[normal_priority].set_capacity(capacity);\r
        }\r
+\r
+       void set_priority_class(priority_class p)\r
+       {\r
+               begin_invoke([=]\r
+               {\r
+                       if(p == high_priority_class)\r
+                               SetThreadPriority(GetCurrentThread(), HIGH_PRIORITY_CLASS);\r
+                       if(p == above_normal_priority_class)\r
+                               SetThreadPriority(GetCurrentThread(), ABOVE_NORMAL_PRIORITY_CLASS);\r
+                       else if(p == normal_priority_class)\r
+                               SetThreadPriority(GetCurrentThread(), NORMAL_PRIORITY_CLASS);\r
+                       else if(p == below_normal_priority_clas)\r
+                               SetThreadPriority(GetCurrentThread(), BELOW_NORMAL_PRIORITY_CLASS);\r
+               });\r
+       }\r
                                \r
        void stop() // noexcept\r
        {\r
index b9fda9fb392254908419bd0ec40a90842bb7efad..7d9b5585a9cf45aca278239510f35c3b22eff40f 100644 (file)
@@ -73,10 +73,7 @@ public:
                diag_->set_color("tick-time", diagnostics::color(0.1f, 0.7f, 0.8f));\r
 \r
                executor_.set_capacity(1);\r
-               executor_.begin_invoke([]\r
-               {\r
-                       SetThreadPriority(GetCurrentThread(), ABOVE_NORMAL_PRIORITY_CLASS);\r
-               });\r
+               executor_.set_priority_class(above_normal_priority_class);\r
        }\r
 \r
        void add(int index, safe_ptr<frame_consumer>&& consumer)\r
index 2810132487170310973f809938e7506821bf86c3..e7bf452fd5f396131981f26cbdc43fde8c934e6a 100644 (file)
@@ -122,10 +122,7 @@ public:
                diag_->set_color("tick-time", diagnostics::color(0.1f, 0.7f, 0.8f));\r
                diag_->set_color("input-buffer", diagnostics::color(1.0f, 1.0f, 0.0f)); \r
                executor_.set_capacity(1);      \r
-               executor_.begin_invoke([]\r
-               {\r
-                       SetThreadPriority(GetCurrentThread(), ABOVE_NORMAL_PRIORITY_CLASS);\r
-               });\r
+               executor_.set_priority_class(above_normal_priority_class);\r
 \r
                CASPAR_LOG(info) << print() << L" Successfully initialized.";   \r
        }\r
index 552ab0d105e96137b7c4978f3a12692f6add8eeb..16abe9cd99d58d1a637b4c166fd59a5bb87fdcee 100644 (file)
@@ -27,28 +27,30 @@ namespace caspar { namespace core {
                                                                                                                                                                                                                                                                                                                        \r
 struct read_frame::implementation : boost::noncopyable\r
 {\r
-       boost::unique_future<safe_ptr<host_buffer>> image_data_;\r
+       boost::unique_future<safe_ptr<host_buffer>> future_image_data_;\r
+       std::shared_ptr<host_buffer> image_data_;\r
        std::vector<int16_t> audio_data_;\r
 \r
 public:\r
-       implementation(boost::unique_future<safe_ptr<host_buffer>>&& image_data, std::vector<int16_t>&& audio_data) \r
-               : image_data_(std::move(image_data))\r
+       implementation(boost::unique_future<safe_ptr<host_buffer>>&& future_image_data, std::vector<int16_t>&& audio_data) \r
+               : future_image_data_(std::move(future_image_data))\r
                , audio_data_(std::move(audio_data)){}  \r
 \r
        const boost::iterator_range<const uint8_t*> image_data()\r
        {\r
                try\r
                {\r
-                       if(!image_data_.get()->data())\r
-                               return boost::iterator_range<const uint8_t*>();\r
-                       auto ptr = static_cast<const uint8_t*>(image_data_.get()->data());\r
-                       return boost::iterator_range<const uint8_t*>(ptr, ptr + image_data_.get()->size());\r
+                       if(!image_data_)\r
+                               image_data_ = future_image_data_.get();\r
                }\r
                catch(...) // image_data_ future might store exception.\r
                {\r
                        CASPAR_LOG_CURRENT_EXCEPTION();\r
                        return boost::iterator_range<const uint8_t*>();\r
                }\r
+\r
+               auto ptr = static_cast<const uint8_t*>(image_data_->data());\r
+               return boost::iterator_range<const uint8_t*>(ptr, ptr + image_data_->size());\r
        }\r
        const boost::iterator_range<const int16_t*> audio_data() const\r
        {\r
index 999587c3f87fea39ee532810ec184e95a4a33f99..0619fe0655b166fbf09e76f9885e558c63e10f3d 100644 (file)
@@ -28,6 +28,7 @@
 \r
 #include <memory>\r
 #include <vector>\r
+#include <cstdint>\r
 \r
 namespace caspar { namespace core {\r
 \r
index 960fc7f078712057e9a6a4bae787877f66c0bf49..278e7711dfe77b52cab0567d99ca1f51fbee9548 100644 (file)
@@ -22,6 +22,7 @@
 \r
 #include "frame_producer.h"\r
 #include "frame/basic_frame.h"\r
+#include "frame/audio_transform.h"\r
 \r
 #include "color/color_producer.h"\r
 #include "separated/separated_producer.h"\r
@@ -32,6 +33,8 @@ namespace caspar { namespace core {
        \r
 std::vector<const producer_factory_t> g_factories;\r
 \r
+frame_producer::frame_producer() : last_frame_(core::basic_frame::empty()){}\r
+\r
 const safe_ptr<frame_producer>& frame_producer::empty() // nothrow\r
 {\r
        struct empty_frame_producer : public frame_producer\r
index 67a4a3f6b42a46f86a3d3043b66c61b0e68932d4..17a4e3c75d5092bc15b447dff319871d0225f447 100644 (file)
 */\r
 #pragma once\r
 \r
-#include "frame/basic_frame.h"\r
-#include "frame/audio_transform.h"\r
+#include "frame/frame_factory.h"\r
 \r
 #include <common/memory/safe_ptr.h>\r
 \r
-#include "frame/frame_factory.h"\r
-\r
 #include <boost/noncopyable.hpp>\r
 \r
 #include <functional>\r
@@ -39,7 +36,7 @@ class basic_frame;
 class frame_producer : boost::noncopyable\r
 {\r
 public:\r
-       frame_producer() : last_frame_(core::basic_frame::empty()){}\r
+       frame_producer();\r
        virtual ~frame_producer(){}     \r
 \r
        virtual std::wstring print() const = 0; // nothrow\r
index cb6b08cf55eebdd2800fe48c1aa21fb2cb187919..d35abdbdc87ec767656a88ece2700d29a175942c 100644 (file)
 #include "../StdAfx.h"\r
 \r
 #include "frame_producer_device.h"\r
+\r
+#include "layer.h"\r
 #include "destroy_producer_proxy.h"\r
 \r
 #include <core/producer/frame/basic_frame.h>\r
 #include <core/producer/frame/frame_factory.h>\r
 \r
 #include <common/diagnostics/graph.h>\r
-\r
-#include "layer.h"\r
-\r
 #include <common/concurrency/executor.h>\r
 \r
-#include <boost/range/algorithm_ext/erase.hpp>\r
-#include <boost/lexical_cast.hpp>\r
 #include <boost/timer.hpp>\r
 \r
 #include <tbb/parallel_for.h>\r
 \r
-#include <array>\r
-#include <memory>\r
 #include <map>\r
 \r
 namespace caspar { namespace core {\r
@@ -48,14 +43,14 @@ struct frame_producer_device::implementation : boost::noncopyable
 {              \r
        std::map<int, layer>             layers_;               \r
        const video_format_desc          format_desc_;  \r
-       safe_ptr<diagnostics::graph> diag_;\r
        const output_t                           output_;\r
-\r
+       \r
+       safe_ptr<diagnostics::graph> diag_;\r
        boost::timer                             frame_timer_;\r
        boost::timer                             tick_timer_;\r
        boost::timer                             output_timer_;\r
        \r
-       mutable executor                         executor_;\r
+       executor                                        executor_;\r
 public:\r
        implementation(const video_format_desc& format_desc, const output_t& output)  \r
                : format_desc_(format_desc)\r
@@ -67,10 +62,8 @@ public:
                diag_->set_color("frame-time", diagnostics::color(1.0f, 0.0f, 0.0f));\r
                diag_->set_color("tick-time", diagnostics::color(0.1f, 0.7f, 0.8f));\r
                diag_->set_color("output-time", diagnostics::color(0.5f, 1.0f, 0.2f));\r
-               executor_.begin_invoke([]\r
-               {\r
-                       SetThreadPriority(GetCurrentThread(), ABOVE_NORMAL_PRIORITY_CLASS);\r
-               });\r
+\r
+               executor_.set_priority_class(above_normal_priority_class);\r
                executor_.begin_invoke([=]{tick();});           \r
        }\r
                        \r
@@ -104,9 +97,9 @@ public:
                        frames[pair.first] = pair.second.receive();\r
                });\r
                \r
-               diag_->update_value("frame-time", static_cast<float>(frame_timer_.elapsed()*format_desc_.fps*0.5));\r
+               diag_->update_value("frame-time", frame_timer_.elapsed()*format_desc_.fps*0.5);\r
 \r
-               diag_->update_value("tick-time", static_cast<float>(tick_timer_.elapsed()*format_desc_.fps*0.5));\r
+               diag_->update_value("tick-time", tick_timer_.elapsed()*format_desc_.fps*0.5);\r
                tick_timer_.restart();\r
 \r
                return frames;\r
index 239b1fd62c6c04c0ee7cd70c2fb2a3fa32ed99cb..d8d9ca3b30217c06c4c54013b5a4002319662165 100644 (file)
@@ -27,6 +27,8 @@
 #include <boost/noncopyable.hpp>\r
 #include <boost/thread/future.hpp>\r
 \r
+#include <functional>\r
+\r
 namespace caspar { namespace core {\r
 \r
 struct video_format_desc;\r