#include "ardour/configuration.h"
#include "ardour/audiofilesource.h"
#include "ardour/send.h"
+#include "ardour/pannable.h"
+#include "ardour/panner_shell.h"
#include "ardour/playlist.h"
#include "ardour/cycle_timer.h"
#include "ardour/region.h"
* default from configuration_vars.h). 0 is not a good value for
* allocating buffer sizes..
*/
-ARDOUR::nframes_t Diskstream::disk_io_chunk_frames = 1024 * 256;
+ARDOUR::framecnt_t Diskstream::disk_io_chunk_frames = 1024 * 256;
PBD::Signal0<void> Diskstream::DiskOverrun;
PBD::Signal0<void> Diskstream::DiskUnderrun;
, in_set_state (false)
, _persistent_alignment_style (ExistingMaterial)
, first_input_change (true)
- , scrub_start (0)
- , scrub_buffer_size (0)
- , scrub_offset (0)
, _flags (flag)
{
, in_set_state (false)
, _persistent_alignment_style (ExistingMaterial)
, first_input_change (true)
- , scrub_start (0)
- , scrub_buffer_size (0)
- , scrub_offset (0)
, _flags (Recordable)
{
}
{
Glib::Mutex::Lock lm (state_lock);
- if (!(input_change_pending.type & change.type)) {
- input_change_pending.type = IOChange::Type (input_change_pending.type | change.type);
- _session.request_input_change_handling ();
- }
+ if (change.type & IOChange::ConfigurationChanged) {
+ if (!(input_change_pending.type & change.type)) {
+ input_change_pending.type = IOChange::Type (input_change_pending.type | change.type);
+ _session.request_input_change_handling ();
+ }
+ }
}
void
if (new_speed != _actual_speed) {
- nframes_t required_wrap_size = (nframes_t) floor (_session.get_block_size() *
+ framecnt_t required_wrap_size = (framecnt_t) floor (_session.get_block_size() *
fabs (new_speed)) + 1;
if (required_wrap_size > wrap_buffer_size) {
}
void
-Diskstream::set_roll_delay (ARDOUR::nframes_t nframes)
+Diskstream::set_roll_delay (ARDOUR::framecnt_t nframes)
{
_roll_delay = nframes;
}
}
/* move panner automation */
- boost::shared_ptr<Panner> p = _track->main_outs()->panner ();
- if (p) {
- for (uint32_t i = 0; i < p->npanners (); ++i) {
- boost::shared_ptr<AutomationList> pan_alist = p->streampanner(i).pan_control()->alist();
- XMLNode & before = pan_alist->get_state ();
- bool const things_moved = pan_alist->move_ranges (movements);
- if (things_moved) {
- _session.add_command (new MementoCommand<AutomationList> (
- *pan_alist.get(), &before, &pan_alist->get_state ()));
- }
- }
- }
+ boost::shared_ptr<Pannable> pannable = _track->pannable();
+ Evoral::ControlSet::Controls& c (pannable->controls());
+
+ for (Evoral::ControlSet::Controls::iterator ci = c.begin(); ci != c.end(); ++ci) {
+ boost::shared_ptr<AutomationControl> ac = boost::dynamic_pointer_cast<AutomationControl>(ci->second);
+ if (!ac) {
+ continue;
+ }
+ boost::shared_ptr<AutomationList> alist = ac->alist();
+
+ XMLNode & before = alist->get_state ();
+ bool const things_moved = alist->move_ranges (movements);
+ if (things_moved) {
+ _session.add_command (new MementoCommand<AutomationList> (
+ *alist.get(), &before, &alist->get_state ()));
+ }
+ }
/* move processor automation */
_track->foreach_processor (boost::bind (&Diskstream::move_processor_automation, this, _1, movements_frames));
void
Diskstream::calculate_record_range(OverlapType ot, framepos_t transport_frame, framecnt_t nframes,
- nframes_t& rec_nframes, nframes_t& rec_offset)
+ framecnt_t & rec_nframes, framecnt_t & rec_offset)
{
switch (ot) {
case OverlapNone: