]> git.sesse.net Git - casparcg/commitdiff
osc: Reduce osc buffer size where possible.
authorRobert Nagy <ronag@live.com>
Sat, 6 Jul 2013 22:58:58 +0000 (00:58 +0200)
committerRobert Nagy <ronag@live.com>
Sat, 6 Jul 2013 22:58:58 +0000 (00:58 +0200)
protocol/osc/client.cpp

index 542c7f889316666d6959714e590adb7a09b2599a..4008c09e5c042ee3a6eafc3254d7833e5dbc8777 100644 (file)
@@ -63,22 +63,23 @@ struct param_visitor : public boost::static_visitor<void>
 
 struct size_visitor : public boost::static_visitor<std::size_t>
 {              
-       std::size_t operator()(const std::string& value)                        { return value.size() * sizeof(value.front()) * 2; }
-       std::size_t operator()(const std::wstring& value)                       { return value.size() * sizeof(value.front()) * 2; }
-       std::size_t operator()(const std::vector<int8_t>& value)        { return value.size() * sizeof(value.front()) * 2; }
-
-       template<typename T>
-       std::size_t operator()(const T&)
-       {
-               return 64;
-       }
+       std::size_t operator()(const bool value)                                        { return sizeof(bool); }
+       std::size_t operator()(const int32_t value)                                     { return sizeof(int64_t); }
+       std::size_t operator()(const uint32_t value)                            { return sizeof(int64_t); }
+       std::size_t operator()(const int64_t value)                                     { return sizeof(int64_t); }
+       std::size_t operator()(const uint64_t value)                            { return sizeof(int64_t); }
+       std::size_t operator()(const float value)                                       { return sizeof(float); }
+       std::size_t operator()(const double value)                                      { return sizeof(float); }
+       std::size_t operator()(const std::string& value)                        { return value.size(); }
+       std::size_t operator()(const std::wstring& value)                       { return value.size(); }
+       std::size_t operator()(const std::vector<int8_t>& value)        { return value.size(); }
 };
 
 void write_osc_event(byte_vector& destination, const core::monitor::message& e)
 {
        try
        {
-               std::size_t size = 0;
+               std::size_t size = 256; // This should be enough to cover address, padding and meta-data.
                
                size_visitor size_visitor;
                BOOST_FOREACH(auto& data, e.data())