]> git.sesse.net Git - casparcg/commitdiff
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 14 Jan 2011 20:54:41 +0000 (20:54 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 14 Jan 2011 20:54:41 +0000 (20:54 +0000)
core/consumer/decklink/decklink_consumer.cpp
core/consumer/frame_consumer_device.cpp
core/producer/decklink/decklink_producer.cpp
core/producer/flash/FlashAxContainer.cpp
core/producer/flash/flash_producer.cpp
core/producer/layer.cpp
shell/main.cpp

index aafedfb897066747757ae855ec1b089e1e9aeac8..9cacadaa48d8a6e7fbde514ff3458d160c49b3b2 100644 (file)
 namespace caspar { namespace core { namespace decklink{\r
        \r
 struct decklink_consumer::implementation : public IDeckLinkVideoOutputCallback, public IDeckLinkAudioOutputCallback, boost::noncopyable\r
-{                      \r
+{              \r
        struct co_init\r
        {\r
-               co_init()\r
-               {\r
-                       if(FAILED(CoInitialize(nullptr))) \r
-                               BOOST_THROW_EXCEPTION(caspar_exception() << msg_info("DECKLINK: Initialization of COM failed."));       \r
-               }\r
-               ~co_init()\r
-               {\r
-                       CoUninitialize();\r
-               }\r
+               co_init(){CoInitialize(nullptr);}\r
+               ~co_init(){CoUninitialize();}\r
        } co_;\r
 \r
        std::array<std::pair<void*, CComPtr<IDeckLinkMutableVideoFrame>>, 3> reserved_frames_;\r
index 9056a79a59fca478547f9fdea7830f665c53e5c0..17f0dd65a22c926787bcc2d657ece505b4cb78a0 100644 (file)
@@ -13,6 +13,7 @@
 \r
 #include <boost/range/algorithm_ext/erase.hpp>\r
 #include <boost/range/algorithm.hpp>\r
+#include <boost/circular_buffer.hpp>\r
 \r
 namespace caspar { namespace core {\r
        \r
@@ -21,8 +22,7 @@ struct frame_consumer_device::implementation
        timer clock_;\r
        executor executor_;     \r
 \r
-       size_t depth_;\r
-       std::deque<safe_ptr<const read_frame>> buffer_;         \r
+       boost::circular_buffer<safe_ptr<const read_frame>> buffer_;\r
 \r
        std::vector<safe_ptr<frame_consumer>> consumers_;\r
        \r
@@ -38,7 +38,7 @@ public:
 \r
                std::vector<size_t> depths;\r
                boost::range::transform(consumers_, std::back_inserter(depths), std::mem_fn(&frame_consumer::buffer_depth));\r
-               depth_ = *boost::range::max_element(depths);\r
+               buffer_.set_capacity(*boost::range::max_element(depths));\r
                executor_.set_capacity(3);\r
                executor_.start();\r
        }\r
@@ -49,7 +49,7 @@ public:
                {\r
                        buffer_.push_back(frame);\r
 \r
-                       if(buffer_.size() < depth_)\r
+                       if(!buffer_.full())\r
                                return;\r
        \r
                        boost::range::for_each(consumers_, [&](const safe_ptr<frame_consumer>& consumer)\r
@@ -65,8 +65,6 @@ public:
                                        CASPAR_LOG(warning) << "Removed consumer from frame_consumer_device.";\r
                                }\r
                        });\r
-\r
-                       buffer_.pop_front();\r
        \r
                        clock_.wait(fmt_.fps);\r
                });\r
index 9023ad2a9a5b5182ab3876067e4e117e039515ae..279ebea14a47307ce859f61bbc57fe4e5937ec83 100644 (file)
@@ -50,15 +50,8 @@ class decklink_input : public IDeckLinkInputCallback
 {\r
        struct co_init\r
        {\r
-               co_init()\r
-               {\r
-                       if(FAILED(CoInitialize(nullptr))) \r
-                               BOOST_THROW_EXCEPTION(caspar_exception() << msg_info("DECKLINK: Initialization of COM failed."));       \r
-               }\r
-               ~co_init()\r
-               {\r
-                       CoUninitialize();\r
-               }\r
+               co_init(){CoInitialize(nullptr);}\r
+               ~co_init(){CoUninitialize();}\r
        } co_;\r
 \r
        const video_format_desc format_desc_;\r
index c06ac4050b5edfd7cd6cf5f31d327f0728c5d95c..2def2750f9696042f6bc73068d47d8e9048d044e 100644 (file)
 \r
 #include <common/log/log.h>\r
 \r
+#if defined(_MSC_VER)\r
+#pragma warning (push, 2) // TODO\r
+#endif\r
+\r
 using namespace ATL;\r
 \r
 namespace caspar { namespace flash {\r
index b91a109269e5e42f0c46d7f35faf49064d58fa96..db9d7b015918f3a05a6835056c255f85dabb09cb 100644 (file)
@@ -48,15 +48,8 @@ class flash_renderer
 {\r
        struct co_init\r
        {\r
-               co_init()\r
-               {\r
-                       if(FAILED(CoInitialize(nullptr))) \r
-                               BOOST_THROW_EXCEPTION(caspar_exception() << msg_info("Initialization of COM failed.")); \r
-               }\r
-               ~co_init()\r
-               {\r
-                       CoUninitialize();\r
-               }\r
+               co_init(){CoInitialize(nullptr);}\r
+               ~co_init(){CoUninitialize();}\r
        } co_;\r
 \r
        const std::wstring filename_;\r
index 229cb0c89f48e5d841a68456b9ccf9ffaf24ac50..22dfc521849537f73676828d2d9ae665e29612e2 100644 (file)
@@ -36,7 +36,7 @@ public:
        void preview(const safe_ptr<frame_producer>& frame_producer)\r
        {\r
                stop();\r
-               load(frame_producer, false);                    \r
+               load(frame_producer, false);            \r
                try\r
                {\r
                        last_frame_ = frame_producer->receive();\r
@@ -44,8 +44,7 @@ public:
                catch(...)\r
                {\r
                        CASPAR_LOG_CURRENT_EXCEPTION();\r
-                       CASPAR_LOG(warning) << print() << L" empty => background";\r
-                       background_ = frame_producer::empty();\r
+                       clear();\r
                }\r
        }\r
        \r
@@ -65,17 +64,17 @@ public:
 \r
        void stop()\r
        {\r
-               is_paused_ = false;\r
+               pause();\r
                last_frame_ = draw_frame::empty();\r
                foreground_ = frame_producer::empty();\r
+               CASPAR_LOG(warning) << print() << L" empty => foreground";\r
        }\r
 \r
        void clear()\r
        {\r
-               is_paused_ = false;\r
-               last_frame_ = draw_frame::empty();\r
-               foreground_ = frame_producer::empty();\r
+               stop();\r
                background_ = frame_producer::empty();\r
+               CASPAR_LOG(warning) << print() << L" empty => background";\r
        }\r
        \r
        safe_ptr<draw_frame> receive()\r
@@ -102,9 +101,7 @@ public:
                catch(...)\r
                {\r
                        CASPAR_LOG_CURRENT_EXCEPTION();\r
-                       foreground_ = frame_producer::empty();\r
-                       last_frame_ = draw_frame::empty();\r
-                       CASPAR_LOG(warning) << print() << L" empty => foreground";\r
+                       stop();\r
                }\r
 \r
                return last_frame_;\r
index 4269bf8e4889793b98f283a03ff89eb7ed0ac77f..e12789cc0628900b97bdb42af657434503dd0a6e 100644 (file)
@@ -113,6 +113,8 @@ int main(int argc, wchar_t* argv[])
                                wcmd = L"LOAD 1-1 720p2500";\r
                        else if(wcmd.substr(0, 1) == L"8")\r
                                wcmd = L"LOAD 1-1 #FFFFFFFF AUTOPLAY";\r
+                       else if(wcmd.substr(0, 1) == L"9")\r
+                               wcmd = L"LOADBG 1-2 " + wcmd.substr(1, wcmd.length()-1) + L" [1.0-2.0] LOOP AUTOPLAY";\r
 \r
                        wcmd += L"\r\n";\r
                        amcp.Parse(wcmd.c_str(), wcmd.length(), dummy);\r