#include <cmath>
#include <unistd.h>
-#include <ardour/timestamps.h>
+#include "ardour/timestamps.h"
-#include <pbd/error.h>
+#include "pbd/error.h"
#include <glibmm/thread.h>
-#include <ardour/ardour.h>
-#include <ardour/session.h>
-#include <ardour/audio_diskstream.h>
+#include "ardour/ardour.h"
+#include "ardour/session.h"
+#include "ardour/audio_diskstream.h"
#include "i18n.h"
+using namespace std;
using namespace ARDOUR;
using namespace PBD;
"SetDiskstreamSpeed",
"Locate",
"LocateRoll",
+ "LocateRollLocate",
"SetLoop",
"PunchIn",
"PunchOut",
set_next_event ();
}
+/** @return true when @a ev is deleted. */
bool
Session::_replace_event (Event* ev)
{
- // returns true when we deleted the passed in event
bool ret = false;
Events::iterator i;
return ret;
}
+/** @return true when @a ev is deleted. */
bool
Session::_remove_event (Session::Event* ev)
{
- // returns true when we deleted the passed in event
bool ret = false;
Events::iterator i;
}
}
+ //printf("Processing event: %s\n", event_names[ev->type]);
+
switch (ev->type) {
case Event::SetLoop:
set_play_loop (ev->yes_or_no);
// cerr << "soft locate to " << ev->target_frame << endl;
start_locate (ev->target_frame, false, true, false);
}
+ _send_smpte_update = true;
break;
case Event::LocateRoll:
// cerr << "soft locate to+roll " << ev->target_frame << endl;
start_locate (ev->target_frame, true, true, false);
}
+ _send_smpte_update = true;
+ break;
+
+ case Event::LocateRollLocate:
+ // locate is handled by ::request_roll_at_and_return()
+ _requested_return_frame = ev->target_frame;
+ request_locate (ev->target2_frame, true);
break;
+
case Event::SetTransportSpeed:
set_transport_speed (ev->speed, ev->yes_or_no);
break;
case Event::PunchIn:
// cerr << "PunchIN at " << transport_frame() << endl;
- if (Config->get_punch_in() && record_status() == Enabled) {
+ if (config.get_punch_in() && record_status() == Enabled) {
enable_record ();
}
remove = false;
case Event::PunchOut:
// cerr << "PunchOUT at " << transport_frame() << endl;
- if (Config->get_punch_out()) {
+ if (config.get_punch_out()) {
step_back_from_record ();
}
remove = false;
break;
case Event::Overwrite:
- overwrite_some_buffers (static_cast<AudioDiskstream*>(ev->ptr));
+ overwrite_some_buffers (static_cast<Diskstream*>(ev->ptr));
break;
case Event::SetDiskstreamSpeed:
- set_diskstream_speed (static_cast<AudioDiskstream*> (ev->ptr), ev->speed);
+ set_diskstream_speed (static_cast<Diskstream*> (ev->ptr), ev->speed);
break;
case Event::SetSlaveSource:
case Event::Audition:
set_audition (ev->region);
+ // drop reference to region
+ ev->region.reset ();
break;
case Event::InputConfigurationChange:
post_transport_work = PostTransportWork (post_transport_work | PostTransportInputChange);
- {
- RCUWriter<DiskstreamList> writer (diskstreams);
- boost::shared_ptr<DiskstreamList> ds = writer.get_copy();
- ds->remove (ev->diskstream);
- /* writer goes out of scope, copies ds back to main */
- }
- {
- RCUWriter<DiskstreamList> writer (diskstreams_input_pending);
- boost::shared_ptr<DiskstreamList> ds = writer.get_copy();
- ds->push_back (ev->diskstream);
- /* writer goes out of scope, copies ds back to main */
- }
schedule_butler_transport_work ();
break;