]> git.sesse.net Git - casparcg/commitdiff
Merged #278
authorHelge Norberg <helge.norberg@gmail.com>
Wed, 6 Aug 2014 08:45:16 +0000 (10:45 +0200)
committerHelge Norberg <helge.norberg@gmail.com>
Wed, 6 Aug 2014 08:45:16 +0000 (10:45 +0200)
core/producer/layer.cpp
core/producer/layer.h
core/producer/stage.cpp
core/producer/stage.h
protocol/amcp/AMCPCommandsImpl.cpp
protocol/amcp/AMCPCommandsImpl.h
protocol/amcp/AMCPProtocolStrategy.cpp

index 38a1e146e885cf077d8c18db6f756d58f4ea874b..9c6cc3696818af93607fde28ad6cb463bf65ba28 100644 (file)
@@ -204,6 +204,7 @@ void layer::swap(layer& other)
 void layer::load(const safe_ptr<frame_producer>& frame_producer, bool preview, int auto_play_delta){return impl_->load(frame_producer, preview, auto_play_delta);}     \r
 void layer::play(){impl_->play();}\r
 void layer::pause(){impl_->pause();}\r
+void layer::resume(){impl_->resume();}\r
 void layer::stop(){impl_->stop();}\r
 bool layer::is_paused() const{return impl_->is_paused_;}\r
 int64_t layer::frame_number() const{return impl_->frame_number_;}\r
index 2809e7ed3ea4c78b94d2b652f8f49ee6cfae36a4..82e1774be608722f6906f3f19a1cbe0ae11e9a44 100644 (file)
@@ -50,6 +50,7 @@ public:
        void load(const safe_ptr<frame_producer>& producer, bool preview, int auto_play_delta); // nothrow\r
        void play(); // nothrow\r
        void pause(); // nothrow\r
+       void resume(); // nothrow\r
        void stop(); // nothrow\r
        boost::unique_future<std::wstring> call(bool foreground, const std::wstring& param);\r
 \r
index bb8913b03024266926a8b80bc7fea0c4b0307f35..97aaf2b2e3aa197d7afd5674b85e86e66f04544a 100644 (file)
@@ -306,6 +306,14 @@ public:
                }, high_priority);\r
        }\r
 \r
+       void resume(int index)\r
+       {               \r
+               executor_.begin_invoke([=]\r
+               {\r
+                       get_layer(index).resume();\r
+               }, high_priority);\r
+       }\r
+\r
        void play(int index)\r
        {               \r
                executor_.begin_invoke([=]\r
@@ -491,6 +499,7 @@ frame_transform stage::get_current_transform(int index) { return impl_->get_curr
 void stage::spawn_token(){impl_->spawn_token();}\r
 void stage::load(int index, const safe_ptr<frame_producer>& producer, bool preview, int auto_play_delta){impl_->load(index, producer, preview, auto_play_delta);}\r
 void stage::pause(int index){impl_->pause(index);}\r
+void stage::resume(int index){impl_->resume(index);}\r
 void stage::play(int index){impl_->play(index);}\r
 void stage::stop(int index){impl_->stop(index);}\r
 void stage::clear(int index){impl_->clear(index);}\r
index 014b4f0f19752bd5f3302ea53d1e6e692a7f760e..7939f079dc688d063e4e6b11e25aa5e60f174a6d 100644 (file)
@@ -67,6 +67,7 @@ public:
                        \r
        void load(int index, const safe_ptr<frame_producer>& producer, bool preview = false, int auto_play_delta = -1);\r
        void pause(int index);\r
+       void resume(int index);\r
        void play(int index);\r
        void stop(int index);\r
        void clear(int index);\r
index 866d462fe3db58e0db6e0c8a30796437612ce4b3..2439657549158896229f0e19172bf121375f0171 100644 (file)
@@ -1169,6 +1169,22 @@ bool PauseCommand::DoExecute()
        return false;\r
 }\r
 \r
+bool ResumeCommand::DoExecute()\r
+{\r
+       try\r
+       {\r
+               GetChannel()->stage()->resume(GetLayerIndex());\r
+               SetReplyString(TEXT("202 RESUME OK\r\n"));\r
+               return true;\r
+       }\r
+       catch(...)\r
+       {\r
+               SetReplyString(TEXT("501 RESUME FAILED\r\n"));\r
+       }\r
+\r
+       return false;\r
+}\r
+\r
 bool PlayCommand::DoExecute()\r
 {\r
        try\r
index f376d8463f044caaf36146ddf0ad286c2fbd9c0d..569a1cb50c55cf818e4ba89ce92d061715f9a7a7 100644 (file)
@@ -130,6 +130,12 @@ class PauseCommand: public AMCPCommandBase<true, AddToQueue, 0>
        bool DoExecute();\r
 };\r
 \r
+class ResumeCommand: public AMCPCommandBase<true, AddToQueue, 0>\r
+{\r
+       std::wstring print() const { return L"ResumeCommand";}\r
+       bool DoExecute();\r
+};\r
+\r
 class StopCommand : public AMCPCommandBase<true, AddToQueue, 0>\r
 {\r
        std::wstring print() const { return L"StopCommand";}\r
index fd9d26e84c20cfcbe4d18b43b1d5df95138f6981..231ddee66e6bd43a9615e8392cf6a83e44f5f14e 100644 (file)
@@ -333,6 +333,7 @@ AMCPCommandPtr AMCPProtocolStrategy::CommandFactory(const std::wstring& str)
        else if(s == TEXT("ADD"))                       return std::make_shared<AddCommand>();\r
        else if(s == TEXT("REMOVE"))            return std::make_shared<RemoveCommand>();\r
        else if(s == TEXT("PAUSE"))                     return std::make_shared<PauseCommand>();\r
+       else if(s == TEXT("RESUME"))            return std::make_shared<ResumeCommand>();\r
        else if(s == TEXT("PLAY"))                      return std::make_shared<PlayCommand>();\r
        else if(s == TEXT("STOP"))                      return std::make_shared<StopCommand>();\r
        else if(s == TEXT("CLEAR"))                     return std::make_shared<ClearCommand>();\r