- o << ::osc::BeginMessage(e.path().c_str());
-
- param_visitor<decltype(o)> param_visitor(o);
- for (const auto& data : e.data())
- boost::apply_visitor(param_visitor, data);
-
- o << ::osc::EndMessage;
-
+
+ try
+ {
+ o << ::osc::BeginMessage(message.path().c_str());
+
+ param_visitor<decltype(o)> param_visitor(o);
+ for (const auto& data : message.data())
+ boost::apply_visitor(param_visitor, data);
+
+ o << ::osc::EndMessage;
+ }
+ catch (const ::osc::OutOfBufferMemoryException& e)
+ {
+ if (retry_allocation_attempt > message.data().size())
+ throw;
+
+ max_size = e.required;
+ CASPAR_LOG(trace) << L"[osc] Too small buffer for osc message. Increasing to " << max_size;
+ return write_osc_event(destination, message, retry_allocation_attempt + 1);
+ }
+