From 1e8f06f8dbd1f5c4f447c1bc60a60e600ad1b942 Mon Sep 17 00:00:00 2001 From: hellgore Date: Mon, 5 Nov 2012 14:51:35 +0000 Subject: [PATCH] 1061033: Clear blend modes when doing MIXER CLEAR command git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/trunk@3488 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d --- core/mixer/mixer.cpp | 18 ++++++++++++++++++ core/mixer/mixer.h | 3 ++- protocol/amcp/AMCPCommandsImpl.cpp | 8 +++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/core/mixer/mixer.cpp b/core/mixer/mixer.cpp index 2dcabd6b8..471647e5c 100644 --- a/core/mixer/mixer.cpp +++ b/core/mixer/mixer.cpp @@ -133,6 +133,22 @@ public: blend_modes_[index] = value; }, high_priority); } + + void clear_blend_mode(int index) + { + executor_.begin_invoke([=] + { + blend_modes_.erase(index); + }, high_priority); + } + + void clear_blend_modes() + { + executor_.begin_invoke([=] + { + blend_modes_.clear(); + }, high_priority); + } void set_video_format_desc(const video_format_desc& format_desc) { @@ -163,6 +179,8 @@ void mixer::send(const std::pair>, std core::video_format_desc mixer::get_video_format_desc() const { return impl_->get_video_format_desc(); } safe_ptr mixer::create_frame(const void* tag, const core::pixel_format_desc& desc){ return impl_->create_frame(tag, desc); } void mixer::set_blend_mode(int index, blend_mode::type value){impl_->set_blend_mode(index, value);} +void mixer::clear_blend_mode(int index) { impl_->clear_blend_mode(index); } +void mixer::clear_blend_modes() { impl_->clear_blend_modes(); } void mixer::set_video_format_desc(const video_format_desc& format_desc){impl_->set_video_format_desc(format_desc);} boost::unique_future mixer::info() const{return impl_->info();} }} \ No newline at end of file diff --git a/core/mixer/mixer.h b/core/mixer/mixer.h index c01482527..560b2ded4 100644 --- a/core/mixer/mixer.h +++ b/core/mixer/mixer.h @@ -67,7 +67,8 @@ public: void set_video_format_desc(const video_format_desc& format_desc); void set_blend_mode(int index, blend_mode::type value); - + void clear_blend_mode(int index); + void clear_blend_modes(); boost::unique_future info() const; private: diff --git a/protocol/amcp/AMCPCommandsImpl.cpp b/protocol/amcp/AMCPCommandsImpl.cpp index 3e98ec89d..3b44a061d 100644 --- a/protocol/amcp/AMCPCommandsImpl.cpp +++ b/protocol/amcp/AMCPCommandsImpl.cpp @@ -574,10 +574,16 @@ bool MixerCommand::DoExecute() else if(_parameters[0] == L"CLEAR") { int layer = GetLayerIndex(std::numeric_limits::max()); - if(layer == std::numeric_limits::max()) + if (layer == std::numeric_limits::max()) + { GetChannel()->stage()->clear_transforms(); + GetChannel()->mixer()->clear_blend_modes(); + } else + { GetChannel()->stage()->clear_transforms(layer); + GetChannel()->mixer()->clear_blend_mode(layer); + } } else if(_parameters[0] == L"COMMIT") { -- 2.39.2