executor_.start();\r
}\r
\r
- ~implementation()\r
- {\r
- executor_.clear();\r
- CASPAR_LOG(info) << "Removing consumers from consumer-device.";\r
- executor_.invoke([this]{consumers_.clear();});\r
- CASPAR_LOG(info) << "Stopping consumer-device.";\r
- executor_.stop();\r
- CASPAR_LOG(info) << "Releasing consumer-device.";\r
- }\r
-\r
void add(int index, safe_ptr<frame_consumer>&& consumer)\r
{ \r
consumer->initialize(format_desc_);\r
auto it = consumers_.find(index);\r
if(it != consumers_.end())\r
{\r
- CASPAR_LOG(info) << it->second->print() << L" Removed.";\r
+ CASPAR_LOG(info) << print() << L" " << it->second->print() << L" Removed.";\r
consumers_.erase(it);\r
}\r
});\r
{\r
CASPAR_LOG_CURRENT_EXCEPTION();\r
consumers_.erase(it++);\r
- CASPAR_LOG(warning) << "Removed consumer from frame_consumer_device.";\r
+ CASPAR_LOG(error) << print() << L" " << it->second->print() << L" Removed.";\r
}\r
}\r
});\r
<ClInclude Include="producer\frame\basic_frame.h">\r
<Filter>producer\frame</Filter>\r
</ClInclude>\r
- <ClInclude Include="producer\frame\frame_factory.h">\r
- <Filter>producer\frame</Filter>\r
- </ClInclude>\r
- <ClInclude Include="producer\frame\frame_visitor.h">\r
- <Filter>producer\frame</Filter>\r
- </ClInclude>\r
<ClInclude Include="producer\frame\image_transform.h">\r
<Filter>producer\frame</Filter>\r
</ClInclude>\r
<Filter>consumer\frame</Filter>\r
</ClInclude>\r
<ClInclude Include="video_format.h" />\r
+ <ClInclude Include="producer\frame\frame_visitor.h">\r
+ <Filter>producer\frame</Filter>\r
+ </ClInclude>\r
+ <ClInclude Include="producer\frame\frame_factory.h">\r
+ <Filter>producer\frame</Filter>\r
+ </ClInclude>\r
</ItemGroup>\r
<ItemGroup>\r
<ClCompile Include="producer\transition\transition_producer.cpp">\r
\r
std::wstring print() const\r
{\r
- return L"transition[" + transition::print(info_.type) + L":" + boost::lexical_cast<std::wstring>(info_.duration) + L"]";\r
+ return L"transition";\r
}\r
};\r
\r
slide,\r
wipe\r
};\r
-\r
- static std::wstring print(type t)\r
- {\r
- switch(t)\r
- {\r
- case transition::cut: return L"cut";\r
- case transition::mix: return L"mix";\r
- case transition::push: return L"push";\r
- case transition::slide: return L"slide";\r
- case transition::wipe: return L"wipe";\r
- default: return L"";\r
- }\r
- }\r
};\r
\r
struct transition_direction\r
, tail_(core::basic_frame::empty()) \r
, frame_factory_(frame_factory)\r
, format_desc_(frame_factory->get_video_format_desc())\r
- , executor_(L"flash_producer")\r
+ , executor_(L"flash_producer", true)\r
{ \r
if(!boost::filesystem::exists(filename))\r
BOOST_THROW_EXCEPTION(file_not_found() << boost::errinfo_file_name(narrow(filename))); \r
});\r
\r
fps_ = 0;\r
- executor_.start();\r
}\r
\r
~flash_producer()\r