triggerbox: modify source-building API to include timeline position

This commit is contained in:
Paul Davis 2025-10-27 10:52:07 -06:00
parent 9194d93213
commit 6badce2d3a
2 changed files with 15 additions and 13 deletions

View file

@ -748,7 +748,7 @@ class LIBARDOUR_API TriggerBoxThread
void set_region (TriggerBox&, uint32_t slot, std::shared_ptr<Region>);
void request_delete_trigger (Trigger* t);
void request_build_source (Trigger* t, Temporal::timecnt_t const & duration);
void request_build_source (Trigger* t, Temporal::timecnt_t const & duration, Temporal::timepos_t const &);
void summon();
void stop();
@ -777,6 +777,7 @@ class LIBARDOUR_API TriggerBoxThread
/* for DeleteTrigger and BuildSourceAndRegion */
Trigger* trigger;
Temporal::timecnt_t duration;
Temporal::timepos_t position;
void* operator new (size_t);
void operator delete (void* ptr, size_t);
@ -791,9 +792,9 @@ class LIBARDOUR_API TriggerBoxThread
CrossThreadChannel _xthread;
void queue_request (Request*);
void delete_trigger (Trigger*);
void build_source (Trigger*, Temporal::timecnt_t const & duration);
void build_midi_source (MIDITrigger*, Temporal::timecnt_t const &);
void build_audio_source (AudioTrigger*, Temporal::timecnt_t const &);
void build_source (Trigger*, Temporal::timecnt_t const & duration, Temporal::timepos_t const &);
void build_midi_source (MIDITrigger*, Temporal::timecnt_t const &, Temporal::timepos_t const &);
void build_audio_source (AudioTrigger*, Temporal::timecnt_t const &, Temporal::timepos_t const &);
};
struct CueRecord {

View file

@ -1910,7 +1910,7 @@ AudioTrigger::captured (SlotArmInfo& ai, BufferSet&)
_box.queue_explict (index());
TriggerBox::worker->request_build_source (this, timecnt_t (data.length));
TriggerBox::worker->request_build_source (this, timecnt_t (data.length), timepos_t (ai.start_beats));
disarm ();
}
@ -2471,7 +2471,7 @@ MIDITrigger::captured (SlotArmInfo& ai, BufferSet& bufs)
/* Meanwhile, build a new source and region from the data now in rt_midibuffer */
// std::cerr << "capture done, ask for a source of length " << dur.beats().str() << std::endl;
TriggerBox::worker->request_build_source (this, timecnt_t (dur.beats()));
TriggerBox::worker->request_build_source (this, timecnt_t (dur.beats()), timepos_t (ai.start_beats));
disarm ();
}
@ -5656,7 +5656,7 @@ TriggerBoxThread::thread_work ()
delete_trigger (req->trigger);
break;
case BuildSourceAndRegion:
build_source (req->trigger, req->duration);
build_source (req->trigger, req->duration, req->position);
break;
default:
break;
@ -5726,11 +5726,12 @@ TriggerBoxThread::request_delete_trigger (Trigger* t)
}
void
TriggerBoxThread::request_build_source (Trigger* t, Temporal::timecnt_t const & len)
TriggerBoxThread::request_build_source (Trigger* t, Temporal::timecnt_t const & len, Temporal::timepos_t const & timeline_pos)
{
TriggerBoxThread::Request* req = new TriggerBoxThread::Request (BuildSourceAndRegion);
req->trigger = t;
req->duration = len;
req->position = timeline_pos;
queue_request (req);
}
@ -5741,20 +5742,20 @@ TriggerBoxThread::delete_trigger (Trigger* t)
}
void
TriggerBoxThread::build_source (Trigger* t, Temporal::timecnt_t const & duration)
TriggerBoxThread::build_source (Trigger* t, Temporal::timecnt_t const & duration, Temporal::timepos_t const & pos)
{
MIDITrigger* mt = dynamic_cast<MIDITrigger*> (t);
AudioTrigger* at;
if (mt) {
build_midi_source (mt, duration);
build_midi_source (mt, duration, pos);
} else if ((at = dynamic_cast<AudioTrigger*> (t))) {
build_audio_source (at, duration);
build_audio_source (at, duration, pos);
}
}
void
TriggerBoxThread::build_audio_source (AudioTrigger* t, Temporal::timecnt_t const & duration)
TriggerBoxThread::build_audio_source (AudioTrigger* t, Temporal::timecnt_t const & duration, Temporal::timepos_t const & pos)
{
Track* trk = static_cast<Track*> (t->box().owner());
SourceList sources;
@ -5806,7 +5807,7 @@ TriggerBoxThread::build_audio_source (AudioTrigger* t, Temporal::timecnt_t const
}
void
TriggerBoxThread::build_midi_source (MIDITrigger* t, Temporal::timecnt_t const & duration)
TriggerBoxThread::build_midi_source (MIDITrigger* t, Temporal::timecnt_t const & duration, Temporal::timepos_t const & pos)
{
Track* trk = static_cast<Track*> (t->box().owner());
std::shared_ptr<MidiSource> ms = t->box().session().create_midi_source_for_session (trk->name());