prevent live loops (format negative BBT)
authorRobin Gareus <robin@gareus.org>
Tue, 28 Apr 2015 00:53:20 +0000 (02:53 +0200)
committerRobin Gareus <robin@gareus.org>
Tue, 28 Apr 2015 01:07:11 +0000 (03:07 +0200)
can happen with empty tape-tracks

gtk2_ardour/editor_regions.cc

index 1d6ac8c16cb62e74885e8fa0723cb2ae8eee09e8..d029e3fc74687a9a906b3f39be777b26afe87ea4 100644 (file)
@@ -690,6 +690,12 @@ EditorRegions::format_position (framepos_t pos, char* buf, size_t bufsize, bool
        Timecode::BBT_Time bbt;
        Timecode::Time timecode;
 
+       if (pos < 0) {
+               error << string_compose (_("EditorRegions::format_position: negative timecode position: %1"), pos) << endmsg;
+               snprintf (buf, bufsize, "invalid");
+               return;
+       }
+
        switch (ARDOUR_UI::instance()->secondary_clock->mode ()) {
        case AudioClock::BBT:
                _session->tempo_map().bbt_time (pos, bbt);
@@ -816,10 +822,12 @@ EditorRegions::populate_row_end (boost::shared_ptr<Region> region, TreeModel::Ro
                row[_columns.end] = "";
        } else if (used > 1) {
                row[_columns.end] = _("Mult.");
-       } else {
+       } else if (region->last_frame() >= region->first_frame()) {
                char buf[16];
                format_position (region->last_frame(), buf, sizeof (buf));
                row[_columns.end] = buf;
+       } else {
+               row[_columns.end] = "empty";
        }
 }