if(usage_ == GL_STREAM_DRAW) \r
GL(glBufferData(target_, size_, NULL, usage_)); // Notify OpenGL that we don't care about previous data.\r
\r
+ boost::timer timer;\r
+\r
data_ = (uint8_t*)GL2(glMapBuffer(target_, usage_ == GL_STREAM_DRAW ? GL_WRITE_ONLY : GL_READ_ONLY)); \r
+\r
+ if(timer.elapsed() > 0.01)\r
+ CASPAR_LOG(warning) << L"[buffer] Performance warning. Buffer mapping blocked more than 10ms.";\r
+\r
GL(glBindBuffer(target_, 0));\r
if(!data_)\r
BOOST_THROW_EXCEPTION(invalid_operation() << msg_info("Failed to map target OpenGL Pixel Buffer Object."));\r
\r
using namespace boost;\r
\r
+template<typename T>\r
+inline void replace_nonprintable(std::basic_string<T, std::char_traits<T>, std::allocator<T>>& str, T with)\r
+{\r
+ std::locale loc;\r
+ std::replace_if(str.begin(), str.end(), [&](T c)->bool { return !std::isprint(c, loc) && c != '\r' && c != '\n'; }, with);\r
+}\r
+\r
+template<typename T>\r
+inline std::basic_string<T> replace_nonprintable_copy(std::basic_string<T, std::char_traits<T>, std::allocator<T>> str, T with)\r
+{\r
+ replace_nonprintable(str, with);\r
+ return str;\r
+}\r
+\r
void my_formatter(std::wostream& strm, boost::log::basic_record<wchar_t> const& rec)\r
{\r
namespace lambda = boost::lambda;\r
boost::log::attributes::current_thread_id::held_type thread_id;\r
if(boost::log::extract<boost::log::attributes::current_thread_id::held_type>(L"ThreadID", rec.attribute_values(), lambda::var(thread_id) = lambda::_1))\r
strm << L"[" << thread_id << L"] ";\r
-\r
-\r
+ \r
severity_level severity;\r
if(boost::log::extract<severity_level>(boost::log::sources::aux::severity_attribute_name<wchar_t>::get(), rec.attribute_values(), lambda::var(severity) = lambda::_1))\r
{\r
\r
void set_log_level(const std::wstring& lvl);\r
\r
-template<typename T>\r
-inline void replace_nonprintable(std::basic_string<T, std::char_traits<T>, std::allocator<T>>& str, T with)\r
-{\r
- std::locale loc;\r
- std::replace_if(str.begin(), str.end(), [&](T c)->bool { return !std::isprint(c, loc) && c != '\r' && c != '\n'; }, with);\r
-}\r
-\r
-template<typename T>\r
-inline std::basic_string<T> replace_nonprintable_copy(std::basic_string<T, std::char_traits<T>, std::allocator<T>> str, T with)\r
-{\r
- replace_nonprintable(str, with);\r
- return str;\r
-}\r
-\r
}}\r
\r
#if defined(_MSC_VER)\r
}\r
\r
bool is_valid_file(const std::wstring filename)\r
-{ \r
- {\r
- static auto exts = boost::assign::list_of(L".m2t")(L".mov")(L".mp4")(L".dv")(L".flv")(L".mpg")(L".wav")(L".mp3")(L".dnxhd")(L".h264")(L".prores");\r
+{ \r
+ static std::vector<std::wstring> exts = boost::assign::list_of(L".m2t")(L".mov")(L".mp4")(L".dv")(L".flv")(L".mpg")(L".wav")(L".mp3")(L".dnxhd")(L".h264")(L".prores");\r
\r
- auto ext = boost::to_lower_copy(boost::filesystem::path(filename).extension().wstring());\r
+ auto ext = boost::to_lower_copy(boost::filesystem::path(filename).extension().wstring());\r
\r
- if(std::find(exts.begin(), exts.end(), ext) != exts.end())\r
- return true;\r
- }\r
+ if(std::find(exts.begin(), exts.end(), ext) != exts.end())\r
+ return true; \r
\r
auto u8filename = u8(filename);\r
\r
\r
void CIIProtocolStrategy::ProcessMessage(const std::wstring& message, IO::ClientInfoPtr pClientInfo)\r
{ \r
- CASPAR_LOG(info) << L"Received message from " << pClientInfo->print() << ": " << log::replace_nonprintable_copy(message, L'?') + L"\\r\\n";\r
+ CASPAR_LOG(info) << L"Received message from " << pClientInfo->print() << ": " << message + L"\\r\\n";\r
\r
std::vector<std::wstring> tokens;\r
int tokenCount = TokenizeMessage(message, &tokens);\r