Tempo ramps - fix save/restore of region position_lock_style.
authornick_m <mainsbridge@gmail.com>
Fri, 5 Feb 2016 19:29:06 +0000 (06:29 +1100)
committernick_m <mainsbridge@gmail.com>
Fri, 27 May 2016 13:38:10 +0000 (23:38 +1000)
libs/ardour/region.cc

index 8db3aa097a8e821134ba70a1344960c440847b04..ca178a9f7bad8297f48f809dc54c99e360fd4e77 100644 (file)
@@ -1197,9 +1197,8 @@ Region::state ()
        /* note: flags are stored by derived classes */
 
        if (_position_lock_style != AudioTime) {
-               stringstream str;
-               str << _beat;
-               node->add_property ("beat", str.str());
+               snprintf (buf, sizeof(buf), "%lf", _beat);
+               node->add_property ("beat", buf);
        }
 
        for (uint32_t n=0; n < _sources.size(); ++n) {
@@ -1270,26 +1269,23 @@ Region::_set_state (const XMLNode& node, int /*version*/, PropertyChange& what_c
 
        if (_position_lock_style == MusicTime) {
                if ((prop = node.property ("bbt-position")) == 0) {
-                       /* missing BBT info, revert to audio time locking */
-                       _position_lock_style = AudioTime;
+                       if ((prop = node.property ("beat")) == 0) {
+                               /* missing BBT info, revert to audio time locking */
+                               _position_lock_style = AudioTime;
+                       } else {
+                               if (sscanf (prop->value().c_str(), "%lf", &_beat) != 1) {
+                                       _position_lock_style = AudioTime;
+                               }
+                       }
+
                } else {
                        if (sscanf (prop->value().c_str(), "%d|%d|%d",
                                    &bbt_time.bars,
                                    &bbt_time.beats,
                                    &bbt_time.ticks) != 3) {
                                _position_lock_style = AudioTime;
-                       }
-                       _beat = _session.tempo_map().bbt_to_beats (bbt_time);
-               }
-       }
-
-       if (_position_lock_style == MusicTime) {
-               if ((prop = node.property ("beat")) == 0) {
-                       /* missing BBT info, revert to audio time locking */
-                       _position_lock_style = AudioTime;
-               } else {
-                       if (sscanf (prop->value().c_str(), "%lf", &_beat) != 1) {
-                               _position_lock_style = AudioTime;
+                       } else {
+                               _beat = _session.tempo_map().bbt_to_beats (bbt_time);
                        }
                }
        }