Fix loop range changes while playing - #8001

Since ead883302f, it is no longer possible to use a null
pointer SessionEvent::track as flag to indicate overriding all
buffers.
This commit is contained in:
Robin Gareus 2020-04-12 13:35:21 +02:00
parent 68ecf6c0b3
commit fc34626e50
No known key found for this signature in database
GPG key ID: A090BCE02CF57F04
4 changed files with 10 additions and 3 deletions

View file

@ -53,6 +53,7 @@ public:
RangeStop,
RangeLocate,
Overwrite,
OverwriteAll,
Audition,
SetPlayAudioRange,
CancelPlayAudioRange,

View file

@ -1549,9 +1549,10 @@ Session::auto_loop_changed (Location* location)
} else {
// schedule a buffer overwrite to refill buffers with the new loop.
request_overwrite_buffer (boost::shared_ptr<Track>(), LoopChanged);
/* schedule a buffer overwrite to refill buffers with the new loop. */
SessionEvent *ev = new SessionEvent (SessionEvent::OverwriteAll, SessionEvent::Add, SessionEvent::Immediate, 0, 0, 0.0);
ev->overwrite = LoopChanged;
queue_event (ev);
}
}

View file

@ -79,6 +79,7 @@ Session::schedule_capture_buffering_adjustment ()
void
Session::request_overwrite_buffer (boost::shared_ptr<Track> t, OverwriteReason why)
{
assert (t);
SessionEvent *ev = new SessionEvent (SessionEvent::Overwrite, SessionEvent::Add, SessionEvent::Immediate, 0, 0, 0.0);
ev->set_track (t);
ev->overwrite = why;

View file

@ -954,6 +954,10 @@ Session::process_event (SessionEvent* ev)
}
break;
case SessionEvent::OverwriteAll:
overwrite_some_buffers (boost::shared_ptr<Track>(), ev->overwrite);
break;
case SessionEvent::Audition:
set_audition (ev->region);
// drop reference to region