]> git.sesse.net Git - casparcg/commitdiff
2.1.0: Refactoring.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 3 Feb 2012 16:58:42 +0000 (16:58 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 3 Feb 2012 16:58:42 +0000 (16:58 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.1.0@2218 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/consumer/cadence/cadence_guard_consumer.cpp [new file with mode: 0644]
core/consumer/cadence/cadence_guard_consumer.h [new file with mode: 0644]
core/consumer/frame_consumer.cpp
core/consumer/frame_consumer.h
core/consumer/output.cpp
core/core.vcxproj
core/core.vcxproj.filters
core/producer/frame_producer.h

diff --git a/core/consumer/cadence/cadence_guard_consumer.cpp b/core/consumer/cadence/cadence_guard_consumer.cpp
new file mode 100644 (file)
index 0000000..2dd9617
--- /dev/null
@@ -0,0 +1,85 @@
+#include "../../stdafx.h"\r
+\r
+#include "../frame_consumer.h"\r
+\r
+#include <common/env.h>\r
+#include <common/memory/safe_ptr.h>\r
+#include <common/except.h>\r
+\r
+#include <core/video_format.h>\r
+#include <core/frame/data_frame.h>\r
+\r
+namespace caspar { namespace core {\r
+\r
+// This class is used to guarantee that audio cadence is correct. This is important for NTSC audio.\r
+class cadence_guard : public frame_consumer\r
+{\r
+       safe_ptr<frame_consumer>                consumer_;\r
+       std::vector<int>                                audio_cadence_;\r
+       boost::circular_buffer<int>     sync_buffer_;\r
+public:\r
+       cadence_guard(const safe_ptr<frame_consumer>& consumer)\r
+               : consumer_(consumer)\r
+       {\r
+       }\r
+       \r
+       virtual void initialize(const video_format_desc& format_desc, int channel_index) override\r
+       {\r
+               audio_cadence_  = format_desc.audio_cadence;\r
+               sync_buffer_    = boost::circular_buffer<int>(format_desc.audio_cadence.size());\r
+               consumer_->initialize(format_desc, channel_index);\r
+       }\r
+\r
+       virtual bool send(const safe_ptr<const data_frame>& frame) override\r
+       {               \r
+               if(audio_cadence_.size() == 1)\r
+                       return consumer_->send(frame);\r
+\r
+               bool result = true;\r
+               \r
+               if(boost::range::equal(sync_buffer_, audio_cadence_) && audio_cadence_.front() == static_cast<int>(frame->audio_data().size())) \r
+               {       \r
+                       // Audio sent so far is in sync, now we can send the next chunk.\r
+                       result = consumer_->send(frame);\r
+                       boost::range::rotate(audio_cadence_, std::begin(audio_cadence_)+1);\r
+               }\r
+               else\r
+                       CASPAR_LOG(trace) << print() << L" Syncing audio.";\r
+\r
+               sync_buffer_.push_back(static_cast<int>(frame->audio_data().size()));\r
+               \r
+               return result;\r
+       }\r
+\r
+       virtual std::wstring print() const override\r
+       {\r
+               return consumer_->print();\r
+       }\r
+\r
+       virtual boost::property_tree::wptree info() const override\r
+       {\r
+               return consumer_->info();\r
+       }\r
+\r
+       virtual bool has_synchronization_clock() const override\r
+       {\r
+               return consumer_->has_synchronization_clock();\r
+       }\r
+\r
+       virtual int buffer_depth() const override\r
+       {\r
+               return consumer_->buffer_depth();\r
+       }\r
+\r
+       virtual int index() const override\r
+       {\r
+               return consumer_->index();\r
+       }\r
+};\r
+\r
+safe_ptr<frame_consumer> create_consumer_cadence_guard(const safe_ptr<frame_consumer>& consumer)\r
+{\r
+       return make_safe<cadence_guard>(std::move(consumer));\r
+}\r
+\r
+}}
\ No newline at end of file
diff --git a/core/consumer/cadence/cadence_guard_consumer.h b/core/consumer/cadence/cadence_guard_consumer.h
new file mode 100644 (file)
index 0000000..c8bfb45
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once\r
+\r
+#include <common/memory/safe_ptr.h>\r
+\r
+namespace caspar { namespace core {\r
+       \r
+safe_ptr<struct frame_consumer> create_consumer_cadence_guard(const safe_ptr<struct frame_consumer>& consumer);\r
+\r
+}}
\ No newline at end of file
index f649f185361cd6dece6ccb3218a5ae9b558f7de8..9b74a7143adecb9a63f1e89ef012468222ec00f2 100644 (file)
 \r
 #include "frame_consumer.h"\r
 \r
-#include <common/env.h>\r
-#include <common/memory/safe_ptr.h>\r
-#include <common/except.h>\r
-#include <core/video_format.h>\r
-#include <core/frame/data_frame.h>\r
-\r
-#include <boost/circular_buffer.hpp>\r
+#include "cadence/cadence_guard_consumer.h"\r
 \r
 namespace caspar { namespace core {\r
                \r
@@ -65,77 +59,6 @@ safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>&
        return consumer;\r
 }\r
 \r
-// This class is used to guarantee that audio cadence is correct. This is important for NTSC audio.\r
-class cadence_guard : public frame_consumer\r
-{\r
-       safe_ptr<frame_consumer>                consumer_;\r
-       std::vector<int>                                audio_cadence_;\r
-       boost::circular_buffer<int>     sync_buffer_;\r
-public:\r
-       cadence_guard(const safe_ptr<frame_consumer>& consumer)\r
-               : consumer_(consumer)\r
-       {\r
-       }\r
-       \r
-       virtual void initialize(const video_format_desc& format_desc, int channel_index) override\r
-       {\r
-               audio_cadence_  = format_desc.audio_cadence;\r
-               sync_buffer_    = boost::circular_buffer<int>(format_desc.audio_cadence.size());\r
-               consumer_->initialize(format_desc, channel_index);\r
-       }\r
-\r
-       virtual bool send(const safe_ptr<const data_frame>& frame) override\r
-       {               \r
-               if(audio_cadence_.size() == 1)\r
-                       return consumer_->send(frame);\r
-\r
-               bool result = true;\r
-               \r
-               if(boost::range::equal(sync_buffer_, audio_cadence_) && audio_cadence_.front() == static_cast<int>(frame->audio_data().size())) \r
-               {       \r
-                       // Audio sent so far is in sync, now we can send the next chunk.\r
-                       result = consumer_->send(frame);\r
-                       boost::range::rotate(audio_cadence_, std::begin(audio_cadence_)+1);\r
-               }\r
-               else\r
-                       CASPAR_LOG(trace) << print() << L" Syncing audio.";\r
-\r
-               sync_buffer_.push_back(static_cast<int>(frame->audio_data().size()));\r
-               \r
-               return result;\r
-       }\r
-\r
-       virtual std::wstring print() const override\r
-       {\r
-               return consumer_->print();\r
-       }\r
-\r
-       virtual boost::property_tree::wptree info() const override\r
-       {\r
-               return consumer_->info();\r
-       }\r
-\r
-       virtual bool has_synchronization_clock() const override\r
-       {\r
-               return consumer_->has_synchronization_clock();\r
-       }\r
-\r
-       virtual int buffer_depth() const override\r
-       {\r
-               return consumer_->buffer_depth();\r
-       }\r
-\r
-       virtual int index() const override\r
-       {\r
-               return consumer_->index();\r
-       }\r
-};\r
-\r
-safe_ptr<frame_consumer> create_consumer_cadence_guard(const safe_ptr<frame_consumer>& consumer)\r
-{\r
-       return make_safe<cadence_guard>(std::move(consumer));\r
-}\r
-\r
 const safe_ptr<frame_consumer>& frame_consumer::empty()\r
 {\r
        struct empty_frame_consumer : public frame_consumer\r
index 989d358520a336a7cbc2b8524c8df28f88015aab..be4215349d95d4f9ba24e00080f87cec9dff9527 100644 (file)
@@ -48,8 +48,6 @@ struct frame_consumer : boost::noncopyable
        static const safe_ptr<frame_consumer>& empty();\r
 };\r
 \r
-safe_ptr<frame_consumer> create_consumer_cadence_guard(const safe_ptr<frame_consumer>& consumer);\r
-\r
 typedef std::function<safe_ptr<frame_consumer>(const std::vector<std::wstring>&)> consumer_factory_t;\r
 \r
 void register_consumer_factory(const consumer_factory_t& factory);\r
index 7161f52a2412d20664a10cea196ce48b0af1be01..bb05d480243d3d04020872ad3cb0b911d82eafa3 100644 (file)
@@ -29,6 +29,8 @@
 \r
 #include "frame_consumer.h"\r
 \r
+#include "cadence/cadence_guard_consumer.h"\r
+\r
 #include "../video_format.h"\r
 #include "../frame/data_frame.h"\r
 \r
index 5f7989747e01d50d426dd11a28c57b3174d8153b..174170a44dd16b2f9b168700510347e8b3fc312d 100644 (file)
     </Lib>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
+    <ClInclude Include="consumer\cadence\cadence_guard_consumer.h" />\r
     <ClInclude Include="frame\draw_frame.h" />\r
     <ClInclude Include="frame\data_frame.h" />\r
     <ClInclude Include="frame\frame_factory.h" />\r
     <ClInclude Include="StdAfx.h" />\r
   </ItemGroup>\r
   <ItemGroup>\r
+    <ClCompile Include="consumer\cadence\cadence_guard_consumer.cpp">\r
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">../../StdAfx.h</PrecompiledHeaderFile>\r
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../../StdAfx.h</PrecompiledHeaderFile>\r
+    </ClCompile>\r
     <ClCompile Include="frame\data_frame.cpp">\r
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">../StdAfx.h</PrecompiledHeaderFile>\r
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../StdAfx.h</PrecompiledHeaderFile>\r
index c9a26903a85060cb048b3480da32af5cec11dc31..7cdf51776e618c8a5b76dd077b2ed569cc9d9dbf 100644 (file)
@@ -37,6 +37,9 @@
     <Filter Include="source\frame">\r
       <UniqueIdentifier>{b19721c1-8dd1-45fb-b9e3-212b548ebbb6}</UniqueIdentifier>\r
     </Filter>\r
+    <Filter Include="source\consumer\cadence">\r
+      <UniqueIdentifier>{32043b44-b1bc-4098-8401-4b1467a96a01}</UniqueIdentifier>\r
+    </Filter>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="producer\transition\transition_producer.h">\r
     <ClInclude Include="mixer\gpu\write_frame.h">\r
       <Filter>source\mixer\gpu</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="consumer\cadence\cadence_guard_consumer.h">\r
+      <Filter>source\consumer\cadence</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClCompile Include="producer\transition\transition_producer.cpp">\r
     <ClCompile Include="mixer\gpu\write_frame.cpp">\r
       <Filter>source\mixer\gpu</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="consumer\cadence\cadence_guard_consumer.cpp">\r
+      <Filter>source\consumer\cadence</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
 </Project>
\ No newline at end of file
index b6c5963a1eca27392c43cbab157cdcf60bcf8dc4..1a37c654856c19915a01591516933a3ce88bcd90 100644 (file)
@@ -75,8 +75,10 @@ safe_ptr<class draw_frame> receive_and_follow(safe_ptr<frame_producer>& producer
 \r
 typedef std::function<safe_ptr<core::frame_producer>(const safe_ptr<struct frame_factory>&, const std::vector<std::wstring>&)> producer_factory_t;\r
 void register_producer_factory(const producer_factory_t& factory); // Not thread-safe.\r
+\r
 safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>&, const std::vector<std::wstring>& params);\r
 safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>&, const std::wstring& params);\r
+\r
 safe_ptr<core::frame_producer> create_producer_destroy_proxy(safe_ptr<core::frame_producer> producer);\r
 safe_ptr<core::frame_producer> create_producer_print_proxy(safe_ptr<core::frame_producer> producer);\r
                \r