diff options
33 files changed, 111 insertions, 60 deletions
diff --git a/SConstruct b/SConstruct index d4aab6f04f..a12f930f2b 100644 --- a/SConstruct +++ b/SConstruct @@ -20,7 +20,7 @@ import SCons.Node.FS SConsignFile() EnsureSConsVersion(0, 96) -ardour_version = '2.4.1' +ardour_version = '2.5' subst_dict = { } diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript index 380d48cad2..411443d3d9 100644 --- a/gtk2_ardour/SConscript +++ b/gtk2_ardour/SConscript @@ -6,8 +6,8 @@ import glob Import('env install_prefix final_prefix config_prefix libraries i18n ardour_version') -gtkardour = env.Copy() -gtkmmtests = env.Copy() +gtkardour = env.Clone() +gtkmmtests = env.Clone() # # this defines the version number of the GTK interface to ardour diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index 50fe0e21db..44d0b1a423 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -761,7 +761,7 @@ ARDOUR_UI::use_shuttle_fract (bool force) more than once per process cycle. */ - if (!force && (last_shuttle_request - now) < engine->usecs_per_cycle()) { + if (!force && (last_shuttle_request - now) < (microseconds_t) engine->usecs_per_cycle()) { return; } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 6a7ec62df2..36029a4213 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1651,12 +1651,6 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item track_canvas->get_pointer (x, y); } - if (event->motion.state & GDK_BUTTON1_MASK) { - queue_draw_resize_line (event->motion.y); - } else { - need_resize_line = false; - } - if (current_stepping_trackview) { /* don't keep the persistent stepped trackview if the mouse moves */ current_stepping_trackview = 0; diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index 69a057bcf9..3e639773c8 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -382,7 +382,8 @@ TimeAxisView::set_height(uint32_t h) /* resize the selection rect */ show_selection (editor.get_selection().time); } - + + reshow_feature_lines (); } bool @@ -1162,8 +1163,6 @@ TimeAxisView::reshow_feature_lines () while (feature_lines.size()< analysis_features.size()) { ArdourCanvas::SimpleLine* l = new ArdourCanvas::SimpleLine (*canvas_display); l->property_color_rgba() = (guint) ARDOUR_UI::config()->canvasvar_ZeroLine.get(); - l->property_y1() = 0; - l->property_y2() = current_height(); feature_lines.push_back (l); } @@ -1179,6 +1178,8 @@ TimeAxisView::reshow_feature_lines () for (i = analysis_features.begin(), l = feature_lines.begin(); i != analysis_features.end() && l != feature_lines.end(); ++i, ++l) { (*l)->property_x1() = editor.frame_to_pixel (*i); (*l)->property_x2() = editor.frame_to_pixel (*i); + (*l)->property_y1() = 0; + (*l)->property_y2() = current_height(); (*l)->show (); } } @@ -1214,16 +1215,8 @@ TimeAxisView::resizer_motion (GdkEventMotion* ev) } int32_t delta = (int32_t) floor (resize_drag_start - ev->y_root); - int xroot, yroot; - Glib::RefPtr<Gdk::Window> win (resizer.get_window()); - - if (win) { - win->get_origin (xroot, yroot); - editor.queue_draw_resize_line (yroot + ev->y); - } resize_idle_target = std::max (resize_idle_target - delta, (int) hSmall); - editor.add_to_idle_resize (this, resize_idle_target); resize_drag_start = ev->y_root; diff --git a/libs/appleutility/SConscript b/libs/appleutility/SConscript index 68b731c78e..5b6f3b6d84 100644 --- a/libs/appleutility/SConscript +++ b/libs/appleutility/SConscript @@ -7,7 +7,7 @@ import glob appleutility_files = glob.glob('*.cpp') Import('env install_prefix') -appleutility = env.Copy() +appleutility = env.Clone() appleutility.Append(LINKFLAGS='-framework AudioToolbox') appleutility.Append(LINKFLAGS='-framework AudioUnit') diff --git a/libs/ardour/ardour/configuration_vars.h b/libs/ardour/ardour/configuration_vars.h index dd7fc9d830..1d610b123a 100644 --- a/libs/ardour/ardour/configuration_vars.h +++ b/libs/ardour/ardour/configuration_vars.h @@ -121,6 +121,7 @@ CONFIG_VARIABLE (bool, quieten_at_speed, "quieten-at-speed", true) CONFIG_VARIABLE (bool, primary_clock_delta_edit_cursor, "primary-clock-delta-edit-cursor", false) CONFIG_VARIABLE (bool, secondary_clock_delta_edit_cursor, "secondary-clock-delta-edit-cursor", false) CONFIG_VARIABLE (bool, show_track_meters, "show-track-meters", true) +CONFIG_VARIABLE (bool, locate_while_waiting_for_sync, "locate-while-waiting-for-sync", false) /* timecode and sync */ diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index bbe01b2a3d..2c9ef608fe 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -1423,6 +1423,7 @@ class Session : public PBD::StatefulDestructible void set_play_loop (bool yn); void overwrite_some_buffers (Diskstream*); void flush_all_redirects (); + int micro_locate (nframes_t distance); void locate (nframes_t, bool with_roll, bool with_flush, bool with_loop=false); void start_locate (nframes_t, bool with_roll, bool with_flush, bool with_loop=false); void force_locate (nframes_t frame, bool with_roll = false); diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc index d9e5f83bd1..36a667d109 100644 --- a/libs/ardour/audiosource.cc +++ b/libs/ardour/audiosource.cc @@ -214,7 +214,7 @@ AudioSource::initialize_peakfile (bool newfile, ustring audio_path) /* we found it in the peaks dir, so check it out */ - if (statbuf.st_size == 0 || (statbuf.st_size < ((length() / _FPP) * sizeof (PeakData)))) { + if (statbuf.st_size == 0 || ((nframes_t) statbuf.st_size < ((length() / _FPP) * sizeof (PeakData)))) { // empty _peaks_built = false; } else { diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc index ac5381b591..592d87242e 100644 --- a/libs/ardour/io.cc +++ b/libs/ardour/io.cc @@ -1780,16 +1780,17 @@ IO::ports_became_legal () } Connection * -IO::find_possible_connection(const string &desired_name, const string &default_name, const string &connection_type_name) { -static const string digits = "0123456789"; +IO::find_possible_connection(const string &desired_name, const string &default_name, const string &connection_type_name) +{ + static const string digits = "0123456789"; Connection* c = _session.connection_by_name (desired_name); if (!c) { - int connection_number, mask; - string possible_name; - bool stereo = false; - size_t last_non_digit_pos; + int connection_number, mask; + string possible_name; + bool stereo = false; + string::size_type last_non_digit_pos; error << string_compose(_("Unknown connection \"%1\" listed for %2 of %3"), desired_name, connection_type_name, _name) << endmsg; @@ -1798,19 +1799,21 @@ static const string digits = "0123456789"; connection_number = 0; last_non_digit_pos = desired_name.find_last_not_of(digits); + if (last_non_digit_pos != string::npos) { stringstream s; s << desired_name.substr(last_non_digit_pos); s >> connection_number; - } // see if it's a stereo connection e.g. "in 3+4" + if (last_non_digit_pos > 1 && desired_name[last_non_digit_pos] == '+') { int left_connection_number = 0; + string::size_type left_last_non_digit_pos; - size_t left_last_non_digit_pos; left_last_non_digit_pos = desired_name.find_last_not_of(digits, last_non_digit_pos-1); + if (left_last_non_digit_pos != string::npos) { stringstream s; s << desired_name.substr(left_last_non_digit_pos, last_non_digit_pos-1); @@ -1827,26 +1830,30 @@ static const string digits = "0123456789"; if (connection_number) connection_number--; - cerr << "desired_name = " << desired_name << ", connection_number = " << connection_number << endl; // find highest set bit mask = 1; - while ((mask <= connection_number) && (mask <<= 1)) { - } + while ((mask <= connection_number) && (mask <<= 1)); // "wrap" connection number into largest possible power of 2 // that works... - while (mask && !c) { + + while (mask) { + if (connection_number & mask) { connection_number &= ~mask; stringstream s; s << default_name << " " << connection_number + 1; + if (stereo) { s << "+" << connection_number + 2; } possible_name = s.str(); - c = _session.connection_by_name (possible_name); + + if ((c = _session.connection_by_name (possible_name)) != 0) { + break; + } } mask >>= 1; } diff --git a/libs/ardour/session_export.cc b/libs/ardour/session_export.cc index 373f662eda..ecb5b13af8 100644 --- a/libs/ardour/session_export.cc +++ b/libs/ardour/session_export.cc @@ -443,6 +443,8 @@ Session::start_audio_export (AudioExportSpecification& spec) spec.freewheel_connection = _engine.Freewheel.connect (sigc::bind (mem_fun (*this, &Session::process_export), &spec)); + cerr << "Start export at pos = " << spec.pos << endl; + return _engine.freewheel (true); } @@ -510,6 +512,8 @@ Session::prepare_to_export (AudioExportSpecification& spec) } } + cerr << "Everybdy is at " << spec.start_frame << endl; + /* we just did the core part of a locate() call above, but for the sake of any GUI, put the _transport_frame in the right place too. @@ -545,6 +549,10 @@ Session::process_export (nframes_t nframes, AudioExportSpecification* spec) int ret = -1; nframes_t this_nframes; + cerr << "Export process at pos = " << spec->pos << " _exporting = " + << _exporting << " running = " << spec->running << " stop = " + << spec->stop << endl; + /* This is not required to be RT-safe because we are running while freewheeling */ if (spec->do_freewheel == false) { @@ -562,12 +570,14 @@ Session::process_export (nframes_t nframes, AudioExportSpecification* spec) if (!_exporting) { /* finished, but still freewheeling */ - process_without_events (nframes); + cerr << "\tExport ... not exporting yet, no_roll() for " << nframes <<endl; + no_roll (nframes, 0); return 0; } - + if (!spec->running || spec->stop || (this_nframes = min ((spec->end_frame - spec->pos), nframes)) == 0) { - process_without_events (nframes); + cerr << "\tExport ... not running or at end, no_roll() for " << nframes <<endl; + no_roll (nframes, 0); return stop_audio_export (*spec); } @@ -616,6 +626,8 @@ Session::process_export (nframes_t nframes, AudioExportSpecification* spec) } } + cerr << "\tprocess " << nframes << endl; + if (spec->process (nframes)) { goto out; } @@ -623,6 +635,8 @@ Session::process_export (nframes_t nframes, AudioExportSpecification* spec) spec->pos += nframes; spec->progress = 1.0 - (((float) spec->end_frame - spec->pos) / spec->total_frames); + cerr << "\t@ " << spec->pos << " prog = " << spec->progress << endl; + /* and we're good to go */ ret = 0; diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc index 7e4762ce47..c737a27658 100644 --- a/libs/ardour/session_process.cc +++ b/libs/ardour/session_process.cc @@ -846,18 +846,38 @@ Session::maybe_sync_start (nframes_t& nframes, nframes_t& offset) if (_engine.get_sync_offset (sync_offset) && sync_offset < nframes) { + /* generate silence up to the sync point, then + adjust nframes + offset to reflect whatever + is left to do. + */ + no_roll (sync_offset, 0); nframes -= sync_offset; offset += sync_offset; waiting_for_sync_offset = false; if (nframes == 0) { - return true; // done + return true; // done, nothing left to process } } else { + + /* sync offset point is not within this process() + cycle, so just generate silence. and don't bother + with any fancy stuff here, just the minimal silence. + */ + + g_atomic_int_inc (&processing_prohibited); no_roll (nframes, 0); - return true; // done + g_atomic_int_dec_and_test (&processing_prohibited); + + if (Config->get_locate_while_waiting_for_sync()) { + if (micro_locate (nframes)) { + /* XXX ERROR !!! XXX */ + } + } + + return true; // done, nothing left to process } return false; diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 5fec4e37ee..552a21d849 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -640,6 +640,25 @@ Session::start_locate (nframes_t target_frame, bool with_roll, bool with_flush, } } +int +Session::micro_locate (nframes_t distance) +{ + boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader(); + + for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) { + if (!(*i)->can_internal_playback_seek (distance)) { + return -1; + } + } + + for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) { + (*i)->internal_playback_seek (distance); + } + + _transport_frame += distance; + return 0; +} + void Session::locate (nframes_t target_frame, bool with_roll, bool with_flush, bool with_loop) { diff --git a/libs/clearlooks/SConscript b/libs/clearlooks/SConscript index 2676f63022..4feff6db90 100644 --- a/libs/clearlooks/SConscript +++ b/libs/clearlooks/SConscript @@ -12,7 +12,7 @@ libclearlooks_files = [ Import ('env install_prefix') -clearlooks = env.Copy() +clearlooks = env.Clone() clearlooks.Replace(CCFLAGS = ' `pkg-config --cflags gtk+-2.0` ', LINKFLAGS = ' `pkg-config --libs gtk+-2.0` ') diff --git a/libs/fst/SConscript b/libs/fst/SConscript index bdffd959b5..576283d73c 100644 --- a/libs/fst/SConscript +++ b/libs/fst/SConscript @@ -8,7 +8,7 @@ import glob fst_src = glob.glob('*.c') Import('env install_prefix') -fst = env.Copy(CC="winegcc") +fst = env.Clone(CC="winegcc") fst.Append (CPPPATH=".") if fst['VST']: diff --git a/libs/glibmm2/SConscript b/libs/glibmm2/SConscript index c84a1dc4a4..3abc14d801 100644 --- a/libs/glibmm2/SConscript +++ b/libs/glibmm2/SConscript @@ -9,7 +9,7 @@ glibmm2_files = glob.glob('glibmm/*.cc') Import('env libraries install_prefix') -glibmm2 = env.Copy() +glibmm2 = env.Clone() glibmm2.Merge([libraries['sigc2'], libraries['glib2']]) glibmm2.Append(CXXFLAGS='-DHAVE_CONFIG_H') diff --git a/libs/gtkmm2/atk/SConscript b/libs/gtkmm2/atk/SConscript index f534a2e569..3a78bf8102 100644 --- a/libs/gtkmm2/atk/SConscript +++ b/libs/gtkmm2/atk/SConscript @@ -7,7 +7,7 @@ import glob atkmm_files = glob.glob('atkmm/*.cc') Import('env libraries install_prefix') -atkmm = env.Copy() +atkmm = env.Clone() atkmm.Merge([libraries['glibmm2'], libraries['gtk2'], libraries['sigc2'] ]) libatkmm = atkmm.SharedLibrary('atkmm', atkmm_files) Default(libatkmm) diff --git a/libs/gtkmm2/gdk/SConscript b/libs/gtkmm2/gdk/SConscript index 6ea5c7cfef..d23f3257a5 100644 --- a/libs/gtkmm2/gdk/SConscript +++ b/libs/gtkmm2/gdk/SConscript @@ -7,7 +7,7 @@ import glob gdkmm2_files = glob.glob('gdkmm/*.cc') Import('env libraries install_prefix') -gdkmm2 = env.Copy() +gdkmm2 = env.Clone() gdkmm2.Merge([libraries['glibmm2'], libraries['gtk2'], libraries['sigc2'], libraries['pangomm']]) gdkmm2.Append(CXXFLAGS="-Ilibs/gtkmm2/gtk") diff --git a/libs/gtkmm2/gtk/SConscript b/libs/gtkmm2/gtk/SConscript index c3dd480258..c7041b830e 100644 --- a/libs/gtkmm2/gtk/SConscript +++ b/libs/gtkmm2/gtk/SConscript @@ -7,7 +7,7 @@ import glob gtkmm2_files = glob.glob('gtkmm/*.cc') Import('env libraries install_prefix') -gtkmm2 = env.Copy() +gtkmm2 = env.Clone() gtkmm2.Merge([libraries['glibmm2'], libraries['gtk2'], libraries['sigc2'], libraries['pangomm'], libraries['atkmm'], libraries['gdkmm2'] ]) if gtkmm2['IS_OSX']: diff --git a/libs/gtkmm2/pango/SConscript b/libs/gtkmm2/pango/SConscript index c08dcf8e71..321cb1d794 100644 --- a/libs/gtkmm2/pango/SConscript +++ b/libs/gtkmm2/pango/SConscript @@ -7,7 +7,7 @@ import glob pangomm_files = glob.glob('pangomm/*.cc') Import('env libraries install_prefix') -pangomm = env.Copy() +pangomm = env.Clone() pangomm.Merge([libraries['glibmm2'], libraries['pango'], libraries['sigc2']]) if pangomm['IS_OSX']: diff --git a/libs/gtkmm2ext/SConscript b/libs/gtkmm2ext/SConscript index 8c5d926493..84c523a5f7 100644 --- a/libs/gtkmm2ext/SConscript +++ b/libs/gtkmm2ext/SConscript @@ -6,7 +6,7 @@ import glob Import('env final_prefix install_prefix libraries i18n') -gtkmm2ext = env.Copy() +gtkmm2ext = env.Clone() gtkmm2ext.Merge ([ libraries['sigc2'], libraries['pbd'], diff --git a/libs/libglademm/SConscript b/libs/libglademm/SConscript index 0d22ba243f..3cf7f41901 100644 --- a/libs/libglademm/SConscript +++ b/libs/libglademm/SConscript @@ -8,7 +8,7 @@ Import('env libraries install_prefix') libglademm_files = glob.glob('libglademm/*.cc') -libglademm = env.Copy() +libglademm = env.Clone() libglademm.Merge([libraries['gtk2'], libraries['glade2'], libraries['sigc2'], libraries['glibmm2'], libraries['pangomm'], libraries['atkmm'], libraries['gdkmm2'], libraries['gtkmm2']]) libglade = libglademm.SharedLibrary('libglademm', libglademm_files) diff --git a/libs/libgnomecanvasmm/SConscript b/libs/libgnomecanvasmm/SConscript index cd952b604f..a0fb9387a5 100644 --- a/libs/libgnomecanvasmm/SConscript +++ b/libs/libgnomecanvasmm/SConscript @@ -7,7 +7,7 @@ import glob gnomecanvasmm_files = glob.glob('libgnomecanvasmm/*.cc') Import('env libraries install_prefix') -gnomecanvasmm = env.Copy() +gnomecanvasmm = env.Clone() gnomecanvasmm.Merge([libraries['glibmm2'], libraries['gtk2'], libraries['sigc2'], diff --git a/libs/pbd/undo.cc b/libs/pbd/undo.cc index f59228082d..4ed1e70ebc 100644 --- a/libs/pbd/undo.cc +++ b/libs/pbd/undo.cc @@ -21,6 +21,7 @@ #include <iostream> #include <string> #include <sstream> +#include <time.h> #include <pbd/undo.h> #include <pbd/xml++.h> @@ -34,6 +35,7 @@ using namespace sigc; UndoTransaction::UndoTransaction () { _clearing = false; + gettimeofday (&_timestamp, 0); } UndoTransaction::UndoTransaction (const UndoTransaction& rhs) diff --git a/libs/rubberband/SConscript b/libs/rubberband/SConscript index ef44155f84..82a9f1fa5c 100644 --- a/libs/rubberband/SConscript +++ b/libs/rubberband/SConscript @@ -7,7 +7,7 @@ import glob rubberband_files = glob.glob ('src/*.cpp') Import('env install_prefix libraries') -rb = env.Copy() +rb = env.Clone() rb.Merge ([libraries['fftw3f'], libraries['fftw3'], diff --git a/libs/soundtouch/SConscript b/libs/soundtouch/SConscript index 9ddee87b0c..71f1d9bf1a 100644 --- a/libs/soundtouch/SConscript +++ b/libs/soundtouch/SConscript @@ -16,7 +16,7 @@ cpu_detect_x86_gcc.cpp """) Import('env install_prefix') -st = env.Copy() +st = env.Clone() st.Append(CCFLAGS="-DHAVE_CONFIG_H -D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE") libst = st.SharedLibrary('soundtouch', soundtouch_files) diff --git a/libs/surfaces/control_protocol/SConscript b/libs/surfaces/control_protocol/SConscript index 141ec7a071..ccf5f871fc 100644 --- a/libs/surfaces/control_protocol/SConscript +++ b/libs/surfaces/control_protocol/SConscript @@ -6,7 +6,7 @@ import glob Import('env final_prefix install_prefix final_config_prefix libraries i18n') -cp = env.Copy() +cp = env.Clone() # # this defines the version number of libardour_cp diff --git a/libs/surfaces/frontier/tranzport/SConscript b/libs/surfaces/frontier/tranzport/SConscript index 5d390f3e2f..582f4a76e4 100644 --- a/libs/surfaces/frontier/tranzport/SConscript +++ b/libs/surfaces/frontier/tranzport/SConscript @@ -6,7 +6,7 @@ import glob Import('env final_prefix install_prefix final_config_prefix libraries i18n') -tranzport = env.Copy() +tranzport = env.Clone() # # this defines the version number of libardour_tranzport diff --git a/libs/surfaces/generic_midi/SConscript b/libs/surfaces/generic_midi/SConscript index b092188852..ecb4198598 100644 --- a/libs/surfaces/generic_midi/SConscript +++ b/libs/surfaces/generic_midi/SConscript @@ -6,7 +6,7 @@ import glob Import('env final_prefix install_prefix final_config_prefix libraries i18n') -genericmidi = env.Copy() +genericmidi = env.Clone() # # this defines the version number of libardour_genericmidi diff --git a/libs/surfaces/mackie/SConscript b/libs/surfaces/mackie/SConscript index 7fad6d3269..c817c99db9 100644 --- a/libs/surfaces/mackie/SConscript +++ b/libs/surfaces/mackie/SConscript @@ -6,7 +6,7 @@ import glob Import('env final_prefix install_prefix final_config_prefix libraries i18n') -mackie = env.Copy() +mackie = env.Clone() # # this defines the version number of libardour_mackie diff --git a/libs/surfaces/powermate/SConscript b/libs/surfaces/powermate/SConscript index cda2c6ab37..216ae4d415 100644 --- a/libs/surfaces/powermate/SConscript +++ b/libs/surfaces/powermate/SConscript @@ -6,7 +6,7 @@ import glob Import('env final_prefix install_prefix final_config_prefix libraries i18n') -powermate = env.Copy() +powermate = env.Clone() # # this defines the version number of powermate diff --git a/libs/surfaces/tranzport/SConscript b/libs/surfaces/tranzport/SConscript index a154685299..441819e90c 100644 --- a/libs/surfaces/tranzport/SConscript +++ b/libs/surfaces/tranzport/SConscript @@ -6,7 +6,7 @@ import glob Import('env final_prefix install_prefix final_config_prefix libraries i18n') -tranzport = env.Copy() +tranzport = env.Clone() # # this defines the version number of libardour_tranzport diff --git a/vst/SConscript b/vst/SConscript index 4a130fed80..544854e823 100644 --- a/vst/SConscript +++ b/vst/SConscript @@ -8,7 +8,7 @@ from stat import * Import('env install_prefix final_prefix config_prefix subst_dict libraries') -ardour_vst = env.Copy() +ardour_vst = env.Clone() sources = Split (""" winmain.c |