summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConstruct68
-rw-r--r--ardour.rc.in1
-rw-r--r--gtk2_ardour/SConscript39
-rw-r--r--gtk2_ardour/about.cc6
-rw-r--r--gtk2_ardour/actions.cc51
-rw-r--r--gtk2_ardour/actions.h4
-rw-r--r--gtk2_ardour/analysis_window.cc4
-rwxr-xr-xgtk2_ardour/ardbg2
-rwxr-xr-xgtk2_ardour/ardev2
-rwxr-xr-xgtk2_ardour/ardev_common.sh2
-rw-r--r--gtk2_ardour/ardour.colors4
-rw-r--r--gtk2_ardour/ardour.menus12
-rw-r--r--gtk2_ardour/ardour2_ui.rc12
-rw-r--r--gtk2_ardour/ardour_ui.cc180
-rw-r--r--gtk2_ardour/ardour_ui.h64
-rw-r--r--gtk2_ardour/ardour_ui2.cc123
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc188
-rw-r--r--gtk2_ardour/ardour_ui_options.cc897
-rwxr-xr-xgtk2_ardour/arval3
-rw-r--r--gtk2_ardour/audio_clock.cc173
-rw-r--r--gtk2_ardour/audio_clock.h29
-rw-r--r--gtk2_ardour/audio_region_editor.cc26
-rw-r--r--gtk2_ardour/audio_region_view.cc19
-rw-r--r--gtk2_ardour/audio_region_view.h4
-rw-r--r--gtk2_ardour/audio_streamview.cc93
-rw-r--r--gtk2_ardour/audio_streamview.h7
-rw-r--r--gtk2_ardour/automation_line.cc20
-rw-r--r--gtk2_ardour/automation_line.h14
-rw-r--r--gtk2_ardour/automation_selectable.h6
-rw-r--r--gtk2_ardour/automation_time_axis.cc6
-rw-r--r--gtk2_ardour/automation_time_axis.h10
-rw-r--r--gtk2_ardour/canvas-waveview.c3
-rw-r--r--gtk2_ardour/crossfade_edit.cc14
-rw-r--r--gtk2_ardour/crossfade_view.cc18
-rw-r--r--gtk2_ardour/draginfo.h8
-rw-r--r--gtk2_ardour/editor.cc372
-rw-r--r--gtk2_ardour/editor.h170
-rw-r--r--gtk2_ardour/editor_actions.cc396
-rw-r--r--gtk2_ardour/editor_audio_import.cc16
-rw-r--r--gtk2_ardour/editor_audiotrack.cc6
-rw-r--r--gtk2_ardour/editor_canvas.cc36
-rw-r--r--gtk2_ardour/editor_canvas_events.cc4
-rw-r--r--gtk2_ardour/editor_cursors.cc2
-rw-r--r--gtk2_ardour/editor_export_audio.cc22
-rw-r--r--gtk2_ardour/editor_imageframe.cc70
-rw-r--r--gtk2_ardour/editor_keyboard.cc4
-rw-r--r--gtk2_ardour/editor_markers.cc12
-rw-r--r--gtk2_ardour/editor_mixer.cc2
-rw-r--r--gtk2_ardour/editor_mouse.cc170
-rw-r--r--gtk2_ardour/editor_ops.cc358
-rw-r--r--gtk2_ardour/editor_region_list.cc3
-rw-r--r--gtk2_ardour/editor_rulers.cc88
-rw-r--r--gtk2_ardour/editor_tempodisplay.cc19
-rw-r--r--gtk2_ardour/export_dialog.cc6
-rw-r--r--gtk2_ardour/export_dialog.h2
-rw-r--r--gtk2_ardour/export_range_markers_dialog.cc4
-rw-r--r--gtk2_ardour/export_range_markers_dialog.h6
-rw-r--r--gtk2_ardour/export_session_dialog.cc2
-rw-r--r--gtk2_ardour/export_session_dialog.h2
-rw-r--r--gtk2_ardour/gain_automation_time_axis.cc2
-rw-r--r--gtk2_ardour/gain_automation_time_axis.h2
-rw-r--r--gtk2_ardour/gain_meter.cc25
-rw-r--r--gtk2_ardour/gain_meter.h2
-rw-r--r--gtk2_ardour/icons/nudge_left.pngbin0 -> 263 bytes
-rw-r--r--gtk2_ardour/icons/nudge_right.pngbin0 -> 252 bytes
-rw-r--r--gtk2_ardour/icons/tool_audition.pngbin0 -> 314 bytes
-rw-r--r--gtk2_ardour/icons/tool_gain.pngbin0 -> 417 bytes
-rw-r--r--gtk2_ardour/icons/tool_object.pngbin0 -> 461 bytes
-rw-r--r--gtk2_ardour/icons/tool_object.xpm54
-rw-r--r--gtk2_ardour/icons/tool_stretch.pngbin0 -> 284 bytes
-rw-r--r--gtk2_ardour/icons/tool_zoom.pngbin0 -> 355 bytes
-rw-r--r--gtk2_ardour/icons/transport_end.pngbin0 -> 331 bytes
-rw-r--r--gtk2_ardour/icons/transport_loop.pngbin0 -> 681 bytes
-rw-r--r--gtk2_ardour/icons/transport_play.pngbin0 -> 339 bytes
-rw-r--r--gtk2_ardour/icons/transport_range.pngbin0 -> 294 bytes
-rw-r--r--gtk2_ardour/icons/transport_record.pngbin0 -> 546 bytes
-rw-r--r--gtk2_ardour/icons/transport_start.pngbin0 -> 370 bytes
-rw-r--r--gtk2_ardour/icons/transport_stop.pngbin0 -> 204 bytes
-rw-r--r--gtk2_ardour/icons/tw_edit_icons_07.xcfbin0 -> 5600 bytes
-rw-r--r--gtk2_ardour/icons/zoom_full.pngbin0 -> 365 bytes
-rw-r--r--gtk2_ardour/icons/zoom_in.pngbin0 -> 354 bytes
-rw-r--r--gtk2_ardour/icons/zoom_out.pngbin0 -> 346 bytes
-rw-r--r--gtk2_ardour/imageframe_socket_handler.cc20
-rw-r--r--gtk2_ardour/imageframe_socket_handler.h8
-rw-r--r--gtk2_ardour/imageframe_time_axis_group.cc2
-rw-r--r--gtk2_ardour/imageframe_time_axis_group.h2
-rw-r--r--gtk2_ardour/imageframe_time_axis_view.cc2
-rw-r--r--gtk2_ardour/imageframe_view.cc12
-rw-r--r--gtk2_ardour/imageframe_view.h8
-rw-r--r--gtk2_ardour/location_ui.cc4
-rw-r--r--gtk2_ardour/main.cc9
-rw-r--r--gtk2_ardour/marker.cc4
-rw-r--r--gtk2_ardour/marker.h6
-rw-r--r--gtk2_ardour/marker_time_axis_view.cc4
-rw-r--r--gtk2_ardour/marker_time_axis_view.h2
-rw-r--r--gtk2_ardour/marker_view.cc4
-rw-r--r--gtk2_ardour/marker_view.h4
-rw-r--r--gtk2_ardour/meter_bridge_strip.cc6
-rw-r--r--gtk2_ardour/meter_bridge_strip.h6
-rw-r--r--gtk2_ardour/new_session_dialog.cc131
-rw-r--r--gtk2_ardour/new_session_dialog.h12
-rw-r--r--gtk2_ardour/option_editor.cc34
-rw-r--r--gtk2_ardour/pan_automation_time_axis.cc2
-rw-r--r--gtk2_ardour/pan_automation_time_axis.h2
-rw-r--r--gtk2_ardour/public_editor.h14
-rw-r--r--gtk2_ardour/redirect_automation_time_axis.cc2
-rw-r--r--gtk2_ardour/redirect_automation_time_axis.h2
-rw-r--r--gtk2_ardour/redirect_box.cc6
-rw-r--r--gtk2_ardour/redirect_box.h4
-rw-r--r--gtk2_ardour/region_selection.cc4
-rw-r--r--gtk2_ardour/region_selection.h8
-rw-r--r--gtk2_ardour/region_view.cc13
-rw-r--r--gtk2_ardour/region_view.h4
-rw-r--r--gtk2_ardour/route_time_axis.cc12
-rw-r--r--gtk2_ardour/route_time_axis.h10
-rw-r--r--gtk2_ardour/route_ui.cc25
-rw-r--r--gtk2_ardour/route_ui.h3
-rw-r--r--gtk2_ardour/selection.cc10
-rw-r--r--gtk2_ardour/selection.h10
-rw-r--r--gtk2_ardour/send_ui.cc13
-rw-r--r--gtk2_ardour/send_ui.h1
-rw-r--r--gtk2_ardour/sfdb_ui.cc8
-rw-r--r--gtk2_ardour/splash.pngbin0 -> 102707 bytes
-rw-r--r--gtk2_ardour/splash.ppm32
-rw-r--r--gtk2_ardour/streamview.cc35
-rw-r--r--gtk2_ardour/streamview.h8
-rw-r--r--gtk2_ardour/tempo_dialog.cc4
-rw-r--r--gtk2_ardour/tempo_dialog.h4
-rw-r--r--gtk2_ardour/time_axis_view.cc6
-rw-r--r--gtk2_ardour/time_axis_view.h8
-rw-r--r--gtk2_ardour/time_axis_view_item.cc24
-rw-r--r--gtk2_ardour/time_axis_view_item.h34
-rw-r--r--gtk2_ardour/time_selection.cc10
-rw-r--r--gtk2_ardour/time_selection.h6
-rw-r--r--gtk2_ardour/utils.cc46
-rw-r--r--gtk2_ardour/utils.h5
-rw-r--r--gtk2_ardour/visual_time_axis.cc2
-rw-r--r--gtk2_ardour/visual_time_axis.h2
-rw-r--r--icons/ardour_bw.ai287
-rw-r--r--icons/ardour_bw.svg258
-rw-r--r--icons/icon/ardour.icnsbin0 -> 41196 bytes
-rw-r--r--icons/icon/ardour_icon_mac.pngbin0 -> 12059 bytes
-rw-r--r--icons/icon/ardour_icon_mac_mask.pngbin0 -> 417 bytes
-rw-r--r--icons/icon/ardour_icon_tango_16px.xcfbin0 -> 4442 bytes
-rw-r--r--icons/icon/ardour_icon_tango_16px_blue.pngbin0 -> 799 bytes
-rw-r--r--icons/icon/ardour_icon_tango_16px_red.pngbin0 -> 746 bytes
-rw-r--r--icons/icon/ardour_icon_tango_22px.xcfbin0 -> 6260 bytes
-rw-r--r--icons/icon/ardour_icon_tango_22px_blue.pngbin0 -> 1219 bytes
-rw-r--r--icons/icon/ardour_icon_tango_22px_red.pngbin0 -> 1156 bytes
-rw-r--r--icons/icon/ardour_icon_tango_32px.xcfbin0 -> 5689 bytes
-rw-r--r--icons/icon/ardour_icon_tango_32px_blue.pngbin0 -> 1993 bytes
-rw-r--r--icons/icon/ardour_icon_tango_32px_red.pngbin0 -> 1878 bytes
-rw-r--r--icons/icon/ardour_icon_tango_48px.xcfbin0 -> 10320 bytes
-rw-r--r--icons/icon/ardour_icon_tango_48px_blue.pngbin0 -> 3370 bytes
-rw-r--r--icons/icon/ardour_icon_tango_48px_red.pngbin0 -> 3142 bytes
-rw-r--r--icons/made_with/ardour_made.pngbin0 -> 65138 bytes
-rw-r--r--icons/made_with/ardour_made.xarbin0 -> 6301 bytes
-rw-r--r--libs/appleutility/SConscript7
-rw-r--r--libs/ardour/SConscript2
-rw-r--r--libs/ardour/ardour/ardour.h6
-rw-r--r--libs/ardour/ardour/audio_diskstream.h20
-rw-r--r--libs/ardour/ardour/audio_track.h16
-rw-r--r--libs/ardour/ardour/audio_unit.h7
-rw-r--r--libs/ardour/ardour/audioengine.h58
-rw-r--r--libs/ardour/ardour/audiofilesource.h13
-rw-r--r--libs/ardour/ardour/audioplaylist.h6
-rw-r--r--libs/ardour/ardour/audioregion.h43
-rw-r--r--libs/ardour/ardour/audiosource.h36
-rw-r--r--libs/ardour/ardour/auditioner.h6
-rw-r--r--libs/ardour/ardour/configuration.h16
-rw-r--r--libs/ardour/ardour/configuration_variable.h102
-rw-r--r--libs/ardour/ardour/configuration_vars.h176
-rw-r--r--libs/ardour/ardour/control_protocol_manager.h6
-rw-r--r--libs/ardour/ardour/coreaudiosource.h11
-rw-r--r--libs/ardour/ardour/crossfade.h40
-rw-r--r--libs/ardour/ardour/destructive_filesource.h20
-rw-r--r--libs/ardour/ardour/diskstream.h69
-rw-r--r--libs/ardour/ardour/export.h22
-rw-r--r--libs/ardour/ardour/gain.h8
-rw-r--r--libs/ardour/ardour/insert.h25
-rw-r--r--libs/ardour/ardour/io.h64
-rw-r--r--libs/ardour/ardour/ladspa_plugin.h14
-rw-r--r--libs/ardour/ardour/location.h30
-rw-r--r--libs/ardour/ardour/mix.h32
-rw-r--r--libs/ardour/ardour/panner.h34
-rw-r--r--libs/ardour/ardour/peak.h4
-rw-r--r--libs/ardour/ardour/playlist.h48
-rw-r--r--libs/ardour/ardour/plugin.h16
-rw-r--r--libs/ardour/ardour/port.h4
-rw-r--r--libs/ardour/ardour/redirect.h10
-rw-r--r--libs/ardour/ardour/region.h71
-rw-r--r--libs/ardour/ardour/region_factory.h12
-rw-r--r--libs/ardour/ardour/route.h47
-rw-r--r--libs/ardour/ardour/send.h3
-rw-r--r--libs/ardour/ardour/session.h450
-rw-r--r--libs/ardour/ardour/slave.h28
-rw-r--r--libs/ardour/ardour/sndfilesource.h16
-rw-r--r--libs/ardour/ardour/source.h2
-rw-r--r--libs/ardour/ardour/source_factory.h5
-rw-r--r--libs/ardour/ardour/state_manager.h2
-rw-r--r--libs/ardour/ardour/tempo.h64
-rw-r--r--libs/ardour/ardour/track.h18
-rw-r--r--libs/ardour/ardour/types.h106
-rw-r--r--libs/ardour/ardour/utils.h11
-rw-r--r--libs/ardour/ardour/vst_plugin.h6
-rw-r--r--libs/ardour/audio_diskstream.cc140
-rw-r--r--libs/ardour/audio_playlist.cc27
-rw-r--r--libs/ardour/audio_track.cc45
-rw-r--r--libs/ardour/audio_unit.cc6
-rw-r--r--libs/ardour/audioengine.cc65
-rw-r--r--libs/ardour/audiofilesource.cc33
-rw-r--r--libs/ardour/audioregion.cc110
-rw-r--r--libs/ardour/audiosource.cc87
-rw-r--r--libs/ardour/auditioner.cc4
-rw-r--r--libs/ardour/automation_event.cc4
-rw-r--r--libs/ardour/configuration.cc116
-rw-r--r--libs/ardour/control_protocol_manager.cc49
-rw-r--r--libs/ardour/coreaudiosource.cc11
-rw-r--r--libs/ardour/crossfade.cc50
-rw-r--r--libs/ardour/default_click.cc4
-rw-r--r--libs/ardour/destructive_filesource.cc58
-rw-r--r--libs/ardour/diskstream.cc13
-rw-r--r--libs/ardour/gain.cc8
-rw-r--r--libs/ardour/globals.cc35
-rw-r--r--libs/ardour/import.cc2
-rw-r--r--libs/ardour/insert.cc42
-rw-r--r--libs/ardour/io.cc67
-rw-r--r--libs/ardour/jack_slave.cc4
-rw-r--r--libs/ardour/ladspa_plugin.cc17
-rw-r--r--libs/ardour/location.cc20
-rw-r--r--libs/ardour/meter.cc4
-rw-r--r--libs/ardour/midi_diskstream.cc28
-rw-r--r--libs/ardour/midi_region.cc2
-rw-r--r--libs/ardour/midi_track.cc23
-rw-r--r--libs/ardour/mix.cc32
-rw-r--r--libs/ardour/mtc_slave.cc20
-rw-r--r--libs/ardour/panner.cc63
-rw-r--r--libs/ardour/playlist.cc126
-rw-r--r--libs/ardour/playlist_factory.cc2
-rw-r--r--libs/ardour/plugin.cc10
-rw-r--r--libs/ardour/plugin_manager.cc3
-rw-r--r--libs/ardour/redirect.cc4
-rw-r--r--libs/ardour/region.cc86
-rw-r--r--libs/ardour/region_factory.cc12
-rw-r--r--libs/ardour/reverse.cc12
-rw-r--r--libs/ardour/route.cc107
-rw-r--r--libs/ardour/send.cc2
-rw-r--r--libs/ardour/session.cc440
-rw-r--r--libs/ardour/session_click.cc65
-rw-r--r--libs/ardour/session_events.cc30
-rw-r--r--libs/ardour/session_export.cc20
-rw-r--r--libs/ardour/session_midi.cc200
-rw-r--r--libs/ardour/session_process.cc62
-rw-r--r--libs/ardour/session_state.cc900
-rw-r--r--libs/ardour/session_time.cc87
-rw-r--r--libs/ardour/session_timefx.cc12
-rw-r--r--libs/ardour/session_transport.cc167
-rw-r--r--libs/ardour/sndfilesource.cc75
-rw-r--r--libs/ardour/source.cc2
-rw-r--r--libs/ardour/source_factory.cc73
-rw-r--r--libs/ardour/sse_functions.s4
-rw-r--r--libs/ardour/tempo.cc86
-rw-r--r--libs/ardour/track.cc6
-rw-r--r--libs/ardour/utils.cc108
-rw-r--r--libs/ardour/vst_plugin.cc9
-rw-r--r--libs/fst/SConscript11
-rw-r--r--libs/glibmm2/SConscript26
-rw-r--r--libs/gtkmm2ext/dndtreeview.cc85
-rw-r--r--libs/gtkmm2ext/gtk_ui.cc6
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/dndtreeview.h148
-rw-r--r--libs/libsndfile/SConscript10
-rw-r--r--libs/midi++2/midi++/types.h6
-rw-r--r--libs/pbd/controllable.cc24
-rw-r--r--libs/pbd/id.cc11
-rw-r--r--libs/pbd/pbd/controllable.h14
-rw-r--r--libs/pbd/pbd/destructible.h2
-rw-r--r--libs/pbd/pbd/id.h2
-rw-r--r--libs/pbd/pbd/memento_command.h17
-rw-r--r--libs/pbd/pbd/restartable_rw.h7
-rw-r--r--libs/pbd/pbd/shiva.h51
-rw-r--r--libs/pbd/pbd/stacktrace.h2
-rw-r--r--libs/pbd/pbd/undo.h8
-rw-r--r--libs/pbd/stacktrace.cc6
-rw-r--r--libs/pbd/undo.cc53
-rw-r--r--libs/sigc++2/SConscript21
-rw-r--r--libs/surfaces/control_protocol/basic_ui.cc29
-rw-r--r--libs/surfaces/control_protocol/control_protocol/control_protocol.h4
-rw-r--r--libs/surfaces/generic_midi/generic_midi_control_protocol.cc66
-rw-r--r--libs/surfaces/generic_midi/generic_midi_control_protocol.h4
-rw-r--r--libs/surfaces/generic_midi/interface.cc1
-rw-r--r--libs/surfaces/generic_midi/midicontrollable.cc2
-rw-r--r--libs/surfaces/tranzport/interface.cc1
-rw-r--r--libs/surfaces/tranzport/tranzport_control_protocol.cc9
-rw-r--r--libs/surfaces/tranzport/tranzport_control_protocol.h2
-rw-r--r--vst/SConscript37
-rwxr-xr-xvst/ardevst4
-rw-r--r--vst/ardourvst.in8
297 files changed, 6118 insertions, 5443 deletions
diff --git a/SConstruct b/SConstruct
index 73aca5a4d9..a06fadbef7 100644
--- a/SConstruct
+++ b/SConstruct
@@ -15,7 +15,7 @@ import SCons.Node.FS
SConsignFile()
EnsureSConsVersion(0, 96)
-version = '2.0beta2'
+version = '2.0beta5.1'
subst_dict = { }
@@ -25,7 +25,7 @@ subst_dict = { }
opts = Options('scache.conf')
opts.AddOptions(
- ('ARCH', 'Set architecture-specific compilation flags by hand (all flags as 1 argument)',''),
+ ('ARCH', 'Set architecture-specific compilation flags by hand (all flags as 1 argument)',''),
BoolOption('AUDIOUNITS', 'Compile with Apple\'s AudioUnit library. (experimental)', 0),
BoolOption('COREAUDIO', 'Compile with Apple\'s CoreAudio library', 0),
BoolOption('DEBUG', 'Set to build with debugging information and no optimizations', 0),
@@ -365,8 +365,8 @@ if env['VST']:
answer = sys.stdin.readline ()
answer = answer.rstrip().strip()
if answer != "yes" and answer != "y":
- print 'You cannot build Ardour with VST support for distribution to others.\nIt is a violation of several different licenses. VST support disabled.'
- env['VST'] = 0;
+ print 'You cannot build Ardour with VST support for distribution to others.\nIt is a violation of several different licenses. Build with VST=false.'
+ sys.exit (-1);
else:
print "OK, VST support will be enabled"
@@ -572,15 +572,18 @@ if env['SYSLIBS']:
'libs/libsndfile',
'libs/pbd',
'libs/midi++2',
- 'libs/ardour'
+ 'libs/ardour',
+ # these are unconditionally included but have
+ # tests internally to avoid compilation etc
+ # if VST is not set
+ 'libs/fst',
+ 'vst',
+ # this is unconditionally included but has
+ # tests internally to avoid compilation etc
+ # if COREAUDIO is not set
+ 'libs/appleutility'
]
- if env['VST']:
- subdirs = ['libs/fst'] + subdirs + ['vst']
-
- if env['COREAUDIO']:
- subdirs = subdirs + ['libs/appleutility']
-
gtk_subdirs = [
# 'libs/flowcanvas',
'libs/gtkmm2ext',
@@ -633,15 +636,18 @@ else:
'libs/libsndfile',
'libs/pbd',
'libs/midi++2',
- 'libs/ardour'
+ 'libs/ardour',
+ # these are unconditionally included but have
+ # tests internally to avoid compilation etc
+ # if VST is not set
+ 'libs/fst',
+ 'vst',
+ # this is unconditionally included but has
+ # tests internally to avoid compilation etc
+ # if COREAUDIO is not set
+ 'libs/appleutility'
]
- if env['VST']:
- subdirs = ['libs/fst'] + subdirs + ['vst']
-
- if env['COREAUDIO']:
- subdirs = subdirs + ['libs/appleutility']
-
gtk_subdirs = [
'libs/glibmm2',
'libs/gtkmm2/pango',
@@ -687,9 +693,15 @@ if os.environ.has_key('DISTCC_HOSTS'):
env['ENV']['HOME'] = os.environ['HOME']
final_prefix = '$PREFIX'
-install_prefix = '$DESTDIR/$PREFIX'
-subst_dict['INSTALL_PREFIX'] = install_prefix;
+if env['DESTDIR'] :
+ install_prefix = '$DESTDIR/$PREFIX'
+else:
+ install_prefix = env['PREFIX']
+
+subst_dict['%INSTALL_PREFIX%'] = install_prefix;
+subst_dict['%FINAL_PREFIX%'] = final_prefix;
+subst_dict['%PREFIX%'] = final_prefix;
if env['PREFIX'] == '/usr':
final_config_prefix = '/etc'
@@ -698,7 +710,7 @@ else:
config_prefix = '$DESTDIR' + final_config_prefix
-# For colorgcc ( so says the wiki, but it's still not working :/ anyone? )
+# For colorgcc
if os.environ.has_key('PATH'):
env['PATH'] = os.environ['PATH']
if os.environ.has_key('TERM'):
@@ -706,7 +718,6 @@ if os.environ.has_key('TERM'):
if os.environ.has_key('HOME'):
env['HOME'] = os.environ['HOME']
-
# SCons should really do this for us
conf = Configure (env)
@@ -958,7 +969,17 @@ env.Distribute (env['DISTTREE'],
'COPYING', 'PACKAGER_README', 'README',
'ardour.rc.in',
'ardour_system.rc',
- 'tools/config.guess'
+ 'tools/config.guess',
+ 'icons/icon/ardour_icon_mac_mask.png',
+ 'icons/icon/ardour_icon_mac.png',
+ 'icons/icon/ardour_icon_tango_16px_blue.png',
+ 'icons/icon/ardour_icon_tango_16px_red.png',
+ 'icons/icon/ardour_icon_tango_22px_blue.png',
+ 'icons/icon/ardour_icon_tango_22px_red.png',
+ 'icons/icon/ardour_icon_tango_32px_blue.png',
+ 'icons/icon/ardour_icon_tango_32px_red.png',
+ 'icons/icon/ardour_icon_tango_48px_blue.png',
+ 'icons/icon/ardour_icon_tango_48px_red.png'
] +
glob.glob ('DOCUMENTATION/AUTHORS*') +
glob.glob ('DOCUMENTATION/CONTRIBUTORS*') +
@@ -970,6 +991,7 @@ env.Distribute (env['DISTTREE'],
srcdist = env.Tarball(env['TARBALL'], env['DISTTREE'])
env.Alias ('srctar', srcdist)
+
#
# don't leave the distree around
#
diff --git a/ardour.rc.in b/ardour.rc.in
index 96e0fe0a5b..6488d0ed82 100644
--- a/ardour.rc.in
+++ b/ardour.rc.in
@@ -1,6 +1,7 @@
<?xml version="1.0"?>
<Ardour>
<MIDI-port tag="%MIDITAG%" device="ardour" type="%MIDITYPE%" mode="duplex"/>
+ <MIDI-port tag="control" device="ardour" type="%MIDITYPE%" mode="duplex"/>
<Config>
<Option name="minimum-disk-io-bytes" value="262144"/>
<Option name="track-buffer-seconds" value="5.000000"/>
diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript
index 8a1fd22ff2..7ef2b668c9 100644
--- a/gtk2_ardour/SConscript
+++ b/gtk2_ardour/SConscript
@@ -7,6 +7,7 @@ import glob
Import('env install_prefix final_prefix config_prefix libraries i18n version')
gtkardour = env.Copy()
+gtkmmtests = env.Copy()
#
# this defines the version number of the GTK interface to ardour
@@ -49,6 +50,19 @@ gtkardour.Merge ([
libraries['jack']
])
+gtkmmtests.Append(CXXFLAGS="-DLIBSIGC_DISABLE_DEPRECATED")
+
+gtkmmtests.Merge ([
+ libraries['gtkmm2'],
+ libraries['glib2'],
+ libraries['glibmm2'],
+ libraries['pangomm'],
+ libraries['atkmm'],
+ libraries['gdkmm2'],
+ libraries['sigc2'],
+ libraries['gtk2']
+])
+
if gtkardour['DMALLOC']:
gtkardour.Merge([libraries['dmalloc']])
gtkardour.Append(CCFLAGS='-DUSE_DMALLOC')
@@ -195,7 +209,8 @@ fft_graph.cc
fft_result.cc
""")
-pixmap_files=glob.glob('pixmaps/*.xpm')
+pixmap_files = glob.glob('pixmaps/*.xpm')
+icon_files = glob.glob ('icons/*.png')
intl_files = gtkardour_files + glob.glob('*.h')
@@ -216,6 +231,10 @@ stest_files=Split("""
stest.cc
""")
+tt_files=Split ("""
+tt.cc
+""")
+
extra_sources = []
vst_files = [ 'vst_pluginui.cc' ]
@@ -252,9 +271,10 @@ ardourlib = gtkardour.SharedLibrary(target = 'ardourgtk', source = gtkardour_fil
mtest = gtkardour.Program(target = 'mtest', source = mtest_files)
itest = gtkardour.Program(target = 'itest', source = itest_files)
rcu = gtkardour.Program(target = 'rcu', source = rcu_files)
+tt = gtkmmtests.Program(target = 'tt', source = tt_files)
my_subst_dict = { }
-my_subst_dict['%INSTALL_PREFIX%'] = install_prefix
+my_subst_dict['%INSTALL_PREFIX%'] = final_prefix
ardoursh = env.SubstInFile ('ardour.sh','ardour.sh.in', SUBST_DICT = my_subst_dict);
env.AddPostAction (ardoursh, Chmod ('$TARGET', 0755))
@@ -286,8 +306,9 @@ env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour.bindings'))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour.colors'))
# data files
-env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour2'), 'splash.ppm'))
+env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour2'), 'splash.png'))
env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour2/pixmaps'), pixmap_files))
+env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour2/icons'), icon_files))
#dist
@@ -295,12 +316,18 @@ env.Alias ('tarball', env.Distribute (env['DISTTREE'],
[ 'SConscript',
'i18n.h', 'gettext.h',
'ardour.sh.in',
- 'ardour2_ui.rc', 'splash.ppm',
+ 'ardour2_ui.rc', 'splash.png',
'ardour.menus', 'ardour.bindings', 'ardour.colors',
'editor_xpms'
] +
- gtkardour_files + vst_files + pixmap_files +
- glob.glob('po/*.po') + glob.glob('*.h')))
+ gtkardour_files +
+ vst_files +
+ pixmap_files +
+ icon_files +
+ skipped_files +
+ audiounit_files +
+ fft_analysis_files +
+ glob.glob('po/*.po') + glob.glob('*.h')))
# generate a prototype full-featured ardour_ui.rc file
diff --git a/gtk2_ardour/about.cc b/gtk2_ardour/about.cc
index e48e08f130..d43273f786 100644
--- a/gtk2_ardour/about.cc
+++ b/gtk2_ardour/about.cc
@@ -165,7 +165,7 @@ About::About ()
string path;
string t;
- path = find_data_file ("splash.ppm");
+ path = find_data_file ("splash.png");
Glib::RefPtr<Pixbuf> pixbuf = Gdk::Pixbuf::create_from_file (path);
@@ -178,13 +178,13 @@ About::About ()
}
set_translator_credits (t);
- set_copyright (_("Copyright (C) 1999-2005 Paul Davis\n"));
+ set_copyright (_("Copyright (C) 1999-2006 Paul Davis\n"));
set_license (_("Ardour comes with ABSOLUTELY NO WARRANTY\n"
"This is free software, and you are welcome to redistribute it\n"
"under certain conditions; see the file COPYING for details.\n"));
set_name (X_("ardour"));
set_website (X_("http://ardour.org/"));
- set_website_label (X_("ardour.org"));
+ set_website_label (X_("visit http://www.ardour.org/"));
set_version ((string_compose(_("%1\n(built with ardour/gtk %2.%3.%4 libardour: %5.%6.%7)"),
VERSIONSTRING,
gtk_ardour_major_version,
diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc
index b2408620a5..885a23ffc7 100644
--- a/gtk2_ardour/actions.cc
+++ b/gtk2_ardour/actions.cc
@@ -40,6 +40,7 @@ using namespace Gtk;
using namespace Glib;
using namespace sigc;
using namespace PBD;
+using namespace ARDOUR;
vector<RefPtr<Gtk::Action> > ActionManager::session_sensitive_actions;
vector<RefPtr<Gtk::Action> > ActionManager::region_list_selection_sensitive_actions;
@@ -283,3 +284,53 @@ ActionManager::uncheck_toggleaction (const char * name)
delete [] group_name;
}
+void
+ActionManager::toggle_config_state (const char* group, const char* action, bool (Configuration::*set)(bool), bool (Configuration::*get)(void) const)
+{
+ Glib::RefPtr<Action> act = ActionManager::get_action (group, action);
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+
+ if (tact) {
+ bool x = (Config->*get)();
+
+ if (x != tact->get_active()) {
+ (Config->*set) (!x);
+ }
+ }
+ }
+}
+
+void
+ActionManager::toggle_config_state (const char* group, const char* action, sigc::slot<void> theSlot)
+{
+ Glib::RefPtr<Action> act = ActionManager::get_action (group, action);
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+ if (tact->get_active()) {
+ theSlot ();
+ }
+ }
+}
+
+void
+ActionManager::map_some_state (const char* group, const char* action, bool (Configuration::*get)() const)
+{
+ Glib::RefPtr<Action> act = ActionManager::get_action (group, action);
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+
+ if (tact) {
+
+ bool x = (Config->*get)();
+
+ if (tact->get_active() != x) {
+ tact->set_active (x);
+ }
+ } else {
+ cerr << group << ':' << action << " is not a toggle\n";
+ }
+ } else {
+ cerr << group << ':' << action << " not an action\n";
+ }
+}
diff --git a/gtk2_ardour/actions.h b/gtk2_ardour/actions.h
index 330caff1c2..e3ec57dbae 100644
--- a/gtk2_ardour/actions.h
+++ b/gtk2_ardour/actions.h
@@ -37,6 +37,10 @@ class ActionManager
static std::vector<Glib::RefPtr<Gtk::Action> > jack_opposite_sensitive_actions;
static std::vector<Glib::RefPtr<Gtk::Action> > edit_cursor_in_region_sensitive_actions;
+ static void map_some_state (const char* group, const char* action, bool (ARDOUR::Configuration::*get)() const);
+ static void toggle_config_state (const char* group, const char* action, bool (ARDOUR::Configuration::*set)(bool), bool (ARDOUR::Configuration::*get)(void) const);
+ static void toggle_config_state (const char* group, const char* action, sigc::slot<void> theSlot);
+
static void set_sensitive (std::vector<Glib::RefPtr<Gtk::Action> >& actions, bool);
static std::string unbound_string; /* the key string returned if an action is not bound */
diff --git a/gtk2_ardour/analysis_window.cc b/gtk2_ardour/analysis_window.cc
index d89c106831..163ac981b9 100644
--- a/gtk2_ardour/analysis_window.cc
+++ b/gtk2_ardour/analysis_window.cc
@@ -248,7 +248,7 @@ AnalysisWindow::analyze_data (Gtk::Button *button)
for (std::list<ARDOUR::AudioRange>::iterator j = ts.begin(); j != ts.end(); ++j) {
- jack_nframes_t i = 0;
+ nframes_t i = 0;
int n;
while ( i < (*j).length() ) {
@@ -289,7 +289,7 @@ AnalysisWindow::analyze_data (Gtk::Button *button)
continue;
// cerr << " - " << (*j)->region().name() << ": " << (*j)->region().length() << " samples starting at " << (*j)->region().position() << endl;
- jack_nframes_t i = 0;
+ nframes_t i = 0;
int n;
while ( i < arv->region()->length() ) {
diff --git a/gtk2_ardour/ardbg b/gtk2_ardour/ardbg
index 115db85f59..933b5ba720 100755
--- a/gtk2_ardour/ardbg
+++ b/gtk2_ardour/ardbg
@@ -1,4 +1,4 @@
#!/bin/sh
dir=`dirname "$0"`
-source $dir/ardev_common.sh
+. $dir/ardev_common.sh
exec gdb gtk2_ardour/ardour.bin $*
diff --git a/gtk2_ardour/ardev b/gtk2_ardour/ardev
index d3d44e55fe..04719908b4 100755
--- a/gtk2_ardour/ardev
+++ b/gtk2_ardour/ardev
@@ -1,3 +1,3 @@
#!/bin/sh
-source `dirname "$0"`/ardev_common.sh
+. `dirname "$0"`/ardev_common.sh
exec gtk2_ardour/ardour.bin --novst $*
diff --git a/gtk2_ardour/ardev_common.sh b/gtk2_ardour/ardev_common.sh
index df4bb025c0..165db68369 100755
--- a/gtk2_ardour/ardev_common.sh
+++ b/gtk2_ardour/ardev_common.sh
@@ -2,7 +2,7 @@ cd `dirname "$0"`/..
#export G_DEBUG=fatal_criticals
-export ARDOUR_PATH=gtk2_ardour/glade:gtk2_ardour/pixmaps:gtk2_ardour
+export ARDOUR_PATH=gtk2_ardour/icons:gtk2_ardour/pixmaps:gtk2_ardour
export LD_LIBRARY_PATH=libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/libsndfile:libs/appleutility:$LD_LIBRARY_PATH
diff --git a/gtk2_ardour/ardour.colors b/gtk2_ardour/ardour.colors
index aa87f2de9d..cc44208234 100644
--- a/gtk2_ardour/ardour.colors
+++ b/gtk2_ardour/ardour.colors
@@ -68,8 +68,8 @@ cEnteredAutomationLine 0.87 0.39 0.39 1.00
cEnteredMarker 0.87 0.39 0.39 1.00
cMeterMarker 0.95 0.26 0.36 1.00
cTempoMarker 0.95 0.26 0.36 1.00
-cMeasureLineBar 0.5 0.5 0.5 0.98
-cMeasureLineBeat 0.7 0.7 0.7 0.94
+cMeasureLineBeat 0.55 0.55 0.55 1.00
+cMeasureLineBar 0.45 0.45 0.45 1.00
cGhostTrackBaseOutline 0.00 0.00 0.00 1.00
cGhostTrackBaseFill 0.27 0.00 0.49 0.50
cImageTrackBase 0.87 0.87 0.85 1.00
diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus
index d213b4a53c..845acac400 100644
--- a/gtk2_ardour/ardour.menus
+++ b/gtk2_ardour/ardour.menus
@@ -239,11 +239,12 @@
</menu>
<separator/>
<menu action='Autoconnect'>
- <menuitem action='AutoConnectNewTrackInputsToHardware'/>
+ <menuitem action='InputAutoConnectPhysical'/>
+ <menuitem action='InputAutoConnectManual'/>
<separator/>
- <menuitem action='AutoConnectNewTrackOutputsToHardware'/>
- <menuitem action='AutoConnectNewTrackOutputsToMaster'/>
- <menuitem action='ManuallyConnectNewTrackOutputs'/>
+ <menuitem action='OutputAutoConnectPhysical'/>
+ <menuitem action='OutputAutoConnectMaster'/>
+ <menuitem action='OutputAutoConnectManual'/>
</menu>
<menu action='ControlSurfaces'/>
<menu action='Monitoring'>
@@ -277,7 +278,6 @@
<menuitem action='toggle-xfades-active'/>
<menuitem action='toggle-xfades-visible'/>
<menuitem action='toggle-auto-xfades'/>
- <menuitem action='UnmuteNewFullCrossfades'/>
<separator/>
<menuitem action='CrossfadesFull'/>
<menuitem action='CrossfadesShort'/>
@@ -291,8 +291,6 @@
<menuitem action='SendMTC'/>
<menuitem action='SendMMC'/>
<menuitem action='UseMMC'/>
- <menuitem action='SendMIDIfeedback'/>
- <menuitem action='UseMIDIcontrol'/>
<separator/>
<menuitem action='StopPluginsWithTransport'/>
<menuitem action='DoNotRunPluginsWhileRecording'/>
diff --git a/gtk2_ardour/ardour2_ui.rc b/gtk2_ardour/ardour2_ui.rc
index d589f6ce55..abcfd4c262 100644
--- a/gtk2_ardour/ardour2_ui.rc
+++ b/gtk2_ardour/ardour2_ui.rc
@@ -83,6 +83,7 @@ style "default_base" = "medium_text"
GtkWidget::cursor_color = {1.0, 1.0, 1.0 }
GtkButton::default_border = { 0, 0, 0, 0 }
GtkButton::default_outside_border = { 0, 0, 0, 0 }
+ GtkButton::button_relief = GTK_RELIEF_NONE
GtkTreeView::vertical-padding = 0
GtkTreeView::horizontal-padding = 0
@@ -92,8 +93,8 @@ style "default_base" = "medium_text"
fg[INSENSITIVE] = { 0.80, 0.80, 0.80 }
fg[SELECTED] = { 0.80, 0.80, 0.80 }
- bg[NORMAL] = { 0.40, 0.40, 0.40 }
- bg[ACTIVE] = { 0.40, 0.40, 0.40 }
+ bg[NORMAL] = { 0.40, 0.41, 0.41 }
+ bg[ACTIVE] = { 0.40, 0.41, 0.41 }
bg[PRELIGHT] = "#565690"
bg[INSENSITIVE] = { 0.10, 0.10, 0.10 }
bg[SELECTED] = { 0, 0.40, 0.60 }
@@ -111,9 +112,9 @@ style "default_base" = "medium_text"
base[SELECTED] = { 0.25, 0.25, 0.25 }
engine "clearlooks" {
- menubarstyle = 1 # 0 = flat, 1 = sunken, 2 = flat gradient
- menuitemstyle = 1 # 0 = flat, 1 = 3d-ish (gradient), 2 = 3d-ish (button)
- listviewitemstyle = 1 # 0 = flat, 1 = 3d-ish (gradient)
+ menubarstyle = 0 # 0 = flat, 1 = sunken, 2 = flat gradient
+ menuitemstyle = 0 # 0 = flat, 1 = 3d-ish (gradient), 2 = 3d-ish (button)
+ listviewitemstyle = 0 # 0 = flat, 1 = 3d-ish (gradient)
progressbarstyle = 0 # 0 = candy bar, 1 = flat
}
}
@@ -217,6 +218,7 @@ style "mute_button" = "small_button"
bg[ACTIVE] = { 1.0, 0.98, 0.53 }
fg[PRELIGHT] = { 0, 0, 0 }
+ fg[ACTIVE] = { 0, 0, 0 }
}
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index f0848e6f89..cc7b43b6b6 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -18,6 +18,9 @@
$Id$
*/
+#define __STDC_FORMAT_MACROS 1
+#include <stdint.h>
+
#include <algorithm>
#include <cmath>
#include <fcntl.h>
@@ -87,7 +90,7 @@ ARDOUR_UI *ARDOUR_UI::theArdourUI = 0;
sigc::signal<void,bool> ARDOUR_UI::Blink;
sigc::signal<void> ARDOUR_UI::RapidScreenUpdate;
sigc::signal<void> ARDOUR_UI::SuperRapidScreenUpdate;
-sigc::signal<void,jack_nframes_t> ARDOUR_UI::Clock;
+sigc::signal<void,nframes_t> ARDOUR_UI::Clock;
ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
@@ -173,16 +176,12 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
shuttle_fract = 0.0;
shuttle_max_speed = 8.0f;
- set_shuttle_units (Percentage);
- set_shuttle_behaviour (Sprung);
-
shuttle_style_menu = 0;
shuttle_unit_menu = 0;
gettimeofday (&last_peak_grab, 0);
gettimeofday (&last_shuttle_request, 0);
- ARDOUR::AudioDiskstream::DeleteSources.connect (mem_fun(*this, &ARDOUR_UI::delete_sources_in_the_right_thread));
ARDOUR::Diskstream::DiskOverrun.connect (mem_fun(*this, &ARDOUR_UI::disk_overrun_handler));
ARDOUR::Diskstream::DiskUnderrun.connect (mem_fun(*this, &ARDOUR_UI::disk_underrun_handler));
@@ -492,7 +491,7 @@ ARDOUR_UI::every_point_zero_one_seconds ()
}
void
-ARDOUR_UI::update_sample_rate (jack_nframes_t ignored)
+ARDOUR_UI::update_sample_rate (nframes_t ignored)
{
char buf[32];
@@ -504,7 +503,7 @@ ARDOUR_UI::update_sample_rate (jack_nframes_t ignored)
} else {
- jack_nframes_t rate = engine->frame_rate();
+ nframes_t rate = engine->frame_rate();
if (fmod (rate, 1000.0) != 0.0) {
snprintf (buf, sizeof (buf), _("%.1f kHz / %4.1f msecs"),
@@ -558,7 +557,7 @@ ARDOUR_UI::update_disk_space()
return;
}
- jack_nframes_t frames = session->available_capture_duration();
+ nframes_t frames = session->available_capture_duration();
char buf[64];
if (frames == max_frames) {
@@ -567,23 +566,13 @@ ARDOUR_UI::update_disk_space()
int hrs;
int mins;
int secs;
- jack_nframes_t fr = session->frame_rate();
+ nframes_t fr = session->frame_rate();
- if (session->actively_recording()){
-
- rec_enabled_diskstreams = 0;
- session->foreach_route (this, &ARDOUR_UI::count_recenabled_diskstreams);
-
- if (rec_enabled_diskstreams) {
- frames /= rec_enabled_diskstreams;
- }
-
- } else {
-
- /* hmmm. shall we divide by the route count? or the diskstream count?
- or what? for now, do nothing ...
- */
-
+ rec_enabled_diskstreams = 0;
+ session->foreach_route (this, &ARDOUR_UI::count_recenabled_diskstreams);
+
+ if (rec_enabled_diskstreams) {
+ frames /= rec_enabled_diskstreams;
}
hrs = frames / (fr * 3600);
@@ -968,12 +957,13 @@ restart JACK with more ports."));
}
void
-ARDOUR_UI::do_transport_locate (jack_nframes_t new_position)
+ARDOUR_UI::do_transport_locate (nframes_t new_position)
{
- jack_nframes_t _preroll;
+ nframes_t _preroll = 0;
if (session) {
- _preroll = session->convert_to_frames_at (new_position, session->preroll);
+ // XXX CONFIG_CHANGE FIX - requires AnyTime handling
+ // _preroll = session->convert_to_frames_at (new_position, Config->get_preroll());
if (new_position > _preroll) {
new_position -= _preroll;
@@ -1023,7 +1013,7 @@ void
ARDOUR_UI::transport_goto_end ()
{
if (session) {
- jack_nframes_t frame = session->current_end_frame();
+ nframes_t frame = session->current_end_frame();
session->request_locate (frame);
/* force displayed area in editor to start no matter
@@ -1048,8 +1038,8 @@ ARDOUR_UI::transport_stop ()
return;
}
- if (session->get_auto_loop()) {
- session->request_auto_loop (false);
+ if (Config->get_auto_loop()) {
+ session->request_play_loop (false);
}
session->request_stop ();
@@ -1078,8 +1068,7 @@ ARDOUR_UI::transport_record ()
switch (session->record_status()) {
case Session::Disabled:
if (session->ntracks() == 0) {
- string txt = _("Please create 1 or more track\nbefore trying to record.\nCheck the Session menu.");
- MessageDialog msg (*editor, txt);
+ MessageDialog msg (*editor, _("Please create 1 or more track\nbefore trying to record.\nCheck the Session menu."));
msg.run ();
return;
}
@@ -1103,8 +1092,8 @@ ARDOUR_UI::transport_roll ()
rolling = session->transport_rolling ();
- if (session->get_auto_loop()) {
- session->request_auto_loop (false);
+ if (Config->get_auto_loop()) {
+ session->request_play_loop (false);
auto_loop_button.set_active (false);
roll_button.set_active (true);
} else if (session->get_play_range ()) {
@@ -1121,7 +1110,7 @@ void
ARDOUR_UI::transport_loop()
{
if (session) {
- if (session->get_auto_loop()) {
+ if (Config->get_auto_loop()) {
if (session->transport_rolling()) {
Location * looploc = session->locations()->auto_loop_location();
if (looploc) {
@@ -1130,7 +1119,7 @@ ARDOUR_UI::transport_loop()
}
}
else {
- session->request_auto_loop (true);
+ session->request_play_loop (true);
}
}
}
@@ -1661,11 +1650,9 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
new_session_dialog->reset_recent();
new_session_dialog->show();
- //Glib::RefPtr<Gdk::Window> nsd_window = new_session_dialog->get_window();
-
do {
response = new_session_dialog->run ();
- //nsd_window ->set_cursor(Gdk::Cursor(Gdk::WATCH));
+
if(response == Gtk::RESPONSE_CANCEL || response == Gtk::RESPONSE_DELETE_EVENT) {
quit();
return;
@@ -1682,7 +1669,6 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
if (session_name.empty()) {
response = Gtk::RESPONSE_NONE;
- cerr << "session name is empty\n";
continue;
}
@@ -1697,6 +1683,8 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
} else if (response == Gtk::RESPONSE_OK) {
+ session_name = new_session_dialog->session_name();
+
if (new_session_dialog->get_current_page() == 1) {
/* XXX this is a bit of a hack..
@@ -1707,7 +1695,6 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
if (session_name.empty()) {
response = Gtk::RESPONSE_NONE;
- cerr << "session name is empty 2\n";
continue;
}
@@ -1724,11 +1711,8 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
_session_is_new = true;
- session_name = new_session_dialog->session_name();
-
if (session_name.empty()) {
response = Gtk::RESPONSE_NONE;
- cerr << "session name is empty 3\n";
continue;
}
@@ -1741,7 +1725,7 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
} else {
- std::string session_path = new_session_dialog->session_folder();
+ session_path = new_session_dialog->session_folder();
}
@@ -1760,8 +1744,8 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
uint32_t cchns;
uint32_t mchns;
- Session::AutoConnectOption iconnect;
- Session::AutoConnectOption oconnect;
+ AutoConnectOption iconnect;
+ AutoConnectOption oconnect;
if (new_session_dialog->create_control_bus()) {
cchns = (uint32_t) new_session_dialog->control_channel_count();
@@ -1776,19 +1760,19 @@ ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
}
if (new_session_dialog->connect_inputs()) {
- iconnect = Session::AutoConnectPhysical;
+ iconnect = AutoConnectPhysical;
} else {
- iconnect = Session::AutoConnectOption (0);
+ iconnect = AutoConnectOption (0);
}
/// @todo some minor tweaks.
if (new_session_dialog->connect_outs_to_master()) {
- oconnect = Session::AutoConnectMaster;
+ oconnect = AutoConnectMaster;
} else if (new_session_dialog->connect_outs_to_physical()) {
- oconnect = Session::AutoConnectPhysical;
+ oconnect = AutoConnectPhysical;
} else {
- oconnect = Session::AutoConnectOption (0);
+ oconnect = AutoConnectOption (0);
}
uint32_t nphysin = (uint32_t) new_session_dialog->input_limit_count();
@@ -1857,6 +1841,8 @@ This prevents the session from being loaded."));
connect_to_session (new_session);
+ Config->set_current_owner (ConfigVariableBase::Interface);
+
session_loaded = true;
return 0;
}
@@ -1877,11 +1863,11 @@ int
ARDOUR_UI::build_session (const string & path, const string & snap_name,
uint32_t control_channels,
uint32_t master_channels,
- Session::AutoConnectOption input_connect,
- Session::AutoConnectOption output_connect,
+ AutoConnectOption input_connect,
+ AutoConnectOption output_connect,
uint32_t nphysin,
uint32_t nphysout,
- jack_nframes_t initial_length)
+ nframes_t initial_length)
{
Session *new_session;
int x;
@@ -2162,9 +2148,9 @@ ARDOUR_UI::add_route ()
string name_template = add_route_dialog->name_template ();
bool track = add_route_dialog->track ();
- Session::AutoConnectOption oac = session->get_output_auto_connect();
+ AutoConnectOption oac = Config->get_output_auto_connect();
- if (oac & Session::AutoConnectMaster) {
+ if (oac & AutoConnectMaster) {
output_chan = (session->master_out() ? session->master_out()->n_inputs().get(DataType::AUDIO) : input_chan);
} else {
output_chan = input_chan;
@@ -2248,18 +2234,6 @@ ARDOUR_UI::halt_on_xrun_message ()
msg.run ();
}
-void
-ARDOUR_UI::delete_sources_in_the_right_thread (list<boost::shared_ptr<ARDOUR::Source> >* deletion_list)
-{
- ENSURE_GUI_THREAD (bind (mem_fun(*this, &ARDOUR_UI::delete_sources_in_the_right_thread), deletion_list));
-
- for (list<boost::shared_ptr<Source> >::iterator i = deletion_list->begin(); i != deletion_list->end(); ++i) {
- (*i)->drop_references ();
- }
-
- delete deletion_list;
-}
-
void
ARDOUR_UI::disk_overrun_handler ()
{
@@ -2363,7 +2337,7 @@ ARDOUR_UI::reconnect_to_jack ()
}
void
-ARDOUR_UI::set_jack_buffer_size (jack_nframes_t nframes)
+ARDOUR_UI::set_jack_buffer_size (nframes_t nframes)
{
engine->request_buffer_size (nframes);
update_sample_rate (0);
@@ -2390,72 +2364,6 @@ ARDOUR_UI::cmdline_new_session (string path)
}
void
-ARDOUR_UI::set_native_file_header_format (HeaderFormat hf)
-{
- Glib::RefPtr<Action> act;
-
- switch (hf) {
- case BWF:
- act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatBWF"));
- break;
- case WAVE:
- act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatWAVE"));
- break;
- case WAVE64:
- act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatWAVE64"));
- break;
- case iXML:
- act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatiXML"));
- break;
- case RF64:
- act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatRF64"));
- break;
- case CAF:
- act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatCAF"));
- break;
- case AIFF:
- act = ActionManager::get_action (X_("options"), X_("FileHeaderFormatAIFF"));
- break;
- }
-
- if (act) {
- Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
- if (ract && ract->get_active() && Config->get_native_file_header_format() != hf) {
- Config->set_native_file_header_format (hf);
- if (session) {
- session->reset_native_file_format ();
- }
- }
- }
-}
-
-void
-ARDOUR_UI::set_native_file_data_format (SampleFormat sf)
-{
- Glib::RefPtr<Action> act;
-
- switch (sf) {
- case FormatFloat:
- act = ActionManager::get_action (X_("options"), X_("FileDataFormatFloat"));
- break;
- case FormatInt24:
- act = ActionManager::get_action (X_("options"), X_("FileDataFormat24bit"));
- break;
- }
-
- if (act) {
- Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
-
- if (ract && ract->get_active() && Config->get_native_file_data_format() != sf) {
- Config->set_native_file_data_format (sf);
- if (session) {
- session->reset_native_file_format ();
- }
- }
- }
-}
-
-void
ARDOUR_UI::use_config ()
{
Glib::RefPtr<Action> act;
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index fdaa2d74ca..d3723e87a5 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -112,11 +112,11 @@ class ARDOUR_UI : public Gtkmm2ext::UI
int build_session (const string & path, const string & snapshot,
uint32_t ctl_chns,
uint32_t master_chns,
- ARDOUR::Session::AutoConnectOption input_connect,
- ARDOUR::Session::AutoConnectOption output_connect,
+ ARDOUR::AutoConnectOption input_connect,
+ ARDOUR::AutoConnectOption output_connect,
uint32_t nphysin,
uint32_t nphysout,
- jack_nframes_t initial_length);
+ nframes_t initial_length);
bool session_is_new() const { return _session_is_new; }
ARDOUR::Session* the_session() { return session; }
@@ -159,7 +159,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
static sigc::signal<void,bool> Blink;
static sigc::signal<void> RapidScreenUpdate;
static sigc::signal<void> SuperRapidScreenUpdate;
- static sigc::signal<void,jack_nframes_t> Clock;
+ static sigc::signal<void,nframes_t> Clock;
/* this is a helper function to centralize the (complex) logic for
blinking rec-enable buttons.
@@ -179,7 +179,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void save_ardour_state ();
gboolean configure_handler (GdkEventConfigure* conf);
- void do_transport_locate (jack_nframes_t position);
+ void do_transport_locate (nframes_t position);
void halt_on_xrun_message ();
AudioClock primary_clock;
@@ -379,16 +379,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void toggle_time_master ();
void toggle_video_sync ();
- enum ShuttleBehaviour {
- Sprung,
- Wheel
- };
-
- enum ShuttleUnits {
- Percentage,
- Semitones
- };
-
Gtk::DrawingArea shuttle_box;
Gtk::EventBox speed_display_box;
Gtk::Label speed_display_label;
@@ -396,8 +386,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
Gtk::ComboBoxText shuttle_style_button;
Gtk::Menu* shuttle_unit_menu;
Gtk::Menu* shuttle_style_menu;
- ShuttleBehaviour shuttle_behaviour;
- ShuttleUnits shuttle_units;
float shuttle_max_speed;
Gtk::Menu* shuttle_context_menu;
@@ -405,8 +393,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void show_shuttle_context_menu ();
void shuttle_style_changed();
void shuttle_unit_clicked ();
- void set_shuttle_behaviour (ShuttleBehaviour);
- void set_shuttle_units (ShuttleUnits);
void set_shuttle_max_speed (float);
void update_speed_display ();
float last_speed_displayed;
@@ -517,7 +503,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
Gtk::Label sample_rate_label;
Gtk::EventBox sample_rate_box;
- void update_sample_rate (jack_nframes_t);
+ void update_sample_rate (nframes_t);
gint every_second ();
gint every_point_one_seconds ();
@@ -572,7 +558,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void we_have_dependents ();
void setup_keybindings ();
void setup_session_options ();
- void setup_config_options ();
guint32 last_key_press_time;
@@ -646,8 +631,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI
struct timeval last_peak_grab;
struct timeval last_shuttle_request;
- void delete_sources_in_the_right_thread (list<boost::shared_ptr<ARDOUR::Source> >*);
-
void editor_display_control_changed (Editing::DisplayControl c);
bool have_disk_overrun_displayed;
@@ -662,7 +645,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void disconnect_from_jack ();
void reconnect_to_jack ();
- void set_jack_buffer_size (jack_nframes_t);
+ void set_jack_buffer_size (nframes_t);
Gtk::MenuItem* jack_disconnect_item;
Gtk::MenuItem* jack_reconnect_item;
@@ -677,22 +660,17 @@ class ARDOUR_UI : public Gtkmm2ext::UI
std::vector<std::string> positional_sync_strings;
- void toggle_config_state (const char* group, const char* action, void (ARDOUR::Configuration::*set)(bool));
- void toggle_session_state (const char* group, const char* action, void (ARDOUR::Session::*set)(bool), bool (ARDOUR::Session::*get)(void) const);
- void toggle_session_state (const char* group, const char* action, sigc::slot<void> theSlot);
void toggle_send_midi_feedback ();
void toggle_use_mmc ();
void toggle_send_mmc ();
void toggle_use_midi_control();
void toggle_send_mtc ();
- void toggle_AutoConnectNewTrackInputsToHardware();
- void toggle_AutoConnectNewTrackOutputsToHardware();
- void toggle_AutoConnectNewTrackOutputsToMaster();
- void toggle_ManuallyConnectNewTrackOutputs();
- void toggle_UseHardwareMonitoring();
- void toggle_UseSoftwareMonitoring();
- void toggle_UseExternalMonitoring();
+ void set_input_auto_connect (ARDOUR::AutoConnectOption);
+ void set_output_auto_connect (ARDOUR::AutoConnectOption);
+ void set_solo_model (ARDOUR::SoloModel);
+ void set_monitor_model (ARDOUR::MonitorModel);
+
void toggle_StopPluginsWithTransport();
void toggle_DoNotRunPluginsWhileRecording();
void toggle_VerifyRemoveLastCapture();
@@ -701,16 +679,24 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void toggle_GainReduceFastTransport();
void toggle_LatchedSolo();
void toggle_SoloViaBus();
- void toggle_AutomaticallyCreateCrossfades();
- void toggle_UnmuteNewFullCrossfades();
void toggle_LatchedRecordEnable ();
void mtc_port_changed ();
- void map_some_session_state (const char* group, const char* action, bool (ARDOUR::Session::*get)() const);
- void queue_session_control_changed (ARDOUR::Session::ControlType t);
- void session_control_changed (ARDOUR::Session::ControlType t);
+ void map_solo_model ();
+ void map_monitor_model ();
+ void map_file_header_format ();
+ void map_file_data_format ();
+ void map_input_auto_connect ();
+ void map_output_auto_connect ();
+ void parameter_changed (const char*);
+
+ void set_meter_hold (ARDOUR::MeterHold);
+ void set_meter_falloff (ARDOUR::MeterFalloff);
+ void map_meter_hold ();
+ void map_meter_falloff ();
void toggle_control_protocol (ARDOUR::ControlProtocolInfo*);
+ void toggle_control_protocol_feedback (ARDOUR::ControlProtocolInfo*, const char* group_name, const char* action_name);
};
#endif /* __ardour_gui_h__ */
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index 44287fe61e..7f724312aa 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -130,20 +130,16 @@ ARDOUR_UI::transport_stopped ()
update_disk_space ();
}
-static const double SHUTTLE_FRACT_SPEED1=0.48412291827; /* derived from A1,A2 */
-
void
ARDOUR_UI::transport_rolling ()
{
stop_button.set_active (false);
if (session->get_play_range()) {
-
play_selection_button.set_active (true);
roll_button.set_active (false);
auto_loop_button.set_active (false);
- } else if (session->get_auto_loop ()) {
-
+ } else if (Config->get_auto_loop ()) {
auto_loop_button.set_active (true);
play_selection_button.set_active (false);
roll_button.set_active (false);
@@ -243,29 +239,37 @@ ARDOUR_UI::setup_transport ()
goto_start_button.set_colors (colors);
goto_end_button.set_colors (colors);
+ stop_button.set_size_request(29, -1);
+ roll_button.set_size_request(29, -1);
+ auto_loop_button.set_size_request(29, -1);
+ play_selection_button.set_size_request(29, -1);
+ goto_start_button.set_size_request(29, -1);
+ goto_end_button.set_size_request(29, -1);
+ rec_button.set_size_request(29, -1);
+
Widget* w;
stop_button.set_active (true);
-
- w = manage (new Image (Stock::MEDIA_PREVIOUS, ICON_SIZE_BUTTON));
+
+ w = manage (new Image (get_icon (X_("transport_start"))));
w->show();
goto_start_button.add (*w);
- w = manage (new Image (Stock::MEDIA_NEXT, ICON_SIZE_BUTTON));
+ w = manage (new Image (get_icon (X_("transport_end"))));
w->show();
goto_end_button.add (*w);
- w = manage (new Image (Stock::MEDIA_PLAY, ICON_SIZE_BUTTON));
+ w = manage (new Image (get_icon (X_("transport_play"))));
w->show();
roll_button.add (*w);
- w = manage (new Image (Stock::MEDIA_STOP, ICON_SIZE_BUTTON));
+ w = manage (new Image (get_icon (X_("transport_stop"))));
w->show();
stop_button.add (*w);
- w = manage (new Image (Stock::MEDIA_PLAY, ICON_SIZE_BUTTON));
+ w = manage (new Image (get_icon (X_("transport_range"))));
w->show();
play_selection_button.add (*w);
- w = manage (new Image (Stock::MEDIA_RECORD, ICON_SIZE_BUTTON));
+ w = manage (new Image (get_icon (X_("transport_record"))));
w->show();
rec_button.add (*w);
- w = manage (new Image (get_xpm("loop.xpm")));
+ w = manage (new Image (get_icon (X_("transport_loop"))));
w->show();
auto_loop_button.add (*w);
@@ -359,6 +363,9 @@ ARDOUR_UI::setup_transport ()
auditioning_alert_button.set_name ("TransportAuditioningAlert");
auditioning_alert_button.signal_pressed().connect (mem_fun(*this,&ARDOUR_UI::audition_alert_toggle));
+ tooltips().set_tip (solo_alert_button, _("When active, something is soloed.\nClick to de-solo everything"));
+ tooltips().set_tip (auditioning_alert_button, _("When active, auditioning is taking place\nClick to stop the audition"));
+
alert_box.pack_start (solo_alert_button, false, false);
alert_box.pack_start (auditioning_alert_button, false, false);
@@ -396,9 +403,9 @@ ARDOUR_UI::setup_transport ()
sdframe->add (speed_display_box);
mtc_port_changed ();
- sync_option_combo.set_active_text (positional_sync_strings.front());
sync_option_combo.signal_changed().connect (mem_fun (*this, &ARDOUR_UI::sync_option_changed));
- Gtkmm2ext::set_size_request_to_display_given_text (sync_option_combo, "Internal", 22, 10);
+ const guint32 FUDGE = 25; // Combo's are stupid - they steal space from the entry for the button
+ set_size_request_to_display_given_text (sync_option_combo, X_("Igternal"), 2+FUDGE, 10);
shbox->pack_start (*sdframe, false, false);
shbox->pack_start (shuttle_units_button, true, true);
@@ -456,23 +463,6 @@ ARDOUR_UI::setup_transport ()
}
void
-ARDOUR_UI::setup_clock ()
-{
- ARDOUR_UI::Clock.connect (bind (mem_fun (big_clock, &AudioClock::set), false));
-
- big_clock_window = new Window (WINDOW_TOPLEVEL);
-
- big_clock_window->set_border_width (0);
- big_clock_window->add (big_clock);
- big_clock_window->set_title (_("ardour: clock"));
- big_clock_window->set_type_hint (Gdk::WINDOW_TYPE_HINT_MENU);
- big_clock_window->signal_realize().connect (bind (sigc::ptr_fun (set_decoration), big_clock_window, (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
- big_clock_window->signal_unmap().connect (bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleBigClock")));
-
- manage_window (*big_clock_window);
-}
-
-void
ARDOUR_UI::manage_window (Window& win)
{
win.signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), &win));
@@ -514,7 +504,7 @@ ARDOUR_UI::_auditioning_changed (bool onoff)
void
ARDOUR_UI::auditioning_changed (bool onoff)
{
- Gtkmm2ext::UI::instance()->call_slot(bind (mem_fun(*this, &ARDOUR_UI::_auditioning_changed), onoff));
+ UI::instance()->call_slot(bind (mem_fun(*this, &ARDOUR_UI::_auditioning_changed), onoff));
}
void
@@ -668,8 +658,8 @@ ARDOUR_UI::shuttle_box_button_release (GdkEventButton* ev)
mouse_shuttle (ev->x, true);
shuttle_grabbed = false;
shuttle_box.remove_modal_grab ();
- if (shuttle_behaviour == Sprung) {
- if (session->get_auto_play() || roll_button.get_state()) {
+ if (Config->get_shuttle_behaviour() == Sprung) {
+ if (Config->get_auto_play() || roll_button.get_state()) {
shuttle_fract = SHUTTLE_FRACT_SPEED1;
session->request_transport_speed (1.0);
stop_button.set_active (false);
@@ -829,49 +819,14 @@ ARDOUR_UI::shuttle_unit_clicked ()
}
void
-ARDOUR_UI::set_shuttle_units (ShuttleUnits u)
-{
- switch ((shuttle_units = u)) {
- case Percentage:
- shuttle_units_button.set_label("% ");
- break;
- case Semitones:
- shuttle_units_button.set_label(_("ST"));
- break;
- }
-}
-
-void
ARDOUR_UI::shuttle_style_changed ()
{
ustring str = shuttle_style_button.get_active_text ();
if (str == _("sprung")) {
- set_shuttle_behaviour (Sprung);
+ Config->set_shuttle_behaviour (Sprung);
} else if (str == _("wheel")) {
- set_shuttle_behaviour (Wheel);
- }
-}
-
-
-void
-ARDOUR_UI::set_shuttle_behaviour (ShuttleBehaviour b)
-{
- switch ((shuttle_behaviour = b)) {
- case Sprung:
- shuttle_style_button.set_active_text (_("sprung"));
- shuttle_fract = 0.0;
- shuttle_box.queue_draw ();
- if (session) {
- if (session->transport_rolling()) {
- shuttle_fract = SHUTTLE_FRACT_SPEED1;
- session->request_transport_speed (1.0);
- }
- }
- break;
- case Wheel:
- shuttle_style_button.set_active_text (_("wheel"));
- break;
+ Config->set_shuttle_behaviour (Wheel);
}
}
@@ -892,7 +847,7 @@ ARDOUR_UI::update_speed_display ()
if (x != last_speed_displayed) {
if (x != 0) {
- if (shuttle_units == Percentage) {
+ if (Config->get_shuttle_units() == Percentage) {
snprintf (buf, sizeof (buf), "%.2f", x);
} else {
if (x < 0) {
@@ -920,31 +875,19 @@ ARDOUR_UI::set_transport_sensitivity (bool yn)
void
ARDOUR_UI::editor_realized ()
{
+ Config->map_parameters (mem_fun (*this, &ARDOUR_UI::parameter_changed));
+
set_size_request_to_display_given_text (speed_display_box, _("-0.55"), 2, 2);
- /* XXX: this should really be saved in instant.xml or something similar and restored from there */
- shuttle_style_button.set_active_text (_("sprung"));
- const guint32 FUDGE = 20; // Combo's are stupid - they steal space from the entry for the button
+ const guint32 FUDGE = 25; // Combo's are stupid - they steal space from the entry for the button
set_size_request_to_display_given_text (shuttle_style_button, _("sprung"), 2+FUDGE, 10);
}
void
ARDOUR_UI::sync_option_changed ()
{
- string which;
-
- if (session == 0) {
- return;
+ if (session) {
+ session->request_slave_source (string_to_slave_source (sync_option_combo.get_active_text()));
}
-
- which = sync_option_combo.get_active_text();
-
- if (which == positional_sync_strings[Session::None]) {
- session->request_slave_source (Session::None);
- } else if (which == positional_sync_strings[Session::MTC]) {
- session->request_slave_source (Session::MTC);
- } else if (which == positional_sync_strings[Session::JACK]) {
- session->request_slave_source (Session::JACK);
- }
}
void
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index 5af62db99f..d1931a22d5 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -26,6 +26,8 @@
#include <pbd/pathscanner.h>
+#include <gtkmm2ext/utils.h>
+
#include "ardour_ui.h"
#include "public_editor.h"
#include "audio_clock.h"
@@ -39,10 +41,13 @@
#include "i18n.h"
+using namespace std;
using namespace ARDOUR;
using namespace PBD;
-using namespace Gtk;
using namespace Gtkmm2ext;
+using namespace Gtk;
+using namespace Glib;
+using namespace sigc;
int
ARDOUR_UI::create_editor ()
@@ -81,6 +86,9 @@ ARDOUR_UI::install_actions ()
ActionManager::register_action (main_actions, X_("AudioFileFormatHeader"), _("Header"));
ActionManager::register_action (main_actions, X_("AudioFileFormatData"), _("Data"));
ActionManager::register_action (main_actions, X_("ControlSurfaces"), _("Control Surfaces"));
+ ActionManager::register_action (main_actions, X_("Metering"), _("Metering"));
+ ActionManager::register_action (main_actions, X_("MeteringFallOffRate"), _("Fall off rate"));
+ ActionManager::register_action (main_actions, X_("MeteringHoldTime"), _("Hold Time"));
/* the real actions */
@@ -149,23 +157,23 @@ ARDOUR_UI::install_actions ()
RadioAction::Group jack_latency_group;
- act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency32"), X_("32"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 32));
+ act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency32"), X_("32"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 32));
ActionManager::jack_sensitive_actions.push_back (act);
- act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency64"), X_("64"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 64));
+ act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency64"), X_("64"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 64));
ActionManager::jack_sensitive_actions.push_back (act);
- act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency128"), X_("128"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 128));
+ act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency128"), X_("128"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 128));
ActionManager::jack_sensitive_actions.push_back (act);
- act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency256"), X_("256"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 256));
+ act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency256"), X_("256"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 256));
ActionManager::jack_sensitive_actions.push_back (act);
- act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency512"), X_("512"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 512));
+ act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency512"), X_("512"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 512));
ActionManager::jack_sensitive_actions.push_back (act);
- act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency1024"), X_("1024"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 1024));
+ act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency1024"), X_("1024"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 1024));
ActionManager::jack_sensitive_actions.push_back (act);
- act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency2048"), X_("2048"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 2048));
+ act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency2048"), X_("2048"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 2048));
ActionManager::jack_sensitive_actions.push_back (act);
- act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency4096"), X_("4096"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 4096));
+ act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency4096"), X_("4096"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 4096));
ActionManager::jack_sensitive_actions.push_back (act);
- act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency8192"), X_("8192"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 8192));
+ act = ActionManager::register_radio_action (jack_actions, jack_latency_group, X_("JACKLatency8192"), X_("8192"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (nframes_t) 8192));
ActionManager::jack_sensitive_actions.push_back (act);
/* these actions are intended to be shared across all windows */
@@ -358,8 +366,8 @@ ARDOUR_UI::install_actions ()
Glib::RefPtr<ActionGroup> shuttle_actions = ActionGroup::create ("ShuttleActions");
- shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Percentage));
- shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), bind (mem_fun(*this, &ARDOUR_UI::set_shuttle_units), Semitones));
+ shuttle_actions->add (Action::create (X_("SetShuttleUnitsPercentage"), _("Percentage")), hide_return (bind (mem_fun (*Config, &Configuration::set_shuttle_units), Percentage)));
+ shuttle_actions->add (Action::create (X_("SetShuttleUnitsSemitones"), _("Semitones")), hide_return (bind (mem_fun (*Config, &Configuration::set_shuttle_units), Semitones)));
Glib::RefPtr<ActionGroup> option_actions = ActionGroup::create ("options");
@@ -374,9 +382,37 @@ ARDOUR_UI::install_actions ()
act = ActionManager::register_toggle_action (option_actions, X_("UseMIDIcontrol"), _("Use MIDI control"), mem_fun (*this, &ARDOUR_UI::toggle_use_midi_control));
ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_toggle_action (option_actions, X_("AutoConnectNewTrackInputsToHardware"), _("Connect new track inputs to hardware"), mem_fun (*this, &ARDOUR_UI::toggle_AutoConnectNewTrackInputsToHardware));
+ ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
+ ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
+ ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
+ ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
+ ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
+ ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
+
+ act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not run plugins while recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
+ ActionManager::session_sensitive_actions.push_back (act);
+
+ act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
ActionManager::session_sensitive_actions.push_back (act);
+ /* !!! REMEMBER THAT RADIO ACTIONS HAVE TO BE HANDLED WITH MORE FINESSE THAN SIMPLE TOGGLES !!! */
+
+ RadioAction::Group meter_falloff_group;
+ RadioAction::Group meter_hold_group;
+
+ ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffOff));
+ ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlowest"), _("Slowest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlowest));
+ ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffSlow"), _("Slow"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffSlow));
+ ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffMedium));
+ ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFast"), _("Fast"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFast));
+ ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFaster"), _("Faster"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFaster));
+ ActionManager::register_radio_action (option_actions, meter_falloff_group, X_("MeterFalloffFastest"), _("Fastest"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_falloff), MeterFalloffFastest));
+
+ ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldOff"), _("Off"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldOff));
+ ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldShort"), _("Short"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldShort));
+ ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldMedium"), _("Medium"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldMedium));
+ ActionManager::register_radio_action (option_actions, meter_hold_group, X_("MeterHoldLong"), _("Long"), bind (mem_fun (*this, &ARDOUR_UI::set_meter_hold), MeterHoldLong));
+
RadioAction::Group file_header_group;
act = ActionManager::register_radio_action (option_actions, file_header_group, X_("FileHeaderFormatBWF"), X_("Broadcast WAVE"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_header_format), ARDOUR::BWF));
@@ -391,48 +427,33 @@ ARDOUR_UI::install_actions ()
act = ActionManager::register_radio_action (option_actions, file_data_group, X_("FileDataFormatFloat"), X_("32-bit floating point"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_data_format), ARDOUR::FormatFloat));
act = ActionManager::register_radio_action (option_actions, file_data_group, X_("FileDataFormat24bit"), X_("24-bit signed integer"), bind (mem_fun (*this, &ARDOUR_UI::set_native_file_data_format), ARDOUR::FormatInt24));
- RadioAction::Group connect_outputs_group;
-
- act = ActionManager::register_radio_action (option_actions, connect_outputs_group, X_("AutoConnectNewTrackOutputsToHardware"), _("Connect new track outputs to hardware"), mem_fun (*this, &ARDOUR_UI::toggle_AutoConnectNewTrackOutputsToHardware));
- ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_radio_action (option_actions, connect_outputs_group, X_("AutoConnectNewTrackOutputsToMaster"), _("Connect new track outputs to master"), mem_fun (*this, &ARDOUR_UI::toggle_AutoConnectNewTrackOutputsToMaster));
- ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_radio_action (option_actions, connect_outputs_group, X_("ManuallyConnectNewTrackOutputs"), _("Manually connect new track outputs"), mem_fun (*this, &ARDOUR_UI::toggle_ManuallyConnectNewTrackOutputs));
- ActionManager::session_sensitive_actions.push_back (act);
-
RadioAction::Group monitoring_group;
- act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("Hardware monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseHardwareMonitoring));
- act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Software monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseSoftwareMonitoring));
- act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseExternalMonitoring"), _("External monitoring"), mem_fun (*this, &ARDOUR_UI::toggle_UseExternalMonitoring));
+ act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseHardwareMonitoring"), _("Hardware monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), HardwareMonitoring));
+ act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseSoftwareMonitoring"), _("Software monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), SoftwareMonitoring));
+ act = ActionManager::register_radio_action (option_actions, monitoring_group, X_("UseExternalMonitoring"), _("External monitoring"), bind (mem_fun (*this, &ARDOUR_UI::set_monitor_model), ExternalMonitoring));
- /* Configuration object options (i.e. not session specific) */
-
- ActionManager::register_toggle_action (option_actions, X_("StopPluginsWithTransport"), _("Stop plugins with transport"), mem_fun (*this, &ARDOUR_UI::toggle_StopPluginsWithTransport));
- ActionManager::register_toggle_action (option_actions, X_("VerifyRemoveLastCapture"), _("Verify remove last capture"), mem_fun (*this, &ARDOUR_UI::toggle_VerifyRemoveLastCapture));
- ActionManager::register_toggle_action (option_actions, X_("StopRecordingOnXrun"), _("Stop recording on xrun"), mem_fun (*this, &ARDOUR_UI::toggle_StopRecordingOnXrun));
- ActionManager::register_toggle_action (option_actions, X_("StopTransportAtEndOfSession"), _("Stop transport at session end"), mem_fun (*this, &ARDOUR_UI::toggle_StopTransportAtEndOfSession));
- ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
- ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
+ RadioAction::Group solo_group;
- /* session options */
-
- act = ActionManager::register_toggle_action (option_actions, X_("DoNotRunPluginsWhileRecording"), _("Do not run plugins while recording"), mem_fun (*this, &ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording));
+ act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloInPlace"), _("Solo in-place"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_solo_model), InverseMute)));
ActionManager::session_sensitive_actions.push_back (act);
-
- act = ActionManager::register_toggle_action (option_actions, X_("LatchedSolo"), _("Latched solo"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedSolo));
+ act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloViaBus"), _("Solo via bus"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_solo_model), SoloBus)));
ActionManager::session_sensitive_actions.push_back (act);
- RadioAction::Group solo_group;
+ RadioAction::Group input_auto_connect_group;
- act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloInPlace"), _("Solo in-place"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
+ act = ActionManager::register_radio_action (option_actions, input_auto_connect_group, X_("InputAutoConnectPhysical"), _("Auto-connect inputs to physical inputs"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_input_auto_connect), AutoConnectPhysical)));
ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_radio_action (option_actions, solo_group, X_("SoloViaBus"), _("Solo via bus"), mem_fun (*this, &ARDOUR_UI::toggle_SoloViaBus));
+ act = ActionManager::register_radio_action (option_actions, input_auto_connect_group, X_("InputAutoConnectManual"), _("Manually connect inputs"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_input_auto_connect), (AutoConnectOption) 0)));
ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_action (option_actions, X_("AutomaticallyCreateCrossfades"), _("Automatically create crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_AutomaticallyCreateCrossfades));
+ RadioAction::Group output_auto_connect_group;
+
+ act = ActionManager::register_radio_action (option_actions, output_auto_connect_group, X_("OutputAutoConnectPhysical"), _("Auto-connect outputs to physical outs"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_output_auto_connect), AutoConnectPhysical)));
+ ActionManager::session_sensitive_actions.push_back (act);
+ act = ActionManager::register_radio_action (option_actions, output_auto_connect_group, X_("OutputAutoConnectMaster"), _("Auto-connect outputs to master bus"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_output_auto_connect), AutoConnectMaster)));
ActionManager::session_sensitive_actions.push_back (act);
- act = ActionManager::register_action (option_actions, X_("UnmuteNewFullCrossfades"), _("Unmute new full crossfades"), mem_fun (*this, &ARDOUR_UI::toggle_UnmuteNewFullCrossfades));
+ act = ActionManager::register_radio_action (option_actions, output_auto_connect_group, X_("OutputAutoConnectManual"), _("Manually connect outputs"), hide_return (bind (mem_fun (*this, &ARDOUR_UI::set_output_auto_connect), (AutoConnectOption) 0)));
ActionManager::session_sensitive_actions.push_back (act);
ActionManager::add_action_group (shuttle_actions);
@@ -441,10 +462,6 @@ ARDOUR_UI::install_actions ()
ActionManager::add_action_group (transport_actions);
ActionManager::add_action_group (main_actions);
ActionManager::add_action_group (common_actions);
-
- /* initialize state of non-session dependent options */
-
- setup_config_options ();
}
void
@@ -466,9 +483,35 @@ ARDOUR_UI::toggle_control_protocol (ControlProtocolInfo* cpi)
}
void
+ARDOUR_UI::toggle_control_protocol_feedback (ControlProtocolInfo* cpi, const char* group, const char* action)
+{
+ if (!session) {
+ /* this happens when we build the menu bar when control protocol support
+ has been used in the past for some given protocol - the item needs
+ to be made active, but there is no session yet.
+ */
+ return;
+ }
+
+ if (cpi->protocol) {
+ Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (group, action);
+
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+ bool x = tact->get_active();
+
+ if (tact && x != cpi->protocol->get_feedback()) {
+ cpi->protocol->set_feedback (!x);
+ }
+ }
+ }
+}
+
+void
ARDOUR_UI::build_control_surface_menu ()
{
list<ControlProtocolInfo*>::iterator i;
+ bool with_feedback;
/* !!! this has to match the top level entry from ardour.menus */
@@ -488,6 +531,8 @@ ARDOUR_UI::build_control_surface_menu ()
(bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol), *i)));
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+
+ with_feedback = false;
if ((*i)->protocol || (*i)->requested) {
tact->set_active ();
@@ -496,6 +541,34 @@ ARDOUR_UI::build_control_surface_menu ()
ui += "<menuitem action='";
ui += action_name;
ui += "'/>\n";
+
+ if ((*i)->supports_feedback) {
+
+ string submenu_name = action_name;
+
+ submenu_name += "SubMenu";
+
+ ActionManager::register_action (editor->editor_actions, submenu_name.c_str(), _("Controls"));
+
+ action_name += "Feedback";
+
+ Glib::RefPtr<Action> act = ActionManager::register_toggle_action (editor->editor_actions, action_name.c_str(), _("Feedback"),
+ (bind (mem_fun (*this, &ARDOUR_UI::toggle_control_protocol_feedback),
+ *i,
+ "Editor",
+ action_name.c_str())));
+
+ ui += "<menu action='";
+ ui += submenu_name;
+ ui += "'>\n<menuitem action='";
+ ui += action_name;
+ ui += "'/>\n</menu>\n";
+
+ if ((*i)->protocol) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+ tact->set_active ((*i)->protocol->get_feedback ());
+ }
+ }
}
}
@@ -549,3 +622,24 @@ ARDOUR_UI::build_menu_bar ()
menu_bar_base.set_name ("MainMenuBar");
menu_bar_base.add (menu_hbox);
}
+
+void
+ARDOUR_UI::setup_clock ()
+{
+ ARDOUR_UI::Clock.connect (bind (mem_fun (big_clock, &AudioClock::set), false));
+
+ big_clock_window = new Window (WINDOW_TOPLEVEL);
+
+ big_clock_window->set_border_width (0);
+ big_clock_window->add (big_clock);
+ big_clock_window->set_title (_("ardour: clock"));
+ big_clock_window->set_type_hint (Gdk::WINDOW_TYPE_HINT_MENU);
+ big_clock_window->signal_realize().connect (bind (sigc::ptr_fun (set_decoration), big_clock_window, (Gdk::DECOR_BORDER|Gdk::DECOR_RESIZEH)));
+ big_clock_window->signal_unmap().connect (bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleBigClock")));
+
+ if (editor) {
+ editor->ensure_float (*big_clock_window);
+ }
+
+ manage_window (*big_clock_window);
+}
diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc
index 21afbcde21..82147f04ee 100644
--- a/gtk2_ardour/ardour_ui_options.cc
+++ b/gtk2_ardour/ardour_ui_options.cc
@@ -36,198 +36,258 @@ using namespace Gtk;
using namespace Gtkmm2ext;
using namespace ARDOUR;
using namespace PBD;
-
-void
-ARDOUR_UI::setup_config_options ()
-{
- std::vector<Glib::ustring> groups;
- groups.push_back("options");
- groups.push_back("Editor");
- groups.push_back("Transport");
-
- struct {
- char* name;
- bool (Configuration::*method)(void) const;
- char act_type; //(t)oggle or (r)adio
- } options[] = {
- { "ToggleTimeMaster", &Configuration::get_jack_time_master, 't' },
- { "StopPluginsWithTransport", &Configuration::get_plugins_stop_with_transport, 't' },
- { "LatchedRecordEnable", &Configuration::get_latched_record_enable, 't' },
- { "VerifyRemoveLastCapture", &Configuration::get_verify_remove_last_capture, 't' },
- { "StopRecordingOnXrun", &Configuration::get_stop_recording_on_xrun, 't' },
- { "StopTransportAtEndOfSession", &Configuration::get_stop_at_session_end, 't' },
- { "UseHardwareMonitoring", &Configuration::get_use_hardware_monitoring, 'r' },
- { "UseSoftwareMonitoring", &Configuration::get_use_sw_monitoring, 'r' },
- { "UseExternalMonitoring", &Configuration::get_use_external_monitoring, 'r' },
- { "MeterFalloffOff", &Configuration::get_meter_falloff_off, 'r' },
- { "MeterFalloffSlowest", &Configuration::get_meter_falloff_slowest, 'r' },
- { "MeterFalloffSlow", &Configuration::get_meter_falloff_slow, 'r' },
- { "MeterFalloffMedium", &Configuration::get_meter_falloff_medium, 'r' },
- { "MeterFalloffFast", &Configuration::get_meter_falloff_fast, 'r' },
- { "MeterFalloffFaster", &Configuration::get_meter_falloff_faster, 'r' },
- { "MeterFalloffFastest", &Configuration::get_meter_falloff_fastest, 'r' },
- { "MeterHoldOff", &Configuration::get_meter_hold_off, 'r' },
- { "MeterHoldShort", &Configuration::get_meter_hold_short, 'r' },
- { "MeterHoldMedium", &Configuration::get_meter_hold_medium, 'r' },
- { "MeterHoldLong", &Configuration::get_meter_hold_long, 'r' },
- { "ToggleVideoSync", &Configuration::get_use_video_sync, 't' },
- { 0, 0, 0 }
- };
-
- for (uint32_t n = 0; options[n].name; ++n) {
- for (std::vector<Glib::ustring>::iterator i = groups.begin(); i != groups.end(); i++) {
- Glib::RefPtr<Action> act = ActionManager::get_action (i->c_str(), options[n].name);
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- if (options[n].act_type == 't' || options[n].act_type == 'r') {
- if ((Config->*(options[n].method))()) {
- tact->set_active (true);
- } else {
- tact->set_active (false);
- }
- }
- continue;
- }
- }
- }
-}
+using namespace sigc;
void
ARDOUR_UI::toggle_time_master ()
{
- toggle_config_state ("Transport", "ToggleTimeMaster", &Configuration::set_jack_time_master);
- if (session) {
- session->engine().reset_timebase ();
- }
+ ActionManager::toggle_config_state ("Transport", "ToggleTimeMaster", &Configuration::set_jack_time_master, &Configuration::get_jack_time_master);
}
void
-ARDOUR_UI::toggle_config_state (const char* group, const char* action, void (Configuration::*set)(bool))
+ARDOUR_UI::toggle_send_mtc ()
{
- Glib::RefPtr<Action> act = ActionManager::get_action (group, action);
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- (Config->*set) (tact->get_active());
- }
+ ActionManager::toggle_config_state ("options", "SendMTC", &Configuration::set_send_mtc, &Configuration::get_send_mtc);
}
void
-ARDOUR_UI::toggle_session_state (const char* group, const char* action, void (Session::*set)(bool), bool (Session::*get)(void) const)
+ARDOUR_UI::toggle_send_mmc ()
{
- if (session) {
- Glib::RefPtr<Action> act = ActionManager::get_action (group, action);
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- bool x = (session->*get)();
-
- if (x != tact->get_active()) {
- (session->*set) (!x);
- }
- }
- }
+ ActionManager::toggle_config_state ("options", "SendMMC", &Configuration::set_send_mmc, &Configuration::get_send_mmc);
}
void
-ARDOUR_UI::toggle_session_state (const char* group, const char* action, sigc::slot<void> theSlot)
+ARDOUR_UI::toggle_use_mmc ()
{
- if (session) {
- Glib::RefPtr<Action> act = ActionManager::get_action (group, action);
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- if (tact->get_active()) {
- theSlot ();
- }
- }
- }
+ ActionManager::toggle_config_state ("options", "UseMMC", &Configuration::set_mmc_control, &Configuration::get_mmc_control);
}
void
-ARDOUR_UI::toggle_send_mtc ()
+ARDOUR_UI::toggle_use_midi_control ()
{
- toggle_session_state ("options", "SendMTC", &Session::set_send_mtc, &Session::get_send_mtc);
+ ActionManager::toggle_config_state ("options", "UseMIDIcontrol", &Configuration::set_midi_control, &Configuration::get_midi_control);
}
void
-ARDOUR_UI::toggle_send_mmc ()
+ARDOUR_UI::toggle_send_midi_feedback ()
{
- toggle_session_state ("options", "SendMMC", &Session::set_send_mmc, &Session::get_send_mmc);
+ ActionManager::toggle_config_state ("options", "SendMIDIfeedback", &Configuration::set_midi_feedback, &Configuration::get_midi_feedback);
}
void
-ARDOUR_UI::toggle_use_mmc ()
+ARDOUR_UI::set_native_file_header_format (HeaderFormat hf)
{
- toggle_session_state ("options", "UseMMC", &Session::set_mmc_control, &Session::get_mmc_control);
-}
+ const char *action;
-void
-ARDOUR_UI::toggle_use_midi_control ()
-{
- toggle_session_state ("options", "UseMIDIcontrol", &Session::set_midi_control, &Session::get_midi_control);
+ switch (hf) {
+ case BWF:
+ action = X_("FileHeaderFormatBWF");
+ break;
+ case WAVE:
+ action = X_("FileHeaderFormatWAVE");
+ break;
+ case WAVE64:
+ action = X_("FileHeaderFormatWAVE64");
+ break;
+ case iXML:
+ action = X_("FileHeaderFormatiXML");
+ break;
+ case RF64:
+ action = X_("FileHeaderFormatRF64");
+ break;
+ case CAF:
+ action = X_("FileHeaderFormatCAF");
+ break;
+ case AIFF:
+ action = X_("FileHeaderFormatAIFF");
+ break;
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", action);
+
+ if (act) {
+ Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && ract->get_active() && Config->get_native_file_header_format() != hf) {
+ Config->set_native_file_header_format (hf);
+ }
+ }
}
void
-ARDOUR_UI::toggle_send_midi_feedback ()
+ARDOUR_UI::set_native_file_data_format (SampleFormat sf)
{
- toggle_session_state ("options", "SendMIDIfeedback", &Session::set_midi_feedback, &Session::get_midi_feedback);
+ const char* action;
+
+ switch (sf) {
+ case FormatFloat:
+ action = X_("FileDataFormatFloat");
+ break;
+ case FormatInt24:
+ action = X_("FileDataFormat24bit");
+ break;
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", action);
+
+ if (act) {
+ Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && ract->get_active() && Config->get_native_file_data_format() != sf) {
+ Config->set_native_file_data_format (sf);
+ }
+ }
}
void
-ARDOUR_UI::toggle_AutoConnectNewTrackInputsToHardware()
+ARDOUR_UI::set_input_auto_connect (AutoConnectOption option)
{
- toggle_session_state ("options", "AutoConnectNewTrackInputsToHardware", &Session::set_input_auto_connect, &Session::get_input_auto_connect);
+ const char* action;
+
+ switch (option) {
+ case AutoConnectPhysical:
+ action = X_("InputAutoConnectPhysical");
+ break;
+ default:
+ action = X_("InputAutoConnectManual");
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", action);
+
+ if (act) {
+ Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
+
+ if (ract && ract->get_active() && Config->get_input_auto_connect() != option) {
+ Config->set_input_auto_connect (option);
+ }
+ }
}
+
void
-ARDOUR_UI::toggle_AutoConnectNewTrackOutputsToHardware()
+ARDOUR_UI::set_output_auto_connect (AutoConnectOption option)
{
- toggle_session_state ("options", "AutoConnectNewTrackOutputsToHardware", bind (mem_fun (session, &Session::set_output_auto_connect), Session::AutoConnectPhysical));
+ const char* action;
+
+ switch (option) {
+ case AutoConnectPhysical:
+ action = X_("OutputAutoConnectPhysical");
+ break;
+ case AutoConnectMaster:
+ action = X_("OutputAutoConnectMaster");
+ break;
+ default:
+ action = X_("OutputAutoConnectManual");
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", action);
+
+ if (act) {
+ Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
+
+ if (ract && ract->get_active() && Config->get_output_auto_connect() != option) {
+ Config->set_output_auto_connect (option);
+ }
+ }
}
+
void
-ARDOUR_UI::toggle_AutoConnectNewTrackOutputsToMaster()
+ARDOUR_UI::set_solo_model (SoloModel model)
{
- toggle_session_state ("options", "AutoConnectNewTrackOutputsToHardware", bind (mem_fun (session, &Session::set_output_auto_connect), Session::AutoConnectMaster));
+ const char* action = 0;
+
+ switch (model) {
+ case SoloBus:
+ action = X_("SoloViaBus");
+ break;
+
+ case InverseMute:
+ action = X_("SoloInPlace");
+ break;
+ default:
+ fatal << string_compose (_("programming error: unknown solo model in ARDOUR_UI::set_solo_model: %1"), model) << endmsg;
+ /*NOTREACHED*/
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", action);
+
+ if (act) {
+ Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
+
+ if (ract && ract->get_active() && Config->get_solo_model() != model) {
+ Config->set_solo_model (model);
+ }
+ }
+
}
+
void
-ARDOUR_UI::toggle_ManuallyConnectNewTrackOutputs()
+ARDOUR_UI::set_monitor_model (MonitorModel model)
{
- toggle_session_state ("options", "AutoConnectNewTrackOutputsToHardware", bind (mem_fun (session, &Session::set_output_auto_connect), Session::AutoConnectOption (0)));
+ const char* action = 0;
+
+ switch (model) {
+ case HardwareMonitoring:
+ action = X_("UseHardwareMonitoring");
+ break;
+
+ case SoftwareMonitoring:
+ action = X_("UseSoftwareMonitoring");
+ break;
+ case ExternalMonitoring:
+ action = X_("UseExternalMonitoring");
+ break;
+
+ default:
+ fatal << string_compose (_("programming error: unknown solo model in ARDOUR_UI::set_solo_model: %1"), model) << endmsg;
+ /*NOTREACHED*/
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", action);
+
+ if (act) {
+ Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
+
+ if (ract && ract->get_active() && Config->get_monitoring_model() != model) {
+ Config->set_monitoring_model (model);
+ }
+ }
+
}
void
ARDOUR_UI::toggle_auto_input ()
{
- toggle_session_state ("Transport", "ToggleAutoInput", &Session::set_auto_input, &Session::get_auto_input);
+ ActionManager::toggle_config_state ("Transport", "ToggleAutoInput", &Configuration::set_auto_input, &Configuration::get_auto_input);
}
void
ARDOUR_UI::toggle_auto_play ()
{
- toggle_session_state ("Transport", "ToggleAutoPlay", &Session::set_auto_play, &Session::get_auto_play);
+ ActionManager::toggle_config_state ("Transport", "ToggleAutoPlay", &Configuration::set_auto_play, &Configuration::get_auto_play);
}
void
ARDOUR_UI::toggle_auto_return ()
{
- toggle_session_state ("Transport", "ToggleAutoReturn", &Session::set_auto_return, &Session::get_auto_return);
+ ActionManager::toggle_config_state ("Transport", "ToggleAutoReturn", &Configuration::set_auto_return, &Configuration::get_auto_return);
}
void
ARDOUR_UI::toggle_click ()
{
- toggle_session_state ("Transport", "ToggleClick", &Session::set_clicking, &Session::get_clicking);
+ ActionManager::toggle_config_state ("Transport", "ToggleClick", &Configuration::set_clicking, &Configuration::get_clicking);
}
void
ARDOUR_UI::toggle_session_auto_loop ()
{
if (session) {
- if (session->get_auto_loop()) {
+ if (Config->get_auto_loop()) {
if (session->transport_rolling()) {
transport_roll();
} else {
- session->request_auto_loop (false);
+ session->request_play_loop (false);
}
} else {
- session->request_auto_loop (true);
+ session->request_play_loop (true);
}
}
}
@@ -235,16 +295,16 @@ ARDOUR_UI::toggle_session_auto_loop ()
void
ARDOUR_UI::toggle_punch_in ()
{
- toggle_session_state ("Transport", "TogglePunchIn", &Session::set_punch_in, &Session::get_punch_in);
+ ActionManager::toggle_config_state ("Transport", "TogglePunchIn", &Configuration::set_punch_in, &Configuration::get_punch_in);
}
void
ARDOUR_UI::toggle_punch_out ()
{
- toggle_session_state ("Transport", "TogglePunchOut", &Session::set_punch_out, &Session::get_punch_out);
+ ActionManager::toggle_config_state ("Transport", "TogglePunchOut", &Configuration::set_punch_out, &Configuration::get_punch_out);
}
- void
+void
ARDOUR_UI::toggle_video_sync()
{
Glib::RefPtr<Action> act = ActionManager::get_action ("Transport", "ToggleVideoSync");
@@ -269,138 +329,51 @@ ARDOUR_UI::toggle_editing_space()
}
void
-ARDOUR_UI::toggle_UseHardwareMonitoring()
-{
- Glib::RefPtr<Action> act = ActionManager::get_action ("options", "UseHardwareMonitoring");
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- if (tact->get_active()) {
- Config->set_use_hardware_monitoring (true);
- Config->set_use_sw_monitoring (false);
- Config->set_use_external_monitoring (false);
- if (session) {
- session->reset_input_monitor_state();
- }
- }
- }
-}
-
-void
-ARDOUR_UI::toggle_UseSoftwareMonitoring()
-{
- Glib::RefPtr<Action> act = ActionManager::get_action ("options", "UseSoftwareMonitoring");
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- if (tact->get_active()) {
- Config->set_use_hardware_monitoring (false);
- Config->set_use_sw_monitoring (true);
- Config->set_use_external_monitoring (false);
- if (session) {
- session->reset_input_monitor_state();
- }
- }
- }
-}
-
-void
-ARDOUR_UI::toggle_UseExternalMonitoring()
-{
- Glib::RefPtr<Action> act = ActionManager::get_action ("options", "UseExternalMonitoring");
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- if (tact->get_active()) {
- Config->set_use_hardware_monitoring (false);
- Config->set_use_sw_monitoring (false);
- Config->set_use_external_monitoring (true);
- if (session) {
- session->reset_input_monitor_state();
- }
- }
- }
-}
-
-void
ARDOUR_UI::toggle_StopPluginsWithTransport()
{
- toggle_config_state ("options", "StopPluginsWithTransport", &Configuration::set_plugins_stop_with_transport);
+ ActionManager::toggle_config_state ("options", "StopPluginsWithTransport", &Configuration::set_plugins_stop_with_transport, &Configuration::get_plugins_stop_with_transport);
}
void
ARDOUR_UI::toggle_LatchedRecordEnable()
{
- toggle_config_state ("options", "LatchedRecordEnable", &Configuration::set_latched_record_enable);
+ ActionManager::toggle_config_state ("options", "LatchedRecordEnable", &Configuration::set_latched_record_enable, &Configuration::get_latched_record_enable);
}
void
ARDOUR_UI::toggle_DoNotRunPluginsWhileRecording()
{
- toggle_session_state ("options", "DoNotRunPluginsWhileRecording", &Session::set_do_not_record_plugins, &Session::get_do_not_record_plugins);
+ ActionManager::toggle_config_state ("options", "DoNotRunPluginsWhileRecording", &Configuration::set_do_not_record_plugins, &Configuration::get_do_not_record_plugins);
}
void
ARDOUR_UI::toggle_VerifyRemoveLastCapture()
{
- toggle_config_state ("options", "VerifyRemoveLastCapture", &Configuration::set_verify_remove_last_capture);
+ ActionManager::toggle_config_state ("options", "VerifyRemoveLastCapture", &Configuration::set_verify_remove_last_capture, &Configuration::get_verify_remove_last_capture);
}
void
ARDOUR_UI::toggle_StopRecordingOnXrun()
{
- toggle_config_state ("options", "StopRecordingOnXrun", &Configuration::set_stop_recording_on_xrun);
+ ActionManager::toggle_config_state ("options", "StopRecordingOnXrun", &Configuration::set_stop_recording_on_xrun, &Configuration::get_stop_recording_on_xrun);
}
void
ARDOUR_UI::toggle_StopTransportAtEndOfSession()
{
- toggle_config_state ("options", "StopTransportAtEndOfSession", &Configuration::set_stop_at_session_end);
+ ActionManager::toggle_config_state ("options", "StopTransportAtEndOfSession", &Configuration::set_stop_at_session_end, &Configuration::get_stop_at_session_end);
}
void
ARDOUR_UI::toggle_GainReduceFastTransport()
{
- Glib::RefPtr<Action> act = ActionManager::get_action ("options", "GainReduceFastTransport");
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- if (tact->get_active()) {
- Config->set_quieten_at_speed (0.251189); // -12dB reduction for ffwd or rewind
- } else {
- Config->set_quieten_at_speed (1.0); /* no change */
- }
- }
+ ActionManager::toggle_config_state ("options", "GainReduceFastTransport", &Configuration::set_quieten_at_speed, &Configuration::get_quieten_at_speed);
}
void
ARDOUR_UI::toggle_LatchedSolo()
{
- toggle_session_state ("options", "LatchedSolo", &Session::set_solo_latched, &Session::solo_latched);
-}
-
-void
-ARDOUR_UI::toggle_SoloViaBus()
-{
- if (!session) {
- return;
- }
-
- Glib::RefPtr<Action> act = ActionManager::get_action ("options", "SoloViaBus");
- if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
-
- if (tact->get_active()) {
- session->set_solo_model (Session::SoloBus);
- } else {
- session->set_solo_model (Session::InverseMute);
- }
- }
-}
-
-void
-ARDOUR_UI::toggle_AutomaticallyCreateCrossfades()
-{
-}
-void
-ARDOUR_UI::toggle_UnmuteNewFullCrossfades()
-{
+ ActionManager::toggle_config_state ("options", "LatchedSolo", &Configuration::set_solo_latched, &Configuration::get_solo_latched);
}
void
@@ -418,24 +391,12 @@ ARDOUR_UI::mtc_port_changed ()
have_mtc = false;
}
+ positional_sync_strings.clear ();
+ positional_sync_strings.push_back (slave_source_to_string (None));
if (have_mtc) {
- const gchar *psync_strings[] = {
- N_("Internal"),
- N_("MTC"),
- N_("JACK"),
- 0
- };
-
- positional_sync_strings = PBD::internationalize (psync_strings);
-
- } else {
- const gchar *psync_strings[] = {
- N_("Internal"),
- N_("JACK"),
- 0
- };
- positional_sync_strings = PBD::internationalize (psync_strings);
+ positional_sync_strings.push_back (slave_source_to_string (MTC));
}
+ positional_sync_strings.push_back (slave_source_to_string (JACK));
set_popdown_strings (sync_option_combo, positional_sync_strings);
}
@@ -445,147 +406,443 @@ ARDOUR_UI::setup_session_options ()
{
mtc_port_changed ();
- session_control_changed (Session::SlaveType);
- session_control_changed (Session::SendMTC);
- session_control_changed (Session::SendMMC);
- session_control_changed (Session::MMCControl);
- session_control_changed (Session::MidiFeedback);
- session_control_changed (Session::MidiControl);
- session_control_changed (Session::RecordingPlugins);
- session_control_changed (Session::CrossFadesActive);
- session_control_changed (Session::SoloLatch);
- session_control_changed (Session::SoloingModel);
- session_control_changed (Session::LayeringModel);
- session_control_changed (Session::CrossfadingModel);
- session_control_changed (Session::PunchOut);
- session_control_changed (Session::PunchIn);
- session_control_changed (Session::AutoPlay);
- session_control_changed (Session::AutoReturn);
- session_control_changed (Session::AutoInput);
- session_control_changed (Session::Clicking);
- session_control_changed (Session::SmpteMode);
-
- session->ControlChanged.connect (mem_fun (*this, &ARDOUR_UI::queue_session_control_changed));
+ Config->ParameterChanged.connect (mem_fun (*this, &ARDOUR_UI::parameter_changed));
}
+
void
-ARDOUR_UI::map_some_session_state (const char* group, const char* action, bool (Session::*get)() const)
+ARDOUR_UI::map_solo_model ()
{
- if (!session) {
- return;
+ const char* on;
+
+ if (Config->get_solo_model() == InverseMute) {
+ on = "SoloInPlace";
+ } else {
+ on = "SoloViaBus";
}
- Glib::RefPtr<Action> act = ActionManager::get_action (group, action);
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", on);
if (act) {
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- bool x = (session->*get)();
- if (tact->get_active() != x) {
- tact->set_active (x);
+
+ if (tact && !tact->get_active()) {
+ tact->set_active (true);
}
}
}
void
-ARDOUR_UI::queue_session_control_changed (Session::ControlType t)
+ARDOUR_UI::map_monitor_model ()
{
- ENSURE_GUI_THREAD (bind (mem_fun (*this, &ARDOUR_UI::session_control_changed), t));
+ const char* on = 0;
+
+ switch (Config->get_monitoring_model()) {
+ case HardwareMonitoring:
+ on = X_("UseHardwareMonitoring");
+ break;
+ case SoftwareMonitoring:
+ on = X_("UseSoftwareMonitoring");
+ break;
+ case ExternalMonitoring:
+ on = X_("UseExternalMonitoring");
+ break;
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", on);
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+
+ if (tact && !tact->get_active()) {
+ tact->set_active (true);
+ }
+ }
}
void
-ARDOUR_UI::session_control_changed (Session::ControlType t)
+ARDOUR_UI::map_file_header_format ()
{
- switch (t) {
- case Session::SlaveType:
- switch (session->slave_source()) {
- case Session::None:
- sync_option_combo.set_active_text (_("Internal"));
- break;
- case Session::MTC:
- sync_option_combo.set_active_text (_("MTC"));
- break;
- case Session::JACK:
- sync_option_combo.set_active_text (_("JACK"));
- break;
- }
-
- break;
+ const char* action = 0;
- case Session::SendMTC:
- map_some_session_state ("options", "SendMTC", &Session::get_send_mtc);
+ switch (Config->get_native_file_header_format()) {
+ case BWF:
+ action = X_("FileHeaderFormatBWF");
break;
- case Session::SendMMC:
- map_some_session_state ("options", "SendMMC", &Session::get_send_mmc);
+ case WAVE:
+ action = X_("FileHeaderFormatWAVE");
break;
- case Session::MMCControl:
- map_some_session_state ("options", "UseMMC", &Session::get_mmc_control);
+ case WAVE64:
+ action = X_("FileHeaderFormatWAVE64");
break;
- case Session::MidiFeedback:
- map_some_session_state ("options", "SendMIDIfeedback", &Session::get_midi_feedback);
+ case iXML:
+ action = X_("FileHeaderFormatiXML");
break;
- case Session::MidiControl:
- map_some_session_state ("options", "UseMIDIcontrol", &Session::get_midi_control);
+ case RF64:
+ action = X_("FileHeaderFormatRF64");
break;
- case Session::RecordingPlugins:
- map_some_session_state ("options", "DoNotRunPluginsWhileRecording", &Session::get_do_not_record_plugins);
+ case CAF:
+ action = X_("FileHeaderFormatCAF");
break;
- case Session::CrossFadesActive:
- map_some_session_state ("options", "CrossfadesActive", &Session::get_crossfades_active);
- break;
+ default:
+ fatal << string_compose (_("programming error: unknown file header format passed to ARDOUR_UI::map_file_data_format: %1"),
+ Config->get_native_file_header_format()) << endmsg;
+ /*NOTREACHED*/
+ }
- case Session::SoloLatch:
- break;
- case Session::SoloingModel:
- switch (session->solo_model()) {
- case Session::InverseMute:
- break;
- case Session::SoloBus:
- break;
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", action);
+
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+
+ if (tact && !tact->get_active()) {
+ tact->set_active (true);
}
- break;
+ }
+}
- case Session::LayeringModel:
- break;
+void
+ARDOUR_UI::map_file_data_format ()
+{
+ const char* action = 0;
- case Session::CrossfadingModel:
+ switch (Config->get_native_file_data_format()) {
+ case FormatFloat:
+ action = X_("FileDataFormatFloat");
break;
- case Session::AutoPlay:
- map_some_session_state ("Transport", "ToggleAutoPlay", &Session::get_auto_play);
+ case FormatInt24:
+ action = X_("FileDataFormat24bit");
break;
- case Session::AutoLoop:
- break;
+ default:
+ fatal << string_compose (_("programming error: unknown file data format passed to ARDOUR_UI::map_file_data_format: %1"),
+ Config->get_native_file_data_format()) << endmsg;
+ /*NOTREACHED*/
+ }
- case Session::AutoReturn:
- map_some_session_state ("Transport", "ToggleAutoReturn", &Session::get_auto_return);
- break;
- case Session::AutoInput:
- map_some_session_state ("Transport", "ToggleAutoInput", &Session::get_auto_input);
- break;
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", action);
- case Session::PunchOut:
- map_some_session_state ("Transport", "TogglePunchOut", &Session::get_punch_out);
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+
+ if (tact && !tact->get_active()) {
+ tact->set_active (true);
+ }
+ }
+}
+
+void
+ARDOUR_UI::map_input_auto_connect ()
+{
+ const char* on;
+
+ if (Config->get_input_auto_connect() == (AutoConnectOption) 0) {
+ on = "InputAutoConnectManual";
+ } else {
+ on = "InputAutoConnectPhysical";
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", on);
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+
+ if (tact && !tact->get_active()) {
+ tact->set_active (true);
+ }
+ }
+}
+
+void
+ARDOUR_UI::map_output_auto_connect ()
+{
+ const char* on;
+
+ if (Config->get_output_auto_connect() == (AutoConnectOption) 0) {
+ on = "OutputAutoConnectManual";
+ } else if (Config->get_output_auto_connect() == AutoConnectPhysical) {
+ on = "OutputAutoConnectPhysical";
+ } else {
+ on = "OutputAutoConnectMaster";
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action ("options", on);
+ if (act) {
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+
+ if (tact && !tact->get_active()) {
+ tact->set_active (true);
+ }
+ }
+}
+
+void
+ARDOUR_UI::map_meter_falloff ()
+{
+ const char* action = X_("MeterFalloffMedium");
+
+ /* XXX hack alert. Fix this. Please */
+
+ float val = Config->get_meter_falloff ();
+ MeterFalloff code = (MeterFalloff) (int) (floor (val));
+
+ switch (code) {
+ case MeterFalloffOff:
+ action = X_("MeterFalloffOff");
+ break;
+ case MeterFalloffSlowest:
+ action = X_("MeterFalloffSlowest");
+ break;
+ case MeterFalloffSlow:
+ action = X_("MeterFalloffSlow");
+ break;
+ case MeterFalloffMedium:
+ action = X_("MeterFalloffMedium");
+ break;
+ case MeterFalloffFast:
+ action = X_("MeterFalloffFast");
break;
+ case MeterFalloffFaster:
+ action = X_("MeterFalloffFaster");
+ break;
+ case MeterFalloffFastest:
+ action = X_("MeterFalloffFastest");
+ break;
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action (X_("options"), action);
+
+ if (act) {
+ Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && !ract->get_active()) {
+ ract->set_active (true);
+ }
+ }
+}
- case Session::PunchIn:
- map_some_session_state ("Transport", "TogglePunchIn", &Session::get_punch_in);
+void
+ARDOUR_UI::map_meter_hold ()
+{
+ const char* action = X_("MeterHoldMedium");
+
+ /* XXX hack alert. Fix this. Please */
+
+ float val = Config->get_meter_hold ();
+ MeterHold code = (MeterHold) (int) (floor (val));
+
+ switch (code) {
+ case MeterHoldOff:
+ action = X_("MeterHoldOff");
+ break;
+ case MeterHoldShort:
+ action = X_("MeterHoldShort");
break;
+ case MeterHoldMedium:
+ action = X_("MeterHoldMedium");
+ break;
+ case MeterHoldLong:
+ action = X_("MeterHoldLong");
+ break;
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action (X_("options"), action);
+
+ if (act) {
+ Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && !ract->get_active()) {
+ ract->set_active (true);
+ }
+ }
+}
+
+void
+ARDOUR_UI::set_meter_hold (MeterHold val)
+{
+ const char* action = 0;
+ float fval;
+
+ fval = meter_hold_to_float (val);
- case Session::Clicking:
- map_some_session_state ("Transport", "ToggleClick", &Session::get_clicking);
+ switch (val) {
+ case MeterHoldOff:
+ action = X_("MeterHoldOff");
+ break;
+ case MeterHoldShort:
+ action = X_("MeterHoldShort");
+ break;
+ case MeterHoldMedium:
+ action = X_("MeterHoldMedium");
+ break;
+ case MeterHoldLong:
+ action = X_("MeterHoldLong");
break;
+ }
- default:
- // somebody else handles this
+ Glib::RefPtr<Action> act = ActionManager::get_action (X_("options"), action);
+
+ if (act) {
+ Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && ract->get_active() && Config->get_meter_hold() != fval) {
+ Config->set_meter_hold (fval);
+ }
+ }
+}
+
+void
+ARDOUR_UI::set_meter_falloff (MeterFalloff val)
+{
+ const char* action = 0;
+ float fval;
+
+ fval = meter_falloff_to_float (val);
+
+ switch (val) {
+ case MeterFalloffOff:
+ action = X_("MeterFalloffOff");
+ break;
+ case MeterFalloffSlowest:
+ action = X_("MeterFalloffSlowest");
+ break;
+ case MeterFalloffSlow:
+ action = X_("MeterFalloffSlow");
+ break;
+ case MeterFalloffMedium:
+ action = X_("MeterFalloffMedium");
break;
+ case MeterFalloffFast:
+ action = X_("MeterFalloffFast");
+ break;
+ case MeterFalloffFaster:
+ action = X_("MeterFalloffFaster");
+ break;
+ case MeterFalloffFastest:
+ action = X_("MeterFalloffFastest");
+ break;
+ }
+
+ Glib::RefPtr<Action> act = ActionManager::get_action (X_("options"), action);
+ if (act) {
+ Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && ract->get_active() && Config->get_meter_falloff () != fval) {
+ Config->set_meter_falloff (fval);
+ }
+ }
+}
+
+void
+ARDOUR_UI::parameter_changed (const char* parameter_name)
+{
+#define PARAM_IS(x) (!strcmp (parameter_name, (x)))
+
+ if (PARAM_IS ("slave-source")) {
+
+ sync_option_combo.set_active_text (slave_source_to_string (Config->get_slave_source()));
+
+ } else if (PARAM_IS ("send-mtc")) {
+
+ ActionManager::map_some_state ("options", "SendMTC", &Configuration::get_send_mtc);
+
+ } else if (PARAM_IS ("send-mmc")) {
+
+ ActionManager::map_some_state ("options", "SendMMC", &Configuration::get_send_mmc);
+
+ } else if (PARAM_IS ("mmc-control")) {
+ ActionManager::map_some_state ("options", "UseMMC", &Configuration::get_mmc_control);
+ } else if (PARAM_IS ("midi-feedback")) {
+ ActionManager::map_some_state ("options", "SendMIDIfeedback", &Configuration::get_midi_feedback);
+ } else if (PARAM_IS ("midi-control")) {
+ ActionManager::map_some_state ("options", "UseMIDIcontrol", &Configuration::get_midi_control);
+ } else if (PARAM_IS ("do-not-record-plugins")) {
+ ActionManager::map_some_state ("options", "DoNotRunPluginsWhileRecording", &Configuration::get_do_not_record_plugins);
+ } else if (PARAM_IS ("latched-record-enable")) {
+ ActionManager::map_some_state ("options", "LatchedRecordEnable", &Configuration::get_latched_record_enable);
+ } else if (PARAM_IS ("solo-latched")) {
+ ActionManager::map_some_state ("options", "LatchedSolo", &Configuration::get_solo_latched);
+ } else if (PARAM_IS ("solo-model")) {
+ map_solo_model ();
+ } else if (PARAM_IS ("auto-play")) {
+ ActionManager::map_some_state ("Transport", "ToggleAutoPlay", &Configuration::get_auto_play);
+ } else if (PARAM_IS ("auto-loop")) {
+ ActionManager::map_some_state ("Transport", "Loop", &Configuration::get_auto_loop);
+ } else if (PARAM_IS ("auto-return")) {
+ ActionManager::map_some_state ("Transport", "ToggleAutoReturn", &Configuration::get_auto_return);
+ } else if (PARAM_IS ("auto-input")) {
+ ActionManager::map_some_state ("Transport", "ToggleAutoInput", &Configuration::get_auto_input);
+ } else if (PARAM_IS ("punch-out")) {
+ ActionManager::map_some_state ("Transport", "TogglePunchOut", &Configuration::get_punch_out);
+ } else if (PARAM_IS ("punch-in")) {
+ ActionManager::map_some_state ("Transport", "TogglePunchIn", &Configuration::get_punch_in);
+ } else if (PARAM_IS ("clicking")) {
+ ActionManager::map_some_state ("Transport", "ToggleClick", &Configuration::get_clicking);
+ } else if (PARAM_IS ("jack-time-master")) {
+ ActionManager::map_some_state ("Transport", "ToggleTimeMaster", &Configuration::get_jack_time_master);
+ } else if (PARAM_IS ("plugins-stop-with-transport")) {
+ ActionManager::map_some_state ("options", "StopPluginsWithTransport", &Configuration::get_plugins_stop_with_transport);
+ } else if (PARAM_IS ("latched-record-enable")) {
+ ActionManager::map_some_state ("options", "LatchedRecordEnable", &Configuration::get_latched_record_enable);
+ } else if (PARAM_IS ("verify-remove-last-capture")) {
+ ActionManager::map_some_state ("options", "VerifyRemoveLastCapture", &Configuration::get_verify_remove_last_capture);
+ } else if (PARAM_IS ("stop-recording-on-xrun")) {
+ ActionManager::map_some_state ("options", "StopRecordingOnXrun", &Configuration::get_stop_recording_on_xrun);
+ } else if (PARAM_IS ("stop-at-session-end")) {
+ ActionManager::map_some_state ("options", "StopTransportAtEndOfSession", &Configuration::get_stop_at_session_end);
+ } else if (PARAM_IS ("monitoring-model")) {
+ map_monitor_model ();
+ } else if (PARAM_IS ("use-video-sync")) {
+ ActionManager::map_some_state ("Transport", "ToggleVideoSync", &Configuration::get_use_video_sync);
+ } else if (PARAM_IS ("quieten-at-speed")) {
+ ActionManager::map_some_state ("options", "GainReduceFastTransport", &Configuration::get_quieten_at_speed);
+ } else if (PARAM_IS ("shuttle-behaviour")) {
+
+ switch (Config->get_shuttle_behaviour ()) {
+ case Sprung:
+ shuttle_style_button.set_active_text (_("sprung"));
+ shuttle_fract = 0.0;
+ shuttle_box.queue_draw ();
+ if (session) {
+ if (session->transport_rolling()) {
+ shuttle_fract = SHUTTLE_FRACT_SPEED1;
+ session->request_transport_speed (1.0);
+ }
+ }
+ break;
+ case Wheel:
+ shuttle_style_button.set_active_text (_("wheel"));
+ break;
+ }
+
+ } else if (PARAM_IS ("shuttle-units")) {
+
+ switch (Config->get_shuttle_units()) {
+ case Percentage:
+ shuttle_units_button.set_label("% ");
+ break;
+ case Semitones:
+ shuttle_units_button.set_label(_("ST"));
+ break;
+ }
+ } else if (PARAM_IS ("input-auto-connect")) {
+ map_input_auto_connect ();
+ } else if (PARAM_IS ("output-auto-connect")) {
+ map_output_auto_connect ();
+ } else if (PARAM_IS ("native-file-header-format")) {
+ map_file_header_format ();
+ } else if (PARAM_IS ("native-file-data-format")) {
+ map_file_data_format ();
+ } else if (PARAM_IS ("meter-hold")) {
+ map_meter_hold ();
+ } else if (PARAM_IS ("meter-falloff")) {
+ map_meter_falloff ();
+ } else if (PARAM_IS ("verify-remove-last-capture")) {
+ ActionManager::map_some_state ("options", "VerifyRemoveLastCapture", &Configuration::get_verify_remove_last_capture);
}
+
+#undef PARAM_IS
}
diff --git a/gtk2_ardour/arval b/gtk2_ardour/arval
index cea6299d05..a1dc501d3f 100755
--- a/gtk2_ardour/arval
+++ b/gtk2_ardour/arval
@@ -1,3 +1,4 @@
#!/bin/sh
-source ardev_common.sh
+. ardev_common.sh
+export ARDOUR_RUNNING_UNDER_VALGRIND=TRUE
exec valgrind --num-callers=50 --tool=memcheck gtk2_ardour/ardour.bin --novst $*
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index 8c6f3a7d82..575f45ca38 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -326,38 +326,11 @@ AudioClock::on_realize ()
/* styles are not available until the widgets are bound to a window */
- switch (_mode) {
- case SMPTE:
- Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2);
- break;
-
- case BBT:
- Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2);
- break;
-
- case MinSec:
- Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99", 0, 2);
- break;
-
- case Frames:
- Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2);
- break;
-
- case Off:
- break;
-
- }
+ set_size_requests ();
}
void
-AudioClock::set (jack_nframes_t when, bool force)
+AudioClock::set (nframes_t when, bool force)
{
if ((!force && !is_visible()) || session == 0) {
@@ -395,7 +368,7 @@ AudioClock::set (jack_nframes_t when, bool force)
void
AudioClock::smpte_offset_changed ()
{
- jack_nframes_t current;
+ nframes_t current;
switch (_mode) {
case SMPTE:
@@ -412,7 +385,7 @@ AudioClock::smpte_offset_changed ()
}
void
-AudioClock::set_frames (jack_nframes_t when, bool force)
+AudioClock::set_frames (nframes_t when, bool force)
{
char buf[32];
snprintf (buf, sizeof (buf), "%u", when);
@@ -420,29 +393,29 @@ AudioClock::set_frames (jack_nframes_t when, bool force)
}
void
-AudioClock::set_minsec (jack_nframes_t when, bool force)
+AudioClock::set_minsec (nframes_t when, bool force)
{
char buf[32];
- jack_nframes_t left;
+ nframes_t left;
int hrs;
int mins;
float secs;
left = when;
hrs = (int) floor (left / (session->frame_rate() * 60.0f * 60.0f));
- left -= (jack_nframes_t) floor (hrs * session->frame_rate() * 60.0f * 60.0f);
+ left -= (nframes_t) floor (hrs * session->frame_rate() * 60.0f * 60.0f);
mins = (int) floor (left / (session->frame_rate() * 60.0f));
- left -= (jack_nframes_t) floor (mins * session->frame_rate() * 60.0f);
+ left -= (nframes_t) floor (mins * session->frame_rate() * 60.0f);
secs = left / (float) session->frame_rate();
if (force || hrs != ms_last_hrs) {
- sprintf (buf, "%d", hrs);
+ sprintf (buf, "%02d", hrs);
ms_hours_label.set_text (buf);
ms_last_hrs = hrs;
}
if (force || mins != ms_last_mins) {
- sprintf (buf, "%d", mins);
+ sprintf (buf, "%02d", mins);
ms_minutes_label.set_text (buf);
ms_last_mins = mins;
}
@@ -455,7 +428,7 @@ AudioClock::set_minsec (jack_nframes_t when, bool force)
}
void
-AudioClock::set_smpte (jack_nframes_t when, bool force)
+AudioClock::set_smpte (nframes_t when, bool force)
{
char buf[32];
SMPTE::Time smpte;
@@ -497,7 +470,7 @@ AudioClock::set_smpte (jack_nframes_t when, bool force)
}
void
-AudioClock::set_bbt (jack_nframes_t when, bool force)
+AudioClock::set_bbt (nframes_t when, bool force)
{
char buf[16];
BBT_Time bbt;
@@ -952,7 +925,7 @@ AudioClock::field_button_press_event (GdkEventButton *ev, Field field)
{
if (session == 0) return FALSE;
- jack_nframes_t frames = 0;
+ nframes_t frames = 0;
switch (ev->button) {
case 1:
@@ -1029,7 +1002,7 @@ AudioClock::field_button_scroll_event (GdkEventScroll *ev, Field field)
{
if (session == 0) return FALSE;
- jack_nframes_t frames = 0;
+ nframes_t frames = 0;
switch (ev->direction) {
@@ -1098,8 +1071,8 @@ AudioClock::field_motion_notify_event (GdkEventMotion *ev, Field field)
if (trunc(drag_accum) != 0) {
- jack_nframes_t frames;
- jack_nframes_t pos ;
+ nframes_t frames;
+ nframes_t pos ;
int dir;
dir = (drag_accum < 0 ? 1:-1);
pos = current_time();
@@ -1107,7 +1080,7 @@ AudioClock::field_motion_notify_event (GdkEventMotion *ev, Field field)
if (frames != 0 && frames * drag_accum < current_time()) {
- set ((jack_nframes_t) floor (pos - drag_accum * frames), false); // minus because up is negative in computer-land
+ set ((nframes_t) floor (pos - drag_accum * frames), false); // minus because up is negative in computer-land
} else {
set (0 , false);
@@ -1123,24 +1096,24 @@ AudioClock::field_motion_notify_event (GdkEventMotion *ev, Field field)
return TRUE;
}
-jack_nframes_t
-AudioClock::get_frames (Field field,jack_nframes_t pos,int dir)
+nframes_t
+AudioClock::get_frames (Field field,nframes_t pos,int dir)
{
- jack_nframes_t frames = 0;
+ nframes_t frames = 0;
BBT_Time bbt;
switch (field) {
case SMPTE_Hours:
- frames = (jack_nframes_t) floor (3600.0 * session->frame_rate());
+ frames = (nframes_t) floor (3600.0 * session->frame_rate());
break;
case SMPTE_Minutes:
- frames = (jack_nframes_t) floor (60.0 * session->frame_rate());
+ frames = (nframes_t) floor (60.0 * session->frame_rate());
break;
case SMPTE_Seconds:
frames = session->frame_rate();
break;
case SMPTE_Frames:
- frames = (jack_nframes_t) floor (session->frame_rate() / session->smpte_frames_per_second);
+ frames = (nframes_t) floor (session->frame_rate() / Config->get_smpte_frames_per_second());
break;
case AudioFrames:
@@ -1148,10 +1121,10 @@ AudioClock::get_frames (Field field,jack_nframes_t pos,int dir)
break;
case MS_Hours:
- frames = (jack_nframes_t) floor (3600.0 * session->frame_rate());
+ frames = (nframes_t) floor (3600.0 * session->frame_rate());
break;
case MS_Minutes:
- frames = (jack_nframes_t) floor (60.0 * session->frame_rate());
+ frames = (nframes_t) floor (60.0 * session->frame_rate());
break;
case MS_Seconds:
frames = session->frame_rate();
@@ -1180,10 +1153,10 @@ AudioClock::get_frames (Field field,jack_nframes_t pos,int dir)
return frames;
}
-jack_nframes_t
-AudioClock::current_time (jack_nframes_t pos) const
+nframes_t
+AudioClock::current_time (nframes_t pos) const
{
- jack_nframes_t ret = 0;
+ nframes_t ret = 0;
switch (_mode) {
case SMPTE:
@@ -1208,10 +1181,10 @@ AudioClock::current_time (jack_nframes_t pos) const
return ret;
}
-jack_nframes_t
-AudioClock::current_duration (jack_nframes_t pos) const
+nframes_t
+AudioClock::current_duration (nframes_t pos) const
{
- jack_nframes_t ret = 0;
+ nframes_t ret = 0;
switch (_mode) {
case SMPTE:
@@ -1248,7 +1221,7 @@ AudioClock::smpte_sanitize_display()
seconds_label.set_text("59");
}
- switch ((long)rint(session->smpte_frames_per_second)) {
+ switch ((long)rint(Config->get_smpte_frames_per_second())) {
case 24:
if (atoi(frames_label.get_text()) > 23) {
frames_label.set_text("23");
@@ -1268,14 +1241,14 @@ AudioClock::smpte_sanitize_display()
break;
}
- if (session->smpte_drop_frames) {
+ if (Config->get_smpte_drop_frames()) {
if ((atoi(minutes_label.get_text()) % 10) && (atoi(seconds_label.get_text()) == 0) && (atoi(frames_label.get_text()) < 2)) {
frames_label.set_text("02");
}
}
}
-jack_nframes_t
+nframes_t
AudioClock::smpte_frame_from_display () const
{
if (session == 0) {
@@ -1283,7 +1256,7 @@ AudioClock::smpte_frame_from_display () const
}
SMPTE::Time smpte;
- jack_nframes_t sample;
+ nframes_t sample;
smpte.hours = atoi (hours_label.get_text());
smpte.minutes = atoi (minutes_label.get_text());
@@ -1304,10 +1277,10 @@ AudioClock::smpte_frame_from_display () const
// Testcode for smpte<->sample conversions (P.S.)
SMPTE::Time smpte1;
- jack_nframes_t sample1;
- jack_nframes_t oldsample = 0;
+ nframes_t sample1;
+ nframes_t oldsample = 0;
SMPTE::Time smpte2;
- jack_nframes_t sample_increment;
+ nframes_t sample_increment;
sample_increment = (long)rint(session->frame_rate() / session->smpte_frames_per_second);
@@ -1666,7 +1639,7 @@ AudioClock::smpte_frame_from_display () const
return sample;
}
-jack_nframes_t
+nframes_t
AudioClock::minsec_frame_from_display () const
{
if (session == 0) {
@@ -1677,13 +1650,13 @@ AudioClock::minsec_frame_from_display () const
int mins = atoi (ms_minutes_label.get_text());
float secs = atof (ms_seconds_label.get_text());
- jack_nframes_t sr = session->frame_rate();
+ nframes_t sr = session->frame_rate();
- return (jack_nframes_t) floor ((hrs * 60.0f * 60.0f * sr) + (mins * 60.0f * sr) + (secs * sr));
+ return (nframes_t) floor ((hrs * 60.0f * 60.0f * sr) + (mins * 60.0f * sr) + (secs * sr));
}
-jack_nframes_t
-AudioClock::bbt_frame_from_display (jack_nframes_t pos) const
+nframes_t
+AudioClock::bbt_frame_from_display (nframes_t pos) const
{
if (session == 0) {
error << "AudioClock::current_time() called with BBT mode but without session!" << endmsg;
@@ -1697,14 +1670,14 @@ AudioClock::bbt_frame_from_display (jack_nframes_t pos) const
any.bbt.beats = atoi (beats_label.get_text());
any.bbt.ticks = atoi (ticks_label.get_text());
- jack_nframes_t ret = session->convert_to_frames_at (pos, any);
+ nframes_t ret = session->convert_to_frames_at (pos, any);
return ret;
}
-jack_nframes_t
-AudioClock::bbt_frame_duration_from_display (jack_nframes_t pos) const
+nframes_t
+AudioClock::bbt_frame_duration_from_display (nframes_t pos) const
{
if (session == 0) {
error << "AudioClock::current_time() called with BBT mode but without session!" << endmsg;
@@ -1721,10 +1694,10 @@ AudioClock::bbt_frame_duration_from_display (jack_nframes_t pos) const
return session->tempo_map().bbt_duration_at(pos,bbt,1);
}
-jack_nframes_t
+nframes_t
AudioClock::audio_frame_from_display () const
{
- return (jack_nframes_t) atoi (audio_frames_label.get_text());
+ return (nframes_t) atoi (audio_frames_label.get_text());
}
void
@@ -1775,40 +1748,66 @@ AudioClock::set_mode (Mode m)
}
_mode = m;
-
+
switch (_mode) {
case SMPTE:
clock_base.add (smpte_packer_hbox);
- Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2);
break;
case BBT:
clock_base.add (bbt_packer_hbox);
- Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2);
break;
case MinSec:
clock_base.add (minsec_packer_hbox);
- Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99", 0, 2);
break;
case Frames:
clock_base.add (frames_packer_hbox);
- Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2);
+ break;
case Off:
break;
}
+ set_size_requests ();
+
set (last_when, true);
clock_base.show_all ();
key_entry_state = 0;
}
+void
+AudioClock::set_size_requests ()
+{
+ /* note that in some fonts, "88" is narrower than "00", hence the 2 pixel padding */
+
+ switch (_mode) {
+ case SMPTE:
+ Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 2, 2);
+ break;
+
+ case BBT:
+ Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 2, 2);
+ break;
+
+ case MinSec:
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 2, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99.999", 2, 2);
+ break;
+
+ case Frames:
+ Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 2, 2);
+ break;
+
+ case Off:
+ break;
+
+ }
+}
diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h
index 4bcf13e1de..e0431ba16e 100644
--- a/gtk2_ardour/audio_clock.h
+++ b/gtk2_ardour/audio_clock.h
@@ -47,11 +47,11 @@ class AudioClock : public Gtk::HBox
Mode mode() const { return _mode; }
- void set (jack_nframes_t, bool force = false);
+ void set (nframes_t, bool force = false);
void set_mode (Mode);
- jack_nframes_t current_time (jack_nframes_t position = 0) const;
- jack_nframes_t current_duration (jack_nframes_t position = 0) const;
+ nframes_t current_time (nframes_t position = 0) const;
+ nframes_t current_duration (nframes_t position = 0) const;
void set_session (ARDOUR::Session *s);
sigc::signal<void> ValueChanged;
@@ -131,7 +131,7 @@ class AudioClock : public Gtk::HBox
Gtk::EventBox clock_base;
Gtk::Frame clock_frame;
- jack_nframes_t last_when;
+ nframes_t last_when;
uint32_t last_hrs;
uint32_t last_mins;
@@ -158,24 +158,25 @@ class AudioClock : public Gtk::HBox
bool field_focus_in_event (GdkEventFocus *, Field);
bool field_focus_out_event (GdkEventFocus *, Field);
- void set_smpte (jack_nframes_t, bool);
- void set_bbt (jack_nframes_t, bool);
- void set_minsec (jack_nframes_t, bool);
- void set_frames (jack_nframes_t, bool);
+ void set_smpte (nframes_t, bool);
+ void set_bbt (nframes_t, bool);
+ void set_minsec (nframes_t, bool);
+ void set_frames (nframes_t, bool);
- jack_nframes_t get_frames (Field,jack_nframes_t pos = 0,int dir=1);
+ nframes_t get_frames (Field,nframes_t pos = 0,int dir=1);
void smpte_sanitize_display();
- jack_nframes_t smpte_frame_from_display () const;
- jack_nframes_t bbt_frame_from_display (jack_nframes_t) const;
- jack_nframes_t bbt_frame_duration_from_display (jack_nframes_t) const;
- jack_nframes_t minsec_frame_from_display () const;
- jack_nframes_t audio_frame_from_display () const;
+ nframes_t smpte_frame_from_display () const;
+ nframes_t bbt_frame_from_display (nframes_t) const;
+ nframes_t bbt_frame_duration_from_display (nframes_t) const;
+ nframes_t minsec_frame_from_display () const;
+ nframes_t audio_frame_from_display () const;
void build_ops_menu ();
void setup_events ();
void smpte_offset_changed ();
+ void set_size_requests ();
static const uint32_t field_length[(int)AudioFrames+1];
};
diff --git a/gtk2_ardour/audio_region_editor.cc b/gtk2_ardour/audio_region_editor.cc
index 3149a863ad..b6bb4589a9 100644
--- a/gtk2_ardour/audio_region_editor.cc
+++ b/gtk2_ardour/audio_region_editor.cc
@@ -467,7 +467,7 @@ AudioRegionEditor::end_clock_changed ()
void
AudioRegionEditor::length_clock_changed ()
{
- jack_nframes_t frames = length_clock.current_time();
+ nframes_t frames = length_clock.current_time();
_region->trim_end (_region->position() + frames, this);
length_clock.set (_region->length());
@@ -632,12 +632,12 @@ void
AudioRegionEditor::fade_in_changed ()
{
float msecs = fade_in_length_adjustment.get_value();
- jack_nframes_t sr = _session.frame_rate();
- jack_nframes_t adj_frames = (jack_nframes_t) floor (msecs * (sr/1000.0f));
- jack_nframes_t frames;
+ nframes_t sr = _session.frame_rate();
+ nframes_t adj_frames = (nframes_t) floor (msecs * (sr/1000.0f));
+ nframes_t frames;
bool x;
- if (adj_frames != (frames = (jack_nframes_t) _region->fade_in().back()->when)) {
+ if (adj_frames != (frames = (nframes_t) _region->fade_in().back()->when)) {
fade_in_length_adjustment.set_value ((frames * 1000.0f) / sr);
}
@@ -650,11 +650,11 @@ void
AudioRegionEditor::fade_out_changed ()
{
float msecs = fade_out_length_adjustment.get_value();
- jack_nframes_t sr = _session.frame_rate();
- jack_nframes_t adj_frames = (jack_nframes_t) floor (msecs * (sr/1000.0f));
- jack_nframes_t frames;
+ nframes_t sr = _session.frame_rate();
+ nframes_t adj_frames = (nframes_t) floor (msecs * (sr/1000.0f));
+ nframes_t frames;
bool x;
- if (adj_frames != (frames = (jack_nframes_t) _region->fade_out().back()->when)) {
+ if (adj_frames != (frames = (nframes_t) _region->fade_out().back()->when)) {
fade_out_length_adjustment.set_value ((frames * 1000.0f) / sr);
}
@@ -666,8 +666,8 @@ AudioRegionEditor::fade_out_changed ()
void
AudioRegionEditor::fade_in_length_adjustment_changed ()
{
- jack_nframes_t fade_length = (jack_nframes_t) floor (fade_in_length_adjustment.get_value() * _session.frame_rate() * 0.001);
- fade_length = max (fade_length, (jack_nframes_t) 64);
+ nframes_t fade_length = (nframes_t) floor (fade_in_length_adjustment.get_value() * _session.frame_rate() * 0.001);
+ fade_length = max (fade_length, (nframes_t) 64);
fade_length = min (fade_length, _region->length());
_region->set_fade_in_length (fade_length);
@@ -678,8 +678,8 @@ AudioRegionEditor::fade_in_length_adjustment_changed ()
void
AudioRegionEditor::fade_out_length_adjustment_changed ()
{
- jack_nframes_t fade_length = (jack_nframes_t) floor (fade_out_length_adjustment.get_value() * _session.frame_rate() * 0.001);
- fade_length = max (fade_length, (jack_nframes_t) 64);
+ nframes_t fade_length = (nframes_t) floor (fade_out_length_adjustment.get_value() * _session.frame_rate() * 0.001);
+ fade_length = max (fade_length, (nframes_t) 64);
fade_length = min (fade_length, _region->length());
_region->set_fade_out_length (fade_length);
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index 41b95b0d42..73ac0c341d 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -159,8 +159,6 @@ AudioRegionView::init (Gdk::Color& basic_color, bool wfd)
gain_line->show ();
}
- reset_width_dependent_items ((double) _region->length() / samples_per_unit);
-
gain_line->reset ();
set_height (trackview.height);
@@ -471,11 +469,11 @@ AudioRegionView::reset_fade_shapes ()
void
AudioRegionView::reset_fade_in_shape ()
{
- reset_fade_in_shape_width ((jack_nframes_t) audio_region()->fade_in().back()->when);
+ reset_fade_in_shape_width ((nframes_t) audio_region()->fade_in().back()->when);
}
void
-AudioRegionView::reset_fade_in_shape_width (jack_nframes_t width)
+AudioRegionView::reset_fade_in_shape_width (nframes_t width)
{
if (fade_in_handle == 0) {
return;
@@ -483,7 +481,7 @@ AudioRegionView::reset_fade_in_shape_width (jack_nframes_t width)
/* smallest size for a fade is 64 frames */
- width = std::max ((jack_nframes_t) 64, width);
+ width = std::max ((nframes_t) 64, width);
Points* points;
double pwidth = width / samples_per_unit;
@@ -555,11 +553,11 @@ AudioRegionView::reset_fade_in_shape_width (jack_nframes_t width)
void
AudioRegionView::reset_fade_out_shape ()
{
- reset_fade_out_shape_width ((jack_nframes_t) audio_region()->fade_out().back()->when);
+ reset_fade_out_shape_width ((nframes_t) audio_region()->fade_out().back()->when);
}
void
-AudioRegionView::reset_fade_out_shape_width (jack_nframes_t width)
+AudioRegionView::reset_fade_out_shape_width (nframes_t width)
{
if (fade_out_handle == 0) {
return;
@@ -567,7 +565,7 @@ AudioRegionView::reset_fade_out_shape_width (jack_nframes_t width)
/* smallest size for a fade is 64 frames */
- width = std::max ((jack_nframes_t) 64, width);
+ width = std::max ((nframes_t) 64, width);
Points* points;
double pwidth = width / samples_per_unit;
@@ -794,6 +792,9 @@ AudioRegionView::create_waves ()
}
if (create_zero_line) {
+ if (zero_line) {
+ delete zero_line;
+ }
zero_line = new ArdourCanvas::SimpleLine (*group);
zero_line->property_x1() = (gdouble) 1.0;
zero_line->property_x2() = (gdouble) (_region->length() / samples_per_unit) - 1.0;
@@ -906,7 +907,7 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev)
item->w2i (x, y);
- jack_nframes_t fx = trackview.editor.pixel_to_frame (x);
+ nframes_t fx = trackview.editor.pixel_to_frame (x);
if (fx > _region->length()) {
return;
diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h
index 21fd519606..7d26f254d2 100644
--- a/gtk2_ardour/audio_region_view.h
+++ b/gtk2_ardour/audio_region_view.h
@@ -89,8 +89,8 @@ class AudioRegionView : public RegionView
GhostRegion* add_ghost (AutomationTimeAxisView&);
- void reset_fade_in_shape_width (jack_nframes_t);
- void reset_fade_out_shape_width (jack_nframes_t);
+ void reset_fade_in_shape_width (nframes_t);
+ void reset_fade_out_shape_width (nframes_t);
void set_fade_in_active (bool);
void set_fade_out_active (bool);
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index 85ba517f8e..f88b04ae1d 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -127,6 +127,8 @@ AudioStreamView::set_amplitude_above_axis (gdouble app)
void
AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wait_for_waves)
{
+ AudioRegionView *region_view;
+
ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::add_region_view), r));
boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion> (r);
@@ -135,19 +137,16 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
return;
}
- AudioRegionView *region_view;
- list<RegionView *>::iterator i;
-
- for (i = region_views.begin(); i != region_views.end(); ++i) {
+ for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
if ((*i)->region() == r) {
/* great. we already have a AudioRegionView for this Region. use it again. */
-
+
(*i)->set_valid (true);
return;
}
}
-
+
switch (_trackview.audio_track()->mode()) {
case Normal:
region_view = new AudioRegionView (canvas_group, _trackview, region,
@@ -168,30 +167,38 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
region_view->set_waveform_visible(_trackview.editor.show_waveforms());
/* catch regionview going away */
+ region->GoingAway.connect (bind (mem_fun (*this, &AudioStreamView::remove_region_view), boost::weak_ptr<Region> (r)));
- region->GoingAway.connect (bind (mem_fun (*this, &AudioStreamView::remove_region_view), region));
-
RegionViewAdded (region_view);
}
void
-AudioStreamView::remove_region_view (boost::shared_ptr<Region> r)
+AudioStreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
{
- ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::remove_region_view), r));
+ ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::remove_region_view), weak_r));
- for (list<CrossfadeView *>::iterator i = crossfade_views.begin(); i != crossfade_views.end();) {
- list<CrossfadeView*>::iterator tmp;
-
- tmp = i;
- ++tmp;
-
- boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion>(r);
- if (ar && (*i)->crossfade.involves (ar)) {
- delete *i;
- crossfade_views.erase (i);
+ boost::shared_ptr<Region> r (weak_r.lock());
+
+ if (!r) {
+ return;
+ }
+
+ if (!_trackview.session().deletion_in_progress()) {
+
+ for (list<CrossfadeView *>::iterator i = crossfade_views.begin(); i != crossfade_views.end();) {
+ list<CrossfadeView*>::iterator tmp;
+
+ tmp = i;
+ ++tmp;
+
+ boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion>(r);
+ if (ar && (*i)->crossfade.involves (ar)) {
+ delete *i;
+ crossfade_views.erase (i);
+ }
+
+ i = tmp;
}
-
- i = tmp;
}
StreamView::remove_region_view(r);
@@ -405,13 +412,15 @@ AudioStreamView::setup_rec_box ()
boost::shared_ptr<AudioFileSource> src = boost::static_pointer_cast<AudioFileSource> (ads->write_source (n));
if (src) {
sources.push_back (src);
- rec_data_ready_connections.push_back (src->PeakRangeReady.connect (bind (mem_fun (*this, &AudioStreamView::rec_peak_range_ready), src)));
+
+ rec_data_ready_connections.push_back (src->PeakRangeReady.connect (bind
+ (mem_fun (*this, &AudioStreamView::rec_peak_range_ready), boost::weak_ptr<Source>(src))));
}
}
// handle multi
- jack_nframes_t start = 0;
+ nframes_t start = 0;
if (rec_regions.size() > 0) {
start = rec_regions.back()->start() + _trackview.get_diskstream()->get_captured_frames(rec_regions.size()-1);
}
@@ -420,11 +429,8 @@ AudioStreamView::setup_rec_box ()
(RegionFactory::create (sources, start, 1 , "", 0, (Region::Flag)(Region::DefaultFlags | Region::DoNotSaveState), false)));
assert(region);
region->set_position (_trackview.session().transport_frame(), this);
- rec_regions.push_back (region);
-
- // rec regions are destroyed in setup_rec_box
- /* we add the region later */
+ rec_regions.push_back (region);
}
/* start a new rec box */
@@ -433,7 +439,7 @@ AudioStreamView::setup_rec_box ()
at = _trackview.audio_track(); /* we know what it is already */
boost::shared_ptr<AudioDiskstream> ds = at->audio_diskstream();
- jack_nframes_t frame_pos = ds->current_capture_start ();
+ nframes_t frame_pos = ds->current_capture_start ();
gdouble xstart = _trackview.editor.frame_to_pixel (frame_pos);
gdouble xend;
uint32_t fill_color;
@@ -503,12 +509,15 @@ AudioStreamView::setup_rec_box ()
last_rec_data_frame = 0;
/* remove temp regions */
-
- for (list<boost::shared_ptr<Region> >::iterator iter = rec_regions.begin(); iter != rec_regions.end();) {
+
+ for (list<boost::shared_ptr<Region> >::iterator iter = rec_regions.begin(); iter != rec_regions.end(); ) {
list<boost::shared_ptr<Region> >::iterator tmp;
+
tmp = iter;
++tmp;
+
(*iter)->drop_references ();
+
iter = tmp;
}
@@ -537,18 +546,24 @@ AudioStreamView::foreach_crossfadeview (void (CrossfadeView::*pmf)(void))
}
void
-AudioStreamView::rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, boost::shared_ptr<Source> src)
+AudioStreamView::rec_peak_range_ready (nframes_t start, nframes_t cnt, boost::weak_ptr<Source> weak_src)
{
- // this is called from the peak building thread
+ ENSURE_GUI_THREAD(bind (mem_fun (*this, &AudioStreamView::rec_peak_range_ready), start, cnt, weak_src));
+
+ boost::shared_ptr<Source> src (weak_src.lock());
+
+ if (!src) {
+ return;
+ }
- ENSURE_GUI_THREAD(bind (mem_fun (*this, &AudioStreamView::rec_peak_range_ready), start, cnt, src));
+ // this is called from the peak building thread
if (rec_data_ready_map.size() == 0 || start+cnt > last_rec_data_frame) {
last_rec_data_frame = start + cnt;
}
-
+
rec_data_ready_map[src] = true;
-
+
if (rec_data_ready_map.size() == _trackview.get_diskstream()->n_channels().get(DataType::AUDIO)) {
this->update_rec_regions ();
rec_data_ready_map.clear();
@@ -580,13 +595,13 @@ AudioStreamView::update_rec_regions ()
continue;
}
- jack_nframes_t origlen = region->length();
+ nframes_t origlen = region->length();
if (region == rec_regions.back() && rec_active) {
if (last_rec_data_frame > region->start()) {
- jack_nframes_t nlen = last_rec_data_frame - region->start();
+ nframes_t nlen = last_rec_data_frame - region->start();
if (nlen != region->length()) {
@@ -609,7 +624,7 @@ AudioStreamView::update_rec_regions ()
} else {
- jack_nframes_t nlen = _trackview.get_diskstream()->get_captured_frames(n);
+ nframes_t nlen = _trackview.get_diskstream()->get_captured_frames(n);
if (nlen != region->length()) {
diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h
index 242b97f840..79aef2c042 100644
--- a/gtk2_ardour/audio_streamview.h
+++ b/gtk2_ardour/audio_streamview.h
@@ -23,6 +23,8 @@
#include <map>
#include <cmath>
+#include <boost/weak_ptr.hpp>
+
#include <ardour/location.h>
#include "enums.h"
#include "simplerect.h"
@@ -76,13 +78,12 @@ class AudioStreamView : public StreamView
private:
void setup_rec_box ();
- void rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, boost::shared_ptr<ARDOUR::Source> src);
+ void rec_peak_range_ready (nframes_t start, nframes_t cnt, boost::weak_ptr<ARDOUR::Source> src);
void update_rec_regions ();
void add_region_view_internal (boost::shared_ptr<ARDOUR::Region>, bool wait_for_waves);
- void remove_region_view (boost::shared_ptr<ARDOUR::Region> );
+ void remove_region_view (boost::weak_ptr<ARDOUR::Region> );
void remove_audio_region_view (boost::shared_ptr<ARDOUR::AudioRegion> );
- void remove_audio_rec_region (boost::shared_ptr<ARDOUR::AudioRegion>);
void undisplay_diskstream ();
void redisplay_diskstream ();
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc
index c0ba957af8..ee74fabfa4 100644
--- a/gtk2_ardour/automation_line.cc
+++ b/gtk2_ardour/automation_line.cc
@@ -504,14 +504,14 @@ AutomationLine::model_representation (ControlPoint& cp, ModelRepresentation& mr)
line to convert them to something relevant.
*/
- mr.xval = (jack_nframes_t) floor (cp.get_x());
+ mr.xval = (nframes_t) floor (cp.get_x());
mr.yval = 1.0 - (cp.get_y() / _height);
/* if xval has not changed, set it directly from the model to avoid rounding errors */
if (mr.xval == trackview.editor.frame_to_unit((*cp.model)->when)) {
- mr.xval = (jack_nframes_t) (*cp.model)->when;
+ mr.xval = (nframes_t) (*cp.model)->when;
} else {
mr.xval = trackview.editor.unit_to_frame (mr.xval);
}
@@ -526,7 +526,7 @@ AutomationLine::model_representation (ControlPoint& cp, ModelRepresentation& mr)
/* part 2: find out where the model point is now
*/
- mr.xpos = (jack_nframes_t) (*cp.model)->when;
+ mr.xpos = (nframes_t) (*cp.model)->when;
mr.ypos = (*cp.model)->value;
/* part 3: get the position of the visual control
@@ -545,7 +545,7 @@ AutomationLine::model_representation (ControlPoint& cp, ModelRepresentation& mr)
after = nth (cp.view_index + 1);
if (before) {
- mr.xmin = (jack_nframes_t) (*before->model)->when;
+ mr.xmin = (nframes_t) (*before->model)->when;
mr.ymin = (*before->model)->value;
mr.start = before->model;
++mr.start;
@@ -899,7 +899,7 @@ AutomationLine::start_drag (ControlPoint* cp, float fraction)
}
void
-AutomationLine::point_drag (ControlPoint& cp, jack_nframes_t x, float fraction, bool with_push)
+AutomationLine::point_drag (ControlPoint& cp, nframes_t x, float fraction, bool with_push)
{
modify_view (cp, x, fraction, with_push);
drags++;
@@ -1027,14 +1027,14 @@ AutomationLine::remove_point (ControlPoint& cp)
}
void
-AutomationLine::get_selectables (jack_nframes_t& start, jack_nframes_t& end,
+AutomationLine::get_selectables (nframes_t& start, nframes_t& end,
double botfrac, double topfrac, list<Selectable*>& results)
{
double top;
double bot;
- jack_nframes_t nstart;
- jack_nframes_t nend;
+ nframes_t nstart;
+ nframes_t nend;
bool collecting = false;
/* Curse X11 and its inverted coordinate system! */
@@ -1047,7 +1047,7 @@ AutomationLine::get_selectables (jack_nframes_t& start, jack_nframes_t& end,
for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
- jack_nframes_t when = (jack_nframes_t) (*(*i)->model)->when;
+ nframes_t when = (nframes_t) (*(*i)->model)->when;
if (when >= start && when <= end) {
@@ -1239,7 +1239,7 @@ AutomationLine::clear ()
void
AutomationLine::change_model (AutomationList::iterator i, double x, double y)
{
- alist.modify (i, (jack_nframes_t) x, y);
+ alist.modify (i, (nframes_t) x, y);
}
void
diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h
index 8311025b02..eb2d204513 100644
--- a/gtk2_ardour/automation_line.h
+++ b/gtk2_ardour/automation_line.h
@@ -96,7 +96,7 @@ class ControlPoint
ShapeType _shape;
};
-class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible
+class AutomationLine : public PBD::StatefulDestructible
{
public:
AutomationLine (const string & name, TimeAxisView&, ArdourCanvas::Group&, ARDOUR::AutomationList&);
@@ -107,7 +107,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible
void clear();
void set_selected_points (PointSelection&);
- void get_selectables (jack_nframes_t& start, jack_nframes_t& end,
+ void get_selectables (nframes_t& start, nframes_t& end,
double botfrac, double topfrac,
list<Selectable*>& results);
void get_inverted_selectables (Selection&, list<Selectable*>& results);
@@ -118,7 +118,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible
/* dragging API */
virtual void start_drag (ControlPoint*, float fraction);
- virtual void point_drag(ControlPoint&, jack_nframes_t x, float, bool with_push);
+ virtual void point_drag(ControlPoint&, nframes_t x, float, bool with_push);
virtual void end_drag (ControlPoint*);
virtual void line_drag(uint32_t i1, uint32_t i2, float, bool with_push);
@@ -224,13 +224,13 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible
struct ModelRepresentation {
ARDOUR::AutomationList::iterator start;
ARDOUR::AutomationList::iterator end;
- jack_nframes_t xpos;
+ nframes_t xpos;
double ypos;
- jack_nframes_t xmin;
+ nframes_t xmin;
double ymin;
- jack_nframes_t xmax;
+ nframes_t xmax;
double ymax;
- jack_nframes_t xval;
+ nframes_t xval;
double yval;
};
diff --git a/gtk2_ardour/automation_selectable.h b/gtk2_ardour/automation_selectable.h
index 9b8f78e057..5b7f4d5705 100644
--- a/gtk2_ardour/automation_selectable.h
+++ b/gtk2_ardour/automation_selectable.h
@@ -8,13 +8,13 @@ class TimeAxisView;
struct AutomationSelectable : public Selectable
{
- jack_nframes_t start;
- jack_nframes_t end;
+ nframes_t start;
+ nframes_t end;
double low_fract;
double high_fract;
TimeAxisView& track;
- AutomationSelectable (jack_nframes_t s, jack_nframes_t e, double l, double h, TimeAxisView& atv)
+ AutomationSelectable (nframes_t s, nframes_t e, double l, double h, TimeAxisView& atv)
: start (s), end (e), low_fract (l), high_fract (h), track (atv) {}
};
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc
index 80ed2acd16..22b6e10ac8 100644
--- a/gtk2_ardour/automation_time_axis.cc
+++ b/gtk2_ardour/automation_time_axis.cc
@@ -602,7 +602,7 @@ AutomationTimeAxisView::cut_copy_clear_objects_one (AutomationLine& line, PointS
}
bool
-AutomationTimeAxisView::paste (jack_nframes_t pos, float times, Selection& selection, size_t nth)
+AutomationTimeAxisView::paste (nframes_t pos, float times, Selection& selection, size_t nth)
{
bool ret = true;
@@ -614,7 +614,7 @@ AutomationTimeAxisView::paste (jack_nframes_t pos, float times, Selection& selec
}
bool
-AutomationTimeAxisView::paste_one (AutomationLine& line, jack_nframes_t pos, float times, Selection& selection, size_t nth)
+AutomationTimeAxisView::paste_one (AutomationLine& line, nframes_t pos, float times, Selection& selection, size_t nth)
{
AutomationSelection::iterator p;
AutomationList& alist (line.the_list());
@@ -670,7 +670,7 @@ AutomationTimeAxisView::remove_ghost (GhostRegion* gr)
}
void
-AutomationTimeAxisView::get_selectables (jack_nframes_t start, jack_nframes_t end, double top, double bot, list<Selectable*>& results)
+AutomationTimeAxisView::get_selectables (nframes_t start, nframes_t end, double top, double bot, list<Selectable*>& results)
{
if (!lines.empty() && touched (top, bot)) {
double topfrac;
diff --git a/gtk2_ardour/automation_time_axis.h b/gtk2_ardour/automation_time_axis.h
index 0cd9acc034..30fa71bea9 100644
--- a/gtk2_ardour/automation_time_axis.h
+++ b/gtk2_ardour/automation_time_axis.h
@@ -48,7 +48,7 @@ class AutomationTimeAxisView : public TimeAxisView {
void set_samples_per_unit (double);
std::string name() const { return _name; }
- virtual void add_automation_event (ArdourCanvas::Item *item, GdkEvent *event, jack_nframes_t, double) = 0;
+ virtual void add_automation_event (ArdourCanvas::Item *item, GdkEvent *event, nframes_t, double) = 0;
virtual void clear_lines ();
virtual void add_line (AutomationLine&);
@@ -56,17 +56,17 @@ class AutomationTimeAxisView : public TimeAxisView {
vector<AutomationLine*> lines;
void set_selected_points (PointSelection&);
- void get_selectables (jack_nframes_t start, jack_nframes_t end, double top, double bot, list<Selectable *>&);
+ void get_selectables (nframes_t start, nframes_t end, double top, double bot, list<Selectable *>&);
void get_inverted_selectables (Selection&, list<Selectable*>& results);
- void show_timestretch (jack_nframes_t start, jack_nframes_t end) {}
+ void show_timestretch (nframes_t start, nframes_t end) {}
void hide_timestretch () {}
/* editing operations */
bool cut_copy_clear (Selection&, Editing::CutCopyOp);
bool cut_copy_clear_objects (PointSelection&, Editing::CutCopyOp);
- bool paste (jack_nframes_t, float times, Selection&, size_t nth);
+ bool paste (nframes_t, float times, Selection&, size_t nth);
void reset_objects (PointSelection&);
void add_ghost (GhostRegion*);
@@ -110,7 +110,7 @@ class AutomationTimeAxisView : public TimeAxisView {
bool cut_copy_clear_one (AutomationLine&, Selection&, Editing::CutCopyOp);
bool cut_copy_clear_objects_one (AutomationLine&, PointSelection&, Editing::CutCopyOp);
- bool paste_one (AutomationLine&, jack_nframes_t, float times, Selection&, size_t nth);
+ bool paste_one (AutomationLine&, nframes_t, float times, Selection&, size_t nth);
void reset_objects_one (AutomationLine&, PointSelection&);
virtual void set_automation_state (ARDOUR::AutoState) = 0;
diff --git a/gtk2_ardour/canvas-waveview.c b/gtk2_ardour/canvas-waveview.c
index 3e4a14d86a..89f5da7bf6 100644
--- a/gtk2_ardour/canvas-waveview.c
+++ b/gtk2_ardour/canvas-waveview.c
@@ -861,9 +861,12 @@ gnome_canvas_waveview_get_property (GObject *object,
case PROP_RECTIFIED:
g_value_set_boolean (value, waveview->rectified);
+ break;
case PROP_REGION_START:
g_value_set_uint (value, waveview->region_start);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
diff --git a/gtk2_ardour/crossfade_edit.cc b/gtk2_ardour/crossfade_edit.cc
index 888eecdba2..6032bfa561 100644
--- a/gtk2_ardour/crossfade_edit.cc
+++ b/gtk2_ardour/crossfade_edit.cc
@@ -632,7 +632,7 @@ CrossfadeEditor::redraw ()
return;
}
- jack_nframes_t len = xfade.length ();
+ nframes_t len = xfade.length ();
fade[current].normative_curve.clear ();
fade[current].gain_curve.clear ();
@@ -1078,12 +1078,12 @@ void
CrossfadeEditor::audition_both ()
{
AudioPlaylist& pl (session.the_auditioner()->prepare_playlist());
- jack_nframes_t preroll;
- jack_nframes_t postroll;
- jack_nframes_t length;
- jack_nframes_t left_start_offset;
- jack_nframes_t right_length;
- jack_nframes_t left_length;
+ nframes_t preroll;
+ nframes_t postroll;
+ nframes_t length;
+ nframes_t left_start_offset;
+ nframes_t right_length;
+ nframes_t left_length;
if (preroll_button.get_active()) {
preroll = ARDOUR_UI::instance()->preroll_clock.current_duration ();
diff --git a/gtk2_ardour/crossfade_view.cc b/gtk2_ardour/crossfade_view.cc
index 49fe40ca63..baf0f2a346 100644
--- a/gtk2_ardour/crossfade_view.cc
+++ b/gtk2_ardour/crossfade_view.cc
@@ -108,8 +108,8 @@ CrossfadeView::reset_width_dependent_items (double pixel_width)
void
CrossfadeView::set_height (double height)
{
- if (height == TimeAxisView::Smaller ||
- height == TimeAxisView::Small)
+ if (height == TimeAxisView::hSmaller ||
+ height == TimeAxisView::hSmall)
TimeAxisViewItem::set_height (height - 3 );
else
TimeAxisViewItem::set_height (height - NAME_HIGHLIGHT_SIZE - 3 );
@@ -149,14 +149,12 @@ CrossfadeView::redraw_curves ()
At "height - 3.0" the bottom of the crossfade touches the name highlight or the bottom of the track (if the
track is either Small or Smaller.
*/
- switch(get_time_axis_view().height) {
- case TimeAxisView::Smaller:
- case TimeAxisView::Small:
- h = get_time_axis_view().height - 3.0;
- break;
-
- default:
- h = get_time_axis_view().height - NAME_HIGHLIGHT_SIZE - 3.0;
+ double tav_height = get_time_axis_view().height;
+ if (tav_height == TimeAxisView::hSmaller ||
+ tav_height == TimeAxisView::hSmall) {
+ h = tav_height - 3.0;
+ } else {
+ h = tav_height - NAME_HIGHLIGHT_SIZE - 3.0;
}
if (h < 0) {
diff --git a/gtk2_ardour/draginfo.h b/gtk2_ardour/draginfo.h
index 12458fdf34..9b56fed7ab 100644
--- a/gtk2_ardour/draginfo.h
+++ b/gtk2_ardour/draginfo.h
@@ -20,11 +20,11 @@ struct DragInfo {
ArdourCanvas::Item* item;
ItemType item_type;
void* data;
- jack_nframes_t last_frame_position;
+ nframes_t last_frame_position;
int32_t pointer_frame_offset;
- jack_nframes_t grab_frame;
- jack_nframes_t last_pointer_frame;
- jack_nframes_t current_pointer_frame;
+ nframes_t grab_frame;
+ nframes_t last_pointer_frame;
+ nframes_t current_pointer_frame;
double grab_x, grab_y;
double cumulative_x_drag;
double cumulative_y_drag;
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 0fc9810c70..9924a2a929 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -98,15 +98,6 @@ const double Editor::timebar_height = 15.0;
#include "editor_xpms"
-static const int32_t slide_index = 0;
-static const int32_t splice_index = 1;
-
-static const gchar *edit_mode_strings[] = {
- N_("Slide Edit"),
- N_("Splice Edit"),
- 0
-};
-
static const gchar *snap_type_strings[] = {
N_("None"),
N_("CD Frames"),
@@ -138,11 +129,11 @@ static const gchar *snap_mode_strings[] = {
};
static const gchar *zoom_focus_strings[] = {
- N_("Focus Left"),
- N_("Focus Right"),
- N_("Focus Center"),
- N_("Focus Play"),
- N_("Focus Edit"),
+ N_("Left"),
+ N_("Right"),
+ N_("Center"),
+ N_("Playhead"),
+ N_("Edit Cursor"),
0
};
@@ -257,6 +248,7 @@ Editor::Editor (AudioEngine& eng)
bbt_beat_subdivision = 4;
canvas_width = 0;
canvas_height = 0;
+ autoscroll_active = false;
autoscroll_timeout_tag = -1;
interthread_progress_window = 0;
@@ -674,8 +666,8 @@ Editor::Editor (AudioEngine& eng)
/* nudge stuff */
- nudge_forward_button.add (*(manage (new Image (get_xpm("right_arrow.xpm")))));
- nudge_backward_button.add (*(manage (new Image (get_xpm("left_arrow.xpm")))));
+ nudge_forward_button.add (*(manage (new Image (::get_icon("nudge_right")))));
+ nudge_backward_button.add (*(manage (new Image (::get_icon("nudge_left")))));
ARDOUR_UI::instance()->tooltips().set_tip (nudge_forward_button, _("Nudge Region/Selection Forwards"));
ARDOUR_UI::instance()->tooltips().set_tip (nudge_backward_button, _("Nudge Region/Selection Backwards"));
@@ -701,9 +693,10 @@ Editor::Editor (AudioEngine& eng)
ControlProtocol::ZoomOut.connect (bind (mem_fun (*this, &Editor::temporal_zoom_step), true));
ControlProtocol::ScrollTimeline.connect (mem_fun (*this, &Editor::control_scroll));
+ Config->ParameterChanged.connect (mem_fun (*this, &Editor::parameter_changed));
+
constructed = true;
instant_save ();
-
}
Editor::~Editor()
@@ -803,19 +796,19 @@ Editor::tie_vertical_scrolling ()
void
Editor::set_frames_per_unit (double fpu)
{
- jack_nframes_t frames;
+ nframes_t frames;
if (fpu == frames_per_unit) {
return;
}
- if (fpu < 1.0) {
- fpu = 1.0;
+ if (fpu < 2.0) {
+ fpu = 2.0;
}
// convert fpu to frame count
- frames = (jack_nframes_t) floor (fpu * canvas_width);
+ frames = (nframes_t) floor (fpu * canvas_width);
/* don't allow zooms that fit more than the maximum number
of frames into an 800 pixel wide space.
@@ -825,6 +818,10 @@ Editor::set_frames_per_unit (double fpu)
return;
}
+ if (fpu == frames_per_unit) {
+ return;
+ }
+
frames_per_unit = fpu;
if (frames != zoom_range_clock.current_duration()) {
@@ -870,12 +867,12 @@ Editor::instant_save ()
}
void
-Editor::reposition_x_origin (jack_nframes_t frame)
+Editor::reposition_x_origin (nframes_t frame)
{
if (frame != leftmost_frame) {
leftmost_frame = frame;
- jack_nframes_t rightmost_frame = leftmost_frame + current_page_frames ();
+ nframes_t rightmost_frame = leftmost_frame + current_page_frames ();
if (rightmost_frame > last_canvas_frame) {
last_canvas_frame = rightmost_frame;
@@ -909,10 +906,10 @@ Editor::zoom_adjustment_changed ()
if (fpu < 1.0) {
fpu = 1.0;
- zoom_range_clock.set ((jack_nframes_t) floor (fpu * canvas_width));
+ zoom_range_clock.set ((nframes_t) floor (fpu * canvas_width));
} else if (fpu > session->current_end_frame() / canvas_width) {
fpu = session->current_end_frame() / canvas_width;
- zoom_range_clock.set ((jack_nframes_t) floor (fpu * canvas_width));
+ zoom_range_clock.set ((nframes_t) floor (fpu * canvas_width));
}
temporal_zoom (fpu);
@@ -928,14 +925,14 @@ Editor::control_scroll (float fraction)
}
double step = fraction * current_page_frames();
- jack_nframes_t target;
+ nframes_t target;
- if ((fraction < 0.0f) && (session->transport_frame() < (jack_nframes_t) fabs(step))) {
+ if ((fraction < 0.0f) && (session->transport_frame() < (nframes_t) fabs(step))) {
target = 0;
} else if ((fraction > 0.0f) && (max_frames - session->transport_frame() < step)) {
target = (max_frames - (current_page_frames()*2)); // allow room for slop in where the PH is on the screen
} else {
- target = (session->transport_frame() + (jack_nframes_t) floor ((fraction * current_page_frames())));
+ target = (session->transport_frame() + (nframes_t) floor ((fraction * current_page_frames())));
}
/* move visuals, we'll catch up with it later */
@@ -959,7 +956,7 @@ Editor::control_scroll (float fraction)
}
bool
-Editor::deferred_control_scroll (jack_nframes_t target)
+Editor::deferred_control_scroll (nframes_t target)
{
session->request_locate (target);
return false;
@@ -969,14 +966,14 @@ void
Editor::canvas_horizontally_scrolled ()
{
- leftmost_frame = (jack_nframes_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
+ leftmost_frame = (nframes_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
update_fixed_rulers ();
tempo_map_changed (Change (0));
}
void
-Editor::reposition_and_zoom (jack_nframes_t frame, double nfpu)
+Editor::reposition_and_zoom (nframes_t frame, double nfpu)
{
if (!repos_zoom_queued) {
repos_zoom_queued = true;
@@ -985,7 +982,7 @@ Editor::reposition_and_zoom (jack_nframes_t frame, double nfpu)
}
gint
-Editor::deferred_reposition_and_zoom (jack_nframes_t frame, double nfpu)
+Editor::deferred_reposition_and_zoom (nframes_t frame, double nfpu)
{
set_frames_per_unit (nfpu);
@@ -1003,39 +1000,6 @@ Editor::on_realize ()
}
void
-Editor::queue_session_control_changed (Session::ControlType t)
-{
- Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun(*this, &Editor::session_control_changed), t));
-}
-
-void
-Editor::session_control_changed (Session::ControlType t)
-{
- // right now we're only tracking some state here
-
- switch (t) {
- case Session::AutoLoop:
- update_loop_range_view (true);
- break;
- case Session::PunchIn:
- case Session::PunchOut:
- update_punch_range_view (true);
- break;
-
- case Session::LayeringModel:
- update_layering_model ();
- break;
-
- case Session::SmpteMode:
- update_smpte_mode ();
- break;
-
- default:
- break;
- }
-}
-
-void
Editor::start_scrolling ()
{
scroll_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect
@@ -1049,7 +1013,7 @@ Editor::stop_scrolling ()
}
void
-Editor::map_position_change (jack_nframes_t frame)
+Editor::map_position_change (nframes_t frame)
{
ENSURE_GUI_THREAD (bind (mem_fun(*this, &Editor::map_position_change), frame));
@@ -1062,7 +1026,7 @@ Editor::map_position_change (jack_nframes_t frame)
}
void
-Editor::center_screen (jack_nframes_t frame)
+Editor::center_screen (nframes_t frame)
{
double page = canvas_width * frames_per_unit;
@@ -1075,12 +1039,12 @@ Editor::center_screen (jack_nframes_t frame)
}
void
-Editor::center_screen_internal (jack_nframes_t frame, float page)
+Editor::center_screen_internal (nframes_t frame, float page)
{
page /= 2;
if (frame > page) {
- frame -= (jack_nframes_t) page;
+ frame -= (nframes_t) page;
} else {
frame = 0;
}
@@ -1093,7 +1057,7 @@ Editor::handle_new_duration ()
{
ENSURE_GUI_THREAD (mem_fun (*this, &Editor::handle_new_duration));
- jack_nframes_t new_end = session->get_maximum_extent() + (jack_nframes_t) floorf (current_page_frames() * 0.10f);
+ nframes_t new_end = session->get_maximum_extent() + (nframes_t) floorf (current_page_frames() * 0.10f);
if (new_end > last_canvas_frame) {
last_canvas_frame = new_end;
@@ -1174,10 +1138,6 @@ Editor::connect_to_session (Session *t)
session_connections.push_back (session->RegionHiddenChange.connect (mem_fun(*this, &Editor::region_hidden)));
session_connections.push_back (session->SMPTEOffsetChanged.connect (mem_fun(*this, &Editor::update_just_smpte)));
- session_connections.push_back (session->SMPTETypeChanged.connect (mem_fun(*this, &Editor::update_just_smpte)));
-
- session_connections.push_back (session->SMPTETypeChanged.connect (mem_fun(*this, &Editor::update_smpte_mode)));
- session_connections.push_back (session->PullupChanged.connect (mem_fun(*this, &Editor::update_video_pullup)));
session_connections.push_back (session->tempo_map().StateChanged.connect (mem_fun(*this, &Editor::tempo_map_changed)));
@@ -1193,16 +1153,6 @@ Editor::connect_to_session (Session *t)
analysis_window->set_session (session);
#endif
- switch (session->get_edit_mode()) {
- case Splice:
- edit_mode_selector.set_active_text (edit_mode_strings[splice_index]);
- break;
-
- case Slide:
- edit_mode_selector.set_active_text (edit_mode_strings[slide_index]);
- break;
- }
-
Location* loc = session->locations()->auto_loop_location();
if (loc == 0) {
loc = new Location (0, session->current_end_frame(), _("Loop"),(Location::Flags) (Location::IsAutoLoop | Location::IsHidden));
@@ -1231,10 +1181,8 @@ Editor::connect_to_session (Session *t)
loc->set_name (_("Punch"));
}
- update_loop_range_view (true);
- update_punch_range_view (true);
+ Config->map_parameters (mem_fun (*this, &Editor::parameter_changed));
- session->ControlChanged.connect (mem_fun(*this, &Editor::queue_session_control_changed));
session->StateSaved.connect (mem_fun(*this, &Editor::session_state_saved));
refresh_location_display ();
@@ -1244,35 +1192,6 @@ Editor::connect_to_session (Session *t)
session->locations()->StateChanged.connect (mem_fun(*this, &Editor::refresh_location_display_s));
session->locations()->end_location()->changed.connect (mem_fun(*this, &Editor::end_location_changed));
- bool yn;
- RefPtr<Action> act;
-
- act = ActionManager::get_action (X_("Editor"), X_("toggle-xfades-active"));
- if (act) {
- RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
- /* do it twice to force the change */
- yn = session->get_crossfades_active();
- tact->set_active (!yn);
- tact->set_active (yn);
- }
-
- act = ActionManager::get_action (X_("Editor"), X_("toggle-auto-xfades"));
- if (act) {
- RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
- /* do it twice to force the change */
- yn = Config->get_auto_xfade ();
- tact->set_active (!yn);
- tact->set_active (yn);
- }
-
- /* xfade visibility state set from editor::set_state() */
-
- update_crossfade_model();
- update_layering_model();
-
- update_smpte_mode();
- update_video_pullup();
-
handle_new_duration ();
redisplay_regions ();
@@ -1439,10 +1358,10 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i
}
void
-Editor::popup_track_context_menu (int button, int32_t time, ItemType item_type, bool with_selection, jack_nframes_t frame)
+Editor::popup_track_context_menu (int button, int32_t time, ItemType item_type, bool with_selection, nframes_t frame)
{
using namespace Menu_Helpers;
- Menu* (Editor::*build_menu_function)(jack_nframes_t);
+ Menu* (Editor::*build_menu_function)(nframes_t);
Menu *menu;
switch (item_type) {
@@ -1554,7 +1473,7 @@ Editor::popup_track_context_menu (int button, int32_t time, ItemType item_type,
}
Menu*
-Editor::build_track_context_menu (jack_nframes_t ignored)
+Editor::build_track_context_menu (nframes_t ignored)
{
using namespace Menu_Helpers;
@@ -1566,7 +1485,7 @@ Editor::build_track_context_menu (jack_nframes_t ignored)
}
Menu*
-Editor::build_track_bus_context_menu (jack_nframes_t ignored)
+Editor::build_track_bus_context_menu (nframes_t ignored)
{
using namespace Menu_Helpers;
@@ -1578,7 +1497,7 @@ Editor::build_track_bus_context_menu (jack_nframes_t ignored)
}
Menu*
-Editor::build_track_region_context_menu (jack_nframes_t frame)
+Editor::build_track_region_context_menu (nframes_t frame)
{
using namespace Menu_Helpers;
MenuList& edit_items = track_region_context_menu.items();
@@ -1591,7 +1510,7 @@ Editor::build_track_region_context_menu (jack_nframes_t frame)
Playlist* pl;
if ((ds = atv->get_diskstream()) && ((pl = ds->playlist()))) {
- Playlist::RegionList* regions = pl->regions_at ((jack_nframes_t) floor ( (double)frame * ds->speed()));
+ Playlist::RegionList* regions = pl->regions_at ((nframes_t) floor ( (double)frame * ds->speed()));
for (Playlist::RegionList::iterator i = regions->begin(); i != regions->end(); ++i) {
add_region_context_items (atv->audio_view(), (*i), edit_items);
}
@@ -1605,7 +1524,7 @@ Editor::build_track_region_context_menu (jack_nframes_t frame)
}
Menu*
-Editor::build_track_crossfade_context_menu (jack_nframes_t frame)
+Editor::build_track_crossfade_context_menu (nframes_t frame)
{
using namespace Menu_Helpers;
MenuList& edit_items = track_crossfade_context_menu.items();
@@ -1685,7 +1604,7 @@ Editor::analyze_range_selection()
Menu*
-Editor::build_track_selection_context_menu (jack_nframes_t ignored)
+Editor::build_track_selection_context_menu (nframes_t ignored)
{
using namespace Menu_Helpers;
MenuList& edit_items = track_selection_context_menu.items();
@@ -2248,7 +2167,7 @@ Editor::get_state ()
XMLNode* node = new XMLNode ("Editor");
char buf[32];
- _id.print (buf);
+ _id.print (buf, sizeof (buf));
node->add_property ("id", buf);
if (is_realized()) {
@@ -2330,7 +2249,7 @@ Editor::trackview_by_y_position (double y)
}
void
-Editor::snap_to (jack_nframes_t& start, int32_t direction, bool for_mark)
+Editor::snap_to (nframes_t& start, int32_t direction, bool for_mark)
{
Location* before = 0;
Location* after = 0;
@@ -2339,10 +2258,10 @@ Editor::snap_to (jack_nframes_t& start, int32_t direction, bool for_mark)
return;
}
- const jack_nframes_t one_second = session->frame_rate();
- const jack_nframes_t one_minute = session->frame_rate() * 60;
+ const nframes_t one_second = session->frame_rate();
+ const nframes_t one_minute = session->frame_rate() * 60;
- jack_nframes_t presnap = start;
+ nframes_t presnap = start;
switch (snap_type) {
case SnapToFrame:
@@ -2350,16 +2269,16 @@ Editor::snap_to (jack_nframes_t& start, int32_t direction, bool for_mark)
case SnapToCDFrame:
if (direction) {
- start = (jack_nframes_t) ceil ((double) start / (one_second / 75)) * (one_second / 75);
+ start = (nframes_t) ceil ((double) start / (one_second / 75)) * (one_second / 75);
} else {
- start = (jack_nframes_t) floor ((double) start / (one_second / 75)) * (one_second / 75);
+ start = (nframes_t) floor ((double) start / (one_second / 75)) * (one_second / 75);
}
break;
case SnapToSMPTEFrame:
if (direction) {
- start = (jack_nframes_t) (ceil ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
+ start = (nframes_t) (ceil ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
} else {
- start = (jack_nframes_t) (floor ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
+ start = (nframes_t) (floor ((double) start / session->frames_per_smpte_frame()) * session->frames_per_smpte_frame());
}
break;
@@ -2371,9 +2290,9 @@ Editor::snap_to (jack_nframes_t& start, int32_t direction, bool for_mark)
start -= session->smpte_offset ();
}
if (direction > 0) {
- start = (jack_nframes_t) ceil ((double) start / one_second) * one_second;
+ start = (nframes_t) ceil ((double) start / one_second) * one_second;
} else {
- start = (jack_nframes_t) floor ((double) start / one_second) * one_second;
+ start = (nframes_t) floor ((double) start / one_second) * one_second;
}
if (session->smpte_offset_negative())
@@ -2392,9 +2311,9 @@ Editor::snap_to (jack_nframes_t& start, int32_t direction, bool for_mark)
start -= session->smpte_offset ();
}
if (direction) {
- start = (jack_nframes_t) ceil ((double) start / one_minute) * one_minute;
+ start = (nframes_t) ceil ((double) start / one_minute) * one_minute;
} else {
- start = (jack_nframes_t) floor ((double) start / one_minute) * one_minute;
+ start = (nframes_t) floor ((double) start / one_minute) * one_minute;
}
if (session->smpte_offset_negative())
{
@@ -2406,17 +2325,17 @@ Editor::snap_to (jack_nframes_t& start, int32_t direction, bool for_mark)
case SnapToSeconds:
if (direction) {
- start = (jack_nframes_t) ceil ((double) start / one_second) * one_second;
+ start = (nframes_t) ceil ((double) start / one_second) * one_second;
} else {
- start = (jack_nframes_t) floor ((double) start / one_second) * one_second;
+ start = (nframes_t) floor ((double) start / one_second) * one_second;
}
break;
case SnapToMinutes:
if (direction) {
- start = (jack_nframes_t) ceil ((double) start / one_minute) * one_minute;
+ start = (nframes_t) ceil ((double) start / one_minute) * one_minute;
} else {
- start = (jack_nframes_t) floor ((double) start / one_minute) * one_minute;
+ start = (nframes_t) floor ((double) start / one_minute) * one_minute;
}
break;
@@ -2497,7 +2416,7 @@ Editor::snap_to (jack_nframes_t& start, int32_t direction, bool for_mark)
case SnapToRegionSync:
case SnapToRegionBoundary:
if (!region_boundary_cache.empty()) {
- vector<jack_nframes_t>::iterator i;
+ vector<nframes_t>::iterator i;
if (direction > 0) {
i = std::upper_bound (region_boundary_cache.begin(), region_boundary_cache.end(), start);
@@ -2549,22 +2468,22 @@ Editor::setup_toolbar ()
vector<ToggleButton *> mouse_mode_buttons;
- mouse_move_button.add (*(manage (new Image (get_xpm("tool_object.xpm")))));
+ mouse_move_button.add (*(manage (new Image (::get_icon("tool_object")))));
mouse_move_button.set_relief(Gtk::RELIEF_NONE);
mouse_mode_buttons.push_back (&mouse_move_button);
mouse_select_button.add (*(manage (new Image (get_xpm("tool_range.xpm")))));
mouse_select_button.set_relief(Gtk::RELIEF_NONE);
mouse_mode_buttons.push_back (&mouse_select_button);
- mouse_gain_button.add (*(manage (new Image (get_xpm("tool_gain.xpm")))));
+ mouse_gain_button.add (*(manage (new Image (::get_icon("tool_gain")))));
mouse_gain_button.set_relief(Gtk::RELIEF_NONE);
mouse_mode_buttons.push_back (&mouse_gain_button);
- mouse_zoom_button.add (*(manage (new Image (get_xpm("tool_zoom.xpm")))));
+ mouse_zoom_button.add (*(manage (new Image (::get_icon("tool_zoom")))));
mouse_zoom_button.set_relief(Gtk::RELIEF_NONE);
mouse_mode_buttons.push_back (&mouse_zoom_button);
- mouse_timefx_button.add (*(manage (new Image (get_xpm("tool_stretch.xpm")))));
+ mouse_timefx_button.add (*(manage (new Image (::get_icon("tool_stretch")))));
mouse_timefx_button.set_relief(Gtk::RELIEF_NONE);
mouse_mode_buttons.push_back (&mouse_timefx_button);
- mouse_audition_button.add (*(manage (new Image (get_xpm("tool_audition.xpm")))));
+ mouse_audition_button.add (*(manage (new Image (::get_icon("tool_audition")))));
mouse_audition_button.set_relief(Gtk::RELIEF_NONE);
mouse_mode_buttons.push_back (&mouse_audition_button);
@@ -2582,9 +2501,13 @@ Editor::setup_toolbar ()
mouse_mode_button_box.pack_start(mouse_audition_button, true, true);
mouse_mode_button_box.set_homogeneous(true);
+ vector<string> edit_mode_strings;
+ edit_mode_strings.push_back (edit_mode_to_string (Splice));
+ edit_mode_strings.push_back (edit_mode_to_string (Slide));
+
edit_mode_selector.set_name ("EditModeSelector");
- Gtkmm2ext::set_size_request_to_display_given_text (edit_mode_selector, "Splice Edit", 2+FUDGE, 10);
- set_popdown_strings (edit_mode_selector, internationalize (edit_mode_strings));
+ Gtkmm2ext::set_size_request_to_display_given_text (edit_mode_selector, longest (edit_mode_strings).c_str(), 2+FUDGE, 10);
+ set_popdown_strings (edit_mode_selector, edit_mode_strings);
edit_mode_selector.signal_changed().connect (mem_fun(*this, &Editor::edit_mode_selection_done));
mode_box->pack_start(edit_mode_selector);
@@ -2641,17 +2564,17 @@ Editor::setup_toolbar ()
zoom_box.set_border_width (2);
zoom_in_button.set_name ("EditorTimeButton");
- zoom_in_button.add (*(manage (new Image (get_xpm("zoom_in.xpm")))));
+ zoom_in_button.add (*(manage (new Image (::get_icon("zoom_in")))));
zoom_in_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::temporal_zoom_step), false));
ARDOUR_UI::instance()->tooltips().set_tip (zoom_in_button, _("Zoom In"));
zoom_out_button.set_name ("EditorTimeButton");
- zoom_out_button.add (*(manage (new Image (get_xpm("zoom_out.xpm")))));
+ zoom_out_button.add (*(manage (new Image (::get_icon("zoom_out")))));
zoom_out_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::temporal_zoom_step), true));
ARDOUR_UI::instance()->tooltips().set_tip (zoom_out_button, _("Zoom Out"));
zoom_out_full_button.set_name ("EditorTimeButton");
- zoom_out_full_button.add (*(manage (new Image (get_xpm("zoom_full.xpm")))));
+ zoom_out_full_button.add (*(manage (new Image (::get_icon("zoom_full")))));
zoom_out_full_button.signal_clicked().connect (mem_fun(*this, &Editor::temporal_zoom_session));
ARDOUR_UI::instance()->tooltips().set_tip (zoom_out_full_button, _("Zoom to Session"));
@@ -2666,6 +2589,7 @@ Editor::setup_toolbar ()
Gtkmm2ext::set_size_request_to_display_given_text (zoom_focus_selector, "Focus Center", 2+FUDGE, 0);
set_popdown_strings (zoom_focus_selector, internationalize (zoom_focus_strings));
zoom_focus_selector.signal_changed().connect (mem_fun(*this, &Editor::zoom_focus_selection_done));
+ ARDOUR_UI::instance()->tooltips().set_tip (zoom_focus_selector, _("Zoom focus"));
zoom_box.pack_start (zoom_focus_selector, false, false);
@@ -2942,7 +2866,7 @@ Editor::set_selected_control_point_from_click (bool press, Selection::Operation
/* select this point and any others that it represents */
double y1, y2;
- jack_nframes_t x1, x2;
+ nframes_t x1, x2;
x1 = pixel_to_frame (clicked_control_point->get_x() - 10);
x2 = pixel_to_frame (clicked_control_point->get_x() + 10);
@@ -3125,8 +3049,8 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op,
} else if (op == Selection::Extend) {
list<Selectable*> results;
- jack_nframes_t last_frame;
- jack_nframes_t first_frame;
+ nframes_t last_frame;
+ nframes_t first_frame;
/* 1. find the last selected regionview in the track that was clicked in */
@@ -3522,7 +3446,7 @@ Editor::edit_mode_selection_done ()
mode = Slide;
}
- session->set_edit_mode (mode);
+ Config->set_edit_mode (mode);
}
void
@@ -3904,10 +3828,10 @@ Editor::playlist_selector () const
return *_playlist_selector;
}
-jack_nframes_t
-Editor::get_nudge_distance (jack_nframes_t pos, jack_nframes_t& next)
+nframes_t
+Editor::get_nudge_distance (nframes_t pos, nframes_t& next)
{
- jack_nframes_t ret;
+ nframes_t ret;
ret = nudge_clock.current_duration (pos);
next = ret + 1; /* XXXX fix me */
@@ -3957,7 +3881,7 @@ Editor::playlist_deletion_dialog (Playlist* pl)
}
bool
-Editor::audio_region_selection_covers (jack_nframes_t where)
+Editor::audio_region_selection_covers (nframes_t where)
{
for (RegionSelection::iterator a = selection->regions.begin(); a != selection->regions.end(); ++a) {
if ((*a)->region()->covers (where)) {
@@ -4149,131 +4073,3 @@ Editor::on_key_press_event (GdkEventKey* ev)
return key_press_focus_accelerator_handler (*this, ev);
}
-void
-Editor::update_smpte_mode ()
-{
- ENSURE_GUI_THREAD(mem_fun(*this, &Editor::update_smpte_mode));
-
- RefPtr<Action> act;
-
- float frames = session->smpte_frames_per_second;
- bool drop = session->smpte_drop_frames;
-
- if ((frames < 23.976 * 1.0005) && !drop)
- act = ActionManager::get_action (X_("Editor"), X_("Smpte23976"));
- else if ((frames < 24 * 1.0005) && !drop)
- act = ActionManager::get_action (X_("Editor"), X_("Smpte24"));
- else if ((frames < 24.976 * 1.0005) && !drop)
- act = ActionManager::get_action (X_("Editor"), X_("Smpte24976"));
- else if ((frames < 25 * 1.0005) && !drop)
- act = ActionManager::get_action (X_("Editor"), X_("Smpte25"));
- else if ((frames < 29.97 * 1.0005) && !drop)
- act = ActionManager::get_action (X_("Editor"), X_("Smpte2997"));
- else if ((frames < 29.97 * 1.0005) && drop)
- act = ActionManager::get_action (X_("Editor"), X_("Smpte2997drop"));
- else if ((frames < 30 * 1.0005) && !drop)
- act = ActionManager::get_action (X_("Editor"), X_("Smpte30"));
- else if ((frames < 30 * 1.0005) && drop)
- act = ActionManager::get_action (X_("Editor"), X_("Smpte30drop"));
- else if ((frames < 59.94 * 1.0005) && !drop)
- act = ActionManager::get_action (X_("Editor"), X_("Smpte5994"));
- else if ((frames < 60 * 1.0005) && !drop)
- act = ActionManager::get_action (X_("Editor"), X_("Smpte60"));
- else
- cerr << "Unexpected SMPTE value (" << frames << (drop ? "drop" : "") << ") in update_smpte_mode. Menu is probably wrong\n" << endl;
-
-
- if (act) {
- RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
- if (ract && !ract->get_active()) {
- ract->set_active (true);
- }
- }
-}
-
-void
-Editor::update_video_pullup ()
-{
- ENSURE_GUI_THREAD (mem_fun(*this, &Editor::update_video_pullup));
-
- RefPtr<Action> act;
-
- float pullup = session->video_pullup;
-
- if ( pullup < (-4.1667 - 0.1) * 0.99) {
- act = ActionManager::get_action (X_("Editor"), X_("PullupMinus4Minus1"));
- } else if ( pullup < (-4.1667) * 0.99 ) {
- act = ActionManager::get_action (X_("Editor"), X_("PullupMinus4"));
- } else if ( pullup < (-4.1667 + 0.1) * 0.99 ) {
- act = ActionManager::get_action (X_("Editor"), X_("PullupMinus4Plus1"));
- } else if ( pullup < (-0.1) * 0.99 ) {
- act = ActionManager::get_action (X_("Editor"), X_("PullupMinus1"));
- } else if (pullup > (4.1667 + 0.1) * 0.99 ) {
- act = ActionManager::get_action (X_("Editor"), X_("PullupPlus4Plus1"));
- } else if ( pullup > (4.1667) * 0.99 ) {
- act = ActionManager::get_action (X_("Editor"), X_("PullupPlus4"));
- } else if ( pullup > (4.1667 - 0.1) * 0.99) {
- act = ActionManager::get_action (X_("Editor"), X_("PullupPlus4Minus1"));
- } else if ( pullup > (0.1) * 0.99 ) {
- act = ActionManager::get_action (X_("Editor"), X_("PullupPlus1"));
- } else
- act = ActionManager::get_action (X_("Editor"), X_("PullupNone"));
-
-
- if (act) {
- RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
- if (ract && !ract->get_active()) {
- ract->set_active (true);
- }
- }
-
-}
-
-
-void
-Editor::update_layering_model ()
-{
- RefPtr<Action> act;
-
- switch (session->get_layer_model()) {
- case Session::LaterHigher:
- act = ActionManager::get_action (X_("Editor"), X_("LayerLaterHigher"));
- break;
- case Session::MoveAddHigher:
- act = ActionManager::get_action (X_("Editor"), X_("LayerMoveAddHigher"));
- break;
- case Session::AddHigher:
- act = ActionManager::get_action (X_("Editor"), X_("LayerAddHigher"));
- break;
- }
-
- if (act) {
- RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
- if (ract && !ract->get_active()) {
- ract->set_active (true);
- }
- }
-}
-
-void
-Editor::update_crossfade_model ()
-{
- RefPtr<Action> act;
-
- switch (session->get_xfade_model()) {
- case FullCrossfade:
- act = ActionManager::get_action (X_("Editor"), X_("CrossfadesFull"));
- break;
- case ShortCrossfade:
- act = ActionManager::get_action (X_("Editor"), X_("CrossfadesShort"));
- break;
- }
-
- if (act) {
- RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
- if (ract && !ract->get_active()) {
- ract->set_active (true);
- }
- }
-}
-
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index fe5d47df0c..c26248c1e7 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -128,9 +128,9 @@ class Editor : public PublicEditor
void connect_to_session (ARDOUR::Session *);
ARDOUR::Session* current_session() const { return session; }
- jack_nframes_t leftmost_position() const { return leftmost_frame; }
- jack_nframes_t current_page_frames() const {
- return (jack_nframes_t) floor (canvas_width * frames_per_unit);
+ nframes_t leftmost_position() const { return leftmost_frame; }
+ nframes_t current_page_frames() const {
+ return (nframes_t) floor (canvas_width * frames_per_unit);
}
void set_snap_to (Editing::SnapType);
@@ -176,11 +176,11 @@ class Editor : public PublicEditor
void set_edit_menu (Gtk::Menu&);
- jack_nframes_t unit_to_frame (double unit) {
- return (jack_nframes_t) rint (unit * frames_per_unit);
+ nframes_t unit_to_frame (double unit) {
+ return (nframes_t) rint (unit * frames_per_unit);
}
- double frame_to_unit (jack_nframes_t frame) {
+ double frame_to_unit (nframes_t frame) {
return rint ((double) frame / (double) frames_per_unit);
}
@@ -195,7 +195,7 @@ class Editor : public PublicEditor
xscroll_adjustment.
*/
- jack_nframes_t pixel_to_frame (double pixel) {
+ nframes_t pixel_to_frame (double pixel) {
/* pixel can be less than zero when motion events
are processed. since we've already run the world->canvas
@@ -204,13 +204,13 @@ class Editor : public PublicEditor
*/
if (pixel >= 0) {
- return (jack_nframes_t) rint (pixel * frames_per_unit * GNOME_CANVAS(track_canvas.gobj())->pixels_per_unit);
+ return (nframes_t) rint (pixel * frames_per_unit * GNOME_CANVAS(track_canvas.gobj())->pixels_per_unit);
} else {
return 0;
}
}
- gulong frame_to_pixel (jack_nframes_t frame) {
+ gulong frame_to_pixel (nframes_t frame) {
return (gulong) rint ((frame / (frames_per_unit * GNOME_CANVAS(track_canvas.gobj())->pixels_per_unit)));
}
@@ -263,7 +263,7 @@ class Editor : public PublicEditor
PlaylistSelector& playlist_selector() const;
void route_name_changed (TimeAxisView *);
gdouble frames_per_unit;
- jack_nframes_t leftmost_frame;
+ nframes_t leftmost_frame;
void clear_playlist (ARDOUR::Playlist&);
void new_playlists ();
@@ -298,9 +298,6 @@ class Editor : public PublicEditor
void toggle_waveforms_while_recording ();
void toggle_measure_visibility ();
- void set_meter_falloff (int);
- void set_meter_hold (int32_t);
-
/* SMPTE timecode & video sync */
void smpte_fps_chosen (ARDOUR::Session::SmpteFormat format);
@@ -318,9 +315,8 @@ class Editor : public PublicEditor
void update_crossfade_model ();
void set_crossfade_model (ARDOUR::CrossfadeModel);
-
/* layers */
- void set_layer_model (ARDOUR::Session::LayerModel);
+ void set_layer_model (ARDOUR::LayerModel);
void update_layering_model ();
/* redirect shared ops menu. caller must free returned menu */
@@ -339,14 +335,14 @@ class Editor : public PublicEditor
bool new_regionviews_display_gain () { return _new_regionviews_show_envelope; }
void prepare_for_cleanup ();
- void reposition_x_origin (jack_nframes_t sample);
+ void reposition_x_origin (nframes_t sample);
void maximise_editing_space();
void restore_editing_space();
protected:
void map_transport_state ();
- void map_position_change (jack_nframes_t);
+ void map_position_change (nframes_t);
void on_realize();
@@ -401,7 +397,7 @@ class Editor : public PublicEditor
void hide();
void show ();
void set_name (const string&);
- void set_position (jack_nframes_t start, jack_nframes_t end = 0);
+ void set_position (nframes_t start, nframes_t end = 0);
void set_color_rgba (uint32_t);
};
@@ -413,7 +409,7 @@ class Editor : public PublicEditor
void hide_marker (ArdourCanvas::Item*, GdkEvent*);
void clear_marker_display ();
- void mouse_add_new_marker (jack_nframes_t where);
+ void mouse_add_new_marker (nframes_t where);
TimeAxisView* clicked_axisview;
RouteTimeAxisView* clicked_routeview;
@@ -459,12 +455,12 @@ class Editor : public PublicEditor
Gtk::Menu * track_edit_playlist_submenu;
Gtk::Menu * track_selection_edit_playlist_submenu;
- void popup_track_context_menu (int, int, ItemType, bool, jack_nframes_t);
- Gtk::Menu* build_track_context_menu (jack_nframes_t);
- Gtk::Menu* build_track_bus_context_menu (jack_nframes_t);
- Gtk::Menu* build_track_region_context_menu (jack_nframes_t frame);
- Gtk::Menu* build_track_crossfade_context_menu (jack_nframes_t);
- Gtk::Menu* build_track_selection_context_menu (jack_nframes_t);
+ void popup_track_context_menu (int, int, ItemType, bool, nframes_t);
+ Gtk::Menu* build_track_context_menu (nframes_t);
+ Gtk::Menu* build_track_bus_context_menu (nframes_t);
+ Gtk::Menu* build_track_region_context_menu (nframes_t frame);
+ Gtk::Menu* build_track_crossfade_context_menu (nframes_t);
+ Gtk::Menu* build_track_selection_context_menu (nframes_t);
void add_dstream_context_items (Gtk::Menu_Helpers::MenuList&);
void add_bus_context_items (Gtk::Menu_Helpers::MenuList&);
void add_region_context_items (AudioStreamView*, boost::shared_ptr<ARDOUR::Region>, Gtk::Menu_Helpers::MenuList&);
@@ -488,9 +484,7 @@ class Editor : public PublicEditor
ArdourCanvas::Text* verbose_canvas_cursor;
bool verbose_cursor_visible;
- void session_control_changed (ARDOUR::Session::ControlType);
- void queue_session_control_changed (ARDOUR::Session::ControlType);
-
+ void parameter_changed (const char *);
bool track_canvas_motion (GdkEvent*);
@@ -546,7 +540,7 @@ class Editor : public PublicEditor
void update_just_smpte ();
void update_fixed_rulers ();
void update_tempo_based_rulers ();
- void popup_ruler_menu (jack_nframes_t where = 0, ItemType type = RegionItem);
+ void popup_ruler_menu (nframes_t where = 0, ItemType type = RegionItem);
void update_ruler_visibility ();
void ruler_toggled (int);
gint ruler_label_button_release (GdkEventButton*);
@@ -608,13 +602,13 @@ class Editor : public PublicEditor
Editor& editor;
ArdourCanvas::Points points;
ArdourCanvas::Line canvas_item;
- jack_nframes_t current_frame;
+ nframes_t current_frame;
double length;
Cursor (Editor&, const string& color, bool (Editor::*)(GdkEvent*,ArdourCanvas::Item*));
~Cursor ();
- void set_position (jack_nframes_t);
+ void set_position (nframes_t);
void set_length (double units);
void set_y_axis (double position);
};
@@ -635,9 +629,9 @@ class Editor : public PublicEditor
void select_all_selectables_using_cursor (Cursor *, bool);
void select_all_selectables_between_cursors (Cursor *, Cursor *);
- boost::shared_ptr<ARDOUR::Region> find_next_region (jack_nframes_t, ARDOUR::RegionPoint, int32_t dir, TrackViewList&, TimeAxisView ** = 0);
+ boost::shared_ptr<ARDOUR::Region> find_next_region (nframes_t, ARDOUR::RegionPoint, int32_t dir, TrackViewList&, TimeAxisView ** = 0);
- vector<jack_nframes_t> region_boundary_cache;
+ vector<nframes_t> region_boundary_cache;
void build_region_boundary_cache ();
Gtk::VBox trackview_vpacker;
@@ -665,7 +659,7 @@ class Editor : public PublicEditor
double canvas_width;
double canvas_height;
- jack_nframes_t last_canvas_frame;
+ nframes_t last_canvas_frame;
bool track_canvas_map_handler (GdkEventAny*);
bool time_canvas_map_handler (GdkEventAny*);
@@ -683,14 +677,14 @@ class Editor : public PublicEditor
Gtk::HBox edit_controls_hbox;
void control_scroll (float);
- bool deferred_control_scroll (jack_nframes_t);
+ bool deferred_control_scroll (nframes_t);
sigc::connection control_scroll_connection;
void tie_vertical_scrolling ();
void canvas_horizontally_scrolled ();
- void reposition_and_zoom (jack_nframes_t sample, double fpu);
- gint deferred_reposition_and_zoom (jack_nframes_t sample, double fpu);
+ void reposition_and_zoom (nframes_t sample, double fpu);
+ gint deferred_reposition_and_zoom (nframes_t sample, double fpu);
void end_location_changed (ARDOUR::Location*);
bool repos_zoom_queued;
@@ -702,14 +696,15 @@ class Editor : public PublicEditor
}
Gtk::TreeModelColumn<Glib::ustring> name;
Gtk::TreeModelColumn<boost::shared_ptr<ARDOUR::Region> > region;
- Gtk::TreeModelColumn<Gdk::Color> color_;
+ Gtk::TreeModelColumn<Gdk::Color> color_;
};
- RegionListDisplayModelColumns region_list_columns;
- Gtkmm2ext::DnDTreeView region_list_display;
- Glib::RefPtr<Gtk::TreeStore> region_list_model;
- Glib::RefPtr<Gtk::ToggleAction> toggle_full_region_list_action;
- Glib::RefPtr<Gtk::ToggleAction> toggle_show_auto_regions_action;
+ RegionListDisplayModelColumns region_list_columns;
+ Gtkmm2ext::DnDTreeView<boost::shared_ptr<ARDOUR::Region> > region_list_display;
+
+ Glib::RefPtr<Gtk::TreeStore> region_list_model;
+ Glib::RefPtr<Gtk::ToggleAction> toggle_full_region_list_action;
+ Glib::RefPtr<Gtk::ToggleAction> toggle_show_auto_regions_action;
void region_list_selection_changed ();
bool region_list_selection_filter (const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::Path& path, bool yn);
@@ -772,7 +767,7 @@ class Editor : public PublicEditor
NamedSelectionDisplayModelColumns named_selection_columns;
Glib::RefPtr<Gtk::TreeStore> named_selection_model;
- Gtkmm2ext::DnDTreeView named_selection_display;
+ Gtkmm2ext::DnDTreeView<ARDOUR::NamedSelection*> named_selection_display;
Gtk::ScrolledWindow named_selection_scroller;
void name_selection();
@@ -806,9 +801,9 @@ class Editor : public PublicEditor
static void build_cursors ();
sigc::connection scroll_connection;
- jack_nframes_t last_update_frame;
- void center_screen (jack_nframes_t);
- void center_screen_internal (jack_nframes_t, float);
+ nframes_t last_update_frame;
+ void center_screen (nframes_t);
+ void center_screen_internal (nframes_t, float);
void update_current_screen ();
@@ -817,8 +812,8 @@ class Editor : public PublicEditor
void session_going_away ();
- jack_nframes_t cut_buffer_start;
- jack_nframes_t cut_buffer_length;
+ nframes_t cut_buffer_start;
+ nframes_t cut_buffer_length;
bool typed_event (ArdourCanvas::Item*, GdkEvent*, ItemType);
bool button_press_handler (ArdourCanvas::Item*, GdkEvent*, ItemType);
@@ -831,7 +826,7 @@ class Editor : public PublicEditor
void register_actions ();
- int ensure_cursor (jack_nframes_t* pos);
+ int ensure_cursor (nframes_t* pos);
void handle_new_region (boost::shared_ptr<ARDOUR::Region>);
void handle_region_removed (boost::shared_ptr<ARDOUR::Region>);
@@ -848,7 +843,7 @@ class Editor : public PublicEditor
void cut_copy_ranges (Editing::CutCopyOp);
void mouse_paste ();
- void paste_internal (jack_nframes_t position, float times);
+ void paste_internal (nframes_t position, float times);
/* EDITING OPERATIONS */
@@ -860,16 +855,16 @@ class Editor : public PublicEditor
void lower_region ();
void lower_region_to_bottom ();
void split_region ();
- void split_region_at (jack_nframes_t);
- void split_regions_at (jack_nframes_t, RegionSelection&);
+ void split_region_at (nframes_t);
+ void split_regions_at (nframes_t, RegionSelection&);
void crop_region_to_selection ();
- void set_a_regions_sync_position (boost::shared_ptr<ARDOUR::Region>, jack_nframes_t);
+ void set_a_regions_sync_position (boost::shared_ptr<ARDOUR::Region>, nframes_t);
void set_region_sync_from_edit_cursor ();
void remove_region_sync();
- void align_selection (ARDOUR::RegionPoint, jack_nframes_t position);
- void align_selection_relative (ARDOUR::RegionPoint point, jack_nframes_t position);
- void align_region (boost::shared_ptr<ARDOUR::Region>, ARDOUR::RegionPoint point, jack_nframes_t position);
- void align_region_internal (boost::shared_ptr<ARDOUR::Region>, ARDOUR::RegionPoint point, jack_nframes_t position);
+ void align_selection (ARDOUR::RegionPoint, nframes_t position);
+ void align_selection_relative (ARDOUR::RegionPoint point, nframes_t position);
+ void align_region (boost::shared_ptr<ARDOUR::Region>, ARDOUR::RegionPoint point, nframes_t position);
+ void align_region_internal (boost::shared_ptr<ARDOUR::Region>, ARDOUR::RegionPoint point, nframes_t position);
void remove_some_regions ();
void remove_clicked_region ();
void destroy_clicked_region ();
@@ -927,8 +922,8 @@ class Editor : public PublicEditor
void temporal_zoom_selection ();
void temporal_zoom_session ();
void temporal_zoom (gdouble scale);
- void temporal_zoom_by_frame (jack_nframes_t start, jack_nframes_t end, const string & op);
- void temporal_zoom_to_frame (bool coarser, jack_nframes_t frame);
+ void temporal_zoom_by_frame (nframes_t start, nframes_t end, const string & op);
+ void temporal_zoom_to_frame (bool coarser, nframes_t frame);
void amplitude_zoom (gdouble scale);
void amplitude_zoom_step (bool in);
@@ -938,13 +933,13 @@ class Editor : public PublicEditor
void add_external_audio_action (Editing::ImportMode);
- void bring_in_external_audio (Editing::ImportMode mode, ARDOUR::AudioTrack*, jack_nframes_t& pos, bool prompt);
- void do_import (vector<Glib::ustring> paths, bool split, Editing::ImportMode mode, ARDOUR::AudioTrack*, jack_nframes_t&, bool);
- void do_embed (vector<Glib::ustring> paths, bool split, Editing::ImportMode mode, ARDOUR::AudioTrack*, jack_nframes_t&, bool);
- int import_sndfile (Glib::ustring path, Editing::ImportMode mode, ARDOUR::AudioTrack* track, jack_nframes_t& pos);
+ void bring_in_external_audio (Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes_t& pos, bool prompt);
+ void do_import (vector<Glib::ustring> paths, bool split, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes_t&, bool);
+ void do_embed (vector<Glib::ustring> paths, bool split, Editing::ImportMode mode, ARDOUR::AudioTrack*, nframes_t&, bool);
+ int import_sndfile (Glib::ustring path, Editing::ImportMode mode, ARDOUR::AudioTrack* track, nframes_t& pos);
int embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode,
- ARDOUR::AudioTrack* track, jack_nframes_t& pos, bool prompt);
- int finish_bringing_in_audio (boost::shared_ptr<ARDOUR::AudioRegion> region, uint32_t, uint32_t, ARDOUR::AudioTrack* track, jack_nframes_t& pos, Editing::ImportMode mode);
+ ARDOUR::AudioTrack* track, nframes_t& pos, bool prompt);
+ int finish_bringing_in_audio (boost::shared_ptr<ARDOUR::AudioRegion> region, uint32_t, uint32_t, ARDOUR::AudioTrack* track, nframes_t& pos, Editing::ImportMode mode);
/* generic interthread progress window */
@@ -1025,7 +1020,7 @@ class Editor : public PublicEditor
void keyboard_selection_begin ();
void keyboard_selection_finish (bool add);
bool have_pending_keyboard_selection;
- jack_nframes_t pending_keyboard_selection_start;
+ nframes_t pending_keyboard_selection_start;
boost::shared_ptr<ARDOUR::Region> select_region_for_operation (int dir, TimeAxisView **tv);
void extend_selection_to_end_of_region (bool next);
@@ -1101,11 +1096,11 @@ class Editor : public PublicEditor
void remove_gain_control_point (ArdourCanvas::Item*, GdkEvent*);
void remove_control_point (ArdourCanvas::Item*, GdkEvent*);
- void mouse_brush_insert_region (RegionView*, jack_nframes_t pos);
- void brush (jack_nframes_t);
+ void mouse_brush_insert_region (RegionView*, nframes_t pos);
+ void brush (nframes_t);
- void show_verbose_time_cursor (jack_nframes_t frame, double offset = 0, double xpos=-1, double ypos=-1);
- void show_verbose_duration_cursor (jack_nframes_t start, jack_nframes_t end, double offset = 0, double xpos=-1, double ypos=-1);
+ void show_verbose_time_cursor (nframes_t frame, double offset = 0, double xpos=-1, double ypos=-1);
+ void show_verbose_duration_cursor (nframes_t start, nframes_t end, double offset = 0, double xpos=-1, double ypos=-1);
/* Canvas event handlers */
@@ -1204,8 +1199,8 @@ class Editor : public PublicEditor
void new_tempo_section ();
- void mouse_add_new_tempo_event (jack_nframes_t where);
- void mouse_add_new_meter_event (jack_nframes_t where);
+ void mouse_add_new_tempo_event (nframes_t where);
+ void mouse_add_new_meter_event (nframes_t where);
void remove_tempo_marker (ArdourCanvas::Item*);
void remove_meter_marker (ArdourCanvas::Item*);
@@ -1259,7 +1254,7 @@ class Editor : public PublicEditor
void tempo_map_changed (ARDOUR::Change);
void redisplay_tempo ();
- void snap_to (jack_nframes_t& first, int32_t direction = 0, bool for_mark = false);
+ void snap_to (nframes_t& first, int32_t direction = 0, bool for_mark = false);
uint32_t bbt_beat_subdivision;
/* toolbar */
@@ -1357,7 +1352,7 @@ class Editor : public PublicEditor
void region_selection_op (void (ARDOUR::Region::*pmf)(void*), void*);
void region_selection_op (void (ARDOUR::Region::*pmf)(bool), bool);
- bool audio_region_selection_covers (jack_nframes_t where);
+ bool audio_region_selection_covers (nframes_t where);
/* transport range select process */
enum RangeMarkerOp {
@@ -1398,7 +1393,7 @@ class Editor : public PublicEditor
void drag_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event);
void end_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event);
- bool select_all_within (jack_nframes_t start, jack_nframes_t end, gdouble topy, gdouble boty, Selection::Operation op);
+ bool select_all_within (nframes_t start, nframes_t end, gdouble topy, gdouble boty, Selection::Operation op);
ArdourCanvas::SimpleRect *rubberband_rect;
@@ -1409,7 +1404,7 @@ class Editor : public PublicEditor
void end_mouse_zoom (ArdourCanvas::Item* item, GdkEvent* event);
ArdourCanvas::SimpleRect *zoom_rect;
- void reposition_zoom_rect (jack_nframes_t start, jack_nframes_t end);
+ void reposition_zoom_rect (nframes_t start, nframes_t end);
/* diskstream/route display management */
@@ -1429,9 +1424,9 @@ class Editor : public PublicEditor
Glib::RefPtr<Gtk::TreeSelection> route_display_selection;
gint route_list_compare_func (Gtk::TreeModel::iterator, Gtk::TreeModel::iterator);
- Gtkmm2ext::DnDTreeView route_list_display;
- Gtk::ScrolledWindow route_list_scroller;
- Gtk::Menu* route_list_menu;
+ Gtkmm2ext::DnDTreeView<boost::shared_ptr<ARDOUR::Route> > route_list_display;
+ Gtk::ScrolledWindow route_list_scroller;
+ Gtk::Menu* route_list_menu;
bool route_list_display_button_press (GdkEventButton*);
bool route_list_selection_filter (const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::Path& path, bool yn);
@@ -1503,10 +1498,11 @@ class Editor : public PublicEditor
/* autoscrolling */
+ bool autoscroll_active;
int autoscroll_timeout_tag;
int autoscroll_direction;
uint32_t autoscroll_cnt;
- jack_nframes_t autoscroll_distance;
+ nframes_t autoscroll_distance;
static gint _autoscroll_canvas (void *);
bool autoscroll_canvas ();
@@ -1524,9 +1520,9 @@ class Editor : public PublicEditor
void start_trim (ArdourCanvas::Item*, GdkEvent*);
void point_trim (GdkEvent*);
void trim_motion_callback (ArdourCanvas::Item*, GdkEvent*);
- void single_contents_trim (RegionView&, jack_nframes_t, bool, bool, bool);
- void single_start_trim (RegionView&, jack_nframes_t, bool, bool);
- void single_end_trim (RegionView&, jack_nframes_t, bool, bool);
+ void single_contents_trim (RegionView&, nframes_t, bool, bool, bool);
+ void single_start_trim (RegionView&, nframes_t, bool, bool);
+ void single_end_trim (RegionView&, nframes_t, bool, bool);
void trim_finished_callback (ArdourCanvas::Item*, GdkEvent*);
void thaw_region_after_trim (RegionView& rv);
@@ -1580,7 +1576,7 @@ class Editor : public PublicEditor
ExportDialog *export_dialog;
ExportDialog *export_range_markers_dialog;
- void export_range (jack_nframes_t start, jack_nframes_t end);
+ void export_range (nframes_t start, nframes_t end);
void export_range_markers ();
int write_region_selection(RegionSelection&);
@@ -1654,7 +1650,7 @@ class Editor : public PublicEditor
Gtk::Menu* edit_menu;
bool edit_menu_map_handler (GdkEventAny*);
- jack_nframes_t event_frame (GdkEvent*, double* px = 0, double* py = 0);
+ nframes_t event_frame (GdkEvent*, double* px = 0, double* py = 0);
void time_fx_motion (ArdourCanvas::Item*, GdkEvent*);
void start_time_fx (ArdourCanvas::Item*, GdkEvent*);
@@ -1770,7 +1766,7 @@ class Editor : public PublicEditor
Gtk::VBox nudge_vbox;
AudioClock nudge_clock;
- jack_nframes_t get_nudge_distance (jack_nframes_t pos, jack_nframes_t& next);
+ nframes_t get_nudge_distance (nframes_t pos, nframes_t& next);
/* audio filters */
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index f1b9ef4b83..6fb8950047 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -5,6 +5,7 @@
#include "editing.h"
#include "actions.h"
#include "ardour_ui.h"
+#include "gui_thread.h"
#include "i18n.h"
using namespace Gtk;
@@ -41,9 +42,6 @@ Editor::register_actions ()
ActionManager::register_action (editor_actions, X_("Layering"), _("Layering"));
ActionManager::register_action (editor_actions, X_("SMPTE"), _("SMPTE fps"));
ActionManager::register_action (editor_actions, X_("Pullup"), _("Pullup / Pulldown"));
- ActionManager::register_action (editor_actions, X_("Metering"), _("Metering"));
- ActionManager::register_action (editor_actions, X_("MeteringFallOffRate"), _("Fall off rate"));
- ActionManager::register_action (editor_actions, X_("MeteringHoldTime"), _("Hold Time"));
ActionManager::register_action (editor_actions, X_("addExistingAudioFiles"), _("Add Existing Audio"));
/* add named actions for the editor */
@@ -368,32 +366,11 @@ Editor::register_actions ()
ActionManager::register_toggle_action (editor_actions, X_("ToggleWaveformsWhileRecording"), _("Show Waveforms While Recording"), mem_fun (*this, &Editor::toggle_waveforms_while_recording));
act = ActionManager::register_toggle_action (editor_actions, X_("ToggleMeasureVisibility"), _("Show Measures"), mem_fun (*this, &Editor::toggle_measure_visibility));
- RadioAction::Group meter_falloff_group;
- RadioAction::Group meter_hold_group;
-
- /*
- Slowest = 6.6dB/sec falloff at update rate of 40ms
- Slow = 6.8dB/sec falloff at update rate of 40ms
- */
-
- ActionManager::register_radio_action (editor_actions, meter_falloff_group, X_("MeterFalloffOff"), _("Off"), bind (mem_fun (*this, &Editor::set_meter_falloff), 0));
- ActionManager::register_radio_action (editor_actions, meter_falloff_group, X_("MeterFalloffSlowest"), _("Slowest"), bind (mem_fun (*this, &Editor::set_meter_falloff), 1));
- ActionManager::register_radio_action (editor_actions, meter_falloff_group, X_("MeterFalloffSlow"), _("Slow"), bind (mem_fun (*this, &Editor::set_meter_falloff), 2));
- ActionManager::register_radio_action (editor_actions, meter_falloff_group, X_("MeterFalloffMedium"), _("Medium"), bind (mem_fun (*this, &Editor::set_meter_falloff), 3));
- ActionManager::register_radio_action (editor_actions, meter_falloff_group, X_("MeterFalloffFast"), _("Fast"), bind (mem_fun (*this, &Editor::set_meter_falloff), 4));
- ActionManager::register_radio_action (editor_actions, meter_falloff_group, X_("MeterFalloffFaster"), _("Faster"), bind (mem_fun (*this, &Editor::set_meter_falloff), 5));
- ActionManager::register_radio_action (editor_actions, meter_falloff_group, X_("MeterFalloffFastest"), _("Fastest"), bind (mem_fun (*this, &Editor::set_meter_falloff), 6));
-
- ActionManager::register_radio_action (editor_actions, meter_hold_group, X_("MeterHoldOff"), _("Off"), bind (mem_fun (*this, &Editor::set_meter_hold), 0));
- ActionManager::register_radio_action (editor_actions, meter_hold_group, X_("MeterHoldShort"), _("Short"), bind (mem_fun (*this, &Editor::set_meter_hold), 40));
- ActionManager::register_radio_action (editor_actions, meter_hold_group, X_("MeterHoldMedium"), _("Medium"), bind (mem_fun (*this, &Editor::set_meter_hold), 100));
- ActionManager::register_radio_action (editor_actions, meter_hold_group, X_("MeterHoldLong"), _("Long"), bind (mem_fun (*this, &Editor::set_meter_hold), 200));
-
RadioAction::Group layer_model_group;
- ActionManager::register_radio_action (editor_actions, layer_model_group, X_("LayerLaterHigher"), _("Later is Higher"), bind (mem_fun (*this, &Editor::set_layer_model), Session::LaterHigher));
- ActionManager::register_radio_action (editor_actions, layer_model_group, X_("LayerMoveAddHigher"), _("Most Recently Moved/Added is Higher"), bind (mem_fun (*this, &Editor::set_layer_model), Session::MoveAddHigher));
- ActionManager::register_radio_action (editor_actions, layer_model_group, X_("LayerAddHigher"), _("Most Recently Added is Higher"), bind (mem_fun (*this, &Editor::set_layer_model), Session::AddHigher));
+ ActionManager::register_radio_action (editor_actions, layer_model_group, X_("LayerLaterHigher"), _("Later is Higher"), bind (mem_fun (*this, &Editor::set_layer_model), LaterHigher));
+ ActionManager::register_radio_action (editor_actions, layer_model_group, X_("LayerMoveAddHigher"), _("Most Recently Moved/Added is Higher"), bind (mem_fun (*this, &Editor::set_layer_model), MoveAddHigher));
+ ActionManager::register_radio_action (editor_actions, layer_model_group, X_("LayerAddHigher"), _("Most Recently Added is Higher"), bind (mem_fun (*this, &Editor::set_layer_model), AddHigher));
RadioAction::Group smpte_group;
@@ -458,37 +435,168 @@ Editor::toggle_measure_visibility ()
}
void
-Editor::toggle_auto_xfade ()
+Editor::set_crossfade_model (CrossfadeModel model)
{
- Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("toggle-auto-xfades"));
+ RefPtr<Action> act;
+
+ /* this is driven by a toggle on a radio group, and so is invoked twice,
+ once for the item that became inactive and once for the one that became
+ active.
+ */
+
+ switch (model) {
+ case FullCrossfade:
+ act = ActionManager::get_action (X_("Editor"), X_("CrossfadesFull"));
+ break;
+ case ShortCrossfade:
+ act = ActionManager::get_action (X_("Editor"), X_("CrossfadesShort"));
+ break;
+ }
+
if (act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- Config->set_auto_xfade (tact->get_active());
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && ract->get_active()) {
+ Config->set_xfade_model (model);
+ }
}
}
void
-Editor::toggle_xfades_active ()
+Editor::update_crossfade_model ()
{
- Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("toggle-xfades-active"));
- if (session && act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- session->set_crossfades_active (tact->get_active());
+ RefPtr<Action> act;
+
+ switch (Config->get_xfade_model()) {
+ case FullCrossfade:
+ act = ActionManager::get_action (X_("Editor"), X_("CrossfadesFull"));
+ break;
+ case ShortCrossfade:
+ act = ActionManager::get_action (X_("Editor"), X_("CrossfadesShort"));
+ break;
+ }
+
+ if (act) {
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && !ract->get_active()) {
+ ract->set_active (true);
+ }
}
}
void
-Editor::toggle_xfade_visibility ()
+Editor::update_smpte_mode ()
{
- Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("toggle-xfades-visible"));
- if (session && act) {
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
- // set_xfade_visibility (tact->get_active());
+ ENSURE_GUI_THREAD(mem_fun(*this, &Editor::update_smpte_mode));
+
+ RefPtr<Action> act;
+ const char* action = 0;
+
+ float frames = Config->get_smpte_frames_per_second();
+ bool drop = Config->get_smpte_drop_frames();
+
+ if ((frames < 23.976 * 1.0005) && !drop)
+ action = X_("Smpte23976");
+ else if ((frames < 24 * 1.0005) && !drop)
+ action = X_("Smpte24");
+ else if ((frames < 24.976 * 1.0005) && !drop)
+ action = X_("Smpte24976");
+ else if ((frames < 25 * 1.0005) && !drop)
+ action = X_("Smpte25");
+ else if ((frames < 29.97 * 1.0005) && !drop)
+ action = X_("Smpte2997");
+ else if ((frames < 29.97 * 1.0005) && drop)
+ action = X_("Smpte2997drop");
+ else if ((frames < 30 * 1.0005) && !drop)
+ action = X_("Smpte30");
+ else if ((frames < 30 * 1.0005) && drop)
+ action = X_("Smpte30drop");
+ else if ((frames < 59.94 * 1.0005) && !drop)
+ action = X_("Smpte5994");
+ else if ((frames < 60 * 1.0005) && !drop)
+ action = X_("Smpte60");
+ else {
+ fatal << string_compose (_("programming error: Unexpected SMPTE value (%1, drop = %2) in update_smpte_mode. Menu is probably wrong."),
+ frames, drop) << endmsg;
+ /*NOTREACHED*/
+ }
+
+ act = ActionManager::get_action (X_("Editor"), action);
+
+ if (act) {
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && !ract->get_active()) {
+ ract->set_active (true);
+ }
+ }
+}
+
+void
+Editor::update_video_pullup ()
+{
+ ENSURE_GUI_THREAD (mem_fun(*this, &Editor::update_video_pullup));
+
+ RefPtr<Action> act;
+ const char* action = 0;
+
+ float pullup = Config->get_video_pullup();
+
+ if ( pullup < (-4.1667 - 0.1) * 0.99) {
+ action = X_("PullupMinus4Minus1");
+ } else if ( pullup < (-4.1667) * 0.99 ) {
+ action = X_("PullupMinus4");
+ } else if ( pullup < (-4.1667 + 0.1) * 0.99 ) {
+ action = X_("PullupMinus4Plus1");
+ } else if ( pullup < (-0.1) * 0.99 ) {
+ action = X_("PullupMinus1");
+ } else if (pullup > (4.1667 + 0.1) * 0.99 ) {
+ action = X_("PullupPlus4Plus1");
+ } else if ( pullup > (4.1667) * 0.99 ) {
+ action = X_("PullupPlus4");
+ } else if ( pullup > (4.1667 - 0.1) * 0.99) {
+ action = X_("PullupPlus4Minus1");
+ } else if ( pullup > (0.1) * 0.99 ) {
+ action = X_("PullupPlus1");
+ } else {
+ action = X_("PullupNone");
+ }
+
+ act = ActionManager::get_action (X_("Editor"), action);
+
+ if (act) {
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && !ract->get_active()) {
+ ract->set_active (true);
+ }
}
}
void
-Editor::set_layer_model (Session::LayerModel model)
+Editor::update_layering_model ()
+{
+ RefPtr<Action> act;
+
+ switch (Config->get_layer_model()) {
+ case LaterHigher:
+ act = ActionManager::get_action (X_("Editor"), X_("LayerLaterHigher"));
+ break;
+ case MoveAddHigher:
+ act = ActionManager::get_action (X_("Editor"), X_("LayerMoveAddHigher"));
+ break;
+ case AddHigher:
+ act = ActionManager::get_action (X_("Editor"), X_("LayerAddHigher"));
+ break;
+ }
+
+ if (act) {
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && !ract->get_active()) {
+ ract->set_active (true);
+ }
+ }
+}
+
+void
+Editor::set_layer_model (LayerModel model)
{
/* this is driven by a toggle on a radio group, and so is invoked twice,
once for the item that became inactive and once for the one that became
@@ -497,24 +605,22 @@ Editor::set_layer_model (Session::LayerModel model)
RefPtr<Action> act;
- if (session) {
- switch (model) {
- case Session::LaterHigher:
- act = ActionManager::get_action (X_("Editor"), X_("LayerLaterHigher"));
- break;
- case Session::MoveAddHigher:
- act = ActionManager::get_action (X_("Editor"), X_("LayerMoveAddHigher"));
- break;
- case Session::AddHigher:
- act = ActionManager::get_action (X_("Editor"), X_("LayerAddHigher"));
- break;
- }
-
- if (act) {
- RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
- if (ract && ract->get_active()) {
- session->set_layer_model (model);
- }
+ switch (model) {
+ case LaterHigher:
+ act = ActionManager::get_action (X_("Editor"), X_("LayerLaterHigher"));
+ break;
+ case MoveAddHigher:
+ act = ActionManager::get_action (X_("Editor"), X_("LayerMoveAddHigher"));
+ break;
+ case AddHigher:
+ act = ActionManager::get_action (X_("Editor"), X_("LayerAddHigher"));
+ break;
+ }
+
+ if (act) {
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && ract->get_active() && Config->get_layer_model() != model) {
+ Config->set_layer_model (model);
}
}
}
@@ -606,88 +712,114 @@ Editor::video_pullup_chosen (Session::PullupFormat pullup)
active.
*/
- if (session) {
-
- RefPtr<Action> act;
-
- float pull = 0.0;
+ const char* action = 0;
- switch (pullup) {
- case Session::pullup_Plus4Plus1:{
- pull = 4.1667 + 0.1;
- act = ActionManager::get_action (X_("Editor"), X_("PullupPlus4Plus1"));
- } break;
- case Session::pullup_Plus4:{
- pull = 4.1667;
- act = ActionManager::get_action (X_("Editor"), X_("PullupPlus4"));
- } break;
- case Session::pullup_Plus4Minus1:{
- pull = 4.1667 - 0.1;
- act = ActionManager::get_action (X_("Editor"), X_("PullupPlus4Minus1"));
- } break;
- case Session::pullup_Plus1:{
- pull = 0.1;
- act = ActionManager::get_action (X_("Editor"), X_("PullupPlus1"));
- } break;
- case Session::pullup_None:{
- pull = 0.0;
- act = ActionManager::get_action (X_("Editor"), X_("PullupNone"));
- } break;
- case Session::pullup_Minus1:{
- pull = -0.1;
- act = ActionManager::get_action (X_("Editor"), X_("PullupMinus1"));
- } break;
- case Session::pullup_Minus4Plus1:{
- pull = -4.1667 + 0.1;
- act = ActionManager::get_action (X_("Editor"), X_("PullupMinus4Plus1"));
- } break;
- case Session::pullup_Minus4:{
- pull = -4.1667;
- act = ActionManager::get_action (X_("Editor"), X_("PullupMinus4"));
- } break;
- case Session::pullup_Minus4Minus1:{
- pull = -4.1667 - 0.1;
- act = ActionManager::get_action (X_("Editor"), X_("PullupMinus4Minus1"));
- } break;
- default:
- cerr << "Session received unexpected pullup type" << endl;
+ RefPtr<Action> act;
+
+ float pull = 0.0;
+
+ switch (pullup) {
+ case Session::pullup_Plus4Plus1:
+ pull = 4.1667 + 0.1;
+ action = X_("PullupPlus4Plus1");
+ break;
+ case Session::pullup_Plus4:
+ pull = 4.1667;
+ action = X_("PullupPlus4");
+ break;
+ case Session::pullup_Plus4Minus1:
+ pull = 4.1667 - 0.1;
+ action = X_("PullupPlus4Minus1");
+ break;
+ case Session::pullup_Plus1:
+ pull = 0.1;
+ action = X_("PullupPlus1");
+ break;
+ case Session::pullup_None:
+ pull = 0.0;
+ action = X_("PullupNone");
+ break;
+ case Session::pullup_Minus1:
+ pull = -0.1;
+ action = X_("PullupMinus1");
+ break;
+ case Session::pullup_Minus4Plus1:
+ pull = -4.1667 + 0.1;
+ action = X_("PullupMinus4Plus1");
+ break;
+ case Session::pullup_Minus4:
+ pull = -4.1667;
+ action = X_("PullupMinus4");
+ break;
+ case Session::pullup_Minus4Minus1:
+ pull = -4.1667 - 0.1;
+ action = X_("PullupMinus4Minus1");
+ break;
+ default:
+ fatal << string_compose (_("programming error: %1"), "Session received unexpected pullup type") << endmsg;
+ /*NOTREACHED*/
+ }
+
+ act = ActionManager::get_action (X_("Editor"), action);
+
+ if (act) {
+ RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
+ if (ract && ract->get_active()) {
+ Config->set_video_pullup ( pull );
}
- if (act) {
- RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
- if (ract && ract->get_active()) {
- session->set_video_pullup ( pull );
- }
- } else cerr << "Editor::video_pullup_chosen could not find action to match pullup." << endl;
+ } else {
+ error << string_compose (_("programming error: %1"), "Editor::video_pullup_chosen could not find action to match pullup.") << endmsg;
}
}
+void
+Editor::toggle_auto_xfade ()
+{
+ ActionManager::toggle_config_state ("Editor", "toggle-auto-xfades", &Configuration::set_auto_xfade, &Configuration::get_auto_xfade);
+}
void
-Editor::set_crossfade_model (CrossfadeModel model)
+Editor::toggle_xfades_active ()
{
- RefPtr<Action> act;
+ ActionManager::toggle_config_state ("Editor", "toggle-xfades-active", &Configuration::set_crossfades_active, &Configuration::get_crossfades_active);
+}
- /* this is driven by a toggle on a radio group, and so is invoked twice,
- once for the item that became inactive and once for the one that became
- active.
- */
+void
+Editor::toggle_xfade_visibility ()
+{
+ ActionManager::toggle_config_state ("Editor", "toggle-xfades-visibility", &Configuration::set_crossfades_visible, &Configuration::get_crossfades_visible);
+}
- if (session) {
- switch (model) {
- case FullCrossfade:
- act = ActionManager::get_action (X_("Editor"), X_("CrossfadesFull"));
- break;
- case ShortCrossfade:
- act = ActionManager::get_action (X_("Editor"), X_("CrossfadesShort"));
- break;
- }
-
- if (act) {
- RefPtr<RadioAction> ract = RefPtr<RadioAction>::cast_dynamic(act);
- if (ract && ract->get_active()) {
- session->set_xfade_model (model);
- }
- }
+void
+Editor::parameter_changed (const char* parameter_name)
+{
+#define PARAM_IS(x) (!strcmp (parameter_name, (x)))
+
+ ENSURE_GUI_THREAD (bind (mem_fun (*this, &Editor::parameter_changed), parameter_name));
+
+ if (PARAM_IS ("auto-loop")) {
+ update_loop_range_view (true);
+ } else if (PARAM_IS ("punch-in")) {
+ update_punch_range_view (true);
+ } else if (PARAM_IS ("punch-out")) {
+ update_punch_range_view (true);
+ } else if (PARAM_IS ("layer-model")) {
+ update_layering_model ();
+ } else if (PARAM_IS ("smpte-frames-per-second") || PARAM_IS ("smpte-drop-frames")) {
+ update_smpte_mode ();
+ update_just_smpte ();
+ } else if (PARAM_IS ("video-pullup")) {
+ update_video_pullup ();
+ } else if (PARAM_IS ("crossfades-active")) {
+ ActionManager::map_some_state ("Editor", "toggle-xfades-active", &Configuration::get_crossfades_active);
+ } else if (PARAM_IS ("crossfades-visible")) {
+ ActionManager::map_some_state ("Editor", "toggle-xfades-visible", &Configuration::get_crossfades_visible);
+ } else if (PARAM_IS ("auto-xfade")) {
+ ActionManager::map_some_state ("Editor", "toggle-auto-xfades", &Configuration::get_auto_xfade);
+ } else if (PARAM_IS ("edit-mode")) {
+ edit_mode_selector.set_active_text (edit_mode_to_string (Config->get_edit_mode()));
}
+
+#undef PARAM_IS
}
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index e38dee5953..eb232ff802 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -55,7 +55,7 @@ using namespace Editing;
void
Editor::add_external_audio_action (ImportMode mode)
{
- jack_nframes_t& pos = edit_cursor->current_frame;
+ nframes_t& pos = edit_cursor->current_frame;
AudioTrack* track = 0;
if (!selection->tracks.empty()) {
@@ -69,7 +69,7 @@ Editor::add_external_audio_action (ImportMode mode)
}
void
-Editor::bring_in_external_audio (ImportMode mode, AudioTrack* track, jack_nframes_t& pos, bool prompt)
+Editor::bring_in_external_audio (ImportMode mode, AudioTrack* track, nframes_t& pos, bool prompt)
{
if (session == 0) {
MessageDialog msg (0, _("You can't import or embed an audiofile until you have a session loaded."));
@@ -95,7 +95,7 @@ Editor::bring_in_external_audio (ImportMode mode, AudioTrack* track, jack_nframe
}
void
-Editor::do_import (vector<Glib::ustring> paths, bool split, ImportMode mode, AudioTrack* track, jack_nframes_t& pos, bool prompt)
+Editor::do_import (vector<Glib::ustring> paths, bool split, ImportMode mode, AudioTrack* track, nframes_t& pos, bool prompt)
{
/* SFDB sets "multichan" to true to indicate "split channels"
so reverse the setting to match the way libardour
@@ -120,7 +120,7 @@ Editor::do_import (vector<Glib::ustring> paths, bool split, ImportMode mode, Aud
}
void
-Editor::do_embed (vector<Glib::ustring> paths, bool split, ImportMode mode, AudioTrack* track, jack_nframes_t& pos, bool prompt)
+Editor::do_embed (vector<Glib::ustring> paths, bool split, ImportMode mode, AudioTrack* track, nframes_t& pos, bool prompt)
{
bool multiple_files = paths.size() > 1;
bool check_sample_rate = true;
@@ -140,7 +140,7 @@ Editor::do_embed (vector<Glib::ustring> paths, bool split, ImportMode mode, Audi
}
int
-Editor::import_sndfile (Glib::ustring path, ImportMode mode, AudioTrack* track, jack_nframes_t& pos)
+Editor::import_sndfile (Glib::ustring path, ImportMode mode, AudioTrack* track, nframes_t& pos)
{
interthread_progress_window->set_title (string_compose (_("ardour: importing %1"), path));
interthread_progress_window->set_position (Gtk::WIN_POS_MOUSE);
@@ -188,7 +188,7 @@ Editor::import_sndfile (Glib::ustring path, ImportMode mode, AudioTrack* track,
int
Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool& check_sample_rate, ImportMode mode,
- AudioTrack* track, jack_nframes_t& pos, bool prompt)
+ AudioTrack* track, nframes_t& pos, bool prompt)
{
boost::shared_ptr<AudioFileSource> source;
SourceList sources;
@@ -294,7 +294,7 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
input_chan = finfo.channels;
- if (session->get_output_auto_connect() & Session::AutoConnectMaster) {
+ if (Config->get_output_auto_connect() & AutoConnectMaster) {
output_chan = (session->master_out() ? session->master_out()->n_inputs().get(DataType::AUDIO) : input_chan);
} else {
output_chan = input_chan;
@@ -308,7 +308,7 @@ Editor::embed_sndfile (Glib::ustring path, bool split, bool multiple_files, bool
}
int
-Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_t in_chans, uint32_t out_chans, AudioTrack* track, jack_nframes_t& pos, ImportMode mode)
+Editor::finish_bringing_in_audio (boost::shared_ptr<AudioRegion> region, uint32_t in_chans, uint32_t out_chans, AudioTrack* track, nframes_t& pos, ImportMode mode)
{
switch (mode) {
case ImportAsRegion:
diff --git a/gtk2_ardour/editor_audiotrack.cc b/gtk2_ardour/editor_audiotrack.cc
index 00a8e1db9f..f524dcdd40 100644
--- a/gtk2_ardour/editor_audiotrack.cc
+++ b/gtk2_ardour/editor_audiotrack.cc
@@ -17,8 +17,8 @@ Editor::set_route_loop_selection ()
return;
}
- jack_nframes_t start = selection->time[clicked_selection].start;
- jack_nframes_t end = selection->time[clicked_selection].end;
+ nframes_t start = selection->time[clicked_selection].start;
+ nframes_t end = selection->time[clicked_selection].end;
Location* loc = transport_loop_location();
@@ -27,7 +27,7 @@ Editor::set_route_loop_selection ()
loc->set (start, end);
// enable looping, reposition and start rolling
- session->request_auto_loop (true);
+ session->request_play_loop (true);
session->request_locate (loc->start(), true);
}
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index e2e04326ca..2d854a384b 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -52,7 +52,7 @@ using namespace Glib;
using namespace Gtkmm2ext;
using namespace Editing;
-/* XXX this is a hack. it ought to be the maximum value of an jack_nframes_t */
+/* XXX this is a hack. it ought to be the maximum value of an nframes_t */
const double max_canvas_coordinate = (double) JACK_MAX_FRAMES;
@@ -279,7 +279,7 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
canvas_width = alloc.get_width();
canvas_height = alloc.get_height();
- zoom_range_clock.set ((jack_nframes_t) floor ((canvas_width * frames_per_unit)));
+ zoom_range_clock.set ((nframes_t) floor ((canvas_width * frames_per_unit)));
edit_cursor->set_position (edit_cursor->current_frame);
playhead_cursor->set_position (playhead_cursor->current_frame);
@@ -438,7 +438,7 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
vector<ustring> paths;
string spath;
GdkEvent ev;
- jack_nframes_t frame;
+ nframes_t frame;
if (convert_drop_to_paths (paths, context, x, y, data, info, time)) {
goto out;
@@ -466,7 +466,7 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
/* drop onto canvas background: create new tracks */
- jack_nframes_t pos = 0;
+ nframes_t pos = 0;
do_embed (paths, false, ImportAsTrack, 0, pos, false);
} else if ((tv = dynamic_cast<RouteTimeAxisView*>(tvp)) != 0) {
@@ -488,11 +488,12 @@ Editor::drop_regions (const RefPtr<Gdk::DragContext>& context,
const SelectionData& data,
guint info, guint time)
{
- const DnDTreeView::SerializedObjectPointers* sr = reinterpret_cast<const DnDTreeView::SerializedObjectPointers*> (data.get_data());
+ const SerializedObjectPointers<boost::shared_ptr<Region> >* sr =
+ reinterpret_cast<const SerializedObjectPointers<boost::shared_ptr<Region> > *> (data.get_data());
for (uint32_t i = 0; i < sr->cnt; ++i) {
- boost::shared_ptr<Region> r (reinterpret_cast<Region*> (sr->ptr[i]));
+ boost::shared_ptr<Region> r = sr->data[i];
insert_region_list_drag (r, x, y);
}
@@ -503,8 +504,8 @@ Editor::drop_regions (const RefPtr<Gdk::DragContext>& context,
void
Editor::maybe_autoscroll (GdkEvent* event)
{
- jack_nframes_t rightmost_frame = leftmost_frame + current_page_frames();
- jack_nframes_t frame = drag_info.current_pointer_frame;
+ nframes_t rightmost_frame = leftmost_frame + current_page_frames();
+ nframes_t frame = drag_info.current_pointer_frame;
bool startit = false;
static int last_autoscroll_direction = 0;
@@ -553,10 +554,10 @@ Editor::_autoscroll_canvas (void *arg)
bool
Editor::autoscroll_canvas ()
{
- jack_nframes_t new_frame;
- jack_nframes_t limit = max_frames - current_page_frames();
+ nframes_t new_frame;
+ nframes_t limit = max_frames - current_page_frames();
GdkEventMotion ev;
- jack_nframes_t target_frame;
+ nframes_t target_frame;
if (autoscroll_direction < 0) {
if (leftmost_frame < autoscroll_distance) {
@@ -606,17 +607,17 @@ Editor::autoscroll_canvas ()
/* after about a while, speed up a bit by changing the timeout interval */
- autoscroll_distance = (jack_nframes_t) floor (current_page_frames()/30.0f);
+ autoscroll_distance = (nframes_t) floor (current_page_frames()/30.0f);
} else if (autoscroll_cnt == 150) { /* 1.0 seconds */
- autoscroll_distance = (jack_nframes_t) floor (current_page_frames()/20.0f);
+ autoscroll_distance = (nframes_t) floor (current_page_frames()/20.0f);
} else if (autoscroll_cnt == 300) { /* 1.5 seconds */
/* after about another while, speed up by increasing the shift per callback */
- autoscroll_distance = (jack_nframes_t) floor (current_page_frames()/10.0f);
+ autoscroll_distance = (nframes_t) floor (current_page_frames()/10.0f);
}
@@ -626,14 +627,15 @@ Editor::autoscroll_canvas ()
void
Editor::start_canvas_autoscroll (int dir)
{
- if (!session) {
+ if (!session || autoscroll_active) {
return;
}
stop_canvas_autoscroll ();
+ autoscroll_active = true;
autoscroll_direction = dir;
- autoscroll_distance = (jack_nframes_t) floor (current_page_frames()/100.0);
+ autoscroll_distance = (nframes_t) floor (current_page_frames()/50.0);
autoscroll_cnt = 0;
/* do it right now, which will start the repeated callbacks */
@@ -648,6 +650,8 @@ Editor::stop_canvas_autoscroll ()
g_source_remove (autoscroll_timeout_tag);
autoscroll_timeout_tag = -1;
}
+
+ autoscroll_active = false;
}
gint
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc
index 58f9deebbd..249a65ae01 100644
--- a/gtk2_ardour/editor_canvas_events.cc
+++ b/gtk2_ardour/editor_canvas_events.cc
@@ -70,7 +70,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
event.button.x = wx;
event.button.y = wy;
- jack_nframes_t where = event_frame (&event, 0, 0);
+ nframes_t where = event_frame (&event, 0, 0);
temporal_zoom_to_frame (true, where);
return true;
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
@@ -101,7 +101,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
event.button.x = wx;
event.button.y = wy;
- jack_nframes_t where = event_frame (&event, 0, 0);
+ nframes_t where = event_frame (&event, 0, 0);
temporal_zoom_to_frame (false, where);
return true;
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
diff --git a/gtk2_ardour/editor_cursors.cc b/gtk2_ardour/editor_cursors.cc
index 2353481daf..7cd13cf686 100644
--- a/gtk2_ardour/editor_cursors.cc
+++ b/gtk2_ardour/editor_cursors.cc
@@ -63,7 +63,7 @@ Editor::Cursor::~Cursor ()
}
void
-Editor::Cursor::set_position (jack_nframes_t frame)
+Editor::Cursor::set_position (nframes_t frame)
{
double new_pos = editor.frame_to_unit (frame);
diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc
index 1b0308b080..4526862f79 100644
--- a/gtk2_ardour/editor_export_audio.cc
+++ b/gtk2_ardour/editor_export_audio.cc
@@ -56,7 +56,7 @@ void
Editor::export_session()
{
if (session) {
- export_range (0, session->current_end_frame());
+ export_range (session->current_start_frame(), session->current_end_frame());
}
}
@@ -75,7 +75,7 @@ Editor::export_selection ()
}
void
-Editor::export_range (jack_nframes_t start, jack_nframes_t end)
+Editor::export_range (nframes_t start, nframes_t end)
{
if (session) {
if (export_dialog == 0) {
@@ -162,11 +162,11 @@ bool
Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
{
boost::shared_ptr<AudioFileSource> fs;
- const jack_nframes_t chunk_size = 4096;
- jack_nframes_t to_read;
+ const nframes_t chunk_size = 4096;
+ nframes_t to_read;
Sample buf[chunk_size];
gain_t gain_buffer[chunk_size];
- jack_nframes_t pos;
+ nframes_t pos;
char s[PATH_MAX+1];
uint32_t cnt;
vector<boost::shared_ptr<AudioFileSource> > sources;
@@ -229,7 +229,7 @@ Editor::write_region (string path, boost::shared_ptr<AudioRegion> region)
pos = region->position();
while (to_read) {
- jack_nframes_t this_time;
+ nframes_t this_time;
this_time = min (to_read, chunk_size);
@@ -306,11 +306,11 @@ bool
Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list<AudioRange>& range)
{
boost::shared_ptr<AudioFileSource> fs;
- const jack_nframes_t chunk_size = 4096;
- jack_nframes_t nframes;
+ const nframes_t chunk_size = 4096;
+ nframes_t nframes;
Sample buf[chunk_size];
gain_t gain_buffer[chunk_size];
- jack_nframes_t pos;
+ nframes_t pos;
char s[PATH_MAX+1];
uint32_t cnt;
string path;
@@ -361,7 +361,7 @@ Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list
pos = (*i).start;
while (nframes) {
- jack_nframes_t this_time;
+ nframes_t this_time;
this_time = min (nframes, chunk_size);
@@ -393,7 +393,7 @@ Editor::write_audio_range (AudioPlaylist& playlist, const ChanCount& count, list
while (nframes) {
- jack_nframes_t this_time = min (nframes, chunk_size);
+ nframes_t this_time = min (nframes, chunk_size);
memset (buf, 0, sizeof (Sample) * this_time);
for (uint32_t n=0; n < channels; ++n) {
diff --git a/gtk2_ardour/editor_imageframe.cc b/gtk2_ardour/editor_imageframe.cc
index 2cabb95461..adb64125fc 100644
--- a/gtk2_ardour/editor_imageframe.cc
+++ b/gtk2_ardour/editor_imageframe.cc
@@ -96,10 +96,10 @@ void
Editor::scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item)
{
// GTK2FIX
- //jack_nframes_t offset = static_cast<jack_nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
- jack_nframes_t offset = 0;
+ //nframes_t offset = static_cast<nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
+ nframes_t offset = 0;
- jack_nframes_t x_pos = 0 ;
+ nframes_t x_pos = 0 ;
if(item->get_position() < offset)
{
x_pos = 0 ;
@@ -494,14 +494,14 @@ Editor::markerview_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
double cx, cy ;
MarkerView* mv = reinterpret_cast<MarkerView*>(drag_info.data) ;
- jack_nframes_t pending_region_position ;
- jack_nframes_t pointer_frame ;
+ nframes_t pending_region_position ;
+ nframes_t pointer_frame ;
pointer_frame = event_frame(event, &cx, &cy) ;
snap_to(pointer_frame) ;
- if (pointer_frame > (jack_nframes_t) drag_info.pointer_frame_offset)
+ if (pointer_frame > (nframes_t) drag_info.pointer_frame_offset)
{
pending_region_position = pointer_frame - drag_info.pointer_frame_offset ;
snap_to(pending_region_position) ;
@@ -542,14 +542,14 @@ Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
ImageFrameView* ifv = reinterpret_cast<ImageFrameView*>(drag_info.data) ;
- jack_nframes_t pending_region_position;
- jack_nframes_t pointer_frame;
+ nframes_t pending_region_position;
+ nframes_t pointer_frame;
pointer_frame = event_frame(event, &cx, &cy) ;
snap_to(pointer_frame) ;
- if (pointer_frame > (jack_nframes_t) drag_info.pointer_frame_offset)
+ if (pointer_frame > (nframes_t) drag_info.pointer_frame_offset)
{
pending_region_position = pointer_frame - drag_info.pointer_frame_offset ;
snap_to(pending_region_position) ;
@@ -577,7 +577,7 @@ Editor::imageframe_drag_motion_callback(ArdourCanvas::Item*, GdkEvent* event)
void
Editor::timeaxis_item_drag_finished_callback(ArdourCanvas::Item*, GdkEvent* event)
{
- jack_nframes_t where ;
+ nframes_t where ;
TimeAxisViewItem* tavi = reinterpret_cast<TimeAxisViewItem*>(drag_info.data) ;
bool item_x_movement = (drag_info.last_frame_position != tavi->get_position()) ;
@@ -675,9 +675,9 @@ Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
{
ImageFrameView* ifv = reinterpret_cast<ImageFrameView*> (drag_info.data) ;
- jack_nframes_t start = 0 ;
- jack_nframes_t end = 0 ;
- jack_nframes_t pointer_frame = event_frame(event) ;
+ nframes_t start = 0 ;
+ nframes_t end = 0 ;
+ nframes_t pointer_frame = event_frame(event) ;
// chekc th eposition of the item is not locked
if(!ifv->get_position_locked()) {
@@ -694,7 +694,7 @@ Editor::imageframe_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
}
// are we getting bigger or smaller?
- jack_nframes_t new_dur_val = end - start ;
+ nframes_t new_dur_val = end - start ;
// start handle, so a smaller pointer frame increases our component size
if(pointer_frame <= drag_info.grab_frame)
@@ -752,10 +752,10 @@ Editor::imageframe_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* eve
}
else
{
- jack_nframes_t temp = ifv->get_position() + ifv->get_duration() ;
+ nframes_t temp = ifv->get_position() + ifv->get_duration() ;
- ifv->set_position((jack_nframes_t) (temp - drag_info.cumulative_x_drag), this) ;
- ifv->set_duration((jack_nframes_t) drag_info.cumulative_x_drag, this) ;
+ ifv->set_position((nframes_t) (temp - drag_info.cumulative_x_drag), this) ;
+ ifv->set_duration((nframes_t) drag_info.cumulative_x_drag, this) ;
}
}
@@ -764,10 +764,10 @@ Editor::imageframe_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
{
ImageFrameView* ifv = reinterpret_cast<ImageFrameView *> (drag_info.data) ;
- jack_nframes_t start = 0 ;
- jack_nframes_t end = 0 ;
- jack_nframes_t pointer_frame = event_frame(event) ;
- jack_nframes_t new_dur_val = 0 ;
+ nframes_t start = 0 ;
+ nframes_t end = 0 ;
+ nframes_t pointer_frame = event_frame(event) ;
+ nframes_t new_dur_val = 0 ;
snap_to(pointer_frame) ;
@@ -829,7 +829,7 @@ Editor::imageframe_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* even
}
else
{
- jack_nframes_t new_duration = (jack_nframes_t)drag_info.cumulative_x_drag ;
+ nframes_t new_duration = (nframes_t)drag_info.cumulative_x_drag ;
if((new_duration <= ifv->get_max_duration()) && (new_duration >= ifv->get_min_duration()))
{
ifv->set_duration(new_duration, this) ;
@@ -889,9 +889,9 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
{
MarkerView* mv = reinterpret_cast<MarkerView*> (drag_info.data) ;
- jack_nframes_t start = 0 ;
- jack_nframes_t end = 0 ;
- jack_nframes_t pointer_frame = event_frame(event) ;
+ nframes_t start = 0 ;
+ nframes_t end = 0 ;
+ nframes_t pointer_frame = event_frame(event) ;
// chekc th eposition of the item is not locked
if(!mv->get_position_locked())
@@ -912,7 +912,7 @@ Editor::markerview_start_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent*
}
// are we getting bigger or smaller?
- jack_nframes_t new_dur_val = end - start ;
+ nframes_t new_dur_val = end - start ;
if(pointer_frame <= drag_info.grab_frame)
{
@@ -969,10 +969,10 @@ Editor::markerview_start_handle_end_trim(ArdourCanvas::Item* item, GdkEvent* eve
}
else
{
- jack_nframes_t temp = mv->get_position() + mv->get_duration() ;
+ nframes_t temp = mv->get_position() + mv->get_duration() ;
- mv->set_position((jack_nframes_t) (temp - drag_info.cumulative_x_drag), this) ;
- mv->set_duration((jack_nframes_t) drag_info.cumulative_x_drag, this) ;
+ mv->set_position((nframes_t) (temp - drag_info.cumulative_x_drag), this) ;
+ mv->set_duration((nframes_t) drag_info.cumulative_x_drag, this) ;
}
}
@@ -981,10 +981,10 @@ Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
{
MarkerView* mv = reinterpret_cast<MarkerView*> (drag_info.data) ;
- jack_nframes_t start = 0 ;
- jack_nframes_t end = 0 ;
- jack_nframes_t pointer_frame = event_frame(event) ;
- jack_nframes_t new_dur_val = 0 ;
+ nframes_t start = 0 ;
+ nframes_t end = 0 ;
+ nframes_t pointer_frame = event_frame(event) ;
+ nframes_t new_dur_val = 0 ;
snap_to(pointer_frame) ;
@@ -1009,7 +1009,7 @@ Editor::markerview_end_handle_trim_motion(ArdourCanvas::Item* item, GdkEvent* ev
{
// we cant extend beyond the item we are marking
ImageFrameView* marked_item = mv->get_marked_item() ;
- jack_nframes_t marked_end = marked_item->get_position() + marked_item->get_duration() ;
+ nframes_t marked_end = marked_item->get_position() + marked_item->get_duration() ;
if(mv->get_max_duration_active() && (new_dur_val > mv->get_max_duration()))
{
@@ -1063,7 +1063,7 @@ Editor::markerview_end_handle_end_trim (ArdourCanvas::Item* item, GdkEvent* even
}
else
{
- jack_nframes_t new_duration = (jack_nframes_t)drag_info.cumulative_x_drag ;
+ nframes_t new_duration = (nframes_t)drag_info.cumulative_x_drag ;
mv->set_duration(new_duration, this) ;
}
}
diff --git a/gtk2_ardour/editor_keyboard.cc b/gtk2_ardour/editor_keyboard.cc
index e9ccd26f46..cdea9d2272 100644
--- a/gtk2_ardour/editor_keyboard.cc
+++ b/gtk2_ardour/editor_keyboard.cc
@@ -79,7 +79,7 @@ Editor::kbd_set_edit_cursor ()
void
Editor::kbd_do_split (GdkEvent* ev)
{
- jack_nframes_t where = event_frame (ev);
+ nframes_t where = event_frame (ev);
if (entered_regionview) {
if (selection->regions.find (entered_regionview) != selection->regions.end()) {
@@ -122,7 +122,7 @@ Editor::kbd_set_sync_position ()
void
Editor::kbd_do_set_sync_position (GdkEvent* ev)
{
- jack_nframes_t where = event_frame (ev);
+ nframes_t where = event_frame (ev);
snap_to (where);
if (entered_regionview) {
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index 40f00c2e10..46383149a3 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -271,8 +271,8 @@ Editor::LocationMarkers::set_name (const string& str)
}
void
-Editor::LocationMarkers::set_position (jack_nframes_t startf,
- jack_nframes_t endf)
+Editor::LocationMarkers::set_position (nframes_t startf,
+ nframes_t endf)
{
start->set_position (startf);
if (end) { end->set_position (endf); }
@@ -286,7 +286,7 @@ Editor::LocationMarkers::set_color_rgba (uint32_t rgba)
}
void
-Editor::mouse_add_new_marker (jack_nframes_t where)
+Editor::mouse_add_new_marker (nframes_t where)
{
if (session) {
Location *location = new Location (where, where, "mark", Location::IsMark);
@@ -745,7 +745,7 @@ Editor::marker_menu_loop_range ()
l2->set (l->start(), l->end());
// enable looping, reposition and start rolling
- session->request_auto_loop(true);
+ session->request_play_loop(true);
session->request_locate (l2->start(), true);
}
}
@@ -925,7 +925,7 @@ Editor::update_loop_range_view (bool visibility)
Location* tll;
- if (session->get_auto_loop() && ((tll = transport_loop_location()) != 0)) {
+ if (Config->get_auto_loop() && ((tll = transport_loop_location()) != 0)) {
double x1 = frame_to_pixel (tll->start());
double x2 = frame_to_pixel (tll->end());
@@ -951,7 +951,7 @@ Editor::update_punch_range_view (bool visibility)
Location* tpl;
- if ((session->get_punch_in() || session->get_punch_out()) && ((tpl = transport_punch_location()) != 0)) {
+ if ((Config->get_punch_in() || Config->get_punch_out()) && ((tpl = transport_punch_location()) != 0)) {
double x1 = frame_to_pixel (tpl->start());
double x2 = frame_to_pixel (tpl->end());
diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc
index f9ce22ed4b..da09a95688 100644
--- a/gtk2_ardour/editor_mixer.cc
+++ b/gtk2_ardour/editor_mixer.cc
@@ -157,7 +157,7 @@ Editor::update_current_screen ()
{
if (session && engine.running()) {
- jack_nframes_t frame;
+ nframes_t frame;
frame = session->audible_frame();
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 4a8853e320..ae76025cc6 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -69,7 +69,7 @@ using namespace sigc;
using namespace Gtk;
using namespace Editing;
-jack_nframes_t
+nframes_t
Editor::event_frame (GdkEvent* event, double* pcx, double* pcy)
{
double cx, cy;
@@ -377,7 +377,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
bool
Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
- jack_nframes_t where = event_frame (event, 0, 0);
+ nframes_t where = event_frame (event, 0, 0);
track_canvas.grab_focus();
@@ -821,7 +821,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
bool
Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
- jack_nframes_t where = event_frame (event, 0, 0);
+ nframes_t where = event_frame (event, 0, 0);
/* no action if we're recording */
@@ -1710,7 +1710,7 @@ Editor::end_grab (ArdourCanvas::Item* item, GdkEvent* event)
void
Editor::set_edit_cursor (GdkEvent* event)
{
- jack_nframes_t pointer_frame = event_frame (event);
+ nframes_t pointer_frame = event_frame (event);
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
if (snap_type != SnapToEditCursor) {
@@ -1725,7 +1725,7 @@ Editor::set_edit_cursor (GdkEvent* event)
void
Editor::set_playhead_cursor (GdkEvent* event)
{
- jack_nframes_t pointer_frame = event_frame (event);
+ nframes_t pointer_frame = event_frame (event);
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (pointer_frame);
@@ -1752,15 +1752,15 @@ Editor::start_fade_in_grab (ArdourCanvas::Item* item, GdkEvent* event)
AudioRegionView* arv = static_cast<AudioRegionView*>(drag_info.data);
- drag_info.pointer_frame_offset = drag_info.grab_frame - ((jack_nframes_t) arv->audio_region()->fade_in().back()->when + arv->region()->position());
+ drag_info.pointer_frame_offset = drag_info.grab_frame - ((nframes_t) arv->audio_region()->fade_in().back()->when + arv->region()->position());
}
void
Editor::fade_in_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
{
AudioRegionView* arv = static_cast<AudioRegionView*>(drag_info.data);
- jack_nframes_t pos;
- jack_nframes_t fade_length;
+ nframes_t pos;
+ nframes_t fade_length;
if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) {
pos = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
@@ -1794,8 +1794,8 @@ Editor::fade_in_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* even
if (drag_info.first_move) return;
AudioRegionView* arv = static_cast<AudioRegionView*>(drag_info.data);
- jack_nframes_t pos;
- jack_nframes_t fade_length;
+ nframes_t pos;
+ nframes_t fade_length;
if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) {
pos = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
@@ -1845,15 +1845,15 @@ Editor::start_fade_out_grab (ArdourCanvas::Item* item, GdkEvent* event)
AudioRegionView* arv = static_cast<AudioRegionView*>(drag_info.data);
- drag_info.pointer_frame_offset = drag_info.grab_frame - (arv->region()->length() - (jack_nframes_t) arv->audio_region()->fade_out().back()->when + arv->region()->position());
+ drag_info.pointer_frame_offset = drag_info.grab_frame - (arv->region()->length() - (nframes_t) arv->audio_region()->fade_out().back()->when + arv->region()->position());
}
void
Editor::fade_out_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
{
AudioRegionView* arv = static_cast<AudioRegionView*>(drag_info.data);
- jack_nframes_t pos;
- jack_nframes_t fade_length;
+ nframes_t pos;
+ nframes_t fade_length;
if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) {
pos = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
@@ -1889,8 +1889,8 @@ Editor::fade_out_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* eve
if (drag_info.first_move) return;
AudioRegionView* arv = static_cast<AudioRegionView*>(drag_info.data);
- jack_nframes_t pos;
- jack_nframes_t fade_length;
+ nframes_t pos;
+ nframes_t fade_length;
if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) {
pos = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
@@ -1956,7 +1956,7 @@ void
Editor::cursor_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
{
Cursor* cursor = (Cursor *) drag_info.data;
- jack_nframes_t adjusted_frame;
+ nframes_t adjusted_frame;
if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) {
adjusted_frame = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
@@ -2061,7 +2061,7 @@ Editor::start_marker_grab (ArdourCanvas::Item* item, GdkEvent* event)
void
Editor::marker_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
{
- jack_nframes_t f_delta;
+ nframes_t f_delta;
Marker* marker = (Marker *) drag_info.data;
Location *real_location;
Location *copy_location;
@@ -2069,7 +2069,7 @@ Editor::marker_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
bool move_both = false;
- jack_nframes_t newframe;
+ nframes_t newframe;
if (drag_info.pointer_frame_offset <= (long) drag_info.current_pointer_frame) {
newframe = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
}
@@ -2077,7 +2077,7 @@ Editor::marker_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
newframe = 0;
}
- jack_nframes_t next = newframe;
+ nframes_t next = newframe;
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (newframe, 0, true);
@@ -2249,7 +2249,7 @@ void
Editor::meter_marker_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
{
MeterMarker* marker = (MeterMarker *) drag_info.data;
- jack_nframes_t adjusted_frame;
+ nframes_t adjusted_frame;
if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) {
adjusted_frame = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
@@ -2380,7 +2380,7 @@ void
Editor::tempo_marker_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
{
TempoMarker* marker = (TempoMarker *) drag_info.data;
- jack_nframes_t adjusted_frame;
+ nframes_t adjusted_frame;
if ((long)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) {
adjusted_frame = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
@@ -2522,7 +2522,7 @@ Editor::control_point_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent*
cy = min ((double) cp->line.height(), cy);
//translate cx to frames
- jack_nframes_t cx_frames = unit_to_frame (cx);
+ nframes_t cx_frames = unit_to_frame (cx);
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier()) && !drag_info.x_constrained) {
snap_to (cx_frames);
@@ -2595,7 +2595,7 @@ Editor::start_line_grab (AutomationLine* line, GdkEvent* event)
{
double cx;
double cy;
- jack_nframes_t frame_within_region;
+ nframes_t frame_within_region;
/* need to get x coordinate in terms of parent (TimeAxisItemView)
origin.
@@ -2604,7 +2604,7 @@ Editor::start_line_grab (AutomationLine* line, GdkEvent* event)
cx = event->button.x;
cy = event->button.y;
line->parent_group().w2i (cx, cy);
- frame_within_region = (jack_nframes_t) floor (cx * frames_per_unit);
+ frame_within_region = (nframes_t) floor (cx * frames_per_unit);
if (!line->control_points_adjacent (frame_within_region, current_line_drag_info.before,
current_line_drag_info.after)) {
@@ -2684,7 +2684,7 @@ Editor::start_region_grab (ArdourCanvas::Item* item, GdkEvent* event)
speed = tv->get_diskstream()->speed();
}
- drag_info.last_frame_position = (jack_nframes_t) (clicked_regionview->region()->position() / speed);
+ drag_info.last_frame_position = (nframes_t) (clicked_regionview->region()->position() / speed);
drag_info.pointer_frame_offset = drag_info.grab_frame - drag_info.last_frame_position;
drag_info.last_trackview = &clicked_regionview->get_time_axis_view();
// we want a move threshold
@@ -2717,7 +2717,7 @@ Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event)
}
drag_info.last_trackview = &clicked_regionview->get_time_axis_view();
- drag_info.last_frame_position = (jack_nframes_t) (clicked_regionview->region()->position() / speed);
+ drag_info.last_frame_position = (nframes_t) (clicked_regionview->region()->position() / speed);
drag_info.pointer_frame_offset = drag_info.grab_frame - drag_info.last_frame_position;
// we want a move threshold
drag_info.want_move_threshold = true;
@@ -2748,7 +2748,7 @@ Editor::start_region_brush_grab (ArdourCanvas::Item* item, GdkEvent* event)
speed = tv->get_diskstream()->speed();
}
- drag_info.last_frame_position = (jack_nframes_t) (clicked_regionview->region()->position() / speed);
+ drag_info.last_frame_position = (nframes_t) (clicked_regionview->region()->position() / speed);
drag_info.pointer_frame_offset = drag_info.grab_frame - drag_info.last_frame_position;
drag_info.last_trackview = &clicked_regionview->get_time_axis_view();
// we want a move threshold
@@ -2764,7 +2764,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
double x_delta;
double y_delta = 0;
RegionView* rv = reinterpret_cast<RegionView*> (drag_info.data);
- jack_nframes_t pending_region_position = 0;
+ nframes_t pending_region_position = 0;
int32_t pointer_y_span = 0, canvas_pointer_y_span = 0, original_pointer_order;
int32_t visible_y_high = 0, visible_y_low = 512; //high meaning higher numbered.. not the height on the screen
bool clamp_y_axis = false;
@@ -2816,7 +2816,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
newregion->set_locked (false);
- to_playlist->add_region (newregion, (jack_nframes_t) (rv->region()->position() * rtv->get_diskstream()->speed()));
+ to_playlist->add_region (newregion, (nframes_t) (rv->region()->position() * rtv->get_diskstream()->speed()));
c.disconnect ();
@@ -3025,8 +3025,8 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
if ((int32_t)drag_info.current_pointer_frame > drag_info.pointer_frame_offset) {
- jack_nframes_t sync_frame;
- jack_nframes_t sync_offset;
+ nframes_t sync_frame;
+ nframes_t sync_offset;
int32_t sync_dir;
pending_region_position = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
@@ -3261,7 +3261,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
void
Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event)
{
- jack_nframes_t where;
+ nframes_t where;
RegionView* rv = reinterpret_cast<RegionView *> (drag_info.data);
pair<set<Playlist*>::iterator,bool> insert_result;
bool nocommit = true;
@@ -3300,7 +3300,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
speed = atv->get_diskstream()->speed();
}
- regionview_x_movement = (drag_info.last_frame_position != (jack_nframes_t) (rv->region()->position()/speed));
+ regionview_x_movement = (drag_info.last_frame_position != (nframes_t) (rv->region()->position()/speed));
regionview_y_movement = (drag_info.last_trackview != &rv->get_time_axis_view());
//printf ("last_frame: %s position is %lu %g\n", rv->get_time_axis_view().name().c_str(), drag_info.last_frame_position, speed);
@@ -3385,7 +3385,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
latest_regionview = 0;
- where = (jack_nframes_t) (unit_to_frame (ix1) * speed);
+ where = (nframes_t) (unit_to_frame (ix1) * speed);
boost::shared_ptr<Region> new_region (RegionFactory::create ((*i)->region()));
from_playlist->remove_region (((*i)->region()));
@@ -3425,7 +3425,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
rv->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
rv->get_canvas_group()->i2w (ix1, iy1);
- where = (jack_nframes_t) (unit_to_frame (ix1) * ownspeed);
+ where = (nframes_t) (unit_to_frame (ix1) * ownspeed);
} else {
@@ -3470,21 +3470,21 @@ Editor::region_view_item_click (AudioRegionView& rv, GdkEventButton* event)
if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::Control|Keyboard::Alt))) {
- align_region (rv.region(), SyncPoint, (jack_nframes_t) (edit_cursor->current_frame * speed));
+ align_region (rv.region(), SyncPoint, (nframes_t) (edit_cursor->current_frame * speed));
} else if (Keyboard::modifier_state_equals (event->state, Keyboard::ModifierMask (Keyboard::Control|Keyboard::Shift))) {
- align_region (rv.region(), End, (jack_nframes_t) (edit_cursor->current_frame * speed));
+ align_region (rv.region(), End, (nframes_t) (edit_cursor->current_frame * speed));
} else {
- align_region (rv.region(), Start, (jack_nframes_t) (edit_cursor->current_frame * speed));
+ align_region (rv.region(), Start, (nframes_t) (edit_cursor->current_frame * speed));
}
}
}
void
-Editor::show_verbose_time_cursor (jack_nframes_t frame, double offset, double xpos, double ypos)
+Editor::show_verbose_time_cursor (nframes_t frame, double offset, double xpos, double ypos)
{
char buf[128];
SMPTE::Time smpte;
@@ -3509,7 +3509,7 @@ Editor::show_verbose_time_cursor (jack_nframes_t frame, double offset, double xp
case AudioClock::MinSec:
/* XXX fix this to compute min/sec properly */
session->smpte_time (frame, smpte);
- secs = smpte.seconds + ((float) smpte.frames / session->smpte_frames_per_second);
+ secs = smpte.seconds + ((float) smpte.frames / Config->get_smpte_frames_per_second());
snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%.4f", smpte.hours, smpte.minutes, secs);
break;
@@ -3528,7 +3528,7 @@ Editor::show_verbose_time_cursor (jack_nframes_t frame, double offset, double xp
}
void
-Editor::show_verbose_duration_cursor (jack_nframes_t start, jack_nframes_t end, double offset, double xpos, double ypos)
+Editor::show_verbose_duration_cursor (nframes_t start, nframes_t end, double offset, double xpos, double ypos)
{
char buf[128];
SMPTE::Time smpte;
@@ -3576,7 +3576,7 @@ Editor::show_verbose_duration_cursor (jack_nframes_t start, jack_nframes_t end,
case AudioClock::MinSec:
/* XXX fix this to compute min/sec properly */
session->smpte_duration (end - start, smpte);
- secs = smpte.seconds + ((float) smpte.frames / session->smpte_frames_per_second);
+ secs = smpte.seconds + ((float) smpte.frames / Config->get_smpte_frames_per_second());
snprintf (buf, sizeof (buf), "%02" PRId32 ":%02" PRId32 ":%.4f", smpte.hours, smpte.minutes, secs);
break;
@@ -3685,8 +3685,8 @@ Editor::cancel_selection ()
void
Editor::start_selection_op (ArdourCanvas::Item* item, GdkEvent* event, SelectionOp op)
{
- jack_nframes_t start = 0;
- jack_nframes_t end = 0;
+ nframes_t start = 0;
+ nframes_t end = 0;
if (session == 0) {
return;
@@ -3743,10 +3743,10 @@ Editor::start_selection_op (ArdourCanvas::Item* item, GdkEvent* event, Selection
void
Editor::drag_selection (ArdourCanvas::Item* item, GdkEvent* event)
{
- jack_nframes_t start = 0;
- jack_nframes_t end = 0;
- jack_nframes_t length;
- jack_nframes_t pending_position;
+ nframes_t start = 0;
+ nframes_t end = 0;
+ nframes_t length;
+ nframes_t pending_position;
if ((int32_t) drag_info.current_pointer_frame > drag_info.pointer_frame_offset) {
pending_position = drag_info.current_pointer_frame - drag_info.pointer_frame_offset;
@@ -3905,9 +3905,9 @@ Editor::start_trim (ArdourCanvas::Item* item, GdkEvent* event)
speed = tv->get_diskstream()->speed();
}
- jack_nframes_t region_start = (jack_nframes_t) (clicked_regionview->region()->position() / speed);
- jack_nframes_t region_end = (jack_nframes_t) (clicked_regionview->region()->last_frame() / speed);
- jack_nframes_t region_length = (jack_nframes_t) (clicked_regionview->region()->length() / speed);
+ nframes_t region_start = (nframes_t) (clicked_regionview->region()->position() / speed);
+ nframes_t region_end = (nframes_t) (clicked_regionview->region()->last_frame() / speed);
+ nframes_t region_length = (nframes_t) (clicked_regionview->region()->length() / speed);
motion_frozen_playlists.clear();
@@ -3948,7 +3948,7 @@ void
Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
{
RegionView* rv = clicked_regionview;
- jack_nframes_t frame_delta = 0;
+ nframes_t frame_delta = 0;
bool left_direction;
bool obey_snap = !Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier());
@@ -4031,7 +4031,7 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
}
case EndTrim:
- if ((left_direction == true) && (drag_info.current_pointer_frame > (jack_nframes_t) (rv->region()->last_frame()/speed))) {
+ if ((left_direction == true) && (drag_info.current_pointer_frame > (nframes_t) (rv->region()->last_frame()/speed))) {
break;
} else {
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
@@ -4059,10 +4059,10 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
switch (trim_op) {
case StartTrim:
- show_verbose_time_cursor((jack_nframes_t) (rv->region()->position()/speed), 10);
+ show_verbose_time_cursor((nframes_t) (rv->region()->position()/speed), 10);
break;
case EndTrim:
- show_verbose_time_cursor((jack_nframes_t) (rv->region()->last_frame()/speed), 10);
+ show_verbose_time_cursor((nframes_t) (rv->region()->last_frame()/speed), 10);
break;
case ContentsTrim:
show_verbose_time_cursor(drag_info.current_pointer_frame, 10);
@@ -4074,7 +4074,7 @@ Editor::trim_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
}
void
-Editor::single_contents_trim (RegionView& rv, jack_nframes_t frame_delta, bool left_direction, bool swap_direction, bool obey_snap)
+Editor::single_contents_trim (RegionView& rv, nframes_t frame_delta, bool left_direction, bool swap_direction, bool obey_snap)
{
boost::shared_ptr<Region> region (rv.region());
@@ -4082,7 +4082,7 @@ Editor::single_contents_trim (RegionView& rv, jack_nframes_t frame_delta, bool l
return;
}
- jack_nframes_t new_bound;
+ nframes_t new_bound;
double speed = 1.0;
TimeAxisView* tvp = clicked_axisview;
@@ -4094,27 +4094,27 @@ Editor::single_contents_trim (RegionView& rv, jack_nframes_t frame_delta, bool l
if (left_direction) {
if (swap_direction) {
- new_bound = (jack_nframes_t) (region->position()/speed) + frame_delta;
+ new_bound = (nframes_t) (region->position()/speed) + frame_delta;
} else {
- new_bound = (jack_nframes_t) (region->position()/speed) - frame_delta;
+ new_bound = (nframes_t) (region->position()/speed) - frame_delta;
}
} else {
if (swap_direction) {
- new_bound = (jack_nframes_t) (region->position()/speed) - frame_delta;
+ new_bound = (nframes_t) (region->position()/speed) - frame_delta;
} else {
- new_bound = (jack_nframes_t) (region->position()/speed) + frame_delta;
+ new_bound = (nframes_t) (region->position()/speed) + frame_delta;
}
}
if (obey_snap) {
snap_to (new_bound);
}
- region->trim_start ((jack_nframes_t) (new_bound * speed), this);
+ region->trim_start ((nframes_t) (new_bound * speed), this);
rv.region_changed (StartChanged);
}
void
-Editor::single_start_trim (RegionView& rv, jack_nframes_t frame_delta, bool left_direction, bool obey_snap)
+Editor::single_start_trim (RegionView& rv, nframes_t frame_delta, bool left_direction, bool obey_snap)
{
boost::shared_ptr<Region> region (rv.region());
@@ -4122,7 +4122,7 @@ Editor::single_start_trim (RegionView& rv, jack_nframes_t frame_delta, bool left
return;
}
- jack_nframes_t new_bound;
+ nframes_t new_bound;
double speed = 1.0;
TimeAxisView* tvp = clicked_axisview;
@@ -4133,22 +4133,22 @@ Editor::single_start_trim (RegionView& rv, jack_nframes_t frame_delta, bool left
}
if (left_direction) {
- new_bound = (jack_nframes_t) (region->position()/speed) - frame_delta;
+ new_bound = (nframes_t) (region->position()/speed) - frame_delta;
} else {
- new_bound = (jack_nframes_t) (region->position()/speed) + frame_delta;
+ new_bound = (nframes_t) (region->position()/speed) + frame_delta;
}
if (obey_snap) {
snap_to (new_bound, (left_direction ? 0 : 1));
}
- region->trim_front ((jack_nframes_t) (new_bound * speed), this);
+ region->trim_front ((nframes_t) (new_bound * speed), this);
rv.region_changed (Change (LengthChanged|PositionChanged|StartChanged));
}
void
-Editor::single_end_trim (RegionView& rv, jack_nframes_t frame_delta, bool left_direction, bool obey_snap)
+Editor::single_end_trim (RegionView& rv, nframes_t frame_delta, bool left_direction, bool obey_snap)
{
boost::shared_ptr<Region> region (rv.region());
@@ -4156,7 +4156,7 @@ Editor::single_end_trim (RegionView& rv, jack_nframes_t frame_delta, bool left_d
return;
}
- jack_nframes_t new_bound;
+ nframes_t new_bound;
double speed = 1.0;
TimeAxisView* tvp = clicked_axisview;
@@ -4167,15 +4167,15 @@ Editor::single_end_trim (RegionView& rv, jack_nframes_t frame_delta, bool left_d
}
if (left_direction) {
- new_bound = (jack_nframes_t) ((region->last_frame() + 1)/speed) - frame_delta;
+ new_bound = (nframes_t) ((region->last_frame() + 1)/speed) - frame_delta;
} else {
- new_bound = (jack_nframes_t) ((region->last_frame() + 1)/speed) + frame_delta;
+ new_bound = (nframes_t) ((region->last_frame() + 1)/speed) + frame_delta;
}
if (obey_snap) {
snap_to (new_bound);
}
- region->trim_end ((jack_nframes_t) (new_bound * speed), this);
+ region->trim_end ((nframes_t) (new_bound * speed), this);
rv.region_changed (LengthChanged);
}
@@ -4214,7 +4214,7 @@ void
Editor::point_trim (GdkEvent* event)
{
RegionView* rv = clicked_regionview;
- jack_nframes_t new_bound = drag_info.current_pointer_frame;
+ nframes_t new_bound = drag_info.current_pointer_frame;
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (new_bound);
@@ -4361,8 +4361,8 @@ Editor::start_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event, Ran
void
Editor::drag_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
{
- jack_nframes_t start = 0;
- jack_nframes_t end = 0;
+ nframes_t start = 0;
+ nframes_t end = 0;
ArdourCanvas::SimpleRect *crect = (range_marker_op == CreateRangeMarker) ? range_bar_drag_rect: transport_bar_drag_rect;
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
@@ -4465,8 +4465,8 @@ Editor::end_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
if (Keyboard::no_modifier_keys_pressed (&event->button)) {
- jack_nframes_t start;
- jack_nframes_t end;
+ nframes_t start;
+ nframes_t end;
start = session->locations()->first_mark_before (drag_info.grab_frame);
end = session->locations()->first_mark_after (drag_info.grab_frame);
@@ -4517,8 +4517,8 @@ Editor::start_mouse_zoom (ArdourCanvas::Item* item, GdkEvent* event)
void
Editor::drag_mouse_zoom (ArdourCanvas::Item* item, GdkEvent* event)
{
- jack_nframes_t start;
- jack_nframes_t end;
+ nframes_t start;
+ nframes_t end;
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (drag_info.current_pointer_frame);
@@ -4578,7 +4578,7 @@ Editor::end_mouse_zoom (ArdourCanvas::Item* item, GdkEvent* event)
}
void
-Editor::reposition_zoom_rect (jack_nframes_t start, jack_nframes_t end)
+Editor::reposition_zoom_rect (nframes_t start, nframes_t end)
{
double x1 = frame_to_pixel (start);
double x2 = frame_to_pixel (end);
@@ -4605,8 +4605,8 @@ Editor::start_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event)
void
Editor::drag_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event)
{
- jack_nframes_t start;
- jack_nframes_t end;
+ nframes_t start;
+ nframes_t end;
double y1;
double y2;
@@ -4775,7 +4775,7 @@ Editor::end_time_fx (ArdourCanvas::Item* item, GdkEvent* event)
return;
}
- jack_nframes_t newlen = drag_info.last_pointer_frame - clicked_regionview->region()->position();
+ nframes_t newlen = drag_info.last_pointer_frame - clicked_regionview->region()->position();
float percentage = (float) ((double) newlen - (double) clicked_regionview->region()->length()) / ((double) newlen) * 100.0f;
begin_reversible_command (_("timestretch"));
@@ -4786,7 +4786,7 @@ Editor::end_time_fx (ArdourCanvas::Item* item, GdkEvent* event)
}
void
-Editor::mouse_brush_insert_region (RegionView* rv, jack_nframes_t pos)
+Editor::mouse_brush_insert_region (RegionView* rv, nframes_t pos)
{
/* no brushing without a useful snap setting */
@@ -4827,7 +4827,7 @@ Editor::mouse_brush_insert_region (RegionView* rv, jack_nframes_t pos)
double speed = atv->get_diskstream()->speed();
XMLNode &before = playlist->get_state();
- playlist->add_region (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (arv->audio_region())), (jack_nframes_t) (pos * speed));
+ playlist->add_region (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (arv->audio_region())), (nframes_t) (pos * speed));
XMLNode &after = playlist->get_state();
session->add_command(new MementoCommand<Playlist>(*playlist, &before, &after));
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index f44b433caa..6a96b57795 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -90,89 +90,8 @@ Editor::redo (uint32_t n)
}
}
-void
-Editor::set_meter_hold (int32_t cnt)
-{
- Config->set_meter_hold_off(false);
- Config->set_meter_hold_short(false);
- Config->set_meter_hold_medium(false);
- Config->set_meter_hold_long(false);
-
- switch (cnt)
- {
- case 0:
- Config->set_meter_hold_off(true);
- break;
- case 40:
- Config->set_meter_hold_short(true);
- break;
- case 100:
- Config->set_meter_hold_medium(true);
- break;
- case 200:
- Config->set_meter_hold_long(true);
- break;
- }
-
- if (session) {
- session->set_meter_hold (cnt);
- }
-}
-
-void
-Editor::set_meter_falloff (int intval)
-{
- float val = 0.0f; /* off */
- std::string str;
-
- Config->set_meter_falloff_off(false);
- Config->set_meter_falloff_slowest(false);
- Config->set_meter_falloff_slow(false);
- Config->set_meter_falloff_medium(false);
- Config->set_meter_falloff_fast(false);
- Config->set_meter_falloff_faster(false);
- Config->set_meter_falloff_fastest(false);
-
- switch (intval)
- {
- case 0:
- val = 0.0f;
- Config->set_meter_falloff_off(true);
- break;
- case 1:
- val = 0.125f;
- Config->set_meter_falloff_slowest(true);
- break;
- case 2:
- val = 0.250f;
- Config->set_meter_falloff_slow(true);
- break;
- case 3:
- val = 0.375f;
- Config->set_meter_falloff_medium(true);
- break;
- case 4:
- val = 0.500f;
- Config->set_meter_falloff_fast(true);
- break;
- case 5:
- val = 0.750f;
- Config->set_meter_falloff_faster(true);
- break;
- case 6:
- val = 0.875f;
- Config->set_meter_falloff_fastest(true);
- break;
- }
-
- if (session) {
- session->set_meter_falloff (val);
- }
-}
-
-
int
-Editor::ensure_cursor (jack_nframes_t *pos)
+Editor::ensure_cursor (nframes_t *pos)
{
*pos = edit_cursor->current_frame;
return 0;
@@ -185,13 +104,13 @@ Editor::split_region ()
}
void
-Editor::split_region_at (jack_nframes_t where)
+Editor::split_region_at (nframes_t where)
{
split_regions_at (where, selection->regions);
}
void
-Editor::split_regions_at (jack_nframes_t where, RegionSelection& regions)
+Editor::split_regions_at (nframes_t where, RegionSelection& regions)
{
begin_reversible_command (_("split"));
@@ -291,7 +210,7 @@ Editor::select_region_for_operation (int dir, TimeAxisView **tv)
{
RegionView* rv;
boost::shared_ptr<Region> region;
- jack_nframes_t start = 0;
+ nframes_t start = 0;
if (selection->time.start () == selection->time.end_frame ()) {
@@ -334,7 +253,7 @@ Editor::extend_selection_to_end_of_region (bool next)
{
TimeAxisView *tv;
boost::shared_ptr<Region> region;
- jack_nframes_t start;
+ nframes_t start;
if ((region = select_region_for_operation (next ? 1 : 0, &tv)) == 0) {
return;
@@ -362,7 +281,7 @@ Editor::extend_selection_to_start_of_region (bool previous)
{
TimeAxisView *tv;
boost::shared_ptr<Region> region;
- jack_nframes_t end;
+ nframes_t end;
if ((region = select_region_for_operation (previous ? -1 : 0, &tv)) == 0) {
return;
@@ -389,8 +308,8 @@ Editor::extend_selection_to_start_of_region (bool previous)
void
Editor::nudge_forward (bool next)
{
- jack_nframes_t distance;
- jack_nframes_t next_distance;
+ nframes_t distance;
+ nframes_t next_distance;
if (!session) return;
@@ -424,8 +343,8 @@ Editor::nudge_forward (bool next)
void
Editor::nudge_backward (bool next)
{
- jack_nframes_t distance;
- jack_nframes_t next_distance;
+ nframes_t distance;
+ nframes_t next_distance;
if (!session) return;
@@ -470,7 +389,7 @@ Editor::nudge_backward (bool next)
void
Editor::nudge_forward_capture_offset ()
{
- jack_nframes_t distance;
+ nframes_t distance;
if (!session) return;
@@ -497,7 +416,7 @@ Editor::nudge_forward_capture_offset ()
void
Editor::nudge_backward_capture_offset ()
{
- jack_nframes_t distance;
+ nframes_t distance;
if (!session) return;
@@ -543,7 +462,7 @@ Editor::move_to_end ()
void
Editor::build_region_boundary_cache ()
{
- jack_nframes_t pos = 0;
+ nframes_t pos = 0;
RegionPoint point;
boost::shared_ptr<Region> r;
TrackViewList tracks;
@@ -599,7 +518,7 @@ Editor::build_region_boundary_cache ()
}
}
- jack_nframes_t rpos;
+ nframes_t rpos;
switch (snap_type) {
case SnapToRegionStart:
@@ -642,20 +561,20 @@ Editor::build_region_boundary_cache ()
}
boost::shared_ptr<Region>
-Editor::find_next_region (jack_nframes_t frame, RegionPoint point, int32_t dir, TrackViewList& tracks, TimeAxisView **ontrack)
+Editor::find_next_region (nframes_t frame, RegionPoint point, int32_t dir, TrackViewList& tracks, TimeAxisView **ontrack)
{
TrackViewList::iterator i;
- jack_nframes_t closest = max_frames;
+ nframes_t closest = max_frames;
boost::shared_ptr<Region> ret;
- jack_nframes_t rpos = 0;
+ nframes_t rpos = 0;
float track_speed;
- jack_nframes_t track_frame;
+ nframes_t track_frame;
AudioTimeAxisView *atav;
for (i = tracks.begin(); i != tracks.end(); ++i) {
- jack_nframes_t distance;
+ nframes_t distance;
boost::shared_ptr<Region> r;
track_speed = 1.0f;
@@ -707,7 +626,7 @@ void
Editor::cursor_to_region_point (Cursor* cursor, RegionPoint point, int32_t dir)
{
boost::shared_ptr<Region> r;
- jack_nframes_t pos = cursor->current_frame;
+ nframes_t pos = cursor->current_frame;
if (!session) {
return;
@@ -786,7 +705,7 @@ Editor::cursor_to_previous_region_point (Cursor* cursor, RegionPoint point)
void
Editor::cursor_to_selection_start (Cursor *cursor)
{
- jack_nframes_t pos = 0;
+ nframes_t pos = 0;
switch (mouse_mode) {
case MouseObject:
if (!selection->regions.empty()) {
@@ -814,7 +733,7 @@ Editor::cursor_to_selection_start (Cursor *cursor)
void
Editor::cursor_to_selection_end (Cursor *cursor)
{
- jack_nframes_t pos = 0;
+ nframes_t pos = 0;
switch (mouse_mode) {
case MouseObject:
@@ -843,8 +762,8 @@ Editor::cursor_to_selection_end (Cursor *cursor)
void
Editor::playhead_backward ()
{
- jack_nframes_t pos;
- jack_nframes_t cnt;
+ nframes_t pos;
+ nframes_t cnt;
float prefix;
bool was_floating;
@@ -852,15 +771,15 @@ Editor::playhead_backward ()
cnt = 1;
} else {
if (was_floating) {
- cnt = (jack_nframes_t) floor (prefix * session->frame_rate ());
+ cnt = (nframes_t) floor (prefix * session->frame_rate ());
} else {
- cnt = (jack_nframes_t) prefix;
+ cnt = (nframes_t) prefix;
}
}
pos = playhead_cursor->current_frame;
- if ((jack_nframes_t) pos < cnt) {
+ if ((nframes_t) pos < cnt) {
pos = 0;
} else {
pos -= cnt;
@@ -877,8 +796,8 @@ Editor::playhead_backward ()
void
Editor::playhead_forward ()
{
- jack_nframes_t pos;
- jack_nframes_t cnt;
+ nframes_t pos;
+ nframes_t cnt;
bool was_floating;
float prefix;
@@ -886,9 +805,9 @@ Editor::playhead_forward ()
cnt = 1;
} else {
if (was_floating) {
- cnt = (jack_nframes_t) floor (prefix * session->frame_rate ());
+ cnt = (nframes_t) floor (prefix * session->frame_rate ());
} else {
- cnt = (jack_nframes_t) floor (prefix);
+ cnt = (nframes_t) floor (prefix);
}
}
@@ -917,8 +836,8 @@ Editor::cursor_align (bool playhead_to_edit)
void
Editor::edit_cursor_backward ()
{
- jack_nframes_t pos;
- jack_nframes_t cnt;
+ nframes_t pos;
+ nframes_t cnt;
float prefix;
bool was_floating;
@@ -926,15 +845,15 @@ Editor::edit_cursor_backward ()
cnt = 1;
} else {
if (was_floating) {
- cnt = (jack_nframes_t) floor (prefix * session->frame_rate ());
+ cnt = (nframes_t) floor (prefix * session->frame_rate ());
} else {
- cnt = (jack_nframes_t) prefix;
+ cnt = (nframes_t) prefix;
}
}
pos = edit_cursor->current_frame;
- if ((jack_nframes_t) pos < cnt) {
+ if ((nframes_t) pos < cnt) {
pos = 0;
} else {
pos -= cnt;
@@ -946,8 +865,8 @@ Editor::edit_cursor_backward ()
void
Editor::edit_cursor_forward ()
{
- jack_nframes_t pos;
- jack_nframes_t cnt;
+ nframes_t pos;
+ nframes_t cnt;
bool was_floating;
float prefix;
@@ -955,9 +874,9 @@ Editor::edit_cursor_forward ()
cnt = 1;
} else {
if (was_floating) {
- cnt = (jack_nframes_t) floor (prefix * session->frame_rate ());
+ cnt = (nframes_t) floor (prefix * session->frame_rate ());
} else {
- cnt = (jack_nframes_t) floor (prefix);
+ cnt = (nframes_t) floor (prefix);
}
}
@@ -970,16 +889,16 @@ Editor::goto_frame ()
{
float prefix;
bool was_floating;
- jack_nframes_t frame;
+ nframes_t frame;
if (get_prefix (prefix, was_floating)) {
return;
}
if (was_floating) {
- frame = (jack_nframes_t) floor (prefix * session->frame_rate());
+ frame = (nframes_t) floor (prefix * session->frame_rate());
} else {
- frame = (jack_nframes_t) floor (prefix);
+ frame = (nframes_t) floor (prefix);
}
session->request_locate (frame);
@@ -988,19 +907,19 @@ Editor::goto_frame ()
void
Editor::scroll_backward (float pages)
{
- jack_nframes_t frame;
- jack_nframes_t one_page = (jack_nframes_t) rint (canvas_width * frames_per_unit);
+ nframes_t frame;
+ nframes_t one_page = (nframes_t) rint (canvas_width * frames_per_unit);
bool was_floating;
float prefix;
- jack_nframes_t cnt;
+ nframes_t cnt;
if (get_prefix (prefix, was_floating)) {
- cnt = (jack_nframes_t) floor (pages * one_page);
+ cnt = (nframes_t) floor (pages * one_page);
} else {
if (was_floating) {
- cnt = (jack_nframes_t) floor (prefix * session->frame_rate());
+ cnt = (nframes_t) floor (prefix * session->frame_rate());
} else {
- cnt = (jack_nframes_t) floor (prefix * one_page);
+ cnt = (nframes_t) floor (prefix * one_page);
}
}
@@ -1016,24 +935,24 @@ Editor::scroll_backward (float pages)
void
Editor::scroll_forward (float pages)
{
- jack_nframes_t frame;
- jack_nframes_t one_page = (jack_nframes_t) rint (canvas_width * frames_per_unit);
+ nframes_t frame;
+ nframes_t one_page = (nframes_t) rint (canvas_width * frames_per_unit);
bool was_floating;
float prefix;
- jack_nframes_t cnt;
+ nframes_t cnt;
if (get_prefix (prefix, was_floating)) {
- cnt = (jack_nframes_t) floor (pages * one_page);
+ cnt = (nframes_t) floor (pages * one_page);
} else {
if (was_floating) {
- cnt = (jack_nframes_t) floor (prefix * session->frame_rate());
+ cnt = (nframes_t) floor (prefix * session->frame_rate());
} else {
- cnt = (jack_nframes_t) floor (prefix * one_page);
+ cnt = (nframes_t) floor (prefix * one_page);
}
}
- if (ULONG_MAX - cnt < leftmost_frame) {
- frame = ULONG_MAX - cnt;
+ if (max_frames - cnt < leftmost_frame) {
+ frame = max_frames - cnt;
} else {
frame = leftmost_frame + cnt;
}
@@ -1123,17 +1042,17 @@ Editor::temporal_zoom (gdouble fpu)
{
if (!session) return;
- jack_nframes_t current_page = current_page_frames();
- jack_nframes_t current_leftmost = leftmost_frame;
- jack_nframes_t current_rightmost;
- jack_nframes_t current_center;
- jack_nframes_t new_page;
- jack_nframes_t leftmost_after_zoom = 0;
+ nframes_t current_page = current_page_frames();
+ nframes_t current_leftmost = leftmost_frame;
+ nframes_t current_rightmost;
+ nframes_t current_center;
+ nframes_t new_page;
+ nframes_t leftmost_after_zoom = 0;
double nfpu;
nfpu = fpu;
- new_page = (jack_nframes_t) floor (canvas_width * nfpu);
+ new_page = (nframes_t) floor (canvas_width * nfpu);
switch (zoom_focus) {
case ZoomFocusLeft:
@@ -1197,8 +1116,8 @@ Editor::temporal_zoom_selection ()
return;
}
- jack_nframes_t start = selection->time[clicked_selection].start;
- jack_nframes_t end = selection->time[clicked_selection].end;
+ nframes_t start = selection->time[clicked_selection].start;
+ nframes_t end = selection->time[clicked_selection].end;
temporal_zoom_by_frame (start, end, "zoom to selection");
}
@@ -1214,7 +1133,7 @@ Editor::temporal_zoom_session ()
}
void
-Editor::temporal_zoom_by_frame (jack_nframes_t start, jack_nframes_t end, const string & op)
+Editor::temporal_zoom_by_frame (nframes_t start, nframes_t end, const string & op)
{
if (!session) return;
@@ -1222,7 +1141,7 @@ Editor::temporal_zoom_by_frame (jack_nframes_t start, jack_nframes_t end, const
return;
}
- jack_nframes_t range = end - start;
+ nframes_t range = end - start;
double new_fpu = (double)range / (double)canvas_width;
// double p2 = 1.0;
@@ -1232,9 +1151,9 @@ Editor::temporal_zoom_by_frame (jack_nframes_t start, jack_nframes_t end, const
// }
// new_fpu = p2;
- jack_nframes_t new_page = (jack_nframes_t) floor (canvas_width * new_fpu);
- jack_nframes_t middle = (jack_nframes_t) floor( (double)start + ((double)range / 2.0f ));
- jack_nframes_t new_leftmost = (jack_nframes_t) floor( (double)middle - ((double)new_page/2.0f));
+ nframes_t new_page = (nframes_t) floor (canvas_width * new_fpu);
+ nframes_t middle = (nframes_t) floor( (double)start + ((double)range / 2.0f ));
+ nframes_t new_leftmost = (nframes_t) floor( (double)middle - ((double)new_page/2.0f));
if (new_leftmost > middle) new_leftmost = 0;
@@ -1247,7 +1166,7 @@ Editor::temporal_zoom_by_frame (jack_nframes_t start, jack_nframes_t end, const
}
void
-Editor::temporal_zoom_to_frame (bool coarser, jack_nframes_t frame)
+Editor::temporal_zoom_to_frame (bool coarser, nframes_t frame)
{
if (!session) return;
@@ -1266,7 +1185,7 @@ Editor::temporal_zoom_to_frame (bool coarser, jack_nframes_t frame)
if (new_fpu == frames_per_unit) return;
- jack_nframes_t new_leftmost = frame - (jack_nframes_t)range_before;
+ nframes_t new_leftmost = frame - (nframes_t)range_before;
if (new_leftmost > frame) new_leftmost = 0;
@@ -1289,8 +1208,8 @@ Editor::add_location_from_selection ()
return;
}
- jack_nframes_t start = selection->time[clicked_selection].start;
- jack_nframes_t end = selection->time[clicked_selection].end;
+ nframes_t start = selection->time[clicked_selection].start;
+ nframes_t end = selection->time[clicked_selection].end;
Location *location = new Location (start, end, "selection");
@@ -1305,7 +1224,7 @@ Editor::add_location_from_selection ()
void
Editor::add_location_from_playhead_cursor ()
{
- jack_nframes_t where = session->audible_frame();
+ nframes_t where = session->audible_frame();
Location *location = new Location (where, where, "mark", Location::IsMark);
session->begin_reversible_command (_("add marker"));
@@ -1414,7 +1333,7 @@ Editor::invert_selection ()
}
bool
-Editor::select_all_within (jack_nframes_t start, jack_nframes_t end, double top, double bot, Selection::Operation op)
+Editor::select_all_within (nframes_t start, nframes_t end, double top, double bot, Selection::Operation op)
{
list<Selectable *> touched;
@@ -1508,8 +1427,8 @@ Editor::select_all_selectables_using_time_selection ()
return;
}
- jack_nframes_t start = selection->time[clicked_selection].start;
- jack_nframes_t end = selection->time[clicked_selection].end;
+ nframes_t start = selection->time[clicked_selection].start;
+ nframes_t end = selection->time[clicked_selection].end;
if (end - start < 1) {
return;
@@ -1575,8 +1494,8 @@ Editor::select_all_selectables_using_loop()
void
Editor::select_all_selectables_using_cursor (Cursor *cursor, bool after)
{
- jack_nframes_t start;
- jack_nframes_t end;
+ nframes_t start;
+ nframes_t end;
list<Selectable *> touched;
if (after) {
@@ -1606,8 +1525,8 @@ Editor::select_all_selectables_using_cursor (Cursor *cursor, bool after)
void
Editor::select_all_selectables_between_cursors (Cursor *cursor, Cursor *other_cursor)
{
- jack_nframes_t start;
- jack_nframes_t end;
+ nframes_t start;
+ nframes_t end;
list<Selectable *> touched;
bool other_cursor_is_first = cursor->current_frame > other_cursor->current_frame;
@@ -1725,7 +1644,7 @@ Editor::jump_backward_to_mark ()
void
Editor::set_mark ()
{
- jack_nframes_t pos;
+ nframes_t pos;
float prefix;
bool was_floating;
@@ -1733,9 +1652,9 @@ Editor::set_mark ()
pos = session->audible_frame ();
} else {
if (was_floating) {
- pos = (jack_nframes_t) floor (prefix * session->frame_rate ());
+ pos = (nframes_t) floor (prefix * session->frame_rate ());
} else {
- pos = (jack_nframes_t) floor (prefix);
+ pos = (nframes_t) floor (prefix);
}
}
@@ -1796,7 +1715,7 @@ Editor::insert_region_list_drag (boost::shared_ptr<Region> region, int x, int y)
double wx, wy;
double cx, cy;
TimeAxisView *tv;
- jack_nframes_t where;
+ nframes_t where;
AudioTimeAxisView *atv = 0;
Playlist *playlist;
@@ -1863,16 +1782,23 @@ Editor::insert_region_list_selection (float times)
return;
}
- TreeModel::iterator i = region_list_display.get_selection()->get_selected();
- boost::shared_ptr<Region> region = (*i)[region_list_columns.region];
+ TreeView::Selection::ListHandle_Path rows = selected->get_selected_rows ();
- begin_reversible_command (_("insert region"));
- XMLNode &before = playlist->get_state();
- playlist->add_region ((RegionFactory::create (region)), edit_cursor->current_frame, times);
- session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
- commit_reversible_command ();
-}
+ /* only one row selected, so rows.begin() is it */
+
+ TreeIter iter;
+
+ if ((iter = region_list_model->get_iter (*rows.begin()))) {
+ boost::shared_ptr<Region> region = (*iter)[region_list_columns.region];
+
+ begin_reversible_command (_("insert region"));
+ XMLNode &before = playlist->get_state();
+ playlist->add_region ((RegionFactory::create (region)), edit_cursor->current_frame, times);
+ session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
+ commit_reversible_command ();
+ }
+}
/* BUILT-IN EFFECTS */
@@ -1898,9 +1824,9 @@ Editor::toggle_playback (bool with_abort)
return;
}
- switch (session->slave_source()) {
- case Session::None:
- case Session::JACK:
+ switch (Config->get_slave_source()) {
+ case None:
+ case JACK:
break;
default:
/* transport controlled by the master */
@@ -1914,8 +1840,8 @@ Editor::toggle_playback (bool with_abort)
if (session->transport_rolling()) {
session->request_stop (with_abort);
- if (session->get_auto_loop()) {
- session->request_auto_loop (false);
+ if (Config->get_auto_loop()) {
+ session->request_play_loop (false);
}
} else {
session->request_transport_speed (1.0f);
@@ -1961,7 +1887,7 @@ Editor::loop_selected_region ()
// enable looping, reposition and start rolling
- session->request_auto_loop (true);
+ session->request_play_loop (true);
session->request_locate (tll->start(), false);
session->request_transport_speed (1.0f);
}
@@ -1991,7 +1917,7 @@ Editor::loop_location (Location& location)
tll->set (location.start(), location.end());
// enable looping, reposition and start rolling
- session->request_auto_loop (true);
+ session->request_play_loop (true);
session->request_locate (tll->start(), true);
}
}
@@ -2177,17 +2103,17 @@ Editor::region_from_selection ()
return;
}
- jack_nframes_t start = selection->time[clicked_selection].start;
- jack_nframes_t end = selection->time[clicked_selection].end;
+ nframes_t start = selection->time[clicked_selection].start;
+ nframes_t end = selection->time[clicked_selection].end;
- jack_nframes_t selection_cnt = end - start + 1;
+ nframes_t selection_cnt = end - start + 1;
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
boost::shared_ptr<AudioRegion> current;
boost::shared_ptr<Region> current_r;
Playlist *pl;
- jack_nframes_t internal_start;
+ nframes_t internal_start;
string new_name;
if ((pl = (*i)->playlist()) == 0) {
@@ -2215,15 +2141,15 @@ Editor::create_region_from_selection (vector<boost::shared_ptr<AudioRegion> >& n
return;
}
- jack_nframes_t start = selection->time[clicked_selection].start;
- jack_nframes_t end = selection->time[clicked_selection].end;
+ nframes_t start = selection->time[clicked_selection].start;
+ nframes_t end = selection->time[clicked_selection].end;
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
boost::shared_ptr<AudioRegion> current;
boost::shared_ptr<Region> current_r;
Playlist* playlist;
- jack_nframes_t internal_start;
+ nframes_t internal_start;
string new_name;
if ((playlist = (*i)->playlist()) == 0) {
@@ -2303,7 +2229,7 @@ Editor::separate_region_from_selection ()
double speed = atv->get_diskstream()->speed();
for (list<AudioRange>::iterator t = selection->time.begin(); t != selection->time.end(); ++t) {
- playlist->partition ((jack_nframes_t)((*t).start * speed), (jack_nframes_t)((*t).end * speed), true);
+ playlist->partition ((nframes_t)((*t).start * speed), (nframes_t)((*t).end * speed), true);
}
if (doing_undo)
@@ -2358,7 +2284,7 @@ Editor::separate_regions_using_location (Location& loc)
double speed = atv->get_diskstream()->speed();
- playlist->partition ((jack_nframes_t)(loc.start() * speed), (jack_nframes_t)(loc.end() * speed), true);
+ playlist->partition ((nframes_t)(loc.start() * speed), (nframes_t)(loc.end() * speed), true);
if (doing_undo)
session->add_command(new MementoCommand<Playlist>(*playlist, before, &playlist->get_state()));
}
@@ -2404,9 +2330,9 @@ Editor::crop_region_to_selection ()
if (!playlists.empty()) {
- jack_nframes_t start;
- jack_nframes_t end;
- jack_nframes_t cnt;
+ nframes_t start;
+ nframes_t end;
+ nframes_t cnt;
begin_reversible_command (_("trim to selection"));
@@ -2441,7 +2367,7 @@ Editor::crop_region_to_selection ()
void
Editor::region_fill_track ()
{
- jack_nframes_t end;
+ nframes_t end;
if (!session || selection->regions.empty()) {
return;
@@ -2500,8 +2426,8 @@ Editor::region_fill_selection ()
TreeModel::iterator i = region_list_display.get_selection()->get_selected();
boost::shared_ptr<Region> region = (*i)[region_list_columns.region];
- jack_nframes_t start = selection->time[clicked_selection].start;
- jack_nframes_t end = selection->time[clicked_selection].end;
+ nframes_t start = selection->time[clicked_selection].start;
+ nframes_t end = selection->time[clicked_selection].end;
Playlist *playlist;
@@ -2509,7 +2435,7 @@ Editor::region_fill_selection ()
return;
}
- jack_nframes_t selection_length = end - start;
+ nframes_t selection_length = end - start;
float times = (float)selection_length / region->length();
begin_reversible_command (_("fill selection"));
@@ -2529,7 +2455,7 @@ Editor::region_fill_selection ()
}
void
-Editor::set_a_regions_sync_position (boost::shared_ptr<Region> region, jack_nframes_t position)
+Editor::set_a_regions_sync_position (boost::shared_ptr<Region> region, nframes_t position)
{
if (!region->covers (position)) {
@@ -2614,14 +2540,14 @@ struct RegionSortByTime {
};
void
-Editor::align_selection_relative (RegionPoint point, jack_nframes_t position)
+Editor::align_selection_relative (RegionPoint point, nframes_t position)
{
if (selection->regions.empty()) {
return;
}
- jack_nframes_t distance;
- jack_nframes_t pos = 0;
+ nframes_t distance;
+ nframes_t pos = 0;
int dir;
list<RegionView*> sorted;
@@ -2673,7 +2599,7 @@ Editor::align_selection_relative (RegionPoint point, jack_nframes_t position)
}
void
-Editor::align_selection (RegionPoint point, jack_nframes_t position)
+Editor::align_selection (RegionPoint point, nframes_t position)
{
if (selection->regions.empty()) {
return;
@@ -2689,7 +2615,7 @@ Editor::align_selection (RegionPoint point, jack_nframes_t position)
}
void
-Editor::align_region (boost::shared_ptr<Region> region, RegionPoint point, jack_nframes_t position)
+Editor::align_region (boost::shared_ptr<Region> region, RegionPoint point, nframes_t position)
{
begin_reversible_command (_("align region"));
align_region_internal (region, point, position);
@@ -2697,7 +2623,7 @@ Editor::align_region (boost::shared_ptr<Region> region, RegionPoint point, jack_
}
void
-Editor::align_region_internal (boost::shared_ptr<Region> region, RegionPoint point, jack_nframes_t position)
+Editor::align_region_internal (boost::shared_ptr<Region> region, RegionPoint point, nframes_t position)
{
XMLNode &before = region->playlist()->get_state();
@@ -2855,9 +2781,9 @@ Editor::bounce_range_selection ()
TrackViewList *views = get_valid_views (selection->time.track, selection->time.group);
- jack_nframes_t start = selection->time[clicked_selection].start;
- jack_nframes_t end = selection->time[clicked_selection].end;
- jack_nframes_t cnt = end - start + 1;
+ nframes_t start = selection->time[clicked_selection].start;
+ nframes_t end = selection->time[clicked_selection].end;
+ nframes_t cnt = end - start + 1;
begin_reversible_command (_("bounce range"));
@@ -2989,7 +2915,7 @@ Editor::cut_copy_regions (CutCopyOp op)
{
typedef std::map<AudioPlaylist*,AudioPlaylist*> PlaylistMapping;
PlaylistMapping pmap;
- jack_nframes_t first_position = max_frames;
+ nframes_t first_position = max_frames;
set<Playlist*> freezelist;
pair<set<Playlist*>::iterator,bool> insert_result;
@@ -3100,13 +3026,13 @@ Editor::mouse_paste ()
event.button.x = wx;
event.button.y = wy;
- jack_nframes_t where = event_frame (&event, 0, 0);
+ nframes_t where = event_frame (&event, 0, 0);
snap_to (where);
paste_internal (where, 1);
}
void
-Editor::paste_internal (jack_nframes_t position, float times)
+Editor::paste_internal (nframes_t position, float times)
{
bool commit = false;
@@ -3312,9 +3238,9 @@ void
Editor::nudge_track (bool use_edit_cursor, bool forwards)
{
Playlist *playlist;
- jack_nframes_t distance;
- jack_nframes_t next_distance;
- jack_nframes_t start;
+ nframes_t distance;
+ nframes_t next_distance;
+ nframes_t start;
if (use_edit_cursor) {
start = edit_cursor->current_frame;
@@ -3525,7 +3451,7 @@ Editor::external_edit_region ()
}
void
-Editor::brush (jack_nframes_t pos)
+Editor::brush (nframes_t pos)
{
RegionSelection sel;
snap_to (pos);
diff --git a/gtk2_ardour/editor_region_list.cc b/gtk2_ardour/editor_region_list.cc
index ccfa1c378a..1e75437db2 100644
--- a/gtk2_ardour/editor_region_list.cc
+++ b/gtk2_ardour/editor_region_list.cc
@@ -235,6 +235,7 @@ Editor::redisplay_regions ()
for (list<boost::shared_ptr<Region> >::iterator r = tmp_region_list.begin(); r != tmp_region_list.end(); ++r) {
add_region_to_region_display (*r);
}
+ tmp_region_list.clear();
region_list_display.set_model (region_list_model);
}
@@ -582,7 +583,7 @@ Editor::region_list_display_drag_data_received (const RefPtr<Gdk::DragContext>&
vector<ustring> paths;
if (convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) {
- jack_nframes_t pos = 0;
+ nframes_t pos = 0;
do_embed (paths, false, ImportAsRegion, 0, pos, true);
context->drag_finish (true, false, time);
}
diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc
index 224e779bf9..ecf7f0b263 100644
--- a/gtk2_ardour/editor_rulers.cc
+++ b/gtk2_ardour/editor_rulers.cc
@@ -160,7 +160,7 @@ Editor::ruler_button_release (GdkEventButton* ev)
hide_verbose_canvas_cursor();
stop_canvas_autoscroll();
- jack_nframes_t where = leftmost_frame + pixel_to_frame (x);
+ nframes_t where = leftmost_frame + pixel_to_frame (x);
switch (ev->button) {
case 1:
@@ -229,11 +229,11 @@ Editor::ruler_mouse_motion (GdkEventMotion* ev)
track_canvas.c2w (x, y, wcx, wcy);
track_canvas.w2c (wcx, wcy, cx, cy);
- jack_nframes_t where = leftmost_frame + pixel_to_frame (x);
+ nframes_t where = leftmost_frame + pixel_to_frame (x);
/// ripped from maybe_autoscroll
- jack_nframes_t one_page = (jack_nframes_t) rint (canvas_width * frames_per_unit);
- jack_nframes_t rightmost_frame = leftmost_frame + one_page;
+ nframes_t one_page = (nframes_t) rint (canvas_width * frames_per_unit);
+ nframes_t rightmost_frame = leftmost_frame + one_page;
jack_nframes_t frame = pixel_to_frame (cx);
@@ -289,7 +289,7 @@ Editor::ruler_mouse_motion (GdkEventMotion* ev)
void
-Editor::popup_ruler_menu (jack_nframes_t where, ItemType t)
+Editor::popup_ruler_menu (nframes_t where, ItemType t)
{
using namespace Menu_Helpers;
@@ -696,8 +696,8 @@ Editor::update_just_smpte ()
an uint32_t (or larger) to a float ... what to do ?
*/
- jack_nframes_t page = (jack_nframes_t) floor (canvas_width * frames_per_unit);
- jack_nframes_t rightmost_frame = leftmost_frame + page;
+ nframes_t page = (nframes_t) floor (canvas_width * frames_per_unit);
+ nframes_t rightmost_frame = leftmost_frame + page;
if (ruler_shown[ruler_metric_smpte]) {
gtk_custom_ruler_set_range (GTK_CUSTOM_RULER(_smpte_ruler), leftmost_frame, rightmost_frame,
@@ -708,7 +708,7 @@ Editor::update_just_smpte ()
void
Editor::update_fixed_rulers ()
{
- jack_nframes_t rightmost_frame;
+ nframes_t rightmost_frame;
if (session == 0) {
return;
@@ -718,7 +718,7 @@ Editor::update_fixed_rulers ()
an uint32_t (or larger) to a float ... what to do ?
*/
- jack_nframes_t page = (jack_nframes_t) floor (canvas_width * frames_per_unit);
+ nframes_t page = (nframes_t) floor (canvas_width * frames_per_unit);
ruler_metrics[ruler_metric_smpte].units_per_pixel = frames_per_unit;
ruler_metrics[ruler_metric_frames].units_per_pixel = frames_per_unit;
@@ -757,7 +757,7 @@ Editor::update_tempo_based_rulers ()
an uint32_t (or larger) to a float ... what to do ?
*/
- jack_nframes_t page = (jack_nframes_t) floor (canvas_width * frames_per_unit);
+ nframes_t page = (nframes_t) floor (canvas_width * frames_per_unit);
ruler_metrics[ruler_metric_bbt].units_per_pixel = frames_per_unit;
if (ruler_shown[ruler_metric_bbt]) {
@@ -795,10 +795,10 @@ Editor::_metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble u
gint
Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upper, gint maxchars)
{
- jack_nframes_t range;
- jack_nframes_t pos;
- jack_nframes_t spacer;
- jack_nframes_t fr;
+ nframes_t range;
+ nframes_t pos;
+ nframes_t spacer;
+ nframes_t fr;
SMPTE::Time smpte;
gchar buf[16];
gint nmarks = 0;
@@ -816,13 +816,13 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upp
fr = session->frame_rate();
- if (lower > (spacer = (jack_nframes_t)(128 * Editor::get_current_zoom ()))) {
+ if (lower > (spacer = (nframes_t)(128 * Editor::get_current_zoom ()))) {
lower = lower - spacer;
} else {
lower = 0;
}
upper = upper + spacer;
- range = (jack_nframes_t) floor (upper - lower);
+ range = (nframes_t) floor (upper - lower);
if (range < (2 * session->frames_per_smpte_frame())) { /* 0 - 2 frames */
show_bits = true;
@@ -831,19 +831,19 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upp
} else if (range <= (fr / 4)) { /* 2 frames - 0.250 second */
show_frames = true;
mark_modulo = 1;
- nmarks = 1 + (range / (jack_nframes_t)session->frames_per_smpte_frame());
+ nmarks = 1 + (range / (nframes_t)session->frames_per_smpte_frame());
} else if (range <= (fr / 2)) { /* 0.25-0.5 second */
show_frames = true;
mark_modulo = 2;
- nmarks = 1 + (range / (jack_nframes_t)session->frames_per_smpte_frame());
+ nmarks = 1 + (range / (nframes_t)session->frames_per_smpte_frame());
} else if (range <= fr) { /* 0.5-1 second */
show_frames = true;
mark_modulo = 5;
- nmarks = 1 + (range / (jack_nframes_t)session->frames_per_smpte_frame());
+ nmarks = 1 + (range / (nframes_t)session->frames_per_smpte_frame());
} else if (range <= 2 * fr) { /* 1-2 seconds */
show_frames = true;
mark_modulo = 10;
- nmarks = 1 + (range / (jack_nframes_t)session->frames_per_smpte_frame());
+ nmarks = 1 + (range / (nframes_t)session->frames_per_smpte_frame());
} else if (range <= 8 * fr) { /* 2-8 seconds */
show_seconds = true;
mark_modulo = 1;
@@ -894,14 +894,14 @@ Editor::metric_get_smpte (GtkCustomRulerMark **marks, gdouble lower, gdouble upp
nmarks = 1 + 24;
} else {
- /* not possible if jack_nframes_t is a 32 bit quantity */
+ /* not possible if nframes_t is a 32 bit quantity */
show_hours = true;
mark_modulo = 4;
nmarks = 1 + 24;
}
- pos = (jack_nframes_t) floor (lower);
+ pos = (nframes_t) floor (lower);
*marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * nmarks);
@@ -1044,12 +1044,12 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper
gint nmarks;
char buf[64];
gint n;
- jack_nframes_t pos;
+ nframes_t pos;
bool bar_helper_on = true;
BBT_Time next_beat;
- jack_nframes_t next_beat_pos;
- jack_nframes_t ilower = (jack_nframes_t) floor (lower);
+ nframes_t next_beat_pos;
+ nframes_t ilower = (nframes_t) floor (lower);
if ((desirable_marks = maxchars / 7) == 0) {
return 0;
@@ -1102,7 +1102,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper
uint32_t tick = 0;
uint32_t skip;
uint32_t t;
- jack_nframes_t frame_skip;
+ nframes_t frame_skip;
double frame_skip_error;
double accumulated_error;
double position_of_helper;
@@ -1173,7 +1173,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper
next_beat_pos = session->tempo_map().frame_time(next_beat);
- frame_skip = (jack_nframes_t) floor (frame_skip_error = (session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute()));
+ frame_skip = (nframes_t) floor (frame_skip_error = (session->frame_rate() * 60) / (bbt_beat_subdivision * (*i).tempo->beats_per_minute()));
frame_skip_error -= frame_skip;
skip = (uint32_t) (Meter::ticks_per_beat / bbt_beat_subdivision);
@@ -1199,7 +1199,7 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper
(*marks)[n].label = g_strdup (buf);
- /* Error compensation for float to jack_nframes_t*/
+ /* Error compensation for float to nframes_t*/
accumulated_error += frame_skip_error;
if (accumulated_error > 1) {
pos += 1;
@@ -1327,10 +1327,10 @@ Editor::metric_get_bbt (GtkCustomRulerMark **marks, gdouble lower, gdouble upper
gint
Editor::metric_get_frames (GtkCustomRulerMark **marks, gdouble lower, gdouble upper, gint maxchars)
{
- jack_nframes_t mark_interval;
- jack_nframes_t pos;
- jack_nframes_t ilower = (jack_nframes_t) floor (lower);
- jack_nframes_t iupper = (jack_nframes_t) floor (upper);
+ nframes_t mark_interval;
+ nframes_t pos;
+ nframes_t ilower = (nframes_t) floor (lower);
+ nframes_t iupper = (nframes_t) floor (upper);
gchar buf[16];
gint nmarks;
gint n;
@@ -1358,15 +1358,15 @@ Editor::metric_get_frames (GtkCustomRulerMark **marks, gdouble lower, gdouble up
}
static void
-sample_to_clock_parts ( jack_nframes_t sample,
- jack_nframes_t sample_rate,
+sample_to_clock_parts ( nframes_t sample,
+ nframes_t sample_rate,
long *hrs_p,
long *mins_p,
long *secs_p,
long *millisecs_p)
{
- jack_nframes_t left;
+ nframes_t left;
long hrs;
long mins;
long secs;
@@ -1392,11 +1392,11 @@ sample_to_clock_parts ( jack_nframes_t sample,
gint
Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble upper, gint maxchars)
{
- jack_nframes_t range;
- jack_nframes_t fr;
- jack_nframes_t mark_interval;
- jack_nframes_t pos;
- jack_nframes_t spacer;
+ nframes_t range;
+ nframes_t fr;
+ nframes_t mark_interval;
+ nframes_t pos;
+ nframes_t spacer;
long hrs, mins, secs, millisecs;
gchar buf[16];
gint nmarks;
@@ -1405,8 +1405,8 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble up
bool show_seconds = false;
bool show_minutes = false;
bool show_hours = false;
- jack_nframes_t ilower = (jack_nframes_t) floor (lower);
- jack_nframes_t iupper = (jack_nframes_t) floor (upper);
+ nframes_t ilower = (nframes_t) floor (lower);
+ nframes_t iupper = (nframes_t) floor (upper);
if (session == 0) {
return 0;
@@ -1415,7 +1415,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble up
fr = session->frame_rate();
/* to prevent 'flashing' */
- if (lower > (spacer = (jack_nframes_t)(128 * Editor::get_current_zoom ()))) {
+ if (lower > (spacer = (nframes_t)(128 * Editor::get_current_zoom ()))) {
lower = lower - spacer;
} else {
lower = 0;
@@ -1487,7 +1487,7 @@ Editor::metric_get_minsec (GtkCustomRulerMark **marks, gdouble lower, gdouble up
mark_modulo = 2;
} else {
- /* not possible if jack_nframes_t is a 32 bit quantity */
+ /* not possible if nframes_t is a 32 bit quantity */
mark_interval = 4 * 60 * 60 * fr; /* show 4 hrs */
}
diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc
index e101da196f..c905e696cc 100644
--- a/gtk2_ardour/editor_tempodisplay.cc
+++ b/gtk2_ardour/editor_tempodisplay.cc
@@ -44,6 +44,7 @@
#include "rgb_macros.h"
#include "gui_thread.h"
#include "color.h"
+#include "time_axis_view.h"
#include "i18n.h"
@@ -200,6 +201,7 @@ Editor::draw_measures ()
}
track_canvas.get_scroll_region (x1, y1, x2, y2);
+ y2 = TimeAxisView::hLargest*5000; // five thousand largest tracks should be enough.. :)
/* get the first bar spacing */
@@ -210,8 +212,9 @@ Editor::draw_measures ()
beat_density = (beats * 10.0f) / track_canvas.get_width ();
- if (beat_density > 2.0f) {
- /* if the lines are too close together, they become useless */
+ if (beat_density > 4.0f) {
+ /* if the lines are too close together, they become useless
+ */
return;
}
@@ -228,10 +231,10 @@ Editor::draw_measures ()
} else {
color = color_map[cMeasureLineBar];
- /* only draw beat lines if the gaps between beats are large. */
-
- if (beat_density > 0.25) {
- break;
+ if (beat_density > 2.0) {
+ /* only draw beat lines if the gaps between beats are large.
+ */
+ break;
}
}
@@ -255,7 +258,7 @@ Editor::draw_measures ()
}
void
-Editor::mouse_add_new_tempo_event (jack_nframes_t frame)
+Editor::mouse_add_new_tempo_event (nframes_t frame)
{
if (session == 0) {
return;
@@ -297,7 +300,7 @@ Editor::mouse_add_new_tempo_event (jack_nframes_t frame)
}
void
-Editor::mouse_add_new_meter_event (jack_nframes_t frame)
+Editor::mouse_add_new_meter_event (nframes_t frame)
{
if (session == 0) {
return;
diff --git a/gtk2_ardour/export_dialog.cc b/gtk2_ardour/export_dialog.cc
index 730da46673..e38f0ba946 100644
--- a/gtk2_ardour/export_dialog.cc
+++ b/gtk2_ardour/export_dialog.cc
@@ -581,7 +581,7 @@ ExportDialog::save_state()
}
void
-ExportDialog::set_range (jack_nframes_t start, jack_nframes_t end)
+ExportDialog::set_range (nframes_t start, nframes_t end)
{
spec.start_frame = start;
spec.end_frame = end;
@@ -595,7 +595,7 @@ ExportDialog::progress_timeout ()
}
void
-frames_to_cd_frames_string (char* buf, jack_nframes_t when, jack_nframes_t fr)
+frames_to_cd_frames_string (char* buf, nframes_t when, nframes_t fr)
{
long unsigned int remainder;
@@ -1022,7 +1022,7 @@ void
ExportDialog::sample_rate_chosen ()
{
string sr_str = sample_rate_combo.get_active_text();
- jack_nframes_t rate;
+ nframes_t rate;
if (sr_str == N_("22.05kHz")) {
rate = 22050;
diff --git a/gtk2_ardour/export_dialog.h b/gtk2_ardour/export_dialog.h
index 3bb2b40c06..13b327fe50 100644
--- a/gtk2_ardour/export_dialog.h
+++ b/gtk2_ardour/export_dialog.h
@@ -53,7 +53,7 @@ class ExportDialog : public ArdourDialog
~ExportDialog ();
void connect_to_session (ARDOUR::Session*);
- virtual void set_range (jack_nframes_t start, jack_nframes_t end);
+ virtual void set_range (nframes_t start, nframes_t end);
void start_export ();
protected:
diff --git a/gtk2_ardour/export_range_markers_dialog.cc b/gtk2_ardour/export_range_markers_dialog.cc
index e43eb20cd1..c91e1c101a 100644
--- a/gtk2_ardour/export_range_markers_dialog.cc
+++ b/gtk2_ardour/export_range_markers_dialog.cc
@@ -166,7 +166,7 @@ ExportRangeMarkersDialog::init_progress_computing(Locations::LocationList& locat
// flush vector
range_markers_durations_aggregated.resize(0);
- jack_nframes_t duration_before_current_location = 0;
+ nframes_t duration_before_current_location = 0;
Locations::LocationList::iterator locationIter;
for (locationIter = locations.begin(); locationIter != locations.end(); ++locationIter) {
@@ -176,7 +176,7 @@ ExportRangeMarkersDialog::init_progress_computing(Locations::LocationList& locat
range_markers_durations_aggregated.push_back(
duration_before_current_location);
- jack_nframes_t duration =
+ nframes_t duration =
currentLocation->end() - currentLocation->start();
range_markers_durations.push_back(duration);
diff --git a/gtk2_ardour/export_range_markers_dialog.h b/gtk2_ardour/export_range_markers_dialog.h
index a69e2b749b..7aae9640bf 100644
--- a/gtk2_ardour/export_range_markers_dialog.h
+++ b/gtk2_ardour/export_range_markers_dialog.h
@@ -37,10 +37,10 @@ class ExportRangeMarkersDialog : public ExportDialog
private:
// keeps the duration of all range_markers before the current
- vector<jack_nframes_t> range_markers_durations_aggregated;
- vector<jack_nframes_t> range_markers_durations;
+ vector<nframes_t> range_markers_durations_aggregated;
+ vector<nframes_t> range_markers_durations;
// duration of all range markers
- jack_nframes_t total_duration;
+ nframes_t total_duration;
// index of range marker, that get's exported right now
unsigned int current_range_marker_index;
diff --git a/gtk2_ardour/export_session_dialog.cc b/gtk2_ardour/export_session_dialog.cc
index 3c09efc0e6..7cd7fdc06f 100644
--- a/gtk2_ardour/export_session_dialog.cc
+++ b/gtk2_ardour/export_session_dialog.cc
@@ -47,7 +47,7 @@ ExportSessionDialog::export_audio_data ()
void
-ExportSessionDialog::set_range (jack_nframes_t start, jack_nframes_t end)
+ExportSessionDialog::set_range (nframes_t start, nframes_t end)
{
ExportDialog::set_range (start, end);
diff --git a/gtk2_ardour/export_session_dialog.h b/gtk2_ardour/export_session_dialog.h
index 707989444a..5aeec4ad10 100644
--- a/gtk2_ardour/export_session_dialog.h
+++ b/gtk2_ardour/export_session_dialog.h
@@ -27,7 +27,7 @@ class ExportSessionDialog : public ExportDialog
{
public:
ExportSessionDialog (PublicEditor&);
- void set_range (jack_nframes_t start, jack_nframes_t end);
+ void set_range (nframes_t start, nframes_t end);
protected:
void export_audio_data();
diff --git a/gtk2_ardour/gain_automation_time_axis.cc b/gtk2_ardour/gain_automation_time_axis.cc
index 47657e3292..7e4a1b1fbf 100644
--- a/gtk2_ardour/gain_automation_time_axis.cc
+++ b/gtk2_ardour/gain_automation_time_axis.cc
@@ -48,7 +48,7 @@ GainAutomationTimeAxisView::~GainAutomationTimeAxisView ()
}
void
-GainAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item, GdkEvent* event, jack_nframes_t when, double y)
+GainAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item, GdkEvent* event, nframes_t when, double y)
{
double x = 0;
diff --git a/gtk2_ardour/gain_automation_time_axis.h b/gtk2_ardour/gain_automation_time_axis.h
index dc6d5bd28e..ea9388ccd3 100644
--- a/gtk2_ardour/gain_automation_time_axis.h
+++ b/gtk2_ardour/gain_automation_time_axis.h
@@ -22,7 +22,7 @@ class GainAutomationTimeAxisView : public AutomationTimeAxisView
~GainAutomationTimeAxisView();
- void add_automation_event (ArdourCanvas::Item *item, GdkEvent *event, jack_nframes_t, double);
+ void add_automation_event (ArdourCanvas::Item *item, GdkEvent *event, nframes_t, double);
private:
ARDOUR::Curve& curve;
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index c0d7acc118..fc8e183d96 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -205,7 +205,7 @@ GainMeter::GainMeter (boost::shared_ptr<IO> io, Session& s)
gain_adjustment.signal_value_changed().connect (mem_fun(*this, &GainMeter::gain_adjusted));
peak_display.signal_button_release_event().connect (mem_fun(*this, &GainMeter::peak_button_release));
- _session.MeterHoldChanged.connect (mem_fun(*this, &GainMeter::meter_hold_changed));
+ Config->ParameterChanged.connect (mem_fun (*this, &GainMeter::parameter_changed));
gain_changed (0);
update_gain_sensitive ();
@@ -350,17 +350,24 @@ GainMeter::update_meters ()
}
void
-GainMeter::meter_hold_changed()
+GainMeter::parameter_changed(const char* parameter_name)
{
- ENSURE_GUI_THREAD(mem_fun(*this, &GainMeter::meter_hold_changed));
-
- vector<MeterInfo>::iterator i;
- uint32_t n;
+#define PARAM_IS(x) (!strcmp (parameter_name, (x)))
+
+ ENSURE_GUI_THREAD (bind (mem_fun(*this, &GainMeter::parameter_changed), parameter_name));
+
+ if (PARAM_IS ("meter-hold")) {
- for (n = 0, i = meters.begin(); i != meters.end(); ++i, ++n) {
+ vector<MeterInfo>::iterator i;
+ uint32_t n;
- (*i).meter->set_hold_count ((uint32_t) floor(_session.meter_hold()));
+ for (n = 0, i = meters.begin(); i != meters.end(); ++i, ++n) {
+
+ (*i).meter->set_hold_count ((uint32_t) floor(Config->get_meter_hold()));
+ }
}
+
+#undef PARAM_IS
}
void
@@ -428,7 +435,7 @@ GainMeter::setup_meters ()
for (uint32_t n = 0; n < nmeters; ++n) {
if (meters[n].width != width) {
delete meters[n].meter;
- meters[n].meter = new FastMeter ((uint32_t) floor (_session.meter_hold()), width, FastMeter::Vertical);
+ meters[n].meter = new FastMeter ((uint32_t) floor (Config->get_meter_hold()), width, FastMeter::Vertical);
meters[n].width = width;
meters[n].meter->add_events (Gdk::BUTTON_RELEASE_MASK);
diff --git a/gtk2_ardour/gain_meter.h b/gtk2_ardour/gain_meter.h
index 1dfc088248..bbc12ccb6c 100644
--- a/gtk2_ardour/gain_meter.h
+++ b/gtk2_ardour/gain_meter.h
@@ -172,7 +172,7 @@ class GainMeter : public Gtk::VBox
bool wait_for_release;
ARDOUR::MeterPoint old_meter_point;
- void meter_hold_changed();
+ void parameter_changed (const char*);
void reset_peak_display ();
void reset_group_peak_display (ARDOUR::RouteGroup*);
diff --git a/gtk2_ardour/icons/nudge_left.png b/gtk2_ardour/icons/nudge_left.png
new file mode 100644
index 0000000000..c88547771a
--- /dev/null
+++ b/gtk2_ardour/icons/nudge_left.png
Binary files differ
diff --git a/gtk2_ardour/icons/nudge_right.png b/gtk2_ardour/icons/nudge_right.png
new file mode 100644
index 0000000000..a6c1581363
--- /dev/null
+++ b/gtk2_ardour/icons/nudge_right.png
Binary files differ
diff --git a/gtk2_ardour/icons/tool_audition.png b/gtk2_ardour/icons/tool_audition.png
new file mode 100644
index 0000000000..65f52e1fb0
--- /dev/null
+++ b/gtk2_ardour/icons/tool_audition.png
Binary files differ
diff --git a/gtk2_ardour/icons/tool_gain.png b/gtk2_ardour/icons/tool_gain.png
new file mode 100644
index 0000000000..f54be9403a
--- /dev/null
+++ b/gtk2_ardour/icons/tool_gain.png
Binary files differ
diff --git a/gtk2_ardour/icons/tool_object.png b/gtk2_ardour/icons/tool_object.png
new file mode 100644
index 0000000000..0b5739e5a9
--- /dev/null
+++ b/gtk2_ardour/icons/tool_object.png
Binary files differ
diff --git a/gtk2_ardour/icons/tool_object.xpm b/gtk2_ardour/icons/tool_object.xpm
new file mode 100644
index 0000000000..b6b2fea299
--- /dev/null
+++ b/gtk2_ardour/icons/tool_object.xpm
@@ -0,0 +1,54 @@
+/* XPM */
+static char * tool_object_xpm[] = {
+"16 12 39 1",
+" c None",
+". c #000000",
+"+ c #0C0C0C",
+"@ c #151515",
+"# c #D1D1D1",
+"$ c #121212",
+"% c #161616",
+"& c #DADADA",
+"* c #131313",
+"= c #D6D6D6",
+"- c #0F0F0F",
+"; c #050505",
+"> c #D3D3D3",
+", c #0A0A0A",
+"' c #070707",
+") c #E5E5E5",
+"! c #292929",
+"~ c #B0B0B0",
+"{ c #262626",
+"] c #5C5C5C",
+"^ c #333333",
+"/ c #0E0E0E",
+"( c #111111",
+"_ c #3D3D3D",
+": c #F4F4F4",
+"< c #FFFFFF",
+"[ c #EBEBEB",
+"} c #D0D0D0",
+"| c #030303",
+"1 c #F1F1F1",
+"2 c #FDFDFD",
+"3 c #C3C3C3",
+"4 c #101010",
+"5 c #141414",
+"6 c #F2F2F2",
+"7 c #4E4E4E",
+"8 c #686868",
+"9 c #0B0B0B",
+"0 c #020202",
+" .+. ",
+" @#$ ",
+" %&* ",
+" +=-.. ",
+" ;>.,,-.. ",
+" .')!~{]^/ ",
+" (_:<<<[}| ",
+" '12<<<<<| ",
+" -~<<<<<34 ",
+" .56<<<<7| ",
+" /8<<<),. ",
+" .9|||0- "};
diff --git a/gtk2_ardour/icons/tool_stretch.png b/gtk2_ardour/icons/tool_stretch.png
new file mode 100644
index 0000000000..a599fbe51d
--- /dev/null
+++ b/gtk2_ardour/icons/tool_stretch.png
Binary files differ
diff --git a/gtk2_ardour/icons/tool_zoom.png b/gtk2_ardour/icons/tool_zoom.png
new file mode 100644
index 0000000000..f6b5e2781d
--- /dev/null
+++ b/gtk2_ardour/icons/tool_zoom.png
Binary files differ
diff --git a/gtk2_ardour/icons/transport_end.png b/gtk2_ardour/icons/transport_end.png
new file mode 100644
index 0000000000..1a16a7a5e8
--- /dev/null
+++ b/gtk2_ardour/icons/transport_end.png
Binary files differ
diff --git a/gtk2_ardour/icons/transport_loop.png b/gtk2_ardour/icons/transport_loop.png
new file mode 100644
index 0000000000..0a6f398b1f
--- /dev/null
+++ b/gtk2_ardour/icons/transport_loop.png
Binary files differ
diff --git a/gtk2_ardour/icons/transport_play.png b/gtk2_ardour/icons/transport_play.png
new file mode 100644
index 0000000000..14779b7fec
--- /dev/null
+++ b/gtk2_ardour/icons/transport_play.png
Binary files differ
diff --git a/gtk2_ardour/icons/transport_range.png b/gtk2_ardour/icons/transport_range.png
new file mode 100644
index 0000000000..20769ca962
--- /dev/null
+++ b/gtk2_ardour/icons/transport_range.png
Binary files differ
diff --git a/gtk2_ardour/icons/transport_record.png b/gtk2_ardour/icons/transport_record.png
new file mode 100644
index 0000000000..fa3972d9c5
--- /dev/null
+++ b/gtk2_ardour/icons/transport_record.png
Binary files differ
diff --git a/gtk2_ardour/icons/transport_start.png b/gtk2_ardour/icons/transport_start.png
new file mode 100644
index 0000000000..95b3f2e33a
--- /dev/null
+++ b/gtk2_ardour/icons/transport_start.png
Binary files differ
diff --git a/gtk2_ardour/icons/transport_stop.png b/gtk2_ardour/icons/transport_stop.png
new file mode 100644
index 0000000000..9b1e944c7b
--- /dev/null
+++ b/gtk2_ardour/icons/transport_stop.png
Binary files differ
diff --git a/gtk2_ardour/icons/tw_edit_icons_07.xcf b/gtk2_ardour/icons/tw_edit_icons_07.xcf
new file mode 100644
index 0000000000..fefae94082
--- /dev/null
+++ b/gtk2_ardour/icons/tw_edit_icons_07.xcf
Binary files differ
diff --git a/gtk2_ardour/icons/zoom_full.png b/gtk2_ardour/icons/zoom_full.png
new file mode 100644
index 0000000000..fdb2e1dcf2
--- /dev/null
+++ b/gtk2_ardour/icons/zoom_full.png
Binary files differ
diff --git a/gtk2_ardour/icons/zoom_in.png b/gtk2_ardour/icons/zoom_in.png
new file mode 100644
index 0000000000..b3ef4e8ac8
--- /dev/null
+++ b/gtk2_ardour/icons/zoom_in.png
Binary files differ
diff --git a/gtk2_ardour/icons/zoom_out.png b/gtk2_ardour/icons/zoom_out.png
new file mode 100644
index 0000000000..50effceb78
--- /dev/null
+++ b/gtk2_ardour/icons/zoom_out.png
Binary files differ
diff --git a/gtk2_ardour/imageframe_socket_handler.cc b/gtk2_ardour/imageframe_socket_handler.cc
index 905a96de7d..a7f4d603a7 100644
--- a/gtk2_ardour/imageframe_socket_handler.cc
+++ b/gtk2_ardour/imageframe_socket_handler.cc
@@ -538,7 +538,7 @@ ImageFrameSocketHandler::send_imageframe_time_axis_group_renamed(const string &
* @param item the time axis item whos position has changed
*/
void
-ImageFrameSocketHandler::send_imageframe_view_position_change(jack_nframes_t pos, void* src, ImageFrameView* item)
+ImageFrameSocketHandler::send_imageframe_view_position_change(nframes_t pos, void* src, ImageFrameView* item)
{
// ENSURE_GUI_THREAD(bind (mem_fun(*this, &ImageFrameSocketHandler::send_imageframe_view_position_change), pos, src, item));
@@ -574,7 +574,7 @@ ImageFrameSocketHandler::send_imageframe_view_position_change(jack_nframes_t pos
* @param item the item which has had a duration change
*/
void
-ImageFrameSocketHandler::send_imageframe_view_duration_change(jack_nframes_t dur, void* src, ImageFrameView* item)
+ImageFrameSocketHandler::send_imageframe_view_duration_change(nframes_t dur, void* src, ImageFrameView* item)
{
// ENSURE_GUI_THREAD(bind (mem_fun(*this, &ImageFrameSocketHandler::send_imageframe_view_duration_change), dur, src, item));
@@ -688,7 +688,7 @@ ImageFrameSocketHandler::send_imageframe_view_removed(const string & item_id, vo
* @param item the time axis item whos position has changed
*/
void
-ImageFrameSocketHandler::send_marker_view_position_change(jack_nframes_t pos, void* src, MarkerView* item)
+ImageFrameSocketHandler::send_marker_view_position_change(nframes_t pos, void* src, MarkerView* item)
{
if(this == src || src == 0)
{
@@ -722,7 +722,7 @@ ImageFrameSocketHandler::send_marker_view_position_change(jack_nframes_t pos, vo
* @param item the time axis item whos position has changed
*/
void
-ImageFrameSocketHandler::send_marker_view_duration_change(jack_nframes_t dur, void* src, MarkerView* item)
+ImageFrameSocketHandler::send_marker_view_duration_change(nframes_t dur, void* src, MarkerView* item)
{
if(this == src || src == 0)
{
@@ -1337,11 +1337,11 @@ ImageFrameSocketHandler::handle_insert_imageframe_view(const char* msg)
position += image_id_size ;
// get the start frame value
- jack_nframes_t start = strtoul((get_message_part(position,10,msg).c_str()),0,10) ;
+ nframes_t start = strtoul((get_message_part(position,10,msg).c_str()),0,10) ;
position += 10 ;
// get the duration value
- jack_nframes_t duration = strtoul((get_message_part(position,10,msg).c_str()),0,10) ;
+ nframes_t duration = strtoul((get_message_part(position,10,msg).c_str()),0,10) ;
position += 10 ;
//get the named time axis view we about to add an image to
@@ -1673,7 +1673,7 @@ ImageFrameSocketHandler::handle_imageframe_view_position_update(const char* msg)
this->decompose_imageframe_item_desc(msg, position, track_id, track_id_size, scene_id, scene_id_size, item_id, item_id_size) ;
- jack_nframes_t start_frame = strtoul(get_message_part(position, ardourvis::TIME_VALUE_CHARS, msg).c_str(), 0, 10) ;
+ nframes_t start_frame = strtoul(get_message_part(position, ardourvis::TIME_VALUE_CHARS, msg).c_str(), 0, 10) ;
position += ardourvis::TIME_VALUE_CHARS ;
// get the named time axis
@@ -1725,7 +1725,7 @@ ImageFrameSocketHandler::handle_imageframe_view_duration_update(const char* msg)
this->decompose_imageframe_item_desc(msg, position, track_id, track_id_size, scene_id, scene_id_size, item_id, item_id_size) ;
- jack_nframes_t duration = strtoul(get_message_part(position,ardourvis::TIME_VALUE_CHARS,msg).c_str(),0,10) ;
+ nframes_t duration = strtoul(get_message_part(position,ardourvis::TIME_VALUE_CHARS,msg).c_str(),0,10) ;
position += ardourvis::TIME_VALUE_CHARS ;
// get the named time axis
@@ -1828,7 +1828,7 @@ ImageFrameSocketHandler::handle_imageframe_view_max_duration_update(const char*
this->decompose_imageframe_item_desc(msg, position, track_id, track_id_size, group_id, group_id_size, item_id, item_id_size) ;
- jack_nframes_t max_duration = strtoul(get_message_part(position,ardourvis::TIME_VALUE_CHARS,msg).c_str(),0,10) ;
+ nframes_t max_duration = strtoul(get_message_part(position,ardourvis::TIME_VALUE_CHARS,msg).c_str(),0,10) ;
position += ardourvis::TIME_VALUE_CHARS ;
int errcode ;
@@ -1916,7 +1916,7 @@ ImageFrameSocketHandler::handle_imageframe_view_min_duration_update(const char*
this->decompose_imageframe_item_desc(msg, position, track_id, track_id_size, group_id, group_id_size, item_id, item_id_size) ;
- jack_nframes_t min_duration = strtoul(get_message_part(position,ardourvis::TIME_VALUE_CHARS,msg).c_str(),0,10) ;
+ nframes_t min_duration = strtoul(get_message_part(position,ardourvis::TIME_VALUE_CHARS,msg).c_str(),0,10) ;
position += ardourvis::TIME_VALUE_CHARS ;
int errcode ;
diff --git a/gtk2_ardour/imageframe_socket_handler.h b/gtk2_ardour/imageframe_socket_handler.h
index 5af1824417..4dd8d69650 100644
--- a/gtk2_ardour/imageframe_socket_handler.h
+++ b/gtk2_ardour/imageframe_socket_handler.h
@@ -195,7 +195,7 @@ class ImageFrameSocketHandler : public sigc::trackable
* @param src the identity of the object that initiated the change
* @param item the time axis item whos position has changed
*/
- void send_imageframe_view_position_change(jack_nframes_t pos, void* src, ImageFrameView* item) ;
+ void send_imageframe_view_position_change(nframes_t pos, void* src, ImageFrameView* item) ;
/**
* Send a Image Frame View item duration changed message
@@ -204,7 +204,7 @@ class ImageFrameSocketHandler : public sigc::trackable
* @param src the identity of the object that initiated the change
* @param item the item which has had a duration change
*/
- void send_imageframe_view_duration_change(jack_nframes_t dur, void* src, ImageFrameView* item) ;
+ void send_imageframe_view_duration_change(nframes_t dur, void* src, ImageFrameView* item) ;
/**
* Send a message indicating that an ImageFrameView has been renamed
@@ -234,7 +234,7 @@ class ImageFrameSocketHandler : public sigc::trackable
* @param src the identity of the object that initiated the change
* @param item the time axis item whos position has changed
*/
- void send_marker_view_position_change(jack_nframes_t pos, void* src, MarkerView* item) ;
+ void send_marker_view_position_change(nframes_t pos, void* src, MarkerView* item) ;
/**
* Send a Marker View item duration changed message
@@ -243,7 +243,7 @@ class ImageFrameSocketHandler : public sigc::trackable
* @param src the identity of the object that initiated the change
* @param item the time axis item whos position has changed
*/
- void send_marker_view_duration_change(jack_nframes_t dur, void* src, MarkerView* item) ;
+ void send_marker_view_duration_change(nframes_t dur, void* src, MarkerView* item) ;
/**
* Send a message indicating that a MarkerView has been renamed
diff --git a/gtk2_ardour/imageframe_time_axis_group.cc b/gtk2_ardour/imageframe_time_axis_group.cc
index ab3dd3e350..647d45b963 100644
--- a/gtk2_ardour/imageframe_time_axis_group.cc
+++ b/gtk2_ardour/imageframe_time_axis_group.cc
@@ -195,7 +195,7 @@ ImageFrameTimeAxisGroup::apply_item_color(Gdk::Color& color)
* @param src the identity of the object that initiated the change
*/
ImageFrameView*
-ImageFrameTimeAxisGroup::add_imageframe_item(const string & frame_id, jack_nframes_t start, jack_nframes_t duration, unsigned char* rgb_data, uint32_t width, uint32_t height, uint32_t num_channels, void* src)
+ImageFrameTimeAxisGroup::add_imageframe_item(const string & frame_id, nframes_t start, nframes_t duration, unsigned char* rgb_data, uint32_t width, uint32_t height, uint32_t num_channels, void* src)
{
ImageFrameView* ifv = 0 ;
diff --git a/gtk2_ardour/imageframe_time_axis_group.h b/gtk2_ardour/imageframe_time_axis_group.h
index 1cd62d73f5..4619ae448a 100644
--- a/gtk2_ardour/imageframe_time_axis_group.h
+++ b/gtk2_ardour/imageframe_time_axis_group.h
@@ -139,7 +139,7 @@ class ImageFrameTimeAxisGroup : public sigc::trackable
* @param num_channels the number of channles within the rgb_data
* @param src the identity of the object that initiated the change
*/
- ImageFrameView* add_imageframe_item(const string & item_id, jack_nframes_t start, jack_nframes_t duration, unsigned char* rgb_data, uint32_t width, uint32_t height, uint32_t num_channels, void* src) ;
+ ImageFrameView* add_imageframe_item(const string & item_id, nframes_t start, nframes_t duration, unsigned char* rgb_data, uint32_t width, uint32_t height, uint32_t num_channels, void* src) ;
/**
* Returns the named ImageFrameView or 0 if the named view does not exist on this view helper
diff --git a/gtk2_ardour/imageframe_time_axis_view.cc b/gtk2_ardour/imageframe_time_axis_view.cc
index a725082863..6e896ea5ec 100644
--- a/gtk2_ardour/imageframe_time_axis_view.cc
+++ b/gtk2_ardour/imageframe_time_axis_view.cc
@@ -410,7 +410,7 @@ ImageFrameTimeAxisView::set_imageframe_duration_sec(double sec)
{
if(selected_imageframe_group && selected_imageframe_view)
{
- selected_imageframe_view->set_duration((jack_nframes_t) (sec * _trackview.editor.current_session()->frame_rate()), this) ;
+ selected_imageframe_view->set_duration((nframes_t) (sec * _trackview.editor.current_session()->frame_rate()), this) ;
}
}
diff --git a/gtk2_ardour/imageframe_view.cc b/gtk2_ardour/imageframe_view.cc
index ac17a7cc1a..2c943dcae4 100644
--- a/gtk2_ardour/imageframe_view.cc
+++ b/gtk2_ardour/imageframe_view.cc
@@ -62,8 +62,8 @@ ImageFrameView::ImageFrameView(const string & item_id,
ImageFrameTimeAxisGroup* item_group,
double spu,
Gdk::Color& basic_color,
- jack_nframes_t start,
- jack_nframes_t duration,
+ nframes_t start,
+ nframes_t duration,
unsigned char* rgb_data,
uint32_t width,
uint32_t height,
@@ -172,9 +172,9 @@ delete imageframe;
* @return true if the position change was a success, false otherwise
*/
bool
-ImageFrameView::set_position(jack_nframes_t pos, void* src, double* delta)
+ImageFrameView::set_position(nframes_t pos, void* src, double* delta)
{
- jack_nframes_t old_pos = frame_position ;
+ nframes_t old_pos = frame_position ;
// do the standard stuff
bool ret = TimeAxisViewItem::set_position(pos, src, delta) ;
@@ -186,7 +186,7 @@ ImageFrameView::set_position(jack_nframes_t pos, void* src, double* delta)
{
// calculate the offset of the marker
MarkerView* mv = (MarkerView*)*i ;
- jack_nframes_t marker_old_pos = mv->get_position() ;
+ nframes_t marker_old_pos = mv->get_position() ;
mv->set_position(pos + (marker_old_pos - old_pos), src) ;
}
@@ -203,7 +203,7 @@ ImageFrameView::set_position(jack_nframes_t pos, void* src, double* delta)
* @return true if the duration change was succesful, false otherwise
*/
bool
-ImageFrameView::set_duration(jack_nframes_t dur, void* src)
+ImageFrameView::set_duration(nframes_t dur, void* src)
{
/* do the standard stuff */
bool ret = TimeAxisViewItem::set_duration(dur, src) ;
diff --git a/gtk2_ardour/imageframe_view.h b/gtk2_ardour/imageframe_view.h
index 5ae8aaded6..71d9268fef 100644
--- a/gtk2_ardour/imageframe_view.h
+++ b/gtk2_ardour/imageframe_view.h
@@ -66,8 +66,8 @@ class ImageFrameView : public TimeAxisViewItem
ImageFrameTimeAxisGroup* group,
double spu,
Gdk::Color& base_color,
- jack_nframes_t start,
- jack_nframes_t duration,
+ nframes_t start,
+ nframes_t duration,
unsigned char* rgb_data,
uint32_t width,
uint32_t height,
@@ -91,7 +91,7 @@ class ImageFrameView : public TimeAxisViewItem
* @param src the identity of the object that initiated the change
* @return true if the position change was a success, false otherwise
*/
- virtual bool set_position(jack_nframes_t pos, void* src, double* delta = 0) ;
+ virtual bool set_position(nframes_t pos, void* src, double* delta = 0) ;
/**
* Sets the duration of this item
@@ -100,7 +100,7 @@ class ImageFrameView : public TimeAxisViewItem
* @param src the identity of the object that initiated the change
* @return true if the duration change was succesful, false otherwise
*/
- virtual bool set_duration(jack_nframes_t dur, void* src) ;
+ virtual bool set_duration(nframes_t dur, void* src) ;
//---------------------------------------------------------------------------------------//
// Parent Component Methods
diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc
index 125ed8df5d..96ce92d42d 100644
--- a/gtk2_ardour/location_ui.cc
+++ b/gtk2_ardour/location_ui.cc
@@ -771,7 +771,7 @@ void
LocationUI::add_new_location()
{
if (session) {
- jack_nframes_t where = session->audible_frame();
+ nframes_t where = session->audible_frame();
Location *location = new Location (where, where, "mark", Location::IsMark);
session->begin_reversible_command (_("add marker"));
XMLNode &before = session->locations()->get_state();
@@ -787,7 +787,7 @@ void
LocationUI::add_new_range()
{
if (session) {
- jack_nframes_t where = session->audible_frame();
+ nframes_t where = session->audible_frame();
Location *location = new Location (where, where, "unnamed",
Location::IsRangeMarker);
session->begin_reversible_command (_("add range marker"));
diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc
index 4beb771494..25b6b32166 100644
--- a/gtk2_ardour/main.cc
+++ b/gtk2_ardour/main.cc
@@ -383,13 +383,7 @@ int main (int argc, char *argv[])
cout << _("Ardour/GTK ")
<< VERSIONSTRING
<< _("\n (built using ")
- << gtk_ardour_major_version << '.'
- << gtk_ardour_minor_version << '.'
- << gtk_ardour_micro_version
- << _(" with libardour ")
- << libardour_major_version << '.'
- << libardour_minor_version << '.'
- << libardour_micro_version
+ << ARDOUR::get_ardour_revision ()
#ifdef __GNUC__
<< _(" and GCC version ") << __VERSION__
#endif
@@ -441,6 +435,7 @@ int main (int argc, char *argv[])
try {
ARDOUR::init (*engine, use_vst, try_hw_optimization);
+ Config->set_current_owner (ConfigVariableBase::Interface);
ui->set_engine (*engine);
} catch (failed_constructor& err) {
error << _("could not initialize Ardour.") << endmsg;
diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc
index fb2afb00b4..d5517b4bce 100644
--- a/gtk2_ardour/marker.cc
+++ b/gtk2_ardour/marker.cc
@@ -29,7 +29,7 @@
#include "i18n.h"
Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, const string& annotation,
- Type type, jack_nframes_t frame, bool handle_events)
+ Type type, nframes_t frame, bool handle_events)
: editor (ed), _type(type)
{
@@ -289,7 +289,7 @@ Marker::set_name (const string& name)
}
void
-Marker::set_position (jack_nframes_t frame)
+Marker::set_position (nframes_t frame)
{
double new_unit_position = editor.frame_to_unit (frame);
new_unit_position -= shift;
diff --git a/gtk2_ardour/marker.h b/gtk2_ardour/marker.h
index 13e80ef512..e2e4307782 100644
--- a/gtk2_ardour/marker.h
+++ b/gtk2_ardour/marker.h
@@ -52,13 +52,13 @@ class Marker : public sigc::trackable
Marker (PublicEditor& editor, ArdourCanvas::Group& parent, guint32 rgba, const string& text, Type,
- jack_nframes_t frame = 0, bool handle_events = true);
+ nframes_t frame = 0, bool handle_events = true);
virtual ~Marker ();
ArdourCanvas::Item& the_item() const;
- void set_position (jack_nframes_t);
+ void set_position (nframes_t);
void set_name (const string&);
void set_color_rgba (uint32_t rgba);
@@ -76,7 +76,7 @@ class Marker : public sigc::trackable
ArdourCanvas::Points *points;
double unit_position;
- jack_nframes_t frame_position;
+ nframes_t frame_position;
unsigned char shift; /* should be double, but its always small and integral */
Type _type;
diff --git a/gtk2_ardour/marker_time_axis_view.cc b/gtk2_ardour/marker_time_axis_view.cc
index 53e0aa8758..55d5742e8e 100644
--- a/gtk2_ardour/marker_time_axis_view.cc
+++ b/gtk2_ardour/marker_time_axis_view.cc
@@ -199,7 +199,7 @@ MarkerTimeAxisView::apply_color(Gdk::Color& color)
* @param src the identity of the object that initiated the change
*/
MarkerView*
-MarkerTimeAxisView::add_marker_view(ImageFrameView* ifv, std::string mark_type, std::string mark_id, jack_nframes_t start, jack_nframes_t dur, void* src)
+MarkerTimeAxisView::add_marker_view(ImageFrameView* ifv, std::string mark_type, std::string mark_id, nframes_t start, nframes_t dur, void* src)
{
if(ifv->has_marker_view_item(mark_id))
{
@@ -345,7 +345,7 @@ MarkerTimeAxisView::set_marker_duration_sec(double sec)
{
if(get_selected_time_axis_item() != 0)
{
- get_selected_time_axis_item()->set_duration((jack_nframes_t) (sec * _trackview.editor.current_session()->frame_rate()), this) ;
+ get_selected_time_axis_item()->set_duration((nframes_t) (sec * _trackview.editor.current_session()->frame_rate()), this) ;
}
}
diff --git a/gtk2_ardour/marker_time_axis_view.h b/gtk2_ardour/marker_time_axis_view.h
index 1dd742a459..4853f29855 100644
--- a/gtk2_ardour/marker_time_axis_view.h
+++ b/gtk2_ardour/marker_time_axis_view.h
@@ -131,7 +131,7 @@ class MarkerTimeAxisView : public sigc::trackable
* @param duration the duration the new item should be placed upon the timeline
* @param src the identity of the object that initiated the change
*/
- MarkerView* add_marker_view(ImageFrameView* ifv, std::string mark_type, std::string mark_id, jack_nframes_t start, jack_nframes_t dur, void* src) ;
+ MarkerView* add_marker_view(ImageFrameView* ifv, std::string mark_type, std::string mark_id, nframes_t start, nframes_t dur, void* src) ;
/**
* Returns the named MarkerView or 0 if the named marker does not exist
diff --git a/gtk2_ardour/marker_view.cc b/gtk2_ardour/marker_view.cc
index d73440ad54..f45a3ce971 100644
--- a/gtk2_ardour/marker_view.cc
+++ b/gtk2_ardour/marker_view.cc
@@ -54,8 +54,8 @@ MarkerView::MarkerView(ArdourCanvas::Group *parent,
Gdk::Color& basic_color,
std::string mark_type,
std::string mark_id,
- jack_nframes_t start,
- jack_nframes_t duration)
+ nframes_t start,
+ nframes_t duration)
: TimeAxisViewItem(mark_id, *parent,*tv,spu,basic_color,start,duration)
{
mark_type_text = mark_type ;
diff --git a/gtk2_ardour/marker_view.h b/gtk2_ardour/marker_view.h
index da45b33dd9..04b8587649 100644
--- a/gtk2_ardour/marker_view.h
+++ b/gtk2_ardour/marker_view.h
@@ -65,8 +65,8 @@ class MarkerView : public TimeAxisViewItem
Gdk::Color& base_color,
std::string mark_type,
std::string mark_id,
- jack_nframes_t start,
- jack_nframes_t duration) ;
+ nframes_t start,
+ nframes_t duration) ;
/**
* Destructor
diff --git a/gtk2_ardour/meter_bridge_strip.cc b/gtk2_ardour/meter_bridge_strip.cc
index ea3b609720..8a91603748 100644
--- a/gtk2_ardour/meter_bridge_strip.cc
+++ b/gtk2_ardour/meter_bridge_strip.cc
@@ -48,9 +48,9 @@ MeterBridgeStrip::MeterBridgeStrip (AudioEngine &eng,
Session& s,
Route& r,
string name,
- jack_nframes_t long_over,
- jack_nframes_t short_over,
- jack_nframes_t meter_hold)
+ nframes_t long_over,
+ nframes_t short_over,
+ nframes_t meter_hold)
: engine (eng),
session (s),
_route (r),
diff --git a/gtk2_ardour/meter_bridge_strip.h b/gtk2_ardour/meter_bridge_strip.h
index 62a3d61072..bdce16f17c 100644
--- a/gtk2_ardour/meter_bridge_strip.h
+++ b/gtk2_ardour/meter_bridge_strip.h
@@ -50,9 +50,9 @@ class MeterBridgeStrip : public sigc::trackable
ARDOUR::Session&,
ARDOUR::Route&,
string label,
- jack_nframes_t long_over,
- jack_nframes_t short_over,
- jack_nframes_t meter_hold);
+ nframes_t long_over,
+ nframes_t short_over,
+ nframes_t meter_hold);
void update (); /* called by meter timeout handler from ARDOUR_UI */
diff --git a/gtk2_ardour/new_session_dialog.cc b/gtk2_ardour/new_session_dialog.cc
index 4a533137a6..9a8bcecc42 100644
--- a/gtk2_ardour/new_session_dialog.cc
+++ b/gtk2_ardour/new_session_dialog.cc
@@ -36,17 +36,41 @@
#include "opts.h"
NewSessionDialog::NewSessionDialog()
- : ArdourDialog ("New Session Dialog")
+ : ArdourDialog ("session control")
{
- session_name_label = Gtk::manage(new class Gtk::Label(_("New Session Name :")));
+ session_name_label = Gtk::manage(new class Gtk::Label(_("Name :")));
m_name = Gtk::manage(new class Gtk::Entry());
m_name->set_text(GTK_ARDOUR::session_name);
- session_location_label = Gtk::manage(new class Gtk::Label(_("Create Session Directory In :")));
+ chan_count_label_1 = Gtk::manage(new class Gtk::Label(_("channels")));
+ chan_count_label_2 = Gtk::manage(new class Gtk::Label(_("channels")));
+ chan_count_label_3 = Gtk::manage(new class Gtk::Label(_("channels")));
+ chan_count_label_4 = Gtk::manage(new class Gtk::Label(_("channels")));
+
+ chan_count_label_1->set_alignment(0,0.5);
+ chan_count_label_1->set_padding(0,0);
+ chan_count_label_1->set_line_wrap(false);
+
+ chan_count_label_2->set_alignment(0,0.5);
+ chan_count_label_2->set_padding(0,0);
+ chan_count_label_2->set_line_wrap(false);
+
+ chan_count_label_3->set_alignment(0,0.5);
+ chan_count_label_3->set_padding(0,0);
+ chan_count_label_3->set_line_wrap(false);
+
+ chan_count_label_4->set_alignment(0,0.5);
+ chan_count_label_4->set_padding(0,0);
+ chan_count_label_4->set_line_wrap(false);
+
+ bus_label = Gtk::manage(new class Gtk::Label(_("<b>Busses</b>")));
+ input_label = Gtk::manage(new class Gtk::Label(_("<b>Inputs</b>")));
+ output_label = Gtk::manage(new class Gtk::Label(_("<b>Outputs</b>")));
+
+ session_location_label = Gtk::manage(new class Gtk::Label(_("Create Folder In :")));
m_folder = Gtk::manage(new class Gtk::FileChooserButton(Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER));
- session_template_label = Gtk::manage(new class Gtk::Label(_("Use Session Template :")));
+ session_template_label = Gtk::manage(new class Gtk::Label(_("Template :")));
m_template = Gtk::manage(new class Gtk::FileChooserButton());
- chan_count_label = Gtk::manage(new class Gtk::Label(_("Channel Count")));
m_create_control_bus = Gtk::manage(new class Gtk::CheckButton(_("Create Monitor Bus")));
Gtk::Adjustment *m_control_bus_channel_count_adj = Gtk::manage(new class Gtk::Adjustment(2, 0, 100, 1, 10, 10));
@@ -56,8 +80,8 @@ NewSessionDialog::NewSessionDialog()
m_master_bus_channel_count = Gtk::manage(new class Gtk::SpinButton(*m_master_bus_channel_count_adj, 1, 0));
m_create_master_bus = Gtk::manage(new class Gtk::CheckButton(_("Create Master Bus")));
advanced_table = Gtk::manage(new class Gtk::Table(2, 2, true));
- m_connect_inputs = Gtk::manage(new class Gtk::CheckButton(_("Automatically Connect Inputs")));
- m_limit_input_ports = Gtk::manage(new class Gtk::CheckButton(_("Port Limit")));
+ m_connect_inputs = Gtk::manage(new class Gtk::CheckButton(_("Automatically Connect to Physical Inputs")));
+ m_limit_input_ports = Gtk::manage(new class Gtk::CheckButton(_("Use only")));
Gtk::Adjustment *m_input_limit_count_adj = Gtk::manage(new class Gtk::Adjustment(1, 0, 100, 1, 10, 10));
m_input_limit_count = Gtk::manage(new class Gtk::SpinButton(*m_input_limit_count_adj, 1, 0));
@@ -65,10 +89,12 @@ NewSessionDialog::NewSessionDialog()
input_port_vbox = Gtk::manage(new class Gtk::VBox(false, 0));
input_table = Gtk::manage(new class Gtk::Table(2, 2, false));
- input_label = Gtk::manage(new class Gtk::Label(_("<b>Track/Bus Inputs</b>")));
+ bus_frame = Gtk::manage(new class Gtk::Frame());
+ bus_table = Gtk::manage (new Gtk::Table (2, 3, false));
+
input_frame = Gtk::manage(new class Gtk::Frame());
m_connect_outputs = Gtk::manage(new class Gtk::CheckButton(_("Automatically Connect Outputs")));
- m_limit_output_ports = Gtk::manage(new class Gtk::CheckButton(_("Port Limit")));
+ m_limit_output_ports = Gtk::manage(new class Gtk::CheckButton(_("Use only")));
Gtk::Adjustment *m_output_limit_count_adj = Gtk::manage(new class Gtk::Adjustment(1, 0, 100, 1, 10, 10));
m_output_limit_count = Gtk::manage(new class Gtk::SpinButton(*m_output_limit_count_adj, 1, 0));
@@ -76,12 +102,11 @@ NewSessionDialog::NewSessionDialog()
output_port_vbox = Gtk::manage(new class Gtk::VBox(false, 0));
Gtk::RadioButton::Group _RadioBGroup_m_connect_outputs_to_master;
- m_connect_outputs_to_master = Gtk::manage(new class Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("Connect to Master Bus")));
- m_connect_outputs_to_physical = Gtk::manage(new class Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("Connect to Physical Outputs")));
+ m_connect_outputs_to_master = Gtk::manage(new class Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("... to Master Bus")));
+ m_connect_outputs_to_physical = Gtk::manage(new class Gtk::RadioButton(_RadioBGroup_m_connect_outputs_to_master, _("... to Physical Outputs")));
output_conn_vbox = Gtk::manage(new class Gtk::VBox(false, 0));
output_vbox = Gtk::manage(new class Gtk::VBox(false, 0));
- output_label = Gtk::manage(new class Gtk::Label(_("<b>Track/Bus Outputs</b>")));
output_frame = Gtk::manage(new class Gtk::Frame());
advanced_vbox = Gtk::manage(new class Gtk::VBox(false, 0));
advanced_label = Gtk::manage(new class Gtk::Label(_("Advanced Options")));
@@ -92,24 +117,25 @@ NewSessionDialog::NewSessionDialog()
m_treeview = Gtk::manage(new class Gtk::TreeView());
recent_scrolledwindow = Gtk::manage(new class Gtk::ScrolledWindow());
- recent_sesion_label = Gtk::manage(new class Gtk::Label(_("Open Recent Session")));
+ recent_sesion_label = Gtk::manage(new class Gtk::Label(_("Recent:")));
recent_frame = Gtk::manage(new class Gtk::Frame());
open_session_vbox = Gtk::manage(new class Gtk::VBox(false, 0));
m_notebook = Gtk::manage(new class Gtk::Notebook());
session_name_label->set_alignment(0, 0.5);
- session_name_label->set_padding(0,0);
+ session_name_label->set_padding(6,0);
session_name_label->set_line_wrap(false);
session_name_label->set_selectable(false);
m_name->set_editable(true);
m_name->set_max_length(0);
m_name->set_has_frame(true);
m_name->set_activates_default(true);
+ m_name->set_width_chars (40);
session_location_label->set_alignment(0,0.5);
- session_location_label->set_padding(0,0);
+ session_location_label->set_padding(6,0);
session_location_label->set_line_wrap(false);
session_location_label->set_selectable(false);
session_template_label->set_alignment(0,0.5);
- session_template_label->set_padding(0,0);
+ session_template_label->set_padding(6,0);
session_template_label->set_line_wrap(false);
session_template_label->set_selectable(false);
m_create_control_bus->set_flags(Gtk::CAN_FOCUS);
@@ -128,7 +154,7 @@ NewSessionDialog::NewSessionDialog()
m_master_bus_channel_count->set_numeric(true);
m_master_bus_channel_count->set_digits(0);
m_master_bus_channel_count->set_wrap(false);
- open_session_file_label = Gtk::manage(new class Gtk::Label(_("Open Session File :")));
+ open_session_file_label = Gtk::manage(new class Gtk::Label(_("Browse:")));
open_session_file_label->set_alignment(0, 0.5);
m_create_master_bus->set_flags(Gtk::CAN_FOCUS);
m_create_master_bus->set_relief(Gtk::RELIEF_NORMAL);
@@ -137,11 +163,6 @@ NewSessionDialog::NewSessionDialog()
m_create_master_bus->set_border_width(0);
advanced_table->set_row_spacings(0);
advanced_table->set_col_spacings(0);
- advanced_table->attach(*chan_count_label, 1, 2, 0, 1, Gtk::AttachOptions(), Gtk::AttachOptions(), 0, 0);
- advanced_table->attach(*m_create_control_bus, 0, 1, 2, 3, Gtk::FILL, Gtk::AttachOptions(), 0, 0);
- advanced_table->attach(*m_control_bus_channel_count, 1, 2, 2, 3, Gtk::AttachOptions(), Gtk::AttachOptions(), 0, 0);
- advanced_table->attach(*m_master_bus_channel_count, 1, 2, 1, 2, Gtk::AttachOptions(), Gtk::AttachOptions(), 0, 0);
- advanced_table->attach(*m_create_master_bus, 0, 1, 1, 2, Gtk::FILL, Gtk::AttachOptions(), 0, 0);
m_connect_inputs->set_flags(Gtk::CAN_FOCUS);
m_connect_inputs->set_relief(Gtk::RELIEF_NORMAL);
@@ -161,14 +182,40 @@ NewSessionDialog::NewSessionDialog()
m_input_limit_count->set_wrap(false);
m_input_limit_count->set_sensitive(false);
+ bus_hbox = Gtk::manage (new Gtk::HBox (false, 0));
+ bus_hbox->pack_start (*bus_table, Gtk::PACK_SHRINK, 18);
+
+ bus_label->set_alignment(0, 0.5);
+ bus_label->set_padding(0,0);
+ bus_label->set_line_wrap(false);
+ bus_label->set_selectable(false);
+ bus_label->set_use_markup(true);
+ bus_frame->set_shadow_type(Gtk::SHADOW_NONE);
+ bus_frame->set_label_align(0,0.5);
+ bus_frame->add(*bus_hbox);
+ bus_frame->set_label_widget(*bus_label);
+
+ bus_table->set_row_spacings (0);
+ bus_table->set_col_spacings (0);
+ bus_table->attach (*m_create_master_bus, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+ bus_table->attach (*m_master_bus_channel_count, 1, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+ bus_table->attach (*chan_count_label_1, 2, 3, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 0);
+ bus_table->attach (*m_create_control_bus, 0, 1, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+ bus_table->attach (*m_control_bus_channel_count, 1, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+ bus_table->attach (*chan_count_label_2, 2, 3, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 0);
+
input_port_limit_hbox->pack_start(*m_limit_input_ports, Gtk::PACK_SHRINK, 6);
- input_port_limit_hbox->pack_start(*m_input_limit_count, Gtk::PACK_EXPAND_PADDING, 0);
+ input_port_limit_hbox->pack_start(*m_input_limit_count, Gtk::PACK_SHRINK, 0);
+ input_port_limit_hbox->pack_start(*chan_count_label_3, Gtk::PACK_SHRINK, 6);
input_port_vbox->pack_start(*m_connect_inputs, Gtk::PACK_SHRINK, 0);
input_port_vbox->pack_start(*input_port_limit_hbox, Gtk::PACK_EXPAND_PADDING, 0);
input_table->set_row_spacings(0);
input_table->set_col_spacings(0);
input_table->attach(*input_port_vbox, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 6);
+ input_hbox = Gtk::manage (new Gtk::HBox (false, 0));
+ input_hbox->pack_start (*input_table, Gtk::PACK_SHRINK, 18);
+
input_label->set_alignment(0, 0.5);
input_label->set_padding(0,0);
input_label->set_line_wrap(false);
@@ -176,8 +223,9 @@ NewSessionDialog::NewSessionDialog()
input_label->set_use_markup(true);
input_frame->set_shadow_type(Gtk::SHADOW_NONE);
input_frame->set_label_align(0,0.5);
- input_frame->add(*input_table);
+ input_frame->add(*input_hbox);
input_frame->set_label_widget(*input_label);
+
m_connect_outputs->set_flags(Gtk::CAN_FOCUS);
m_connect_outputs->set_relief(Gtk::RELIEF_NORMAL);
m_connect_outputs->set_mode(true);
@@ -195,9 +243,8 @@ NewSessionDialog::NewSessionDialog()
m_output_limit_count->set_wrap(false);
m_output_limit_count->set_sensitive(false);
output_port_limit_hbox->pack_start(*m_limit_output_ports, Gtk::PACK_SHRINK, 6);
- output_port_limit_hbox->pack_start(*m_output_limit_count, Gtk::PACK_EXPAND_PADDING, 0);
- output_port_vbox->pack_start(*m_connect_outputs, Gtk::PACK_SHRINK, 0);
- output_port_vbox->pack_start(*output_port_limit_hbox, Gtk::PACK_EXPAND_PADDING, 0);
+ output_port_limit_hbox->pack_start(*m_output_limit_count, Gtk::PACK_SHRINK, 0);
+ output_port_limit_hbox->pack_start(*chan_count_label_4, Gtk::PACK_SHRINK, 6);
m_connect_outputs_to_master->set_flags(Gtk::CAN_FOCUS);
m_connect_outputs_to_master->set_relief(Gtk::RELIEF_NORMAL);
m_connect_outputs_to_master->set_mode(true);
@@ -208,11 +255,15 @@ NewSessionDialog::NewSessionDialog()
m_connect_outputs_to_physical->set_mode(true);
m_connect_outputs_to_physical->set_active(false);
m_connect_outputs_to_physical->set_border_width(0);
+ output_conn_vbox->pack_start(*m_connect_outputs, Gtk::PACK_SHRINK, 0);
output_conn_vbox->pack_start(*m_connect_outputs_to_master, Gtk::PACK_SHRINK, 0);
output_conn_vbox->pack_start(*m_connect_outputs_to_physical, Gtk::PACK_SHRINK, 0);
output_vbox->set_border_width(6);
- output_vbox->pack_start(*output_port_vbox);
+
+ output_port_vbox->pack_start(*output_port_limit_hbox, Gtk::PACK_SHRINK, 0);
+
output_vbox->pack_start(*output_conn_vbox);
+ output_vbox->pack_start(*output_port_vbox);
output_label->set_alignment(0, 0.5);
output_label->set_padding(0,0);
@@ -221,10 +272,16 @@ NewSessionDialog::NewSessionDialog()
output_label->set_use_markup(true);
output_frame->set_shadow_type(Gtk::SHADOW_NONE);
output_frame->set_label_align(0,0.5);
- output_frame->add(*output_vbox);
+
+ output_hbox = Gtk::manage (new Gtk::HBox (false, 0));
+ output_hbox->pack_start (*output_vbox, Gtk::PACK_SHRINK, 18);
+
+ output_frame->add(*output_hbox);
output_frame->set_label_widget(*output_label);
+
advanced_vbox->pack_start(*advanced_table, Gtk::PACK_SHRINK, 0);
- advanced_vbox->pack_start(*input_frame, Gtk::PACK_SHRINK, 12);
+ advanced_vbox->pack_start(*bus_frame, Gtk::PACK_SHRINK, 6);
+ advanced_vbox->pack_start(*input_frame, Gtk::PACK_SHRINK, 6);
advanced_vbox->pack_start(*output_frame, Gtk::PACK_SHRINK, 0);
advanced_label->set_padding(0,0);
advanced_label->set_line_wrap(false);
@@ -237,7 +294,7 @@ NewSessionDialog::NewSessionDialog()
advanced_expander->add(*advanced_vbox);
advanced_expander->set_label_widget(*advanced_label);
new_session_table->set_border_width(12);
- new_session_table->set_row_spacings(0);
+ new_session_table->set_row_spacings(6);
new_session_table->set_col_spacings(0);
new_session_table->attach(*session_name_label, 0, 1, 0, 1, Gtk::FILL, Gtk::FILL, 0, 0);
new_session_table->attach(*m_name, 1, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::FILL, 0, 0);
@@ -245,11 +302,9 @@ NewSessionDialog::NewSessionDialog()
new_session_table->attach(*m_folder, 1, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::FILL, 0, 0);
new_session_table->attach(*session_template_label, 0, 1, 2, 3, Gtk::FILL, Gtk::FILL, 0, 0);
new_session_table->attach(*m_template, 1, 2, 2, 3, Gtk::EXPAND|Gtk::FILL, Gtk::FILL, 0, 0);
- new_session_table->attach(*advanced_expander, 0, 2, 3, 4, Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 12);
- chan_count_label->set_padding(0,0);
- chan_count_label->set_line_wrap(false);
- chan_count_label->set_selectable(false);
- open_session_hbox->pack_start(*open_session_file_label, true, true, 12);
+ new_session_table->attach(*advanced_expander, 0, 2, 3, 4, Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 6);
+
+ open_session_hbox->pack_start(*open_session_file_label, false, false, 12);
open_session_hbox->pack_start(*m_open_filechooser, true, true, 12);
m_treeview->set_flags(Gtk::CAN_FOCUS);
m_treeview->set_headers_visible(true);
@@ -271,11 +326,11 @@ NewSessionDialog::NewSessionDialog()
recent_sesion_label->set_line_wrap(false);
recent_sesion_label->set_selectable(false);
recent_frame->set_border_width(12);
- recent_frame->set_shadow_type(Gtk::SHADOW_IN);
+ recent_frame->set_shadow_type(Gtk::SHADOW_NONE);
recent_frame->add(*recent_scrolledwindow);
recent_frame->set_label_widget(*recent_sesion_label);
- open_session_vbox->pack_start(*open_session_hbox, Gtk::PACK_SHRINK, 12);
open_session_vbox->pack_start(*recent_frame, Gtk::PACK_EXPAND_WIDGET, 0);
+ open_session_vbox->pack_start(*open_session_hbox, Gtk::PACK_SHRINK, 12);
m_notebook->set_flags(Gtk::CAN_FOCUS);
m_notebook->set_scrollable(true);
m_notebook->append_page(*new_session_table, _("New Session"));
diff --git a/gtk2_ardour/new_session_dialog.h b/gtk2_ardour/new_session_dialog.h
index b175c1b79d..e0f488dc80 100644
--- a/gtk2_ardour/new_session_dialog.h
+++ b/gtk2_ardour/new_session_dialog.h
@@ -96,11 +96,20 @@ protected:
Gtk::Label * session_name_label;
Gtk::Label * session_location_label;
Gtk::Label * session_template_label;
- Gtk::Label * chan_count_label;
+ Gtk::Label * chan_count_label_1;
+ Gtk::Label * chan_count_label_2;
+ Gtk::Label * chan_count_label_3;
+ Gtk::Label * chan_count_label_4;
Gtk::Table * advanced_table;
Gtk::HBox * input_port_limit_hbox;
Gtk::VBox * input_port_vbox;
Gtk::Table * input_table;
+ Gtk::HBox * input_hbox;
+
+ Gtk::Label * bus_label;
+ Gtk::Frame * bus_frame;
+ Gtk::Table * bus_table;
+ Gtk::HBox * bus_hbox;
Gtk::Label * input_label;
Gtk::Frame * input_frame;
@@ -108,6 +117,7 @@ protected:
Gtk::VBox * output_port_vbox;
Gtk::VBox * output_conn_vbox;
Gtk::VBox * output_vbox;
+ Gtk::HBox * output_hbox;
Gtk::Label * output_label;
Gtk::Frame * output_frame;
diff --git a/gtk2_ardour/option_editor.cc b/gtk2_ardour/option_editor.cc
index 013761a86a..b75ef7ead8 100644
--- a/gtk2_ardour/option_editor.cc
+++ b/gtk2_ardour/option_editor.cc
@@ -248,16 +248,16 @@ OptionEditor::add_session_paths ()
click_emphasis_path_entry.set_sensitive (true);
session_raid_entry.set_sensitive (true);
- if (session->click_sound.length() == 0) {
+ if (Config->get_click_sound().empty()) {
click_path_entry.set_text (_("internal"));
} else {
- click_path_entry.set_text (session->click_sound);
+ click_path_entry.set_text (Config->get_click_sound());
}
- if (session->click_emphasis_sound.length() == 0) {
+ if (Config->get_click_emphasis_sound().empty()) {
click_emphasis_path_entry.set_text (_("internal"));
} else {
- click_emphasis_path_entry.set_text (session->click_emphasis_sound);
+ click_emphasis_path_entry.set_text (Config->get_click_emphasis_sound());
}
session_raid_entry.set_text(session->raid_path());
@@ -308,7 +308,7 @@ OptionEditor::short_xfade_adjustment_changed ()
/* val is in msecs */
- Crossfade::set_short_xfade_length ((jack_nframes_t) floor (session->frame_rate() * (val / 1000.0)));
+ Crossfade::set_short_xfade_length ((nframes_t) floor (session->frame_rate() * (val / 1000.0)));
}
}
@@ -366,7 +366,7 @@ void
OptionEditor::smpte_offset_chosen()
{
if (session) {
- jack_nframes_t frames = smpte_offset_clock.current_duration();
+ nframes_t frames = smpte_offset_clock.current_duration();
session->set_smpte_offset (frames);
}
}
@@ -607,7 +607,7 @@ void
OptionEditor::raid_path_changed ()
{
if (session) {
- session->set_raid_path (session_raid_entry.get_text());
+ Config->set_raid_path (session_raid_entry.get_text());
}
}
@@ -655,22 +655,22 @@ OptionEditor::click_sound_changed ()
if (session) {
string path = click_path_entry.get_text();
- if (path == session->click_sound) {
+ if (path == Config->get_click_sound()) {
return;
}
- if (path.length() == 0) {
+ if (path.empty()) {
- session->set_click_sound ("");
+ Config->set_click_sound ("");
} else {
strip_whitespace_edges (path);
if (path == _("internal")) {
- session->set_click_sound ("");
+ Config->set_click_sound ("");
} else {
- session->set_click_sound (path);
+ Config->set_click_sound (path);
}
}
}
@@ -682,22 +682,22 @@ OptionEditor::click_emphasis_sound_changed ()
if (session) {
string path = click_emphasis_path_entry.get_text();
- if (path == session->click_emphasis_sound) {
+ if (path == Config->get_click_emphasis_sound()) {
return;
}
- if (path.length() == 0) {
+ if (path.empty()) {
- session->set_click_emphasis_sound ("");
+ Config->set_click_emphasis_sound ("");
} else {
strip_whitespace_edges (path);
if (path == _("internal")) {
- session->set_click_emphasis_sound ("");
+ Config->set_click_emphasis_sound ("");
} else {
- session->set_click_emphasis_sound (path);
+ Config->set_click_emphasis_sound (path);
}
}
}
diff --git a/gtk2_ardour/pan_automation_time_axis.cc b/gtk2_ardour/pan_automation_time_axis.cc
index bbd4b3b06c..c484673c99 100644
--- a/gtk2_ardour/pan_automation_time_axis.cc
+++ b/gtk2_ardour/pan_automation_time_axis.cc
@@ -52,7 +52,7 @@ PanAutomationTimeAxisView::~PanAutomationTimeAxisView ()
}
void
-PanAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item, GdkEvent* event, jack_nframes_t when, double y)
+PanAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item, GdkEvent* event, nframes_t when, double y)
{
if (lines.empty()) {
/* no data, possibly caused by no outputs/inputs */
diff --git a/gtk2_ardour/pan_automation_time_axis.h b/gtk2_ardour/pan_automation_time_axis.h
index ca4a4db8e7..0474677da8 100644
--- a/gtk2_ardour/pan_automation_time_axis.h
+++ b/gtk2_ardour/pan_automation_time_axis.h
@@ -22,7 +22,7 @@ class PanAutomationTimeAxisView : public AutomationTimeAxisView
~PanAutomationTimeAxisView();
- void add_automation_event (ArdourCanvas::Item *item, GdkEvent *event, jack_nframes_t, double);
+ void add_automation_event (ArdourCanvas::Item *item, GdkEvent *event, nframes_t, double);
void clear_lines ();
void add_line (AutomationLine&);
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index a37e33bede..716f0b86d0 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -87,11 +87,11 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible {
virtual void separate_region_from_selection () = 0;
virtual void toggle_playback (bool with_abort) = 0;
virtual void set_edit_menu (Gtk::Menu&) = 0;
- virtual jack_nframes_t unit_to_frame (double unit) = 0;
- virtual double frame_to_unit (jack_nframes_t frame) = 0;
+ virtual nframes_t unit_to_frame (double unit) = 0;
+ virtual double frame_to_unit (nframes_t frame) = 0;
virtual double frame_to_unit (double frame) = 0;
- virtual jack_nframes_t pixel_to_frame (double pixel) = 0;
- virtual gulong frame_to_pixel (jack_nframes_t frame) = 0;
+ virtual nframes_t pixel_to_frame (double pixel) = 0;
+ virtual gulong frame_to_pixel (nframes_t frame) = 0;
virtual Selection& get_selection() const = 0;
virtual Selection& get_cut_buffer() const = 0;
virtual void play_selection () = 0;
@@ -119,14 +119,14 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible {
virtual void ensure_float (Gtk::Window&) = 0;
virtual void show_window () = 0;
virtual TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0) = 0;
- virtual jack_nframes_t leftmost_position() const = 0;
- virtual jack_nframes_t current_page_frames() const = 0;
+ virtual nframes_t leftmost_position() const = 0;
+ virtual nframes_t current_page_frames() const = 0;
virtual void temporal_zoom_step (bool coarser) = 0;
virtual void scroll_tracks_down_line () = 0;
virtual void scroll_tracks_up_line () = 0;
virtual bool new_regionviews_display_gain () = 0;
virtual void prepare_for_cleanup () = 0;
- virtual void reposition_x_origin (jack_nframes_t frame) = 0;
+ virtual void reposition_x_origin (nframes_t frame) = 0;
virtual void remove_last_capture () = 0;
virtual void maximise_editing_space() = 0;
virtual void restore_editing_space() = 0;
diff --git a/gtk2_ardour/redirect_automation_time_axis.cc b/gtk2_ardour/redirect_automation_time_axis.cc
index f1e8eae9eb..529c0b565d 100644
--- a/gtk2_ardour/redirect_automation_time_axis.cc
+++ b/gtk2_ardour/redirect_automation_time_axis.cc
@@ -74,7 +74,7 @@ RedirectAutomationTimeAxisView::~RedirectAutomationTimeAxisView ()
}
void
-RedirectAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item, GdkEvent* event, jack_nframes_t when, double y)
+RedirectAutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* item, GdkEvent* event, nframes_t when, double y)
{
double x = 0;
diff --git a/gtk2_ardour/redirect_automation_time_axis.h b/gtk2_ardour/redirect_automation_time_axis.h
index 6976dc2358..9c5670b8da 100644
--- a/gtk2_ardour/redirect_automation_time_axis.h
+++ b/gtk2_ardour/redirect_automation_time_axis.h
@@ -25,7 +25,7 @@ class RedirectAutomationTimeAxisView : public AutomationTimeAxisView
~RedirectAutomationTimeAxisView();
- void add_automation_event (ArdourCanvas::Item *item, GdkEvent *event, jack_nframes_t, double);
+ void add_automation_event (ArdourCanvas::Item *item, GdkEvent *event, nframes_t, double);
guint32 show_at (double y, int& nth, Gtk::VBox *parent);
void hide ();
diff --git a/gtk2_ardour/redirect_box.cc b/gtk2_ardour/redirect_box.cc
index a7b7096829..35b96a410f 100644
--- a/gtk2_ardour/redirect_box.cc
+++ b/gtk2_ardour/redirect_box.cc
@@ -156,9 +156,9 @@ RedirectBox::~RedirectBox ()
}
void
-RedirectBox::object_drop (string type, uint32_t cnt, void** ptr)
+RedirectBox::object_drop (string type, uint32_t cnt, const boost::shared_ptr<Redirect>* ptr)
{
- if (type != "redirects" || cnt == 0 || ptr == 0) {
+ if (type != "redirects" || cnt == 0 || !ptr) {
return;
}
@@ -167,7 +167,7 @@ RedirectBox::object_drop (string type, uint32_t cnt, void** ptr)
list<boost::shared_ptr<Redirect> > redirects;
for (uint32_t n = 0; n < cnt; ++n) {
- redirects.push_back (boost::shared_ptr<Redirect> ((Redirect*) ptr[n]));
+ redirects.push_back (ptr[n]);
}
paste_redirect_list (redirects);
diff --git a/gtk2_ardour/redirect_box.h b/gtk2_ardour/redirect_box.h
index 51c17cad51..ead3b0dfb8 100644
--- a/gtk2_ardour/redirect_box.h
+++ b/gtk2_ardour/redirect_box.h
@@ -119,10 +119,10 @@ class RedirectBox : public Gtk::HBox
Gtk::EventBox redirect_eventbox;
Gtk::HBox redirect_hpacker;
- Gtkmm2ext::DnDTreeView redirect_display;
+ Gtkmm2ext::DnDTreeView<boost::shared_ptr<ARDOUR::Redirect> > redirect_display;
Gtk::ScrolledWindow redirect_scroller;
- void object_drop (std::string type, uint32_t cnt, void**);
+ void object_drop (std::string type, uint32_t cnt, const boost::shared_ptr<ARDOUR::Redirect>*);
Width _width;
diff --git a/gtk2_ardour/region_selection.cc b/gtk2_ardour/region_selection.cc
index 7f7148d2b1..d887021a42 100644
--- a/gtk2_ardour/region_selection.cc
+++ b/gtk2_ardour/region_selection.cc
@@ -148,7 +148,7 @@ RegionSelection::remove (RegionView* rv)
/* reset current start */
- jack_nframes_t ref = max_frames;
+ nframes_t ref = max_frames;
for (i = begin (); i != end(); ++i) {
if (region->first_frame() < ref) {
@@ -164,7 +164,7 @@ RegionSelection::remove (RegionView* rv)
/* reset current end */
- jack_nframes_t ref = 0;
+ nframes_t ref = 0;
for (i = begin (); i != end(); ++i) {
if (region->first_frame() > ref) {
diff --git a/gtk2_ardour/region_selection.h b/gtk2_ardour/region_selection.h
index 2192442cb0..7e1d3b0835 100644
--- a/gtk2_ardour/region_selection.h
+++ b/gtk2_ardour/region_selection.h
@@ -47,13 +47,13 @@ class RegionSelection : public set<RegionView*, RegionComparator>, public sigc::
void clear_all();
- jack_nframes_t start () const {
+ nframes_t start () const {
return _current_start;
}
/* collides with list<>::end */
- jack_nframes_t end_frame () const {
+ nframes_t end_frame () const {
return _current_end;
}
@@ -65,8 +65,8 @@ class RegionSelection : public set<RegionView*, RegionComparator>, public sigc::
void add_to_layer (RegionView *);
- jack_nframes_t _current_start;
- jack_nframes_t _current_end;
+ nframes_t _current_start;
+ nframes_t _current_end;
list<RegionView *> _bylayer;
};
diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc
index 702c328ecd..3fe7563602 100644
--- a/gtk2_ardour/region_view.cc
+++ b/gtk2_ardour/region_view.cc
@@ -133,11 +133,6 @@ RegionView::init (Gdk::Color& basic_color, bool wfd)
set_height (trackview.height);
- region_muted ();
- region_sync_changed ();
- region_resized (BoundsChanged);
- region_locked ();
-
_region->StateChanged.connect (mem_fun(*this, &RegionView::region_changed));
group->signal_event().connect (bind (mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_event), group, this));
@@ -236,8 +231,6 @@ RegionView::region_resized (Change what_changed)
unit_length = _region->length() / samples_per_unit;
- reset_width_dependent_items (unit_length);
-
for (vector<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
(*i)->set_duration (unit_length);
@@ -307,7 +300,7 @@ RegionView::lower_to_bottom ()
}
bool
-RegionView::set_position (jack_nframes_t pos, void* src, double* ignored)
+RegionView::set_position (nframes_t pos, void* src, double* ignored)
{
double delta;
bool ret;
@@ -343,7 +336,7 @@ RegionView::set_samples_per_unit (gdouble spu)
}
bool
-RegionView::set_duration (jack_nframes_t frames, void *src)
+RegionView::set_duration (nframes_t frames, void *src)
{
if (!TimeAxisViewItem::set_duration (frames, src)) {
return false;
@@ -424,7 +417,7 @@ RegionView::region_sync_changed ()
}
int sync_dir;
- jack_nframes_t sync_offset;
+ nframes_t sync_offset;
sync_offset = _region->sync_offset (sync_dir);
diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h
index c7d113d17d..435e878bc8 100644
--- a/gtk2_ardour/region_view.h
+++ b/gtk2_ardour/region_view.h
@@ -58,7 +58,7 @@ class RegionView : public TimeAxisViewItem
virtual void set_height (double);
virtual void set_samples_per_unit (double);
- virtual bool set_duration (jack_nframes_t, void*);
+ virtual bool set_duration (nframes_t, void*);
void move (double xdelta, double ydelta);
@@ -67,7 +67,7 @@ class RegionView : public TimeAxisViewItem
void lower ();
void lower_to_bottom ();
- bool set_position(jack_nframes_t pos, void* src, double* delta = 0);
+ bool set_position(nframes_t pos, void* src, double* delta = 0);
virtual void show_region_editor () = 0;
virtual void hide_region_editor();
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index 470a6d0b88..e0d976c233 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -469,7 +469,7 @@ RouteTimeAxisView::build_display_menu ()
void
-RouteTimeAxisView::show_timestretch (jack_nframes_t start, jack_nframes_t end)
+RouteTimeAxisView::show_timestretch (nframes_t start, nframes_t end)
{
double x1;
double x2;
@@ -902,7 +902,7 @@ RouteTimeAxisView::set_selected_regionviews (RegionSelection& regions)
}
void
-RouteTimeAxisView::get_selectables (jack_nframes_t start, jack_nframes_t end, double top, double bot, list<Selectable*>& results)
+RouteTimeAxisView::get_selectables (nframes_t start, nframes_t end, double top, double bot, list<Selectable*>& results)
{
double speed = 1.0;
@@ -910,8 +910,8 @@ RouteTimeAxisView::get_selectables (jack_nframes_t start, jack_nframes_t end, do
speed = get_diskstream()->speed();
}
- jack_nframes_t start_adjusted = session_frame_to_track_frame(start, speed);
- jack_nframes_t end_adjusted = session_frame_to_track_frame(end, speed);
+ nframes_t start_adjusted = session_frame_to_track_frame(start, speed);
+ nframes_t end_adjusted = session_frame_to_track_frame(end, speed);
if (_view && ((top < 0.0 && bot < 0.0)) || touched (top, bot)) {
_view->get_selectables (start_adjusted, end_adjusted, results);
@@ -1005,7 +1005,7 @@ RouteTimeAxisView::hide_click ()
}
boost::shared_ptr<Region>
-RouteTimeAxisView::find_next_region (jack_nframes_t pos, RegionPoint point, int32_t dir)
+RouteTimeAxisView::find_next_region (nframes_t pos, RegionPoint point, int32_t dir)
{
boost::shared_ptr<Diskstream> stream;
Playlist *playlist;
@@ -1070,7 +1070,7 @@ RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
}
bool
-RouteTimeAxisView::paste (jack_nframes_t pos, float times, Selection& selection, size_t nth)
+RouteTimeAxisView::paste (nframes_t pos, float times, Selection& selection, size_t nth)
{
if (!is_track()) {
return false;
diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h
index 7489dc84fe..65d82506b8 100644
--- a/gtk2_ardour/route_time_axis.h
+++ b/gtk2_ardour/route_time_axis.h
@@ -73,19 +73,19 @@ public:
void set_samples_per_unit (double);
void set_height (TimeAxisView::TrackHeight);
- void show_timestretch (jack_nframes_t start, jack_nframes_t end);
+ void show_timestretch (nframes_t start, nframes_t end);
void hide_timestretch ();
void selection_click (GdkEventButton*);
void set_selected_points (PointSelection&);
void set_selected_regionviews (RegionSelection&);
- void get_selectables (jack_nframes_t start, jack_nframes_t end, double top, double bot, list<Selectable *>&);
+ void get_selectables (nframes_t start, nframes_t end, double top, double bot, list<Selectable *>&);
void get_inverted_selectables (Selection&, list<Selectable*>&);
- boost::shared_ptr<ARDOUR::Region> find_next_region (jack_nframes_t pos, ARDOUR::RegionPoint, int32_t dir);
+ boost::shared_ptr<ARDOUR::Region> find_next_region (nframes_t pos, ARDOUR::RegionPoint, int32_t dir);
/* Editing operations */
bool cut_copy_clear (Selection&, Editing::CutCopyOp);
- bool paste (jack_nframes_t, float times, Selection&, size_t nth);
+ bool paste (nframes_t, float times, Selection&, size_t nth);
list<TimeAxisView*> get_child_list();
@@ -203,7 +203,7 @@ protected:
virtual void show_existing_automation ();
virtual void hide_all_automation ();
- void timestretch (jack_nframes_t start, jack_nframes_t end);
+ void timestretch (nframes_t start, nframes_t end);
void visual_click ();
void hide_click ();
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index 040dac6e0e..dc861fbbbb 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -26,6 +26,8 @@
#include <ardour/route_group.h>
#include <pbd/memento_command.h>
+#include <pbd/stacktrace.h>
+#include <pbd/shiva.h>
#include "route_ui.h"
#include "keyboard.h"
@@ -46,7 +48,6 @@ using namespace Gtkmm2ext;
using namespace ARDOUR;
using namespace PBD;
-
RouteUI::RouteUI (boost::shared_ptr<ARDOUR::Route> rt, ARDOUR::Session& sess, const char* m_name,
const char* s_name, const char* r_name)
: AxisView(sess),
@@ -67,7 +68,8 @@ RouteUI::RouteUI (boost::shared_ptr<ARDOUR::Route> rt, ARDOUR::Session& sess, co
set_color (unique_random_color());
}
- _route->GoingAway.connect (mem_fun (*this, &RouteUI::route_removed));
+ new Shiva<Route,RouteUI> (*_route, *this);
+
_route->active_changed.connect (mem_fun (*this, &RouteUI::route_active_changed));
mute_button = manage (new BindableToggleButton (_route->mute_control(), m_name ));
@@ -97,6 +99,7 @@ RouteUI::RouteUI (boost::shared_ptr<ARDOUR::Route> rt, ARDOUR::Session& sess, co
RouteUI::~RouteUI()
{
+ GoingAway (); /* EMIT SIGNAL */
delete mute_menu;
}
@@ -582,17 +585,6 @@ RouteUI::reversibly_apply_route_boolean (string name, void (Route::*func)(bool,
}
void
-RouteUI::reversibly_apply_audio_track_boolean (string name, void (AudioTrack::*func)(bool, void *), bool yn, void *arg)
-{
- _session.begin_reversible_command (name);
- XMLNode &before = audio_track()->get_state();
- bind (mem_fun (*audio_track(), func), yn, arg)();
- XMLNode &after = audio_track()->get_state();
- _session.add_command (new MementoCommand<AudioTrack>(*audio_track(), &before, &after));
- _session.commit_reversible_command ();
-}
-
-void
RouteUI::reversibly_apply_track_boolean (string name, void (Track::*func)(bool, void *), bool yn, void *arg)
{
_session.begin_reversible_command (name);
@@ -743,13 +735,6 @@ RouteUI::idle_remove_this_route (RouteUI *rui)
}
void
-RouteUI::route_removed ()
-{
- ENSURE_GUI_THREAD(mem_fun (*this, &RouteUI::route_removed));
- delete this;
-}
-
-void
RouteUI::route_rename ()
{
ArdourPrompter name_prompter (true);
diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h
index 00b3e0a313..eace2c6c2a 100644
--- a/gtk2_ardour/route_ui.h
+++ b/gtk2_ardour/route_ui.h
@@ -155,8 +155,9 @@ class RouteUI : public virtual AxisView
void set_remote_control_id (uint32_t id, Gtk::CheckMenuItem* item);
void reversibly_apply_route_boolean (string name, void (ARDOUR::Route::*func)(bool, void*), bool, void *);
- void reversibly_apply_audio_track_boolean (string name, void (ARDOUR::AudioTrack::*func)(bool, void*), bool, void *);
void reversibly_apply_track_boolean (string name, void (ARDOUR::Track::*func)(bool, void*), bool, void *);
+
+ sigc::signal<void> GoingAway;
};
#endif /* __ardour_route_ui__ */
diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc
index 9d171e484d..06475aa1d4 100644
--- a/gtk2_ardour/selection.cc
+++ b/gtk2_ardour/selection.cc
@@ -234,7 +234,7 @@ Selection::toggle (vector<RegionView*>& r)
}
long
-Selection::toggle (jack_nframes_t start, jack_nframes_t end)
+Selection::toggle (nframes_t start, nframes_t end)
{
AudioRangeComparator cmp;
@@ -344,7 +344,7 @@ Selection::add (vector<RegionView*>& v)
}
long
-Selection::add (jack_nframes_t start, jack_nframes_t end)
+Selection::add (nframes_t start, nframes_t end)
{
AudioRangeComparator cmp;
@@ -360,7 +360,7 @@ Selection::add (jack_nframes_t start, jack_nframes_t end)
}
void
-Selection::replace (uint32_t sid, jack_nframes_t start, jack_nframes_t end)
+Selection::replace (uint32_t sid, nframes_t start, nframes_t end)
{
for (list<AudioRange>::iterator i = time.begin(); i != time.end(); ++i) {
if ((*i).id == sid) {
@@ -484,7 +484,7 @@ Selection::remove (uint32_t selection_id)
}
void
-Selection::remove (jack_nframes_t start, jack_nframes_t end)
+Selection::remove (nframes_t start, nframes_t end)
{
}
@@ -550,7 +550,7 @@ Selection::set (vector<RegionView*>& v)
}
long
-Selection::set (TimeAxisView* track, jack_nframes_t start, jack_nframes_t end)
+Selection::set (TimeAxisView* track, nframes_t start, nframes_t end)
{
if ((start == 0 && end == 0) || end < start) {
return 0;
diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h
index 7b503a5e63..a1b1ae0da3 100644
--- a/gtk2_ardour/selection.h
+++ b/gtk2_ardour/selection.h
@@ -98,7 +98,7 @@ class Selection : public sigc::trackable
void set (const list<TimeAxisView*>&);
void set (RegionView*);
void set (std::vector<RegionView*>&);
- long set (TimeAxisView*, jack_nframes_t, jack_nframes_t);
+ long set (TimeAxisView*, nframes_t, nframes_t);
void set (ARDOUR::AutomationList*);
void set (ARDOUR::Playlist*);
void set (const list<ARDOUR::Playlist*>&);
@@ -109,7 +109,7 @@ class Selection : public sigc::trackable
void toggle (const list<TimeAxisView*>&);
void toggle (RegionView*);
void toggle (std::vector<RegionView*>&);
- long toggle (jack_nframes_t, jack_nframes_t);
+ long toggle (nframes_t, nframes_t);
void toggle (ARDOUR::AutomationList*);
void toggle (ARDOUR::Playlist*);
void toggle (const list<ARDOUR::Playlist*>&);
@@ -119,7 +119,7 @@ class Selection : public sigc::trackable
void add (const list<TimeAxisView*>&);
void add (RegionView*);
void add (std::vector<RegionView*>&);
- long add (jack_nframes_t, jack_nframes_t);
+ long add (nframes_t, nframes_t);
void add (ARDOUR::AutomationList*);
void add (ARDOUR::Playlist*);
void add (const list<ARDOUR::Playlist*>&);
@@ -129,13 +129,13 @@ class Selection : public sigc::trackable
void remove (const list<TimeAxisView*>&);
void remove (RegionView*);
void remove (uint32_t selection_id);
- void remove (jack_nframes_t, jack_nframes_t);
+ void remove (nframes_t, nframes_t);
void remove (ARDOUR::AutomationList*);
void remove (ARDOUR::Playlist*);
void remove (const list<ARDOUR::Playlist*>&);
void remove (boost::shared_ptr<ARDOUR::Redirect>);
- void replace (uint32_t time_index, jack_nframes_t start, jack_nframes_t end);
+ void replace (uint32_t time_index, nframes_t start, nframes_t end);
void clear_regions();
void clear_tracks ();
diff --git a/gtk2_ardour/send_ui.cc b/gtk2_ardour/send_ui.cc
index 897f5f3847..c4656834a6 100644
--- a/gtk2_ardour/send_ui.cc
+++ b/gtk2_ardour/send_ui.cc
@@ -98,14 +98,6 @@ SendUI::outs_changed (IOChange change, void* ignored)
}
void
-SendUI::send_going_away ()
-{
- ENSURE_GUI_THREAD (mem_fun (*this, &SendUI::send_going_away))
-
- delete this;
-}
-
-void
SendUI::update ()
{
}
@@ -113,7 +105,7 @@ SendUI::update ()
void
SendUI::fast_update ()
{
- if (_session.meter_falloff() > 0.0f) {
+ if (Config->get_meter_falloff() > 0.0f) {
gpm.update_meters ();
}
}
@@ -146,7 +138,6 @@ void
SendUIWindow::send_going_away ()
{
ENSURE_GUI_THREAD (mem_fun (*this, &SendUIWindow::send_going_away));
-
- delete this;
+ delete_when_idle (this);
}
diff --git a/gtk2_ardour/send_ui.h b/gtk2_ardour/send_ui.h
index c8576cab9e..b64e3c8e58 100644
--- a/gtk2_ardour/send_ui.h
+++ b/gtk2_ardour/send_ui.h
@@ -54,7 +54,6 @@ class SendUI : public Gtk::HBox
sigc::connection screen_update_connection;
sigc::connection fast_screen_update_connection;
- void send_going_away ();
void ins_changed (ARDOUR::IOChange, void*);
void outs_changed (ARDOUR::IOChange, void*);
};
diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc
index f434463500..67084eb6a0 100644
--- a/gtk2_ardour/sfdb_ui.cc
+++ b/gtk2_ardour/sfdb_ui.cc
@@ -308,10 +308,10 @@ SoundFileBox::field_selected ()
// this needs to be kept in sync with the ImportMode enum defined in editing.h and editing_syms.h.
static const char *import_mode_strings[] = {
- X_("Add to Region list"),
- X_("Add to selected Track(s)"),
- X_("Add as new Track(s)"),
- X_("Add as new Tape Track(s)"),
+ N_("Add to Region list"),
+ N_("Add to selected Track(s)"),
+ N_("Add as new Track(s)"),
+ N_("Add as new Tape Track(s)"),
0
};
diff --git a/gtk2_ardour/splash.png b/gtk2_ardour/splash.png
new file mode 100644
index 0000000000..4152aa0cc2
--- /dev/null
+++ b/gtk2_ardour/splash.png
Binary files differ
diff --git a/gtk2_ardour/splash.ppm b/gtk2_ardour/splash.ppm
deleted file mode 100644
index 850f4072f7..0000000000
--- a/gtk2_ardour/splash.ppm
+++ /dev/null
@@ -1,32 +0,0 @@
-P6
-# CREATOR: The GIMP's PNM Filter Version 1.0
-321 216
-255
-fffUUUffffffDDDDDDDDDUUUfffUUUUUUUUUUUUUUUDDDUUU333DDDDDDUUUUUUDDDDDDDDD333333333DDDDDDDDDDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUDDD333UUUUUUDDDDDDDDD333DDDDDDDDDUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUDDDUUUUUUDDDUUUUUUUUUUUUUUUUUUDDDDDDUUUDDDDDDDDDUUUDDDfffUUUUUUUUUDDDDDDDDDDDDDDDDDDUUUDDDUUUUUUffffffUUUDDD333UUUUUUUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUUUUUUUfffUUUUUUUUUDDDDDDDDDDDDDDDUUUDDDUUUffffffUUUffffffDDDDDDDDDUUUfffUUUUUUUUUUUUUUUDDDUUU333DDDDDDUUUUUUDDDDDDDDD333333333DDDDDDDDDDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUDDD333UUUUUUDDDDDDDDD333DDDDDDDDDUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUDDDUUUUUUDDDUUUUUUUUUUUUUUUUUUDDDDDDUUUDDDDDDDDDUUUDDDfffUUUUUUUUUDDDDDDDDDDDDDDDDDDUUUDDDUUUUUUffffffUUUDDD333UUUUUUUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUUUUUUUfffUUUUUUUUUDDDDDDDDDDDDDDDUUUDDDUUUffffffUUUffffffDDDDDDDDDUUUfffUUUUUUUUUUUUUUUDDDUUU333DDDDDDUUUUUUDDDDDDDDD333333333DDDDDDDDDDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUDDD333UUUUUUDDDDDDDDD333DDDDDDDDDUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUDDDUUUUUUUUUDDDUUUUUUDDDwwwUUUUUUUUUUUUUUUUUUUUUDDD333UUUDDDUUUDDDDDDDDDDDD333DDDDDDDDDUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUDDDDDDDDD333DDDDDDUUUDDDDDDUUUDDDUUUfffUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUDDDDDDUUUUUUDDDDDDUUUUUUUUUUUUDDDUUUUUUUUUUUUDDDUUUDDDUUUDDDDDDDDDUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUwwwUUUUUUDDDDDDDDDfffUUUDDDDDDfffUUUDDDDDDDDDUUUUUUUUUDDDUUUDDDUUUUUUUUUDDDUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUUUUDDDUUUUUUDDDwwwUUUUUUUUUUUUUUUUUUUUUDDD333UUUDDDUUUDDDDDDDDDDDD333DDDDDDDDDUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUDDDDDDDDD333DDDDDDUUUDDDDDDUUUDDDUUUfffUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUDDDDDDUUUUUUDDDDDDUUUUUUUUUUUUDDDUUUUUUUUUUUUDDDUUUDDDUUUDDDDDDDDDUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUwwwUUUUUUDDDDDDDDDfffUUUDDDDDDfffUUUDDDDDDDDDUUUUUUUUUDDDUUUDDDUUUUUUUUUDDDUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUUUUDDDUUUUUUDDDwwwUUUUUUUUUUUUUUUUUUUUUDDD333UUUDDDUUUDDDDDDDDDDDD333DDDDDDDDDUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUDDDDDDDDD333DDDDDDUUUDDDDDDUUUDDDUUUfffUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUDDDDDDfffUUUUUUUUUfffUUUfffUUUUUUUUUUUUDDDfffUUUUUU333DDDDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDUUUfffUUUUUUDDDDDDDDDDDDDDDDDDUUUUUUDDDDDDUUUDDDUUUfffUUUUUUfffDDDUUUDDDUUUDDDfffUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUUUUUUUDDDUUUUUUfffUUUUUUUUUDDDDDDDDDUUUUUUUUU333DDDUUUUUUUUUUUUUUUfffUUUfffUUUDDDUUUUUUUUUUUUDDDUUUUUUUUUDDDUUUUUUDDDDDDUUU333UUUfffDDDfffDDDDDDUUUfffUUUfffDDDUUUDDDUUUUUUfffUUUUUUUUUfffUUUfffUUUUUUUUUUUUDDDfffUUUUUU333DDDDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDUUUfffUUUUUUDDDDDDDDDDDDDDDDDDUUUUUUDDDDDDUUUDDDUUUfffUUUUUUfffDDDUUUDDDUUUDDDfffUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUUUUUUUDDDUUUUUUfffUUUUUUUUUDDDDDDDDDUUUUUUUUU333DDDUUUUUUUUUUUUUUUfffUUUfffUUUDDDUUUUUUUUUUUUDDDUUUUUUUUUDDDUUUUUUDDDDDDUUU333UUUfffDDDfffDDDDDDUUUfffUUUfffDDDUUUDDDUUUUUUfffUUUUUUUUUfffUUUfffUUUUUUUUUUUUDDDfffUUUUUU333DDDDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDUUUfffUUUUUUDDDDDDDDDDDDDDDDDDUUUUUUDDDDDDUUUDDDUUUfffUUUUUUfffDDDUUUDDDUUUDDDfffUUUDDDDDDUUUfffUUUUUUUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUDDDUUUUUUUUUfffUUUDDDDDDUUUffffffUUUUUUDDDDDDUUUDDDDDDUUUUUUUUUDDDDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUfffUUUUUUDDDDDDDDDUUUDDDUUUDDD333DDDDDDDDDUUUUUUDDDDDDDDDUUU333DDD333UUU333UUUDDDUUUDDDDDDDDDDDDUUUUUUUUUUUUDDDUUUDDDDDDUUU333UUUDDDDDD333DDDUUUDDDUUUDDDDDDUUUUUUUUUUUUfffUUUUUUDDD333DDDDDDUUUDDDUUUUUUUUUUUUUUUffffffUUUUUUUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUDDDUUUUUUUUUfffUUUDDDDDDUUUffffffUUUUUUDDDDDDUUUDDDDDDUUUUUUUUUDDDDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUfffUUUUUUDDDDDDDDDUUUDDDUUUDDD333DDDDDDDDDUUUUUUDDDDDDDDDUUU333DDD333UUU333UUUDDDUUUDDDDDDDDDDDDUUUUUUUUUUUUDDDUUUDDDDDDUUU333UUUDDDDDD333DDDUUUDDDUUUDDDDDDUUUUUUUUUUUUfffUUUUUUDDD333DDDDDDUUUDDDUUUUUUUUUUUUUUUffffffUUUUUUUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUDDDUUUUUUUUUfffUUUDDDDDDUUUffffffUUUUUUDDDDDDUUUDDDDDDUUUUUUUUUDDDDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUfffUUUUUUDDDDDDDDDUUUDDDfffUUUDDDUUUDDDDDD333DDDDDDUUUUUUUUUUUUDDDDDDDDDDDDUUUDDDUUUDDDUUUUUUUUUUUUfffUUUUUUDDDDDDUUUUUUUUUfffDDDDDDDDDUUUfff333DDDUUUDDDDDDUUU333UUUDDDUUUUUUDDDUUUDDDDDDDDDDDDfffUUUUUUUUUUUUDDDfffUUU333DDDDDD333UUUDDDUUUDDDUUUDDDUUUDDDUUU333DDDDDDUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUUUUUUUDDDDDDDDDDDDfff333DDDDDDDDDDDDDDDUUUUUUUUUfffUUUDDDUUUUUUDDDDDDDDDUUUDDDDDD333UUUUUUUUUUUUfffUUUUUUUUUfffffffffUUUDDDUUUDDDDDD333DDDDDDUUUUUUUUUUUUDDDDDDDDDDDDUUUDDDUUUDDDUUUUUUUUUUUUfffUUUUUUDDDDDDUUUUUUUUUfffDDDDDDDDDUUUfff333DDDUUUDDDDDDUUU333UUUDDDUUUUUUDDDUUUDDDDDDDDDDDDfffUUUUUUUUUUUUDDDfffUUU333DDDDDD333UUUDDDUUUDDDUUUDDDUUUDDDUUU333DDDDDDUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUUUUUUUDDDDDDDDDDDDfff333DDDDDDDDDDDDDDDUUUUUUUUUfffUUUDDDUUUUUUDDDDDDDDDUUUDDDDDD333UUUUUUUUUUUUfffUUUUUUUUUfffffffffUUUDDDUUUDDDDDD333DDDDDDUUUUUUUUUUUUDDDDDDDDDDDDUUUDDDUUUDDDUUUUUUUUUUUUfffUUUUUUDDDDDDUUUUUUUUUfffDDDDDDDDDUUUfff333DDDUUUDDDDDDUUU333UUUDDDUUUUUUDDDUUUDDDDDDDDDDDDfffUUUUUUUUUUUUDDDfffUUU333UUUDDDUUUDDDDDDDDDDDDDDDDDDUUUfffDDDUUUDDDDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDUUUUUUUUUDDDDDDUUUUUUUUUUUUDDDUUUDDDDDDUUUDDDUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUDDDUUUDDDDDDDDDUUUUUUUUUDDDUUUDDDDDDUUUDDDDDDDDDUUUDDDDDDDDDUUUUUUUUUDDDUUU333UUUDDDDDD333DDDDDD333333UUUUUUDDDUUUUUUDDDUUUUUUDDDDDDUUUDDDUUUfffUUUUUUDDDfffDDDDDDUUUffffffUUUDDDDDDUUUUUUDDDUUUUUUUUUDDDUUUfffUUUUUUUUUUUUDDDUUUDDDUUUUUUfffUUUDDDUUUDDDDDDDDDDDDDDDDDDUUUfffDDDUUUDDDDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDUUUUUUUUUDDDDDDUUUUUUUUUUUUDDDUUUDDDDDDUUUDDDUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUDDDUUUDDDDDDDDDUUUUUUUUUDDDUUUDDDDDDUUUDDDDDDDDDUUUDDDDDDDDDUUUUUUUUUDDDUUU333UUUDDDDDD333DDDDDD333333UUUUUUDDDUUUUUUDDDUUUUUUDDDDDDUUUDDDUUUfffUUUUUUDDDfffDDDDDDUUUffffffUUUDDDDDDUUUUUUDDDUUUUUUUUUDDDUUUfffUUUUUUUUUUUUDDDUUUDDDUUUUUUfffUUUDDDUUUDDDDDDDDDDDDDDDDDDUUUfffDDDUUUDDDDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDUUUUUUUUUDDDDDDUUUUUUUUUUUUDDDUUUDDDDDDUUUDDDUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUDDDUUUDDDDDDDDDUUUUUUUUUDDDUUUDDDDDDUUUDDDDDDDDDDDDUUUDDDUUUDDD333UUUUUUUUUfffUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUfffUUUUUUfffUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDD333fffUUUfffUUUDDDUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUDDDUUUUUUDDDDDDUUUDDDDDDDDDDDD333333UUUDDDUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUDDDUUUUUUUUUDDDUUUUUUfffDDDDDDUUUfffUUUUUUUUUDDDUUUDDDUUUUUUDDDUUUfffUUUUUUDDDUUUDDDfffUUUDDDUUUDDDUUUDDD333UUUUUUUUUfffUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUfffUUUUUUfffUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDD333fffUUUfffUUUDDDUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUDDDUUUUUUDDDDDDUUUDDDDDDDDDDDD333333UUUDDDUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUDDDUUUUUUUUUDDDUUUUUUfffDDDDDDUUUfffUUUUUUUUUDDDUUUDDDUUUUUUDDDUUUfffUUUUUUDDDUUUDDDfffUUUDDDUUUDDDUUUDDD333UUUUUUUUUfffUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUfffUUUUUUfffUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDD333fffUUUfffUUUDDDUUUDDDDDDUUUUUUUUUDDDDDDUUUUUUDDDUUUUUUDDDDDDUUUDDDDDDDDD333DDDDDDDDD333UUUUUUUUUUUUDDDUUUUUUDDDUUUDDDUUUUUUDDDDDDDDDDDDfffUUUUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDUUUUUUfffDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUUUUUUUfffUUUUUUDDDDDDUUUUUUDDDUUUDDDDDDUUUDDDUUUUUUUUUDDD333DDDDDDDDDDDDDDDDDDDDDUUUUUUDDDUUUUUUDDDDDDUUUUUUUUUUUUfffUUUUUUDDDDDDDDDDDDUUU333DDD333fffDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUDDDUUUDDDDDDUUUUUUDDDDDDDDDUUUDDD333DDDDDDDDD333UUUUUUUUUUUUDDDUUUUUUDDDUUUDDDUUUUUUDDDDDDDDDDDDfffUUUUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDUUUUUUfffDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUUUUUUUfffUUUUUUDDDDDDUUUUUUDDDUUUDDDDDDUUUDDDUUUUUUUUUDDD333DDDDDDDDDDDDDDDDDDDDDUUUUUUDDDUUUUUUDDDDDDUUUUUUUUUUUUfffUUUUUUDDDDDDDDDDDDUUU333DDD333fffDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUDDDUUUDDDDDDUUUUUUDDDDDDDDDUUUDDD333DDDDDDDDD333UUUUUUUUUUUUDDDUUUUUUDDDUUUDDDUUUUUUDDDDDDDDDDDDfffUUUUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDUUUUUUfffDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUUUUUUUfffUUUUUUDDDDDDUUUUUUDDDUUUDDDDDDDDDDDDDDDUUUDDDDDD333UUUUUU333UUUDDDDDDDDDDDDUUUDDDUUUUUUUUUUUUUUUUUUDDDDDDUUUUUUUUUfffUUUUUUUUUUUU333DDDUUUUUUDDDUUUUUUUUUUUU333UUUDDDUUUUUUUUUUUUDDDUUUUUUffffffDDDfffDDDDDDUUUUUUDDDUUUfffDDDUUUDDDfffDDDUUUDDD333UUUDDD333DDDDDDUUUUUUUUUUUUUUUUUUDDDUUUUUUUUUUUUDDDDDDUUUUUUUUUUUUUUUDDDUUUUUU333333DDDDDDUUUDDDDDDUUUDDDUUUUUUfffDDDDDDUUUUUUUUUUUUDDDDDDUUUUUUDDDDDDDDDDDDUUUfffUUUDDDDDDDDDDDDDDDUUUDDDDDD333UUUUUU333UUUDDDDDDDDDDDDUUUDDDUUUUUUUUUUUUUUUUUUDDDDDDUUUUUUUUUfffUUUUUUUUUUUU333DDDUUUUUUDDDUUUUUUUUUUUU333UUUDDDUUUUUUUUUUUUDDDUUUUUUffffffDDDfffDDDDDDUUUUUUDDDUUUfffDDDUUUDDDfffDDDUUUDDD333UUUDDD333DDDDDDUUUUUUUUUUUUUUUUUUDDDUUUUUUUUUUUUDDDDDDUUUUUUUUUUUUUUUDDDUUUUUU333333DDDDDDUUUDDDDDDUUUDDDUUUUUUfffDDDDDDUUUUUUUUUUUUDDDDDDUUUUUUDDDDDDDDDDDDUUUfffUUUDDDDDDDDDDDDDDDUUUDDDDDD333UUUUUU333UUUDDDDDDDDDDDDUUUDDDUUUUUUUUUUUUUUUUUUDDDDDDUUUUUUUUUfffUUUUUUUUUUUU333DDDUUUUUUDDDUUUUUUUUUUUU333UUUDDDUUUUUUUUUUUUDDDUUUUUUffffffDDDfffDDDDDDUUUUUUDDDUUUfffDDDDDDDDDUUUDDDUUUDDDUUUDDDUUUUUUUUUDDDDDDUUU333DDDDDDDDDUUUUUUUUUUUUDDDUUUDDDUUUfffUUUUUUDDDDDDDDDUUUUUUDDDDDDDDDDDDDDDDDDUUUUUU333DDDDDDUUUDDDDDDfffDDDUUUfffUUUDDDDDDfffDDDUUUDDDUUU333UUUDDDDDDDDDDDDDDDDDDDDDDDDDDD333DDDDDDDDDDDDDDDUUUDDDDDDDDDUUUUUUUUUfffUUUDDDUUUDDDDDDUUUUUUDDDUUUDDDUUUUUUUUU333UUUUUUUUUDDDDDDUUUDDDUUUUUUUUUUUUDDDDDDDDDUUUDDDUUUDDDDDDUUUUUUfffDDDUUUUUUUUUUUU333DDDDDDDDDUUUDDDUUUDDDUUUDDDUUUUUUUUUDDDDDDUUU333DDDDDDDDDUUUUUUUUUUUUDDDUUUDDDUUUfffUUUUUUDDDDDDDDDUUUUUUDDDDDDDDDDDDDDDDDDUUUUUU333DDDDDDUUUDDDDDDfffDDDUUUfffUUUDDDDDDfffDDDUUUDDDUUU333UUUDDDDDDDDDDDDDDDDDDDDDDDDDDD333DDDDDDDDDDDDDDDUUUDDDDDDDDDUUUUUUUUUfffUUUDDDUUUDDDDDDUUUUUUDDDUUUDDDUUUUUUUUU333UUUUUUUUUDDDDDDUUUDDDUUUUUUUUUUUUDDDDDDDDDUUUDDDUUUDDDDDDUUUUUUfffDDDUUUUUUUUUUUU333DDDDDDDDDUUUDDDUUUDDDUUUDDDUUUUUUUUUDDDDDDUUU333DDDDDDDDDUUUUUUUUUUUUDDDUUUDDDUUUfffUUUUUUDDDDDDDDDUUUUUUDDDDDDDDDDDDDDDDDDUUUUUU333DDDDDDUUUDDDDDDfffDDDUUUfffUUUDDDDDDfffDDDUUUDDDUUU333UUUDDDDDDDDDUUUDDD333DDDDDDUUUUUUDDDUUUDDDDDDDDDDDDDDDUUUUUUDDDDDDUUUDDDUUUUUUDDDDDDUUUffffffDDDUUUUUUDDDUUUDDDUUU333333DDDDDDDDDUUUDDDDDDDDDDDDUUUUUUUUUUUUUUUDDDUUUUUUUUUUUUfffUUUDDDUUUDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDDDD333DDDUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDUUUUUUfffDDDUUUUUUDDDUUUUUU333DDDUUUUUUfffUUUUUUUUUUUUDDDDDDUUUUUUDDDDDDUUUDDDDDDUUUUUUUUUUUUUUUDDDUUUUUUUUUUUUUUU333DDDUUUDDD333DDDDDDUUUUUUDDDUUUDDDDDDDDDDDDDDDUUUUUUDDDDDDUUUDDDUUUUUUDDDDDDUUUffffffDDDUUUUUUDDDUUUDDDUUU333333DDDDDDDDDUUUDDDDDDDDDDDDUUUUUUUUUUUUUUUDDDUUUUUUUUUUUUfffUUUDDDUUUDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDDDD333DDDUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDUUUUUUfffDDDUUUUUUDDDUUUUUU333DDDUUUUUUfffUUUUUUUUUUUUDDDDDDUUUUUUDDDDDDUUUDDDDDDUUUUUUUUUUUUUUUDDDUUUUUUUUUUUUUUU333DDDUUUDDD333DDDDDDUUUUUUDDDUUUDDDDDDDDDDDDDDDUUUUUUDDDDDDUUUDDDUUUUUUDDDDDDUUUffffffDDDUUUUUUDDDUUUDDDUUU333333DDDDDDDDDUUUDDDDDDDDDDDDUUUUUUUUUUUUUUUDDDUUUUUUUUUUUUfffUUUDDDUUUDDDDDDUUUDDDUUUDDDDDDUUUUUUDDDfffUUUUUUDDDDDDDDDUUUDDDDDDDDDUUUDDDDDD333DDDDDDDDDDDDUUUDDDUUUfffUUUDDDDDDUUUUUUDDDDDDDDDUUU333DDDDDDDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDD333UUUDDDDDD333DDDUUUDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDUUUDDDUUUDDDUUUUUUDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUfffUUUUUUDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUUUUDDDUUUUUUUUUDDDDDDDDDUUUUUUDDDfffUUUUUUDDDDDDDDDUUUDDDDDDDDDUUUDDDDDD333DDDDDDDDDDDDUUUDDDUUUfffUUUDDDDDDUUUUUUDDDDDDDDDUUU333DDDDDDDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDD333UUUDDDDDD333DDDUUUDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDUUUDDDUUUDDDUUUUUUDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUfffUUUUUUDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUUUUDDDUUUUUUUUUDDDDDDDDDUUUUUUDDDfffUUUUUUDDDDDDDDDUUUDDDDDDDDDUUUDDDDDD333DDDDDDDDDDDDUUUDDDUUUfffUUUDDDDDDUUUUUUDDDDDDDDDUUU333DDDDDDDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDD333UUUDDDDDD333DDDUUUDDDDDDDDDUUUDDDDDDDDDDDDUUUUUUUUUDDDfffUUUfffDDDDDDDDDUUUUUUDDDUUUDDDUUUDDD333DDDDDDDDDDDDDDDUUUffffffUUUUUUDDDUUUUUUDDDDDDDDDUUUUUUDDDUUUDDDUUUUUUDDDDDDUUUDDD333DDD333DDD333DDDUUUDDDDDDDDDUUUUUUDDDUUUUUUUUU333DDDDDDDDDfffDDDUUUDDDDDDDDDUUUUUUDDDDDDUUUDDDUUUDDDUUUDDDDDDUUUUUUDDDDDD333DDDUUUUUUUUUDDDDDDDDDDDDDDDUUUDDDDDDfffUUUDDDUUUUUUUUUUUUUUUUUUfffUUUDDDUUUDDDUUUDDD333UUUUUUUUUUUUUUUfffDDDDDDUUUUUUUUUUUUDDDUUUUUUDDDfffUUUfffDDDDDDDDDUUUUUUDDDUUUDDDUUUDDD333DDDDDDDDDDDDDDDUUUffffffUUUUUUDDDUUUUUUDDDDDDDDDUUUUUUDDDUUUDDDUUUUUUDDDDDDUUUDDD333DDD333DDD333DDDUUUDDDDDDDDDUUUUUUDDDUUUUUUUUU333DDDDDDDDDfffDDDUUUDDDDDDDDDUUUUUUDDDDDDUUUDDDUUUDDDUUUDDDDDDUUUUUUDDDDDD333DDDUUUUUUUUUDDDDDDDDDDDDDDDUUUDDDDDDfffUUUDDDUUUUUUUUUUUUUUUUUUfffUUUDDDUUUDDDUUUDDD333UUUUUUUUUUUUUUUfffDDDDDDUUUUUUUUUUUUDDDUUUUUUDDDfffUUUfffDDDDDDDDDUUUUUUDDDUUUDDDUUUDDD333DDDDDDDDDDDDDDDUUUffffffUUUUUUDDDUUUUUUDDDDDDDDDUUUUUUDDDUUUDDDUUUUUUDDDDDDUUUDDD333DDD333DDD333DDDUUUDDDDDDDDDUUUUUUDDDUUUUUUUUU333DDDDDDDDDfffDDDDDDUUUDDDUUUDDDDDDDDDUUUUUUDDDDDDUUUDDDUUUDDDDDDDDDUUUDDDUUUfffDDDUUUUUUUUUUUU333DDDUUUUUUDDDDDDDDDDDDDDD333333333DDDDDD333DDD333DDDDDDDDDDDDUUUUUUDDDDDDDDDUUUUUUUUUUUUDDDDDDDDDDDDDDDUUUDDDDDDDDDUUUDDDDDDDDDDDD333DDDUUUUUUUUUDDDDDD333DDD333DDDDDDDDDDDDDDDDDDUUUDDDDDDUUUUUUUUUUUUUUUUUUffffffUUUUUUfffUUUUUUUUUUUUUUUfffUUUfffDDDDDDUUUUUUUUUDDDUUUDDDDDDDDDUUUUUUUUUffffffUUUUUUUUUDDDDDDDDDUUUDDDUUUDDDDDDDDDUUUUUUDDDDDDUUUDDDUUUDDDDDDDDDUUUDDDUUUfffDDDUUUUUUUUUUUU333DDDUUUUUUDDDDDDDDDDDDDDD333333333DDDDDD333DDD333DDDDDDDDDDDDUUUUUUDDDDDDDDDUUUUUUUUUUUUDDDDDDDDDDDDDDDUUUDDDDDDDDDUUUDDDDDDDDDDDD333DDDUUUUUUUUUDDDDDD333DDD333DDDDDDDDDDDDDDDDDDUUUDDDDDDUUUUUUUUUUUUUUUUUUffffffUUUUUUfffUUUUUUUUUUUUUUUfffUUUfffDDDDDDUUUUUUUUUDDDUUUDDDDDDDDDUUUUUUUUUffffffUUUUUUUUUDDDDDDDDDUUUDDDUUUDDDDDDDDDUUUUUUDDDDDDUUUDDDUUUDDDDDDDDDUUUDDDUUUfffDDDUUUUUUUUUUUU333DDDUUUUUUDDDDDDDDDDDDDDD333333333DDDDDD333DDD333DDDDDDDDDDDDUUUUUUDDDDDDDDDUUUUUUUUUUUUDDDDDDDDDDDDDDDUUUDDDDDDUUUDDDUUUDDDUUUDDDDDDDDDUUUDDDDDDUUUDDDUUUUUUDDDDDDDDDUUUUUUfffDDDDDDUUUUUUDDDDDDDDDDDDUUUDDDDDD333UUU333333"""DDD333UUUDDDDDDDDDDDD333DDD333UUUUUUUUUDDDUUUUUUUUUUUUUUU333UUU333333DDDUUUDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDUUUUUUUUUUUUUUUDDD333DDDUUUDDD333DDDDDD333DDDDDDDDDfffUUUUUUUUUUUUffffffUUUUUUUUUUUUUUUUUUUUUUUUUUUfffUUUUUUDDDUUUUUUUUU333DDDUUUDDDUUUDDDffffffUUUUUUUUUUUUfffDDDUUUUUUDDDUUUDDDUUUDDDDDDDDDUUUDDDDDDUUUDDDUUUUUUDDDDDDDDDUUUUUUfffDDDDDDUUUUUUDDDDDDDDDDDDUUUDDDDDD333UUU333333"""DDD333UUUDDDDDDDDDDDD333DDD333UUUUUUUUUDDDUUUUUUUUUUUUUUU333UUU333333DDDUUUDDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDUUUUUUUUUUUUUUUDDD333DDDUUUDDD333DDDDDD333DDDDDDDDDfffUUUUUUUUUUUUffffffUUUUUUUUUUUUUUUUUUUUUUUUUUUfffUUUUUUDDDUUUUUUUUU333DDDUUUDDDUUUDDDffffffUUUUUUUUUUUUfffDDDUUUUUUDDDUUUDDDUUUDDDDDDDDDUUUDDDDDDUUUDDDUUUUUUDDDDDDDDDUUUUUUfffDDDDDDUUUUUUDDDDDDDDDDDDUUUDDDDDD333UUU333333"""DDD333UUUDDDDDDDDDDDD333DDD333UUUUUUUUUDDDUUUUUUUUUUUUUUU333UUU333333DDDUUUDDDDDDUUUUUUUUUDDDUUUDDDDDD333DDDUUU333UUUfffUUUUUUUUUDDDUUUUUUDDDUUUDDDDDDfffUUUfffUUUUUUDDDUUUUUUUUUDDDDDDDDDDDD333DDDUUUDDDUUUUUU333DDDDDDDDD333DDDDDDDDDDDDUUUUUUUUUDDDDDD333UUUDDDDDDUUUDDDUUUDDDDDDDDDUUUUUUDDD333UUUDDDDDDUUUfffDDDDDDUUU333DDDDDDDDDUUUDDDUUUUUU333DDDfffUUUfffUUUDDDUUUDDDDDDUUUUUUDDDDDDDDD333DDDUUUUUUUUUUUUUUUDDDUUUUUUDDDDDDDDDUUUUUUDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUDDDUUUUUUUUUUUUDDDUUUDDDDDD333DDDUUU333UUUfffUUUUUUUUUDDDUUUUUUDDDUUUDDDDDDfffUUUfffUUUUUUDDDUUUUUUUUUDDDDDDDDDDDD333DDDUUUDDDUUUUUU333DDDDDDDDD333DDDDDDDDDDDDUUUUUUUUUDDDDDD333UUUDDDDDDUUUDDDUUUDDDDDDDDDUUUUUUDDD333UUUDDDDDDUUUfffDDDDDDUUU333DDDDDDDDDUUUDDDUUUUUU333DDDfffUUUfffUUUDDDUUUDDDDDDUUUUUUDDDDDDDDD333DDDUUUUUUUUUUUUUUUDDDUUUUUUDDDDDDDDDUUUUUUDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUDDDUUUUUUUUUUUUDDDUUUDDDDDD333DDDUUU333UUUfffUUUUUUUUUDDDUUUUUUDDDUUUDDDDDDfffUUUfffUUUUUUDDDUUUUUUUUUDDDDDDDDDDDD333DDDUUUDDDUUUUUU333DDDDDDDDD333DDDDDDDDDDDDUUUUUUUUUDDDDDD333UUUDDDDDDUUUDDDUUUDDDDDDDDDUUUDDDUUUDDDUUUDDDDDDDDDDDDUUUfffUUUUUUUUU333UUUDDDDDD333DDDUUUUUUUUUfffDDDDDDUUUDDDfffUUUDDDDDDDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDDDD333DDD333DDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUU333DDDUUUUUUfffUUUUUUUUUDDDUUUUUUDDDDDDUUUDDDDDDDDDffffffUUUUUUUUUDDDDDDDDDDDDUUUUUUDDDUUUfffUUUUUUDDDfffUUUUUUDDDUUUUUUDDDfffDDDUUUDDDUUUDDDUUUDDDDDDDDDDDDUUUfffUUUUUUUUU333UUUDDDDDD333DDDUUUUUUUUUfffDDDDDDUUUDDDfffUUUDDDDDDDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDDDD333DDD333DDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUU333DDDUUUUUUfffUUUUUUUUUDDDUUUUUUDDDDDDUUUDDDDDDDDDffffffUUUUUUUUUDDDDDDDDDDDDUUUUUUDDDUUUfffUUUUUUDDDfffUUUUUUDDDUUUUUUDDDfffDDDUUUDDDUUUDDDUUUDDDDDDDDDDDDUUUfffUUUUUUUUU333UUUDDDDDD333DDDUUUUUUUUUfffDDDDDDUUUDDDfffUUUDDDDDDDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDDDD333DDD333DDDDDDUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDfffUUUDDDDDDUUUDDDUUUUUUfffUUUDDD333333DDDUUUUUUDDDUUUDDDUUUDDDDDDUUUDDDfffUUUUUUDDDDDDDDDUUUUUU333333DDDDDDDDD333UUUDDDDDDDDDUUUUUUUUUDDDDDDUUUUUUDDDDDDDDD333DDDUUUDDDDDDUUUUUUDDDDDDUUUDDDUUUDDDUUUDDDDDDUUUDDDDDDUUUDDDUUU333DDDDDDDDDDDDDDDUUUDDDUUUDDDDDDUUUUUUfffDDDUUUDDDUUUDDDDDDDDDUUUDDD333DDDDDDUUUDDDUUUDDDUUUDDDDDDDDDUUUUUUUUUUUUDDDUUUDDDDDDDDDDDDUUUUUUUUUUUUfffUUUfffUUUDDDDDDfffUUUDDDDDDUUUDDDUUUUUUfffUUUDDD333333DDDUUUUUUDDDUUUDDDUUUDDDDDDUUUDDDfffUUUUUUDDDDDDDDDUUUUUU333333DDDDDDDDD333UUUDDDDDDDDDUUUUUUUUUDDDDDDUUUUUUDDDDDDDDD333DDDUUUDDDDDDUUUUUUDDDDDDUUUDDDUUUDDDUUUDDDDDDUUUDDDDDDUUUDDDUUU333DDDDDDDDDDDDDDDUUUDDDUUUDDDDDDUUUUUUfffDDDUUUDDDUUUDDDDDDDDDUUUDDD333DDDDDDUUUDDDUUUDDDUUUDDDDDDDDDUUUUUUUUUUUUDDDUUUDDDDDDDDDDDDUUUUUUUUUUUUfffUUUfffUUUDDDDDDfffUUUDDDDDDUUUDDDUUUUUUfffUUUDDD333333DDDUUUUUUDDDUUUDDDUUUDDDDDDUUUDDDfffUUUUUUDDDDDDDDDUUUUUU333333DDDDDDDDD333UUUDDDDDDDDDUUUUUUUUUDDDDDDUUUUUUDDDDDDDDD333DDDUUUDDDDDDUUUUUUDDDDDDUUUDDDUUUUUUUUUDDDDDDUUUDDDUUUfffUUUUUUDDDDDDUUU333DDDUUUDDDDDDUUUUUUUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDUUUfffDDD333DDDDDDDDDUUUDDDDDDUUUUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUDDDUUUUUUDDDUUUDDDDDDDDDDDDDDDUUUUUUUUU333UUU333DDDDDDUUUUUUUUUUUUUUUDDDDDDUUUDDDDDDDDDDDDDDDUUUUUUUUUDDDDDDUUUDDDDDDUUUUUUUUUUUUfffDDDUUUDDDDDDDDDDDDDDDDDDDDDUUUUUUfffDDDUUUDDDUUUUUUDDDDDDUUUDDDUUUfffUUUUUUDDDDDDUUU333DDDUUUDDDDDDUUUUUUUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDUUUfffDDD333DDDDDDDDDUUUDDDDDDUUUUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUDDDUUUUUUDDDUUUDDDDDDDDDDDDDDDUUUUUUUUU333UUU333DDDDDDUUUUUUUUUUUUUUUDDDDDDUUUDDDDDDDDDDDDDDDUUUUUUUUUDDDDDDUUUDDDDDDUUUUUUUUUUUUfffDDDUUUDDDDDDDDDDDDDDDDDDDDDUUUUUUfffDDDUUUDDDUUUUUUDDDDDDUUUDDDUUUfffUUUUUUDDDDDDUUU333DDDUUUDDDDDDUUUUUUUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDUUUfffDDD333DDDDDDDDDUUUDDDDDDUUUUUUDDDDDDUUUDDDDDDDDD333DDDDDD333DDD333DDDDDDUUUDDDDDDDDDDDDDDDDDDDDDUUUDDDDDDUUUDDDUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDD333333DDDDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDUUUUUUDDDUUUDDDDDDDDDUUUfffUUUUUUDDDDDDUUUUUUDDDUUUUUUUUUDDDfffUUUDDDUUUDDDDDDDDDDDDDDD333DDDDDDUUUDDDUUUDDDDDDDDDDDDUUUUUUDDDUUUUUUDDDUUUDDDDDDUUUDDDUUUDDDUUUDDDUUUDDDDDDUUUDDDUUUUUUUUUDDDUUUDDDDDDDDDDDD333DDDDDDDDDUUUUUUUUUUUUUUUDDDDDDDDDDDDDDD333DDDDDD333DDD333DDDDDDUUUDDDDDDDDDDDDDDDDDDDDDUUUDDDDDDUUUDDDUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDD333333DDDDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDUUUUUUDDDUUUDDDDDDDDDUUUfffUUUUUUDDDDDDUUUUUUDDDUUUUUUUUUDDDfffUUUDDDUUUDDDDDDDDDDDDDDD333DDDDDDUUUDDDUUUDDDDDDDDDDDDUUUUUUDDDUUUUUUDDDUUUDDDDDDUUUDDDUUUDDDUUUDDDUUUDDDDDDUUUDDDUUUUUUUUUDDDUUUDDDDDDDDDDDD333DDDDDDDDDUUUUUUUUUUUUUUUDDDDDDDDDDDDDDD333DDDDDD333DDD333DDDDDDUUUDDDDDDDDDDDDDDDDDDDDDUUUDDDDDDUUUDDDUUUUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDD333333DDDDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDUUUUUUDDDUUUDDDDDDDDDUUUfffUUUUUUDDDDDDUUUUUUDDDUUUUUUUUUDDDDDDDDD333DDDDDDDDDUUUDDDUUUUUUDDDDDD333UUUDDDUUUUUUDDDDDDDDDUUUDDDUUUDDDDDDfffUUUDDDDDDDDDDDDDDD333333DDDUUU333DDDDDDDDDDDDDDDDDDDDD333UUUDDDDDD333DDDUUUUUUffffffUUUDDDDDDDDDDDDUUUDDDDDDUUUUUUUUUUUUUUUUUUDDDDDD333DDDDDD333DDDDDDDDDUUUUUUDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDUUUDDDDDDDDDDDDDDDDDDUUUfffUUUUUU333UUUDDDDDDDDDUUUDDDDDDDDDUUUUUUUUU333333DDDDDDDDDUUUUUUUUUUUUfffDDDDDDDDDUUUDDDDDDDDDDDD333DDDDDDDDDUUUDDDUUUUUUDDDDDD333UUUDDDUUUUUUDDDDDDDDDUUUDDDUUUDDDDDDfffUUUDDDDDDDDDDDDDDD333333DDDUUU333DDDDDDDDDDDDDDDDDDDDD333UUUDDDDDD333DDDUUUUUUffffffUUUDDDDDDDDDDDDUUUDDDDDDUUUUUUUUUUUUUUUUUUDDDDDD333DDDDDD333DDDDDDDDDUUUUUUDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDUUUDDDDDDDDDDDDDDDDDDUUUfffUUUUUU333UUUDDDDDDDDDUUUDDDDDDDDDUUUUUUUUU333333DDDDDDDDDUUUUUUUUUUUUfffDDDDDDDDDUUUDDDDDDDDDDDD333DDDDDDDDDUUUDDDUUUUUUDDDDDD333UUUDDDUUUUUUDDDDDDDDDUUUDDDUUUDDDDDDfffUUUDDDDDDDDDDDDDDD333333DDDUUU333DDDDDDDDDDDDDDDDDDDDD333UUUDDDDDD333DDDUUUUUUffffffUUUDDDDDDDDDDDDUUUDDDDDDUUUUUUDDDDDDDDDDDD333DDDUUUDDDDDDDDDDDDDDD333DDD333DDDDDDUUUDDDfffDDDDDDDDDDDDDDDUUUDDD333DDDUUUDDDDDDDDD333333DDDUUUDDD333DDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUDDDUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUDDDUUUDDDDDDDDDDDDDDDDDDDDDfffDDDUUUDDDDDDDDDDDDDDD333DDDUUUUUUUUUDDDDDDDDDDDDUUUfffUUUUUUUUUUUUDDDUUUDDDUUUDDD333DDDDDDUUUUUUfffUUUUUUUUUfff333DDDUUUDDDDDDDDDDDDDDDDDD333DDDUUUDDDDDDDDDDDDDDD333DDD333DDDDDDUUUDDDfffDDDDDDDDDDDDDDDpppDDD333DDDUUUDDDDDDDDD333333DDDUUUDDD333DDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUDDDUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUDDDUUUDDDDDDDDDDDDDDDDDDDDDfffDDDUUUDDDDDDDDDDDDDDD333DDDUUUUUUUUUDDDDDDDDDDDDUUUfffUUUUUUUUUUUUDDDUUUDDDUUUDDD333DDDDDDUUUUUUfffUUUUUUUUUfff333DDDUUUDDDDDDDDDDDDDDDDDD333DDDUUUDDDDDDDDDDDDDDD333DDD333DDDDDDUUUDDDfffDDDDDDDDDDDDDDDUUUDDD333DDDUUUDDDDDDDDD333333DDDUUUDDD333DDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUDDDUUUUUUDDDDDDDDDDDD333333UUUUUUDDDDDDUUUUUUDDDDDDDDDDDDUUUDDDUUUUUUDDDUUUDDDUUUUUUDDDDDDDDDDDDUUUDDD333DDD333DDDDDDDDDUUU333DDD333DDDDDDDDDDDDDDDDDDUUUDDDUUUDDDUUUUUUDDDfffUUUDDDUUUUUUDDDUUUUUUDDDUUUDDDDDDDDDDDDDDD333UUUUUUDDDDDDUUU333DDDDDDDDDDDD333DDDUUUDDDDDDUUUUUUUUUDDDDDDDDDUUUDDDDDDDDDfffDDDUUUDDDUUUDDDDDDDDDUUUUUUDDDUUUDDDDDDUUUUUUfffUUUDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUDDDUUUDDDUUU333DDDDDDDDD333333UUUUUUDDDDDDUUUUUUDDDDDDDDDDDDUUUDDDUUUUUUDDDUUUVVVhhhjjjîîîDDDDDDUUUDDD333DDD333DDDDDDDDDUUU333DDD333DDDDDDDDDDDDDDDDDDUUUDDDUUUDDDUUUUUUDDDfffUUUDDDUUUUUUDDDUUUUUUDDDUUUDDDDDDDDDDDDDDD333UUUUUUDDDDDDUUU333DDDDDDDDDDDD333DDDUUUDDDDDDUUUUUUUUUDDDDDDDDDUUUDDDDDDDDDfffDDDUUUDDDUUUDDDDDDDDDUUUUUUDDDUUUDDDDDDUUUUUUfffUUUDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUDDDUUUDDDUUU333DDDDDDDDD333333UUUUUUDDDDDDUUUUUUDDDDDDDDDDDDUUUDDDUUUUUUDDDUUUDDDUUUUUUDDDDDDDDDDDDUUUDDD333DDD333DDDDDDDDDUUU333DDD333DDDDDDDDDDDDDDDDDDUUUDDDUUUDDDUUUUUUDDDfffUUUDDDUUUUUUDDDUUUUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUUUUDDDUUUDDDUUUDDDDDD333333UUUUUUUUUDDDUUUDDDUUUUUUDDDDDDUUUDDDDDDUUU333DDD333DDDDDDDDDDDDDDDDDDDDDUUUDDDUUUDDDDDDDDD333333DDDDDDDDDDDDDDDfffDDDUUUUUUDDD333DDDUUUUUUDDDUUUDDDUUUUUUDDDDDDDDDDDDUUUDDDUUUDDDUUUUUUUUUUUUDDDUUUDDDUUUDDDDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUUUUDDDUUU333DDDUUU333333DDDUUUDDDDDDDDDDDDUUUDDDDDDDDD333DDDDDD333UUUDDDUUUUUUUUUDDDDDDDDDDDDDDDDDDUUUDDDDDDDDDUUUDDDDDDUUUUUUDDDUUUDDDUUUDDDDDD333333UUUiiiuuuqqqoooppp†††———»»»äääDDDDDDUUU333DDD333DDDDDDDDDDDDDDDDDDDDDUUUDDDUUUDDDDDDDDD333333DDDDDDDDDDDDDDDfffDDDUUUUUUDDD333DDDUUUUUUDDDUUUDDDUUUUUUDDDDDDDDDDDDUUUDDDUUUDDDUUUUUUUUUUUUDDDUUUDDDUUUDDDDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUUUUDDDUUU333DDDUUU333333DDDUUUDDDDDDDDDDDDUUUDDDDDDDDD333DDDDDD333UUUDDDUUUUUUUUUDDDDDDDDDDDDDDDDDDUUUDDDDDDDDDUUUDDDDDDUUUUUUDDDUUUDDDUUUDDDDDD333333UUUUUUUUUDDDUUUDDDUUUUUUDDDDDDUUUDDDDDDUUU333DDD333DDDDDDDDDDDDDDDDDDDDDUUUDDDUUUDDDDDDDDD333333DDDDDDDDDDDDDDDfffDDDUUUUUUDDD333DDDUUUUUUDDDUUUDDDUUUUUUDDDDDDDDDUUUDDDUUUDDDDDDUUUDDD333333DDDDDDUUUUUUDDDDDDDDDUUUDDDDDDDDD333UUUUUUUUUUUUDDDDDDDDDUUUDDDDDDUUUDDDDDDUUUUUUDDDDDDDDDDDDDDD333DDDDDDDDD333333UUUUUUfffUUUDDD333DDDDDDUUUDDDDDDUUUDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDUUUUUUDDDUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDfffDDDDDDDDDUUUUUUDDDDDDDDDUUUDDDDDDDDD333DDD333UUUUUU333DDDDDD333UUUUUUffffffDDDDDDDDDDDDDDDUUUDDDDDDUUUUUUDDDDDDDDDUUUDDDUUUDDDDDDUUUDDD333333DDDWWWrrršššsssWWW///444ŸŸŸ´´´´´´ßßß¿¿¿UUUUUUUUUDDDDDDDDDUUUDDDDDDUUUDDDDDDUUUUUUDDDDDDDDDDDDDDD333DDDDDDDDD333333UUUUUUfffUUUDDD333DDDDDDUUUDDDDDDUUUDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDUUUUUUDDDUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUDDDfffDDDDDDDDDUUUUUUDDDDDDDDDUUUDDDDDDDDD333DDD333UUUUUU333DDDDDD333UUUUUUffffffDDDDDDDDDDDDDDDUUUDDDDDDUUUUUUDDDDDDDDDUUUDDDUUUDDDDDDUUUDDD333333DDDDDDUUUUUUDDDDDDDDDUUUDDDDDDDDD333UUUUUUUUUUUUDDDDDDDDDUUUDDDDDDUUUDDDDDDUUUUUUDDDDDDDDDDDDDDD333DDDDDDDDD333333UUUUUUfffUUUDDD333DDDDDDUUUDDDDDDUUUDDDUUUUUUUUUDDDDDDUUUUUUDDDDDDDDD333DDDDDDDDDDDDUUUfffUUUUUUUUUUUUDDDDDDDDD333UUUUUUUUUDDD333DDDDDDUUUDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUDDDUUUDDDDDDDDDUUUDDDDDDDDDUUUUUUDDDUUUUUUDDDDDD333UUUUUUDDDUUUUUUUUUUUUUUUUUUUUUDDDUUUDDDUUU333UUUDDDDDDUUUUUU333DDDUUUDDDDDDDDD333DDDUUUUUUUUUUUU333DDDDDDUUUDDDfffUUUfffDDDDDDUUUDDDUUUUUUDDDUUUUUUUUUUUUDDDDDDUUUUUUDDDDDDDDD333DDDDDDDDDDDDUUUfffUUUUUUUUUUUUmmm´´´´´´ðð𜜜UUUDDD333DDDDDDUUUDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUDDDUUUDDDDDDDDDUUUDDDDDDDDDUUUUUUDDDUUUUUUDDDDDD333UUUUUUDDDUUUUUUUUUUUUUUUUUUUUUDDDUUUDDDUUU333UUUDDDDDDUUUUUU333DDDUUUDDDDDDDDD333DDDUUUUUUUUUUUU333DDDDDDUUUDDDfffUUUfffDDDDDDUUUDDDUUUUUUDDDUUUUUUUUUUUUDDDDDDUUUUUUDDDDDDDDD333DDDDDDDDDDDDUUUfffUUUUUUUUUUUUDDDDDDDDD333UUUUUUUUUDDD333DDDDDDUUUDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUUUUUUUDDDUUUDDDUUUfffUUUDDDDDDUUUDDDDDDDDD333DDD333DDDUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDUUUUUUUUUDDDDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDDDDUUU333DDDDDDDDDDDDDDD333UUUDDDDDDUUUDDDUUUDDDDDDDDDDDDDDDUUUDDDfffUUUUUUUUUDDD333DDDDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDDDDUUUUUUDDD333UUUDDDUUUUUUUUUUUUDDDUUUDDDDDDUUUDDDDDDUUUDDDDDDUUUDDDDDDUUUDDD333DDD333DDDDDDDDDDDDUUUDDDDDDUUUUUUDDDUUUfffUUUUUUDDDDDDUUUUUUDDDUUUDDDUUUfffUUUfffUUUDDDDDDUUUDDDDDDDDD333DDD333DDDUUUUUUUUUUUUUUUUUUDDD&&&===´´´´´´ööö‹‹‹DDDDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDDDDUUU333DDDDDDDDDDDDDDD333UUUDDDDDDUUUDDDUUUDDDDDDDDDDDDDDDUUUDDDfffUUUUUUUUUDDD333DDDDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDDDDUUUUUUDDD333UUUDDDUUUUUUUUUUUUDDDUUUDDDDDDUUUDDDDDDUUUDDDDDDUUUDDDDDDUUUDDD333DDD333DDDDDDDDDDDDUUUDDDDDDUUUUUUDDDUUUfffUUUUUUDDDDDDUUUUUUDDDUUUDDDUUUfffUUUfffUUUDDDDDDUUUDDDDDDDDD333DDD333DDDUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDUUUUUUUUUDDDDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDDDDUUU333DDDDDDDDDDDDDDD333UUUDDDDDDUUUDDDUUUDDDDDDDDDDDDDDDUUUDDDfffUUUUUUUUUDDD333UUUDDD333UUUDDDfffUUUDDDUUUUUUUUUUUUfffUUUUUUUUUUUUUUUDDD333DDDUUUUUUDDDUUUUUUDDDDDDUUUUUUDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDUUUUUUDDDUUUDDDUUUUUUUUUUUUUUUDDDUUUDDDUUUDDDUUUUUUUUUUUUUUUDDDUUUDDDUUUfffUUUDDDDDDDDDDDDDDDDDDDDDUUUUUUDDDDDDUUUUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUDDDDDDDDDUUUDDDUUUUUUfffUUUDDDDDDDDDDDDDDDDDDUUUUUUUUUDDDDDDUUUDDD333UUUDDDfffUUUDDDUUUUUUUUUUUUfffUUUUUUUUUUUUUUUDDD333---$$$´´´´´´÷÷÷gggDDDDDDUUUUUUDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDUUUUUUDDDUUUDDDUUUUUUUUUUUUUUUDDDUUUDDDUUUDDDUUUUUUUUUUUUUUUDDDUUUDDDUUUfffUUUDDDDDDDDDDDDDDDDDDDDDUUUUUUDDDDDDUUUUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDUUUUUUUUUUUUUUUDDDDDDDDDUUUDDDUUUUUUfffUUUDDDDDDDDDDDDDDDDDDUUUUUUUUUDDDDDDUUUDDD333UUUDDDfffUUUDDDUUUUUUUUUUUUfffUUUUUUUUUUUUUUUDDD333DDDUUUUUUDDDUUUUUUDDDDDDUUUUUUDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDUUUUUUDDDUUUDDDUUUUUUUUUUUUUUUDDDUUUDDDUUUDDDUUUUUUUUUDDDDDDDDDDDDUUUDDDUUUDDDUUUDDDfffffffffDDDDDDUUUUUUDDD333DDDUUUDDDDDDfffUUUDDDDDDUUUUUUUUUUUUDDDUUUUUUfffUUUDDDUUUUUUDDD333UUUUUUDDDDDDUUUDDDDDDUUUUUUDDDDDDfffUUUUUUDDDUUUUUUUUUDDDUUUUUUUUUUUUDDDUUUDDDDDDUUUUUUUUUUUUfff333UUUUUUUUUDDDDDDDDDUUUUUUUUUUUUDDDUUUUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDUUUUUUDDDUUUDDD"""DDDDDDDDDDDDDDDUUUDDDUUUDDDUUUDDDfffffffffDDDDDDUUUUUUDDD333DDD999888´´´¿¿¿öööDDDDDDUUUUUUUUUUUUDDDUUUUUUfffUUUDDDUUUUUUDDD333UUUUUUDDDDDDUUUDDDDDDUUUUUUDDDDDDfffUUUUUUDDDUUUUUUUUUDDDUUUUUUUUUUUUDDDUUUDDDDDDUUUUUUUUUUUUfff333UUUUUUUUUDDDDDDDDDUUUUUUUUUUUUDDDUUUUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDUUUDDDUUUUUUUUUDDDUUUUUUDDDUUUDDD"""DDDDDDDDDDDDDDDUUUDDDUUUDDDUUUDDDfffffffffDDDDDDUUUUUUDDD333DDDUUUDDDDDDfffUUUDDDDDDUUUUUUUUUUUUDDDUUUUUUfffUUUDDDUUUUUUDDD333UUUUUUDDDDDDUUUDDDDDDUUUUUUDDDDDDfffUUUUUUDDDUUUUUUUUUDDDUUUUUUUUUUUUDDDUUUDDDDDDUUUDDDDDDUUUUUUDDDfffUUUUUUUUUDDDDDDUUUUUUDDDUUUfffUUUDDDUUUfffUUUDDDDDDDDDDDDUUUDDDUUUfffUUUDDDDDDUUUDDD333333DDDUUUUUUDDDDDDDDD333DDDUUUDDDUUUfffUUUUUUUUUUUUUUUDDDDDDUUUUUUfffUUUUUUUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUUUUDDDUUUDDDUUUUUUfffDDDUUUUUUUUUUUUUUUUUUUUUDDDUUUDDDDDDUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUDDDUUUUUUUUUfffUUUUUUUUUDDDDDDUUUDDDDDDUUUUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDUUUUUUDDDfffUUUUUUUUUDDDDDDUUUUUUDDDUUUfffPPP´´´ÏÏÏÒÒÒDDDDDDDDDDDDUUUDDDUUUfffUUUDDDDDDUUUDDD333333DDDUUUUUUDDDDDDDDD333DDDUUUDDDUUUfffUUUUUUUUUUUUUUUDDDDDDUUUUUUfffUUUUUUUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUUUUDDDUUUDDDUUUUUUfffDDDUUUUUUUUUUUUUUUUUUUUUDDDUUUDDDDDDUUUDDDUUUDDDUUUUUUUUUUUUUUUUUUDDDUUUUUUUUUfffUUUUUUUUUDDDDDDUUUDDDDDDUUUUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDUUUUUUDDDfffUUUUUUUUUDDDDDDUUUUUUDDDUUUfffUUUDDDUUUfffUUUDDDDDDDDDDDDUUUDDDUUUfffUUUDDDDDDUUUDDD333333DDDUUUUUUDDDDDDDDD333DDDUUUDDDUUUfffUUUUUUUUUUUUUUUDDDDDDUUUUUUfffUUUUUUUUUUUU333DDDDDDUUUUUUUUUDDDUUUfffDDDUUUUUUDDDUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUDDDDDDDDDUUUUUUDDDDDDUUUDDDDDDDDDDDDDDDDDD333333UUUDDDUUUDDDDDD333333UUUUUUDDDfffUUUUUUUUUDDDDDDUUUDDDUUUDDDfffUUUfffUUUDDDDDDDDDUUUDDDUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUDDDUUUUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUUUUUUUDDDDDDUUUDDD333DDDDDDUUUfffUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUUUUDDDUUUDDDUUUUUUDDDDDDDDDUUUUUUDDDDDD333DDDUUU333DDDDDDUUUUUUUUUDDDUUUfffDDDUUUUUUDDDUUUUUUUUUUUUDDDUUUeee´´´æææ»»»DDDDDDUUUUUUDDDDDDUUUDDDDDDDDDDDDDDDDDD333333UUUDDDUUUDDDDDD333333UUUUUUDDDfffUUUUUUUUUDDDDDDUUUDDDUUUDDDfffUUUfffUUUDDDDDDDDDUUUDDDUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUDDDUUUUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUUUUUUUDDDDDDUUUDDD333DDDDDDUUUfffUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUUUUDDDUUUDDDUUUUUUDDDDDDDDDUUUUUUDDDDDD333DDDUUU333DDDDDDUUUUUUUUUDDDUUUfffDDDUUUUUUDDDUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUDDDDDDDDDUUUUUUDDDDDDUUUDDDDDDDDDDDDDDDDDD333333UUUDDDUUUDDDDDD333333UUUUUUDDDfffUUUUUUUUUDDDDDDUUUDDDUUUDDDfffUUUfffUUUDDDUUUUUUDDDUUUDDDDDDUUUUUUDDDDDDDDDDDDDDDDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUUUUUUUDDDUUUUUUUUUUUUUUUDDDDDDDDDDDD333DDD333333UUUDDDUUUDDDDDDDDD333DDDUUUUUUUUUUUU333UUU333UUUUUUDDDUUUDDDfffUUUUUUfffDDDUUUDDDDDDDDDUUUDDDUUUDDDDDDUUUUUUDDDDDDUUUDDDUUUUUUDDDUUUDDDUUUUUUUUUDDDDDDUUUDDDDDDUUUDDDDDDUUUDDDDDDDDDfffUUUfffUUUUUUDDDfffDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUfffUUUUUUDDDUUUUUUUUU333DDDDDD333DDDUUUUUUDDDUUUDDDDDDUUUUUUDDDDDDDDDDDDDDDDDDUUUUUUUUUDDDUUUUUUzzz´´´ðð𜜜DDDUUUUUUUUUUUUUUUDDDDDDDDDDDD333DDD333333UUUDDDUUUDDDDDDDDD333DDDUUUUUUUUUUUU333UUU333UUUUUUDDDUUUDDDfffUUUUUUfffDDDUUUDDDDDDDDDUUUDDDUUUDDDDDDUUUUUUDDDDDDUUUDDDUUUUUUDDDUUUDDDUUUUUUUUUDDDDDDUUUDDDDDDUUUDDDDDDUUUDDDDDDDDDfffUUUfffUUUUUUDDDfffDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUfffUUUUUUDDDUUUUUUUUU333DDDDDD333DDDUUUUUUDDDUUUDDDDDDUUUUUUDDDDDDDDDDDDDDDDDDUUUUUUUUUDDDUUUUUUUUUUUUUUUUUUUUUDDDUUUUUUUUUUUUUUUDDDDDDDDDDDD333DDD333333UUUDDDUUUDDDDDDDDD333DDDUUUUUUUUUUUU333UUU333UUUUUUDDDUUUDDDfffUUUUUUfffDDDUUUUUUDDDUUUDDDDDDDDDUUUDDDDDDDDDDDDDDDUUUUUUUUUUUUDDDUUUUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDUUUDDD333333DDDDDDUUUDDDDDDDDDDDD333333DDDDDDUUUDDDUUU333DDDDDDUUUDDDUUUDDDDDD333UUUffffffUUUUUUDDD333DDDDDDUUUUUUUUUDDDDDDUUUUUUDDDDDDUUUUUUUUUDDDUUUUUUUUUfffUUU333UUUDDDDDDUUUUUUUUUDDDDDDDDDUUUDDDDDDUUUUUUDDDDDDDDDUUUUUUDDDUUUfffUUUUUUUUUUUUUUUDDDUUUUUUfffUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDUUUDDDDDDDDDDDDDDDUUUUUUUUUUUUDDDUUUUUUDDD
-
-
-•••´´´ööö‹‹‹UUUUUUUUUUUUDDDDDDDDDUUUDDD333333DDDDDDUUUDDDDDDDDDDDD333333DDDDDDUUUDDDUUU333DDDDDDUUUDDDUUUDDDDDD333UUUffffffUUUUUUDDD333DDDDDDUUUUUUUUUDDDDDDUUUUUUDDDDDDUUUUUUUUUDDDUUUUUUUUUfffUUU333UUUDDDDDDUUUUUUUUUDDDDDDDDDUUUDDDDDDUUUUUUDDDDDDDDDUUUUUUDDDUUUfffUUUUUUUUUUUUUUUDDDUUUUUUfffUUUDDDDDDUUUDDDDDDDDDDDDDDDDDDUUUDDDUUUDDDDDDDDDUUUDDDDDDDDDDDDDDDUUUUUUUUUUUUDDDUUUUUUDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDUUUDDD333333DDDDDDUUUDDDDDDDDDDDD333333DDDDDDUUUDDDUUU333DDDDDDUUUDDDUUUDDDDDD333UUUffffffUUUUUUDDDDDDDDDUUUUUUUUUfffUUUDDDUUUDDDUUUUUUUUUUUUUUUDDDDDDDDDDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDDDDDDDUUU333333DDDUUUDDDDDDDDD333333DDD333DDD333DDDDDDDDDDDDDDDUUUUUUDDDDDDUUUUUUUUU333UUUfffUUUUUUDDD333333DDD333UUUUUUDDDDDDDDDUUUfffUUUUUUDDDDDDDDDDDDUUUUUUDDDfffDDDDDDUUUUUUDDDDDDUUUDDDDDD333UUUUUUUUUDDDDDDUUUUUUUUUUUUDDDDDD333DDDDDDUUUDDDUUUUUUUUUDDDDDDUUUUUUDDDUUU333UUUUUUUUU333DDDUUUUUUUUUDDDDDDUUUUUUUUUfffUUUDDDUUUDDDUUUUUUUUUUUUUUUDDDDDDDDDDDDUUU
-
-
-•••´´´ööö‹‹‹UUUDDDDDDUUUUUUUUUDDDDDDDDDDDDDDDDDDDDDDDDDDD999´´´ÏÏÏÔÔÔUUUlll›››UUUUUUDDD333DDDDDDUUUUUUDDDDDDUUUUUUDDDDDDDDDDDDUUUDDDUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDUUUDDD333UUUDDDUUUDDDUUUUUUUUUUUUDDDDDDUUUUUUDDDUUUUUUUUUUUUDDDDDDDDDUUUUUUUUUUUUDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDfffDDDDDDDDDUUU333DDD333UUUDDDDDDDDDDDDUUUUUUUUUDDDDDDUUUUUUDDDUUUDDDDDDUUUUUUfff333DDDUUUUUUUUUDDDUUUfffUUUUUUUUU333ffffffDDDDDDUUUUUUUUUUUUUUUUUUUUUDDDUUUUUUDDDfff333DDDDDDUUUDDD333DDDDDDUUUDDDUUUDDDDDDUUUDDD333DDD333DDDDDDUUUDDDDDDDDD000%%%………ÚÚÚžžž333DDDUUUUUUUUUDDDUUUDDDDDDUUUDDDDDD
-
-
-¦¦¦¿¿¿ðððWWWUUUDDDfffDDDDDDUUUDDDDDDUUUDDDDDDUUUUUU
-
-
-´´´ïïŠUUUDDDDDDUUUDDDUUUDDDDDDDDDUUU333DDDDDD///???´´´ùùù€€€DDDDDDDDDDDDDDDUUUUUUUUUDDDDDDDDDDDD•••´´´ãããÂÂÂUUUDDDDDDUUUDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDDDD555 ´´´´´´öööDDDUUUUUUDDDDDDUUUUUUDDDUUUUUU---///´´´îîî®®®DDDDDDDDDDDDDDDUUUDDDUUUUUUDDDDDDDDD333UUU„„„´´´øøøDDDUUUUUUUUUDDDUUUUUUDDDDDDDDDUUUDDDUUUUUUfffUUULLL´´´¿¿¿óóóDDDDDDDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDUUUUUU333DDDDDDUUUUUUDDDDDDUUUDDDUUUDDDDDDDDDUUU333DDDDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUDDDDDDDDDDDDDDDfffDDDfffUUUUUUDDDDDDUUUDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUDDDDDDUUUDDDDDDDDDUUUUUUUUUUUUDDDDDDUUUDDDDDDDDD333DDDUUUUUUDDDDDDDDDUUUDDD333DDDDDDDDDUUUDDDUUU333333333DDDUUUfffUUUUUUUUUUUUDDDDDDDDD333333DDDDDD333DDDUUUDDDUUUDDDDDDDDDDDDUUUDDDDDDUUUDDDUUUUUUUUUUUUfffDDD|||´´´éé饥¥DDDUUUUUUDDDUUUUUUUUUUUUUUUDDDUUUDDDDDD---´´´ÔÔÔ»»»UUUDDDUUUUUUUUU333DDDDDDUUUDDDDDDDDDUUUUUUUUUUUU```´´´ïïï›››fffDDDDDDDDDDDDDDDUUUDDDDDDDDDDDDDDDDDDDDDUUUBBB­­­¹¹¹õõõWWWUUUUUUUUUUUUDDDDDDUUUDDDDDDDDD333DDDUUU```´´´÷÷÷xxxDDD333DDDDDDDDDUUUDDDUUU333333333DDD
-
-
-´´´ñññfffDDDDDDDDDUUUUUUUUUUUUDDDUUUDDDUUUUUUUUUUUUDDD
-
-
-´´´èè踸¸DDD333DDDDDDUUUUUUUUUDDDDDDDDDUUUDDDeee´´´´´´úúúDDD333UUUDDDDDDUUUDDDDDDUUUDDDUUUDDDUUUDDDLLL­­­ââ⢢¢UUUUUUUUUfffDDDDDDUUUDDDDDDDDDDDD999###´´´ãããÂÂÂUUUUUUDDDUUUUUUDDDDDDDDDUUUUUUUUUDDD333555'''­­­´´´úúú———fffDDDUUUUUUDDDUUUDDDUUUDDDUUUUUUDDDDDDUUUfffUUU
-
-
-•••´´´õõõ€€€DDDDDDUUUUUUDDDDDDUUUUUUUUUDDDDDDAAAAAA{{{•••´´´´´´ùùùUUUUUUDDDDDDUUUDDDDDDDDDUUUDDDUUUUUUDDDUUUUUUfff```´´´ñññUUU333DDDDDDUUUDDDDDD333DDDUUUUUUDDDUUUUUUUUUDDDUUUUUUUUUDDDDDDDDDfffDDDUUUUUUUUUUUUUUU333DDDUUUDDDDDDDDDDDDDDDUUUDDDUUU333DDDDDDDDD333DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDUUUUUUUUUDDDDDDUUUUUUUUUUUUDDDfffUUUUUUUUUUUUDDD333DDDDDDDDDDDDUUUDDDUUUUUUUUUUUUDDDDDDDDDfffUUUUUUUUUDDDUUUUUUUUUDDD333DDDDDDUUUUUUDDD333DDDUUUUUUDDDDDDUUUDDDDDDDDDUUUUUUDDDDDDDDDDDDDDDDDDDDD333fffUUUUUUUUUUUUDDDUUUUUUDDDUUUUUUUUU333333DDDDDD333DDDDDDUUUDDDUUUUUUUUUUUUPPP´´´´´´úúúŒŒŒUUUDDDUUUDDDDDDDDDUUUDDDDDDUUUDDD888<<<™™™ŸŸŸ´´´èèèÃÃÃUUUDDDUUUDDDDDDUUUDDDUUUUUUfffUUUDDDUUUUUUUUU===´´´´´´úúúDDDDDDDDDDDDDDDDDDDDDUUUDDDDDDDDDUUUUUUDDDDDDUUU
-
-
-SSSªªª´´´ÝÝÝçç爈ˆUUUUUUUUUDDDUUU]]]˜˜˜dddUUUDDDDDDDDDDDDDDDUUUUUUDDDDDDUUUUUUDDDUUUDDDDDDDDDQQQ´´´´´´´´´ÅÅÅÚÚÚÓÓÓÍÍÍÉÉÉ”””TTTUUUDDDDDDDDDDDDDDDUUU[[[´´´´´´ÌÌÌßßßßßßÒÒÒ‘‘‘jjjUUUUUUDDDUUUUUUUUUfffUUUUUUUUU
-
-
-NNN•••´´´¹¹¹ÉÉÉÓÓÓÃÃߟŸsss___DDDDDDDDDDDDDDDDDDUUUHHHŸŸŸÃÃþ¾¾›››ggg[[[DDDDDDDDDfffUUUDDDUUUUUUUUUfff///ZZZ±±±£££fffDDDDDDDDDUUUDDDfffDDDUUUDDDUUUDDDDDD333UUUDDDBBBnnnŸŸŸ´´´¿¿¿ÏÏÏÐÐп¿¿ŒŒŒpppTTTDDDDDD333UUUDDDDDD===
diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc
index 3a15d84982..0b06858536 100644
--- a/gtk2_ardour/streamview.cc
+++ b/gtk2_ardour/streamview.cc
@@ -165,9 +165,15 @@ StreamView::add_region_view (boost::shared_ptr<Region> r)
}
void
-StreamView::remove_region_view (boost::shared_ptr<Region> r)
+StreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
{
- ENSURE_GUI_THREAD (bind (mem_fun (*this, &StreamView::remove_region_view), r));
+ ENSURE_GUI_THREAD (bind (mem_fun (*this, &StreamView::remove_region_view), weak_r));
+
+ boost::shared_ptr<Region> r (weak_r.lock());
+
+ if (!r) {
+ return;
+ }
for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
if (((*i)->region()) == r) {
@@ -178,27 +184,6 @@ StreamView::remove_region_view (boost::shared_ptr<Region> r)
}
}
-#if 0
-(unused)
-void
-StreamView::remove_rec_region (boost::shared_ptr<Region> r)
-{
- ENSURE_GUI_THREAD(bind (mem_fun (*this, &StreamView::remove_rec_region), r));
-
- if (!Gtkmm2ext::UI::instance()->caller_is_ui_thread()) {
- fatal << "region deleted from non-GUI thread!" << endmsg;
- /*NOTREACHED*/
- }
-
- for (list<boost::shared_ptr<Region> >::iterator i = rec_regions.begin(); i != rec_regions.end(); ++i) {
- if (*i == r) {
- rec_regions.erase (i);
- break;
- }
- }
-}
-#endif
-
void
StreamView::undisplay_diskstream ()
{
@@ -334,7 +319,7 @@ StreamView::update_rec_box ()
if (rec_active && rec_rects.size() > 0) {
/* only update the last box */
RecBoxInfo & rect = rec_rects.back();
- jack_nframes_t at = _trackview.get_diskstream()->current_capture_end();
+ nframes_t at = _trackview.get_diskstream()->current_capture_end();
double xstart;
double xend;
@@ -399,7 +384,7 @@ StreamView::set_selected_regionviews (RegionSelection& regions)
}
void
-StreamView::get_selectables (jack_nframes_t start, jack_nframes_t end, list<Selectable*>& results)
+StreamView::get_selectables (nframes_t start, nframes_t end, list<Selectable*>& results)
{
for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
if ((*i)->region()->coverage(start, end) != OverlapNone) {
diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h
index e965fc7c94..3774fd4dbb 100644
--- a/gtk2_ardour/streamview.h
+++ b/gtk2_ardour/streamview.h
@@ -44,8 +44,8 @@ namespace ARDOUR {
struct RecBoxInfo {
ArdourCanvas::SimpleRect* rectangle;
- jack_nframes_t start;
- jack_nframes_t length;
+ nframes_t start;
+ nframes_t length;
};
class PublicEditor;
@@ -87,7 +87,7 @@ public:
void foreach_regionview (sigc::slot<void,RegionView*> slot);
void set_selected_regionviews (RegionSelection&);
- void get_selectables (jack_nframes_t start, jack_nframes_t end, list<Selectable* >&);
+ void get_selectables (nframes_t start, nframes_t end, list<Selectable* >&);
void get_inverted_selectables (Selection&, list<Selectable* >& results);
void add_region_view (boost::shared_ptr<ARDOUR::Region>);
@@ -108,7 +108,7 @@ protected:
virtual void update_rec_regions () = 0;
virtual void add_region_view_internal (boost::shared_ptr<ARDOUR::Region>, bool wait_for_waves) = 0;
- virtual void remove_region_view (boost::shared_ptr<ARDOUR::Region> );
+ virtual void remove_region_view (boost::weak_ptr<ARDOUR::Region> );
//void remove_rec_region (boost::shared_ptr<ARDOUR::Region>); (unused)
void display_diskstream (boost::shared_ptr<ARDOUR::Diskstream>);
diff --git a/gtk2_ardour/tempo_dialog.cc b/gtk2_ardour/tempo_dialog.cc
index 7eb0362580..c5816e36d1 100644
--- a/gtk2_ardour/tempo_dialog.cc
+++ b/gtk2_ardour/tempo_dialog.cc
@@ -13,7 +13,7 @@ using namespace Gtkmm2ext;
using namespace ARDOUR;
using namespace PBD;
-TempoDialog::TempoDialog (TempoMap& map, jack_nframes_t frame, const string & action)
+TempoDialog::TempoDialog (TempoMap& map, nframes_t frame, const string & action)
: ArdourDialog ("tempo dialog"),
bpm_frame (_("Beats per minute")),
ok_button (action),
@@ -194,7 +194,7 @@ TempoDialog::get_bbt_time (BBT_Time& requested)
}
-MeterDialog::MeterDialog (TempoMap& map, jack_nframes_t frame, const string & action)
+MeterDialog::MeterDialog (TempoMap& map, nframes_t frame, const string & action)
: ArdourDialog ("meter dialog"),
note_frame (_("Meter denominator")),
bpb_frame (_("Beats per bar")),
diff --git a/gtk2_ardour/tempo_dialog.h b/gtk2_ardour/tempo_dialog.h
index 2c6827954f..720a87c4ba 100644
--- a/gtk2_ardour/tempo_dialog.h
+++ b/gtk2_ardour/tempo_dialog.h
@@ -33,7 +33,7 @@ struct TempoDialog : public ArdourDialog
Gtk::Frame when_frame;
char buf[64];
- TempoDialog (ARDOUR::TempoMap&, jack_nframes_t, const string & action);
+ TempoDialog (ARDOUR::TempoMap&, nframes_t, const string & action);
TempoDialog (ARDOUR::TempoSection&, const string & action);
double get_bpm ();
@@ -66,7 +66,7 @@ struct MeterDialog : public ArdourDialog
Gtk::Frame when_frame;
char buf[64];
- MeterDialog (ARDOUR::TempoMap&, jack_nframes_t, const string & action);
+ MeterDialog (ARDOUR::TempoMap&, nframes_t, const string & action);
MeterDialog (ARDOUR::MeterSection&, const string & action);
double get_bpb ();
diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc
index 2e1f3c5273..2119efc722 100644
--- a/gtk2_ardour/time_axis_view.cc
+++ b/gtk2_ardour/time_axis_view.cc
@@ -575,7 +575,7 @@ TimeAxisView::set_samples_per_unit (double spu)
}
void
-TimeAxisView::show_timestretch (jack_nframes_t start, jack_nframes_t end)
+TimeAxisView::show_timestretch (nframes_t start, nframes_t end)
{
for (vector<TimeAxisView*>::iterator i = children.begin(); i != children.end(); ++i) {
(*i)->show_timestretch (start, end);
@@ -617,7 +617,7 @@ TimeAxisView::show_selection (TimeSelection& ts)
selection_group->raise_to_top();
for (list<AudioRange>::iterator i = ts.begin(); i != ts.end(); ++i) {
- jack_nframes_t start, end, cnt;
+ nframes_t start, end, cnt;
start = (*i).start;
end = (*i).end;
@@ -795,7 +795,7 @@ TimeAxisView::remove_child (TimeAxisView* child)
}
void
-TimeAxisView::get_selectables (jack_nframes_t start, jack_nframes_t end, double top, double bot, list<Selectable*>& result)
+TimeAxisView::get_selectables (nframes_t start, nframes_t end, double top, double bot, list<Selectable*>& result)
{
return;
}
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index eff2e5fb6a..0ba4dc1938 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -166,7 +166,7 @@ class TimeAxisView : public virtual AxisView
virtual void show_selection (TimeSelection&);
virtual void hide_selection ();
virtual void reshow_selection (TimeSelection&);
- virtual void show_timestretch (jack_nframes_t start, jack_nframes_t end);
+ virtual void show_timestretch (nframes_t start, nframes_t end);
virtual void hide_timestretch ();
virtual void hide_dependent_views (TimeAxisViewItem&) {}
@@ -175,18 +175,18 @@ class TimeAxisView : public virtual AxisView
/* editing operations */
virtual bool cut_copy_clear (Selection&, Editing::CutCopyOp) { return false; }
- virtual bool paste (jack_nframes_t, float times, Selection&, size_t nth) { return false; }
+ virtual bool paste (nframes_t, float times, Selection&, size_t nth) { return false; }
virtual void set_selected_regionviews (RegionSelection&) {}
virtual void set_selected_points (PointSelection&) {}
- virtual boost::shared_ptr<ARDOUR::Region> find_next_region (jack_nframes_t pos, ARDOUR::RegionPoint, int32_t dir) {
+ virtual boost::shared_ptr<ARDOUR::Region> find_next_region (nframes_t pos, ARDOUR::RegionPoint, int32_t dir) {
return boost::shared_ptr<ARDOUR::Region> ();
}
void order_selection_trims (ArdourCanvas::Item *item, bool put_start_on_top);
- virtual void get_selectables (jack_nframes_t start, jack_nframes_t end, double top, double bot, list<Selectable*>& results);
+ virtual void get_selectables (nframes_t start, nframes_t end, double top, double bot, list<Selectable*>& results);
virtual void get_inverted_selectables (Selection&, list<Selectable *>& results);
/* state/serialization management */
diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc
index 28fafcaa09..b23e7972ae 100644
--- a/gtk2_ardour/time_axis_view_item.cc
+++ b/gtk2_ardour/time_axis_view_item.cc
@@ -68,7 +68,7 @@ double TimeAxisViewItem::NAME_HIGHLIGHT_THRESH;
* @param duration the duration of this item
*/
TimeAxisViewItem::TimeAxisViewItem(const string & it_name, ArdourCanvas::Group& parent, TimeAxisView& tv, double spu, Gdk::Color& base_color,
- jack_nframes_t start, jack_nframes_t duration,
+ nframes_t start, nframes_t duration,
Visibility vis)
: trackview (tv)
{
@@ -242,7 +242,7 @@ TimeAxisViewItem::~TimeAxisViewItem()
* @return true if the position change was a success, false otherwise
*/
bool
-TimeAxisViewItem::set_position(jack_nframes_t pos, void* src, double* delta)
+TimeAxisViewItem::set_position(nframes_t pos, void* src, double* delta)
{
if (position_locked) {
return false;
@@ -282,7 +282,7 @@ TimeAxisViewItem::set_position(jack_nframes_t pos, void* src, double* delta)
*
* @return the position of this item
*/
-jack_nframes_t
+nframes_t
TimeAxisViewItem::get_position() const
{
return frame_position;
@@ -296,7 +296,7 @@ TimeAxisViewItem::get_position() const
* @return true if the duration change was succesful, false otherwise
*/
bool
-TimeAxisViewItem::set_duration (jack_nframes_t dur, void* src)
+TimeAxisViewItem::set_duration (nframes_t dur, void* src)
{
if ((dur > max_item_duration) || (dur < min_item_duration)) {
warning << string_compose (_("new duration %1 frames is out of bounds for %2"), get_item_name(), dur)
@@ -310,9 +310,7 @@ TimeAxisViewItem::set_duration (jack_nframes_t dur, void* src)
item_duration = dur;
- double pixel_width = trackview.editor.frame_to_pixel (dur);
-
- reset_width_dependent_items (pixel_width);
+ reset_width_dependent_items (trackview.editor.frame_to_pixel (dur));
DurationChanged (dur, src) ; /* EMIT_SIGNAL */
return true;
@@ -322,7 +320,7 @@ TimeAxisViewItem::set_duration (jack_nframes_t dur, void* src)
* Returns the duration of this item
*
*/
-jack_nframes_t
+nframes_t
TimeAxisViewItem::get_duration() const
{
return (item_duration);
@@ -335,7 +333,7 @@ TimeAxisViewItem::get_duration() const
* @param src the identity of the object that initiated the change
*/
void
-TimeAxisViewItem::set_max_duration(jack_nframes_t dur, void* src)
+TimeAxisViewItem::set_max_duration(nframes_t dur, void* src)
{
max_item_duration = dur ;
MaxDurationChanged(max_item_duration, src) ; /* EMIT_SIGNAL */
@@ -346,7 +344,7 @@ TimeAxisViewItem::set_max_duration(jack_nframes_t dur, void* src)
*
* @return the maximum duration that this item may be set to
*/
-jack_nframes_t
+nframes_t
TimeAxisViewItem::get_max_duration() const
{
return (max_item_duration) ;
@@ -359,7 +357,7 @@ TimeAxisViewItem::get_max_duration() const
* @param src the identity of the object that initiated the change
*/
void
-TimeAxisViewItem::set_min_duration(jack_nframes_t dur, void* src)
+TimeAxisViewItem::set_min_duration(nframes_t dur, void* src)
{
min_item_duration = dur ;
MinDurationChanged(max_item_duration, src) ; /* EMIT_SIGNAL */
@@ -370,7 +368,7 @@ TimeAxisViewItem::set_min_duration(jack_nframes_t dur, void* src)
*
* @return the nimum duration that this item mey be set to
*/
-jack_nframes_t
+nframes_t
TimeAxisViewItem::get_min_duration() const
{
return(min_item_duration) ;
@@ -851,7 +849,7 @@ TimeAxisViewItem::reset_width_dependent_items (double pixel_width)
}
} else {
name_highlight->show();
- if (name_text) {
+ if (name_text && !get_item_name().empty()) {
name_text->show();
reset_name_width (pixel_width);
}
diff --git a/gtk2_ardour/time_axis_view_item.h b/gtk2_ardour/time_axis_view_item.h
index 9ddb06876a..e27b944e2a 100644
--- a/gtk2_ardour/time_axis_view_item.h
+++ b/gtk2_ardour/time_axis_view_item.h
@@ -48,14 +48,14 @@ class TimeAxisViewItem : public Selectable
* @param src the identity of the object that initiated the change
* @return true if the position change was a success, false otherwise
*/
- virtual bool set_position(jack_nframes_t pos, void* src, double* delta = 0) ;
+ virtual bool set_position(nframes_t pos, void* src, double* delta = 0) ;
/**
* Return the position of this item upon the timeline
*
* @return the position of this item
*/
- jack_nframes_t get_position() const ;
+ nframes_t get_position() const ;
/**
* Sets the duration of this item
@@ -64,13 +64,13 @@ class TimeAxisViewItem : public Selectable
* @param src the identity of the object that initiated the change
* @return true if the duration change was succesful, false otherwise
*/
- virtual bool set_duration(jack_nframes_t dur, void* src) ;
+ virtual bool set_duration(nframes_t dur, void* src) ;
/**
* Returns the duration of this item
*
*/
- jack_nframes_t get_duration() const ;
+ nframes_t get_duration() const ;
/**
* Sets the maximum duration that this item make have.
@@ -78,14 +78,14 @@ class TimeAxisViewItem : public Selectable
* @param dur the new maximum duration
* @param src the identity of the object that initiated the change
*/
- virtual void set_max_duration(jack_nframes_t dur, void* src) ;
+ virtual void set_max_duration(nframes_t dur, void* src) ;
/**
* Returns the maxmimum duration that this item may be set to
*
* @return the maximum duration that this item may be set to
*/
- jack_nframes_t get_max_duration() const ;
+ nframes_t get_max_duration() const ;
/**
* Sets the minimu duration that this item may be set to
@@ -93,14 +93,14 @@ class TimeAxisViewItem : public Selectable
* @param the minimum duration that this item may be set to
* @param src the identity of the object that initiated the change
*/
- virtual void set_min_duration(jack_nframes_t dur, void* src) ;
+ virtual void set_min_duration(nframes_t dur, void* src) ;
/**
* Returns the minimum duration that this item mey be set to
*
* @return the nimum duration that this item mey be set to
*/
- jack_nframes_t get_min_duration() const ;
+ nframes_t get_min_duration() const ;
/**
* Sets whether the position of this Item is locked to its current position
@@ -295,19 +295,19 @@ class TimeAxisViewItem : public Selectable
sigc::signal<void,std::string,std::string,void*> NameChanged ;
/** Emiited when the position of this item changes */
- sigc::signal<void,jack_nframes_t,void*> PositionChanged ;
+ sigc::signal<void,nframes_t,void*> PositionChanged ;
/** Emitted when the position lock of this item is changed */
sigc::signal<void,bool,void*> PositionLockChanged ;
/** Emitted when the duration of this item changes */
- sigc::signal<void,jack_nframes_t,void*> DurationChanged ;
+ sigc::signal<void,nframes_t,void*> DurationChanged ;
/** Emitted when the maximum item duration is changed */
- sigc::signal<void,jack_nframes_t,void*> MaxDurationChanged ;
+ sigc::signal<void,nframes_t,void*> MaxDurationChanged ;
/** Emitted when the mionimum item duration is changed */
- sigc::signal<void,jack_nframes_t,void*> MinDurationChanged ;
+ sigc::signal<void,nframes_t,void*> MinDurationChanged ;
protected:
@@ -334,7 +334,7 @@ class TimeAxisViewItem : public Selectable
* @param duration the duration of this item
*/
TimeAxisViewItem(const std::string & it_name, ArdourCanvas::Group& parent, TimeAxisView& tv, double spu, Gdk::Color& base_color,
- jack_nframes_t start, jack_nframes_t duration, Visibility v = Visibility (0));
+ nframes_t start, nframes_t duration, Visibility v = Visibility (0));
/**
* Calculates some contrasting color for displaying various parts of this item, based upon the base color
@@ -379,16 +379,16 @@ class TimeAxisViewItem : public Selectable
bool position_locked ;
/** The posotion of this item on the timeline */
- jack_nframes_t frame_position ;
+ nframes_t frame_position ;
/** the duration of this item upon the timeline */
- jack_nframes_t item_duration ;
+ nframes_t item_duration ;
/** the maximum duration that we allow this item to take */
- jack_nframes_t max_item_duration ;
+ nframes_t max_item_duration ;
/** the minimu duration that we allow this item to take */
- jack_nframes_t min_item_duration ;
+ nframes_t min_item_duration ;
/** indicates whether this Max Duration constraint is active */
bool max_duration_active ;
diff --git a/gtk2_ardour/time_selection.cc b/gtk2_ardour/time_selection.cc
index 518e04cccb..c0a05abc45 100644
--- a/gtk2_ardour/time_selection.cc
+++ b/gtk2_ardour/time_selection.cc
@@ -69,14 +69,14 @@ TimeSelection::consolidate ()
return changed;
}
-jack_nframes_t
+nframes_t
TimeSelection::start ()
{
if (empty()) {
return 0;
}
- jack_nframes_t first = max_frames;
+ nframes_t first = max_frames;
for (std::list<AudioRange>::iterator i = begin(); i != end(); ++i) {
if ((*i).start < first) {
@@ -86,10 +86,10 @@ TimeSelection::start ()
return first;
}
-jack_nframes_t
+nframes_t
TimeSelection::end_frame ()
{
- jack_nframes_t last = 0;
+ nframes_t last = 0;
/* XXX make this work like RegionSelection: no linear search needed */
@@ -101,7 +101,7 @@ TimeSelection::end_frame ()
return last;
}
-jack_nframes_t
+nframes_t
TimeSelection::length()
{
return end_frame() - start() + 1;
diff --git a/gtk2_ardour/time_selection.h b/gtk2_ardour/time_selection.h
index f0db774733..54a8844ce0 100644
--- a/gtk2_ardour/time_selection.h
+++ b/gtk2_ardour/time_selection.h
@@ -27,9 +27,9 @@ struct TimeSelection : public std::list<ARDOUR::AudioRange> {
ARDOUR::AudioRange& operator[](uint32_t);
- jack_nframes_t start();
- jack_nframes_t end_frame();
- jack_nframes_t length();
+ nframes_t start();
+ nframes_t end_frame();
+ nframes_t length();
bool consolidate ();
};
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc
index ef90c34755..76b237713a 100644
--- a/gtk2_ardour/utils.cc
+++ b/gtk2_ardour/utils.cc
@@ -71,8 +71,7 @@ fit_to_pixels (const ustring& str, int pixel_width, Pango::FontDescription& font
break;
}
- ustr.erase (last);
- --last;
+ ustr.erase (last--);
}
return ustr;
@@ -469,3 +468,46 @@ get_xpm (std::string name)
return (xpm_map[name]);
}
+Glib::RefPtr<Gdk::Pixbuf>
+get_icon (const char* cname)
+{
+ string name = cname;
+ name += X_(".png");
+
+ string path = ARDOUR::find_data_file (name, "icons");
+
+ if (path.empty()) {
+ fatal << string_compose (_("cannot find icon image for %1"), name) << endmsg;
+ /*NOTREACHED*/
+ }
+
+ return Gdk::Pixbuf::create_from_file (path);
+}
+
+string
+longest (vector<string>& strings)
+{
+ if (strings.empty()) {
+ return string ("");
+ }
+
+ vector<string>::iterator longest = strings.begin();
+ string::size_type longest_length = (*longest).length();
+
+ vector<string>::iterator i = longest;
+ ++i;
+
+ while (i != strings.end()) {
+
+ string::size_type len = (*i).length();
+
+ if (len > longest_length) {
+ longest = i;
+ longest_length = len;
+ }
+
+ ++i;
+ }
+
+ return *longest;
+}
diff --git a/gtk2_ardour/utils.h b/gtk2_ardour/utils.h
index c0b7aac524..bb2a21d6c3 100644
--- a/gtk2_ardour/utils.h
+++ b/gtk2_ardour/utils.h
@@ -23,6 +23,7 @@
#include <string>
#include <cmath>
+#include <vector>
#include <ardour/types.h>
#include <libgnomecanvasmm/line.h>
#include <gdkmm/types.h>
@@ -75,8 +76,10 @@ void set_color (Gdk::Color&, int);
bool key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev);
-Glib::RefPtr<Gdk::Pixbuf> get_xpm(std::string);
+Glib::RefPtr<Gdk::Pixbuf> get_xpm (std::string);
+Glib::RefPtr<Gdk::Pixbuf> get_icon (const char*);
static std::map<std::string, Glib::RefPtr<Gdk::Pixbuf> > xpm_map;
const char* const *get_xpm_data (std::string path);
+std::string longest (std::vector<std::string>&);
#endif /* __ardour_gtk_utils_h__ */
diff --git a/gtk2_ardour/visual_time_axis.cc b/gtk2_ardour/visual_time_axis.cc
index e44ea4011e..fc71795a71 100644
--- a/gtk2_ardour/visual_time_axis.cc
+++ b/gtk2_ardour/visual_time_axis.cc
@@ -420,7 +420,7 @@ VisualTimeAxis::name_entry_key_release_handler(GdkEventKey* ev)
// Super class methods not handled by VisualTimeAxis
void
-VisualTimeAxis::show_timestretch (jack_nframes_t start, jack_nframes_t end)
+VisualTimeAxis::show_timestretch (nframes_t start, nframes_t end)
{
// Not handled by purely visual TimeAxis
}
diff --git a/gtk2_ardour/visual_time_axis.h b/gtk2_ardour/visual_time_axis.h
index c68ce8da1c..d569ca3733 100644
--- a/gtk2_ardour/visual_time_axis.h
+++ b/gtk2_ardour/visual_time_axis.h
@@ -251,7 +251,7 @@ class VisualTimeAxis : public TimeAxisView
*
* @todo should VisualTimeAxis handle this?
*/
- void show_timestretch (jack_nframes_t start, jack_nframes_t end);
+ void show_timestretch (nframes_t start, nframes_t end);
/**
* Not handle by purely visual TimeAxis
diff --git a/icons/ardour_bw.ai b/icons/ardour_bw.ai
new file mode 100644
index 0000000000..958931f386
--- /dev/null
+++ b/icons/ardour_bw.ai
@@ -0,0 +1,287 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 612 792
+%%Title: Adobe Illustator 3 Editable Document
+%%Creator: ps2ai.ps vers. 2.14 (C) 1993-94 Jason Olszewski
+%%TemplateBox: 0 0 612 792
+%%AI3_Margin:0 0 0 0
+%%EndComments
+%%BeginProlog
+/m {moveto} def /l {lineto} def /c {curveto} def
+/S {stroke} def /F {fill} def
+/s {closepath S} def /f {closepath F} def
+/q {gsave} def /Q {grestore} def /W {clip} def /k {setcmykcolor} def
+/i {setflat} def /J {setlinecap} def /j {setlinejoin} def
+/w {setlinewidth} def /M {setmiterlimit} def /d {setdash} def
+/u {gsave} def /U {grestore} def /K {k} def
+/N {newpath} def /n {closepath N} def
+/g {setgray} def /G {g} def
+/x {pop pop k} def /X {x} def
+/H {} def /h {H closepath} def /D {pop} def
+/*u { /N {/spth 0 def}def /S{/spth 1 def}def /F {/spth 2 def} def} def
+/*U { spth 0 eq {newpath} if spth 1 eq {stroke} if spth 2 eq {fill} if
+ /N {newpath} def /S {stroke} def /F {fill} def } def
+/TC {pop pop pop} def /Tr {pop} def
+/To {pop gsave} def /TO {grestore} def
+/Tp {pop matrix astore concat} def /TP {0 0 moveto} def
+/a_str 40 string def /cnt 0 def /h_str (X) def /undsc (_) 0 get def
+/fntfix {a_str cvs dup length 1 sub /f_str exch string def
+ {dup undsc eq {pop}{f_str cnt 3 -1 roll put /cnt cnt 1 add def
+ } ifelse } forall flush /cnt 0 def f_str cvn } bind def
+/Tf {exch fntfix findfont exch scalefont setfont} def /Tx {show} def
+
+userdict /Adobe_packedarray 2 dict dup begin put
+/initialize {} def /terminate {} def
+userdict /Adobe_cmykcolor 2 dict dup begin put
+/initialize {} def /terminate {} def
+userdict /Adobe_cshow 2 dict dup begin put
+/initialize {} def /terminate {} def
+userdict /Adobe_customcolor 2 dict dup begin put
+/initialize {} def /terminate {} def
+userdict /Adobe_typography_AI3 2 dict dup begin put
+/initialize {} def /terminate {} def
+userdict /Adobe_IllustratorA_AI3 2 dict dup begin put
+/initialize {} def /terminate {} def
+%%EndProlog
+%%BeginSetup
+Adobe_packedarray /initialize get exec
+Adobe_cmykcolor /initialize get exec
+Adobe_cshow /initialize get exec
+Adobe_customcolor /initialize get exec
+Adobe_typography_AI3 /initialize get exec
+Adobe_IllustratorA_AI3 /initialize get exec
+%%EndSetup
+ 0 0 0 1 k
+ 0 0 0 1 K
+ 1.0 i 0 J 0 j 1.0 w 10.0 M [] 0 d
+ 0.113725 0.113725 0 0.886275 k
+ 0.113725 0.113725 0 0.886275 K
+
+
+*u
+ 445.273 611.637 m
+ 441.742 611.637 435.574 611.637 435.574 611.637 c
+ 435.574 590.766 l
+ 445.273 590.766 l
+ 448.785 590.766 451.184 591.891 452.984 593.676 c
+ 454.691 595.371 456.102 597.895 456.102 601.211 c
+ 456.102 604.512 454.652 607.023 452.91 608.75 c
+ 451.137 610.5 448.801 611.637 445.273 611.637 c
+ 445.273 611.637 l
+f
+ 426.977 584.523 m
+ 426.977 617.828 l
+ 444.992 617.828 l
+ 450.98 617.828 455.094 617.895 460.094 613.027 c
+ 462.977 610.223 464.969 605.766 464.969 601.211 c
+ 464.969 596.656 463.336 592.402 460.273 589.348 c
+ 455.711 584.789 451.031 584.523 444.992 584.523 c
+ 426.977 584.523 l
+ 426.977 584.523 l
+f
+*U
+ 0 0 0 1 k
+ 0 0 0 1 K
+ 1.0 i 0 J 0 j 1.0 w 10.0 M [] 0 d
+ 0.113725 0.113725 0 0.886275 k
+ 0.113725 0.113725 0 0.886275 K
+
+
+*u
+ 405.578 603.863 m
+ 407.656 603.863 408.492 604.148 409.27 604.816 c
+ 410.059 605.484 410.625 606.426 410.625 607.758 c
+ 410.625 609.086 409.934 610.094 409.145 610.75 c
+ 408.195 611.477 407.379 611.605 405.578 611.605 c
+ 394.113 611.605 l
+ 394.113 603.863 l
+ 405.578 603.863 l
+F
+ 406.879 597.652 m
+ 394.113 597.652 l
+ 394.113 584.523 l
+ 385.516 584.523 l
+ 385.516 617.828 l
+ 408.297 617.828 l
+ 413.484 617.828 419.125 614.566 419.125 607.84 c
+ 419.188 603.812 417.266 601.277 415.105 599.559 c
+ 423.785 584.523 l
+ 414.418 584.523 l
+ 406.879 597.652 l
+ 406.879 597.652 l
+f
+*U
+ 0 0 0 1 k
+ 0 0 0 1 K
+ 1.0 i 0 J 0 j 1.0 w 10.0 M [] 0 d
+ 0.113725 0.113725 0 0.886275 k
+ 0.113725 0.113725 0 0.886275 K
+
+
+*u
+ 369.004 591.441 m
+ 347.152 591.441 l
+ 343.215 584.523 l
+ 333.828 584.523 l
+ 352.934 617.828 l
+ 363.184 617.828 l
+ 382.297 584.523 l
+ 373.02 584.523 l
+ 369.004 591.441 l
+ 369.004 591.441 l
+f
+ 358.07 610.41 m
+ 350.703 597.621 l
+ 365.473 597.621 l
+ 358.07 610.41 l
+ 358.07 610.41 l
+f
+*U
+ 0 0 0 1 k
+ 0 0 0 1 K
+ 1.0 i 0 J 0 j 1.0 w 10.0 M [] 0 d
+ 0.113725 0.113725 0 0.886275 k
+ 0.113725 0.113725 0 0.886275 K
+
+
+*u
+ 485.195 618.344 m
+ 475.609 617.871 467.797 610.41 467.797 601.188 c
+ 467.797 591.965 475.629 584.551 485.195 583.977 c
+ 488.57 583.773 491.594 583.785 494.895 583.977 c
+ 504.469 584.527 512.297 591.965 512.297 601.188 c
+ 512.297 610.41 504.48 617.848 494.895 618.344 c
+ 491.664 618.527 488.426 618.492 485.195 618.344 c
+ 485.195 618.344 l
+f
+ 492.969 612.289 m
+ 498.758 611.965 503.469 607.129 503.469 601.188 c
+ 503.469 595.246 498.75 590.469 492.969 590.113 c
+ 490.977 589.988 489.137 589.98 487.094 590.113 c
+ 481.316 590.484 476.594 595.246 476.594 601.188 c
+ 476.594 607.129 481.305 611.98 487.094 612.289 c
+ 489.051 612.402 491.012 612.371 492.969 612.289 c
+ 492.969 612.289 l
+f
+*U
+ 0 0 0 1 k
+ 0 0 0 1 K
+ 1.0 i 0 J 0 j 1.0 w 10.0 M [] 0 d
+ 0.113725 0.113725 0 0.886275 k
+ 0.113725 0.113725 0 0.886275 K
+
+
+ 515.562 617.836 m
+ 515.562 597.648 l
+ 515.562 592.102 518.895 589.414 520.289 588.25 c
+ 523.723 585.379 529.148 583.781 534.578 583.809 c
+ 540.004 583.832 545.984 585.793 548.863 588.25 c
+ 551.863 590.812 553.562 593.445 553.562 597.648 c
+ 553.562 617.836 l
+ 545.012 617.836 l
+ 545.012 598.559 l
+ 545.012 594.984 543.664 593.285 542.039 592.207 c
+ 540.23 591.008 537.66 590.047 534.566 590.066 c
+ 531.477 590.082 528.586 591.184 527.117 592.207 c
+ 525.301 593.473 524.113 594.961 524.113 598.559 c
+ 524.113 617.836 l
+ 515.562 617.836 l
+ 515.562 617.836 l
+f
+ 0 0 0 1 k
+ 0 0 0 1 K
+ 1.0 i 0 J 0 j 1.0 w 10.0 M [] 0 d
+ 0.113725 0.113725 0 0.886275 k
+ 0.113725 0.113725 0 0.886275 K
+
+
+*u
+ 578.098 603.863 m
+ 580.172 603.863 581.012 604.148 581.785 604.816 c
+ 582.574 605.484 583.145 606.426 583.145 607.758 c
+ 583.145 609.086 582.449 610.094 581.66 610.75 c
+ 580.711 611.477 579.898 611.605 578.098 611.605 c
+ 566.629 611.605 l
+ 566.629 603.863 l
+ 578.098 603.863 l
+F
+ 579.395 597.652 m
+ 566.629 597.652 l
+ 566.629 584.523 l
+ 558.031 584.523 l
+ 558.031 617.828 l
+ 580.812 617.828 l
+ 586.0 617.828 591.641 614.566 591.641 607.84 c
+ 591.707 603.812 589.781 601.277 587.625 599.559 c
+ 596.301 584.523 l
+ 586.934 584.523 l
+ 579.395 597.652 l
+ 579.395 597.652 l
+f
+*U
+ 0 0 0 1 k
+ 0 0 0 1 K
+ 1.0 i 0 J 0 j 1.0 w 10.0 M [] 0 d
+ 0.113725 0.113725 0 0.886275 k
+ 0.113725 0.113725 0 0.886275 K
+
+1 D
+
+ 465.016 811.949 m
+ 356.688 624.324 l
+ 358.562 624.324 l
+ 362.27 624.406 363.742 630.477 365.664 630.477 c
+ 366.93 630.477 368.77 629.523 370.039 629.523 c
+ 372.445 629.523 373.145 642.258 375.176 642.215 c
+ 377.203 642.172 376.82 631.336 380.641 631.199 c
+ 384.598 631.059 381.992 656.176 385.863 656.176 c
+ 389.234 656.176 387.543 634.746 392.148 634.605 c
+ 396.613 634.465 393.156 671.723 397.613 672.082 c
+ 402.805 672.504 399.516 637.406 404.887 637.406 c
+ 409.574 637.406 406.477 686.688 410.625 686.688 c
+ 414.77 686.688 413.516 639.074 417.742 639.477 c
+ 421.812 639.477 417.883 696.906 422.578 696.906 c
+ 428.586 696.906 425.512 639.902 429.629 639.918 c
+ 434.266 639.934 430.484 702.5 435.887 702.5 c
+ 441.488 702.5 437.668 639.309 442.34 639.477 c
+ 447.258 639.652 442.094 698.68 447.516 698.68 c
+ 452.734 698.68 449.184 638.648 453.738 638.648 c
+ 458.555 638.648 453.395 697.906 459.695 697.492 c
+ 465.797 697.09 461.797 636.922 466.16 636.922 c
+ 470.32 636.922 467.836 689.488 472.801 689.207 c
+ 478.617 688.875 475.227 635.297 479.242 635.297 c
+ 482.969 635.297 481.277 678.066 486.211 678.066 c
+ 491.422 678.066 487.5 633.68 492.297 633.883 c
+ 497.09 634.082 494.949 667.727 499.613 667.727 c
+ 504.078 667.727 500.383 631.031 505.43 631.031 c
+ 510.676 631.031 508.023 656.723 512.648 656.723 c
+ 517.418 656.723 514.414 628.652 518.066 628.652 c
+ 521.617 628.652 520.578 646.336 524.082 646.336 c
+ 527.59 646.336 525.945 627.625 528.898 627.625 c
+ 531.953 627.625 530.703 638.426 533.938 638.426 c
+ 537.18 638.426 536.023 626.762 538.508 626.625 c
+ 540.711 626.504 540.43 633.98 542.461 633.98 c
+ 544.531 633.98 543.66 625.668 546.508 625.676 c
+ 549.254 625.68 548.41 630.273 550.367 630.273 c
+ 552.289 630.273 552.348 624.875 554.617 624.875 c
+ 556.234 624.906 557.949 627.344 560.004 627.344 c
+ 562.711 627.344 563.539 624.324 570.465 624.324 c
+ 573.34 624.324 l
+ 465.016 811.949 l
+ 465.016 811.949 l
+f
+0 D
+ 0 0 0 1 k
+ 0 0 0 1 K
+ 1.0 i 0 J 0 j 1.0 w 10.0 M [] 0 d
+%%Note: If Error, make sure there are matched pairs of 'q's and 'Q's
+%%Note: in the file. Add 'Q's before '%%Trailer' until equal
+%%Trailer
+Adobe_IllustratorA_AI3 /terminate get exec
+Adobe_typography_AI3 /terminate get exec
+Adobe_customcolor /terminate get exec
+Adobe_cshow /terminate get exec
+Adobe_cmykcolor /terminate get exec
+Adobe_packedarray /terminate get exec
+ showpage
+%EOF
+%%EndDocument
diff --git a/icons/ardour_bw.svg b/icons/ardour_bw.svg
new file mode 100644
index 0000000000..b4af5cd74a
--- /dev/null
+++ b/icons/ardour_bw.svg
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448"
+ height="1052.3622"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docbase="/mnt/first/logos/ardour"
+ sodipodi:docname="ardour_bw.svg"
+ version="1.0">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient3096">
+ <stop
+ style="stop-color:#bff;stop-opacity:1;"
+ offset="0"
+ id="stop3098" />
+ <stop
+ id="stop3104"
+ offset="0.48214287"
+ style="stop-color:#e0ead5;stop-opacity:1;" />
+ <stop
+ style="stop-color:#957151;stop-opacity:1;"
+ offset="0.81505102"
+ id="stop3106" />
+ <stop
+ style="stop-color:#864441;stop-opacity:1;"
+ offset="1"
+ id="stop3100" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3084">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3086" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3088" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3066">
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="0"
+ id="stop3068" />
+ <stop
+ id="stop3074"
+ offset="0.05"
+ style="stop-color:white;stop-opacity:1;" />
+ <stop
+ style="stop-color:#002744;stop-opacity:0;"
+ offset="1"
+ id="stop3070" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3050">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3052" />
+ <stop
+ id="stop3058"
+ offset="0.44897959"
+ style="stop-color:white;stop-opacity:1;" />
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0.78571427"
+ id="stop3060" />
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="1"
+ id="stop3054" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3035">
+ <stop
+ style="stop-color:#ffffed;stop-opacity:1;"
+ offset="0"
+ id="stop3037" />
+ <stop
+ style="stop-color:#b8eaff;stop-opacity:1;"
+ offset="1"
+ id="stop3039" />
+ </linearGradient>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="white"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="0.4"
+ objecttolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.3535534"
+ inkscape:cx="582.11341"
+ inkscape:cy="803.76782"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1278"
+ inkscape:window-height="866"
+ inkscape:window-x="0"
+ inkscape:window-y="122"
+ showgrid="false"
+ inkscape:grid-bbox="false"
+ inkscape:guide-bbox="true"
+ showguides="false"
+ showborder="false"
+ inkscape:showpageshadow="true">
+ <sodipodi:guide
+ orientation="horizontal"
+ position="810.5"
+ id="guide3038" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="852.125"
+ id="guide3040" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="826.875"
+ id="guide3052" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="819.13901"
+ id="guide3068" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="834.65117"
+ id="guide3072" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="844.37389"
+ id="guide3074" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="860.24998"
+ id="guide3096" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="818.27723"
+ id="guide3120" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="852.9375"
+ id="guide3099" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="809.60412"
+ id="guide3103" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="817.37125"
+ id="guide3105" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="845.27987"
+ id="guide3107" />
+ <sodipodi:guide
+ orientation="horizontal"
+ position="831.3125"
+ id="guide4437" />
+ <sodipodi:guide
+ orientation="vertical"
+ position="152.73507"
+ id="guide3261" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="main"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <g
+ style="display:inline"
+ id="g1915"
+ transform="translate(380,0)"
+ inkscape:export-filename="/mnt/first/logos/ardour/ardour_bw_scale.png"
+ inkscape:export-xdpi="40.39333"
+ inkscape:export-ydpi="40.39333">
+ <path
+ sodipodi:nodetypes="ccccsszccccszscc"
+ id="path1917"
+ d="M 176.58984,287.95266 C 172.17954,287.95264 164.46796,287.95266 164.46796,287.95266 L 164.46796,314.04227 L 176.58984,314.04227 C 180.98154,314.04229 183.98115,312.63802 186.23242,310.40489 C 188.36666,308.28783 190.12783,305.13231 190.12785,300.9869 C 190.12783,296.86012 188.31785,293.71854 186.13534,291.56217 C 183.92098,289.37436 181.00014,287.95268 176.58984,287.95266 z M 153.72129,321.84397 L 153.72129,280.21345 L 176.24023,280.21345 C 183.72458,280.21345 188.86819,280.13392 195.1189,286.21522 C 198.72063,289.72052 201.20948,295.29184 201.20948,300.9869 C 201.20948,306.68195 199.16832,311.9963 195.343,315.81633 C 189.63976,321.51168 183.79026,321.84397 176.24023,321.84397 L 153.72129,321.84397 z "
+ style="font-size:9.055686px;font-style:normal;font-weight:normal;line-height:125%;opacity:1;fill:#00001d;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" />
+ <path
+ sodipodi:nodetypes="cczcccccccccccscccc"
+ id="path1919"
+ d="M 126.97432,297.67254 C 129.56993,297.67254 130.6169,297.3168 131.58461,296.48027 C 132.57085,295.64378 133.28278,294.46717 133.28276,292.80483 C 133.28274,291.14251 132.4146,289.88164 131.42836,289.06368 C 130.2419,288.15205 129.22599,287.99309 126.97432,287.99304 L 112.63982,287.99304 L 112.63982,297.67254 L 126.97432,297.67254 M 128.59684,305.43339 L 112.63982,305.43339 L 112.63982,321.84397 L 101.89312,321.84397 L 101.89312,280.21345 L 130.36878,280.21345 C 136.85353,280.21345 143.90444,284.29251 143.90444,292.7016 C 143.98535,297.7362 141.58079,300.90489 138.88354,303.04963 L 149.73154,321.84397 L 138.02216,321.84397 L 128.59684,305.43339 z "
+ style="font-size:9.055686px;font-style:normal;font-weight:normal;line-height:125%;opacity:1;fill:#00001d;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" />
+ <path
+ sodipodi:nodetypes="ccccccccccccc"
+ id="path1921"
+ d="M 81.25583,313.1958 L 53.94222,313.1958 L 49.01982,321.84397 L 37.28736,321.84397 L 61.1687,280.21345 L 73.98097,280.21345 L 97.87176,321.84397 L 86.27371,321.84397 L 81.25583,313.1958 z M 67.5888,289.48665 L 58.38022,305.47512 L 76.84078,305.47512 L 67.5888,289.48665 z "
+ style="font-size:9.055686px;font-style:normal;font-weight:normal;line-height:125%;opacity:1;fill:#00001d;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" />
+ <path
+ sodipodi:nodetypes="csssssscssssss"
+ id="path1923"
+ d="M 226.49427,279.56802 C 214.50956,280.16209 204.74427,289.48567 204.74427,301.01579 C 204.74427,312.54592 214.53445,321.81277 226.49427,322.53141 C 230.71528,322.78504 234.49186,322.76944 238.61927,322.53141 C 250.58435,321.84137 260.36927,312.54592 260.36927,301.01579 C 260.36927,289.48567 250.59911,280.19141 238.61927,279.56802 C 234.58043,279.33972 230.53352,279.38595 226.49427,279.56802 z M 236.21302,287.14078 C 243.44805,287.54222 249.33802,293.59078 249.33802,301.01579 C 249.33802,308.4408 243.43912,314.41518 236.21302,314.85954 C 233.72036,315.01283 231.41848,315.02287 228.86927,314.85954 C 221.64633,314.39677 215.74427,308.4408 215.74427,301.01579 C 215.74427,293.59078 221.63132,287.52335 228.86927,287.14078 C 231.31585,286.9988 233.7663,287.03667 236.21302,287.14078 z "
+ style="opacity:1;fill:#00001d;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccszsccccszsccc"
+ id="path1925"
+ d="M 264.45322,280.20719 L 264.45322,305.43766 C 264.45322,312.37159 268.61751,315.73153 270.35947,317.18766 C 274.65261,320.77634 281.43571,322.77118 288.22153,322.74101 C 295.00728,322.71083 302.47855,320.26072 306.07822,317.18766 C 309.83035,313.98444 311.95318,310.69494 311.95322,305.43766 L 311.95322,280.20719 L 301.26572,280.20719 L 301.26572,304.30156 C 301.26572,308.77151 299.57884,310.89474 297.54697,312.24101 C 295.28695,313.73845 292.07462,314.93983 288.21026,314.91935 C 284.34591,314.89887 280.73023,313.5202 278.89516,312.24101 C 276.62665,310.65964 275.14137,308.80089 275.14137,304.30156 L 275.14137,280.20719 L 264.45322,280.20719 z "
+ style="font-size:9.055686px;font-style:normal;font-weight:normal;line-height:125%;opacity:1;fill:#00001d;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans" />
+ <path
+ sodipodi:nodetypes="cczcccccccccccscccc"
+ id="path1927"
+ d="M 342.62077,297.67254 C 345.21638,297.67254 346.26335,297.3168 347.23106,296.48027 C 348.2173,295.64378 348.92923,294.46717 348.92921,292.80483 C 348.92919,291.14251 348.06105,289.88164 347.07481,289.06368 C 345.88835,288.15205 344.87244,287.99309 342.62077,287.99304 L 328.28627,287.99304 L 328.28627,297.67254 L 342.62077,297.67254 M 344.24329,305.43339 L 328.28627,305.43339 L 328.28627,321.84397 L 317.53957,321.84397 L 317.53957,280.21345 L 346.01523,280.21345 C 352.49998,280.21345 359.55089,284.29251 359.55089,292.7016 C 359.6318,297.7362 357.22724,300.90489 354.52999,303.04963 L 365.37799,321.84397 L 353.66861,321.84397 L 344.24329,305.43339 z "
+ style="font-size:9.055686px;font-style:normal;font-weight:normal;line-height:125%;opacity:1;fill:#00001d;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans" />
+ </g>
+ <path
+ sodipodi:nodetypes="cccsczzczsczcsszszszzsszzzzzzzzzszzzzsccc"
+ style="opacity:1;fill:#00001d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 581.26757,37.562664 L 445.86132,272.09391 L 448.20507,272.09391 C 452.83906,271.99261 454.67928,264.40641 457.08007,264.40641 C 458.66442,264.40641 460.96101,265.59391 462.54882,265.59391 C 465.55594,265.59391 466.43156,249.6788 468.96763,249.73185 C 471.50371,249.7849 471.02555,263.32969 475.79882,263.50016 C 480.74864,263.67694 477.48855,232.28141 482.33007,232.28141 C 486.5416,232.28141 484.42728,259.06726 490.18454,259.24404 C 495.76502,259.42082 491.44428,212.84709 497.01573,212.39569 C 503.50483,211.86995 499.39401,255.74052 506.10672,255.74052 C 511.96666,255.74052 508.09567,194.13864 513.28166,194.13864 C 518.46162,194.13864 516.89527,253.65641 522.17994,253.15641 C 527.26783,253.15641 522.35387,181.36612 528.221,181.36612 C 535.73414,181.36612 531.8884,252.62357 537.03473,252.60372 C 542.83424,252.58067 538.10721,174.37516 544.85856,174.37516 C 551.85842,174.37516 547.08694,253.36581 552.92382,253.15641 C 559.07266,252.93582 552.61945,179.14845 559.39257,179.14845 C 565.91569,179.14845 561.47707,254.18766 567.17382,254.18766 C 573.19231,254.18766 566.74365,180.11956 574.6202,180.63588 C 582.2478,181.13588 577.24499,256.34575 582.69834,256.34575 C 587.90174,256.34575 584.79485,190.63924 590.9998,190.99311 C 598.27379,191.40795 594.03154,258.37884 599.05434,258.37884 C 603.70973,258.37884 601.597,204.91805 607.76221,204.91805 C 614.27877,204.91805 609.37472,260.39845 615.3702,260.14845 C 621.36047,259.89867 618.68723,217.84391 624.51757,217.84391 C 630.09815,217.84391 625.48005,263.70911 631.78718,263.70911 C 638.34303,263.70911 635.02705,231.59759 640.8123,231.59759 C 646.77352,231.59759 643.01977,266.68214 647.58191,266.68214 C 652.01905,266.68214 650.72325,244.57798 655.10336,244.57798 C 659.48749,244.57798 657.43345,267.96891 661.12481,267.96891 C 664.94101,267.96891 663.38003,254.46891 667.42382,254.46891 C 671.47281,254.46891 670.0273,269.04748 673.13277,269.21891 C 675.89034,269.37113 675.53699,260.02659 678.07823,260.02659 C 680.66364,260.02659 679.57453,270.41484 683.13369,270.40733 C 686.56785,270.39982 685.51216,264.65641 687.95783,264.65641 C 690.35932,264.65641 690.43355,271.40809 693.27033,271.40809 C 695.2922,271.3692 697.437,268.32155 700.00685,268.32155 C 703.38721,268.32155 704.42287,272.09391 713.08007,272.09391 L 716.67382,272.09391 L 581.26757,37.562664 z "
+ id="path1929"
+ inkscape:export-filename="/mnt/first/logos/ardour/ardour_bw_scale.png"
+ inkscape:export-xdpi="40.39333"
+ inkscape:export-ydpi="40.39333" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="construction"
+ style="display:none">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ff1313;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 828.02203,272.06986 C 837.03937,272.06986 881.8855,175.06365 931.83414,175.06365 C 991.85177,175.06365 1031.0336,272.06986 1095.3084,272.06986"
+ id="path1981"
+ sodipodi:nodetypes="csc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ff1313;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 828.02203,272.06986 C 837.03937,272.06986 871.2789,252.84539 921.22754,252.84539 C 981.24517,252.84539 1031.0336,272.06986 1095.3084,272.06986"
+ id="path2870"
+ sodipodi:nodetypes="csc" />
+ </g>
+</svg>
diff --git a/icons/icon/ardour.icns b/icons/icon/ardour.icns
new file mode 100644
index 0000000000..2334fab13b
--- /dev/null
+++ b/icons/icon/ardour.icns
Binary files differ
diff --git a/icons/icon/ardour_icon_mac.png b/icons/icon/ardour_icon_mac.png
new file mode 100644
index 0000000000..04ee716ea8
--- /dev/null
+++ b/icons/icon/ardour_icon_mac.png
Binary files differ
diff --git a/icons/icon/ardour_icon_mac_mask.png b/icons/icon/ardour_icon_mac_mask.png
new file mode 100644
index 0000000000..69f996493b
--- /dev/null
+++ b/icons/icon/ardour_icon_mac_mask.png
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_16px.xcf b/icons/icon/ardour_icon_tango_16px.xcf
new file mode 100644
index 0000000000..ff20434121
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_16px.xcf
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_16px_blue.png b/icons/icon/ardour_icon_tango_16px_blue.png
new file mode 100644
index 0000000000..adbc5438ce
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_16px_blue.png
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_16px_red.png b/icons/icon/ardour_icon_tango_16px_red.png
new file mode 100644
index 0000000000..807719be36
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_16px_red.png
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_22px.xcf b/icons/icon/ardour_icon_tango_22px.xcf
new file mode 100644
index 0000000000..2419f0aedd
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_22px.xcf
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_22px_blue.png b/icons/icon/ardour_icon_tango_22px_blue.png
new file mode 100644
index 0000000000..7274697f8e
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_22px_blue.png
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_22px_red.png b/icons/icon/ardour_icon_tango_22px_red.png
new file mode 100644
index 0000000000..dab75e1a0d
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_22px_red.png
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_32px.xcf b/icons/icon/ardour_icon_tango_32px.xcf
new file mode 100644
index 0000000000..20908df96d
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_32px.xcf
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_32px_blue.png b/icons/icon/ardour_icon_tango_32px_blue.png
new file mode 100644
index 0000000000..74aeb1011b
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_32px_blue.png
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_32px_red.png b/icons/icon/ardour_icon_tango_32px_red.png
new file mode 100644
index 0000000000..892fedb5af
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_32px_red.png
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_48px.xcf b/icons/icon/ardour_icon_tango_48px.xcf
new file mode 100644
index 0000000000..57aaccf850
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_48px.xcf
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_48px_blue.png b/icons/icon/ardour_icon_tango_48px_blue.png
new file mode 100644
index 0000000000..411028c277
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_48px_blue.png
Binary files differ
diff --git a/icons/icon/ardour_icon_tango_48px_red.png b/icons/icon/ardour_icon_tango_48px_red.png
new file mode 100644
index 0000000000..33a1cd9bff
--- /dev/null
+++ b/icons/icon/ardour_icon_tango_48px_red.png
Binary files differ
diff --git a/icons/made_with/ardour_made.png b/icons/made_with/ardour_made.png
new file mode 100644
index 0000000000..9dd672e6cc
--- /dev/null
+++ b/icons/made_with/ardour_made.png
Binary files differ
diff --git a/icons/made_with/ardour_made.xar b/icons/made_with/ardour_made.xar
new file mode 100644
index 0000000000..f349ede9a3
--- /dev/null
+++ b/icons/made_with/ardour_made.xar
Binary files differ
diff --git a/libs/appleutility/SConscript b/libs/appleutility/SConscript
index 2f3280f8b6..c8bab03a87 100644
--- a/libs/appleutility/SConscript
+++ b/libs/appleutility/SConscript
@@ -15,9 +15,8 @@ appleutility.Append(LINKFLAGS='-framework CoreFoundation')
appleutility.Append(LINKFLAGS='-framework CoreServices')
libappleutility = appleutility.SharedLibrary('appleutility', appleutility_files)
-
-Default(libappleutility)
-
-env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), libappleutility))
+if appleutility['COREAUDIO']:
+ Default(libappleutility)
+ env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), libappleutility))
env.Alias('tarball', env.Distribute (env['DISTTREE'], ['SConscript'] + appleutility_files + glob.glob('*.h') ))
diff --git a/libs/ardour/SConscript b/libs/ardour/SConscript
index 2e5253ec25..58a2bbf825 100644
--- a/libs/ardour/SConscript
+++ b/libs/ardour/SConscript
@@ -294,5 +294,5 @@ env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), li
env.Alias('tarball', env.Distribute (env['DISTTREE'],
[ 'SConscript', 'i18n.h', 'gettext.h', 'sse_functions.s', 'sse_functions_64bit.s' ] +
- ardour_files + vst_files + coreaudio_files + audiounit_files +
+ ardour_files + osc_files + vst_files + coreaudio_files + audiounit_files +
glob.glob('po/*.po') + glob.glob('ardour/*.h')))
diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h
index c138cbf32f..5cc2359632 100644
--- a/libs/ardour/ardour/ardour.h
+++ b/libs/ardour/ardour/ardour.h
@@ -43,11 +43,12 @@ namespace ARDOUR {
extern OSC* osc;
- static const jack_nframes_t max_frames = JACK_MAX_FRAMES;
+ static const nframes_t max_frames = JACK_MAX_FRAMES;
int init (AudioEngine& engine, bool with_vst, bool try_optimization);
int cleanup ();
-
+
+ std::string get_ardour_revision ();
std::string get_user_ardour_path ();
std::string get_system_data_path ();
@@ -74,6 +75,7 @@ namespace ARDOUR {
const char* old;
};
+ static const double SHUTTLE_FRACT_SPEED1=0.48412291827; /* derived from A1,A2 */
}
/* how do we make these be within the Ardour namespace? */
diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h
index 81206f2bb0..76b76b1061 100644
--- a/libs/ardour/ardour/audio_diskstream.h
+++ b/libs/ardour/ardour/audio_diskstream.h
@@ -131,7 +131,7 @@ class AudioDiskstream : public Diskstream
}
}
- static void swap_by_ptr (Sample *first, Sample *last, jack_nframes_t n) {
+ static void swap_by_ptr (Sample *first, Sample *last, nframes_t n) {
while (n--) {
Sample tmp = *first;
*first++ = *last;
@@ -151,22 +151,22 @@ class AudioDiskstream : public Diskstream
void set_pending_overwrite(bool);
int overwrite_existing_buffers ();
- void set_block_size (jack_nframes_t);
- int internal_playback_seek (jack_nframes_t distance);
- int can_internal_playback_seek (jack_nframes_t distance);
+ void set_block_size (nframes_t);
+ int internal_playback_seek (nframes_t distance);
+ int can_internal_playback_seek (nframes_t distance);
int rename_write_sources ();
void reset_write_sources (bool, bool force = false);
void non_realtime_input_change ();
protected:
friend class Auditioner;
- int seek (jack_nframes_t which_sample, bool complete_refill = false);
+ int seek (nframes_t which_sample, bool complete_refill = false);
protected:
friend class AudioTrack;
- int process (jack_nframes_t transport_frame, jack_nframes_t nframes, jack_nframes_t offset, bool can_record, bool rec_monitors_input);
- bool commit (jack_nframes_t nframes);
+ int process (nframes_t transport_frame, nframes_t nframes, nframes_t offset, bool can_record, bool rec_monitors_input);
+ bool commit (nframes_t nframes);
private:
@@ -197,7 +197,7 @@ class AudioDiskstream : public Diskstream
RingBufferNPT<CaptureTransition> * capture_transition_buf;
// the following are used in the butler thread only
- jack_nframes_t curr_capture_cnt;
+ nframes_t curr_capture_cnt;
};
/* The two central butler operations */
@@ -207,7 +207,7 @@ class AudioDiskstream : public Diskstream
int do_refill_with_alloc();
int read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer,
- jack_nframes_t& start, jack_nframes_t cnt,
+ nframes_t& start, nframes_t cnt,
ChannelInfo& channel_info, int channel, bool reversed);
void finish_capture (bool rec_monitors_input);
@@ -227,7 +227,7 @@ class AudioDiskstream : public Diskstream
int use_pending_capture_data (XMLNode& node);
void get_input_sources ();
- void check_record_status (jack_nframes_t transport_frame, jack_nframes_t nframes, bool can_record);
+ void check_record_status (nframes_t transport_frame, nframes_t nframes, bool can_record);
void set_align_style_from_io();
void setup_destructive_playlist ();
void use_destructive_playlist ();
diff --git a/libs/ardour/ardour/audio_track.h b/libs/ardour/ardour/audio_track.h
index 1277b598d4..fdf373a1cb 100644
--- a/libs/ardour/ardour/audio_track.h
+++ b/libs/ardour/ardour/audio_track.h
@@ -37,27 +37,27 @@ class AudioTrack : public Track
AudioTrack (Session&, const XMLNode&);
~AudioTrack ();
- int roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t offset, int declick, bool can_record, bool rec_monitors_input);
+ int roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame,
+ nframes_t offset, int declick, bool can_record, bool rec_monitors_input);
- int no_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t offset, bool state_changing, bool can_record, bool rec_monitors_input);
+ int no_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame,
+ nframes_t offset, bool state_changing, bool can_record, bool rec_monitors_input);
- int silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t offset, bool can_record, bool rec_monitors_input);
+ int silent_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame,
+ nframes_t offset, bool can_record, bool rec_monitors_input);
boost::shared_ptr<AudioDiskstream> audio_diskstream() const;
int use_diskstream (string name);
int use_diskstream (const PBD::ID& id);
- int export_stuff (BufferSet& bufs, jack_nframes_t nframes, jack_nframes_t end_frame);
+ int export_stuff (BufferSet& bufs, nframes_t nframes, nframes_t end_frame);
void freeze (InterThreadInfo&);
void unfreeze ();
void bounce (InterThreadInfo&);
- void bounce_range (jack_nframes_t start, jack_nframes_t end, InterThreadInfo&);
+ void bounce_range (nframes_t start, nframes_t end, InterThreadInfo&);
int set_state(const XMLNode& node);
diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h
index 56179125bb..8a51580f27 100644
--- a/libs/ardour/ardour/audio_unit.h
+++ b/libs/ardour/ardour/audio_unit.h
@@ -54,7 +54,7 @@ class AUPlugin : public ARDOUR::Plugin
const char * maker () const;
uint32_t parameter_count () const;
float default_value (uint32_t port);
- jack_nframes_t latency () const;
+ nframes_t latency () const;
void set_parameter (uint32_t which, float val);
float get_parameter (uint32_t which) const;
@@ -62,9 +62,10 @@ class AUPlugin : public ARDOUR::Plugin
uint32_t nth_parameter (uint32_t which, bool& ok) const;
void activate ();
void deactivate ();
- void set_block_size (jack_nframes_t nframes);
+ void set_block_size (nframes_t nframes);
- int connect_and_run (BufferSet& bufs, uint32_t& in, uint32_t& out, jack_nframes_t nframes, jack_nframes_t offset);
+ int connect_and_run (BufferSet& bufs, uint32_t& in, uint32_t& out, nframes_t nframes, nframes_t offset);
+
std::set<uint32_t> automatable() const;
void store_state (ARDOUR::PluginState&);
void restore_state (ARDOUR::PluginState&);
diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h
index 5f9e53380f..207e3c6428 100644
--- a/libs/ardour/ardour/audioengine.h
+++ b/libs/ardour/ardour/audioengine.h
@@ -67,30 +67,30 @@ class AudioEngine : public sigc::trackable
Glib::Mutex& process_lock() { return _process_lock; }
- jack_nframes_t frame_rate();
- jack_nframes_t frames_per_cycle();
+ nframes_t frame_rate();
+ nframes_t frames_per_cycle();
int usecs_per_cycle () const { return _usecs_per_cycle; }
- bool get_sync_offset (jack_nframes_t& offset) const;
+ bool get_sync_offset (nframes_t& offset) const;
- jack_nframes_t frames_since_cycle_start () {
+ nframes_t frames_since_cycle_start () {
if (!_running || !_jack) return 0;
return jack_frames_since_cycle_start (_jack);
}
- jack_nframes_t frame_time () {
+ nframes_t frame_time () {
if (!_running || !_jack) return 0;
return jack_frame_time (_jack);
}
- jack_nframes_t transport_frame () const {
+ nframes_t transport_frame () const {
if (!_running || !_jack) return 0;
return jack_get_current_transport_frame (_jack);
}
- int request_buffer_size (jack_nframes_t);
+ int request_buffer_size (nframes_t);
- jack_nframes_t set_monitor_check_interval (jack_nframes_t);
+ nframes_t set_monitor_check_interval (nframes_t);
float get_cpu_load() {
if (!_running || !_jack) return 0;
@@ -134,7 +134,7 @@ class AudioEngine : public sigc::trackable
return get_nth_physical (type, n, JackPortIsOutput);
}
- jack_nframes_t get_port_total_latency (const Port&);
+ nframes_t get_port_total_latency (const Port&);
void update_total_latencies ();
/** Caller may not delete the object pointed to by the return value
@@ -150,7 +150,7 @@ class AudioEngine : public sigc::trackable
void transport_start ();
void transport_stop ();
- void transport_locate (jack_nframes_t);
+ void transport_locate (nframes_t);
TransportState transport_state ();
int reset_timebase ();
@@ -164,7 +164,7 @@ class AudioEngine : public sigc::trackable
the regular process() call to session->process() is not made.
*/
- sigc::signal<int,jack_nframes_t> Freewheel;
+ sigc::signal<int,nframes_t> Freewheel;
sigc::signal<void> Xrun;
@@ -174,7 +174,7 @@ class AudioEngine : public sigc::trackable
/* this signal is emitted if the sample rate changes */
- sigc::signal<void,jack_nframes_t> SampleRateChanged;
+ sigc::signal<void,nframes_t> SampleRateChanged;
/* this signal is sent if JACK ever disconnects us */
@@ -200,21 +200,21 @@ class AudioEngine : public sigc::trackable
bool session_remove_pending;
bool _running;
bool _has_run;
- jack_nframes_t _buffer_size;
- jack_nframes_t _frame_rate;
- jack_nframes_t monitor_check_interval;
- jack_nframes_t last_monitor_check;
- jack_nframes_t _processed_frames;
+ nframes_t _buffer_size;
+ nframes_t _frame_rate;
+ nframes_t monitor_check_interval;
+ nframes_t last_monitor_check;
+ nframes_t _processed_frames;
bool _freewheeling;
bool _freewheel_thread_registered;
- sigc::slot<int,jack_nframes_t> freewheel_action;
+ sigc::slot<int,nframes_t> freewheel_action;
bool reconnect_on_halt;
int _usecs_per_cycle;
typedef std::set<Port*> Ports;
SerializedRCUManager<Ports> ports;
- int process_callback (jack_nframes_t nframes);
+ int process_callback (nframes_t nframes);
void remove_all_ports ();
typedef std::pair<std::string,std::string> PortConnection;
@@ -227,17 +227,17 @@ class AudioEngine : public sigc::trackable
static int _xrun_callback (void *arg);
static int _graph_order_callback (void *arg);
- static int _process_callback (jack_nframes_t nframes, void *arg);
- static int _sample_rate_callback (jack_nframes_t nframes, void *arg);
- static int _bufsize_callback (jack_nframes_t nframes, void *arg);
- static void _jack_timebase_callback (jack_transport_state_t, jack_nframes_t, jack_position_t*, int, void*);
+ static int _process_callback (nframes_t nframes, void *arg);
+ static int _sample_rate_callback (nframes_t nframes, void *arg);
+ static int _bufsize_callback (nframes_t nframes, void *arg);
+ static void _jack_timebase_callback (jack_transport_state_t, nframes_t, jack_position_t*, int, void*);
static int _jack_sync_callback (jack_transport_state_t, jack_position_t*, void *arg);
static void _freewheel_callback (int , void *arg);
- void jack_timebase_callback (jack_transport_state_t, jack_nframes_t, jack_position_t*, int);
+ void jack_timebase_callback (jack_transport_state_t, nframes_t, jack_position_t*, int);
int jack_sync_callback (jack_transport_state_t, jack_position_t*);
- int jack_bufsize_callback (jack_nframes_t);
- int jack_sample_rate_callback (jack_nframes_t);
+ int jack_bufsize_callback (nframes_t);
+ int jack_sample_rate_callback (nframes_t);
static void halted (void *);
@@ -245,8 +245,10 @@ class AudioEngine : public sigc::trackable
void meter_thread ();
void start_metering_thread ();
- Glib::Thread* m_meter_thread;
- mutable gint m_meter_exit;
+ void stop_metering_thread ();
+
+ Glib::Thread* m_meter_thread;
+ static gint m_meter_exit;
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/audiofilesource.h b/libs/ardour/ardour/audiofilesource.h
index 0cab328fba..6184a45302 100644
--- a/libs/ardour/ardour/audiofilesource.h
+++ b/libs/ardour/ardour/audiofilesource.h
@@ -65,12 +65,12 @@ class AudioFileSource : public AudioSource {
for files used in destructive recording.
*/
- virtual jack_nframes_t last_capture_start_frame() const { return 0; }
- virtual void mark_capture_start (jack_nframes_t) {}
+ virtual nframes_t last_capture_start_frame() const { return 0; }
+ virtual void mark_capture_start (nframes_t) {}
virtual void mark_capture_end () {}
virtual void clear_capture_marks() {}
- virtual int update_header (jack_nframes_t when, struct tm&, time_t) = 0;
+ virtual int update_header (nframes_t when, struct tm&, time_t) = 0;
virtual int flush_header () = 0;
int move_to_trash (const string trash_dir_name);
@@ -86,7 +86,9 @@ class AudioFileSource : public AudioSource {
static void set_bwf_serial_number (int);
static void set_search_path (string);
- static void set_header_position_offset (jack_nframes_t offset );
+ static void set_header_position_offset (nframes_t offset );
+
+ int setup_peakfile ();
static sigc::signal<void> HeaderPositionOffsetChanged;
@@ -122,6 +124,7 @@ class AudioFileSource : public AudioSource {
Flag _flags;
string _take_id;
uint64_t timeline_position;
+ bool file_is_new;
static string peak_dir;
static string search_path;
@@ -132,7 +135,7 @@ class AudioFileSource : public AudioSource {
static uint64_t header_position_offset;
- virtual void set_timeline_position (jack_nframes_t pos);
+ virtual void set_timeline_position (nframes_t pos);
virtual void set_header_timeline_position () = 0;
bool find (std::string path, bool must_exist, bool& is_new);
diff --git a/libs/ardour/ardour/audioplaylist.h b/libs/ardour/ardour/audioplaylist.h
index 6a52f1c16f..341b08930c 100644
--- a/libs/ardour/ardour/audioplaylist.h
+++ b/libs/ardour/ardour/audioplaylist.h
@@ -56,11 +56,11 @@ class AudioPlaylist : public ARDOUR::Playlist
AudioPlaylist (Session&, const XMLNode&, bool hidden = false);
AudioPlaylist (Session&, string name, bool hidden = false);
AudioPlaylist (const AudioPlaylist&, string name, bool hidden = false);
- AudioPlaylist (const AudioPlaylist&, jack_nframes_t start, jack_nframes_t cnt, string name, bool hidden = false);
+ AudioPlaylist (const AudioPlaylist&, nframes_t start, nframes_t cnt, string name, bool hidden = false);
void clear (bool with_save = true);
- jack_nframes_t read (Sample *dst, Sample *mixdown, float *gain_buffer, jack_nframes_t start, jack_nframes_t cnt, uint32_t chan_n=0);
+ nframes_t read (Sample *dst, Sample *mixdown, float *gain_buffer, nframes_t start, nframes_t cnt, uint32_t chan_n=0);
int set_state (const XMLNode&);
UndoAction get_memento() const;
@@ -68,7 +68,7 @@ class AudioPlaylist : public ARDOUR::Playlist
sigc::signal<void,Crossfade *> NewCrossfade;
template<class T> void foreach_crossfade (T *t, void (T::*func)(Crossfade *));
- void crossfades_at (jack_nframes_t frame, Crossfades&);
+ void crossfades_at (nframes_t frame, Crossfades&);
template<class T> void apply_to_history (T& obj, void (T::*method)(const ARDOUR::StateManager::StateMap&, state_id_t)) {
RegionLock rlock (this);
diff --git a/libs/ardour/ardour/audioregion.h b/libs/ardour/ardour/audioregion.h
index 71a66e52a0..3ac62da2ca 100644
--- a/libs/ardour/ardour/audioregion.h
+++ b/libs/ardour/ardour/audioregion.h
@@ -84,23 +84,24 @@ class AudioRegion : public Region
Curve& fade_out() { return _fade_out; }
Curve& envelope() { return _envelope; }
- jack_nframes_t read_peaks (PeakData *buf, jack_nframes_t npeaks,
- jack_nframes_t offset, jack_nframes_t cnt,
+ nframes_t read_peaks (PeakData *buf, nframes_t npeaks,
+ nframes_t offset, nframes_t cnt,
uint32_t chan_n=0, double samples_per_unit= 1.0) const;
- virtual jack_nframes_t read_at (Sample *buf, Sample *mixdown_buf,
- float *gain_buf, jack_nframes_t position, jack_nframes_t cnt,
+ virtual nframes_t read_at (Sample *buf, Sample *mixdown_buf,
+ float *gain_buf, nframes_t position, nframes_t cnt,
uint32_t chan_n = 0,
- jack_nframes_t read_frames = 0,
- jack_nframes_t skip_frames = 0) const;
+ nframes_t read_frames = 0,
+ nframes_t skip_frames = 0) const;
- jack_nframes_t master_read_at (Sample *buf, Sample *mixdown_buf, float *gain_buf,
- jack_nframes_t position, jack_nframes_t cnt, uint32_t chan_n=0) const;
+ nframes_t master_read_at (Sample *buf, Sample *mixdown_buf,
+ float *gain_buf,
+ nframes_t position, nframes_t cnt, uint32_t chan_n=0) const;
XMLNode& state (bool);
int set_state (const XMLNode&);
- static void set_default_fade (float steepness, jack_nframes_t len);
+ static void set_default_fade (float steepness, nframes_t len);
enum FadeShape {
Linear,
@@ -112,13 +113,13 @@ class AudioRegion : public Region
void set_fade_in_active (bool yn);
void set_fade_in_shape (FadeShape);
- void set_fade_in_length (jack_nframes_t);
- void set_fade_in (FadeShape, jack_nframes_t);
+ void set_fade_in_length (nframes_t);
+ void set_fade_in (FadeShape, nframes_t);
void set_fade_out_active (bool yn);
void set_fade_out_shape (FadeShape);
- void set_fade_out_length (jack_nframes_t);
- void set_fade_out (FadeShape, jack_nframes_t);
+ void set_fade_out_length (nframes_t);
+ void set_fade_out (FadeShape, nframes_t);
void set_envelope_active (bool yn);
@@ -144,10 +145,10 @@ class AudioRegion : public Region
private:
friend class RegionFactory;
- AudioRegion (boost::shared_ptr<AudioSource>, jack_nframes_t start, jack_nframes_t length);
- AudioRegion (boost::shared_ptr<AudioSource>, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags);
- AudioRegion (SourceList &, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags);
- AudioRegion (boost::shared_ptr<const AudioRegion>, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags);
+ AudioRegion (boost::shared_ptr<AudioSource>, nframes_t start, nframes_t length);
+ AudioRegion (boost::shared_ptr<AudioSource>, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags);
+ AudioRegion (SourceList &, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags);
+ AudioRegion (boost::shared_ptr<const AudioRegion>, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags);
AudioRegion (boost::shared_ptr<const AudioRegion>);
AudioRegion (boost::shared_ptr<AudioSource>, const XMLNode&);
AudioRegion (SourceList &, const XMLNode&);
@@ -164,11 +165,11 @@ class AudioRegion : public Region
void recompute_gain_at_end ();
void recompute_gain_at_start ();
- jack_nframes_t _read_at (const SourceList&, Sample *buf, Sample *mixdown_buffer,
- float *gain_buffer, jack_nframes_t position, jack_nframes_t cnt,
+ nframes_t _read_at (const SourceList&, Sample *buf, Sample *mixdown_buffer,
+ float *gain_buffer, nframes_t position, nframes_t cnt,
uint32_t chan_n = 0,
- jack_nframes_t read_frames = 0,
- jack_nframes_t skip_frames = 0) const;
+ nframes_t read_frames = 0,
+ nframes_t skip_frames = 0) const;
void recompute_at_start ();
void recompute_at_end ();
diff --git a/libs/ardour/ardour/audiosource.h b/libs/ardour/ardour/audiosource.h
index 6a0a20d4b8..db82acf894 100644
--- a/libs/ardour/ardour/audiosource.h
+++ b/libs/ardour/ardour/audiosource.h
@@ -25,6 +25,9 @@
#include <vector>
#include <string>
+#include <boost/shared_ptr.hpp>
+#include <boost/enable_shared_from_this.hpp>
+
#include <time.h>
#include <glibmm/thread.h>
@@ -42,19 +45,19 @@ using std::string;
namespace ARDOUR {
-const jack_nframes_t frames_per_peak = 256;
+const nframes_t frames_per_peak = 256;
-class AudioSource : public Source
+ class AudioSource : public Source, public boost::enable_shared_from_this<ARDOUR::AudioSource>
{
public:
AudioSource (Session&, string name);
AudioSource (Session&, const XMLNode&);
virtual ~AudioSource ();
- virtual jack_nframes_t available_peaks (double zoom) const;
+ virtual nframes_t available_peaks (double zoom) const;
- virtual jack_nframes_t read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const;
- virtual jack_nframes_t write (Sample *src, jack_nframes_t cnt);
+ virtual nframes_t read (Sample *dst, nframes_t start, nframes_t cnt) const;
+ virtual nframes_t write (Sample *src, nframes_t cnt);
virtual float sample_rate () const = 0;
@@ -67,12 +70,12 @@ class AudioSource : public Source
uint32_t read_data_count() const { return _read_data_count; }
uint32_t write_data_count() const { return _write_data_count; }
- int read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t start, jack_nframes_t cnt, double samples_per_unit) const;
+ int read_peaks (PeakData *peaks, nframes_t npeaks, nframes_t start, nframes_t cnt, double samples_per_unit) const;
int build_peaks ();
bool peaks_ready (sigc::slot<void>, sigc::connection&) const;
mutable sigc::signal<void> PeaksReady;
- mutable sigc::signal<void,jack_nframes_t,jack_nframes_t> PeakRangeReady;
+ mutable sigc::signal<void,nframes_t,nframes_t> PeakRangeReady;
XMLNode& get_state ();
int set_state (const XMLNode&);
@@ -81,6 +84,7 @@ class AudioSource : public Source
static void stop_peak_thread ();
int rename_peakfile (std::string newpath);
+ void touch_peakfile ();
static void set_build_missing_peakfiles (bool yn) {
_build_missing_peakfiles = yn;
@@ -90,6 +94,8 @@ class AudioSource : public Source
_build_peakfiles = yn;
}
+ virtual int setup_peakfile () { return 0; }
+
protected:
static bool _build_missing_peakfiles;
static bool _build_peakfiles;
@@ -106,10 +112,10 @@ class AudioSource : public Source
int initialize_peakfile (bool newfile, string path);
void build_peaks_from_scratch ();
- int do_build_peak (jack_nframes_t, jack_nframes_t);
+ int do_build_peak (nframes_t, nframes_t);
- virtual jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const = 0;
- virtual jack_nframes_t write_unlocked (Sample *dst, jack_nframes_t cnt) = 0;
+ virtual nframes_t read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const = 0;
+ virtual nframes_t write_unlocked (Sample *dst, nframes_t cnt) = 0;
virtual string peak_path(string audio_path) = 0;
virtual string old_peak_path(string audio_path) = 0;
@@ -126,17 +132,17 @@ class AudioSource : public Source
};
};
- static vector<AudioSource*> pending_peak_sources;
+ static vector<boost::shared_ptr<AudioSource> > pending_peak_sources;
static Glib::Mutex* pending_peak_sources_lock;
- static void queue_for_peaks (AudioSource*);
+ static void queue_for_peaks (boost::shared_ptr<AudioSource>);
static void clear_queue_for_peaks ();
struct PeakBuildRecord {
- jack_nframes_t frame;
- jack_nframes_t cnt;
+ nframes_t frame;
+ nframes_t cnt;
- PeakBuildRecord (jack_nframes_t f, jack_nframes_t c)
+ PeakBuildRecord (nframes_t f, nframes_t c)
: frame (f), cnt (c) {}
PeakBuildRecord (const PeakBuildRecord& other) {
frame = other.frame;
diff --git a/libs/ardour/ardour/auditioner.h b/libs/ardour/ardour/auditioner.h
index 424ede0009..e6091cfba0 100644
--- a/libs/ardour/ardour/auditioner.h
+++ b/libs/ardour/ardour/auditioner.h
@@ -45,7 +45,7 @@ class Auditioner : public AudioTrack
ARDOUR::AudioPlaylist& prepare_playlist ();
void audition_current_playlist ();
- int play_audition (jack_nframes_t nframes);
+ int play_audition (nframes_t nframes);
void cancel_audition () {
g_atomic_int_set (&_active, 0);
@@ -55,10 +55,10 @@ class Auditioner : public AudioTrack
private:
boost::shared_ptr<AudioRegion> the_region;
- jack_nframes_t current_frame;
+ nframes_t current_frame;
mutable gint _active;
Glib::Mutex lock;
- jack_nframes_t length;
+ nframes_t length;
void drop_ports ();
static void *_drop_ports (void *);
diff --git a/libs/ardour/ardour/configuration.h b/libs/ardour/ardour/configuration.h
index 8d51343ffb..bb49b2dce4 100644
--- a/libs/ardour/ardour/configuration.h
+++ b/libs/ardour/ardour/configuration.h
@@ -55,11 +55,17 @@ class Configuration : public Stateful
std::map<std::string,MidiPortDescriptor *> midi_ports;
+ void map_parameters (sigc::slot<void,const char*> theSlot);
+
int load_state ();
int save_state ();
int set_state (const XMLNode&);
XMLNode& get_state (void);
+ XMLNode& get_variables (sigc::slot<bool,ConfigVariableBase::Owner>);
+ void set_variables (const XMLNode&, ConfigVariableBase::Owner owner);
+
+ void set_current_owner (ConfigVariableBase::Owner);
XMLNode* control_protocol_state () { return _control_protocol_state; }
@@ -71,14 +77,13 @@ class Configuration : public Stateful
#undef CONFIG_VARIABLE_SPECIAL
#define CONFIG_VARIABLE(Type,var,name,value) \
Type get_##var () const { return var.get(); } \
- void set_##var (Type val) { var.set (val); var.set_is_user (user_configuration); ParameterChanged (name); }
+ bool set_##var (Type val) { bool ret = var.set (val, current_owner); if (ret) { ParameterChanged (name); } return ret; }
#define CONFIG_VARIABLE_SPECIAL(Type,var,name,value,mutator) \
Type get_##var () const { return var.get(); } \
- void set_##var (Type val) { var.set (val); var.set_is_user (user_configuration); ParameterChanged (name); }
+ bool set_##var (Type val) { bool ret = var.set (val, current_owner); if (ret) { ParameterChanged (name); } return ret; }
#include "ardour/configuration_vars.h"
#undef CONFIG_VARIABLE
#undef CONFIG_VARIABLE_SPECIAL
-
private:
@@ -92,10 +97,11 @@ class Configuration : public Stateful
#undef CONFIG_VARIABLE
#undef CONFIG_VARIABLE_SPECIAL
- bool user_configuration;
+ ConfigVariableBase::Owner current_owner;
XMLNode* _control_protocol_state;
- XMLNode& state (bool user_only);
+ XMLNode& state (sigc::slot<bool,ConfigVariableBase::Owner>);
+ bool save_config_options_predicate (ConfigVariableBase::Owner owner);
};
extern Configuration *Config;
diff --git a/libs/ardour/ardour/configuration_variable.h b/libs/ardour/ardour/configuration_variable.h
index cdd9b24284..6f0a8a3571 100644
--- a/libs/ardour/ardour/configuration_variable.h
+++ b/libs/ardour/ardour/configuration_variable.h
@@ -10,19 +10,26 @@ namespace ARDOUR {
class ConfigVariableBase {
public:
- ConfigVariableBase (std::string str) : _name (str), _is_user (false) {}
+ enum Owner {
+ Default = 0x1,
+ System = 0x2,
+ Config = 0x4,
+ Session = 0x8,
+ Interface = 0x10
+ };
+
+ ConfigVariableBase (std::string str) : _name (str), _owner (Default) {}
virtual ~ConfigVariableBase() {}
std::string name() const { return _name; }
- bool is_user() const { return _is_user; }
- void set_is_user (bool yn) { _is_user = yn; }
-
+ Owner owner() const { return _owner; }
+
virtual void add_to_node (XMLNode& node) = 0;
- virtual bool set_from_node (const XMLNode& node) = 0;
+ virtual bool set_from_node (const XMLNode& node, Owner owner) = 0;
protected:
std::string _name;
- bool _is_user;
+ Owner _owner;
};
template<class T>
@@ -32,8 +39,13 @@ class ConfigVariable : public ConfigVariableBase
ConfigVariable (std::string str) : ConfigVariableBase (str) {}
ConfigVariable (std::string str, T val) : ConfigVariableBase (str), value (val) {}
- virtual void set (T val) {
+ virtual bool set (T val, Owner owner) {
+ if (val == value) {
+ return false;
+ }
value = val;
+ _owner = (ConfigVariableBase::Owner)(_owner |owner);
+ return true;
}
T get() const {
@@ -49,30 +61,63 @@ class ConfigVariable : public ConfigVariableBase
node.add_child_nocopy (*child);
}
- bool set_from_node (const XMLNode& node) {
- const XMLProperty* prop;
- XMLNodeList nlist;
- XMLNodeConstIterator niter;
- XMLNode* child;
+ bool set_from_node (const XMLNode& node, Owner owner) {
+
+ if (node.name() == "Config") {
+
+ /* ardour.rc */
- nlist = node.children();
-
- for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+ const XMLProperty* prop;
+ XMLNodeList nlist;
+ XMLNodeConstIterator niter;
+ XMLNode* child;
- child = *niter;
+ nlist = node.children();
- if (child->name() == "Option") {
- if ((prop = child->property ("name")) != 0) {
- if (prop->value() == _name) {
- if ((prop = child->property ("value")) != 0) {
- std::stringstream ss;
- ss << prop->value();
- ss >> value;
- return true;
+ for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+
+ child = *niter;
+
+ if (child->name() == "Option") {
+ if ((prop = child->property ("name")) != 0) {
+ if (prop->value() == _name) {
+ if ((prop = child->property ("value")) != 0) {
+ std::stringstream ss;
+ ss << prop->value();
+ ss >> value;
+ _owner = (ConfigVariableBase::Owner)(_owner |owner);
+ return true;
+ }
}
}
}
}
+
+ } else if (node.name() == "Options") {
+
+ /* session file */
+
+ XMLNodeList olist;
+ XMLNodeConstIterator oiter;
+ XMLNode* option;
+ const XMLProperty* opt_prop;
+
+ olist = node.children();
+
+ for (oiter = olist.begin(); oiter != olist.end(); ++oiter) {
+
+ option = *oiter;
+
+ if (option->name() == _name) {
+ if ((opt_prop = option->property ("val")) != 0) {
+ std::stringstream ss;
+ ss << opt_prop->value();
+ ss >> value;
+ _owner = (ConfigVariableBase::Owner)(_owner |owner);
+ return true;
+ }
+ }
+ }
}
return false;
@@ -90,9 +135,12 @@ class ConfigVariableWithMutation : public ConfigVariable<T>
ConfigVariableWithMutation (std::string name, T val, T (*m)(T))
: ConfigVariable<T> (name, val), mutator (m) {}
- void set (T val) {
- unmutated_value = val;
- ConfigVariable<T>::set (mutator (val));
+ bool set (T val, ConfigVariableBase::Owner owner) {
+ if (unmutated_value != val) {
+ unmutated_value = val;
+ return ConfigVariable<T>::set (mutator (val), owner);
+ }
+ return false;
}
protected:
diff --git a/libs/ardour/ardour/configuration_vars.h b/libs/ardour/ardour/configuration_vars.h
index 5222eefb0a..7301b31d8a 100644
--- a/libs/ardour/ardour/configuration_vars.h
+++ b/libs/ardour/ardour/configuration_vars.h
@@ -1,62 +1,126 @@
+/* IO connection */
+
+CONFIG_VARIABLE (AutoConnectOption, output_auto_connect, "output-auto-connect", AutoConnectOption (0))
+CONFIG_VARIABLE (AutoConnectOption, input_auto_connect, "input-auto-connect", AutoConnectOption (0))
+
#ifdef __APPLE__
-CONFIG_VARIABLE(std::string, auditioner_output_left, "auditioner-output-left", "coreaudio:Built-in Audio:in1")
-CONFIG_VARIABLE(std::string, auditioner_output_right, "auditioner-output-right", "coreaudio:Built-in Audio:in2")
+CONFIG_VARIABLE (std::string, auditioner_output_left, "auditioner-output-left", "coreaudio:Built-in Audio:in1")
+CONFIG_VARIABLE (std::string, auditioner_output_right, "auditioner-output-right", "coreaudio:Built-in Audio:in2")
#else
-CONFIG_VARIABLE(std::string, auditioner_output_left, "auditioner-output-left", "alsa_pcm:playback_1")
-CONFIG_VARIABLE(std::string, auditioner_output_right, "auditioner-output-right", "alsa_pcm:playback_2")
+CONFIG_VARIABLE (std::string, auditioner_output_left, "auditioner-output-left", "alsa_pcm:playback_1")
+CONFIG_VARIABLE (std::string, auditioner_output_right, "auditioner-output-right", "alsa_pcm:playback_2")
#endif
+
+/* MIDI and MIDI related */
+
+CONFIG_VARIABLE (std::string, mtc_port_name, "mtc-port-name", "default")
+CONFIG_VARIABLE (std::string, mmc_port_name, "mmc-port-name", "default")
+CONFIG_VARIABLE (std::string, midi_port_name, "midi-port-name", "default")
+CONFIG_VARIABLE (bool, trace_midi_input, "trace-midi-input", false)
+CONFIG_VARIABLE (bool, trace_midi_output, "trace-midi-output", false)
+CONFIG_VARIABLE (bool, send_mtc, "send-mtc", false)
+CONFIG_VARIABLE (bool, send_mmc, "send-mmc", false)
+CONFIG_VARIABLE (bool, mmc_control, "mmc-control", false)
+CONFIG_VARIABLE (bool, midi_feedback, "midi-feedback", false)
+CONFIG_VARIABLE (bool, midi_control, "midi-control", false)
+
+/* control surfaces */
+
+CONFIG_VARIABLE (uint32_t, feedback_interval_ms, "feedback-interval-ms", 100)
+CONFIG_VARIABLE (bool, use_tranzport, "use-tranzport", false)
+
+/* disk operations */
+
+CONFIG_VARIABLE (uint32_t, minimum_disk_io_bytes, "minimum-disk-io-bytes", 1024 * 256)
+CONFIG_VARIABLE (float, track_buffer_seconds, "track-buffer-seconds", 5.0)
+CONFIG_VARIABLE (uint32_t, disk_choice_space_threshold, "disk-choice-space-threshold", 57600000)
+CONFIG_VARIABLE (SampleFormat, native_file_data_format, "native-file-data-format", ARDOUR::FormatFloat)
+CONFIG_VARIABLE (HeaderFormat, native_file_header_format, "native-file-header-format", ARDOUR::WAVE)
+
+/* OSC */
+
+CONFIG_VARIABLE (uint32_t, osc_port, "osc-port", 3819)
+CONFIG_VARIABLE (bool, use_osc, "use-osc", true)
+CONFIG_VARIABLE (bool, use_overlap_equivalency, "use-overlap-equivalency", true)
+
+/* crossfades */
+
+CONFIG_VARIABLE (CrossfadeModel, xfade_model, "xfade-model", ShortCrossfade)
+CONFIG_VARIABLE (bool, auto_xfade, "auto-xfade", true)
+CONFIG_VARIABLE (float, short_xfade_seconds, "short-xfade-seconds", 0.015)
+CONFIG_VARIABLE (bool, crossfades_active, "crossfades-active", false)
+CONFIG_VARIABLE (bool, crossfades_visible, "crossfades-visible", false)
+CONFIG_VARIABLE (uint32_t, destructive_xfade_msecs, "destructive-xfade-msecs", 2)
+
+/* editing related */
+
+CONFIG_VARIABLE (EditMode, edit_mode, "edit-mode", Slide)
+CONFIG_VARIABLE (LayerModel, layer_model, "layer-model", MoveAddHigher)
+
+/* monitoring, mute, solo etc */
+
+CONFIG_VARIABLE (bool, mute_affects_pre_fader, "mute-affects-pre-fader", true)
+CONFIG_VARIABLE (bool, mute_affects_post_fader, "mute-affects-post-fader", true)
+CONFIG_VARIABLE (bool, mute_affects_control_outs, "mute-affects-control-outs", true)
+CONFIG_VARIABLE (bool, mute_affects_main_outs, "mute-affects-main-outs", true)
+CONFIG_VARIABLE (MonitorModel, monitoring_model, "monitoring-model", SoftwareMonitoring)
+CONFIG_VARIABLE (SoloModel, solo_model, "solo-model", InverseMute)
+CONFIG_VARIABLE (bool, solo_latched, "solo-latched", true)
+CONFIG_VARIABLE (bool, latched_record_enable, "latched-record-enable", false)
+CONFIG_VARIABLE (bool, all_safe, "all-safe", false)
+
+/* click */
+
+CONFIG_VARIABLE (bool, clicking, "clicking", false)
+CONFIG_VARIABLE (std::string, click_sound, "click-sound", "")
+CONFIG_VARIABLE (std::string, click_emphasis_sound, "click-emphasis-sound", "")
+
+/* transport control and related */
+
+CONFIG_VARIABLE (bool, auto_play, "auto-play", false)
+CONFIG_VARIABLE (bool, auto_return, "auto-return", false)
+CONFIG_VARIABLE (bool, auto_input, "auto-input", true)
+CONFIG_VARIABLE (bool, auto_loop, "auto-loop", false)
+CONFIG_VARIABLE (bool, punch_in, "punch-in", false)
+CONFIG_VARIABLE (bool, punch_out, "punch-out", false)
+CONFIG_VARIABLE (bool, plugins_stop_with_transport, "plugins-stop-with-transport", false)
+CONFIG_VARIABLE (bool, do_not_record_plugins, "do-not-record-plugins", false)
+CONFIG_VARIABLE (bool, stop_recording_on_xrun, "stop-recording-on-xrun", false)
+CONFIG_VARIABLE (bool, stop_at_session_end, "stop-at-session-end", true)
+CONFIG_VARIABLE (bool, seamless_loop, "seamless-loop", false)
+CONFIG_VARIABLE (nframes_t, preroll, "preroll", 0)
+CONFIG_VARIABLE (nframes_t, postroll, "postroll", 0)
+CONFIG_VARIABLE (float, rf_speed, "rf-speed", 2.0f)
+CONFIG_VARIABLE (float, shuttle_speed_factor, "shuttle-speed-factor", 1.0f)
+CONFIG_VARIABLE (float, shuttle_speed_threshold, "shuttle-speed-threshold", 5.0f)
+CONFIG_VARIABLE (SlaveSource, slave_source, "slave-source", None)
+CONFIG_VARIABLE (ShuttleBehaviour, shuttle_behaviour, "shuttle-behaviour", Sprung)
+CONFIG_VARIABLE (ShuttleUnits, shuttle_units, "shuttle-units", Percentage)
+CONFIG_VARIABLE (bool, quieten_at_speed, "quieten-at-speed", true)
+
+/* timecode and sync */
+
+CONFIG_VARIABLE (bool, jack_time_master, "jack-time-master", true)
+CONFIG_VARIABLE (bool, use_video_sync, "use-video-sync", false)
+CONFIG_VARIABLE (bool, timecode_source_is_synced, "timecode-source-is-synced", true)
+CONFIG_VARIABLE (float, smpte_frames_per_second, "smpte-frames-per-second", 30.0f)
+CONFIG_VARIABLE (float, video_pullup, "video-pullup", 0.0f)
+CONFIG_VARIABLE (bool, smpte_drop_frames, "smpte-drop-frames", false)
+
+/* metering */
+
+CONFIG_VARIABLE (float, meter_hold, "meter-hold", 100.0f)
+CONFIG_VARIABLE (float, meter_falloff, "meter-falloff", 0.375f)
+CONFIG_VARIABLE (nframes_t, over_length_short, "over-length-short", 2)
+CONFIG_VARIABLE (nframes_t, over_length_long, "over-length-long", 10)
+
+/* miscellany */
-CONFIG_VARIABLE(std::string, mtc_port_name, "mtc-port-name", "default")
-CONFIG_VARIABLE(std::string, mmc_port_name, "mmc-port-name", "default")
-CONFIG_VARIABLE(std::string, midi_port_name, "midi-port-name", "default")
-CONFIG_VARIABLE(uint32_t, minimum_disk_io_bytes, "minimum-disk-io-bytes", 1024 * 256)
-CONFIG_VARIABLE(float, track_buffer_seconds, "track-buffer-seconds", 5.0)
-CONFIG_VARIABLE(bool, hiding_groups_deactivates_groups, "hiding-groups-deactivates-groups", true)
-CONFIG_VARIABLE(bool, mute_affects_pre_fader, "mute-affects-pre-fader", true)
-CONFIG_VARIABLE(bool, mute_affects_post_fader, "mute-affects-post-fader", true)
-CONFIG_VARIABLE(bool, mute_affects_control_outs, "mute-affects-control-outs", true)
-CONFIG_VARIABLE(bool, mute_affects_main_outs, "mute-affects-main-outs", true)
-CONFIG_VARIABLE(bool, solo_latch, "solo-latch", true)
-CONFIG_VARIABLE(bool, use_hardware_monitoring, "use-hardware-monitoring", false)
-CONFIG_VARIABLE(bool, use_sw_monitoring, "use-sw-monitoring", false)
-CONFIG_VARIABLE(bool, use_external_monitoring, "use-external-monitoring", true)
-CONFIG_VARIABLE(bool, jack_time_master, "jack-time-master", true)
-CONFIG_VARIABLE(bool, use_video_sync, "use-video-sync", false)
-CONFIG_VARIABLE(bool, trace_midi_input, "trace-midi-input", false)
-CONFIG_VARIABLE(bool, trace_midi_output, "trace-midi-output", false)
-CONFIG_VARIABLE(bool, plugins_stop_with_transport, "plugins-stop-with-transport", false)
-CONFIG_VARIABLE(bool, stop_recording_on_xrun, "stop-recording-on-xrun", false)
-CONFIG_VARIABLE(bool, verify_remove_last_capture, "verify-remove-last-capture", true)
-CONFIG_VARIABLE(bool, stop_at_session_end, "stop-at-session-end", true)
-CONFIG_VARIABLE(bool, seamless_looping, "seamless-looping", true)
-CONFIG_VARIABLE(bool, auto_xfade, "auto-xfade", true)
-CONFIG_VARIABLE(bool, no_new_session_dialog, "no-new-session-dialog", false)
-CONFIG_VARIABLE(bool, timecode_source_is_synced, "timecode-source-is-synced", true)
-CONFIG_VARIABLE(bool, latched_record_enable, "latched-record-enable", false)
-CONFIG_VARIABLE(bool, use_vst, "use-vst", true)
-CONFIG_VARIABLE(bool, quieten_at_speed, "quieten-at-speed", true)
-CONFIG_VARIABLE(uint32_t, feedback_interval_ms, "feedback-interval-ms", 100)
-CONFIG_VARIABLE(uint32_t, disk_choice_space_threshold, "disk-choice-space-threshold", 57600000)
-CONFIG_VARIABLE(uint32_t, destructive_xfade_msecs, "destructive-xfade-msecs", 2)
-CONFIG_VARIABLE(SampleFormat, native_file_data_format, "native-file-data-format", ARDOUR::FormatFloat)
-CONFIG_VARIABLE(HeaderFormat, native_file_header_format, "native-file-header-format", ARDOUR::WAVE)
-CONFIG_VARIABLE(bool, use_tranzport, "use-tranzport", false)
-CONFIG_VARIABLE(uint32_t, osc_port, "osc-port", 3819)
-CONFIG_VARIABLE(bool, use_osc, "use-osc", true)
-CONFIG_VARIABLE(bool, use_overlap_equivalency, "use-overlap-equivalency", true)
-CONFIG_VARIABLE(bool, meter_falloff_off, "meter-falloff-off", false)
-CONFIG_VARIABLE(bool, meter_falloff_slowest, "meter-falloff-slowest", false)
-CONFIG_VARIABLE(bool, meter_falloff_slower, "meter-falloff-slower", false)
-CONFIG_VARIABLE(bool, meter_falloff_slow, "meter-falloff-slow", false)
-CONFIG_VARIABLE(bool, meter_falloff_medium, "meter-falloff-medium", false)
-CONFIG_VARIABLE(bool, meter_falloff_fast, "meter-falloff-fast", true)
-CONFIG_VARIABLE(bool, meter_falloff_faster, "meter-falloff-faster", false)
-CONFIG_VARIABLE(bool, meter_falloff_fastest, "meter-falloff-fastest", false)
-CONFIG_VARIABLE(bool, meter_hold_off, "meter-hold-off", false)
-CONFIG_VARIABLE(bool, meter_hold_short, "meter-hold-short", false)
-CONFIG_VARIABLE(bool, meter_hold_medium, "meter-hold-medium", false)
-CONFIG_VARIABLE(bool, meter_hold_long, "meter-hold-long", false)
-
-/* these variables have custom set() methods */
+CONFIG_VARIABLE (bool, hiding_groups_deactivates_groups, "hiding-groups-deactivates-groups", true)
+CONFIG_VARIABLE (bool, verify_remove_last_capture, "verify-remove-last-capture", true)
+CONFIG_VARIABLE (bool, no_new_session_dialog, "no-new-session-dialog", false)
+CONFIG_VARIABLE (bool, use_vst, "use-vst", true)
+
+/* these variables have custom set() methods (e.g. path globbing) */
CONFIG_VARIABLE_SPECIAL(std::string, raid_path, "raid-path", "", path_expand)
diff --git a/libs/ardour/ardour/control_protocol_manager.h b/libs/ardour/ardour/control_protocol_manager.h
index 8eda7a4555..39e4803637 100644
--- a/libs/ardour/ardour/control_protocol_manager.h
+++ b/libs/ardour/ardour/control_protocol_manager.h
@@ -23,7 +23,11 @@ struct ControlProtocolInfo {
std::string path;
bool requested;
bool mandatory;
+ bool supports_feedback;
XMLNode* state;
+
+ ControlProtocolInfo() : descriptor (0), protocol (0), state (0) {}
+ ~ControlProtocolInfo() { if (state) { delete state; } }
};
class ControlProtocolManager : public sigc::trackable, public Stateful
@@ -46,6 +50,8 @@ struct ControlProtocolInfo {
static const std::string state_node_name;
+ void set_protocol_states (const XMLNode&);
+
int set_state (const XMLNode&);
XMLNode& get_state (void);
diff --git a/libs/ardour/ardour/coreaudiosource.h b/libs/ardour/ardour/coreaudiosource.h
index 49009caf53..668fe61102 100644
--- a/libs/ardour/ardour/coreaudiosource.h
+++ b/libs/ardour/ardour/coreaudiosource.h
@@ -33,24 +33,21 @@ class CoreAudioSource : public AudioFileSource {
~CoreAudioSource ();
float sample_rate() const;
- int update_header (jack_nframes_t when, struct tm&, time_t);
+ int update_header (nframes_t when, struct tm&, time_t);
int flush_header () {return 0;};
void set_header_timeline_position () {};
protected:
- jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const;
-
- jack_nframes_t write_unlocked (Sample *dst, jack_nframes_t cnt)
- { return 0; }
-
+ nframes_t read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const;
+ nframes_t write_unlocked (Sample *dst, nframes_t cnt) { return 0; }
private:
mutable CAAudioFile af;
uint16_t n_channels;
mutable float *tmpbuf;
- mutable jack_nframes_t tmpbufsize;
+ mutable nframes_t tmpbufsize;
mutable Glib::Mutex _tmpbuf_lock;
void init (const string &str);
diff --git a/libs/ardour/ardour/crossfade.h b/libs/ardour/ardour/crossfade.h
index ded41bbfda..7fd7323b36 100644
--- a/libs/ardour/ardour/crossfade.h
+++ b/libs/ardour/ardour/crossfade.h
@@ -46,8 +46,8 @@ struct CrossfadeState : public StateManager::State {
UndoAction fade_in_memento;
UndoAction fade_out_memento;
- jack_nframes_t position;
- jack_nframes_t length;
+ nframes_t position;
+ nframes_t length;
AnchorPoint anchor_point;
bool follow_overlap;
bool active;
@@ -65,8 +65,8 @@ class Crossfade : public PBD::StatefulDestructible, public StateManager
/* constructor for "fixed" xfades at each end of an internal overlap */
Crossfade (boost::shared_ptr<ARDOUR::AudioRegion> in, boost::shared_ptr<ARDOUR::AudioRegion> out,
- jack_nframes_t position,
- jack_nframes_t initial_length,
+ nframes_t position,
+ nframes_t initial_length,
AnchorPoint);
/* constructor for xfade between two regions that are overlapped in any way
@@ -93,11 +93,11 @@ class Crossfade : public PBD::StatefulDestructible, public StateManager
boost::shared_ptr<ARDOUR::AudioRegion> in() const { return _in; }
boost::shared_ptr<ARDOUR::AudioRegion> out() const { return _out; }
- jack_nframes_t read_at (Sample *buf, Sample *mixdown_buffer,
- float *gain_buffer, jack_nframes_t position, jack_nframes_t cnt,
+ nframes_t read_at (Sample *buf, Sample *mixdown_buffer,
+ float *gain_buffer, nframes_t position, nframes_t cnt,
uint32_t chan_n,
- jack_nframes_t read_frames = 0,
- jack_nframes_t skip_frames = 0);
+ nframes_t read_frames = 0,
+ nframes_t skip_frames = 0);
bool refresh ();
@@ -117,21 +117,21 @@ class Crossfade : public PBD::StatefulDestructible, public StateManager
return (_in == a && _out == b) || (_in == b && _out == a);
}
- jack_nframes_t length() const { return _length; }
- jack_nframes_t overlap_length() const;
- jack_nframes_t position() const { return _position; }
+ nframes_t length() const { return _length; }
+ nframes_t overlap_length() const;
+ nframes_t position() const { return _position; }
sigc::signal<void,Crossfade*> Invalidated;
- bool covers (jack_nframes_t frame) const {
+ bool covers (nframes_t frame) const {
return _position <= frame && frame < _position + _length;
}
- OverlapType coverage (jack_nframes_t start, jack_nframes_t end) const;
+ OverlapType coverage (nframes_t start, nframes_t end) const;
UndoAction get_memento() const;
- static void set_buffer_size (jack_nframes_t);
+ static void set_buffer_size (nframes_t);
bool active () const { return _active; }
void set_active (bool yn);
@@ -143,10 +143,10 @@ class Crossfade : public PBD::StatefulDestructible, public StateManager
Curve& fade_in() { return _fade_in; }
Curve& fade_out() { return _fade_out; }
- jack_nframes_t set_length (jack_nframes_t);
+ nframes_t set_length (nframes_t);
- static jack_nframes_t short_xfade_length() { return _short_xfade_length; }
- static void set_short_xfade_length (jack_nframes_t n);
+ static nframes_t short_xfade_length() { return _short_xfade_length; }
+ static void set_short_xfade_length (nframes_t n);
static Change ActiveChanged;
@@ -154,15 +154,15 @@ class Crossfade : public PBD::StatefulDestructible, public StateManager
friend struct CrossfadeComparePtr;
friend class AudioPlaylist;
- static jack_nframes_t _short_xfade_length;
+ static nframes_t _short_xfade_length;
boost::shared_ptr<ARDOUR::AudioRegion> _in;
boost::shared_ptr<ARDOUR::AudioRegion> _out;
bool _active;
bool _in_update;
OverlapType overlap_type;
- jack_nframes_t _length;
- jack_nframes_t _position;
+ nframes_t _length;
+ nframes_t _position;
AnchorPoint _anchor_point;
bool _follow_overlap;
bool _fixed;
diff --git a/libs/ardour/ardour/destructive_filesource.h b/libs/ardour/ardour/destructive_filesource.h
index fed84217e7..1e75042ce9 100644
--- a/libs/ardour/ardour/destructive_filesource.h
+++ b/libs/ardour/ardour/destructive_filesource.h
@@ -31,7 +31,7 @@ namespace ARDOUR {
class DestructiveFileSource : public SndFileSource {
public:
- DestructiveFileSource (Session&, std::string path, SampleFormat samp_format, HeaderFormat hdr_format, jack_nframes_t rate,
+ DestructiveFileSource (Session&, std::string path, SampleFormat samp_format, HeaderFormat hdr_format, nframes_t rate,
Flag flags = AudioFileSource::Flag (AudioFileSource::Writable));
DestructiveFileSource (Session&, std::string path, Flag flags);
@@ -39,34 +39,34 @@ class DestructiveFileSource : public SndFileSource {
DestructiveFileSource (Session&, const XMLNode&);
~DestructiveFileSource ();
- jack_nframes_t last_capture_start_frame() const;
- void mark_capture_start (jack_nframes_t);
+ nframes_t last_capture_start_frame() const;
+ void mark_capture_start (nframes_t);
void mark_capture_end ();
void clear_capture_marks();
XMLNode& get_state ();
- static void setup_standard_crossfades (jack_nframes_t sample_rate);
+ static void setup_standard_crossfades (nframes_t sample_rate);
protected:
- jack_nframes_t write_unlocked (Sample *src, jack_nframes_t cnt);
+ nframes_t write_unlocked (Sample *src, nframes_t cnt);
virtual void handle_header_position_change ();
private:
- static jack_nframes_t xfade_frames;
+ static nframes_t xfade_frames;
static gain_t* out_coefficient;
static gain_t* in_coefficient;
bool _capture_start;
bool _capture_end;
- jack_nframes_t capture_start_frame;
- jack_nframes_t file_pos; // unit is frames
+ nframes_t capture_start_frame;
+ nframes_t file_pos; // unit is frames
Sample* xfade_buf;
void init ();
- jack_nframes_t crossfade (Sample* data, jack_nframes_t cnt, int dir);
- void set_timeline_position (jack_nframes_t);
+ nframes_t crossfade (Sample* data, nframes_t cnt, int dir);
+ void set_timeline_position (nframes_t);
};
}
diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h
index 048e9df90f..7a779b69bf 100644
--- a/libs/ardour/ardour/diskstream.h
+++ b/libs/ardour/ardour/diskstream.h
@@ -54,7 +54,7 @@ class Session;
class Playlist;
class IO;
- class Diskstream : public sigc::trackable, public PBD::StatefulDestructible
+ class Diskstream : public PBD::StatefulDestructible
{
public:
enum Flag {
@@ -83,8 +83,8 @@ class IO;
void set_align_style (AlignStyle);
void set_persistent_align_style (AlignStyle a) { _persistent_alignment_style = a; }
- jack_nframes_t roll_delay() const { return _roll_delay; }
- void set_roll_delay (jack_nframes_t);
+ nframes_t roll_delay() const { return _roll_delay; }
+ void set_roll_delay (nframes_t);
bool record_enabled() const { return g_atomic_int_get (&_record_enabled); }
virtual void set_record_enabled (bool yn) = 0;
@@ -109,14 +109,14 @@ class IO;
virtual int use_new_playlist () = 0;
virtual int use_copy_playlist () = 0;
- jack_nframes_t current_capture_start() const { return capture_start_frame; }
- jack_nframes_t current_capture_end() const { return capture_start_frame + capture_captured; }
- jack_nframes_t get_capture_start_frame (uint32_t n=0);
- jack_nframes_t get_captured_frames (uint32_t n=0);
+ nframes_t current_capture_start() const { return capture_start_frame; }
+ nframes_t current_capture_end() const { return capture_start_frame + capture_captured; }
+ nframes_t get_capture_start_frame (uint32_t n=0);
+ nframes_t get_captured_frames (uint32_t n=0);
ChanCount n_channels() { return _n_channels; }
- static jack_nframes_t disk_io_frames() { return disk_io_chunk_frames; }
+ static nframes_t disk_io_frames() { return disk_io_chunk_frames; }
static void set_disk_io_chunk_frames (uint32_t n) { disk_io_chunk_frames = n; }
/* Stateful */
@@ -125,7 +125,7 @@ class IO;
virtual void monitor_input (bool) {}
- jack_nframes_t capture_offset() const { return _capture_offset; }
+ nframes_t capture_offset() const { return _capture_offset; }
virtual void set_capture_offset ();
bool slaved() const { return _slaved; }
@@ -146,7 +146,6 @@ class IO;
static sigc::signal<void> DiskOverrun;
static sigc::signal<void> DiskUnderrun;
- static sigc::signal<void,std::list<boost::shared_ptr<Source> >*> DeleteSources;
protected:
friend class Session;
@@ -157,9 +156,9 @@ class IO;
virtual void set_pending_overwrite (bool) = 0;
virtual int overwrite_existing_buffers () = 0;
- virtual void set_block_size (jack_nframes_t) = 0;
- virtual int internal_playback_seek (jack_nframes_t distance) = 0;
- virtual int can_internal_playback_seek (jack_nframes_t distance) = 0;
+ virtual void set_block_size (nframes_t) = 0;
+ virtual int internal_playback_seek (nframes_t distance) = 0;
+ virtual int can_internal_playback_seek (nframes_t distance) = 0;
virtual int rename_write_sources () = 0;
virtual void reset_write_sources (bool, bool force = false) = 0;
virtual void non_realtime_input_change () = 0;
@@ -169,14 +168,14 @@ class IO;
protected:
friend class Auditioner;
- virtual int seek (jack_nframes_t which_sample, bool complete_refill = false) = 0;
+ virtual int seek (nframes_t which_sample, bool complete_refill = false) = 0;
protected:
friend class Track;
virtual void prepare ();
- virtual int process (jack_nframes_t transport_frame, jack_nframes_t nframes, jack_nframes_t offset, bool can_record, bool rec_monitors_input) = 0;
- virtual bool commit (jack_nframes_t nframes) = 0;
+ virtual int process (nframes_t transport_frame, nframes_t nframes, nframes_t offset, bool can_record, bool rec_monitors_input) = 0;
+ virtual bool commit (nframes_t nframes) = 0;
virtual void recover (); /* called if commit will not be called, but process was */
//private:
@@ -188,7 +187,7 @@ class IO;
struct CaptureTransition {
TransitionType type;
- jack_nframes_t capture_val; ///< The start or end file frame position
+ nframes_t capture_val; ///< The start or end file frame position
};
/* The two central butler operations */
@@ -227,12 +226,12 @@ class IO;
virtual int use_pending_capture_data (XMLNode& node) = 0;
virtual void get_input_sources () = 0;
- virtual void check_record_status (jack_nframes_t transport_frame, jack_nframes_t nframes, bool can_record) = 0;
+ virtual void check_record_status (nframes_t transport_frame, nframes_t nframes, bool can_record) = 0;
virtual void set_align_style_from_io() {}
virtual void setup_destructive_playlist () {}
virtual void use_destructive_playlist () {}
- static jack_nframes_t disk_io_chunk_frames;
+ static nframes_t disk_io_chunk_frames;
vector<CaptureInfo*> capture_info;
Glib::Mutex capture_info_lock;
@@ -252,34 +251,34 @@ class IO;
bool _seek_required;
bool force_refill;
- jack_nframes_t capture_start_frame;
- jack_nframes_t capture_captured;
+ nframes_t capture_start_frame;
+ nframes_t capture_captured;
bool was_recording;
- jack_nframes_t adjust_capture_position;
- jack_nframes_t _capture_offset;
- jack_nframes_t _roll_delay;
- jack_nframes_t first_recordable_frame;
- jack_nframes_t last_recordable_frame;
+ nframes_t adjust_capture_position;
+ nframes_t _capture_offset;
+ nframes_t _roll_delay;
+ nframes_t first_recordable_frame;
+ nframes_t last_recordable_frame;
int last_possibly_recording;
AlignStyle _alignment_style;
bool _scrubbing;
bool _slaved;
bool _processed;
Location* loop_location;
- jack_nframes_t overwrite_frame;
+ nframes_t overwrite_frame;
off_t overwrite_offset;
bool pending_overwrite;
bool overwrite_queued;
IOChange input_change_pending;
- jack_nframes_t wrap_buffer_size;
- jack_nframes_t speed_buffer_size;
+ nframes_t wrap_buffer_size;
+ nframes_t speed_buffer_size;
uint64_t last_phase;
uint64_t phi;
- jack_nframes_t file_frame;
- jack_nframes_t playback_sample;
- jack_nframes_t playback_distance;
+ nframes_t file_frame;
+ nframes_t playback_sample;
+ nframes_t playback_distance;
uint32_t _read_data_count;
uint32_t _write_data_count;
@@ -290,9 +289,9 @@ class IO;
Glib::Mutex state_lock;
- jack_nframes_t scrub_start;
- jack_nframes_t scrub_buffer_size;
- jack_nframes_t scrub_offset;
+ nframes_t scrub_start;
+ nframes_t scrub_buffer_size;
+ nframes_t scrub_offset;
sigc::connection ports_created_c;
sigc::connection plmod_connection;
diff --git a/libs/ardour/ardour/export.h b/libs/ardour/ardour/export.h
index 075464767e..f66acec893 100644
--- a/libs/ardour/ardour/export.h
+++ b/libs/ardour/ardour/export.h
@@ -34,43 +34,43 @@ namespace ARDOUR
void clear ();
- int prepare (jack_nframes_t blocksize, jack_nframes_t frame_rate);
+ int prepare (nframes_t blocksize, nframes_t frame_rate);
- int process (jack_nframes_t nframes);
+ int process (nframes_t nframes);
/* set by the user */
string path;
- jack_nframes_t sample_rate;
+ nframes_t sample_rate;
int src_quality;
SNDFILE* out;
uint32_t channels;
AudioExportPortMap port_map;
- jack_nframes_t start_frame;
- jack_nframes_t end_frame;
+ nframes_t start_frame;
+ nframes_t end_frame;
GDitherType dither_type;
bool do_freewheel;
/* used exclusively during export */
- jack_nframes_t frame_rate;
+ nframes_t frame_rate;
GDither dither;
float* dataF;
float* dataF2;
float* leftoverF;
- jack_nframes_t leftover_frames;
- jack_nframes_t max_leftover_frames;
+ nframes_t leftover_frames;
+ nframes_t max_leftover_frames;
void* output_data;
- jack_nframes_t out_samples_max;
+ nframes_t out_samples_max;
uint32_t sample_bytes;
uint32_t data_width;
- jack_nframes_t total_frames;
+ nframes_t total_frames;
SF_INFO sfinfo;
SRC_DATA src_data;
SRC_STATE* src_state;
- jack_nframes_t pos;
+ nframes_t pos;
sigc::connection freewheel_connection;
diff --git a/libs/ardour/ardour/gain.h b/libs/ardour/ardour/gain.h
index 3bd2d3be61..3613ea1a5a 100644
--- a/libs/ardour/ardour/gain.h
+++ b/libs/ardour/ardour/gain.h
@@ -32,10 +32,10 @@ struct Gain : public Curve {
Gain (const Gain&);
Gain& operator= (const Gain&);
- static void fill_linear_fade_in (Gain& curve, jack_nframes_t frames);
- static void fill_linear_volume_fade_in (Gain& curve, jack_nframes_t frames);
- static void fill_linear_fade_out (Gain& curve, jack_nframes_t frames);
- static void fill_linear_volume_fade_out (Gain& curve, jack_nframes_t frames);
+ static void fill_linear_fade_in (Gain& curve, nframes_t frames);
+ static void fill_linear_volume_fade_in (Gain& curve, nframes_t frames);
+ static void fill_linear_fade_out (Gain& curve, nframes_t frames);
+ static void fill_linear_volume_fade_out (Gain& curve, nframes_t frames);
};
diff --git a/libs/ardour/ardour/insert.h b/libs/ardour/ardour/insert.h
index a8a651df24..5d917a8c2c 100644
--- a/libs/ardour/ardour/insert.h
+++ b/libs/ardour/ardour/insert.h
@@ -53,7 +53,8 @@ class Insert : public Redirect
virtual ~Insert() { }
- virtual void run (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t nframes, jack_nframes_t offset) = 0;
+ virtual void run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset) = 0;
+
virtual void activate () {}
virtual void deactivate () {}
@@ -75,9 +76,10 @@ class PortInsert : public Insert
int set_state(const XMLNode&);
void init ();
- void run (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t nframes, jack_nframes_t offset);
+
+ void run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset);
- jack_nframes_t latency();
+ nframes_t latency();
ChanCount output_streams() const;
ChanCount input_streams() const;
@@ -113,12 +115,13 @@ class PluginInsert : public Insert
StateManager::State* state_factory (std::string why) const;
Change restore_state (StateManager::State&);
- void run (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t nframes, jack_nframes_t offset);
- void silence (jack_nframes_t nframes, jack_nframes_t offset);
+ void run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset);
+ void silence (nframes_t nframes, nframes_t offset);
+
void activate ();
void deactivate ();
- void set_block_size (jack_nframes_t nframes);
+ void set_block_size (nframes_t nframes);
ChanCount output_streams() const;
ChanCount input_streams() const;
@@ -154,10 +157,9 @@ class PluginInsert : public Insert
string describe_parameter (uint32_t);
- jack_nframes_t latency();
+ nframes_t latency();
- void transport_stopped (jack_nframes_t now);
- void automation_snapshot (jack_nframes_t now);
+ void transport_stopped (nframes_t now);
protected:
void store_state (PluginInsertState&) const;
@@ -167,8 +169,9 @@ class PluginInsert : public Insert
void parameter_changed (uint32_t, float);
vector<boost::shared_ptr<Plugin> > _plugins;
- void automation_run (BufferSet& bufs, jack_nframes_t nframes, jack_nframes_t offset);
- void connect_and_run (BufferSet& bufs, jack_nframes_t nframes, jack_nframes_t offset, bool with_auto, jack_nframes_t now = 0);
+
+ void automation_run (BufferSet& bufs, nframes_t nframes, nframes_t offset);
+ void connect_and_run (BufferSet& bufs, nframes_t nframes, nframes_t offset, bool with_auto, nframes_t now = 0);
void init ();
void set_automatable ();
diff --git a/libs/ardour/ardour/io.h b/libs/ardour/ardour/io.h
index 6074376291..56566149c0 100644
--- a/libs/ardour/ardour/io.h
+++ b/libs/ardour/ardour/io.h
@@ -100,7 +100,7 @@ class IO : public PBD::StatefulDestructible, public ARDOUR::StateManager
const string& name() const { return _name; }
virtual int set_name (string str, void *src);
- virtual void silence (jack_nframes_t, jack_nframes_t offset);
+ virtual void silence (nframes_t, nframes_t offset);
void collect_input (BufferSet& bufs, jack_nframes_t nframes, jack_nframes_t offset);
void deliver_output (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t end_frame,
@@ -144,9 +144,9 @@ class IO : public PBD::StatefulDestructible, public ARDOUR::StateManager
int disconnect_inputs (void *src);
int disconnect_outputs (void *src);
- jack_nframes_t output_latency() const;
- jack_nframes_t input_latency() const;
- void set_port_latency (jack_nframes_t);
+ nframes_t output_latency() const;
+ nframes_t input_latency() const;
+ void set_port_latency (nframes_t);
const PortSet& inputs() const { return _inputs; }
const PortSet& outputs() const { return _outputs; }
@@ -244,16 +244,7 @@ public:
AutoStyle gain_automation_style () const { return _gain_automation_curve.automation_style(); }
sigc::signal<void> gain_automation_style_changed;
- static void set_automation_interval (jack_nframes_t frames) {
- _automation_interval = frames;
- }
-
- static jack_nframes_t automation_interval() {
- return _automation_interval;
- }
-
- virtual void transport_stopped (jack_nframes_t now);
- virtual void automation_snapshot (jack_nframes_t now);
+ virtual void transport_stopped (nframes_t now);
ARDOUR::Curve& gain_automation_curve () { return _gain_automation_curve; }
@@ -277,24 +268,24 @@ public:
mutable Glib::Mutex io_lock;
protected:
- Session& _session;
- Panner* _panner;
- BufferSet* _output_buffers; //< Set directly to our output port buffers
- gain_t _gain;
- gain_t _effective_gain;
- gain_t _desired_gain;
- Glib::Mutex declick_lock;
- PortSet _outputs;
- PortSet _inputs;
- PeakMeter* _meter;
- string _name;
- Connection* _input_connection;
- Connection* _output_connection;
- bool no_panner_reset;
- bool _phase_invert;
- XMLNode* deferred_state;
- DataType _default_type;
-
+ Session& _session;
+ Panner* _panner;
+ BufferSet* _output_buffers; //< Set directly to output port buffers
+ gain_t _gain;
+ gain_t _effective_gain;
+ gain_t _desired_gain;
+ Glib::Mutex declick_lock;
+ PortSet _outputs;
+ PortSet _inputs;
+ PeakMeter* _meter;
+ string _name;
+ Connection* _input_connection;
+ Connection* _output_connection;
+ bool no_panner_reset;
+ bool _phase_invert;
+ XMLNode* deferred_state;
+ DataType _default_type;
+
virtual void set_deferred_state() {}
void reset_panner ();
@@ -303,7 +294,7 @@ public:
{ return _inputs.count().get(DataType::AUDIO); }
struct GainControllable : public PBD::Controllable {
- GainControllable (IO& i) : io (i) {}
+ GainControllable (std::string name, IO& i) : Controllable (name), io (i) {}
void set_value (float val);
float get_value (void) const;
@@ -318,12 +309,7 @@ public:
Change restore_state (State&);
StateManager::State* state_factory (std::string why) const;
- /* automation */
-
- jack_nframes_t last_automation_snapshot;
- static jack_nframes_t _automation_interval;
-
- AutoState _gain_automation_state;
+ AutoState _gain_automation_state;
AutoStyle _gain_automation_style;
bool apply_gain_automation;
diff --git a/libs/ardour/ardour/ladspa_plugin.h b/libs/ardour/ardour/ladspa_plugin.h
index c2bb10a843..27e8bc5e84 100644
--- a/libs/ardour/ardour/ladspa_plugin.h
+++ b/libs/ardour/ardour/ladspa_plugin.h
@@ -48,7 +48,7 @@ class Session;
class LadspaPlugin : public ARDOUR::Plugin
{
public:
- LadspaPlugin (void *module, ARDOUR::AudioEngine&, ARDOUR::Session&, uint32_t index, jack_nframes_t sample_rate);
+ LadspaPlugin (void *module, ARDOUR::AudioEngine&, ARDOUR::Session&, uint32_t index, nframes_t sample_rate);
LadspaPlugin (const LadspaPlugin &);
~LadspaPlugin ();
@@ -60,7 +60,7 @@ class LadspaPlugin : public ARDOUR::Plugin
const char * maker() const { return descriptor->Maker; }
uint32_t parameter_count() const { return descriptor->PortCount; }
float default_value (uint32_t port);
- jack_nframes_t latency() const;
+ nframes_t latency() const;
void set_parameter (uint32_t port, float val);
float get_parameter (uint32_t port) const;
int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const;
@@ -81,9 +81,9 @@ class LadspaPlugin : public ARDOUR::Plugin
descriptor->cleanup (handle);
}
}
- void set_block_size (jack_nframes_t nframes) {}
+ void set_block_size (nframes_t nframes) {}
- int connect_and_run (BufferSet& bufs, uint32_t& in, uint32_t& out, jack_nframes_t nframes, jack_nframes_t offset);
+ int connect_and_run (BufferSet& bufs, uint32_t& in, uint32_t& out, nframes_t nframes, nframes_t offset);
void store_state (ARDOUR::PluginState&);
void restore_state (ARDOUR::PluginState&);
string describe_parameter (uint32_t);
@@ -126,15 +126,15 @@ class LadspaPlugin : public ARDOUR::Plugin
void *module;
const LADSPA_Descriptor *descriptor;
LADSPA_Handle handle;
- jack_nframes_t sample_rate;
+ nframes_t sample_rate;
LADSPA_Data *control_data;
LADSPA_Data *shadow_data;
LADSPA_Data *latency_control_port;
uint32_t _index;
bool was_activated;
- void init (void *mod, uint32_t index, jack_nframes_t rate);
- void run (jack_nframes_t nsamples);
+ void init (void *mod, uint32_t index, nframes_t rate);
+ void run (nframes_t nsamples);
void latency_compute_run ();
};
diff --git a/libs/ardour/ardour/location.h b/libs/ardour/ardour/location.h
index 96fb1b1bcf..1f1c02d67c 100644
--- a/libs/ardour/ardour/location.h
+++ b/libs/ardour/ardour/location.h
@@ -42,7 +42,7 @@ using std::string;
namespace ARDOUR {
-class Location : public sigc::trackable, public PBD::StatefulDestructible
+class Location : public PBD::StatefulDestructible
{
public:
enum Flags {
@@ -56,8 +56,8 @@ class Location : public sigc::trackable, public PBD::StatefulDestructible
IsStart = 0x80
};
- Location (jack_nframes_t sample_start,
- jack_nframes_t sample_end,
+ Location (nframes_t sample_start,
+ nframes_t sample_end,
const string &name,
Flags bits = Flags(0))
@@ -76,13 +76,13 @@ class Location : public sigc::trackable, public PBD::StatefulDestructible
Location (const XMLNode&);
Location* operator= (const Location& other);
- jack_nframes_t start() { return _start; }
- jack_nframes_t end() { return _end; }
- jack_nframes_t length() { return _end - _start; }
+ nframes_t start() { return _start; }
+ nframes_t end() { return _end; }
+ nframes_t length() { return _end - _start; }
- int set_start (jack_nframes_t s);
- int set_end (jack_nframes_t e);
- int set (jack_nframes_t start, jack_nframes_t end);
+ int set_start (nframes_t s);
+ int set_end (nframes_t e);
+ int set (nframes_t start, nframes_t end);
const string& name() { return _name; }
void set_name (const string &str) { _name = str; name_changed(this); }
@@ -123,8 +123,8 @@ class Location : public sigc::trackable, public PBD::StatefulDestructible
private:
string _name;
- jack_nframes_t _start;
- jack_nframes_t _end;
+ nframes_t _start;
+ nframes_t _end;
uint32_t _flags;
void set_mark (bool yn);
@@ -159,11 +159,11 @@ class Locations : public StateManager, public PBD::StatefulDestructible
int set_current (Location *, bool want_lock = true);
Location *current () const { return current_location; }
- Location *first_location_before (jack_nframes_t);
- Location *first_location_after (jack_nframes_t);
+ Location *first_location_before (nframes_t);
+ Location *first_location_after (nframes_t);
- jack_nframes_t first_mark_before (jack_nframes_t);
- jack_nframes_t first_mark_after (jack_nframes_t);
+ nframes_t first_mark_before (nframes_t);
+ nframes_t first_mark_after (nframes_t);
sigc::signal<void,Location*> current_changed;
sigc::signal<void> changed;
diff --git a/libs/ardour/ardour/mix.h b/libs/ardour/ardour/mix.h
index b351e3ef17..653b61cb95 100644
--- a/libs/ardour/ardour/mix.h
+++ b/libs/ardour/ardour/mix.h
@@ -28,47 +28,47 @@
extern "C" {
/* SSE functions */
- float x86_sse_compute_peak (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current);
+ float x86_sse_compute_peak (ARDOUR::Sample *buf, nframes_t nsamples, float current);
- void x86_sse_apply_gain_to_buffer (ARDOUR::Sample *buf, jack_nframes_t nframes, float gain);
+ void x86_sse_apply_gain_to_buffer (ARDOUR::Sample *buf, nframes_t nframes, float gain);
- void x86_sse_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes, float gain);
+ void x86_sse_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes, float gain);
- void x86_sse_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes);
+ void x86_sse_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes);
}
/* debug wrappers for SSE functions */
-float debug_compute_peak (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current);
+float debug_compute_peak (ARDOUR::Sample *buf, nframes_t nsamples, float current);
-void debug_apply_gain_to_buffer (ARDOUR::Sample *buf, jack_nframes_t nframes, float gain);
+void debug_apply_gain_to_buffer (ARDOUR::Sample *buf, nframes_t nframes, float gain);
-void debug_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes, float gain);
+void debug_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes, float gain);
-void debug_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes);
+void debug_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes);
#endif
#if defined (__APPLE__)
-float veclib_compute_peak (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current);
+float veclib_compute_peak (ARDOUR::Sample *buf, nframes_t nsamples, float current);
-void veclib_apply_gain_to_buffer (ARDOUR::Sample *buf, jack_nframes_t nframes, float gain);
+void veclib_apply_gain_to_buffer (ARDOUR::Sample *buf, nframes_t nframes, float gain);
-void veclib_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes, float gain);
+void veclib_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes, float gain);
-void veclib_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes);
+void veclib_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes);
#endif
/* non-optimized functions */
-float compute_peak (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current);
+float compute_peak (ARDOUR::Sample *buf, nframes_t nsamples, float current);
-void apply_gain_to_buffer (ARDOUR::Sample *buf, jack_nframes_t nframes, float gain);
+void apply_gain_to_buffer (ARDOUR::Sample *buf, nframes_t nframes, float gain);
-void mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes, float gain);
+void mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes, float gain);
-void mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes);
+void mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes);
#endif /* __ardour_mix_h__ */
diff --git a/libs/ardour/ardour/panner.h b/libs/ardour/ardour/panner.h
index a88180701e..5231120840 100644
--- a/libs/ardour/ardour/panner.h
+++ b/libs/ardour/ardour/panner.h
@@ -66,14 +66,14 @@ class StreamPanner : public sigc::trackable, public Stateful
/* the basic StreamPanner API */
- virtual void distribute (AudioBuffer& src, BufferSet& obufs, gain_t gain_coeff, jack_nframes_t nframes) = 0;
+ virtual void distribute (AudioBuffer& src, BufferSet& obufs, gain_t gain_coeff, nframes_t nframes) = 0;
virtual void distribute_automated (AudioBuffer& src, BufferSet& obufs,
- jack_nframes_t start, jack_nframes_t end, jack_nframes_t nframes, pan_t** buffers) = 0;
+ nframes_t start, nframes_t end, nframes_t nframes, pan_t** buffers) = 0;
/* automation */
- virtual void snapshot (jack_nframes_t now) = 0;
- virtual void transport_stopped (jack_nframes_t frame) = 0;
+ virtual void snapshot (nframes_t now) = 0;
+ virtual void transport_stopped (nframes_t frame) = 0;
virtual void set_automation_state (AutoState) = 0;
virtual void set_automation_style (AutoStyle) = 0;
@@ -116,7 +116,7 @@ class StreamPanner : public sigc::trackable, public Stateful
bool _muted;
struct PanControllable : public PBD::Controllable {
- PanControllable (StreamPanner& p) : panner (p) {}
+ PanControllable (std::string name, StreamPanner& p) : Controllable (name), panner (p) {}
StreamPanner& panner;
@@ -143,12 +143,12 @@ class BaseStereoPanner : public StreamPanner
and a type name. See EqualPowerStereoPanner as an example.
*/
- void distribute (AudioBuffer& src, BufferSet& obufs, gain_t gain_coeff, jack_nframes_t nframes);
+ void distribute (AudioBuffer& src, BufferSet& obufs, gain_t gain_coeff, nframes_t nframes);
int load (istream&, string path, uint32_t&);
int save (ostream&) const;
- void snapshot (jack_nframes_t now);
- void transport_stopped (jack_nframes_t frame);
+ void snapshot (nframes_t now);
+ void transport_stopped (nframes_t frame);
void set_automation_state (AutoState);
void set_automation_style (AutoStyle);
@@ -172,7 +172,7 @@ class EqualPowerStereoPanner : public BaseStereoPanner
~EqualPowerStereoPanner ();
void distribute_automated (AudioBuffer& src, BufferSet& obufs,
- jack_nframes_t start, jack_nframes_t end, jack_nframes_t nframes, pan_t** buffers);
+ nframes_t start, nframes_t end, nframes_t nframes, pan_t** buffers);
void get_current_coefficients (pan_t*) const;
void get_desired_coefficients (pan_t*) const;
@@ -194,8 +194,8 @@ class Multi2dPanner : public StreamPanner
Multi2dPanner (Panner& parent);
~Multi2dPanner ();
- void snapshot (jack_nframes_t now);
- void transport_stopped (jack_nframes_t frame);
+ void snapshot (nframes_t now);
+ void transport_stopped (nframes_t frame);
void set_automation_state (AutoState);
void set_automation_style (AutoStyle);
@@ -205,9 +205,9 @@ class Multi2dPanner : public StreamPanner
Curve& automation() { return _automation; }
- void distribute (AudioBuffer& src, BufferSet& obufs, gain_t gain_coeff, jack_nframes_t nframes);
+ void distribute (AudioBuffer& src, BufferSet& obufs, gain_t gain_coeff, nframes_t nframes);
void distribute_automated (AudioBuffer& src, BufferSet& obufs,
- jack_nframes_t start, jack_nframes_t end, jack_nframes_t nframes, pan_t** buffers);
+ nframes_t start, nframes_t end, nframes_t nframes, pan_t** buffers);
int load (istream&, string path, uint32_t&);
int save (ostream&) const;
@@ -242,7 +242,7 @@ class Panner : public std::vector<StreamPanner*>, public Stateful, public sigc::
virtual ~Panner ();
/// The fundamental Panner function
- void distribute(BufferSet& src, BufferSet& dest, jack_nframes_t start_frame, jack_nframes_t end_frames, jack_nframes_t nframes, jack_nframes_t offset);
+ void distribute(BufferSet& src, BufferSet& dest, nframes_t start_frame, nframes_t end_frames, nframes_t nframes, nframes_t offset);
void set_name (string);
@@ -254,8 +254,8 @@ class Panner : public std::vector<StreamPanner*>, public Stateful, public sigc::
void clear ();
void reset (uint32_t noutputs, uint32_t npans);
- void snapshot (jack_nframes_t now);
- void transport_stopped (jack_nframes_t frame);
+ void snapshot (nframes_t now);
+ void transport_stopped (nframes_t frame);
void clear_automation ();
@@ -306,7 +306,7 @@ class Panner : public std::vector<StreamPanner*>, public Stateful, public sigc::
void set_position (float x, float y, float z, StreamPanner& orig);
private:
- void distribute_no_automation(BufferSet& src, BufferSet& dest, jack_nframes_t nframes, jack_nframes_t offset, gain_t gain_coeff);
+ void distribute_no_automation(BufferSet& src, BufferSet& dest, nframes_t nframes, nframes_t offset, gain_t gain_coeff);
string automation_path;
diff --git a/libs/ardour/ardour/peak.h b/libs/ardour/ardour/peak.h
index d08357024b..2c8abe7cf4 100644
--- a/libs/ardour/ardour/peak.h
+++ b/libs/ardour/ardour/peak.h
@@ -6,9 +6,9 @@
#include <ardour/utils.h>
static inline float
-compute_peak (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current)
+compute_peak (ARDOUR::Sample *buf, nframes_t nsamples, float current)
{
- for (jack_nframes_t i = 0; i < nsamples; ++i) {
+ for (nframes_t i = 0; i < nsamples; ++i) {
current = f_max (current, fabsf (buf[i]));
}
return current;
diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h
index 4249007fff..d7b13ef684 100644
--- a/libs/ardour/ardour/playlist.h
+++ b/libs/ardour/ardour/playlist.h
@@ -55,7 +55,7 @@ class Playlist : public StateManager, public PBD::StatefulDestructible {
Playlist (Session&, const XMLNode&, DataType type, bool hidden = false);
Playlist (Session&, string name, DataType type, bool hidden = false);
Playlist (const Playlist&, string name, bool hidden = false);
- Playlist (const Playlist&, jack_nframes_t start, jack_nframes_t cnt, string name, bool hidden = false);
+ Playlist (const Playlist&, nframes_t start, nframes_t cnt, string name, bool hidden = false);
virtual void clear (bool with_save = true);
virtual void dump () const;
@@ -75,7 +75,7 @@ class Playlist : public StateManager, public PBD::StatefulDestructible {
bool hidden() const { return _hidden; }
bool empty() const;
- jack_nframes_t get_maximum_extent () const;
+ nframes_t get_maximum_extent () const;
layer_t top_layer() const;
EditMode get_edit_mode() const { return _edit_mode; }
@@ -83,29 +83,29 @@ class Playlist : public StateManager, public PBD::StatefulDestructible {
/* Editing operations */
- void add_region (boost::shared_ptr<Region>, jack_nframes_t position, float times = 1, bool with_save = true);
+ void add_region (boost::shared_ptr<Region>, nframes_t position, float times = 1, bool with_save = true);
void remove_region (boost::shared_ptr<Region>);
void get_equivalent_regions (boost::shared_ptr<Region>, std::vector<boost::shared_ptr<Region> >&);
void get_region_list_equivalent_regions (boost::shared_ptr<Region>, std::vector<boost::shared_ptr<Region> >&);
- void replace_region (boost::shared_ptr<Region> old, boost::shared_ptr<Region> newr, jack_nframes_t pos);
- void split_region (boost::shared_ptr<Region>, jack_nframes_t position);
- void partition (jack_nframes_t start, jack_nframes_t end, bool just_top_level);
- void duplicate (boost::shared_ptr<Region>, jack_nframes_t position, float times);
- void nudge_after (jack_nframes_t start, jack_nframes_t distance, bool forwards);
+ void replace_region (boost::shared_ptr<Region> old, boost::shared_ptr<Region> newr, nframes_t pos);
+ void split_region (boost::shared_ptr<Region>, nframes_t position);
+ void partition (nframes_t start, nframes_t end, bool just_top_level);
+ void duplicate (boost::shared_ptr<Region>, nframes_t position, float times);
+ void nudge_after (nframes_t start, nframes_t distance, bool forwards);
boost::shared_ptr<Region> find_region (const PBD::ID&) const;
Playlist* cut (list<AudioRange>&, bool result_is_hidden = true);
Playlist* copy (list<AudioRange>&, bool result_is_hidden = true);
- int paste (Playlist&, jack_nframes_t position, float times);
+ int paste (Playlist&, nframes_t position, float times);
uint32_t read_data_count() { return _read_data_count; }
- RegionList* regions_at (jack_nframes_t frame);
- RegionList* regions_touched (jack_nframes_t start, jack_nframes_t end);
- boost::shared_ptr<Region> top_region_at (jack_nframes_t frame);
+ RegionList* regions_at (nframes_t frame);
+ RegionList* regions_touched (nframes_t start, nframes_t end);
+ boost::shared_ptr<Region> top_region_at (nframes_t frame);
- boost::shared_ptr<Region> find_next_region (jack_nframes_t frame, RegionPoint point, int dir);
+ boost::shared_ptr<Region> find_next_region (nframes_t frame, RegionPoint point, int dir);
template<class T> void foreach_region (T *t, void (T::*func)(boost::shared_ptr<Region>, void *), void *arg);
template<class T> void foreach_region (T *t, void (T::*func)(boost::shared_ptr<Region>));
@@ -171,7 +171,7 @@ class Playlist : public StateManager, public PBD::StatefulDestructible {
friend class RegionLock;
- RegionList regions;
+ RegionList regions; /* the current list of regions in the playlist */
string _name;
Session& _session;
DataType _type;
@@ -198,7 +198,7 @@ class Playlist : public StateManager, public PBD::StatefulDestructible {
uint32_t _read_data_count;
PBD::ID _orig_diskstream_id;
uint64_t layer_op_counter;
- jack_nframes_t freeze_length;
+ nframes_t freeze_length;
void init (bool hide);
@@ -225,7 +225,7 @@ class Playlist : public StateManager, public PBD::StatefulDestructible {
void mark_session_dirty();
- void region_changed_proxy (Change, boost::shared_ptr<Region>);
+ void region_changed_proxy (Change, boost::weak_ptr<Region>);
virtual bool region_changed (Change, boost::shared_ptr<Region>);
void region_bounds_changed (Change, boost::shared_ptr<Region>);
@@ -253,25 +253,25 @@ class Playlist : public StateManager, public PBD::StatefulDestructible {
void save_state (std::string why);
void maybe_save_state (std::string why);
- void add_region_internal (boost::shared_ptr<Region>, jack_nframes_t position, bool delay_sort = false);
+ void add_region_internal (boost::shared_ptr<Region>, nframes_t position, bool delay_sort = false);
int remove_region_internal (boost::shared_ptr<Region>, bool delay_sort = false);
- RegionList *find_regions_at (jack_nframes_t frame);
+ RegionList *find_regions_at (nframes_t frame);
void copy_regions (RegionList&) const;
- void partition_internal (jack_nframes_t start, jack_nframes_t end, bool cutting, RegionList& thawlist);
+ void partition_internal (nframes_t start, nframes_t end, bool cutting, RegionList& thawlist);
- jack_nframes_t _get_maximum_extent() const;
+ nframes_t _get_maximum_extent() const;
- Playlist* cut_copy (Playlist* (Playlist::*pmf)(jack_nframes_t, jack_nframes_t, bool),
+ Playlist* cut_copy (Playlist* (Playlist::*pmf)(nframes_t, nframes_t, bool),
list<AudioRange>& ranges, bool result_is_hidden);
- Playlist *cut (jack_nframes_t start, jack_nframes_t cnt, bool result_is_hidden);
- Playlist *copy (jack_nframes_t start, jack_nframes_t cnt, bool result_is_hidden);
+ Playlist *cut (nframes_t start, nframes_t cnt, bool result_is_hidden);
+ Playlist *copy (nframes_t start, nframes_t cnt, bool result_is_hidden);
int move_region_to_layer (layer_t, boost::shared_ptr<Region> r, int dir);
void relayer ();
- static Playlist* copyPlaylist (const Playlist&, jack_nframes_t start, jack_nframes_t length,
+ static Playlist* copyPlaylist (const Playlist&, nframes_t start, nframes_t length,
string name, bool result_is_hidden);
void unset_freeze_parent (Playlist*);
diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h
index 2117a9d58a..431b55db8b 100644
--- a/libs/ardour/ardour/plugin.h
+++ b/libs/ardour/ardour/plugin.h
@@ -78,7 +78,7 @@ class PluginInfo {
typedef boost::shared_ptr<PluginInfo> PluginInfoPtr;
typedef std::list<PluginInfoPtr> PluginInfoList;
-class Plugin : public PBD::StatefulDestructible, public sigc::trackable
+class Plugin : public PBD::StatefulDestructible
{
public:
Plugin (ARDOUR::AudioEngine&, ARDOUR::Session&);
@@ -99,9 +99,8 @@ class Plugin : public PBD::StatefulDestructible, public sigc::trackable
float step;
float smallstep;
float largestep;
-
- bool min_unbound;
- bool max_unbound;
+ bool min_unbound;
+ bool max_unbound;
};
virtual uint32_t unique_id() const = 0;
@@ -110,7 +109,7 @@ class Plugin : public PBD::StatefulDestructible, public sigc::trackable
virtual const char * maker() const = 0;
virtual uint32_t parameter_count () const = 0;
virtual float default_value (uint32_t port) = 0;
- virtual jack_nframes_t latency() const = 0;
+ virtual nframes_t latency() const = 0;
virtual void set_parameter (uint32_t which, float val) = 0;
virtual float get_parameter(uint32_t which) const = 0;
@@ -118,9 +117,10 @@ class Plugin : public PBD::StatefulDestructible, public sigc::trackable
virtual uint32_t nth_parameter (uint32_t which, bool& ok) const = 0;
virtual void activate () = 0;
virtual void deactivate () = 0;
- virtual void set_block_size (jack_nframes_t nframes) = 0;
+ virtual void set_block_size (nframes_t nframes) = 0;
- virtual int connect_and_run (BufferSet& bufs, uint32_t& in, uint32_t& out, jack_nframes_t nframes, jack_nframes_t offset) = 0;
+ virtual int connect_and_run (BufferSet& bufs, uint32_t& in, uint32_t& out, nframes_t nframes, nframes_t offset) = 0;
+
virtual std::set<uint32_t> automatable() const = 0;
virtual void store_state (ARDOUR::PluginState&) = 0;
virtual void restore_state (ARDOUR::PluginState&) = 0;
@@ -163,7 +163,7 @@ class Plugin : public PBD::StatefulDestructible, public sigc::trackable
void setup_controls ();
struct PortControllable : public PBD::Controllable {
- PortControllable (Plugin&, uint32_t abs_port_id,
+ PortControllable (std::string name, Plugin&, uint32_t abs_port_id,
float lower, float upper, bool toggled, bool logarithmic);
void set_value (float);
diff --git a/libs/ardour/ardour/port.h b/libs/ardour/ardour/port.h
index d6dcd55645..4e4ad0fec6 100644
--- a/libs/ardour/ardour/port.h
+++ b/libs/ardour/ardour/port.h
@@ -116,11 +116,11 @@ class Port : public sigc::trackable {
jack_port_request_monitor (_port, yn);
}
- jack_nframes_t latency () const {
+ nframes_t latency () const {
return jack_port_get_latency (_port);
}
- void set_latency (jack_nframes_t nframes) {
+ void set_latency (nframes_t nframes) {
jack_port_set_latency (_port, nframes);
}
diff --git a/libs/ardour/ardour/redirect.h b/libs/ardour/ardour/redirect.h
index 4015c708de..ae58fa9b70 100644
--- a/libs/ardour/ardour/redirect.h
+++ b/libs/ardour/ardour/redirect.h
@@ -81,12 +81,12 @@ class Redirect : public IO
Placement placement() const { return _placement; }
void set_placement (Placement, void *src);
- virtual void run (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t nframes, jack_nframes_t offset) = 0;
+ virtual void run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset) = 0;
virtual void activate () = 0;
virtual void deactivate () = 0;
- virtual jack_nframes_t latency() { return 0; }
+ virtual nframes_t latency() { return 0; }
- virtual void set_block_size (jack_nframes_t nframes) {}
+ virtual void set_block_size (nframes_t nframes) {}
sigc::signal<void,Redirect*,void*> active_changed;
sigc::signal<void,Redirect*,void*> placement_changed;
@@ -120,9 +120,9 @@ class Redirect : public IO
void mark_automation_visible (uint32_t, bool);
AutomationList& automation_list (uint32_t);
- bool find_next_event (jack_nframes_t, jack_nframes_t, ControlEvent&) const;
+ bool find_next_event (nframes_t, nframes_t, ControlEvent&) const;
- virtual void transport_stopped (jack_nframes_t frame) {};
+ virtual void transport_stopped (nframes_t frame) {};
protected:
void set_placement (const string&, void *src);
diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h
index 821927f8c2..96663f79c8 100644
--- a/libs/ardour/ardour/region.h
+++ b/libs/ardour/ardour/region.h
@@ -48,11 +48,11 @@ struct RegionState : public StateManager::State
{
RegionState (std::string why) : StateManager::State (why) {}
- jack_nframes_t _start;
- jack_nframes_t _length;
- jack_nframes_t _position;
+ nframes_t _start;
+ nframes_t _length;
+ nframes_t _position;
uint32_t _flags;
- jack_nframes_t _sync_position;
+ nframes_t _sync_position;
layer_t _layer;
string _name;
mutable RegionEditState _first_edit;
@@ -105,20 +105,20 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo
const DataType& data_type() const { return _type; }
- jack_nframes_t position () const { return _position; }
- jack_nframes_t start () const { return _start; }
- jack_nframes_t length() const { return _length; }
- layer_t layer () const { return _layer; }
+ nframes_t position () const { return _position; }
+ nframes_t start () const { return _start; }
+ nframes_t length() const { return _length; }
+ layer_t layer () const { return _layer; }
- jack_nframes_t sync_offset(int& dir) const;
- jack_nframes_t sync_position() const;
+ nframes_t sync_offset(int& dir) const;
+ nframes_t sync_position() const;
- jack_nframes_t adjust_to_sync (jack_nframes_t);
+ nframes_t adjust_to_sync (nframes_t);
/* first_frame() is an alias; last_frame() just hides some math */
- jack_nframes_t first_frame() const { return _position; }
- jack_nframes_t last_frame() const { return _position + _length - 1; }
+ nframes_t first_frame() const { return _position; }
+ nframes_t last_frame() const { return _position + _length - 1; }
Flag flags() const { return _flags; }
bool hidden() const { return _flags & Hidden; }
@@ -134,12 +134,12 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo
void freeze ();
void thaw (const string& why);
- bool covers (jack_nframes_t frame) const {
- return _position <= frame && frame < _position + _length;
+ bool covers (nframes_t frame) const {
+ return first_frame() <= frame && frame < last_frame();
}
- OverlapType coverage (jack_nframes_t start, jack_nframes_t end) const {
- return ARDOUR::coverage (_position, _position + _length - 1, start, end);
+ OverlapType coverage (nframes_t start, nframes_t end) const {
+ return ARDOUR::coverage (first_frame(), last_frame(), start, end);
}
bool equivalent (boost::shared_ptr<const Region>) const;
@@ -150,19 +150,19 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo
/* EDITING OPERATIONS */
- void set_length (jack_nframes_t, void *src);
- void set_start (jack_nframes_t, void *src);
- void set_position (jack_nframes_t, void *src);
- void set_position_on_top (jack_nframes_t, void *src);
- void special_set_position (jack_nframes_t);
+ void set_length (nframes_t, void *src);
+ void set_start (nframes_t, void *src);
+ void set_position (nframes_t, void *src);
+ void set_position_on_top (nframes_t, void *src);
+ void special_set_position (nframes_t);
void nudge_position (long, void *src);
void move_to_natural_position (void *src);
- void trim_start (jack_nframes_t new_position, void *src);
- void trim_front (jack_nframes_t new_position, void *src);
- void trim_end (jack_nframes_t new_position, void *src);
- void trim_to (jack_nframes_t position, jack_nframes_t length, void *src);
+ void trim_start (nframes_t new_position, void *src);
+ void trim_front (nframes_t new_position, void *src);
+ void trim_end (nframes_t new_position, void *src);
+ void trim_to (nframes_t position, nframes_t length, void *src);
void set_layer (layer_t l); /* ONLY Playlist can call this */
void raise ();
@@ -170,7 +170,7 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo
void raise_to_top ();
void lower_to_bottom ();
- void set_sync_position (jack_nframes_t n);
+ void set_sync_position (nframes_t n);
void clear_sync_position ();
void set_hidden (bool yn);
void set_muted (bool yn);
@@ -207,11 +207,12 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo
protected:
friend class RegionFactory;
- Region (boost::shared_ptr<Source> src, jack_nframes_t start, jack_nframes_t length,
+ Region (boost::shared_ptr<Source> src, nframes_t start, nframes_t length,
const string& name, DataType type, layer_t = 0, Flag flags = DefaultFlags);
- Region (SourceList& srcs, jack_nframes_t start, jack_nframes_t length,
+ Region (SourceList& srcs, nframes_t start, nframes_t length,
const string& name, DataType type, layer_t = 0, Flag flags = DefaultFlags);
- Region (boost::shared_ptr<const Region>, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Flag flags = DefaultFlags);
+
+ Region (boost::shared_ptr<const Region>, nframes_t start, nframes_t length, const string& name, layer_t = 0, Flag flags = DefaultFlags);
Region (boost::shared_ptr<const Region>);
Region (boost::shared_ptr<Source> src, const XMLNode&);
Region (SourceList& srcs, const XMLNode&);
@@ -228,7 +229,7 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo
void store_state (RegionState&) const;
Change restore_and_return_flags (RegionState&);
- void trim_to_internal (jack_nframes_t position, jack_nframes_t length, void *src);
+ void trim_to_internal (nframes_t position, nframes_t length, void *src);
bool copied() const { return _flags & Copied; }
void maybe_uncopy ();
@@ -246,10 +247,10 @@ class Region : public PBD::StatefulDestructible, public StateManager, public boo
string _name;
DataType _type;
Flag _flags;
- jack_nframes_t _start;
- jack_nframes_t _length;
- jack_nframes_t _position;
- jack_nframes_t _sync_position;
+ nframes_t _start;
+ nframes_t _length;
+ nframes_t _position;
+ nframes_t _sync_position;
layer_t _layer;
mutable RegionEditState _first_edit;
int _frozen;
diff --git a/libs/ardour/ardour/region_factory.h b/libs/ardour/ardour/region_factory.h
index bd5089f512..04ce8fa3ad 100644
--- a/libs/ardour/ardour/region_factory.h
+++ b/libs/ardour/ardour/region_factory.h
@@ -22,14 +22,14 @@ class RegionFactory {
*/
static sigc::signal<void,boost::shared_ptr<Region> > CheckNewRegion;
- static boost::shared_ptr<Region> create (boost::shared_ptr<Region>, jack_nframes_t start,
- jack_nframes_t length, std::string name,
+ static boost::shared_ptr<Region> create (boost::shared_ptr<Region>, nframes_t start,
+ nframes_t length, std::string name,
layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
- static boost::shared_ptr<Region> create (boost::shared_ptr<AudioRegion>, jack_nframes_t start,
- jack_nframes_t length, std::string name,
+ static boost::shared_ptr<Region> create (boost::shared_ptr<AudioRegion>, nframes_t start,
+ nframes_t length, std::string name,
layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
- static boost::shared_ptr<Region> create (boost::shared_ptr<Source>, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
- static boost::shared_ptr<Region> create (SourceList &, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
+ static boost::shared_ptr<Region> create (boost::shared_ptr<Source>, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
+ static boost::shared_ptr<Region> create (SourceList &, nframes_t start, nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
static boost::shared_ptr<Region> create (boost::shared_ptr<Region>);
static boost::shared_ptr<Region> create (Session&, XMLNode&, bool);
static boost::shared_ptr<Region> create (SourceList &, const XMLNode&);
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index 7abc69f059..5c71bb16d3 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -89,14 +89,14 @@ class Route : public IO
/* these are the core of the API of a Route. see the protected sections as well */
- virtual int roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t offset, int declick, bool can_record, bool rec_monitors_input);
+ virtual int roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame,
+ nframes_t offset, int declick, bool can_record, bool rec_monitors_input);
- virtual int no_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t offset, bool state_changing, bool can_record, bool rec_monitors_input);
+ virtual int no_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame,
+ nframes_t offset, bool state_changing, bool can_record, bool rec_monitors_input);
- virtual int silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t offset, bool can_record, bool rec_monitors_input);
+ virtual int silent_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame,
+ nframes_t offset, bool can_record, bool rec_monitors_input);
virtual void toggle_monitor_input ();
virtual bool can_record() { return false; }
virtual void set_record_enable (bool yn, void *src) {}
@@ -174,9 +174,9 @@ class Route : public IO
void all_redirects_flip();
void all_redirects_active (bool state);
- virtual jack_nframes_t update_total_latency();
- jack_nframes_t signal_latency() const { return _own_latency; }
- virtual void set_latency_delay (jack_nframes_t);
+ virtual nframes_t update_total_latency();
+ nframes_t signal_latency() const { return _own_latency; }
+ virtual void set_latency_delay (nframes_t);
sigc::signal<void,void*> solo_changed;
sigc::signal<void,void*> solo_safe_changed;
@@ -222,7 +222,7 @@ class Route : public IO
SoloControl
};
- ToggleControllable (Route&, ToggleType);
+ ToggleControllable (std::string name, Route&, ToggleType);
void set_value (float);
float get_value (void) const;
@@ -238,8 +238,6 @@ class Route : public IO
return _mute_control;
}
- void automation_snapshot (jack_nframes_t now);
-
void protect_automation ();
void set_remote_control_id (uint32_t id);
@@ -250,7 +248,7 @@ class Route : public IO
friend class Session;
void set_solo_mute (bool yn);
- void set_block_size (jack_nframes_t nframes);
+ void set_block_size (nframes_t nframes);
bool has_external_redirects() const;
void curve_reallocate ();
@@ -282,11 +280,11 @@ class Route : public IO
gain_t desired_solo_gain;
gain_t desired_mute_gain;
- jack_nframes_t check_initial_delay (jack_nframes_t, jack_nframes_t&, jack_nframes_t&);
+ nframes_t check_initial_delay (nframes_t, nframes_t&, nframes_t&);
- jack_nframes_t _initial_delay;
- jack_nframes_t _roll_delay;
- jack_nframes_t _own_latency;
+ nframes_t _initial_delay;
+ nframes_t _roll_delay;
+ nframes_t _own_latency;
RedirectList _redirects;
Glib::RWLock redirect_lock;
IO *_control_outs;
@@ -299,23 +297,24 @@ class Route : public IO
ToggleControllable _solo_control;
ToggleControllable _mute_control;
- void passthru (jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t nframes, jack_nframes_t offset, int declick, bool meter_inputs);
+ void passthru (nframes_t start_frame, nframes_t end_frame,
+ nframes_t nframes, nframes_t offset, int declick, bool meter_inputs);
virtual void process_output_buffers (BufferSet& bufs,
- jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t nframes, jack_nframes_t offset, bool with_redirects, int declick,
+ nframes_t start_frame, nframes_t end_frame,
+ nframes_t nframes, nframes_t offset, bool with_redirects, int declick,
bool meter);
protected:
virtual XMLNode& state(bool);
- void passthru_silence (jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t nframes, jack_nframes_t offset, int declick,
+ void passthru_silence (nframes_t start_frame, nframes_t end_frame,
+ nframes_t nframes, nframes_t offset, int declick,
bool meter);
- void silence (jack_nframes_t nframes, jack_nframes_t offset);
+ void silence (nframes_t nframes, nframes_t offset);
+
sigc::connection input_signal_connection;
state_id_t _current_state_id;
diff --git a/libs/ardour/ardour/send.h b/libs/ardour/ardour/send.h
index 8a7beb8598..12a0cba3ec 100644
--- a/libs/ardour/ardour/send.h
+++ b/libs/ardour/ardour/send.h
@@ -40,7 +40,8 @@ class Send : public Redirect {
Send (const Send&);
~Send ();
- void run (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t nframes, jack_nframes_t offset);
+ void run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset);
+
void activate() {}
void deactivate () {}
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 99616f9729..f06c4117a6 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -100,10 +100,8 @@ class AudioRegion;
class Region;
class Playlist;
class VSTPlugin;
-class ControlProtocolManager;
+class ControlProtocolInfo;
-//class MidiDiskstream;
-class MidiSource;
class MidiTrack;
class MidiRegion;
class SMFSource;
@@ -116,7 +114,7 @@ using std::string;
using std::map;
using std::set;
-class Session : public sigc::trackable, public PBD::StatefulDestructible
+class Session : public PBD::StatefulDestructible
{
private:
typedef std::pair<boost::shared_ptr<Route>,bool> RouteBooleanState;
@@ -131,17 +129,6 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
Recording = 2
};
- enum SlaveSource {
- None = 0,
- MTC,
- JACK
- };
-
- enum AutoConnectOption {
- AutoConnectPhysical = 0x1,
- AutoConnectMaster = 0x2
- };
-
struct Event {
enum Type {
SetTransportSpeed,
@@ -177,14 +164,14 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
Type type;
Action action;
- jack_nframes_t action_frame;
- jack_nframes_t target_frame;
+ nframes_t action_frame;
+ nframes_t target_frame;
float speed;
union {
void* ptr;
bool yes_or_no;
- Session::SlaveSource slave;
+ SlaveSource slave;
Route* route;
};
@@ -193,7 +180,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
list<AudioRange> audio_range;
list<MusicRange> music_range;
- Event(Type t, Action a, jack_nframes_t when, jack_nframes_t where, float spd, bool yn = false)
+ Event(Type t, Action a, nframes_t when, nframes_t where, float spd, bool yn = false)
: type (t),
action (a),
action_frame (when),
@@ -225,7 +212,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
pool.release (ptr);
}
- static const jack_nframes_t Immediate = 0;
+ static const nframes_t Immediate = 0;
private:
static MultiAllocSingleReleasePool pool;
@@ -249,7 +236,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
uint32_t master_out_channels,
uint32_t n_physical_in,
uint32_t n_physical_out,
- jack_nframes_t initial_length);
+ nframes_t initial_length);
virtual ~Session ();
@@ -259,12 +246,14 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
string path() const { return _path; }
string name() const { return _name; }
string snap_name() const { return _current_snapshot_name; }
+ string raid_path () const;
void set_snap_name ();
void set_dirty ();
void set_clean ();
bool dirty() const { return _state_of_the_state & Dirty; }
+ bool deletion_in_progress() const { return _state_of_the_state & Deletion; }
sigc::signal<void> DirtyChanged;
std::string sound_dir (bool with_path = true) const;
@@ -285,7 +274,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
string audio_path_from_name (string, uint32_t nchans, uint32_t chan, bool destructive);
string midi_path_from_name (string);
- void process (jack_nframes_t nframes);
+ void process (nframes_t nframes);
BufferSet& get_silent_buffers (ChanCount count = ChanCount::ZERO);
BufferSet& get_scratch_buffers (ChanCount count = ChanCount::ZERO);
@@ -360,22 +349,22 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
/* Transport mechanism signals */
sigc::signal<void> TransportStateChange; /* generic */
- sigc::signal<void,jack_nframes_t> PositionChanged; /* sent after any non-sequential motion */
+ sigc::signal<void,nframes_t> PositionChanged; /* sent after any non-sequential motion */
sigc::signal<void> DurationChanged;
sigc::signal<void> HaltOnXrun;
sigc::signal<void,RouteList&> RouteAdded;
void request_roll ();
- void request_bounded_roll (jack_nframes_t start, jack_nframes_t end);
+ void request_bounded_roll (nframes_t start, nframes_t end);
void request_stop (bool abort = false);
- void request_locate (jack_nframes_t frame, bool with_roll = false);
- void request_auto_loop (bool yn);
- jack_nframes_t last_transport_start() const { return _last_roll_location; }
+ void request_locate (nframes_t frame, bool with_roll = false);
+ void request_play_loop (bool yn);
+ nframes_t last_transport_start() const { return _last_roll_location; }
void goto_end () { request_locate (end_location->start(), false);}
void goto_start () { request_locate (start_location->start(), false); }
- void set_session_start (jack_nframes_t start) { start_location->set_start(start); }
- void set_session_end (jack_nframes_t end) { end_location->set_start(end); _end_location_is_free = false; }
+ void set_session_start (nframes_t start) { start_location->set_start(start); }
+ void set_session_end (nframes_t end) { end_location->set_start(end); _end_location_is_free = false; }
void use_rf_shuttle_speed ();
void request_transport_speed (float speed);
void request_overwrite_buffer (Diskstream*);
@@ -390,14 +379,14 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
int remove_region_from_region_list (boost::shared_ptr<Region>);
- jack_nframes_t get_maximum_extent () const;
- jack_nframes_t current_end_frame() const { return end_location->start(); }
- jack_nframes_t current_start_frame() const { return start_location->start(); }
- jack_nframes_t frame_rate() const { return _current_frame_rate; }
- jack_nframes_t frames_per_hour() const { return _frames_per_hour; }
+ nframes_t get_maximum_extent () const;
+ nframes_t current_end_frame() const { return end_location->start(); }
+ nframes_t current_start_frame() const { return start_location->start(); }
+ nframes_t frame_rate() const { return _current_frame_rate; }
+ nframes_t frames_per_hour() const { return _frames_per_hour; }
double frames_per_smpte_frame() const { return _frames_per_smpte_frame; }
- jack_nframes_t smpte_frames_per_hour() const { return _smpte_frames_per_hour; }
+ nframes_t smpte_frames_per_hour() const { return _smpte_frames_per_hour; }
/* Locations */
@@ -410,93 +399,16 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
void set_auto_punch_location (Location *);
void set_auto_loop_location (Location *);
-
- enum ControlType {
- AutoPlay,
- AutoLoop,
- AutoReturn,
- AutoInput,
- PunchIn,
- PunchOut,
- SendMTC,
- MMCControl,
- SoloLatch,
- SoloingModel,
- RecordingPlugins,
- CrossFadesActive,
- SendMMC,
- SlaveType,
- Clicking,
- EditingMode,
- PlayRange,
- LayeringModel,
- CrossfadingModel,
- SeamlessLoop,
- MidiFeedback,
- MidiControl,
- TranzportControl,
- Feedback,
- SmpteMode,
- };
-
- sigc::signal<void,ControlType> ControlChanged;
-
- void set_auto_play (bool yn);
- void set_auto_return (bool yn);
- void set_auto_input (bool yn);
void reset_input_monitor_state ();
- void set_input_auto_connect (bool yn);
- void set_output_auto_connect (AutoConnectOption);
- void set_punch_in (bool yn);
- void set_punch_out (bool yn);
- void set_send_mtc (bool yn);
- void set_send_mmc (bool yn);
- void set_mmc_control (bool yn);
- void set_midi_feedback (bool yn);
- void set_midi_control (bool yn);
- void set_do_not_record_plugins (bool yn);
- void set_crossfades_active (bool yn);
- void set_seamless_loop (bool yn);
-
- bool get_auto_play () const { return auto_play; }
- bool get_auto_input () const { return auto_input; }
- bool get_auto_loop () const { return auto_loop; }
- bool get_seamless_loop () const { return seamless_loop; }
- bool get_punch_in () const { return punch_in; }
- bool get_punch_out () const { return punch_out; }
- bool get_all_safe () const { return all_safe; }
- bool get_auto_return () const { return auto_return; }
- bool get_send_mtc () const;
- bool get_send_mmc () const;
- bool get_mmc_control () const;
- bool get_midi_feedback () const;
- bool get_midi_control () const;
- bool get_do_not_record_plugins () const { return do_not_record_plugins; }
- bool get_crossfades_active () const { return crossfades_active; }
-
- bool get_input_auto_connect () const;
- AutoConnectOption get_output_auto_connect () const { return output_auto_connect; }
-
- enum LayerModel {
- LaterHigher,
- MoveAddHigher,
- AddHigher
- };
-
- void set_layer_model (LayerModel);
- LayerModel get_layer_model () const { return layer_model; }
-
- void set_xfade_model (CrossfadeModel);
- CrossfadeModel get_xfade_model () const { return xfade_model; }
- void add_event (jack_nframes_t action_frame, Event::Type type, jack_nframes_t target_frame = 0);
- void remove_event (jack_nframes_t frame, Event::Type type);
+ void add_event (nframes_t action_frame, Event::Type type, nframes_t target_frame = 0);
+ void remove_event (nframes_t frame, Event::Type type);
void clear_events (Event::Type type);
- jack_nframes_t get_block_size() const { return current_block_size; }
- jack_nframes_t worst_output_latency () const { return _worst_output_latency; }
- jack_nframes_t worst_input_latency () const { return _worst_input_latency; }
- jack_nframes_t worst_track_latency () const { return _worst_track_latency; }
+ nframes_t get_block_size() const { return current_block_size; }
+ nframes_t worst_output_latency () const { return _worst_output_latency; }
+ nframes_t worst_input_latency () const { return _worst_input_latency; }
+ nframes_t worst_track_latency () const { return _worst_track_latency; }
int save_state (string snapshot_name, bool pending = false);
int restore_state (string snapshot_name);
@@ -517,7 +429,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
XMLNode& get_state();
int set_state(const XMLNode& node); // not idempotent
XMLNode& get_template();
-
+
void add_instant_xml (XMLNode&, const std::string& dir);
enum StateOfTheState {
@@ -572,40 +484,13 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
AudioEngine &engine() { return _engine; };
- /* configuration. there should really be accessors/mutators
- for these
- */
-
- float meter_hold () { return _meter_hold; }
- void set_meter_hold (float);
- sigc::signal<void> MeterHoldChanged;
-
- float meter_falloff () { return _meter_falloff; }
- void set_meter_falloff (float);
- sigc::signal<void> MeterFalloffChanged;
-
int32_t max_level;
int32_t min_level;
- string click_emphasis_sound;
- string click_sound;
- bool click_requested;
- jack_nframes_t over_length_short;
- jack_nframes_t over_length_long;
- bool send_midi_timecode;
- bool send_midi_machine_control;
- float shuttle_speed_factor;
- float shuttle_speed_threshold;
- float rf_speed;
- float smpte_frames_per_second;
- float video_pullup;
- bool smpte_drop_frames;
- AnyTime preroll;
- AnyTime postroll;
-
+
/* Time */
- jack_nframes_t transport_frame () const {return _transport_frame; }
- jack_nframes_t audible_frame () const;
+ nframes_t transport_frame () const {return _transport_frame; }
+ nframes_t audible_frame () const;
enum SmpteFormat {
smpte_23976,
@@ -633,41 +518,38 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
};
int set_smpte_type (float fps, bool drop_frames);
- int set_video_pullup (float pullup);
void sync_time_vars();
- void bbt_time (jack_nframes_t when, BBT_Time&);
- void smpte_to_sample( SMPTE::Time& smpte, jack_nframes_t& sample, bool use_offset, bool use_subframes ) const;
- void sample_to_smpte( jack_nframes_t sample, SMPTE::Time& smpte, bool use_offset, bool use_subframes ) const;
+ void bbt_time (nframes_t when, BBT_Time&);
+ void smpte_to_sample( SMPTE::Time& smpte, nframes_t& sample, bool use_offset, bool use_subframes ) const;
+ void sample_to_smpte( nframes_t sample, SMPTE::Time& smpte, bool use_offset, bool use_subframes ) const;
void smpte_time (SMPTE::Time &);
- void smpte_time (jack_nframes_t when, SMPTE::Time&);
- void smpte_time_subframes (jack_nframes_t when, SMPTE::Time&);
+ void smpte_time (nframes_t when, SMPTE::Time&);
+ void smpte_time_subframes (nframes_t when, SMPTE::Time&);
- void smpte_duration (jack_nframes_t, SMPTE::Time&) const;
- void smpte_duration_string (char *, jack_nframes_t) const;
+ void smpte_duration (nframes_t, SMPTE::Time&) const;
+ void smpte_duration_string (char *, nframes_t) const;
- void set_smpte_offset (jack_nframes_t);
- jack_nframes_t smpte_offset () const { return _smpte_offset; }
+ void set_smpte_offset (nframes_t);
+ nframes_t smpte_offset () const { return _smpte_offset; }
void set_smpte_offset_negative (bool);
bool smpte_offset_negative () const { return _smpte_offset_negative; }
- jack_nframes_t convert_to_frames_at (jack_nframes_t position, AnyTime&);
+ nframes_t convert_to_frames_at (nframes_t position, AnyTime&);
static sigc::signal<void> StartTimeChanged;
static sigc::signal<void> EndTimeChanged;
static sigc::signal<void> SMPTEOffsetChanged;
- static sigc::signal<void> SMPTETypeChanged;
- static sigc::signal<void> PullupChanged;
- void request_slave_source (SlaveSource, jack_nframes_t pos = 0);
- SlaveSource slave_source() const { return _slave_type; }
- bool synced_to_jack() const { return _slave_type == JACK; }
+ void request_slave_source (SlaveSource);
+ bool synced_to_jack() const { return Config->get_slave_source() == JACK; }
+
float transport_speed() const { return _transport_speed; }
bool transport_stopped() const { return _transport_speed == 0.0f; }
bool transport_rolling() const { return _transport_speed != 0.0f; }
- int jack_slave_sync (jack_nframes_t);
+ int jack_slave_sync (nframes_t);
TempoMap& tempo_map() { return *_tempo_map; }
@@ -708,8 +590,8 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
bool sample_rate_convert (import_status&, string infile, string& outfile);
string build_tmp_convert_name (string file);
- Session::SlaveSource post_export_slave;
- jack_nframes_t post_export_position;
+ SlaveSource post_export_slave;
+ nframes_t post_export_position;
int start_audio_export (ARDOUR::AudioExportSpecification&);
int stop_audio_export (ARDOUR::AudioExportSpecification&);
@@ -797,25 +679,14 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
/* flattening stuff */
- int write_one_audio_track (AudioTrack&, jack_nframes_t start, jack_nframes_t cnt, bool overwrite, vector<boost::shared_ptr<Source> >&,
+ int write_one_audio_track (AudioTrack&, nframes_t start, nframes_t cnt, bool overwrite, vector<boost::shared_ptr<Source> >&,
InterThreadInfo& wot);
int freeze (InterThreadInfo&);
/* session-wide solo/mute/rec-enable */
-
- enum SoloModel {
- InverseMute,
- SoloBus
- };
bool soloing() const { return currently_soloing; }
- SoloModel solo_model() const { return _solo_model; }
- void set_solo_model (SoloModel);
-
- bool solo_latched() const { return _solo_latched; }
- void set_solo_latched (bool yn);
-
void set_all_solo (bool);
void set_all_mute (bool);
@@ -840,7 +711,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
/* s/w "RAID" management */
- jack_nframes_t available_capture_duration();
+ nframes_t available_capture_duration();
/* I/O Connections */
@@ -853,7 +724,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
sigc::signal<void,Connection *> ConnectionRemoved;
/* MIDI */
-
+
int set_mtc_port (string port_tag);
int set_mmc_port (string port_tag);
int set_midi_port (string port_tag);
@@ -877,10 +748,10 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
/* Scrubbing */
- void start_scrub (jack_nframes_t where);
+ void start_scrub (nframes_t where);
void stop_scrub ();
void set_scrub_speed (float);
- jack_nframes_t scrub_buffer_size() const;
+ nframes_t scrub_buffer_size() const;
sigc::signal<void> ScrubReady;
/* History (for editors, mixers, UIs etc.) */
@@ -962,19 +833,9 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
void mark();
};
- /* edit mode */
-
- void set_edit_mode (EditMode);
- EditMode get_edit_mode () const { return _edit_mode; }
-
/* clicking */
boost::shared_ptr<IO> click_io() { return _click_io; }
- void set_clicking (bool yn);
- bool get_clicking() const;
-
- void set_click_sound (string path);
- void set_click_emphasis_sound (string path);
/* tempo FX */
@@ -991,13 +852,6 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
boost::shared_ptr<AudioRegion> tempoize_region (TimeStretchRequest&);
- string raid_path() const;
- void set_raid_path(string);
-
- /* need to call this whenever we change native file formats */
-
- void reset_native_file_format();
-
/* disk, buffer loads */
uint32_t playback_load ();
@@ -1053,10 +907,10 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
void* ptr,
float opt);
- typedef float (*compute_peak_t) (Sample *, jack_nframes_t, float);
- typedef void (*apply_gain_to_buffer_t) (Sample *, jack_nframes_t, float);
- typedef void (*mix_buffers_with_gain_t) (Sample *, Sample *, jack_nframes_t, float);
- typedef void (*mix_buffers_no_gain_t) (Sample *, Sample *, jack_nframes_t);
+ typedef float (*compute_peak_t) (Sample *, nframes_t, float);
+ typedef void (*apply_gain_to_buffer_t) (Sample *, nframes_t, float);
+ typedef void (*mix_buffers_with_gain_t) (Sample *, Sample *, nframes_t, float);
+ typedef void (*mix_buffers_no_gain_t) (Sample *, Sample *, nframes_t);
static compute_peak_t compute_peak;
static apply_gain_to_buffer_t apply_gain_to_buffer;
@@ -1069,10 +923,13 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
PBD::Controllable* controllable_by_id (const PBD::ID&);
+ void add_controllable (PBD::Controllable*);
+ void remove_controllable (PBD::Controllable*);
+
protected:
friend class AudioEngine;
- void set_block_size (jack_nframes_t nframes);
- void set_frame_rate (jack_nframes_t nframes);
+ void set_block_size (nframes_t nframes);
+ void set_frame_rate (nframes_t nframes);
protected:
friend class Diskstream;
@@ -1085,7 +942,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
void update_latency_compensation (bool, bool);
private:
- int create (bool& new_session, string* mix_template, jack_nframes_t initial_length);
+ int create (bool& new_session, string* mix_template, nframes_t initial_length);
static const char* _template_suffix;
static const char* _statefile_suffix;
@@ -1104,35 +961,34 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
maximise cache hits
*/
- typedef void (Session::*process_function_type)(jack_nframes_t);
+ typedef void (Session::*process_function_type)(nframes_t);
AudioEngine &_engine;
mutable gint processing_prohibited;
process_function_type process_function;
process_function_type last_process_function;
bool waiting_for_sync_offset;
- jack_nframes_t _base_frame_rate;
- jack_nframes_t _current_frame_rate; //this includes video pullup offset
+ nframes_t _base_frame_rate;
+ nframes_t _current_frame_rate; //this includes video pullup offset
int transport_sub_state;
mutable gint _record_status;
- jack_nframes_t _transport_frame;
+ nframes_t _transport_frame;
Location* end_location;
Location* start_location;
Slave *_slave;
- SlaveSource _slave_type;
volatile float _transport_speed;
volatile float _desired_transport_speed;
float _last_transport_speed;
- jack_nframes_t _last_slave_transport_frame;
- jack_nframes_t maximum_output_latency;
- jack_nframes_t last_stop_frame;
+ nframes_t _last_slave_transport_frame;
+ nframes_t maximum_output_latency;
+ nframes_t last_stop_frame;
BufferSet* _scratch_buffers;
BufferSet* _silent_buffers;
BufferSet* _send_buffers;
- jack_nframes_t current_block_size;
- jack_nframes_t _worst_output_latency;
- jack_nframes_t _worst_input_latency;
- jack_nframes_t _worst_track_latency;
+ nframes_t current_block_size;
+ nframes_t _worst_output_latency;
+ nframes_t _worst_input_latency;
+ nframes_t _worst_track_latency;
bool _have_captured;
float _meter_hold;
float _meter_falloff;
@@ -1147,11 +1003,11 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
void ensure_buffers (ChanCount howmany);
- void process_scrub (jack_nframes_t);
- void process_without_events (jack_nframes_t);
- void process_with_events (jack_nframes_t);
- void process_audition (jack_nframes_t);
- int process_export (jack_nframes_t, ARDOUR::AudioExportSpecification*);
+ void process_scrub (nframes_t);
+ void process_without_events (nframes_t);
+ void process_with_events (nframes_t);
+ void process_audition (nframes_t);
+ int process_export (nframes_t, ARDOUR::AudioExportSpecification*);
/* slave tracking */
@@ -1169,24 +1025,25 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
};
SlaveState slave_state;
- jack_nframes_t slave_wait_end;
+ nframes_t slave_wait_end;
void reset_slave_state ();
- bool follow_slave (jack_nframes_t, jack_nframes_t);
+ bool follow_slave (nframes_t, nframes_t);
+ void set_slave_source (SlaveSource);
bool _exporting;
int prepare_to_export (ARDOUR::AudioExportSpecification&);
void prepare_diskstreams ();
- void commit_diskstreams (jack_nframes_t, bool& session_requires_butler);
- int process_routes (jack_nframes_t, jack_nframes_t);
- int silent_process_routes (jack_nframes_t, jack_nframes_t);
+ void commit_diskstreams (nframes_t, bool& session_requires_butler);
+ int process_routes (nframes_t, nframes_t);
+ int silent_process_routes (nframes_t, nframes_t);
bool get_rec_monitors_input () {
if (actively_recording()) {
return true;
} else {
- if (auto_input) {
+ if (Config->get_auto_input()) {
return false;
} else {
return true;
@@ -1206,7 +1063,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
}
}
- bool maybe_stop (jack_nframes_t limit) {
+ bool maybe_stop (nframes_t limit) {
if ((_transport_speed > 0.0f && _transport_frame >= limit) || (_transport_speed < 0.0f && _transport_frame == 0)) {
stop_transport ();
return true;
@@ -1214,7 +1071,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
return false;
}
- bool maybe_sync_start (jack_nframes_t&, jack_nframes_t&);
+ bool maybe_sync_start (nframes_t&, nframes_t&);
void check_declick_out ();
@@ -1224,26 +1081,12 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
MIDI::Port* _midi_port;
string _path;
string _name;
- bool do_not_record_plugins;
-
- /* toggles */
-
- bool auto_play;
- bool punch_in;
- bool punch_out;
- bool auto_loop;
- bool seamless_loop;
- bool loop_changing;
- jack_nframes_t last_loopend;
- bool auto_input;
- bool crossfades_active;
- bool all_safe;
- bool auto_return;
- bool monitor_in;
- bool send_mtc;
- bool send_mmc;
- bool mmc_control;
- bool midi_control;
+ bool session_send_mmc;
+ bool session_send_mtc;
+ bool session_midi_feedback;
+ bool play_loop;
+ bool loop_changing;
+ nframes_t last_loopend;
RingBuffer<Event*> pending_events;
@@ -1262,11 +1105,12 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
int load_options (const XMLNode&);
XMLNode& get_options () const;
int load_state (string snapshot_name);
+ bool save_config_options_predicate (ConfigVariableBase::Owner owner) const;
- jack_nframes_t _last_roll_location;
- jack_nframes_t _last_record_location;
+ nframes_t _last_roll_location;
+ nframes_t _last_record_location;
bool pending_locate_roll;
- jack_nframes_t pending_locate_frame;
+ nframes_t pending_locate_frame;
bool pending_locate_flush;
bool pending_abort;
@@ -1331,7 +1175,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
uint32_t rf_scale;
void set_rf_speed (float speed);
- void reset_rf_scale (jack_nframes_t frames_moved);
+ void reset_rf_scale (nframes_t frames_moved);
Locations _locations;
void locations_changed ();
@@ -1366,7 +1210,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
void dump_events () const;
void queue_event (Event *ev);
void merge_event (Event*);
- void replace_event (Event::Type, jack_nframes_t action_frame, jack_nframes_t target = 0);
+ void replace_event (Event::Type, nframes_t action_frame, nframes_t target = 0);
bool _replace_event (Event*);
bool _remove_event (Event *);
void _clear_event_type (Event::Type);
@@ -1407,7 +1251,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
/* MIDI Machine Control */
- void deliver_mmc (MIDI::MachineControl::Command, jack_nframes_t);
+ void deliver_mmc (MIDI::MachineControl::Command, nframes_t);
//void deliver_midi_message (MIDI::Port * port, MIDI::eventType ev, MIDI::channel_t, MIDI::EventTwoBytes);
//void deliver_data (MIDI::Port* port, MIDI::byte*, int32_t size);
@@ -1443,14 +1287,14 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
MIDI::byte mtc_msg[16];
MIDI::byte mtc_smpte_bits; /* encoding of SMTPE type for MTC */
MIDI::byte midi_msg[16];
- jack_nframes_t outbound_mtc_smpte_frame;
+ nframes_t outbound_mtc_smpte_frame;
SMPTE::Time transmitting_smpte_time;
int next_quarter_frame_to_send;
double _frames_per_smpte_frame; /* has to be floating point because of drop frame */
- jack_nframes_t _frames_per_hour;
- jack_nframes_t _smpte_frames_per_hour;
- jack_nframes_t _smpte_offset;
+ nframes_t _frames_per_hour;
+ nframes_t _smpte_frames_per_hour;
+ nframes_t _smpte_offset;
bool _smpte_offset_negative;
/* cache the most-recently requested time conversions. This helps when we
@@ -1464,13 +1308,11 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
int send_full_time_code(jack_nframes_t nframes);
int send_midi_time_code_for_cycle(jack_nframes_t nframes);
- //void send_mmc_in_another_thread (MIDI::MachineControl::Command, jack_nframes_t frame = 0);
-
- jack_nframes_t adjust_apparent_position (jack_nframes_t frames);
+ nframes_t adjust_apparent_position (nframes_t frames);
void reset_record_status ();
- int no_roll (jack_nframes_t nframes, jack_nframes_t offset);
+ int no_roll (nframes_t nframes, nframes_t offset);
bool non_realtime_work_pending() const { return static_cast<bool>(post_transport_work); }
bool process_can_proceed() const { return !(post_transport_work & ProcessCannotProceedMask); }
@@ -1489,7 +1331,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
Type type;
MIDI::MachineControl::Command mmc_cmd;
- jack_nframes_t locate_frame;
+ nframes_t locate_frame;
// for SendMessage type
@@ -1521,27 +1363,17 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
mutable gint butler_active;
- //PBD::Lock midi_lock;
- //pthread_t midi_thread;
- //int midi_request_pipe[2];
-
- //RingBuffer<MIDIRequest*> midi_requests;
- /*int start_midi_thread ();
- void terminate_midi_thread ();
- void poke_midi_thread ();
- static void *_midi_thread_work (void *arg);
- void midi_thread_work ();*/
void change_midi_ports ();
int use_config_midi_ports ();
bool waiting_to_start;
- void set_auto_loop (bool yn);
+ void set_play_loop (bool yn);
void overwrite_some_buffers (Diskstream*);
void flush_all_redirects ();
- void locate (jack_nframes_t, bool with_roll, bool with_flush, bool with_loop=false);
- void start_locate (jack_nframes_t, bool with_roll, bool with_flush, bool with_loop=false);
- void force_locate (jack_nframes_t frame, bool with_roll = false);
+ 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);
void set_diskstream_speed (Diskstream*, float speed);
void set_transport_speed (float speed, bool abort = false);
void stop_transport (bool abort = false);
@@ -1590,13 +1422,11 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
/* mixer stuff */
- bool _solo_latched;
- SoloModel _solo_model;
bool solo_update_disabled;
bool currently_soloing;
void route_mute_changed (void *src);
- void route_solo_changed (void *src, boost::shared_ptr<Route>);
+ void route_solo_changed (void *src, boost::weak_ptr<Route>);
void catch_up_on_solo ();
void update_route_solo_state ();
void modify_solo_mute (bool, bool);
@@ -1608,10 +1438,9 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
typedef map<PBD::ID,boost::shared_ptr<Region> > RegionList;
RegionList regions;
- void region_renamed (boost::shared_ptr<Region>);
- void region_changed (Change, boost::shared_ptr<Region>);
void add_region (boost::shared_ptr<Region>);
- void remove_region (boost::shared_ptr<Region>);
+ void region_changed (Change, boost::weak_ptr<Region>);
+ void remove_region (boost::weak_ptr<Region>);
int load_regions (const XMLNode& node);
@@ -1676,7 +1505,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
/* FLATTEN */
- int flatten_one_track (AudioTrack&, jack_nframes_t start, jack_nframes_t cnt);
+ int flatten_one_track (AudioTrack&, nframes_t start, nframes_t cnt);
/* INSERT AND SEND MANAGEMENT */
@@ -1735,8 +1564,6 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
ConnectionList _connections;
int load_connections (const XMLNode&);
- int set_slave_source (SlaveSource, jack_nframes_t);
-
void reverse_diskstream_buffers ();
UndoHistory history;
@@ -1752,7 +1579,7 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
void set_global_solo (GlobalRouteBooleanState s, void *src);
void set_global_record_enable (GlobalRouteBooleanState s, void *src);
- void jack_timebase_callback (jack_transport_state_t, jack_nframes_t, jack_position_t*, int);
+ void jack_timebase_callback (jack_transport_state_t, nframes_t, jack_position_t*, int);
int jack_sync_callback (jack_transport_state_t, jack_position_t*);
void record_enable_change_all (bool yn);
@@ -1761,12 +1588,12 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
/* click track */
struct Click {
- jack_nframes_t start;
- jack_nframes_t duration;
- jack_nframes_t offset;
+ nframes_t start;
+ nframes_t duration;
+ nframes_t offset;
const Sample *data;
- Click (jack_nframes_t s, jack_nframes_t d, const Sample *b)
+ Click (nframes_t s, nframes_t d, const Sample *b)
: start (s), duration (d), data (b) { offset = 0; }
void *operator new(size_t ignored) {
@@ -1788,25 +1615,22 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
boost::shared_ptr<IO> _click_io;
Sample* click_data;
Sample* click_emphasis_data;
- jack_nframes_t click_length;
- jack_nframes_t click_emphasis_length;
+ nframes_t click_length;
+ nframes_t click_emphasis_length;
mutable Glib::RWLock click_lock;
static const Sample default_click[];
- static const jack_nframes_t default_click_length;
+ static const nframes_t default_click_length;
static const Sample default_click_emphasis[];
- static const jack_nframes_t default_click_emphasis_length;
+ static const nframes_t default_click_emphasis_length;
Click *get_click();
void setup_click_sounds (int which);
void clear_clicks ();
- void click (jack_nframes_t start, jack_nframes_t nframes, jack_nframes_t offset);
+ void click (nframes_t start, nframes_t nframes, nframes_t offset);
vector<Route*> master_outs;
- EditMode _edit_mode;
- EditMode pending_edit_mode;
-
/* range playback */
list<AudioRange> current_audio_range;
@@ -1820,12 +1644,9 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
boost::shared_ptr<IO> _master_out;
boost::shared_ptr<IO> _control_out;
- AutoConnectOption input_auto_connect;
- AutoConnectOption output_auto_connect;
-
gain_t* _gain_automation_buffer;
pan_t** _pan_automation_buffer;
- void allocate_pan_automation_buffers (jack_nframes_t nframes, uint32_t howmany, bool force);
+ void allocate_pan_automation_buffers (nframes_t nframes, uint32_t howmany, bool force);
uint32_t _npan_buffers;
/* VST support */
@@ -1852,14 +1673,19 @@ class Session : public sigc::trackable, public PBD::StatefulDestructible
LayerModel layer_model;
CrossfadeModel xfade_model;
- typedef std::list<PBD::Controllable*> Controllables;
+ typedef std::set<PBD::Controllable*> Controllables;
Glib::Mutex controllables_lock;
Controllables controllables;
- void add_controllable (PBD::Controllable*);
- void remove_controllable (PBD::Controllable*);
+ void reset_native_file_format();
+ bool first_file_data_format_reset;
+ bool first_file_header_format_reset;
- void handle_configuration_change (const char*);
+ void config_changed (const char*);
+
+ void add_control_protocol (const ControlProtocolInfo* const, XMLNode*);
+ XMLNode& get_control_protocol_state ();
+
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/slave.h b/libs/ardour/ardour/slave.h
index 0079c10e0a..d4a7e2f22a 100644
--- a/libs/ardour/ardour/slave.h
+++ b/libs/ardour/ardour/slave.h
@@ -42,11 +42,11 @@ class Slave {
Slave() { }
virtual ~Slave() {}
- virtual bool speed_and_position (float&, jack_nframes_t&) = 0;
+ virtual bool speed_and_position (float&, nframes_t&) = 0;
virtual bool locked() const = 0;
virtual bool ok() const = 0;
virtual bool starting() const { return false; }
- virtual jack_nframes_t resolution() const = 0;
+ virtual nframes_t resolution() const = 0;
virtual bool requires_seekahead () const = 0;
};
@@ -57,13 +57,13 @@ class MTC_Slave : public Slave, public sigc::trackable {
~MTC_Slave ();
void rebind (MIDI::Port&);
- bool speed_and_position (float&, jack_nframes_t&);
+ bool speed_and_position (float&, nframes_t&);
bool locked() const;
bool ok() const;
void handle_locate (const MIDI::byte*);
- jack_nframes_t resolution() const;
+ nframes_t resolution() const;
bool requires_seekahead () const { return true; }
private:
@@ -76,8 +76,8 @@ class MTC_Slave : public Slave, public sigc::trackable {
int guard1;
//SMPTE_Time mtc;
- jack_nframes_t position;
- jack_nframes_t timestamp;
+ nframes_t position;
+ nframes_t timestamp;
int guard2;
SafeTime() {
@@ -88,12 +88,12 @@ class MTC_Slave : public Slave, public sigc::trackable {
};
SafeTime current;
- jack_nframes_t mtc_frame; /* current time */
- jack_nframes_t last_inbound_frame; /* when we got it; audio clocked */
+ nframes_t mtc_frame; /* current time */
+ nframes_t last_inbound_frame; /* when we got it; audio clocked */
float mtc_speed;
- jack_nframes_t first_mtc_frame;
- jack_nframes_t first_mtc_time;
+ nframes_t first_mtc_frame;
+ nframes_t first_mtc_time;
static const int32_t accumulator_size = 128;
float accumulator[accumulator_size];
@@ -113,7 +113,7 @@ class ADAT_Slave : public Slave
ADAT_Slave () {}
~ADAT_Slave () {}
- bool speed_and_position (float& speed, jack_nframes_t& pos) {
+ bool speed_and_position (float& speed, nframes_t& pos) {
speed = 0;
pos = 0;
return false;
@@ -121,7 +121,7 @@ class ADAT_Slave : public Slave
bool locked() const { return false; }
bool ok() const { return false; }
- jack_nframes_t resolution() const { return 1; }
+ nframes_t resolution() const { return 1; }
bool requires_seekahead () const { return true; }
};
@@ -131,12 +131,12 @@ class JACK_Slave : public Slave
JACK_Slave (jack_client_t*);
~JACK_Slave ();
- bool speed_and_position (float& speed, jack_nframes_t& pos);
+ bool speed_and_position (float& speed, nframes_t& pos);
bool starting() const { return _starting; }
bool locked() const;
bool ok() const;
- jack_nframes_t resolution() const { return 1; }
+ nframes_t resolution() const { return 1; }
bool requires_seekahead () const { return false; }
private:
diff --git a/libs/ardour/ardour/sndfilesource.h b/libs/ardour/ardour/sndfilesource.h
index cb6bd2e920..50fd5e6839 100644
--- a/libs/ardour/ardour/sndfilesource.h
+++ b/libs/ardour/ardour/sndfilesource.h
@@ -35,7 +35,7 @@ class SndFileSource : public AudioFileSource {
/* constructor to be called for new in-session files */
- SndFileSource (Session&, std::string path, SampleFormat samp_format, HeaderFormat hdr_format, jack_nframes_t rate,
+ SndFileSource (Session&, std::string path, SampleFormat samp_format, HeaderFormat hdr_format, nframes_t rate,
Flag flags = AudioFileSource::Flag (AudioFileSource::Writable|
AudioFileSource::Removable|
AudioFileSource::RemovableIfEmpty|
@@ -48,18 +48,18 @@ class SndFileSource : public AudioFileSource {
~SndFileSource ();
float sample_rate () const;
- int update_header (jack_nframes_t when, struct tm&, time_t);
+ int update_header (nframes_t when, struct tm&, time_t);
int flush_header ();
- jack_nframes_t natural_position () const;
+ nframes_t natural_position () const;
protected:
void set_header_timeline_position ();
- jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const;
- jack_nframes_t write_unlocked (Sample *dst, jack_nframes_t cnt);
+ nframes_t read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const;
+ nframes_t write_unlocked (Sample *dst, nframes_t cnt);
- jack_nframes_t write_float (Sample* data, jack_nframes_t pos, jack_nframes_t cnt);
+ nframes_t write_float (Sample* data, nframes_t pos, nframes_t cnt);
private:
SNDFILE *sf;
@@ -67,12 +67,12 @@ class SndFileSource : public AudioFileSource {
SF_BROADCAST_INFO *_broadcast_info;
mutable float *interleave_buf;
- mutable jack_nframes_t interleave_bufsize;
+ mutable nframes_t interleave_bufsize;
void init (const string &str);
int open();
void close();
- int setup_broadcast_info (jack_nframes_t when, struct tm&, time_t);
+ int setup_broadcast_info (nframes_t when, struct tm&, time_t);
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/source.h b/libs/ardour/ardour/source.h
index 591e7181a1..8bf66f8b8d 100644
--- a/libs/ardour/ardour/source.h
+++ b/libs/ardour/ardour/source.h
@@ -34,7 +34,7 @@ namespace ARDOUR {
class Session;
-class Source : public PBD::StatefulDestructible, public sigc::trackable
+class Source : public PBD::StatefulDestructible
{
public:
Source (Session&, std::string name, DataType type);
diff --git a/libs/ardour/ardour/source_factory.h b/libs/ardour/ardour/source_factory.h
index 073532c6ab..be1551f518 100644
--- a/libs/ardour/ardour/source_factory.h
+++ b/libs/ardour/ardour/source_factory.h
@@ -23,7 +23,10 @@ class SourceFactory {
// MIDI sources will have to be hacked in here somehow
static boost::shared_ptr<Source> createReadable (DataType type, Session&, std::string idstr, AudioFileSource::Flag flags, bool announce = true);
- static boost::shared_ptr<Source> createWritable (DataType type, Session&, std::string name, bool destructive, jack_nframes_t rate, bool announce = true);
+ static boost::shared_ptr<Source> createWritable (DataType type, Session&, std::string name, bool destructive, nframes_t rate, bool announce = true);
+
+ private:
+ static int setup_peakfile (boost::shared_ptr<Source>);
};
}
diff --git a/libs/ardour/ardour/state_manager.h b/libs/ardour/ardour/state_manager.h
index 99bfcfc3ce..e123b2cb37 100644
--- a/libs/ardour/ardour/state_manager.h
+++ b/libs/ardour/ardour/state_manager.h
@@ -13,7 +13,7 @@ namespace ARDOUR {
typedef uint32_t state_id_t;
-class StateManager : public sigc::trackable
+class StateManager : public virtual sigc::trackable
{
public:
struct State {
diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h
index 0b37579ecb..7cdbe56cf2 100644
--- a/libs/ardour/ardour/tempo.h
+++ b/libs/ardour/ardour/tempo.h
@@ -57,7 +57,7 @@ class Tempo {
}
double beats_per_minute () const { return _beats_per_minute; }
- double frames_per_beat (jack_nframes_t sr) const {
+ double frames_per_beat (nframes_t sr) const {
return ((60.0 * sr) / _beats_per_minute);
}
@@ -85,7 +85,7 @@ class Meter {
double beats_per_bar () const { return _beats_per_bar; }
double note_divisor() const { return _note_type; }
- double frames_per_bar (const Tempo&, jack_nframes_t sr) const;
+ double frames_per_bar (const Tempo&, nframes_t sr) const;
protected:
@@ -112,12 +112,12 @@ class MetricSection {
virtual ~MetricSection() {}
const BBT_Time& start() const { return _start; }
- const jack_nframes_t frame() const { return _frame; }
+ const nframes_t frame() const { return _frame; }
void set_movable (bool yn) { _movable = yn; }
bool movable() const { return _movable; }
- virtual void set_frame (jack_nframes_t f) {
+ virtual void set_frame (nframes_t f) {
_frame = f;
};
@@ -134,7 +134,7 @@ class MetricSection {
private:
BBT_Time _start;
- jack_nframes_t _frame;
+ nframes_t _frame;
bool _movable;
};
@@ -176,7 +176,7 @@ class TempoMap : public StateManager, public PBD::StatefulDestructible
{
public:
- TempoMap (jack_nframes_t frame_rate);
+ TempoMap (nframes_t frame_rate);
~TempoMap();
/* measure-based stuff */
@@ -188,13 +188,13 @@ class TempoMap : public StateManager, public PBD::StatefulDestructible
struct BBTPoint {
BBTPointType type;
- jack_nframes_t frame;
+ nframes_t frame;
const Meter* meter;
const Tempo* tempo;
uint32_t bar;
uint32_t beat;
- BBTPoint (const Meter& m, const Tempo& t, jack_nframes_t f, BBTPointType ty, uint32_t b, uint32_t e)
+ BBTPoint (const Meter& m, const Tempo& t, nframes_t f, BBTPointType ty, uint32_t b, uint32_t e)
: type (ty), frame (f), meter (&m), tempo (&t), bar (b), beat (e) {}
};
@@ -205,17 +205,17 @@ class TempoMap : public StateManager, public PBD::StatefulDestructible
(obj.*method)(*metrics);
}
- BBTPointList *get_points (jack_nframes_t start, jack_nframes_t end) const;
+ BBTPointList *get_points (nframes_t start, nframes_t end) const;
- void bbt_time (jack_nframes_t when, BBT_Time&) const;
- jack_nframes_t frame_time (const BBT_Time&) const;
- jack_nframes_t bbt_duration_at (jack_nframes_t, const BBT_Time&, int dir) const;
+ void bbt_time (nframes_t when, BBT_Time&) const;
+ nframes_t frame_time (const BBT_Time&) const;
+ nframes_t bbt_duration_at (nframes_t, const BBT_Time&, int dir) const;
static const Tempo& default_tempo() { return _default_tempo; }
static const Meter& default_meter() { return _default_meter; }
- const Tempo& tempo_at (jack_nframes_t);
- const Meter& meter_at (jack_nframes_t);
+ const Tempo& tempo_at (nframes_t);
+ const Meter& meter_at (nframes_t);
void add_tempo(const Tempo&, BBT_Time where);
void add_meter(const Meter&, BBT_Time where);
@@ -230,15 +230,15 @@ class TempoMap : public StateManager, public PBD::StatefulDestructible
void replace_meter (MeterSection& existing, const Meter& replacement);
- jack_nframes_t round_to_bar (jack_nframes_t frame, int dir);
+ nframes_t round_to_bar (nframes_t frame, int dir);
- jack_nframes_t round_to_beat (jack_nframes_t frame, int dir);
+ nframes_t round_to_beat (nframes_t frame, int dir);
- jack_nframes_t round_to_beat_subdivision (jack_nframes_t fr, int sub_num);
+ nframes_t round_to_beat_subdivision (nframes_t fr, int sub_num);
- jack_nframes_t round_to_tick (jack_nframes_t frame, int dir);
+ nframes_t round_to_tick (nframes_t frame, int dir);
- void set_length (jack_nframes_t frames);
+ void set_length (nframes_t frames);
XMLNode& get_state (void);
int set_state (const XMLNode&);
@@ -259,33 +259,33 @@ class TempoMap : public StateManager, public PBD::StatefulDestructible
void set_tempo (const Tempo& t) { _tempo = &t; }
void set_meter (const Meter& m) { _meter = &m; }
- void set_frame (jack_nframes_t f) { _frame = f; }
+ void set_frame (nframes_t f) { _frame = f; }
void set_start (const BBT_Time& t) { _start = t; }
const Meter& meter() const { return *_meter; }
const Tempo& tempo() const { return *_tempo; }
- jack_nframes_t frame() const { return _frame; }
+ nframes_t frame() const { return _frame; }
const BBT_Time& start() const { return _start; }
private:
const Meter* _meter;
const Tempo* _tempo;
- jack_nframes_t _frame;
+ nframes_t _frame;
BBT_Time _start;
};
Metric metric_at (BBT_Time bbt) const;
- Metric metric_at (jack_nframes_t) const;
- void bbt_time_with_metric (jack_nframes_t, BBT_Time&, const Metric&) const;
+ Metric metric_at (nframes_t) const;
+ void bbt_time_with_metric (nframes_t, BBT_Time&, const Metric&) const;
private:
static Tempo _default_tempo;
static Meter _default_meter;
Metrics *metrics;
- jack_nframes_t _frame_rate;
- jack_nframes_t last_bbt_when;
+ nframes_t _frame_rate;
+ nframes_t last_bbt_when;
bool last_bbt_valid;
BBT_Time last_bbt;
mutable Glib::RWLock lock;
@@ -293,19 +293,19 @@ class TempoMap : public StateManager, public PBD::StatefulDestructible
void timestamp_metrics ();
- jack_nframes_t round_to_type (jack_nframes_t fr, int dir, BBTPointType);
+ nframes_t round_to_type (nframes_t fr, int dir, BBTPointType);
- jack_nframes_t frame_time_unlocked (const BBT_Time&) const;
+ nframes_t frame_time_unlocked (const BBT_Time&) const;
- void bbt_time_unlocked (jack_nframes_t, BBT_Time&) const;
+ void bbt_time_unlocked (nframes_t, BBT_Time&) const;
- jack_nframes_t bbt_duration_at_unlocked (const BBT_Time& when, const BBT_Time& bbt, int dir) const;
+ nframes_t bbt_duration_at_unlocked (const BBT_Time& when, const BBT_Time& bbt, int dir) const;
const MeterSection& first_meter() const;
const TempoSection& first_tempo() const;
- jack_nframes_t count_frames_between (const BBT_Time&, const BBT_Time&) const;
- jack_nframes_t count_frames_between_metrics (const Meter&, const Tempo&, const BBT_Time&, const BBT_Time&) const;
+ nframes_t count_frames_between (const BBT_Time&, const BBT_Time&) const;
+ nframes_t count_frames_between_metrics (const Meter&, const Tempo&, const BBT_Time&, const BBT_Time&) const;
int move_metric_section (MetricSection&, const BBT_Time& to);
void do_insert (MetricSection* section);
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index a49aa60d31..243d0db46d 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -39,14 +39,14 @@ class Track : public Route
int set_name (string str, void *src);
- virtual int roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t offset, int declick, bool can_record, bool rec_monitors_input) = 0;
+ virtual int roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame,
+ nframes_t offset, int declick, bool can_record, bool rec_monitors_input) = 0;
- virtual int no_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t offset, bool state_changing, bool can_record, bool rec_monitors_input) = 0;
+ virtual int no_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame,
+ nframes_t offset, bool state_changing, bool can_record, bool rec_monitors_input) = 0;
- virtual int silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t offset, bool can_record, bool rec_monitors_input) = 0;
+ virtual int silent_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame,
+ nframes_t offset, bool can_record, bool rec_monitors_input) = 0;
void toggle_monitor_input ();
@@ -60,8 +60,8 @@ class Track : public Route
TrackMode mode() const { return _mode; }
void set_mode (TrackMode m);
- jack_nframes_t update_total_latency();
- void set_latency_delay (jack_nframes_t);
+ nframes_t update_total_latency();
+ void set_latency_delay (nframes_t);
enum FreezeState {
NoFreeze,
@@ -75,7 +75,7 @@ class Track : public Route
virtual void unfreeze () = 0;
virtual void bounce (InterThreadInfo&) = 0;
- virtual void bounce_range (jack_nframes_t start, jack_nframes_t end, InterThreadInfo&) = 0;
+ virtual void bounce_range (nframes_t start, nframes_t end, InterThreadInfo&) = 0;
XMLNode& get_state();
XMLNode& get_template();
diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h
index c0975be922..61e5f35c95 100644
--- a/libs/ardour/ardour/types.h
+++ b/libs/ardour/ardour/types.h
@@ -52,6 +52,7 @@ namespace ARDOUR {
typedef float gain_t;
typedef uint32_t layer_t;
typedef uint64_t microseconds_t;
+ typedef uint32_t nframes_t;
typedef jack_midi_event_t MidiEvent;
typedef unsigned char RawMidi;
@@ -70,8 +71,8 @@ namespace ARDOUR {
OverlapExternal // overlap extends to (at least) begin+end
};
- OverlapType coverage (jack_nframes_t start_a, jack_nframes_t end_a,
- jack_nframes_t start_b, jack_nframes_t end_b);
+ OverlapType coverage (nframes_t start_a, nframes_t end_a,
+ nframes_t start_b, nframes_t end_b);
enum AutomationType {
GainAutomation = 0x1,
@@ -151,19 +152,21 @@ namespace ARDOUR {
BBT_Time bbt;
union {
- jack_nframes_t frames;
+ nframes_t frames;
double seconds;
};
+
+ AnyTime() { type = Frames; frames = 0; }
};
struct AudioRange {
- jack_nframes_t start;
- jack_nframes_t end;
+ nframes_t start;
+ nframes_t end;
uint32_t id;
- AudioRange (jack_nframes_t s, jack_nframes_t e, uint32_t i) : start (s), end (e) , id (i) {}
+ AudioRange (nframes_t s, nframes_t e, uint32_t i) : start (s), end (e) , id (i) {}
- jack_nframes_t length() { return end - start + 1; }
+ nframes_t length() { return end - start + 1; }
bool operator== (const AudioRange& other) const {
return start == other.start && end == other.end && id == other.id;
@@ -173,7 +176,7 @@ namespace ARDOUR {
return start == other.start && end == other.end;
}
- OverlapType coverage (jack_nframes_t s, jack_nframes_t e) const {
+ OverlapType coverage (nframes_t s, nframes_t e) const {
return ARDOUR::coverage (start, end, s, e);
}
};
@@ -195,6 +198,28 @@ namespace ARDOUR {
}
};
+ /*
+ Slowest = 6.6dB/sec falloff at update rate of 40ms
+ Slow = 6.8dB/sec falloff at update rate of 40ms
+ */
+
+ enum MeterFalloff {
+ MeterFalloffOff = 0,
+ MeterFalloffSlowest = 1,
+ MeterFalloffSlow = 2,
+ MeterFalloffMedium = 3,
+ MeterFalloffFast = 4,
+ MeterFalloffFaster = 5,
+ MeterFalloffFastest = 6
+ };
+
+ enum MeterHold {
+ MeterHoldOff = 0,
+ MeterHoldShort = 40,
+ MeterHoldMedium = 100,
+ MeterHoldLong = 200
+ };
+
enum EditMode {
Slide,
Splice
@@ -216,10 +241,32 @@ namespace ARDOUR {
PostFader
};
+ enum MonitorModel {
+ HardwareMonitoring,
+ SoftwareMonitoring,
+ ExternalMonitoring,
+ };
+
enum CrossfadeModel {
FullCrossfade,
ShortCrossfade
};
+
+ enum LayerModel {
+ LaterHigher,
+ MoveAddHigher,
+ AddHigher
+ };
+
+ enum SoloModel {
+ InverseMute,
+ SoloBus
+ };
+
+ enum AutoConnectOption {
+ AutoConnectPhysical = 0x1,
+ AutoConnectMaster = 0x2
+ };
struct InterThreadInfo {
volatile bool done;
@@ -256,23 +303,50 @@ namespace ARDOUR {
LADSPA,
VST
};
-
+
+ enum SlaveSource {
+ None = 0,
+ MTC,
+ JACK
+ };
+
+ enum ShuttleBehaviour {
+ Sprung,
+ Wheel
+ };
+
+ enum ShuttleUnits {
+ Percentage,
+ Semitones
+ };
+
typedef std::vector<boost::shared_ptr<Source> > SourceList;
} // namespace ARDOUR
std::istream& operator>>(std::istream& o, ARDOUR::SampleFormat& sf);
std::istream& operator>>(std::istream& o, ARDOUR::HeaderFormat& sf);
-
-static inline jack_nframes_t
-session_frame_to_track_frame (jack_nframes_t session_frame, double speed)
+std::istream& operator>>(std::istream& o, ARDOUR::AutoConnectOption& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::EditMode& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::MonitorModel& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::SoloModel& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::LayerModel& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::CrossfadeModel& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::SlaveSource& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::ShuttleBehaviour& sf);
+std::istream& operator>>(std::istream& o, ARDOUR::ShuttleUnits& sf);
+
+using ARDOUR::nframes_t;
+
+static inline nframes_t
+session_frame_to_track_frame (nframes_t session_frame, double speed)
{
- return (jack_nframes_t)( (double)session_frame * speed );
+ return (nframes_t)( (double)session_frame * speed );
}
-static inline jack_nframes_t
-track_frame_to_session_frame (jack_nframes_t track_frame, double speed)
+static inline nframes_t
+track_frame_to_session_frame (nframes_t track_frame, double speed)
{
- return (jack_nframes_t)( (double)track_frame / speed );
+ return (nframes_t)( (double)track_frame / speed );
}
diff --git a/libs/ardour/ardour/utils.h b/libs/ardour/ardour/utils.h
index 214e74156c..d926f52f82 100644
--- a/libs/ardour/ardour/utils.h
+++ b/libs/ardour/ardour/utils.h
@@ -57,7 +57,16 @@ int touch_file(std::string path);
std::string region_name_from_path (std::string path);
std::string path_expand (std::string);
-void compute_equal_power_fades (jack_nframes_t nframes, float* in, float* out);
+void compute_equal_power_fades (nframes_t nframes, float* in, float* out);
+
+const char* slave_source_to_string (ARDOUR::SlaveSource src);
+ARDOUR::SlaveSource string_to_slave_source (std::string str);
+
+const char* edit_mode_to_string (ARDOUR::EditMode);
+ARDOUR::EditMode string_to_edit_mode (std::string);
+
+float meter_falloff_to_float (ARDOUR::MeterFalloff);
+float meter_hold_to_float (ARDOUR::MeterHold);
#if defined(HAVE_COREAUDIO) || defined(HAVE_AUDIOUNITS)
std::string CFStringRefToStdString(CFStringRef stringRef);
diff --git a/libs/ardour/ardour/vst_plugin.h b/libs/ardour/ardour/vst_plugin.h
index 4fb5b0babb..7b8246868c 100644
--- a/libs/ardour/ardour/vst_plugin.h
+++ b/libs/ardour/ardour/vst_plugin.h
@@ -64,7 +64,7 @@ class VSTPlugin : public ARDOUR::Plugin
const char * maker() const;
uint32_t parameter_count() const;
float default_value (uint32_t port);
- jack_nframes_t latency() const;
+ nframes_t latency() const;
void set_parameter (uint32_t port, float val);
float get_parameter (uint32_t port) const;
int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const;
@@ -72,8 +72,8 @@ class VSTPlugin : public ARDOUR::Plugin
uint32_t nth_parameter (uint32_t port, bool& ok) const;
void activate ();
void deactivate ();
- void set_block_size (jack_nframes_t nframes);
- int connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, jack_nframes_t nframes, jack_nframes_t offset);
+ void set_block_size (nframes_t nframes);
+ int connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, nframes_t nframes, nframes_t offset);
void store_state (ARDOUR::PluginState&);
void restore_state (ARDOUR::PluginState&);
string describe_parameter (uint32_t);
diff --git a/libs/ardour/audio_diskstream.cc b/libs/ardour/audio_diskstream.cc
index 9572297ac5..f08d38a9b9 100644
--- a/libs/ardour/audio_diskstream.cc
+++ b/libs/ardour/audio_diskstream.cc
@@ -250,7 +250,7 @@ AudioDiskstream::non_realtime_input_change ()
/* now refill channel buffers */
if (speed() != 1.0f || speed() != -1.0f) {
- seek ((jack_nframes_t) (_session.transport_frame() * (double) speed()));
+ seek ((nframes_t) (_session.transport_frame() * (double) speed()));
} else {
seek (_session.transport_frame());
}
@@ -376,9 +376,7 @@ AudioDiskstream::setup_destructive_playlist ()
/* a single full-sized region */
- cerr << "setup DS using " << srcs.front()->natural_position () << endl;
-
- boost::shared_ptr<Region> region (RegionFactory::create (srcs, 0, max_frames, _name));
+ boost::shared_ptr<Region> region (RegionFactory::create (srcs, 0, max_frames - srcs.front()->natural_position(), _name));
_playlist->add_region (region, srcs.front()->natural_position());
}
@@ -391,21 +389,19 @@ AudioDiskstream::use_destructive_playlist ()
with the (presumed single, full-extent) region.
*/
- Playlist::RegionList* rl = _playlist->regions_at (0);
+ boost::shared_ptr<Region> rp = _playlist->find_next_region (_session.current_start_frame(), Start, 1);
- if (rl->empty()) {
+ if (!rp) {
reset_write_sources (false, true);
return;
}
- boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion> (rl->front());
+ boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion> (rp);
if (region == 0) {
throw failed_constructor();
}
- delete rl;
-
uint32_t n;
ChannelList::iterator chan;
@@ -419,7 +415,7 @@ AudioDiskstream::use_destructive_playlist ()
}
void
-AudioDiskstream::check_record_status (jack_nframes_t transport_frame, jack_nframes_t nframes, bool can_record)
+AudioDiskstream::check_record_status (nframes_t transport_frame, nframes_t nframes, bool can_record)
{
int possibly_recording;
int rolling;
@@ -469,8 +465,7 @@ AudioDiskstream::check_record_status (jack_nframes_t transport_frame, jack_nfram
if (_alignment_style == ExistingMaterial) {
-
- if (!_session.get_punch_in()) {
+ if (!Config->get_punch_in()) {
/* manual punch in happens at the correct transport frame
because the user hit a button. but to get alignment correct
@@ -499,7 +494,7 @@ AudioDiskstream::check_record_status (jack_nframes_t transport_frame, jack_nfram
} else {
- if (_session.get_punch_in()) {
+ if (Config->get_punch_in()) {
first_recordable_frame += _roll_delay;
} else {
capture_start_frame -= _roll_delay;
@@ -544,13 +539,13 @@ AudioDiskstream::check_record_status (jack_nframes_t transport_frame, jack_nfram
}
int
-AudioDiskstream::process (jack_nframes_t transport_frame, jack_nframes_t nframes, jack_nframes_t offset, bool can_record, bool rec_monitors_input)
+AudioDiskstream::process (nframes_t transport_frame, nframes_t nframes, nframes_t offset, bool can_record, bool rec_monitors_input)
{
uint32_t n;
ChannelList::iterator c;
int ret = -1;
- jack_nframes_t rec_offset = 0;
- jack_nframes_t rec_nframes = 0;
+ nframes_t rec_offset = 0;
+ nframes_t rec_nframes = 0;
bool nominally_recording;
bool re = record_enabled ();
bool collect_playback = false;
@@ -593,7 +588,7 @@ AudioDiskstream::process (jack_nframes_t transport_frame, jack_nframes_t nframes
(*c).current_playback_buffer = 0;
}
- if (nominally_recording || (_session.get_record_enabled() && _session.get_punch_in())) {
+ if (nominally_recording || (_session.get_record_enabled() && Config->get_punch_in())) {
OverlapType ot;
ot = coverage (first_recordable_frame, last_recordable_frame, transport_frame, transport_frame + nframes);
@@ -673,7 +668,7 @@ AudioDiskstream::process (jack_nframes_t transport_frame, jack_nframes_t nframes
} else {
- jack_nframes_t total = chan.capture_vector.len[0] + chan.capture_vector.len[1];
+ nframes_t total = chan.capture_vector.len[0] + chan.capture_vector.len[1];
if (rec_nframes > total) {
DiskOverrun ();
@@ -684,7 +679,7 @@ AudioDiskstream::process (jack_nframes_t transport_frame, jack_nframes_t nframes
assert(ap);
Sample* buf = ap->get_audio_buffer().data(nframes, offset);
- jack_nframes_t first = chan.capture_vector.len[0];
+ nframes_t first = chan.capture_vector.len[0];
memcpy (chan.capture_wrap_buffer, buf, sizeof (Sample) * first);
memcpy (chan.capture_vector.buf[0], buf, sizeof (Sample) * first);
@@ -747,12 +742,12 @@ AudioDiskstream::process (jack_nframes_t transport_frame, jack_nframes_t nframes
/* we're doing playback */
- jack_nframes_t necessary_samples;
+ nframes_t necessary_samples;
/* no varispeed playback if we're recording, because the output .... TBD */
if (rec_nframes == 0 && _actual_speed != 1.0f) {
- necessary_samples = (jack_nframes_t) floor ((nframes * fabs (_actual_speed))) + 1;
+ necessary_samples = (nframes_t) floor ((nframes * fabs (_actual_speed))) + 1;
} else {
necessary_samples = nframes;
}
@@ -772,7 +767,7 @@ AudioDiskstream::process (jack_nframes_t transport_frame, jack_nframes_t nframes
chan.current_playback_buffer = chan.playback_vector.buf[0];
} else {
- jack_nframes_t total = chan.playback_vector.len[0] + chan.playback_vector.len[1];
+ nframes_t total = chan.playback_vector.len[0] + chan.playback_vector.len[1];
if (necessary_samples > total) {
DiskUnderrun ();
@@ -793,7 +788,7 @@ AudioDiskstream::process (jack_nframes_t transport_frame, jack_nframes_t nframes
if (rec_nframes == 0 && _actual_speed != 1.0f && _actual_speed != -1.0f) {
uint64_t phase = last_phase;
- jack_nframes_t i = 0;
+ nframes_t i = 0;
// Linearly interpolate into the alt buffer
// using 40.24 fixp maths (swh)
@@ -806,7 +801,7 @@ AudioDiskstream::process (jack_nframes_t transport_frame, jack_nframes_t nframes
i = 0;
phase = last_phase;
- for (jack_nframes_t outsample = 0; outsample < nframes; ++outsample) {
+ for (nframes_t outsample = 0; outsample < nframes; ++outsample) {
i = phase >> 24;
fr = (phase & 0xFFFFFF) / 16777216.0f;
chan.speed_buffer[outsample] =
@@ -845,7 +840,7 @@ AudioDiskstream::process (jack_nframes_t transport_frame, jack_nframes_t nframes
}
bool
-AudioDiskstream::commit (jack_nframes_t nframes)
+AudioDiskstream::commit (nframes_t nframes)
{
bool need_butler = false;
@@ -905,7 +900,7 @@ AudioDiskstream::overwrite_existing_buffers ()
overwrite_queued = false;
/* assume all are the same size */
- jack_nframes_t size = channels[0].playback_buf->bufsize();
+ nframes_t size = channels[0].playback_buf->bufsize();
mixdown_buffer = new Sample[size];
gain_buffer = new float[size];
@@ -914,12 +909,12 @@ AudioDiskstream::overwrite_existing_buffers ()
size--;
uint32_t n=0;
- jack_nframes_t start;
+ nframes_t start;
for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan, ++n) {
start = overwrite_frame;
- jack_nframes_t cnt = size;
+ nframes_t cnt = size;
/* to fill the buffer without resetting the playback sample, we need to
do it one or two chunks (normally two).
@@ -932,7 +927,7 @@ AudioDiskstream::overwrite_existing_buffers ()
*/
- jack_nframes_t to_read = size - overwrite_offset;
+ nframes_t to_read = size - overwrite_offset;
if (read ((*chan).playback_buf->buffer() + overwrite_offset, mixdown_buffer, gain_buffer, start, to_read, *chan, n, reversed)) {
error << string_compose(_("AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3"),
@@ -963,7 +958,7 @@ AudioDiskstream::overwrite_existing_buffers ()
}
int
-AudioDiskstream::seek (jack_nframes_t frame, bool complete_refill)
+AudioDiskstream::seek (nframes_t frame, bool complete_refill)
{
Glib::Mutex::Lock lm (state_lock);
uint32_t n;
@@ -994,7 +989,7 @@ AudioDiskstream::seek (jack_nframes_t frame, bool complete_refill)
}
int
-AudioDiskstream::can_internal_playback_seek (jack_nframes_t distance)
+AudioDiskstream::can_internal_playback_seek (nframes_t distance)
{
ChannelList::iterator chan;
@@ -1007,7 +1002,7 @@ AudioDiskstream::can_internal_playback_seek (jack_nframes_t distance)
}
int
-AudioDiskstream::internal_playback_seek (jack_nframes_t distance)
+AudioDiskstream::internal_playback_seek (nframes_t distance)
{
ChannelList::iterator chan;
@@ -1022,15 +1017,15 @@ AudioDiskstream::internal_playback_seek (jack_nframes_t distance)
}
int
-AudioDiskstream::read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, jack_nframes_t& start, jack_nframes_t cnt,
+AudioDiskstream::read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, nframes_t& start, nframes_t cnt,
ChannelInfo& channel_info, int channel, bool reversed)
{
- jack_nframes_t this_read = 0;
+ nframes_t this_read = 0;
bool reloop = false;
- jack_nframes_t loop_end = 0;
- jack_nframes_t loop_start = 0;
- jack_nframes_t loop_length = 0;
- jack_nframes_t offset = 0;
+ nframes_t loop_end = 0;
+ nframes_t loop_start = 0;
+ nframes_t loop_length = 0;
+ nframes_t offset = 0;
Location *loc = 0;
if (!reversed) {
@@ -1130,14 +1125,14 @@ int
AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
{
int32_t ret = 0;
- jack_nframes_t to_read;
+ nframes_t to_read;
RingBufferNPT<Sample>::rw_vector vector;
bool reversed = (_visible_speed * _session.transport_speed()) < 0.0f;
- jack_nframes_t total_space;
- jack_nframes_t zero_fill;
+ nframes_t total_space;
+ nframes_t zero_fill;
uint32_t chan_n;
ChannelList::iterator i;
- jack_nframes_t ts;
+ nframes_t ts;
assert(mixdown_buffer);
assert(gain_buffer);
@@ -1249,14 +1244,14 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
}
}
- jack_nframes_t file_frame_tmp = 0;
+ nframes_t file_frame_tmp = 0;
for (chan_n = 0, i = channels.begin(); i != channels.end(); ++i, ++chan_n) {
ChannelInfo& chan (*i);
Sample* buf1;
Sample* buf2;
- jack_nframes_t len1, len2;
+ nframes_t len1, len2;
chan.playback_buf->get_write_vector (&vector);
@@ -1337,7 +1332,7 @@ AudioDiskstream::do_flush (Session::RunContext context, bool force_flush)
int32_t ret = 0;
RingBufferNPT<Sample>::rw_vector vector;
RingBufferNPT<CaptureTransition>::rw_vector transvec;
- jack_nframes_t total;
+ nframes_t total;
_write_data_count = 0;
@@ -1367,7 +1362,7 @@ AudioDiskstream::do_flush (Session::RunContext context, bool force_flush)
ret = 1;
}
- to_write = min (disk_io_chunk_frames, (jack_nframes_t) vector.len[0]);
+ to_write = min (disk_io_chunk_frames, (nframes_t) vector.len[0]);
// check the transition buffer when recording destructive
// important that we get this after the capture buf
@@ -1437,7 +1432,7 @@ AudioDiskstream::do_flush (Session::RunContext context, bool force_flush)
of vector.len[1] to be flushed to disk as well.
*/
- to_write = min ((jack_nframes_t)(disk_io_chunk_frames - to_write), (jack_nframes_t) vector.len[1]);
+ to_write = min ((nframes_t)(disk_io_chunk_frames - to_write), (nframes_t) vector.len[1]);
if ((*chan).write_source->write (vector.buf[1], to_write) != to_write) {
error << string_compose(_("AudioDiskstream %1: cannot write to disk"), _id) << endmsg;
@@ -1462,7 +1457,7 @@ AudioDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_ca
bool more_work = true;
int err = 0;
boost::shared_ptr<AudioRegion> region;
- jack_nframes_t total_capture;
+ nframes_t total_capture;
SourceList srcs;
SourceList::iterator src;
ChannelList::iterator chan;
@@ -1498,29 +1493,21 @@ AudioDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_ca
if (abort_capture) {
- ChannelList::iterator chan;
-
- list<boost::shared_ptr<Source> >* deletion_list = new list<boost::shared_ptr<Source> >;
+ if (destructive()) {
+ goto outout;
+ }
- for ( chan = channels.begin(); chan != channels.end(); ++chan) {
+ for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
if ((*chan).write_source) {
(*chan).write_source->mark_for_remove ();
-
- deletion_list->push_back ((*chan).write_source);
-
+ (*chan).write_source->drop_references ();
(*chan).write_source.reset ();
}
/* new source set up in "out" below */
}
-
- if (!deletion_list->empty()) {
- DeleteSources (deletion_list);
- } else {
- delete deletion_list;
- }
goto out;
}
@@ -1620,9 +1607,11 @@ AudioDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_ca
mark_write_completed = true;
+ out:
reset_write_sources (mark_write_completed);
- out:
+ outout:
+
for (ci = capture_info.begin(); ci != capture_info.end(); ++ci) {
delete *ci;
}
@@ -1722,10 +1711,10 @@ AudioDiskstream::engage_record_enable ()
g_atomic_int_set (&_record_enabled, 1);
capturing_sources.clear ();
- if (Config->get_use_hardware_monitoring()) {
+ if (Config->get_monitoring_model() == HardwareMonitoring) {
for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
if ((*chan).source) {
- (*chan).source->ensure_monitor_input (!(_session.get_auto_input() && rolling));
+ (*chan).source->ensure_monitor_input (!(Config->get_auto_input() && rolling));
}
capturing_sources.push_back ((*chan).write_source);
}
@@ -1742,7 +1731,7 @@ void
AudioDiskstream::disengage_record_enable ()
{
g_atomic_int_set (&_record_enabled, 0);
- if (Config->get_use_hardware_monitoring()) {
+ if (Config->get_monitoring_model() == HardwareMonitoring) {
for (ChannelList::iterator chan = channels.begin(); chan != channels.end(); ++chan) {
if ((*chan).source) {
(*chan).source->ensure_monitor_input (false);
@@ -1769,11 +1758,11 @@ AudioDiskstream::get_state ()
node->add_property ("playlist", _playlist->name());
- snprintf (buf, sizeof(buf), "%f", _visible_speed);
+ snprintf (buf, sizeof(buf), "%.12g", _visible_speed);
node->add_property ("speed", buf);
node->add_property("name", _name);
- id().print (buf);
+ id().print (buf, sizeof (buf));
node->add_property("id", buf);
if (!capturing_sources.empty() && _session.get_record_enabled()) {
@@ -1791,7 +1780,7 @@ AudioDiskstream::get_state ()
Location* pi;
- if (_session.get_punch_in() && ((pi = _session.locations()->auto_punch_location()) != 0)) {
+ if (Config->get_punch_in() && ((pi = _session.locations()->auto_punch_location()) != 0)) {
snprintf (buf, sizeof (buf), "%" PRIu32, pi->start());
} else {
snprintf (buf, sizeof (buf), "%" PRIu32, _session.transport_frame());
@@ -1947,13 +1936,8 @@ AudioDiskstream::use_new_write_source (uint32_t n)
ChannelInfo &chan = channels[n];
if (chan.write_source) {
-
- if (AudioFileSource::is_empty (_session, chan.write_source->path())) {
- chan.write_source->mark_for_remove ();
- chan.write_source.reset ();
- } else {
- chan.write_source.reset ();
- }
+ chan.write_source->set_allow_remove_if_empty (true);
+ chan.write_source.reset ();
}
try {
@@ -2035,7 +2019,7 @@ AudioDiskstream::rename_write_sources ()
}
void
-AudioDiskstream::set_block_size (jack_nframes_t nframes)
+AudioDiskstream::set_block_size (nframes_t nframes)
{
if (_session.get_block_size() > speed_buffer_size) {
speed_buffer_size = _session.get_block_size();
@@ -2057,7 +2041,7 @@ AudioDiskstream::allocate_temporary_buffers ()
*/
double sp = max (fabsf (_actual_speed), 1.2f);
- jack_nframes_t required_wrap_size = (jack_nframes_t) floor (_session.get_block_size() * sp) + 1;
+ nframes_t required_wrap_size = (nframes_t) floor (_session.get_block_size() * sp) + 1;
if (required_wrap_size > wrap_buffer_size) {
@@ -2167,7 +2151,7 @@ AudioDiskstream::use_pending_capture_data (XMLNode& node)
boost::shared_ptr<AudioFileSource> fs;
boost::shared_ptr<AudioFileSource> first_fs;
SourceList pending_sources;
- jack_nframes_t position;
+ nframes_t position;
if ((prop = node.property (X_("at"))) == 0) {
return -1;
diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc
index bd09b1e6b3..7c4052d8ac 100644
--- a/libs/ardour/audio_playlist.cc
+++ b/libs/ardour/audio_playlist.cc
@@ -118,7 +118,7 @@ AudioPlaylist::AudioPlaylist (const AudioPlaylist& other, string name, bool hidd
}
}
-AudioPlaylist::AudioPlaylist (const AudioPlaylist& other, jack_nframes_t start, jack_nframes_t cnt, string name, bool hidden)
+AudioPlaylist::AudioPlaylist (const AudioPlaylist& other, nframes_t start, nframes_t cnt, string name, bool hidden)
: Playlist (other, start, cnt, name, hidden)
{
save_state (_("initial state"));
@@ -164,14 +164,14 @@ struct RegionSortByLayer {
}
};
-jack_nframes_t
-AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, jack_nframes_t start,
- jack_nframes_t cnt, unsigned chan_n)
+ARDOUR::nframes_t
+AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, nframes_t start,
+ nframes_t cnt, unsigned chan_n)
{
- jack_nframes_t ret = cnt;
- jack_nframes_t end;
- jack_nframes_t read_frames;
- jack_nframes_t skip_frames;
+ nframes_t ret = cnt;
+ nframes_t end;
+ nframes_t read_frames;
+ nframes_t skip_frames;
/* optimizing this memset() away involves a lot of conditionals
that may well cause more of a hit due to cache misses
@@ -206,7 +206,6 @@ AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, ja
for (RegionList::iterator i = regions.begin(); i != regions.end(); ++i) {
if ((*i)->coverage (start, end) != OverlapNone) {
-
relevant_regions[(*i)->layer()].push_back (*i);
relevant_layers.push_back ((*i)->layer());
}
@@ -442,7 +441,7 @@ AudioPlaylist::check_dependents (boost::shared_ptr<Region> r, bool norefresh)
audio engineering.
*/
- jack_nframes_t xfade_length = min ((jack_nframes_t) 720, top->length());
+ nframes_t xfade_length = min ((nframes_t) 720, top->length());
/* in, out */
xfade = new Crossfade (top, bottom, xfade_length, top->first_frame(), StartOfIn);
@@ -452,7 +451,7 @@ AudioPlaylist::check_dependents (boost::shared_ptr<Region> r, bool norefresh)
} else {
- xfade = new Crossfade (other, region, _session.get_xfade_model(), _session.get_crossfades_active());
+ xfade = new Crossfade (other, region, Config->get_xfade_model(), Config->get_crossfades_active());
add_crossfade (*xfade);
}
}
@@ -558,7 +557,7 @@ AudioPlaylist::set_state (const XMLNode& node)
_crossfades.push_back (xfade);
xfade->Invalidated.connect (mem_fun (*this, &AudioPlaylist::crossfade_invalidated));
xfade->StateChanged.connect (mem_fun (*this, &AudioPlaylist::crossfade_changed));
- /* no need to notify here */
+ NewCrossfade(xfade);
} else {
delete xfade;
}
@@ -884,12 +883,12 @@ AudioPlaylist::region_changed (Change what_changed, boost::shared_ptr<Region> re
}
void
-AudioPlaylist::crossfades_at (jack_nframes_t frame, Crossfades& clist)
+AudioPlaylist::crossfades_at (nframes_t frame, Crossfades& clist)
{
RegionLock rlock (this);
for (Crossfades::iterator i = _crossfades.begin(); i != _crossfades.end(); ++i) {
- jack_nframes_t start, end;
+ nframes_t start, end;
start = (*i)->position();
end = start + (*i)->overlap_length(); // not length(), important difference
diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc
index 4f7c45235d..a6cbce2c1e 100644
--- a/libs/ardour/audio_track.cc
+++ b/libs/ardour/audio_track.cc
@@ -246,6 +246,10 @@ AudioTrack::set_state (const XMLNode& node)
sscanf (prop->value().c_str(), "%d", &x);
set_remote_control_id (x);
}
+
+ } else if (child->name() == X_("recenable")) {
+ _rec_enable_control.set_state (*child);
+ _session.add_controllable (&_rec_enable_control);
}
}
@@ -273,7 +277,7 @@ AudioTrack::state(bool full_state)
for (vector<FreezeRecordInsertInfo*>::iterator i = _freeze_record.insert_info.begin(); i != _freeze_record.insert_info.end(); ++i) {
inode = new XMLNode (X_("insert"));
- (*i)->id.print (buf);
+ (*i)->id.print (buf, sizeof (buf));
inode->add_property (X_("id"), buf);
inode->add_child_copy ((*i)->state);
@@ -317,9 +321,11 @@ AudioTrack::state(bool full_state)
diskstream.
*/
- _diskstream->id().print (buf);
+ _diskstream->id().print (buf, sizeof (buf));
root.add_property ("diskstream-id", buf);
+ root.add_child_nocopy (_rec_enable_control.get_state());
+
return root;
}
@@ -399,7 +405,7 @@ AudioTrack::set_state_part_two ()
}
int
-AudioTrack::no_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t offset,
+AudioTrack::no_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, nframes_t offset,
bool session_state_changing, bool can_record, bool rec_monitors_input)
{
if (n_outputs().get_total() == 0) {
@@ -431,15 +437,15 @@ AudioTrack::no_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nf
send_silence = true;
} else {
- if (_session.get_auto_input()) {
- if (Config->get_use_sw_monitoring()) {
+ if (Config->get_auto_input()) {
+ if (Config->get_monitoring_model() == SoftwareMonitoring) {
send_silence = false;
} else {
send_silence = true;
}
} else {
if (_diskstream->record_enabled()) {
- if (Config->get_use_sw_monitoring()) {
+ if (Config->get_monitoring_model() == SoftwareMonitoring) {
send_silence = false;
} else {
send_silence = true;
@@ -479,24 +485,15 @@ AudioTrack::no_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nf
}
int
-AudioTrack::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t offset, int declick,
+AudioTrack::roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, nframes_t offset, int declick,
bool can_record, bool rec_monitors_input)
{
int dret;
Sample* b;
Sample* tmpb;
- jack_nframes_t transport_frame;
+ nframes_t transport_frame;
boost::shared_ptr<AudioDiskstream> diskstream = audio_diskstream();
- {
- Glib::RWLock::ReaderLock lm (redirect_lock, Glib::TRY_LOCK);
- if (lm.locked()) {
- // automation snapshot can also be called from the non-rt context
- // and it uses the redirect list, so we take the lock out here
- automation_snapshot (start_frame);
- }
- }
-
if (n_outputs().get_total() == 0 && _redirects.empty()) {
return 0;
}
@@ -532,7 +529,7 @@ AudioTrack::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nfram
just_meter_input (start_frame, end_frame, nframes, offset);
}
- if (diskstream->record_enabled() && !can_record && !_session.get_auto_input()) {
+ if (diskstream->record_enabled() && !can_record && !Config->get_auto_input()) {
/* not actually recording, but we want to hear the input material anyway,
at least potentially (depending on monitoring options)
@@ -579,7 +576,7 @@ AudioTrack::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nfram
}
}
- process_output_buffers (bufs, start_frame, end_frame, nframes, offset, (!_session.get_record_enabled() || !_session.get_do_not_record_plugins()), declick, (_meter_point != MeterInput));
+ process_output_buffers (bufs, start_frame, end_frame, nframes, offset, (!_session.get_record_enabled() || !Config->get_do_not_record_plugins()), declick, (_meter_point != MeterInput));
} else {
/* problem with the diskstream; just be quiet for a bit */
@@ -590,7 +587,7 @@ AudioTrack::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nfram
}
int
-AudioTrack::silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t offset,
+AudioTrack::silent_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, nframes_t offset,
bool can_record, bool rec_monitors_input)
{
if (n_outputs().get_total() == 0 && _redirects.empty()) {
@@ -611,7 +608,7 @@ AudioTrack::silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jac
}
int
-AudioTrack::export_stuff (BufferSet& buffers, jack_nframes_t start, jack_nframes_t nframes)
+AudioTrack::export_stuff (BufferSet& buffers, nframes_t start, nframes_t nframes)
{
gain_t gain_automation[nframes];
gain_t gain_buffer[nframes];
@@ -676,7 +673,7 @@ AudioTrack::export_stuff (BufferSet& buffers, jack_nframes_t start, jack_nframes
for (BufferSet::audio_iterator bi = buffers.audio_begin(); bi != buffers.audio_end(); ++bi) {
Sample *b = bi->data(nframes);
- for (jack_nframes_t n = 0; n < nframes; ++n) {
+ for (nframes_t n = 0; n < nframes; ++n) {
b[n] *= gain_automation[n];
}
}
@@ -685,7 +682,7 @@ AudioTrack::export_stuff (BufferSet& buffers, jack_nframes_t start, jack_nframes
for (BufferSet::audio_iterator bi = buffers.audio_begin(); bi != buffers.audio_end(); ++bi) {
Sample *b = bi->data(nframes);
- for (jack_nframes_t n = 0; n < nframes; ++n) {
+ for (nframes_t n = 0; n < nframes; ++n) {
b[n] *= this_gain;
}
}
@@ -720,7 +717,7 @@ AudioTrack::bounce (InterThreadInfo& itt)
void
-AudioTrack::bounce_range (jack_nframes_t start, jack_nframes_t end, InterThreadInfo& itt)
+AudioTrack::bounce_range (nframes_t start, nframes_t end, InterThreadInfo& itt)
{
vector<boost::shared_ptr<Source> > srcs;
_session.write_one_audio_track (*this, start, end, false, srcs, itt);
diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc
index 57d5505a0f..ac240828b5 100644
--- a/libs/ardour/audio_unit.cc
+++ b/libs/ardour/audio_unit.cc
@@ -112,7 +112,7 @@ AUPlugin::default_value (uint32_t port)
return 0;
}
-jack_nframes_t
+nframes_t
AUPlugin::latency () const
{
return unit->Latency ();
@@ -159,13 +159,13 @@ AUPlugin::deactivate ()
}
void
-AUPlugin::set_block_size (jack_nframes_t nframes)
+AUPlugin::set_block_size (nframes_t nframes)
{
}
int
-AUPlugin::connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, jack_nframes_t nframes, jack_nframes_t offset)
+AUPlugin::connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in, int32_t& out, nframes_t nframes, nframes_t offset)
{
AudioUnitRenderActionFlags flags = 0;
AudioTimeStamp ts;
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index b2a1fb6a0f..70541fce55 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -46,6 +46,8 @@ using namespace std;
using namespace ARDOUR;
using namespace PBD;
+gint AudioEngine::m_meter_exit;
+
AudioEngine::AudioEngine (string client_name)
: ports (new Ports)
{
@@ -65,7 +67,7 @@ AudioEngine::AudioEngine (string client_name)
_freewheel_thread_registered = false;
m_meter_thread = 0;
- m_meter_exit = false;
+ g_atomic_int_set (&m_meter_exit, 0);
if (connect_to_jack (client_name)) {
throw NoBackendAvailable ();
@@ -81,9 +83,7 @@ AudioEngine::~AudioEngine ()
jack_client_close (_jack);
}
- if(m_meter_thread) {
- g_atomic_int_inc(&m_meter_exit);
- }
+ stop_metering_thread ();
}
void
@@ -102,7 +102,7 @@ AudioEngine::start ()
if (!_running) {
if (session) {
- jack_nframes_t blocksize = jack_get_buffer_size (_jack);
+ nframes_t blocksize = jack_get_buffer_size (_jack);
session->set_block_size (blocksize);
session->set_frame_rate (jack_get_sample_rate (_jack));
@@ -165,7 +165,7 @@ AudioEngine::stop ()
bool
-AudioEngine::get_sync_offset (jack_nframes_t& offset) const
+AudioEngine::get_sync_offset (nframes_t& offset) const
{
#ifdef HAVE_JACK_VIDEO_SUPPORT
@@ -185,14 +185,14 @@ AudioEngine::get_sync_offset (jack_nframes_t& offset) const
}
void
-AudioEngine::_jack_timebase_callback (jack_transport_state_t state, jack_nframes_t nframes,
+AudioEngine::_jack_timebase_callback (jack_transport_state_t state, nframes_t nframes,
jack_position_t* pos, int new_position, void *arg)
{
static_cast<AudioEngine*> (arg)->jack_timebase_callback (state, nframes, pos, new_position);
}
void
-AudioEngine::jack_timebase_callback (jack_transport_state_t state, jack_nframes_t nframes,
+AudioEngine::jack_timebase_callback (jack_transport_state_t state, nframes_t nframes,
jack_position_t* pos, int new_position)
{
if (session && session->synced_to_jack()) {
@@ -231,7 +231,7 @@ AudioEngine::_graph_order_callback (void *arg)
}
int
-AudioEngine::_process_callback (jack_nframes_t nframes, void *arg)
+AudioEngine::_process_callback (nframes_t nframes, void *arg)
{
return static_cast<AudioEngine *> (arg)->process_callback (nframes);
}
@@ -243,11 +243,11 @@ AudioEngine::_freewheel_callback (int onoff, void *arg)
}
int
-AudioEngine::process_callback (jack_nframes_t nframes)
+AudioEngine::process_callback (nframes_t nframes)
{
// CycleTimer ct ("AudioEngine::process");
Glib::Mutex::Lock tm (_process_lock, Glib::TRY_LOCK);
- jack_nframes_t next_processed_frames;
+ nframes_t next_processed_frames;
/* handle wrap around of total frames counter */
@@ -324,13 +324,13 @@ AudioEngine::process_callback (jack_nframes_t nframes)
}
int
-AudioEngine::_sample_rate_callback (jack_nframes_t nframes, void *arg)
+AudioEngine::_sample_rate_callback (nframes_t nframes, void *arg)
{
return static_cast<AudioEngine *> (arg)->jack_sample_rate_callback (nframes);
}
int
-AudioEngine::jack_sample_rate_callback (jack_nframes_t nframes)
+AudioEngine::jack_sample_rate_callback (nframes_t nframes)
{
_frame_rate = nframes;
_usecs_per_cycle = (int) floor ((((double) frames_per_cycle() / nframes)) * 1000000.0);
@@ -350,13 +350,13 @@ AudioEngine::jack_sample_rate_callback (jack_nframes_t nframes)
}
int
-AudioEngine::_bufsize_callback (jack_nframes_t nframes, void *arg)
+AudioEngine::_bufsize_callback (nframes_t nframes, void *arg)
{
return static_cast<AudioEngine *> (arg)->jack_bufsize_callback (nframes);
}
int
-AudioEngine::jack_bufsize_callback (jack_nframes_t nframes)
+AudioEngine::jack_bufsize_callback (nframes_t nframes)
{
_buffer_size = nframes;
_usecs_per_cycle = (int) floor ((((double) nframes / frame_rate())) * 1000000.0);
@@ -376,10 +376,20 @@ AudioEngine::jack_bufsize_callback (jack_nframes_t nframes)
}
void
+AudioEngine::stop_metering_thread ()
+{
+ if (m_meter_thread) {
+ g_atomic_int_set (&m_meter_exit, 1);
+ }
+ m_meter_thread->join ();
+ m_meter_thread = 0;
+}
+
+void
AudioEngine::start_metering_thread ()
{
- if(m_meter_thread == 0) {
- m_meter_thread = Glib::Thread::create (sigc::mem_fun(this, &AudioEngine::meter_thread), false);
+ if (m_meter_thread == 0) {
+ m_meter_thread = Glib::Thread::create (sigc::mem_fun(this, &AudioEngine::meter_thread), true);
}
}
@@ -387,10 +397,9 @@ void
AudioEngine::meter_thread ()
{
while (g_atomic_int_get(&m_meter_exit) != true) {
- Glib::usleep (10000); /* 1/100th sec interval */
- IO::update_meters ();
+ Glib::usleep (10000); /* 1/100th sec interval */
+ IO::update_meters ();
}
- return;
}
void
@@ -566,6 +575,10 @@ AudioEngine::connect (const string& source, const string& destination)
if (ret == 0) {
pair<string,string> c (s, d);
port_connections.push_back (c);
+ } else if (ret == EEXIST) {
+ error << string_compose(_("AudioEngine: connection already exists: %1 (%2) to %3 (%4)"),
+ source, s, destination, d)
+ << endmsg;
} else {
error << string_compose(_("AudioEngine: cannot connect %1 (%2) to %3 (%4)"),
source, s, destination, d)
@@ -626,7 +639,7 @@ AudioEngine::disconnect (Port& port)
}
-jack_nframes_t
+ARDOUR::nframes_t
AudioEngine::frame_rate ()
{
if (_jack) {
@@ -643,7 +656,7 @@ AudioEngine::frame_rate ()
}
}
-jack_nframes_t
+ARDOUR::nframes_t
AudioEngine::frames_per_cycle ()
{
if (_jack) {
@@ -837,7 +850,7 @@ AudioEngine::get_nth_physical (DataType type, uint32_t n, int flag)
return ret;
}
-jack_nframes_t
+ARDOUR::nframes_t
AudioEngine::get_port_total_latency (const Port& port)
{
if (!_jack) {
@@ -874,7 +887,7 @@ AudioEngine::transport_start ()
}
void
-AudioEngine::transport_locate (jack_nframes_t where)
+AudioEngine::transport_locate (nframes_t where)
{
// cerr << "tell JACK to locate to " << where << endl;
if (_jack) {
@@ -1085,7 +1098,7 @@ AudioEngine::reconnect_to_jack ()
if (session) {
- jack_nframes_t blocksize = jack_get_buffer_size (_jack);
+ nframes_t blocksize = jack_get_buffer_size (_jack);
session->set_block_size (blocksize);
session->set_frame_rate (jack_get_sample_rate (_jack));
}
@@ -1134,7 +1147,7 @@ AudioEngine::reconnect_to_jack ()
}
int
-AudioEngine::request_buffer_size (jack_nframes_t nframes)
+AudioEngine::request_buffer_size (nframes_t nframes)
{
if (_jack) {
int ret = jack_set_buffer_size (_jack, nframes);
diff --git a/libs/ardour/audiofilesource.cc b/libs/ardour/audiofilesource.cc
index adfd352d12..0ba2904f57 100644
--- a/libs/ardour/audiofilesource.cc
+++ b/libs/ardour/audiofilesource.cc
@@ -59,8 +59,11 @@ string AudioFileSource::search_path;
sigc::signal<void> AudioFileSource::HeaderPositionOffsetChanged;
uint64_t AudioFileSource::header_position_offset = 0;
+/* XXX turn this into a Config option */
char AudioFileSource::bwf_country_code[3] = "US";
+/* XXX turn this into a Config option */
char AudioFileSource::bwf_organization_code[4] = "LAS";
+/* XXX maybe this too */
char AudioFileSource::bwf_serial_number[13] = "000000000000";
AudioFileSource::AudioFileSource (Session& s, string idstr, Flag flags)
@@ -101,7 +104,6 @@ AudioFileSource::AudioFileSource (Session& s, const XMLNode& node)
AudioFileSource::~AudioFileSource ()
{
if (removable()) {
- cerr << "Removing file " << _path << " because its removable\n";
unlink (_path.c_str());
unlink (peakpath.c_str());
}
@@ -119,8 +121,11 @@ AudioFileSource::init (string pathstr, bool must_exist)
bool is_new = false;
_length = 0;
+ timeline_position = 0;
next_peak_clear_should_notify = false;
-
+ _peaks_built = false;
+ file_is_new = false;
+
if (!find (pathstr, must_exist, is_new)) {
return -1;
}
@@ -285,7 +290,8 @@ AudioFileSource::mark_for_remove ()
if (!writable()) {
return;
}
- _flags = Flag (_flags | RemoveAtDestroy);
+
+ _flags = Flag (_flags | Removable | RemoveAtDestroy);
}
void
@@ -503,7 +509,7 @@ AudioFileSource::set_search_path (string p)
}
void
-AudioFileSource::set_header_position_offset (jack_nframes_t offset)
+AudioFileSource::set_header_position_offset (nframes_t offset)
{
header_position_offset = offset;
HeaderPositionOffsetChanged ();
@@ -519,7 +525,7 @@ AudioFileSource::handle_header_position_change ()
}
void
-AudioFileSource::set_timeline_position (jack_nframes_t pos)
+AudioFileSource::set_timeline_position (nframes_t pos)
{
timeline_position = pos;
}
@@ -527,8 +533,14 @@ AudioFileSource::set_timeline_position (jack_nframes_t pos)
void
AudioFileSource::set_allow_remove_if_empty (bool yn)
{
- if (writable()) {
+ if (!writable()) {
+ return;
+ }
+
+ if (yn) {
_flags = Flag (_flags | RemovableIfEmpty);
+ } else {
+ _flags = Flag (_flags & ~RemovableIfEmpty);
}
}
@@ -576,3 +588,12 @@ AudioFileSource::is_empty (Session& s, string path)
return ret;
}
+int
+AudioFileSource::setup_peakfile ()
+{
+ if (!(_flags & NoPeakFile)) {
+ return initialize_peakfile (file_is_new, _path);
+ } else {
+ return 0;
+ }
+}
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc
index 959177d0cf..d7724f3a39 100644
--- a/libs/ardour/audioregion.cc
+++ b/libs/ardour/audioregion.cc
@@ -31,6 +31,7 @@
#include <pbd/basename.h>
#include <pbd/xml++.h>
+#include <pbd/stacktrace.h>
#include <ardour/audioregion.h>
#include <ardour/session.h>
@@ -39,6 +40,7 @@
#include <ardour/playlist.h>
#include <ardour/audiofilter.h>
#include <ardour/audiofilesource.h>
+#include <ardour/destructive_filesource.h>
#include "i18n.h"
#include <locale.h>
@@ -65,7 +67,7 @@ AudioRegionState::AudioRegionState (string why)
}
/** Basic AudioRegion constructor (one channel) */
-AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, jack_nframes_t start, jack_nframes_t length)
+AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, nframes_t start, nframes_t length)
: Region (src, start, length, PBD::basename_nosuffix(src->name()), DataType::AUDIO, 0, Region::Flag(Region::DefaultFlags|Region::External)),
_fade_in (0.0, 2.0, 1.0, false),
_fade_out (0.0, 2.0, 1.0, false),
@@ -87,7 +89,7 @@ AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, jack_nframes_t sta
}
/* Basic AudioRegion constructor (one channel) */
-AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t layer, Flag flags)
+AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, nframes_t start, nframes_t length, const string& name, layer_t layer, Flag flags)
: Region (src, start, length, name, DataType::AUDIO, layer, flags)
, _fade_in (0.0, 2.0, 1.0, false)
, _fade_out (0.0, 2.0, 1.0, false)
@@ -108,7 +110,7 @@ AudioRegion::AudioRegion (boost::shared_ptr<AudioSource> src, jack_nframes_t sta
}
/* Basic AudioRegion constructor (many channels) */
-AudioRegion::AudioRegion (SourceList& srcs, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t layer, Flag flags)
+AudioRegion::AudioRegion (SourceList& srcs, nframes_t start, nframes_t length, const string& name, layer_t layer, Flag flags)
: Region (srcs, start, length, name, DataType::AUDIO, layer, flags)
, _fade_in (0.0, 2.0, 1.0, false)
, _fade_out (0.0, 2.0, 1.0, false)
@@ -125,7 +127,7 @@ AudioRegion::AudioRegion (SourceList& srcs, jack_nframes_t start, jack_nframes_t
/** Create a new AudioRegion, that is part of an existing one */
-AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other, jack_nframes_t offset, jack_nframes_t length, const string& name, layer_t layer, Flag flags)
+AudioRegion::AudioRegion (boost::shared_ptr<const AudioRegion> other, nframes_t offset, nframes_t length, const string& name, layer_t layer, Flag flags)
: Region (other, offset, length, name, layer, flags),
_fade_in (other->_fade_in),
_fade_out (other->_fade_out),
@@ -230,6 +232,7 @@ AudioRegion::AudioRegion (SourceList& srcs, const XMLNode& node)
AudioRegion::~AudioRegion ()
{
+ notify_callbacks ();
GoingAway (); /* EMIT SIGNAL */
}
@@ -335,8 +338,8 @@ AudioRegion::set_envelope_active (bool yn)
}
}
-jack_nframes_t
-AudioRegion::read_peaks (PeakData *buf, jack_nframes_t npeaks, jack_nframes_t offset, jack_nframes_t cnt, uint32_t chan_n, double samples_per_unit) const
+ARDOUR::nframes_t
+AudioRegion::read_peaks (PeakData *buf, nframes_t npeaks, nframes_t offset, nframes_t cnt, uint32_t chan_n, double samples_per_unit) const
{
if (chan_n >= _sources.size()) {
return 0;
@@ -346,7 +349,7 @@ AudioRegion::read_peaks (PeakData *buf, jack_nframes_t npeaks, jack_nframes_t of
return 0;
} else {
if (_scale_amplitude != 1.0) {
- for (jack_nframes_t n = 0; n < npeaks; ++n) {
+ for (nframes_t n = 0; n < npeaks; ++n) {
buf[n].max *= _scale_amplitude;
buf[n].min *= _scale_amplitude;
}
@@ -355,30 +358,30 @@ AudioRegion::read_peaks (PeakData *buf, jack_nframes_t npeaks, jack_nframes_t of
}
}
-jack_nframes_t
-AudioRegion::read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, jack_nframes_t position,
- jack_nframes_t cnt,
- uint32_t chan_n, jack_nframes_t read_frames, jack_nframes_t skip_frames) const
+ARDOUR::nframes_t
+AudioRegion::read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, nframes_t position,
+ nframes_t cnt,
+ uint32_t chan_n, nframes_t read_frames, nframes_t skip_frames) const
{
return _read_at (_sources, buf, mixdown_buffer, gain_buffer, position, cnt, chan_n, read_frames, skip_frames);
}
-jack_nframes_t
-AudioRegion::master_read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, jack_nframes_t position,
- jack_nframes_t cnt, uint32_t chan_n) const
+ARDOUR::nframes_t
+AudioRegion::master_read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, nframes_t position,
+ nframes_t cnt, uint32_t chan_n) const
{
return _read_at (_master_sources, buf, mixdown_buffer, gain_buffer, position, cnt, chan_n, 0, 0);
}
-jack_nframes_t
+ARDOUR::nframes_t
AudioRegion::_read_at (const SourceList& srcs, Sample *buf, Sample *mixdown_buffer, float *gain_buffer,
- jack_nframes_t position, jack_nframes_t cnt,
- uint32_t chan_n, jack_nframes_t read_frames, jack_nframes_t skip_frames) const
+ nframes_t position, nframes_t cnt,
+ uint32_t chan_n, nframes_t read_frames, nframes_t skip_frames) const
{
- jack_nframes_t internal_offset;
- jack_nframes_t buf_offset;
- jack_nframes_t to_read;
-
+ nframes_t internal_offset;
+ nframes_t buf_offset;
+ nframes_t to_read;
+
/* precondition: caller has verified that we cover the desired section */
if (chan_n >= _sources.size()) {
@@ -397,7 +400,6 @@ AudioRegion::_read_at (const SourceList& srcs, Sample *buf, Sample *mixdown_buff
if (internal_offset >= _length) {
return 0; /* read nothing */
}
-
if ((to_read = min (cnt, _length - internal_offset)) == 0) {
return 0; /* read nothing */
@@ -427,19 +429,19 @@ AudioRegion::_read_at (const SourceList& srcs, Sample *buf, Sample *mixdown_buff
if (_flags & FadeIn) {
- jack_nframes_t fade_in_length = (jack_nframes_t) _fade_in.back()->when;
+ nframes_t fade_in_length = (nframes_t) _fade_in.back()->when;
/* see if this read is within the fade in */
if (internal_offset < fade_in_length) {
- jack_nframes_t limit;
+ nframes_t limit;
limit = min (to_read, fade_in_length - internal_offset);
_fade_in.get_vector (internal_offset, internal_offset+limit, gain_buffer, limit);
- for (jack_nframes_t n = 0; n < limit; ++n) {
+ for (nframes_t n = 0; n < limit; ++n) {
mixdown_buffer[n] *= gain_buffer[n];
}
}
@@ -449,9 +451,6 @@ AudioRegion::_read_at (const SourceList& srcs, Sample *buf, Sample *mixdown_buff
if (_flags & FadeOut) {
-
-
-
/* see if some part of this read is within the fade out */
/* ................. >| REGION
@@ -471,20 +470,20 @@ AudioRegion::_read_at (const SourceList& srcs, Sample *buf, Sample *mixdown_buff
*/
- jack_nframes_t fade_out_length = (jack_nframes_t) _fade_out.back()->when;
- jack_nframes_t fade_interval_start = max(internal_offset, _length-fade_out_length);
- jack_nframes_t fade_interval_end = min(internal_offset + to_read, _length);
+ nframes_t fade_out_length = (nframes_t) _fade_out.back()->when;
+ nframes_t fade_interval_start = max(internal_offset, _length-fade_out_length);
+ nframes_t fade_interval_end = min(internal_offset + to_read, _length);
if (fade_interval_end > fade_interval_start) {
/* (part of the) the fade out is in this buffer */
- jack_nframes_t limit = fade_interval_end - fade_interval_start;
- jack_nframes_t curve_offset = fade_interval_start - (_length-fade_out_length);
- jack_nframes_t fade_offset = fade_interval_start - internal_offset;
+ nframes_t limit = fade_interval_end - fade_interval_start;
+ nframes_t curve_offset = fade_interval_start - (_length-fade_out_length);
+ nframes_t fade_offset = fade_interval_start - internal_offset;
_fade_out.get_vector (curve_offset,curve_offset+limit, gain_buffer, limit);
- for (jack_nframes_t n = 0, m = fade_offset; n < limit; ++n, ++m) {
+ for (nframes_t n = 0, m = fade_offset; n < limit; ++n, ++m) {
mixdown_buffer[m] *= gain_buffer[n];
}
}
@@ -497,11 +496,11 @@ AudioRegion::_read_at (const SourceList& srcs, Sample *buf, Sample *mixdown_buff
_envelope.get_vector (internal_offset, internal_offset + to_read, gain_buffer, to_read);
if (_scale_amplitude != 1.0f) {
- for (jack_nframes_t n = 0; n < to_read; ++n) {
+ for (nframes_t n = 0; n < to_read; ++n) {
mixdown_buffer[n] *= gain_buffer[n] * _scale_amplitude;
}
} else {
- for (jack_nframes_t n = 0; n < to_read; ++n) {
+ for (nframes_t n = 0; n < to_read; ++n) {
mixdown_buffer[n] *= gain_buffer[n];
}
}
@@ -516,7 +515,7 @@ AudioRegion::_read_at (const SourceList& srcs, Sample *buf, Sample *mixdown_buff
buf += buf_offset;
- for (jack_nframes_t n = 0; n < to_read; ++n) {
+ for (nframes_t n = 0; n < to_read; ++n) {
buf[n] += mixdown_buffer[n];
}
}
@@ -540,7 +539,7 @@ AudioRegion::state (bool full)
for (uint32_t n=0; n < _sources.size(); ++n) {
snprintf (buf2, sizeof(buf2), "source-%d", n);
- _sources[n]->id().print (buf);
+ _sources[n]->id().print (buf, sizeof (buf));
node.add_property (buf2, buf);
}
@@ -670,17 +669,17 @@ AudioRegion::set_state (const XMLNode& node)
void
AudioRegion::set_fade_in_shape (FadeShape shape)
{
- set_fade_in (shape, (jack_nframes_t) _fade_in.back()->when);
+ set_fade_in (shape, (nframes_t) _fade_in.back()->when);
}
void
AudioRegion::set_fade_out_shape (FadeShape shape)
{
- set_fade_out (shape, (jack_nframes_t) _fade_out.back()->when);
+ set_fade_out (shape, (nframes_t) _fade_out.back()->when);
}
void
-AudioRegion::set_fade_in (FadeShape shape, jack_nframes_t len)
+AudioRegion::set_fade_in (FadeShape shape, nframes_t len)
{
_fade_in.freeze ();
_fade_in.clear ();
@@ -744,7 +743,7 @@ AudioRegion::set_fade_in (FadeShape shape, jack_nframes_t len)
}
void
-AudioRegion::set_fade_out (FadeShape shape, jack_nframes_t len)
+AudioRegion::set_fade_out (FadeShape shape, nframes_t len)
{
_fade_out.freeze ();
_fade_out.clear ();
@@ -806,7 +805,7 @@ AudioRegion::set_fade_out (FadeShape shape, jack_nframes_t len)
}
void
-AudioRegion::set_fade_in_length (jack_nframes_t len)
+AudioRegion::set_fade_in_length (nframes_t len)
{
bool changed = _fade_in.extend_to (len);
@@ -824,7 +823,7 @@ AudioRegion::set_fade_in_length (jack_nframes_t len)
}
void
-AudioRegion::set_fade_out_length (jack_nframes_t len)
+AudioRegion::set_fade_out_length (nframes_t len)
{
bool changed = _fade_out.extend_to (len);
@@ -977,8 +976,8 @@ AudioRegion::apply (AudioFilter& filter)
int
AudioRegion::exportme (Session& session, AudioExportSpecification& spec)
{
- const jack_nframes_t blocksize = 4096;
- jack_nframes_t to_read;
+ const nframes_t blocksize = 4096;
+ nframes_t to_read;
int status = -1;
spec.channels = _sources.size();
@@ -1013,7 +1012,7 @@ AudioRegion::exportme (Session& session, AudioExportSpecification& spec)
goto out;
}
- for (jack_nframes_t x = 0; x < to_read; ++x) {
+ for (nframes_t x = 0; x < to_read; ++x) {
spec.dataF[chan+(x*spec.channels)] = buf[x];
}
}
@@ -1057,11 +1056,11 @@ AudioRegion::set_scale_amplitude (gain_t g)
void
AudioRegion::normalize_to (float target_dB)
{
- const jack_nframes_t blocksize = 64 * 1024;
+ const nframes_t blocksize = 64 * 1024;
Sample buf[blocksize];
- jack_nframes_t fpos;
- jack_nframes_t fend;
- jack_nframes_t to_read;
+ nframes_t fpos;
+ nframes_t fend;
+ nframes_t to_read;
double maxamp = 0;
gain_t target = dB_to_coefficient (target_dB);
@@ -1183,7 +1182,10 @@ AudioRegion::speed_mismatch (float sr) const
void
AudioRegion::source_offset_changed ()
{
- set_position (source()->natural_position() + start(), this);
+ if (boost::dynamic_pointer_cast<DestructiveFileSource>(_sources.front())) {
+ set_start (source()->natural_position(), this);
+ set_position (source()->natural_position(), this);
+ }
}
boost::shared_ptr<AudioSource>
@@ -1197,7 +1199,7 @@ extern "C" {
int region_read_peaks_from_c (void *arg, uint32_t npeaks, uint32_t start, uint32_t cnt, intptr_t data, uint32_t n_chan, double samples_per_unit)
{
- return ((AudioRegion *) arg)->read_peaks ((PeakData *) data, (jack_nframes_t) npeaks, (jack_nframes_t) start, (jack_nframes_t) cnt, n_chan,samples_per_unit);
+ return ((AudioRegion *) arg)->read_peaks ((PeakData *) data, (nframes_t) npeaks, (nframes_t) start, (nframes_t) cnt, n_chan,samples_per_unit);
}
uint32_t region_length_from_c (void *arg)
diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc
index a8fe2a7c73..419fe9240c 100644
--- a/libs/ardour/audiosource.cc
+++ b/libs/ardour/audiosource.cc
@@ -23,6 +23,7 @@
#include <fcntl.h>
#include <poll.h>
#include <float.h>
+#include <utime.h>
#include <cerrno>
#include <ctime>
#include <cmath>
@@ -43,7 +44,7 @@ using namespace PBD;
pthread_t AudioSource::peak_thread;
bool AudioSource::have_peak_thread = false;
-vector<AudioSource*> AudioSource::pending_peak_sources;
+vector<boost::shared_ptr<AudioSource> > AudioSource::pending_peak_sources;
Glib::Mutex* AudioSource::pending_peak_sources_lock = 0;
int AudioSource::peak_request_pipe[2];
@@ -190,7 +191,7 @@ AudioSource::peak_thread_work (void* arg)
while (!pending_peak_sources.empty()) {
- AudioSource* s = pending_peak_sources.front();
+ boost::shared_ptr<AudioSource> s = pending_peak_sources.front();
pending_peak_sources.erase (pending_peak_sources.begin());
pending_peak_sources_lock->unlock ();
@@ -250,7 +251,7 @@ AudioSource::stop_peak_thread ()
}
void
-AudioSource::queue_for_peaks (AudioSource* source)
+AudioSource::queue_for_peaks (boost::shared_ptr<AudioSource> source)
{
if (have_peak_thread) {
@@ -296,6 +297,23 @@ AudioSource::peaks_ready (sigc::slot<void> the_slot, sigc::connection& conn) con
return ret;
}
+void
+AudioSource::touch_peakfile ()
+{
+ struct stat statbuf;
+
+ if (stat (peakpath.c_str(), &statbuf) != 0 || statbuf.st_size == 0) {
+ return;
+ }
+
+ struct utimbuf tbuf;
+
+ tbuf.actime = statbuf.st_atime;
+ tbuf.modtime = time ((time_t) 0);
+
+ utime (peakpath.c_str(), &tbuf);
+}
+
int
AudioSource::rename_peakfile (string newpath)
{
@@ -350,7 +368,6 @@ AudioSource::initialize_peakfile (bool newfile, string audio_path)
error << string_compose(_("AudioSource: cannot stat peakfile \"%1\""), peakpath) << endmsg;
return -1;
}
-
} else {
/* we found it in the peaks dir */
@@ -370,30 +387,30 @@ AudioSource::initialize_peakfile (bool newfile, string audio_path)
}
}
}
-
+
if (!newfile && !_peaks_built && _build_missing_peakfiles && _build_peakfiles) {
build_peaks_from_scratch ();
}
-
+
return 0;
}
-jack_nframes_t
-AudioSource::read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const
+nframes_t
+AudioSource::read (Sample *dst, nframes_t start, nframes_t cnt) const
{
Glib::Mutex::Lock lm (_lock);
return read_unlocked (dst, start, cnt);
}
-jack_nframes_t
-AudioSource::write (Sample *dst, jack_nframes_t cnt)
+nframes_t
+AudioSource::write (Sample *dst, nframes_t cnt)
{
Glib::Mutex::Lock lm (_lock);
return write_unlocked (dst, cnt);
}
int
-AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t start, jack_nframes_t cnt, double samples_per_visual_peak) const
+AudioSource::read_peaks (PeakData *peaks, nframes_t npeaks, nframes_t start, nframes_t cnt, double samples_per_visual_peak) const
{
Glib::Mutex::Lock lm (_lock);
double scale;
@@ -402,7 +419,7 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
PeakData::PeakDatum xmin;
int32_t to_read;
uint32_t nread;
- jack_nframes_t zero_fill = 0;
+ nframes_t zero_fill = 0;
int ret = -1;
PeakData* staging = 0;
Sample* raw_staging = 0;
@@ -428,8 +445,8 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
if (cnt > _length - start) {
// cerr << "too close to end @ " << _length << " given " << start << " + " << cnt << endl;
cnt = _length - start;
- jack_nframes_t old = npeaks;
- npeaks = min ((jack_nframes_t) floor (cnt / samples_per_visual_peak), npeaks);
+ nframes_t old = npeaks;
+ npeaks = min ((nframes_t) floor (cnt / samples_per_visual_peak), npeaks);
zero_fill = old - npeaks;
}
@@ -437,7 +454,7 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
if (npeaks == cnt) {
- // cerr << "RAW DATA\n";
+ cerr << "RAW DATA\n";
/* no scaling at all, just get the sample data and duplicate it for
both max and min peak values.
@@ -450,7 +467,7 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
return -1;
}
- for (jack_nframes_t i = 0; i < npeaks; ++i) {
+ for (nframes_t i = 0; i < npeaks; ++i) {
peaks[i].max = raw_staging[i];
peaks[i].min = raw_staging[i];
}
@@ -499,7 +516,7 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
}
- jack_nframes_t tnp;
+ nframes_t tnp;
if (scale < 1.0) {
@@ -521,11 +538,11 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
/* compute the rounded up frame position */
- jack_nframes_t current_frame = start;
- jack_nframes_t current_stored_peak = (jack_nframes_t) ceil (current_frame / (double) frames_per_peak);
+ nframes_t current_frame = start;
+ nframes_t current_stored_peak = (nframes_t) ceil (current_frame / (double) frames_per_peak);
uint32_t next_visual_peak = (uint32_t) ceil (current_frame / samples_per_visual_peak);
double next_visual_peak_frame = next_visual_peak * samples_per_visual_peak;
- uint32_t stored_peak_before_next_visual_peak = (jack_nframes_t) next_visual_peak_frame / frames_per_peak;
+ uint32_t stored_peak_before_next_visual_peak = (nframes_t) next_visual_peak_frame / frames_per_peak;
uint32_t nvisual_peaks = 0;
uint32_t stored_peaks_read = 0;
uint32_t i = 0;
@@ -546,7 +563,7 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
if (i == stored_peaks_read) {
uint32_t start_byte = current_stored_peak * sizeof(PeakData);
- tnp = min ((_length/frames_per_peak - current_stored_peak), (jack_nframes_t) expected_peaks);
+ tnp = min ((_length/frames_per_peak - current_stored_peak), (nframes_t) expected_peaks);
to_read = min (chunksize, tnp);
off_t fend = lseek (peakfile, 0, SEEK_END);
@@ -615,14 +632,14 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
data on the fly.
*/
- jack_nframes_t frames_read = 0;
- jack_nframes_t current_frame = start;
- jack_nframes_t i = 0;
- jack_nframes_t nvisual_peaks = 0;
- jack_nframes_t chunksize = (jack_nframes_t) min (cnt, (jack_nframes_t) 4096);
+ nframes_t frames_read = 0;
+ nframes_t current_frame = start;
+ nframes_t i = 0;
+ nframes_t nvisual_peaks = 0;
+ nframes_t chunksize = (nframes_t) min (cnt, (nframes_t) 4096);
raw_staging = new Sample[chunksize];
- jack_nframes_t frame_pos = start;
+ nframes_t frame_pos = start;
double pixel_pos = floor (frame_pos / samples_per_visual_peak);
double next_pixel_pos = ceil (frame_pos / samples_per_visual_peak);
double pixels_per_frame = 1.0 / samples_per_visual_peak;
@@ -635,7 +652,7 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
if (i == frames_read) {
to_read = min (chunksize, (_length - current_frame));
-
+
if ((frames_read = read_unlocked (raw_staging, current_frame, to_read)) == 0) {
error << string_compose(_("AudioSource[%1]: peak read - cannot read %2 samples at offset %3")
, _name, to_read, current_frame)
@@ -745,15 +762,15 @@ AudioSource::build_peaks ()
}
int
-AudioSource::do_build_peak (jack_nframes_t first_frame, jack_nframes_t cnt)
+AudioSource::do_build_peak (nframes_t first_frame, nframes_t cnt)
{
- jack_nframes_t current_frame;
+ nframes_t current_frame;
Sample buf[frames_per_peak];
Sample xmin, xmax;
uint32_t peaki;
PeakData* peakbuf;
- jack_nframes_t frames_read;
- jack_nframes_t frames_to_read;
+ nframes_t frames_read;
+ nframes_t frames_to_read;
off_t first_peak_byte;
int peakfile = -1;
int ret = -1;
@@ -791,7 +808,7 @@ AudioSource::do_build_peak (jack_nframes_t first_frame, jack_nframes_t cnt)
xmin = buf[0];
xmax = buf[0];
- for (jack_nframes_t n = 1; n < frames_read; ++n) {
+ for (nframes_t n = 1; n < frames_read; ++n) {
xmax = max (xmax, buf[n]);
xmin = min (xmin, buf[n]);
@@ -830,7 +847,7 @@ AudioSource::build_peaks_from_scratch ()
next_peak_clear_should_notify = true;
pending_peak_builds.push_back (new PeakBuildRecord (0, _length));
- queue_for_peaks (this);
+ queue_for_peaks (shared_from_this());
}
bool
@@ -849,7 +866,7 @@ AudioSource::file_changed (string path)
}
}
-jack_nframes_t
+nframes_t
AudioSource::available_peaks (double zoom_factor) const
{
int peakfile;
diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc
index 29ae3b4d2b..3887e5ecc7 100644
--- a/libs/ardour/auditioner.cc
+++ b/libs/ardour/auditioner.cc
@@ -150,10 +150,10 @@ Auditioner::audition_region (boost::shared_ptr<Region> region)
}
int
-Auditioner::play_audition (jack_nframes_t nframes)
+Auditioner::play_audition (nframes_t nframes)
{
bool need_butler;
- jack_nframes_t this_nframes;
+ nframes_t this_nframes;
int ret;
if (g_atomic_int_get (&_active) == 0) {
diff --git a/libs/ardour/automation_event.cc b/libs/ardour/automation_event.cc
index afdeecbbfe..f286b11607 100644
--- a/libs/ardour/automation_event.cc
+++ b/libs/ardour/automation_event.cc
@@ -1217,7 +1217,7 @@ AutomationList::store_state (XMLNode& node) const
XMLNode *pointnode = new XMLNode ("point");
- snprintf (buf, sizeof (buf), "%" PRIu32, (jack_nframes_t) floor ((*i)->when));
+ snprintf (buf, sizeof (buf), "%" PRIu32, (nframes_t) floor ((*i)->when));
pointnode->add_property ("x", buf);
snprintf (buf, sizeof (buf), "%.12g", (*i)->value);
pointnode->add_property ("y", buf);
@@ -1232,7 +1232,7 @@ AutomationList::load_state (const XMLNode& node)
const XMLNodeList& elist = node.children();
XMLNodeConstIterator i;
XMLProperty* prop;
- jack_nframes_t x;
+ nframes_t x;
double y;
clear ();
diff --git a/libs/ardour/configuration.cc b/libs/ardour/configuration.cc
index 84c3e3a834..e84e92fa26 100644
--- a/libs/ardour/configuration.cc
+++ b/libs/ardour/configuration.cc
@@ -56,7 +56,7 @@ Configuration::Configuration ()
#undef CONFIG_VARIABLE
#undef CONFIG_VARIABLE_SPECIAL
- user_configuration (false)
+ current_owner (ConfigVariableBase::Default)
{
_control_protocol_state = 0;
}
@@ -65,6 +65,12 @@ Configuration::~Configuration ()
{
}
+void
+Configuration::set_current_owner (ConfigVariableBase::Owner owner)
+{
+ current_owner = owner;
+}
+
int
Configuration::load_state ()
{
@@ -85,15 +91,14 @@ Configuration::load_state ()
return -1;
}
+ current_owner = ConfigVariableBase::System;
+
if (set_state (*tree.root())) {
error << string_compose(_("Ardour: system configuration file \"%1\" not loaded successfully."), rcfile) << endmsg;
return -1;
}
}
- /* from this point on, all configuration changes are user driven */
-
- user_configuration = true;
/* now load configuration file for user */
@@ -110,6 +115,8 @@ Configuration::load_state ()
return -1;
}
+ current_owner = ConfigVariableBase::Config;
+
if (set_state (*tree.root())) {
error << string_compose(_("Ardour: user configuration file \"%1\" not loaded successfully."), rcfile) << endmsg;
return -1;
@@ -125,15 +132,11 @@ Configuration::save_state()
XMLTree tree;
string rcfile;
- /* Note: this only writes the per-user file, and therefore
- only saves variables marked as user-set or modified
- */
-
rcfile = get_user_ardour_path ();
rcfile += "ardour.rc";
if (rcfile.length()) {
- tree.set_root (&state (true));
+ tree.set_root (&get_state());
if (!tree.write (rcfile.c_str())){
error << string_compose (_("Config file %1 not saved"), rcfile) << endmsg;
return -1;
@@ -143,45 +146,56 @@ Configuration::save_state()
return 0;
}
-XMLNode&
-Configuration::get_state ()
+bool
+Configuration::save_config_options_predicate (ConfigVariableBase::Owner owner)
{
- return state (false);
+ /* only save things that were in the config file to start with */
+ return owner & ConfigVariableBase::Config;
}
XMLNode&
-Configuration::state (bool user_only)
+Configuration::get_state ()
{
- XMLNode* root = new XMLNode("Ardour");
+ XMLNode* root;
LocaleGuard lg (X_("POSIX"));
+ root = new XMLNode("Ardour");
typedef map<string, MidiPortDescriptor*>::const_iterator CI;
for(CI m = midi_ports.begin(); m != midi_ports.end(); ++m){
root->add_child_nocopy(m->second->get_state());
}
-
- XMLNode* node = new XMLNode("Config");
+ root->add_child_nocopy (get_variables (sigc::mem_fun (*this, &Configuration::save_config_options_predicate)));
+
+ if (_extra_xml) {
+ root->add_child_copy (*_extra_xml);
+ }
+
+ root->add_child_nocopy (ControlProtocolManager::instance().get_state());
+ root->add_child_nocopy (Library->get_state());
+
+ return *root;
+}
+
+XMLNode&
+Configuration::get_variables (sigc::slot<bool,ConfigVariableBase::Owner> predicate)
+{
+ XMLNode* node;
+ LocaleGuard lg (X_("POSIX"));
+
+ node = new XMLNode("Config");
+
#undef CONFIG_VARIABLE
#undef CONFIG_VARIABLE_SPECIAL
#define CONFIG_VARIABLE(type,var,name,value) \
- if (!user_only || var.is_user()) var.add_to_node (*node);
+ if (predicate (var.owner())) { var.add_to_node (*node); }
#define CONFIG_VARIABLE_SPECIAL(type,var,name,value,mutator) \
- if (!user_only || var.is_user()) var.add_to_node (*node);
+ if (predicate (var.owner())) { var.add_to_node (*node); }
#include "ardour/configuration_vars.h"
#undef CONFIG_VARIABLE
#undef CONFIG_VARIABLE_SPECIAL
-
- root->add_child_nocopy (*node);
-
- if (_extra_xml) {
- root->add_child_copy (*_extra_xml);
- }
-
- root->add_child_nocopy (ControlProtocolManager::instance().get_state());
- root->add_child_nocopy (Library->get_state());
-
- return *root;
+
+ return *node;
}
int
@@ -213,18 +227,8 @@ Configuration::set_state (const XMLNode& root)
}
} else if (node->name() == "Config") {
-
-#undef CONFIG_VARIABLE
-#undef CONFIG_VARIABLE_SPECIAL
-#define CONFIG_VARIABLE(type,var,name,value) \
- var.set_from_node (*node); \
- var.set_is_user (user_configuration);
-#define CONFIG_VARIABLE_SPECIAL(type,var,name,value,mutator) \
- var.set_from_node (*node); \
- var.set_is_user (user_configuration);
-#include "ardour/configuration_vars.h"
-#undef CONFIG_VARIABLE
-#undef CONFIG_VARIABLE_SPECIAL
+
+ set_variables (*node, ConfigVariableBase::Config);
} else if (node->name() == "extra") {
_extra_xml = new XMLNode (*node);
@@ -241,6 +245,25 @@ Configuration::set_state (const XMLNode& root)
return 0;
}
+void
+Configuration::set_variables (const XMLNode& node, ConfigVariableBase::Owner owner)
+{
+#undef CONFIG_VARIABLE
+#undef CONFIG_VARIABLE_SPECIAL
+#define CONFIG_VARIABLE(type,var,name,value) \
+ if (var.set_from_node (node, owner)) { \
+ ParameterChanged (name); \
+ }
+#define CONFIG_VARIABLE_SPECIAL(type,var,name,value,mutator) \
+ if (var.set_from_node (node, owner)) { \
+ ParameterChanged (name); \
+ }
+#include "ardour/configuration_vars.h"
+#undef CONFIG_VARIABLE
+#undef CONFIG_VARIABLE_SPECIAL
+
+}
+
Configuration::MidiPortDescriptor::MidiPortDescriptor (const XMLNode& node)
{
const XMLProperty *prop;
@@ -287,3 +310,14 @@ Configuration::MidiPortDescriptor::get_state()
return *root;
}
+void
+Configuration::map_parameters (sigc::slot<void,const char*> theSlot)
+{
+#undef CONFIG_VARIABLE
+#undef CONFIG_VARIABLE_SPECIAL
+#define CONFIG_VARIABLE(type,var,name,value) theSlot (name);
+#define CONFIG_VARIABLE_SPECIAL(type,var,name,value,mutator) theSlot (name);
+#include "ardour/configuration_vars.h"
+#undef CONFIG_VARIABLE
+#undef CONFIG_VARIABLE_SPECIAL
+}
diff --git a/libs/ardour/control_protocol_manager.cc b/libs/ardour/control_protocol_manager.cc
index 5c02936ba0..1ff6c28ef3 100644
--- a/libs/ardour/control_protocol_manager.cc
+++ b/libs/ardour/control_protocol_manager.cc
@@ -50,7 +50,7 @@ ControlProtocolManager::set_session (Session& s)
instantiate (**i);
(*i)->requested = false;
- if ((*i)->state) {
+ if ((*i)->protocol && (*i)->state) {
(*i)->protocol->set_state (*(*i)->state);
}
}
@@ -93,6 +93,10 @@ ControlProtocolManager::instantiate (ControlProtocolInfo& cpi)
Glib::Mutex::Lock lm (protocols_lock);
control_protocols.push_back (cpi.protocol);
+ if (cpi.state) {
+ cpi.protocol->set_state (*cpi.state);
+ }
+
return cpi.protocol;
}
@@ -154,7 +158,7 @@ ControlProtocolManager::discover_control_protocols (string path)
vector<string *> *found;
PathScanner scanner;
- cerr << "looking for control protocols in " << path << endl;
+ info << string_compose (_("looking for control protocols in %1"), path) << endmsg;
found = scanner (path, protocol_filter, 0, false, true);
@@ -185,6 +189,7 @@ ControlProtocolManager::control_protocol_discover (string path)
cpi->protocol = 0;
cpi->requested = false;
cpi->mandatory = descriptor->mandatory;
+ cpi->supports_feedback = descriptor->supports_feedback;
cpi->state = 0;
control_protocol_info.push_back (cpi);
@@ -261,11 +266,20 @@ ControlProtocolManager::set_state (const XMLNode& node)
for (citer = clist.begin(); citer != clist.end(); ++citer) {
if ((*citer)->name() == X_("Protocol")) {
+
prop = (*citer)->property (X_("active"));
+
if (prop && prop->value() == X_("yes")) {
if ((prop = (*citer)->property (X_("name"))) != 0) {
ControlProtocolInfo* cpi = cpi_by_name (prop->value());
if (cpi) {
+
+ if (!(*citer)->children().empty()) {
+ cpi->state = (*citer)->children().front ();
+ } else {
+ cpi->state = 0;
+ }
+
if (_session) {
instantiate (*cpi);
} else {
@@ -294,3 +308,34 @@ ControlProtocolManager::get_state (void)
return *root;
}
+
+void
+ControlProtocolManager::set_protocol_states (const XMLNode& node)
+{
+ XMLNodeList nlist;
+ XMLNodeConstIterator niter;
+ XMLProperty* prop;
+
+ nlist = node.children();
+
+ for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+
+ XMLNode* child = (*niter);
+
+ if ((prop = child->property ("name")) == 0) {
+ error << _("control protocol XML node has no name property. Ignored.") << endmsg;
+ continue;
+ }
+
+ ControlProtocolInfo* cpi = cpi_by_name (prop->value());
+
+ if (!cpi) {
+ warning << string_compose (_("control protocol \"%1\" is not known. Ignored"), prop->value()) << endmsg;
+ continue;
+ }
+
+ /* copy the node so that ownership is clear */
+
+ cpi->state = new XMLNode (*child);
+ }
+}
diff --git a/libs/ardour/coreaudiosource.cc b/libs/ardour/coreaudiosource.cc
index 049b5aabbe..c8cbb7a40d 100644
--- a/libs/ardour/coreaudiosource.cc
+++ b/libs/ardour/coreaudiosource.cc
@@ -86,10 +86,7 @@ CoreAudioSource::init (const string& idstr)
}
if (_build_peakfiles) {
- if (initialize_peakfile (false, _path)) {
- error << string_compose("CoreAudioSource: initialize peakfile failed (%1)", name()) << endmsg;
- throw failed_constructor ();
- }
+ _need_peakfile = true;
}
}
@@ -105,8 +102,8 @@ CoreAudioSource::~CoreAudioSource ()
cerr << "deletion done" << endl;
}
-jack_nframes_t
-CoreAudioSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const
+nframes_t
+CoreAudioSource::read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const
{
try {
af.Seek (start);
@@ -188,7 +185,7 @@ CoreAudioSource::sample_rate() const
}
int
-CoreAudioSource::update_header (jack_nframes_t when, struct tm&, time_t)
+CoreAudioSource::update_header (nframes_t when, struct tm&, time_t)
{
return 0;
}
diff --git a/libs/ardour/crossfade.cc b/libs/ardour/crossfade.cc
index fcd2158fd8..32a9e2b533 100644
--- a/libs/ardour/crossfade.cc
+++ b/libs/ardour/crossfade.cc
@@ -35,7 +35,7 @@ using namespace std;
using namespace ARDOUR;
using namespace PBD;
-jack_nframes_t Crossfade::_short_xfade_length = 0;
+nframes_t Crossfade::_short_xfade_length = 0;
Change Crossfade::ActiveChanged = new_change();
/* XXX if and when we ever implement parallel processing of the process()
@@ -46,7 +46,7 @@ Sample* Crossfade::crossfade_buffer_out = 0;
Sample* Crossfade::crossfade_buffer_in = 0;
void
-Crossfade::set_buffer_size (jack_nframes_t sz)
+Crossfade::set_buffer_size (nframes_t sz)
{
if (crossfade_buffer_out) {
delete [] crossfade_buffer_out;
@@ -71,8 +71,8 @@ Crossfade::operator== (const Crossfade& other)
}
Crossfade::Crossfade (boost::shared_ptr<AudioRegion> in, boost::shared_ptr<AudioRegion> out,
- jack_nframes_t length,
- jack_nframes_t position,
+ nframes_t length,
+ nframes_t position,
AnchorPoint ap)
: _fade_in (0.0, 2.0, 1.0), // linear (gain coefficient) => -inf..+6dB
_fade_out (0.0, 2.0, 1.0) // linear (gain coefficient) => -inf..+6dB
@@ -240,7 +240,7 @@ Crossfade::compute (boost::shared_ptr<AudioRegion> a, boost::shared_ptr<AudioReg
{
boost::shared_ptr<AudioRegion> top;
boost::shared_ptr<AudioRegion> bottom;
- jack_nframes_t short_xfade_length;
+ nframes_t short_xfade_length;
short_xfade_length = _short_xfade_length;
@@ -400,13 +400,13 @@ Crossfade::compute (boost::shared_ptr<AudioRegion> a, boost::shared_ptr<AudioReg
return 0;
}
-jack_nframes_t
+nframes_t
Crossfade::read_at (Sample *buf, Sample *mixdown_buffer,
- float *gain_buffer, jack_nframes_t start, jack_nframes_t cnt, uint32_t chan_n,
- jack_nframes_t read_frames, jack_nframes_t skip_frames)
+ float *gain_buffer, nframes_t start, nframes_t cnt, uint32_t chan_n,
+ nframes_t read_frames, nframes_t skip_frames)
{
- jack_nframes_t offset;
- jack_nframes_t to_write;
+ nframes_t offset;
+ nframes_t to_write;
if (!_active) {
return 0;
@@ -453,7 +453,7 @@ Crossfade::read_at (Sample *buf, Sample *mixdown_buffer,
position and length, and so we know precisely how much data they could return.
*/
- for (jack_nframes_t n = 0; n < to_write; ++n) {
+ for (nframes_t n = 0; n < to_write; ++n) {
buf[n] = (crossfade_buffer_out[n] * fov[n]) + (crossfade_buffer_in[n] * fiv[n]);
}
@@ -464,9 +464,9 @@ Crossfade::read_at (Sample *buf, Sample *mixdown_buffer,
}
OverlapType
-Crossfade::coverage (jack_nframes_t start, jack_nframes_t end) const
+Crossfade::coverage (nframes_t start, nframes_t end) const
{
- jack_nframes_t my_end = _position + _length;
+ nframes_t my_end = _position + _length;
if ((start >= _position) && (end <= my_end)) {
return OverlapInternal;
@@ -534,7 +534,7 @@ Crossfade::refresh ()
bool
Crossfade::update (bool force)
{
- jack_nframes_t newlen;
+ nframes_t newlen;
bool save = false;
if (_follow_overlap) {
@@ -679,9 +679,9 @@ Crossfade::get_state ()
char buf[64];
LocaleGuard lg (X_("POSIX"));
- _out->id().print (buf);
+ _out->id().print (buf, sizeof (buf));
node->add_property ("out", buf);
- _in->id().print (buf);
+ _in->id().print (buf, sizeof (buf));
node->add_property ("in", buf);
node->add_property ("active", (_active ? "yes" : "no"));
node->add_property ("follow-overlap", (_follow_overlap ? "yes" : "no"));
@@ -700,7 +700,7 @@ Crossfade::get_state ()
pnode = new XMLNode ("point");
- snprintf (buf, sizeof (buf), "%" PRIu32, (jack_nframes_t) floor ((*ii)->when));
+ snprintf (buf, sizeof (buf), "%" PRIu32, (nframes_t) floor ((*ii)->when));
pnode->add_property ("x", buf);
snprintf (buf, sizeof (buf), "%.12g", (*ii)->value);
pnode->add_property ("y", buf);
@@ -714,7 +714,7 @@ Crossfade::get_state ()
pnode = new XMLNode ("point");
- snprintf (buf, sizeof (buf), "%" PRIu32, (jack_nframes_t) floor ((*ii)->when));
+ snprintf (buf, sizeof (buf), "%" PRIu32, (nframes_t) floor ((*ii)->when));
pnode->add_property ("x", buf);
snprintf (buf, sizeof (buf), "%.12g", (*ii)->value);
pnode->add_property ("y", buf);
@@ -796,7 +796,7 @@ Crossfade::set_state (const XMLNode& node)
for (i = children.begin(); i != children.end(); ++i) {
if ((*i)->name() == "point") {
- jack_nframes_t x;
+ nframes_t x;
float y;
prop = (*i)->property ("x");
@@ -817,7 +817,7 @@ Crossfade::set_state (const XMLNode& node)
for (i = children.begin(); i != children.end(); ++i) {
if ((*i)->name() == "point") {
- jack_nframes_t x;
+ nframes_t x;
float y;
XMLProperty* prop;
@@ -856,10 +856,10 @@ Crossfade::set_follow_overlap (bool yn)
}
}
-jack_nframes_t
-Crossfade::set_length (jack_nframes_t len)
+nframes_t
+Crossfade::set_length (nframes_t len)
{
- jack_nframes_t limit;
+ nframes_t limit;
switch (_anchor_point) {
case StartOfIn:
@@ -894,7 +894,7 @@ Crossfade::set_length (jack_nframes_t len)
return len;
}
-jack_nframes_t
+nframes_t
Crossfade::overlap_length () const
{
if (_fixed) {
@@ -904,7 +904,7 @@ Crossfade::overlap_length () const
}
void
-Crossfade::set_short_xfade_length (jack_nframes_t n)
+Crossfade::set_short_xfade_length (nframes_t n)
{
_short_xfade_length = n;
}
diff --git a/libs/ardour/default_click.cc b/libs/ardour/default_click.cc
index d692af83ec..b4067a2051 100644
--- a/libs/ardour/default_click.cc
+++ b/libs/ardour/default_click.cc
@@ -556,7 +556,7 @@ const Sample Session::default_click_emphasis[] = {
0, 0,
};
-const jack_nframes_t Session::default_click_emphasis_length = sizeof (default_click_emphasis) / sizeof (default_click_emphasis[0]);
+const nframes_t Session::default_click_emphasis_length = sizeof (default_click_emphasis) / sizeof (default_click_emphasis[0]);
const Sample Session::default_click[] = {
0, -0.014312744, -0.03338623, 0.019165039, 0.042541504,
@@ -1172,4 +1172,4 @@ const Sample Session::default_click[] = {
0, 0, 0, 0, 0, 0, 0, 0,
};
-const jack_nframes_t Session::default_click_length = sizeof (default_click) / sizeof (default_click[0]);
+const nframes_t Session::default_click_length = sizeof (default_click) / sizeof (default_click[0]);
diff --git a/libs/ardour/destructive_filesource.cc b/libs/ardour/destructive_filesource.cc
index 1e57d88d70..e160ffd608 100644
--- a/libs/ardour/destructive_filesource.cc
+++ b/libs/ardour/destructive_filesource.cc
@@ -66,9 +66,9 @@ using namespace PBD;
gain_t* DestructiveFileSource::out_coefficient = 0;
gain_t* DestructiveFileSource::in_coefficient = 0;
-jack_nframes_t DestructiveFileSource::xfade_frames = 64;
+nframes_t DestructiveFileSource::xfade_frames = 64;
-DestructiveFileSource::DestructiveFileSource (Session& s, string path, SampleFormat samp_format, HeaderFormat hdr_format, jack_nframes_t rate, Flag flags)
+DestructiveFileSource::DestructiveFileSource (Session& s, string path, SampleFormat samp_format, HeaderFormat hdr_format, nframes_t rate, Flag flags)
: SndFileSource (s, path, samp_format, hdr_format, rate, flags)
{
init ();
@@ -106,13 +106,13 @@ DestructiveFileSource::~DestructiveFileSource()
}
void
-DestructiveFileSource::setup_standard_crossfades (jack_nframes_t rate)
+DestructiveFileSource::setup_standard_crossfades (nframes_t rate)
{
/* This static method is assumed to have been called by the Session
before any DFS's are created.
*/
- xfade_frames = (jack_nframes_t) floor ((Config->get_destructive_xfade_msecs () / 1000.0) * rate);
+ xfade_frames = (nframes_t) floor ((Config->get_destructive_xfade_msecs () / 1000.0) * rate);
if (out_coefficient) {
delete [] out_coefficient;
@@ -129,7 +129,7 @@ DestructiveFileSource::setup_standard_crossfades (jack_nframes_t rate)
}
void
-DestructiveFileSource::mark_capture_start (jack_nframes_t pos)
+DestructiveFileSource::mark_capture_start (nframes_t pos)
{
if (pos < timeline_position) {
_capture_start = false;
@@ -152,15 +152,15 @@ DestructiveFileSource::clear_capture_marks ()
_capture_end = false;
}
-jack_nframes_t
-DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in)
+nframes_t
+DestructiveFileSource::crossfade (Sample* data, nframes_t cnt, int fade_in)
{
- jack_nframes_t xfade = min (xfade_frames, cnt);
- jack_nframes_t nofade = cnt - xfade;
+ nframes_t xfade = min (xfade_frames, cnt);
+ nframes_t nofade = cnt - xfade;
Sample* fade_data = 0;
- jack_nframes_t fade_position = 0; // in frames
+ nframes_t fade_position = 0; // in frames
ssize_t retval;
- jack_nframes_t file_cnt;
+ nframes_t file_cnt;
if (fade_in) {
fade_position = file_pos;
@@ -190,6 +190,7 @@ DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in)
}
if (file_cnt) {
+
if ((retval = read_unlocked (xfade_buf, fade_position, file_cnt)) != (ssize_t) file_cnt) {
if (retval >= 0 && errno == EAGAIN) {
/* XXX - can we really trust that errno is meaningful here? yes POSIX, i'm talking to you.
@@ -203,12 +204,12 @@ DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in)
}
if (file_cnt != xfade) {
- jack_nframes_t delta = xfade - file_cnt;
+ nframes_t delta = xfade - file_cnt;
memset (xfade_buf+file_cnt, 0, sizeof (Sample) * delta);
}
if (nofade && !fade_in) {
- if (write_float (data, file_pos - timeline_position, nofade) != nofade) {
+ if (write_float (data, file_pos, nofade) != nofade) {
error << string_compose(_("DestructiveFileSource: \"%1\" bad write (%2)"), _path, strerror (errno)) << endmsg;
return 0;
}
@@ -216,7 +217,7 @@ DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in)
if (xfade == xfade_frames) {
- jack_nframes_t n;
+ nframes_t n;
/* use the standard xfade curve */
@@ -247,20 +248,20 @@ DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in)
compute_equal_power_fades (xfade, in, out);
- for (jack_nframes_t n = 0; n < xfade; ++n) {
+ for (nframes_t n = 0; n < xfade; ++n) {
xfade_buf[n] = (xfade_buf[n] * out[n]) + (fade_data[n] * in[n]);
}
}
if (xfade) {
- if (write_float (xfade_buf, fade_position - timeline_position, xfade) != xfade) {
+ if (write_float (xfade_buf, fade_position, xfade) != xfade) {
error << string_compose(_("DestructiveFileSource: \"%1\" bad write (%2)"), _path, strerror (errno)) << endmsg;
return 0;
}
}
if (fade_in && nofade) {
- if (write_float (data + xfade, file_pos + xfade - timeline_position, nofade) != nofade) {
+ if (write_float (data + xfade, file_pos + xfade, nofade) != nofade) {
error << string_compose(_("DestructiveFileSource: \"%1\" bad write (%2)"), _path, strerror (errno)) << endmsg;
return 0;
}
@@ -269,10 +270,10 @@ DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in)
return cnt;
}
-jack_nframes_t
-DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt)
+nframes_t
+DestructiveFileSource::write_unlocked (Sample* data, nframes_t cnt)
{
- jack_nframes_t old_file_pos;
+ nframes_t old_file_pos;
if (!writable()) {
return 0;
@@ -291,8 +292,8 @@ DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt)
file_pos = capture_start_frame;
// split cnt in half
- jack_nframes_t subcnt = cnt / 2;
- jack_nframes_t ofilepos = file_pos;
+ nframes_t subcnt = cnt / 2;
+ nframes_t ofilepos = file_pos;
// fade in
if (crossfade (data, subcnt, 1) != subcnt) {
@@ -320,8 +321,8 @@ DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt)
_capture_end = false;
/* move to the correct location place */
- file_pos = capture_start_frame;
-
+ file_pos = capture_start_frame - timeline_position;
+
if (crossfade (data, cnt, 1) != cnt) {
return 0;
}
@@ -343,7 +344,8 @@ DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt)
/* in the middle of recording */
- if (write_float (data, file_pos - timeline_position, cnt) != cnt) {
+
+ if (write_float (data, file_pos, cnt) != cnt) {
return 0;
}
}
@@ -374,13 +376,13 @@ DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt)
}
if (_build_peakfiles) {
- queue_for_peaks (this);
+ queue_for_peaks (shared_from_this ());
}
return cnt;
}
-jack_nframes_t
+nframes_t
DestructiveFileSource::last_capture_start_frame () const
{
return capture_start_frame;
@@ -407,7 +409,7 @@ DestructiveFileSource::handle_header_position_change ()
}
void
-DestructiveFileSource::set_timeline_position (jack_nframes_t pos)
+DestructiveFileSource::set_timeline_position (nframes_t pos)
{
//destructive track timeline postion does not change except at instantion or when header_position_offset (session start) changes
}
diff --git a/libs/ardour/diskstream.cc b/libs/ardour/diskstream.cc
index a5c4d769b1..da9c5c3588 100644
--- a/libs/ardour/diskstream.cc
+++ b/libs/ardour/diskstream.cc
@@ -63,9 +63,8 @@ using namespace PBD;
* default from configuration_vars.h). 0 is not a good value for
* allocating buffer sizes..
*/
-jack_nframes_t Diskstream::disk_io_chunk_frames = 1024 * 256;
+ARDOUR::nframes_t Diskstream::disk_io_chunk_frames = 1024 * 256;
-sigc::signal<void,list<boost::shared_ptr<Source> >*> Diskstream::DeleteSources;
sigc::signal<void> Diskstream::DiskOverrun;
sigc::signal<void> Diskstream::DiskUnderrun;
@@ -166,7 +165,7 @@ Diskstream::non_realtime_set_speed ()
if (_seek_required) {
if (speed() != 1.0f || speed() != -1.0f) {
- seek ((jack_nframes_t) (_session.transport_frame() * (double) speed()), true);
+ seek ((nframes_t) (_session.transport_frame() * (double) speed()), true);
}
else {
seek (_session.transport_frame(), true);
@@ -189,7 +188,7 @@ Diskstream::realtime_set_speed (double sp, bool global)
if (new_speed != _actual_speed) {
- jack_nframes_t required_wrap_size = (jack_nframes_t) floor (_session.get_block_size() *
+ nframes_t required_wrap_size = (nframes_t) floor (_session.get_block_size() *
fabs (new_speed)) + 1;
if (required_wrap_size > wrap_buffer_size) {
@@ -264,7 +263,7 @@ Diskstream::set_loop (Location *location)
return 0;
}
-jack_nframes_t
+ARDOUR::nframes_t
Diskstream::get_capture_start_frame (uint32_t n)
{
Glib::Mutex::Lock lm (capture_info_lock);
@@ -277,7 +276,7 @@ Diskstream::get_capture_start_frame (uint32_t n)
}
}
-jack_nframes_t
+ARDOUR::nframes_t
Diskstream::get_captured_frames (uint32_t n)
{
Glib::Mutex::Lock lm (capture_info_lock);
@@ -291,7 +290,7 @@ Diskstream::get_captured_frames (uint32_t n)
}
void
-Diskstream::set_roll_delay (jack_nframes_t nframes)
+Diskstream::set_roll_delay (ARDOUR::nframes_t nframes)
{
_roll_delay = nframes;
}
diff --git a/libs/ardour/gain.cc b/libs/ardour/gain.cc
index d6fd464208..0b77bea279 100644
--- a/libs/ardour/gain.cc
+++ b/libs/ardour/gain.cc
@@ -42,21 +42,21 @@ Gain::operator= (const Gain& other)
}
void
-Gain::fill_linear_volume_fade_in (Gain& gain, jack_nframes_t frames)
+Gain::fill_linear_volume_fade_in (Gain& gain, nframes_t frames)
{
}
void
-Gain::fill_linear_volume_fade_out (Gain& gain, jack_nframes_t frames)
+Gain::fill_linear_volume_fade_out (Gain& gain, nframes_t frames)
{
}
void
-Gain::fill_linear_fade_in (Gain& gain, jack_nframes_t frames)
+Gain::fill_linear_fade_in (Gain& gain, nframes_t frames)
{
}
void
-Gain::fill_linear_fade_out (Gain& gain, jack_nframes_t frames)
+Gain::fill_linear_fade_out (Gain& gain, nframes_t frames)
{
}
diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc
index cc92529d88..9b5bea9d3a 100644
--- a/libs/ardour/globals.cc
+++ b/libs/ardour/globals.cc
@@ -14,8 +14,6 @@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- $Id$
*/
#include <cstdio> // Needed so that libraptor (included in lrdf) won't complain
@@ -361,6 +359,12 @@ ARDOUR::new_change ()
}
string
+ARDOUR::get_ardour_revision ()
+{
+ return "$Rev$";
+}
+
+string
ARDOUR::get_user_ardour_path ()
{
string path;
@@ -497,8 +501,8 @@ ARDOUR::LocaleGuard::~LocaleGuard ()
}
ARDOUR::OverlapType
-ARDOUR::coverage (jack_nframes_t sa, jack_nframes_t ea,
- jack_nframes_t sb, jack_nframes_t eb)
+ARDOUR::coverage (nframes_t sa, nframes_t ea,
+ nframes_t sb, nframes_t eb)
{
/* OverlapType returned reflects how the second (B)
range overlaps the first (A).
@@ -577,16 +581,23 @@ ARDOUR::coverage (jack_nframes_t sa, jack_nframes_t ea,
/* not sure where to put these */
-std::istream& operator>>(std::istream& o, HeaderFormat& hf) {
+template<class T>
+std::istream& int_to_type (std::istream& o, T& hf) {
int val;
o >> val;
- hf = (HeaderFormat) val;
+ hf = (T) val;
return o;
}
-std::istream& operator>>(std::istream& o, SampleFormat& sf) {
- int val;
- o >> val;
- sf = (SampleFormat) val;
- return o;
-}
+std::istream& operator>>(std::istream& o, HeaderFormat& var) { return int_to_type<HeaderFormat> (o, var); }
+std::istream& operator>>(std::istream& o, SampleFormat& var) { return int_to_type<SampleFormat> (o, var); }
+std::istream& operator>>(std::istream& o, AutoConnectOption& var) { return int_to_type<AutoConnectOption> (o, var); }
+std::istream& operator>>(std::istream& o, MonitorModel& var) { return int_to_type<MonitorModel> (o, var); }
+std::istream& operator>>(std::istream& o, EditMode& var) { return int_to_type<EditMode> (o, var); }
+std::istream& operator>>(std::istream& o, SoloModel& var) { return int_to_type<SoloModel> (o, var); }
+std::istream& operator>>(std::istream& o, LayerModel& var) { return int_to_type<LayerModel> (o, var); }
+std::istream& operator>>(std::istream& o, CrossfadeModel& var) { return int_to_type<CrossfadeModel> (o, var); }
+std::istream& operator>>(std::istream& o, SlaveSource& var) { return int_to_type<SlaveSource> (o, var); }
+std::istream& operator>>(std::istream& o, ShuttleBehaviour& var) { return int_to_type<ShuttleBehaviour> (o, var); }
+std::istream& operator>>(std::istream& o, ShuttleUnits& var) { return int_to_type<ShuttleUnits> (o, var); }
+
diff --git a/libs/ardour/import.cc b/libs/ardour/import.cc
index b10f76424b..f16a6e7d8c 100644
--- a/libs/ardour/import.cc
+++ b/libs/ardour/import.cc
@@ -65,7 +65,7 @@ Session::import_audiofile (import_status& status)
long n;
string basepath;
string sounds_dir;
- jack_nframes_t so_far;
+ nframes_t so_far;
char buf[PATH_MAX+1];
int ret = -1;
vector<string> new_paths;
diff --git a/libs/ardour/insert.cc b/libs/ardour/insert.cc
index e72c1d535a..b557017ec7 100644
--- a/libs/ardour/insert.cc
+++ b/libs/ardour/insert.cc
@@ -261,7 +261,7 @@ PluginInsert::parameter_changed (uint32_t which, float val)
}
void
-PluginInsert::set_block_size (jack_nframes_t nframes)
+PluginInsert::set_block_size (nframes_t nframes)
{
for (vector<boost::shared_ptr<Plugin> >::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
(*i)->set_block_size (nframes);
@@ -285,7 +285,7 @@ PluginInsert::deactivate ()
}
void
-PluginInsert::connect_and_run (BufferSet& bufs, jack_nframes_t nframes, jack_nframes_t offset, bool with_auto, jack_nframes_t now)
+PluginInsert::connect_and_run (BufferSet& bufs, nframes_t nframes, nframes_t offset, bool with_auto, nframes_t now)
{
uint32_t in_index = 0;
uint32_t out_index = 0;
@@ -325,24 +325,7 @@ PluginInsert::connect_and_run (BufferSet& bufs, jack_nframes_t nframes, jack_nfr
}
void
-PluginInsert::automation_snapshot (jack_nframes_t now)
-{
- map<uint32_t,AutomationList*>::iterator li;
-
- for (li = parameter_automation.begin(); li != parameter_automation.end(); ++li) {
-
- AutomationList *alist = ((*li).second);
- if (alist != 0 && alist->automation_write ()) {
-
- float val = _plugins[0]->get_parameter ((*li).first);
- alist->rt_add (now, val);
- last_automation_snapshot = now;
- }
- }
-}
-
-void
-PluginInsert::transport_stopped (jack_nframes_t now)
+PluginInsert::transport_stopped (nframes_t now)
{
map<uint32_t,AutomationList*>::iterator li;
@@ -357,7 +340,7 @@ PluginInsert::transport_stopped (jack_nframes_t now)
}
void
-PluginInsert::silence (jack_nframes_t nframes, jack_nframes_t offset)
+PluginInsert::silence (nframes_t nframes, nframes_t offset)
{
uint32_t in_index = 0;
uint32_t out_index = 0;
@@ -373,7 +356,7 @@ PluginInsert::silence (jack_nframes_t nframes, jack_nframes_t offset)
}
void
-PluginInsert::run (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t nframes, jack_nframes_t offset)
+PluginInsert::run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset)
{
if (active()) {
@@ -414,11 +397,11 @@ PluginInsert::set_parameter (uint32_t port, float val)
}
void
-PluginInsert::automation_run (BufferSet& bufs, jack_nframes_t nframes, jack_nframes_t offset)
+PluginInsert::automation_run (BufferSet& bufs, nframes_t nframes, nframes_t offset)
{
ControlEvent next_event (0, 0.0f);
- jack_nframes_t now = _session.transport_frame ();
- jack_nframes_t end = now + nframes;
+ nframes_t now = _session.transport_frame ();
+ nframes_t end = now + nframes;
Glib::Mutex::Lock lm (_automation_lock, Glib::TRY_LOCK);
@@ -437,7 +420,7 @@ PluginInsert::automation_run (BufferSet& bufs, jack_nframes_t nframes, jack_nfra
while (nframes) {
- jack_nframes_t cnt = min (((jack_nframes_t) floor (next_event.when) - now), nframes);
+ nframes_t cnt = min (((nframes_t) floor (next_event.when) - now), nframes);
connect_and_run (bufs, cnt, offset, true, now);
@@ -478,7 +461,6 @@ PluginInsert::set_port_automation_state (uint32_t port, AutoState s)
if (s != al.automation_state()) {
al.set_automation_state (s);
- last_automation_snapshot = 0;
_session.set_dirty ();
}
}
@@ -797,7 +779,7 @@ PluginInsert::describe_parameter (uint32_t what)
return _plugins[0]->describe_parameter (what);
}
-jack_nframes_t
+ARDOUR::nframes_t
PluginInsert::latency()
{
return _plugins[0]->latency ();
@@ -911,7 +893,7 @@ PortInsert::~PortInsert ()
}
void
-PortInsert::run (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t nframes, jack_nframes_t offset)
+PortInsert::run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset)
{
if (n_outputs().get(_default_type) == 0) {
return;
@@ -978,7 +960,7 @@ PortInsert::set_state(const XMLNode& node)
return 0;
}
-jack_nframes_t
+ARDOUR::nframes_t
PortInsert::latency()
{
/* because we deliver and collect within the same cycle,
diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc
index 57a89b2310..af5473368b 100644
--- a/libs/ardour/io.cc
+++ b/libs/ardour/io.cc
@@ -60,10 +60,8 @@ using namespace std;
using namespace ARDOUR;
using namespace PBD;
-
static float current_automation_version_number = 1.0;
-jack_nframes_t IO::_automation_interval = 0;
const string IO::state_node_name = "IO";
bool IO::connecting_legal = false;
bool IO::ports_legal = false;
@@ -105,7 +103,7 @@ IO::IO (Session& s, string name,
_output_buffers(new BufferSet()),
_name (name),
_default_type(default_type),
- _gain_control (*this),
+ _gain_control (X_("gaincontrol"), *this),
_gain_automation_curve (0.0, 2.0, 1.0),
_input_minimum (ChanCount::ZERO),
_input_maximum (ChanCount::INFINITE),
@@ -138,9 +136,7 @@ IO::IO (Session& s, string name,
deferred_state = 0;
apply_gain_automation = false;
-
- last_automation_snapshot = 0;
-
+
_gain_automation_state = Off;
_gain_automation_style = Absolute;
@@ -177,7 +173,7 @@ IO::~IO ()
}
void
-IO::silence (jack_nframes_t nframes, jack_nframes_t offset)
+IO::silence (nframes_t nframes, nframes_t offset)
{
/* io_lock, not taken: function must be called from Session::process() calltree */
@@ -192,10 +188,9 @@ IO::silence (jack_nframes_t nframes, jack_nframes_t offset)
* to the outputs, eg applying gain or pan or whatever else needs to be done.
*/
void
-IO::deliver_output (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t nframes, jack_nframes_t offset)
+IO::deliver_output (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset)
{
// FIXME: type specific code doesn't actually need to be here, it will go away in time
-
/* ********** AUDIO ********** */
@@ -210,6 +205,7 @@ IO::deliver_output (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t
if (dm.locked()) {
dg = _desired_gain;
}
+
}
Amp::run(bufs, nframes, _gain, dg, _phase_invert);
@@ -248,7 +244,7 @@ IO::deliver_output (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t
}
void
-IO::collect_input (BufferSet& outs, jack_nframes_t nframes, jack_nframes_t offset)
+IO::collect_input (BufferSet& outs, nframes_t nframes, nframes_t offset)
{
assert(outs.available() >= n_inputs());
@@ -268,8 +264,8 @@ IO::collect_input (BufferSet& outs, jack_nframes_t nframes, jack_nframes_t offse
}
void
-IO::just_meter_input (jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t nframes, jack_nframes_t offset)
+IO::just_meter_input (nframes_t start_frame, nframes_t end_frame,
+ nframes_t nframes, nframes_t offset)
{
BufferSet& bufs = _session.get_scratch_buffers (n_inputs());
@@ -1138,7 +1134,7 @@ IO::state (bool full_state)
Glib::Mutex::Lock lm (io_lock);
node->add_property("name", _name);
- id().print (buf);
+ id().print (buf, sizeof (buf));
node->add_property("id", buf);
str = "";
@@ -1220,6 +1216,7 @@ IO::state (bool full_state)
}
node->add_child_nocopy (_panner->state (full_state));
+ node->add_child_nocopy (_gain_control.get_state ());
snprintf (buf, sizeof(buf), "%2.12f", gain());
node->add_property ("gain", buf);
@@ -1342,9 +1339,15 @@ IO::set_state (const XMLNode& node)
}
for (iter = node.children().begin(); iter != node.children().end(); ++iter) {
+
if ((*iter)->name() == "Panner") {
_panner->set_state (**iter);
}
+
+ if ((*iter)->name() == X_("gaincontrol")) {
+ _gain_control.set_state (**iter);
+ _session.add_controllable (&_gain_control);
+ }
}
if ((prop = node.property ("automation-state")) != 0) {
@@ -1759,7 +1762,7 @@ IO::set_output_maximum (ChanCount n)
}
void
-IO::set_port_latency (jack_nframes_t nframes)
+IO::set_port_latency (nframes_t nframes)
{
Glib::Mutex::Lock lm (io_lock);
@@ -1768,11 +1771,11 @@ IO::set_port_latency (jack_nframes_t nframes)
}
}
-jack_nframes_t
+nframes_t
IO::output_latency () const
{
- jack_nframes_t max_latency;
- jack_nframes_t latency;
+ nframes_t max_latency;
+ nframes_t latency;
max_latency = 0;
@@ -1787,11 +1790,11 @@ IO::output_latency () const
return max_latency;
}
-jack_nframes_t
+nframes_t
IO::input_latency () const
{
- jack_nframes_t max_latency;
- jack_nframes_t latency;
+ nframes_t max_latency;
+ nframes_t latency;
max_latency = 0;
@@ -2087,7 +2090,7 @@ IO::update_meters()
void
IO::meter ()
{
- // FIXME: Remove this function and just connect signal directly to PeakMeter::meter
+ // FIXME: Ugly. Meter should manage the lock, if it's necessary
Glib::Mutex::Lock lm (io_lock); // READER: meter thread.
_meter->meter();
@@ -2114,7 +2117,7 @@ IO::save_automation (const string& path)
/* XXX use apply_to_points to get thread safety */
for (AutomationList::iterator i = _gain_automation_curve.begin(); i != _gain_automation_curve.end(); ++i) {
- out << "g " << (jack_nframes_t) floor ((*i)->when) << ' ' << (*i)->value << endl;
+ out << "g " << (nframes_t) floor ((*i)->when) << ' ' << (*i)->value << endl;
}
_panner->save ();
@@ -2153,7 +2156,7 @@ IO::load_automation (const string& path)
while (in.getline (line, sizeof(line), '\n')) {
char type;
- jack_nframes_t when;
+ nframes_t when;
double value;
if (++linecnt == 1) {
@@ -2223,7 +2226,6 @@ IO::set_gain_automation_state (AutoState state)
if (state != _gain_automation_curve.automation_state()) {
changed = true;
- last_automation_snapshot = 0;
_gain_automation_curve.set_automation_state (state);
if (state != Off) {
@@ -2322,22 +2324,7 @@ IO::end_pan_touch (uint32_t which)
}
void
-IO::automation_snapshot (jack_nframes_t now)
-{
- if (last_automation_snapshot > now || (now - last_automation_snapshot) > _automation_interval) {
-
- if (gain_automation_recording()) {
- _gain_automation_curve.rt_add (now, gain());
- }
-
- _panner->snapshot (now);
-
- last_automation_snapshot = now;
- }
-}
-
-void
-IO::transport_stopped (jack_nframes_t frame)
+IO::transport_stopped (nframes_t frame)
{
_gain_automation_curve.reposition_for_rt_add (frame);
diff --git a/libs/ardour/jack_slave.cc b/libs/ardour/jack_slave.cc
index 352bcaeee5..2e03b2f45d 100644
--- a/libs/ardour/jack_slave.cc
+++ b/libs/ardour/jack_slave.cc
@@ -36,7 +36,7 @@ JACK_Slave::JACK_Slave (jack_client_t* j)
: jack (j)
{
float x;
- jack_nframes_t p;
+ nframes_t p;
/* call this to initialize things */
speed_and_position (x, p);
}
@@ -58,7 +58,7 @@ JACK_Slave::ok() const
}
bool
-JACK_Slave::speed_and_position (float& sp, jack_nframes_t& position)
+JACK_Slave::speed_and_position (float& sp, nframes_t& position)
{
jack_position_t pos;
jack_transport_state_t state;
diff --git a/libs/ardour/ladspa_plugin.cc b/libs/ardour/ladspa_plugin.cc
index 82cc4e6202..c21d09e01b 100644
--- a/libs/ardour/ladspa_plugin.cc
+++ b/libs/ardour/ladspa_plugin.cc
@@ -18,6 +18,9 @@
$Id$
*/
+#define __STDC_FORMAT_MACROS 1
+#include <inttypes.h>
+
#include <vector>
#include <string>
@@ -52,7 +55,7 @@ using namespace std;
using namespace ARDOUR;
using namespace PBD;
-LadspaPlugin::LadspaPlugin (void *mod, AudioEngine& e, Session& session, uint32_t index, jack_nframes_t rate)
+LadspaPlugin::LadspaPlugin (void *mod, AudioEngine& e, Session& session, uint32_t index, nframes_t rate)
: Plugin (e, session)
{
init (mod, index, rate);
@@ -70,7 +73,7 @@ LadspaPlugin::LadspaPlugin (const LadspaPlugin &other)
}
void
-LadspaPlugin::init (void *mod, uint32_t index, jack_nframes_t rate)
+LadspaPlugin::init (void *mod, uint32_t index, nframes_t rate)
{
LADSPA_Descriptor_Function dfunc;
uint32_t i, port_cnt;
@@ -490,11 +493,11 @@ LadspaPlugin::describe_parameter (uint32_t which)
}
}
-jack_nframes_t
+ARDOUR::nframes_t
LadspaPlugin::latency () const
{
if (latency_control_port) {
- return (jack_nframes_t) floor (*latency_control_port);
+ return (nframes_t) floor (*latency_control_port);
} else {
return 0;
}
@@ -517,7 +520,7 @@ LadspaPlugin::automatable () const
}
int
-LadspaPlugin::connect_and_run (BufferSet& bufs, uint32_t& in_index, uint32_t& out_index, jack_nframes_t nframes, jack_nframes_t offset)
+LadspaPlugin::connect_and_run (BufferSet& bufs, uint32_t& in_index, uint32_t& out_index, nframes_t nframes, nframes_t offset)
{
uint32_t port_index = 0;
cycles_t then, now;
@@ -591,7 +594,7 @@ LadspaPlugin::print_parameter (uint32_t param, char *buf, uint32_t len) const
}
void
-LadspaPlugin::run (jack_nframes_t nframes)
+LadspaPlugin::run (nframes_t nframes)
{
for (uint32_t i = 0; i < parameter_count(); ++i) {
if (LADSPA_IS_PORT_INPUT(port_descriptor (i)) && LADSPA_IS_PORT_CONTROL(port_descriptor (i))) {
@@ -617,7 +620,7 @@ LadspaPlugin::latency_compute_run ()
uint32_t port_index = 0;
uint32_t in_index = 0;
uint32_t out_index = 0;
- const jack_nframes_t bufsize = 1024;
+ const nframes_t bufsize = 1024;
LADSPA_Data buffer[bufsize];
memset(buffer,0,sizeof(LADSPA_Data)*bufsize);
diff --git a/libs/ardour/location.cc b/libs/ardour/location.cc
index 6b3ea6f220..39331cfda6 100644
--- a/libs/ardour/location.cc
+++ b/libs/ardour/location.cc
@@ -77,7 +77,7 @@ Location::operator= (const Location& other)
}
int
-Location::set_start (jack_nframes_t s)
+Location::set_start (nframes_t s)
{
if (is_mark()) {
if (_start != s) {
@@ -113,7 +113,7 @@ Location::set_start (jack_nframes_t s)
}
int
-Location::set_end (jack_nframes_t e)
+Location::set_end (nframes_t e)
{
if (is_mark()) {
if (_start != e) {
@@ -136,7 +136,7 @@ Location::set_end (jack_nframes_t e)
}
int
-Location::set (jack_nframes_t start, jack_nframes_t end)
+Location::set (nframes_t start, nframes_t end)
{
if (is_mark() && start != end) {
return -1;
@@ -266,7 +266,7 @@ Location::get_state (void)
node->add_child_nocopy(cd_info_node(m->first, m->second));
}
- id().print (buf);
+ id().print (buf, sizeof (buf));
node->add_property("id", buf);
node->add_property ("name", name());
snprintf (buf, sizeof (buf), "%u", start());
@@ -644,7 +644,7 @@ struct LocationStartLaterComparison
};
Location *
-Locations::first_location_before (jack_nframes_t frame)
+Locations::first_location_before (nframes_t frame)
{
LocationList locs;
@@ -668,7 +668,7 @@ Locations::first_location_before (jack_nframes_t frame)
}
Location *
-Locations::first_location_after (jack_nframes_t frame)
+Locations::first_location_after (nframes_t frame)
{
LocationList locs;
@@ -691,8 +691,8 @@ Locations::first_location_after (jack_nframes_t frame)
return 0;
}
-jack_nframes_t
-Locations::first_mark_before (jack_nframes_t frame)
+nframes_t
+Locations::first_mark_before (nframes_t frame)
{
LocationList locs;
@@ -728,8 +728,8 @@ Locations::first_mark_before (jack_nframes_t frame)
return 0;
}
-jack_nframes_t
-Locations::first_mark_after (jack_nframes_t frame)
+nframes_t
+Locations::first_mark_after (nframes_t frame)
{
LocationList locs;
diff --git a/libs/ardour/meter.cc b/libs/ardour/meter.cc
index c685b03943..1ce610d13c 100644
--- a/libs/ardour/meter.cc
+++ b/libs/ardour/meter.cc
@@ -102,11 +102,11 @@ PeakMeter::meter ()
new_peak = minus_infinity();
}
- if (_session.meter_falloff() == 0.0f || new_peak > _visible_peak_power[n]) {
+ if (Config->get_meter_falloff() == 0.0f || new_peak > _visible_peak_power[n]) {
_visible_peak_power[n] = new_peak;
} else {
// do falloff
- new_peak = _visible_peak_power[n] - _session.meter_falloff();
+ new_peak = _visible_peak_power[n] - Config->get_meter_falloff();
_visible_peak_power[n] = std::max (new_peak, -INFINITY);
}
}
diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc
index 6435655689..8247aac217 100644
--- a/libs/ardour/midi_diskstream.cc
+++ b/libs/ardour/midi_diskstream.cc
@@ -356,7 +356,7 @@ MidiDiskstream::check_record_status (jack_nframes_t transport_frame, jack_nframe
if (_alignment_style == ExistingMaterial) {
- if (!_session.get_punch_in()) {
+ if (!Config->get_punch_in()) {
/* manual punch in happens at the correct transport frame
because the user hit a button. but to get alignment correct
@@ -385,7 +385,7 @@ MidiDiskstream::check_record_status (jack_nframes_t transport_frame, jack_nframe
} else {
- if (_session.get_punch_in()) {
+ if (Config->get_punch_in()) {
first_recordable_frame += _roll_delay;
} else {
capture_start_frame -= _roll_delay;
@@ -472,7 +472,7 @@ MidiDiskstream::process (jack_nframes_t transport_frame, jack_nframes_t nframes,
adjust_capture_position = 0;
- if (nominally_recording || (_session.get_record_enabled() && _session.get_punch_in())) {
+ if (nominally_recording || (_session.get_record_enabled() && Config->get_punch_in())) {
OverlapType ot;
ot = coverage (first_recordable_frame, last_recordable_frame, transport_frame, transport_frame + nframes);
@@ -1006,25 +1006,15 @@ MidiDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_cap
if (abort_capture) {
- list<boost::shared_ptr<Source> >* deletion_list = new list<boost::shared_ptr<Source> >;
-
if (_write_source) {
_write_source->mark_for_remove ();
-
- deletion_list->push_back (_write_source);
-
+ _write_source->drop_references ();
_write_source.reset();
}
/* new source set up in "out" below */
- if (!deletion_list->empty()) {
- DeleteSources (deletion_list);
- } else {
- delete deletion_list;
- }
-
} else {
assert(_write_source);
@@ -1193,8 +1183,8 @@ MidiDiskstream::engage_record_enable ()
g_atomic_int_set (&_record_enabled, 1);
- if (Config->get_use_hardware_monitoring() && _source_port) {
- _source_port->request_monitor_input (!(_session.get_auto_input() && rolling));
+ if (_source_port && Config->get_monitoring_model() == HardwareMonitoring) {
+ _source_port->request_monitor_input (!(Config->get_auto_input() && rolling));
}
RecordEnableChanged (); /* EMIT SIGNAL */
@@ -1204,7 +1194,7 @@ void
MidiDiskstream::disengage_record_enable ()
{
g_atomic_int_set (&_record_enabled, 0);
- if (Config->get_use_hardware_monitoring()) {
+ if (_source_port && Config->get_monitoring_model() == HardwareMonitoring) {
if (_source_port) {
_source_port->request_monitor_input (false);
}
@@ -1229,7 +1219,7 @@ MidiDiskstream::get_state ()
node->add_property ("speed", buf);
node->add_property("name", _name);
- id().print(buf);
+ id().print(buf, sizeof(buf));
node->add_property("id", buf);
if (_write_source && _session.get_record_enabled()) {
@@ -1245,7 +1235,7 @@ MidiDiskstream::get_state ()
Location* pi;
- if (_session.get_punch_in() && ((pi = _session.locations()->auto_punch_location()) != 0)) {
+ if (Config->get_punch_in() && ((pi = _session.locations()->auto_punch_location()) != 0)) {
snprintf (buf, sizeof (buf), "%" PRIu32, pi->start());
} else {
snprintf (buf, sizeof (buf), "%" PRIu32, _session.transport_frame());
diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc
index 4e39436ae3..c0d63cc2ba 100644
--- a/libs/ardour/midi_region.cc
+++ b/libs/ardour/midi_region.cc
@@ -263,7 +263,7 @@ MidiRegion::state (bool full)
for (uint32_t n=0; n < _sources.size(); ++n) {
snprintf (buf2, sizeof(buf2), "source-%d", n);
- _sources[n]->id().print (buf);
+ _sources[n]->id().print (buf, sizeof(buf));
node.add_property (buf2, buf);
}
diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc
index 900a4f3191..f6d0a22019 100644
--- a/libs/ardour/midi_track.cc
+++ b/libs/ardour/midi_track.cc
@@ -226,7 +226,7 @@ MidiTrack::state(bool full_state)
for (vector<FreezeRecordInsertInfo*>::iterator i = _freeze_record.insert_info.begin(); i != _freeze_record.insert_info.end(); ++i) {
inode = new XMLNode (X_("insert"));
- (*i)->id.print (buf);
+ (*i)->id.print (buf, sizeof(buf));
inode->add_property (X_("id"), buf);
inode->add_child_copy ((*i)->state);
@@ -270,7 +270,7 @@ MidiTrack::state(bool full_state)
diskstream.
*/
- _diskstream->id().print (buf);
+ _diskstream->id().print (buf, sizeof(buf));
root.add_property ("diskstream-id", buf);
return root;
@@ -385,15 +385,15 @@ MidiTrack::no_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nfr
send_silence = true;
} else {
- if (_session.get_auto_input()) {
- if (Config->get_use_sw_monitoring()) {
+ if (Config->get_auto_input()) {
+ if (Config->get_monitoring_model() == SoftwareMonitoring) {
send_silence = false;
} else {
send_silence = true;
}
} else {
if (_diskstream->record_enabled()) {
- if (Config->get_use_sw_monitoring()) {
+ if (Config->get_monitoring_model() == SoftwareMonitoring) {
send_silence = false;
} else {
send_silence = true;
@@ -439,15 +439,6 @@ MidiTrack::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframe
int dret;
boost::shared_ptr<MidiDiskstream> diskstream = midi_diskstream();
- {
- Glib::RWLock::ReaderLock lm (redirect_lock, Glib::TRY_LOCK);
- if (lm.locked()) {
- // automation snapshot can also be called from the non-rt context
- // and it uses the redirect list, so we take the lock out here
- automation_snapshot (start_frame);
- }
- }
-
if (n_outputs().get_total() == 0 && _redirects.empty()) {
return 0;
}
@@ -482,7 +473,7 @@ MidiTrack::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframe
just_meter_input (start_frame, end_frame, nframes, offset);
}
- if (diskstream->record_enabled() && !can_record && !_session.get_auto_input()) {
+ if (diskstream->record_enabled() && !can_record && !Config->get_auto_input()) {
/* not actually recording, but we want to hear the input material anyway,
at least potentially (depending on monitoring options)
@@ -508,7 +499,7 @@ MidiTrack::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframe
diskstream->get_playback(bufs.get_midi(0), start_frame, end_frame);
process_output_buffers (bufs, start_frame, end_frame, nframes, offset,
- (!_session.get_record_enabled() || !_session.get_do_not_record_plugins()), declick, (_meter_point != MeterInput));
+ (!_session.get_record_enabled() || !Config->get_do_not_record_plugins()), declick, (_meter_point != MeterInput));
}
diff --git a/libs/ardour/mix.cc b/libs/ardour/mix.cc
index c6e234d87b..6b7755e498 100644
--- a/libs/ardour/mix.cc
+++ b/libs/ardour/mix.cc
@@ -29,7 +29,7 @@
// Debug wrappers
float
-debug_compute_peak (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current)
+debug_compute_peak (ARDOUR::Sample *buf, nframes_t nsamples, float current)
{
if ( ((intptr_t)buf % 16) != 0) {
cerr << "compute_peak(): buffer unaligned!" << endl;
@@ -39,7 +39,7 @@ debug_compute_peak (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current)
}
void
-debug_apply_gain_to_buffer (ARDOUR::Sample *buf, jack_nframes_t nframes, float gain)
+debug_apply_gain_to_buffer (ARDOUR::Sample *buf, nframes_t nframes, float gain)
{
if ( ((intptr_t)buf % 16) != 0) {
cerr << "apply_gain_to_buffer(): buffer unaligned!" << endl;
@@ -49,7 +49,7 @@ debug_apply_gain_to_buffer (ARDOUR::Sample *buf, jack_nframes_t nframes, float g
}
void
-debug_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes, float gain)
+debug_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes, float gain)
{
if ( ((intptr_t)dst & 15) != 0) {
cerr << "mix_buffers_with_gain(): dst unaligned!" << endl;
@@ -64,7 +64,7 @@ debug_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nfra
}
void
-debug_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes)
+debug_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes)
{
if ( ((intptr_t)dst & 15) != 0) {
cerr << "mix_buffers_no_gain(): dst unaligned!" << endl;
@@ -82,9 +82,9 @@ debug_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframe
float
-compute_peak (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current)
+compute_peak (ARDOUR::Sample *buf, nframes_t nsamples, float current)
{
- for (jack_nframes_t i = 0; i < nsamples; ++i) {
+ for (nframes_t i = 0; i < nsamples; ++i) {
current = f_max (current, fabsf (buf[i]));
}
@@ -92,24 +92,24 @@ compute_peak (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current)
}
void
-apply_gain_to_buffer (ARDOUR::Sample *buf, jack_nframes_t nframes, float gain)
+apply_gain_to_buffer (ARDOUR::Sample *buf, nframes_t nframes, float gain)
{
- for (jack_nframes_t i=0; i<nframes; i++)
+ for (nframes_t i=0; i<nframes; i++)
buf[i] *= gain;
}
void
-mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes, float gain)
+mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes, float gain)
{
- for (jack_nframes_t i = 0; i < nframes; i++) {
+ for (nframes_t i = 0; i < nframes; i++) {
dst[i] += src[i] * gain;
}
}
void
-mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes)
+mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes)
{
- for (jack_nframes_t i=0; i < nframes; i++) {
+ for (nframes_t i=0; i < nframes; i++) {
dst[i] += src[i];
}
}
@@ -118,7 +118,7 @@ mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nf
#include <Accelerate/Accelerate.h>
float
-veclib_compute_peak (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current)
+veclib_compute_peak (ARDOUR::Sample *buf, nframes_t nsamples, float current)
{
float tmpmax = 0.0f;
vDSP_maxmgv(buf, 1, &tmpmax, nsamples);
@@ -126,19 +126,19 @@ veclib_compute_peak (ARDOUR::Sample *buf, jack_nframes_t nsamples, float current
}
void
-veclib_apply_gain_to_buffer (ARDOUR::Sample *buf, jack_nframes_t nframes, float gain)
+veclib_apply_gain_to_buffer (ARDOUR::Sample *buf, nframes_t nframes, float gain)
{
vDSP_vsmul(buf, 1, &gain, buf, 1, nframes);
}
void
-veclib_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes, float gain)
+veclib_mix_buffers_with_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes, float gain)
{
vDSP_vsma(src, 1, &gain, dst, 1, dst, 1, nframes);
}
void
-veclib_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, jack_nframes_t nframes)
+veclib_mix_buffers_no_gain (ARDOUR::Sample *dst, ARDOUR::Sample *src, nframes_t nframes)
{
// It seems that a vector mult only operation does not exist...
float gain = 1.0f;
diff --git a/libs/ardour/mtc_slave.cc b/libs/ardour/mtc_slave.cc
index 32642d570d..2b4b2ae5bf 100644
--- a/libs/ardour/mtc_slave.cc
+++ b/libs/ardour/mtc_slave.cc
@@ -68,8 +68,8 @@ void
MTC_Slave::update_mtc_qtr (Parser& p)
{
cycles_t cnow = get_cycles ();
- jack_nframes_t now = session.engine().frame_time();
- jack_nframes_t qtr;
+ nframes_t now = session.engine().frame_time();
+ nframes_t qtr;
static cycles_t last_qtr = 0;
qtr = (long) (session.frames_per_smpte_frame() / 4);
@@ -87,7 +87,7 @@ MTC_Slave::update_mtc_qtr (Parser& p)
void
MTC_Slave::update_mtc_time (const byte *msg, bool was_full)
{
- jack_nframes_t now = session.engine().frame_time();
+ nframes_t now = session.engine().frame_time();
SMPTE::Time smpte;
smpte.hours = msg[3];
@@ -217,12 +217,12 @@ MTC_Slave::ok() const
}
bool
-MTC_Slave::speed_and_position (float& speed, jack_nframes_t& pos)
+MTC_Slave::speed_and_position (float& speed, nframes_t& pos)
{
- jack_nframes_t now = session.engine().frame_time();
+ nframes_t now = session.engine().frame_time();
SafeTime last;
- jack_nframes_t frame_rate;
- jack_nframes_t elapsed;
+ nframes_t frame_rate;
+ nframes_t elapsed;
float speed_now;
read_current (&last);
@@ -279,7 +279,7 @@ MTC_Slave::speed_and_position (float& speed, jack_nframes_t& pos)
/* scale elapsed time by the current MTC speed */
if (last.timestamp && (now > last.timestamp)) {
- elapsed = (jack_nframes_t) floor (mtc_speed * (now - last.timestamp));
+ elapsed = (nframes_t) floor (mtc_speed * (now - last.timestamp));
} else {
elapsed = 0; /* XXX is this right? */
}
@@ -293,10 +293,10 @@ MTC_Slave::speed_and_position (float& speed, jack_nframes_t& pos)
return true;
}
-jack_nframes_t
+ARDOUR::nframes_t
MTC_Slave::resolution() const
{
- return (jack_nframes_t) session.frames_per_smpte_frame();
+ return (nframes_t) session.frames_per_smpte_frame();
}
void
diff --git a/libs/ardour/panner.cc b/libs/ardour/panner.cc
index 0c3b0a291f..0f6e78f84b 100644
--- a/libs/ardour/panner.cc
+++ b/libs/ardour/panner.cc
@@ -18,6 +18,9 @@
$Id$
*/
+#define __STDC_FORMAT_MACROS 1
+#include <inttypes.h>
+
#include <cmath>
#include <cerrno>
#include <fstream>
@@ -68,7 +71,7 @@ static double direct_pan_to_control (pan_t val) {
StreamPanner::StreamPanner (Panner& p)
: parent (p),
- _control (*this)
+ _control (X_("panner"), *this)
{
_muted = false;
@@ -194,7 +197,7 @@ BaseStereoPanner::~BaseStereoPanner ()
}
void
-BaseStereoPanner::snapshot (jack_nframes_t now)
+BaseStereoPanner::snapshot (nframes_t now)
{
if (_automation.automation_state() == Write || _automation.automation_state() == Touch) {
_automation.rt_add (now, x);
@@ -202,7 +205,7 @@ BaseStereoPanner::snapshot (jack_nframes_t now)
}
void
-BaseStereoPanner::transport_stopped (jack_nframes_t frame)
+BaseStereoPanner::transport_stopped (nframes_t frame)
{
_automation.reposition_for_rt_add (frame);
@@ -247,7 +250,7 @@ BaseStereoPanner::save (ostream& out) const
out << "begin" << endl;
for (AutomationList::const_iterator i = _automation.const_begin(); i != _automation.const_end(); ++i) {
- out << '\t' << (jack_nframes_t) floor ((*i)->when) << ' ' << (*i)->value << endl;
+ out << '\t' << (nframes_t) floor ((*i)->when) << ' ' << (*i)->value << endl;
if (!out) {
error << string_compose (_("error writing pan automation file (%s)"), strerror (errno)) << endmsg;
return -1;
@@ -267,7 +270,7 @@ BaseStereoPanner::load (istream& in, string path, uint32_t& linecnt)
_automation.clear ();
while (in.getline (line, sizeof (line), '\n')) {
- jack_nframes_t when;
+ nframes_t when;
double value;
++linecnt;
@@ -293,7 +296,7 @@ BaseStereoPanner::load (istream& in, string path, uint32_t& linecnt)
}
void
-BaseStereoPanner::distribute (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain_coeff, jack_nframes_t nframes)
+BaseStereoPanner::distribute (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain_coeff, nframes_t nframes)
{
assert(obufs.count().get(DataType::AUDIO) == 2);
@@ -315,8 +318,8 @@ BaseStereoPanner::distribute (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain
/* interpolate over 64 frames or nframes, whichever is smaller */
- jack_nframes_t limit = min ((jack_nframes_t)64, nframes);
- jack_nframes_t n;
+ nframes_t limit = min ((nframes_t)64, nframes);
+ nframes_t n;
delta = -(delta / (float) (limit));
@@ -365,8 +368,8 @@ BaseStereoPanner::distribute (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain
/* interpolate over 64 frames or nframes, whichever is smaller */
- jack_nframes_t limit = min ((jack_nframes_t)64, nframes);
- jack_nframes_t n;
+ nframes_t limit = min ((nframes_t)64, nframes);
+ nframes_t n;
delta = -(delta / (float) (limit));
@@ -451,7 +454,7 @@ EqualPowerStereoPanner::update ()
void
EqualPowerStereoPanner::distribute_automated (AudioBuffer& srcbuf, BufferSet& obufs,
- jack_nframes_t start, jack_nframes_t end, jack_nframes_t nframes,
+ nframes_t start, nframes_t end, nframes_t nframes,
pan_t** buffers)
{
assert(obufs.count().get(DataType::AUDIO) == 2);
@@ -486,7 +489,7 @@ EqualPowerStereoPanner::distribute_automated (AudioBuffer& srcbuf, BufferSet& ob
const float pan_law_attenuation = -3.0f;
const float scale = 2.0f - 4.0f * powf (10.0f,pan_law_attenuation/20.0f);
- for (jack_nframes_t n = 0; n < nframes; ++n) {
+ for (nframes_t n = 0; n < nframes; ++n) {
float panR = buffers[0][n];
float panL = 1 - panR;
@@ -500,7 +503,7 @@ EqualPowerStereoPanner::distribute_automated (AudioBuffer& srcbuf, BufferSet& ob
dst = obufs.get_audio(0).data(nframes);
pbuf = buffers[0];
- for (jack_nframes_t n = 0; n < nframes; ++n) {
+ for (nframes_t n = 0; n < nframes; ++n) {
dst[n] += src[n] * pbuf[n];
}
@@ -511,7 +514,7 @@ EqualPowerStereoPanner::distribute_automated (AudioBuffer& srcbuf, BufferSet& ob
dst = obufs.get_audio(1).data(nframes);
pbuf = buffers[1];
- for (jack_nframes_t n = 0; n < nframes; ++n) {
+ for (nframes_t n = 0; n < nframes; ++n) {
dst[n] += src[n] * pbuf[n];
}
@@ -551,6 +554,7 @@ EqualPowerStereoPanner::state (bool full_state)
root->add_property (X_("automation-style"), buf);
StreamPanner::add_state (*root);
+ root->add_child_nocopy (_control.get_state ());
return *root;
}
@@ -583,6 +587,13 @@ EqualPowerStereoPanner::set_state (const XMLNode& node)
}
StreamPanner::set_state (node);
+
+ for (XMLNodeConstIterator iter = node.children().begin(); iter != node.children().end(); ++iter) {
+ if ((*iter)->name() == X_("panner")) {
+ _control.set_state (**iter);
+ parent.session().add_controllable (&_control);
+ }
+ }
return 0;
}
@@ -600,13 +611,13 @@ Multi2dPanner::~Multi2dPanner ()
}
void
-Multi2dPanner::snapshot (jack_nframes_t now)
+Multi2dPanner::snapshot (nframes_t now)
{
// how?
}
void
-Multi2dPanner::transport_stopped (jack_nframes_t frame)
+Multi2dPanner::transport_stopped (nframes_t frame)
{
//what?
}
@@ -656,7 +667,7 @@ Multi2dPanner::update ()
}
void
-Multi2dPanner::distribute (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain_coeff, jack_nframes_t nframes)
+Multi2dPanner::distribute (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain_coeff, nframes_t nframes)
{
Sample* dst;
pan_t pan;
@@ -679,8 +690,8 @@ Multi2dPanner::distribute (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain_co
/* interpolate over 64 frames or nframes, whichever is smaller */
- jack_nframes_t limit = min ((jack_nframes_t)64, nframes);
- jack_nframes_t n;
+ nframes_t limit = min ((nframes_t)64, nframes);
+ nframes_t n;
delta = -(delta / (float) (limit));
@@ -705,7 +716,7 @@ Multi2dPanner::distribute (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain_co
if (pan != 0.0f) {
- for (jack_nframes_t n = 0; n < nframes; ++n) {
+ for (nframes_t n = 0; n < nframes; ++n) {
dst[n] += src[n] * pan;
}
@@ -714,7 +725,7 @@ Multi2dPanner::distribute (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain_co
} else {
- for (jack_nframes_t n = 0; n < nframes; ++n) {
+ for (nframes_t n = 0; n < nframes; ++n) {
dst[n] += src[n];
}
@@ -730,7 +741,7 @@ Multi2dPanner::distribute (AudioBuffer& srcbuf, BufferSet& obufs, gain_t gain_co
void
Multi2dPanner::distribute_automated (AudioBuffer& src, BufferSet& obufs,
- jack_nframes_t start, jack_nframes_t end, jack_nframes_t nframes,
+ nframes_t start, nframes_t end, nframes_t nframes,
pan_t** buffers)
{
if (_muted) {
@@ -1060,7 +1071,7 @@ Panner::automation_style () const
}
void
-Panner::transport_stopped (jack_nframes_t frame)
+Panner::transport_stopped (nframes_t frame)
{
for (vector<StreamPanner*>::iterator i = begin(); i != end(); ++i) {
(*i)->transport_stopped (frame);
@@ -1068,7 +1079,7 @@ Panner::transport_stopped (jack_nframes_t frame)
}
void
-Panner::snapshot (jack_nframes_t now)
+Panner::snapshot (nframes_t now)
{
for (vector<StreamPanner*>::iterator i = begin(); i != end(); ++i) {
(*i)->snapshot (now);
@@ -1489,7 +1500,7 @@ Panner::set_position (float xpos, float ypos, float zpos, StreamPanner& orig)
}
void
-Panner::distribute_no_automation (BufferSet& inbufs, BufferSet& outbufs, jack_nframes_t nframes, jack_nframes_t offset, gain_t gain_coeff)
+Panner::distribute_no_automation (BufferSet& inbufs, BufferSet& outbufs, nframes_t nframes, nframes_t offset, gain_t gain_coeff)
{
if (outbufs.count().get(DataType::AUDIO) == 0) {
// Don't want to lose audio...
@@ -1558,7 +1569,7 @@ Panner::distribute_no_automation (BufferSet& inbufs, BufferSet& outbufs, jack_nf
}
void
-Panner::distribute (BufferSet& inbufs, BufferSet& outbufs, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t nframes, jack_nframes_t offset)
+Panner::distribute (BufferSet& inbufs, BufferSet& outbufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset)
{
if (outbufs.count().get(DataType::AUDIO) == 0) {
// Failing to deliver audio we were asked to deliver is a bug
diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc
index f778175e9e..56fed3d7a3 100644
--- a/libs/ardour/playlist.cc
+++ b/libs/ardour/playlist.cc
@@ -129,12 +129,12 @@ Playlist::Playlist (const Playlist& other, string namestr, bool hide)
}
-Playlist::Playlist (const Playlist& other, jack_nframes_t start, jack_nframes_t cnt, string str, bool hide)
+Playlist::Playlist (const Playlist& other, nframes_t start, nframes_t cnt, string str, bool hide)
: _name (str), _session (other._session), _type(other._type), _orig_diskstream_id(other._orig_diskstream_id)
{
RegionLock rlock2 (&((Playlist&)other));
- jack_nframes_t end = start + cnt - 1;
+ nframes_t end = start + cnt - 1;
init (hide);
@@ -142,9 +142,9 @@ Playlist::Playlist (const Playlist& other, jack_nframes_t start, jack_nframes_t
boost::shared_ptr<Region> region;
boost::shared_ptr<Region> new_region;
- jack_nframes_t offset = 0;
- jack_nframes_t position = 0;
- jack_nframes_t len = 0;
+ nframes_t offset = 0;
+ nframes_t position = 0;
+ nframes_t len = 0;
string new_name;
OverlapType overlap;
@@ -237,7 +237,7 @@ Playlist::init (bool hide)
_splicing = false;
_nudging = false;
in_set_state = false;
- _edit_mode = _session.get_edit_mode();
+ _edit_mode = Config->get_edit_mode();
in_flush = false;
in_partition = false;
subcnt = 0;
@@ -401,7 +401,7 @@ Playlist::flush_notifications ()
// pending_bounds.sort (cmp);
for (RegionList::iterator r = pending_bounds.begin(); r != pending_bounds.end(); ++r) {
- if (_session.get_layer_model() == Session::MoveAddHigher) {
+ if (Config->get_layer_model() == MoveAddHigher) {
timestamp_layer_op (*r);
}
pending_length = true;
@@ -461,7 +461,7 @@ Playlist::flush_notifications ()
*************************************************************/
void
-Playlist::add_region (boost::shared_ptr<Region> region, jack_nframes_t position, float times, bool with_save)
+Playlist::add_region (boost::shared_ptr<Region> region, nframes_t position, float times, bool with_save)
{
RegionLock rlock (this);
@@ -469,7 +469,7 @@ Playlist::add_region (boost::shared_ptr<Region> region, jack_nframes_t position,
int itimes = (int) floor (times);
- jack_nframes_t pos = position;
+ nframes_t pos = position;
if (itimes >= 1) {
add_region_internal (region, pos, true);
@@ -494,7 +494,7 @@ Playlist::add_region (boost::shared_ptr<Region> region, jack_nframes_t position,
}
if (floor (times) != times) {
- jack_nframes_t length = (jack_nframes_t) floor (region->length() * (times - floor (times)));
+ nframes_t length = (nframes_t) floor (region->length() * (times - floor (times)));
string name;
_session.region_name (name, region->name(), false);
boost::shared_ptr<Region> sub = RegionFactory::create (region, 0, length, name, region->layer(), region->flags());
@@ -507,10 +507,10 @@ Playlist::add_region (boost::shared_ptr<Region> region, jack_nframes_t position,
}
void
-Playlist::add_region_internal (boost::shared_ptr<Region> region, jack_nframes_t position, bool delay_sort)
+Playlist::add_region_internal (boost::shared_ptr<Region> region, nframes_t position, bool delay_sort)
{
RegionSortByPosition cmp;
- jack_nframes_t old_length = 0;
+ nframes_t old_length = 0;
if (!holding_state()) {
old_length = _get_maximum_extent();
@@ -539,11 +539,12 @@ Playlist::add_region_internal (boost::shared_ptr<Region> region, jack_nframes_t
}
}
- region->StateChanged.connect (sigc::bind (mem_fun (this, &Playlist::region_changed_proxy), region));
+ region->StateChanged.connect (sigc::bind (mem_fun (this, &Playlist::region_changed_proxy),
+ boost::weak_ptr<Region> (region)));
}
void
-Playlist::replace_region (boost::shared_ptr<Region> old, boost::shared_ptr<Region> newr, jack_nframes_t pos)
+Playlist::replace_region (boost::shared_ptr<Region> old, boost::shared_ptr<Region> newr, nframes_t pos)
{
RegionLock rlock (this);
@@ -574,7 +575,7 @@ int
Playlist::remove_region_internal (boost::shared_ptr<Region>region, bool delay_sort)
{
RegionList::iterator i;
- jack_nframes_t old_length = 0;
+ nframes_t old_length = 0;
// cerr << "removing region " << region->name() << endl;
@@ -629,7 +630,7 @@ Playlist::get_region_list_equivalent_regions (boost::shared_ptr<Region> other, v
}
void
-Playlist::partition (jack_nframes_t start, jack_nframes_t end, bool just_top_level)
+Playlist::partition (nframes_t start, nframes_t end, bool just_top_level)
{
RegionList thawlist;
@@ -643,7 +644,7 @@ Playlist::partition (jack_nframes_t start, jack_nframes_t end, bool just_top_lev
}
void
-Playlist::partition_internal (jack_nframes_t start, jack_nframes_t end, bool cutting, RegionList& thawlist)
+Playlist::partition_internal (nframes_t start, nframes_t end, bool cutting, RegionList& thawlist)
{
RegionLock rlock (this);
boost::shared_ptr<Region> region;
@@ -651,7 +652,7 @@ Playlist::partition_internal (jack_nframes_t start, jack_nframes_t end, bool cut
string new_name;
RegionList::iterator tmp;
OverlapType overlap;
- jack_nframes_t pos1, pos2, pos3, pos4;
+ nframes_t pos1, pos2, pos3, pos4;
RegionList new_regions;
in_partition = true;
@@ -825,11 +826,11 @@ Playlist::partition_internal (jack_nframes_t start, jack_nframes_t end, bool cut
}
Playlist*
-Playlist::cut_copy (Playlist* (Playlist::*pmf)(jack_nframes_t, jack_nframes_t,bool), list<AudioRange>& ranges, bool result_is_hidden)
+Playlist::cut_copy (Playlist* (Playlist::*pmf)(nframes_t, nframes_t,bool), list<AudioRange>& ranges, bool result_is_hidden)
{
Playlist* ret;
Playlist* pl;
- jack_nframes_t start;
+ nframes_t start;
if (ranges.empty()) {
return 0;
@@ -869,19 +870,19 @@ Playlist::cut_copy (Playlist* (Playlist::*pmf)(jack_nframes_t, jack_nframes_t,bo
Playlist*
Playlist::cut (list<AudioRange>& ranges, bool result_is_hidden)
{
- Playlist* (Playlist::*pmf)(jack_nframes_t,jack_nframes_t,bool) = &Playlist::cut;
+ Playlist* (Playlist::*pmf)(nframes_t,nframes_t,bool) = &Playlist::cut;
return cut_copy (pmf, ranges, result_is_hidden);
}
Playlist*
Playlist::copy (list<AudioRange>& ranges, bool result_is_hidden)
{
- Playlist* (Playlist::*pmf)(jack_nframes_t,jack_nframes_t,bool) = &Playlist::copy;
+ Playlist* (Playlist::*pmf)(nframes_t,nframes_t,bool) = &Playlist::copy;
return cut_copy (pmf, ranges, result_is_hidden);
}
Playlist *
-Playlist::cut (jack_nframes_t start, jack_nframes_t cnt, bool result_is_hidden)
+Playlist::cut (nframes_t start, nframes_t cnt, bool result_is_hidden)
{
Playlist *the_copy;
RegionList thawlist;
@@ -909,7 +910,7 @@ Playlist::cut (jack_nframes_t start, jack_nframes_t cnt, bool result_is_hidden)
}
Playlist *
-Playlist::copy (jack_nframes_t start, jack_nframes_t cnt, bool result_is_hidden)
+Playlist::copy (nframes_t start, nframes_t cnt, bool result_is_hidden)
{
char buf[32];
@@ -923,10 +924,10 @@ Playlist::copy (jack_nframes_t start, jack_nframes_t cnt, bool result_is_hidden)
}
int
-Playlist::paste (Playlist& other, jack_nframes_t position, float times)
+Playlist::paste (Playlist& other, nframes_t position, float times)
{
times = fabs (times);
- jack_nframes_t old_length;
+ nframes_t old_length;
{
RegionLock rl1 (this);
@@ -935,8 +936,8 @@ Playlist::paste (Playlist& other, jack_nframes_t position, float times)
old_length = _get_maximum_extent();
int itimes = (int) floor (times);
- jack_nframes_t pos = position;
- jack_nframes_t shift = other._get_maximum_extent();
+ nframes_t pos = position;
+ nframes_t shift = other._get_maximum_extent();
layer_t top_layer = regions.size();
while (itimes--) {
@@ -971,13 +972,13 @@ Playlist::paste (Playlist& other, jack_nframes_t position, float times)
void
-Playlist::duplicate (boost::shared_ptr<Region> region, jack_nframes_t position, float times)
+Playlist::duplicate (boost::shared_ptr<Region> region, nframes_t position, float times)
{
times = fabs (times);
RegionLock rl (this);
int itimes = (int) floor (times);
- jack_nframes_t pos = position;
+ nframes_t pos = position;
while (itimes--) {
boost::shared_ptr<Region> copy = RegionFactory::create (region);
@@ -986,7 +987,7 @@ Playlist::duplicate (boost::shared_ptr<Region> region, jack_nframes_t position,
}
if (floor (times) != times) {
- jack_nframes_t length = (jack_nframes_t) floor (region->length() * (times - floor (times)));
+ nframes_t length = (nframes_t) floor (region->length() * (times - floor (times)));
string name;
_session.region_name (name, region->name(), false);
boost::shared_ptr<Region> sub = RegionFactory::create (region, 0, length, name, region->layer(), region->flags());
@@ -997,7 +998,7 @@ Playlist::duplicate (boost::shared_ptr<Region> region, jack_nframes_t position,
}
void
-Playlist::split_region (boost::shared_ptr<Region> region, jack_nframes_t playlist_position)
+Playlist::split_region (boost::shared_ptr<Region> region, nframes_t playlist_position)
{
RegionLock rl (this);
@@ -1012,8 +1013,8 @@ Playlist::split_region (boost::shared_ptr<Region> region, jack_nframes_t playlis
boost::shared_ptr<Region> left;
boost::shared_ptr<Region> right;
- jack_nframes_t before;
- jack_nframes_t after;
+ nframes_t before;
+ nframes_t after;
string before_name;
string after_name;
@@ -1141,7 +1142,7 @@ Playlist::region_bounds_changed (Change what_changed, boost::shared_ptr<Region>
if (holding_state ()) {
pending_bounds.push_back (region);
} else {
- if (_session.get_layer_model() == Session::MoveAddHigher) {
+ if (Config->get_layer_model() == MoveAddHigher) {
/* it moved or changed length, so change the timestamp */
timestamp_layer_op (region);
}
@@ -1155,8 +1156,14 @@ Playlist::region_bounds_changed (Change what_changed, boost::shared_ptr<Region>
}
void
-Playlist::region_changed_proxy (Change what_changed, boost::shared_ptr<Region> region)
+Playlist::region_changed_proxy (Change what_changed, boost::weak_ptr<Region> weak_region)
{
+ boost::shared_ptr<Region> region (weak_region.lock());
+
+ if (!region) {
+ return;
+ }
+
/* this makes a virtual call to the right kind of playlist ... */
region_changed (what_changed, region);
@@ -1217,7 +1224,7 @@ Playlist::clear (bool with_save)
**********************************************************************/
Playlist::RegionList *
-Playlist::regions_at (jack_nframes_t frame)
+Playlist::regions_at (nframes_t frame)
{
RegionLock rlock (this);
@@ -1225,7 +1232,7 @@ Playlist::regions_at (jack_nframes_t frame)
}
boost::shared_ptr<Region>
-Playlist::top_region_at (jack_nframes_t frame)
+Playlist::top_region_at (nframes_t frame)
{
RegionLock rlock (this);
@@ -1243,7 +1250,7 @@ Playlist::top_region_at (jack_nframes_t frame)
}
Playlist::RegionList *
-Playlist::find_regions_at (jack_nframes_t frame)
+Playlist::find_regions_at (nframes_t frame)
{
RegionList *rlist = new RegionList;
@@ -1257,7 +1264,7 @@ Playlist::find_regions_at (jack_nframes_t frame)
}
Playlist::RegionList *
-Playlist::regions_touched (jack_nframes_t start, jack_nframes_t end)
+Playlist::regions_touched (nframes_t start, nframes_t end)
{
RegionLock rlock (this);
RegionList *rlist = new RegionList;
@@ -1273,17 +1280,17 @@ Playlist::regions_touched (jack_nframes_t start, jack_nframes_t end)
boost::shared_ptr<Region>
-Playlist::find_next_region (jack_nframes_t frame, RegionPoint point, int dir)
+Playlist::find_next_region (nframes_t frame, RegionPoint point, int dir)
{
RegionLock rlock (this);
boost::shared_ptr<Region> ret;
- jack_nframes_t closest = max_frames;
+ nframes_t closest = max_frames;
for (RegionList::iterator i = regions.begin(); i != regions.end(); ++i) {
- jack_nframes_t distance;
+ nframes_t distance;
boost::shared_ptr<Region> r = (*i);
- jack_nframes_t pos = 0;
+ nframes_t pos = 0;
switch (point) {
case Start:
@@ -1380,6 +1387,11 @@ Playlist::set_state (const XMLNode& node)
if (child->name() == "Region") {
+ if ((prop = child->property ("id")) == 0) {
+ error << _("region state node has no ID, ignored") << endmsg;
+ continue;
+ }
+
if ((region = RegionFactory::create (_session, *child, true)) == 0) {
error << _("Playlist: cannot create region from state file") << endmsg;
continue;
@@ -1428,7 +1440,7 @@ Playlist::state (bool full_state)
node->add_property (X_("name"), _name);
node->add_property (X_("type"), _type.to_string());
- _orig_diskstream_id.print (buf);
+ _orig_diskstream_id.print (buf, sizeof (buf));
node->add_property (X_("orig_diskstream_id"), buf);
node->add_property (X_("frozen"), _frozen ? "yes" : "no");
@@ -1453,19 +1465,19 @@ Playlist::empty() const
return regions.empty();
}
-jack_nframes_t
+ARDOUR::nframes_t
Playlist::get_maximum_extent () const
{
RegionLock rlock (const_cast<Playlist *>(this));
return _get_maximum_extent ();
}
-jack_nframes_t
+ARDOUR::nframes_t
Playlist::_get_maximum_extent () const
{
RegionList::const_iterator i;
- jack_nframes_t max_extent = 0;
- jack_nframes_t end = 0;
+ nframes_t max_extent = 0;
+ nframes_t end = 0;
for (i = regions.begin(); i != regions.end(); ++i) {
if ((end = (*i)->position() + (*i)->length()) > max_extent) {
@@ -1545,8 +1557,8 @@ Playlist::relayer ()
freeze ();
- if (_session.get_layer_model() == Session::MoveAddHigher ||
- _session.get_layer_model() == Session::AddHigher) {
+ if (Config->get_layer_model() == MoveAddHigher ||
+ Config->get_layer_model() == AddHigher) {
RegionSortByLastLayerOp cmp;
RegionList copy = regions;
@@ -1612,8 +1624,8 @@ void
Playlist::raise_region_to_top (boost::shared_ptr<Region> region)
{
/* does nothing useful if layering mode is later=higher */
- if ((_session.get_layer_model() == Session::MoveAddHigher) ||
- (_session.get_layer_model() == Session::AddHigher)) {
+ if ((Config->get_layer_model() == MoveAddHigher) ||
+ (Config->get_layer_model() == AddHigher)) {
timestamp_layer_op (region);
relayer ();
}
@@ -1623,8 +1635,8 @@ void
Playlist::lower_region_to_bottom (boost::shared_ptr<Region> region)
{
/* does nothing useful if layering mode is later=higher */
- if ((_session.get_layer_model() == Session::MoveAddHigher) ||
- (_session.get_layer_model() == Session::AddHigher)) {
+ if ((Config->get_layer_model() == MoveAddHigher) ||
+ (Config->get_layer_model() == AddHigher)) {
region->set_last_layer_op (0);
relayer ();
}
@@ -1702,10 +1714,10 @@ Playlist::move_region_to_layer (layer_t target_layer, boost::shared_ptr<Region>
}
void
-Playlist::nudge_after (jack_nframes_t start, jack_nframes_t distance, bool forwards)
+Playlist::nudge_after (nframes_t start, nframes_t distance, bool forwards)
{
RegionList::iterator i;
- jack_nframes_t new_pos;
+ nframes_t new_pos;
bool moved = false;
_nudging = true;
diff --git a/libs/ardour/playlist_factory.cc b/libs/ardour/playlist_factory.cc
index 05d9c76f7a..4461783874 100644
--- a/libs/ardour/playlist_factory.cc
+++ b/libs/ardour/playlist_factory.cc
@@ -29,7 +29,7 @@ using namespace ARDOUR;
using namespace PBD;
Playlist*
-Playlist::copyPlaylist (const Playlist& playlist, jack_nframes_t start, jack_nframes_t length,
+Playlist::copyPlaylist (const Playlist& playlist, nframes_t start, nframes_t length,
string name, bool result_is_hidden)
{
const AudioPlaylist* apl;
diff --git a/libs/ardour/plugin.cc b/libs/ardour/plugin.cc
index 9a82c3bbab..3b471014eb 100644
--- a/libs/ardour/plugin.cc
+++ b/libs/ardour/plugin.cc
@@ -95,15 +95,17 @@ Plugin::get_nth_control (uint32_t n)
Plugin::ParameterDescriptor desc;
get_parameter_descriptor (n, desc);
-
- controls[n] = new PortControllable (*this, n, desc.lower, desc.upper, desc.toggled, desc.logarithmic);
+
+ controls[n] = new PortControllable (describe_parameter (n), *this, n,
+ desc.lower, desc.upper, desc.toggled, desc.logarithmic);
}
return controls[n];
}
-Plugin::PortControllable::PortControllable (Plugin& p, uint32_t port_id, float low, float up, bool t, bool loga)
- : plugin (p), absolute_port (port_id)
+Plugin::PortControllable::PortControllable (string name, Plugin& p, uint32_t port_id,
+ float low, float up, bool t, bool loga)
+ : Controllable (name), plugin (p), absolute_port (port_id)
{
toggled = t;
logarithmic = loga;
diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc
index 5b3a4658a8..bdd4d0ada6 100644
--- a/libs/ardour/plugin_manager.cc
+++ b/libs/ardour/plugin_manager.cc
@@ -18,6 +18,9 @@
$Id$
*/
+#define __STDC_FORMAT_MACROS 1
+#include <stdint.h>
+
#include <sys/types.h>
#include <cstdio>
#include <lrdf.h>
diff --git a/libs/ardour/redirect.cc b/libs/ardour/redirect.cc
index 05c07accb7..09d650b069 100644
--- a/libs/ardour/redirect.cc
+++ b/libs/ardour/redirect.cc
@@ -233,7 +233,7 @@ Redirect::state (bool full_state)
path = _session.snap_name();
path += "-redirect-";
- id().print (buf);
+ id().print (buf, sizeof (buf));
path += buf;
path += ".automation";
@@ -406,7 +406,7 @@ Redirect::mark_automation_visible (uint32_t what, bool yn)
}
bool
-Redirect::find_next_event (jack_nframes_t now, jack_nframes_t end, ControlEvent& next_event) const
+Redirect::find_next_event (nframes_t now, nframes_t end, ControlEvent& next_event) const
{
map<uint32_t,AutomationList*>::const_iterator li;
AutomationList::TimeComparator cmp;
diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc
index c420649ef2..d55a8aea1a 100644
--- a/libs/ardour/region.cc
+++ b/libs/ardour/region.cc
@@ -113,7 +113,7 @@ Region::Region (SourceList& srcs, jack_nframes_t start, jack_nframes_t length, c
}
/** Create a new Region from part of an existing one */
-Region::Region (boost::shared_ptr<const Region> other, jack_nframes_t offset, jack_nframes_t length, const string& name, layer_t layer, Flag flags)
+Region::Region (boost::shared_ptr<const Region> other, nframes_t offset, nframes_t length, const string& name, layer_t layer, Flag flags)
: _name(name)
, _type(other->data_type())
, _flags(Flag(flags & ~(Locked|WholeFile|Hidden)))
@@ -273,9 +273,7 @@ Region::Region (boost::shared_ptr<Source> src, const XMLNode& node)
Region::~Region ()
{
- notify_callbacks ();
-
- /* derived classes must emit GoingAway */
+ /* derived classes must call notify_callbacks() and then emit GoingAway */
}
void
@@ -356,7 +354,7 @@ Region::set_name (string str)
}
void
-Region::set_length (jack_nframes_t len, void *src)
+Region::set_length (nframes_t len, void *src)
{
if (_flags & Locked) {
return;
@@ -364,6 +362,14 @@ Region::set_length (jack_nframes_t len, void *src)
if (_length != len && len != 0) {
+ /* check that the current _position wouldn't make the new
+ length impossible.
+ */
+
+ if (max_frames - len < _position) {
+ return;
+ }
+
if (!verify_length (len)) {
return;
}
@@ -411,7 +417,7 @@ Region::move_to_natural_position (void *src)
if (!_playlist) {
return;
}
-
+
boost::shared_ptr<Region> whole_file_region = get_parent();
if (whole_file_region) {
@@ -420,7 +426,7 @@ Region::move_to_natural_position (void *src)
}
void
-Region::special_set_position (jack_nframes_t pos)
+Region::special_set_position (nframes_t pos)
{
/* this is used when creating a whole file region as
a way to store its "natural" or "captured" position.
@@ -430,7 +436,7 @@ Region::special_set_position (jack_nframes_t pos)
}
void
-Region::set_position (jack_nframes_t pos, void *src)
+Region::set_position (nframes_t pos, void *src)
{
if (_flags & Locked) {
return;
@@ -439,6 +445,16 @@ Region::set_position (jack_nframes_t pos, void *src)
if (_position != pos) {
_position = pos;
+ /* check that the new _position wouldn't make the current
+ length impossible - if so, change the length.
+
+ XXX is this the right thing to do?
+ */
+
+ if (max_frames - _length < _position) {
+ _length = max_frames - _position;
+ }
+
if (!_frozen) {
char buf[64];
snprintf (buf, sizeof (buf), "position set to %u", pos);
@@ -454,7 +470,7 @@ Region::set_position (jack_nframes_t pos, void *src)
}
void
-Region::set_position_on_top (jack_nframes_t pos, void *src)
+Region::set_position_on_top (nframes_t pos, void *src)
{
if (_flags & Locked) {
return;
@@ -497,7 +513,7 @@ Region::nudge_position (long n, void *src)
_position += n;
}
} else {
- if (_position < (jack_nframes_t) -n) {
+ if (_position < (nframes_t) -n) {
_position = 0;
} else {
_position += n;
@@ -514,7 +530,7 @@ Region::nudge_position (long n, void *src)
}
void
-Region::set_start (jack_nframes_t pos, void *src)
+Region::set_start (nframes_t pos, void *src)
{
if (_flags & Locked) {
return;
@@ -545,12 +561,12 @@ Region::set_start (jack_nframes_t pos, void *src)
}
void
-Region::trim_start (jack_nframes_t new_position, void *src)
+Region::trim_start (nframes_t new_position, void *src)
{
if (_flags & Locked) {
return;
}
- jack_nframes_t new_start;
+ nframes_t new_start;
int32_t start_shift;
if (new_position > _position) {
@@ -573,7 +589,7 @@ Region::trim_start (jack_nframes_t new_position, void *src)
} else if (start_shift < 0) {
- if (_start < (jack_nframes_t) -start_shift) {
+ if (_start < (nframes_t) -start_shift) {
new_start = 0;
} else {
new_start = _start + start_shift;
@@ -600,14 +616,14 @@ Region::trim_start (jack_nframes_t new_position, void *src)
}
void
-Region::trim_front (jack_nframes_t new_position, void *src)
+Region::trim_front (nframes_t new_position, void *src)
{
if (_flags & Locked) {
return;
}
- jack_nframes_t end = _position + _length - 1;
- jack_nframes_t source_zero;
+ nframes_t end = last_frame();
+ nframes_t source_zero;
if (_position > _start) {
source_zero = _position - _start;
@@ -617,7 +633,7 @@ Region::trim_front (jack_nframes_t new_position, void *src)
if (new_position < end) { /* can't trim it zero or negative length */
- jack_nframes_t newlen;
+ nframes_t newlen;
/* can't trim it back passed where source position zero is located */
@@ -638,7 +654,7 @@ Region::trim_front (jack_nframes_t new_position, void *src)
}
void
-Region::trim_end (jack_nframes_t new_endpoint, void *src)
+Region::trim_end (nframes_t new_endpoint, void *src)
{
if (_flags & Locked) {
return;
@@ -653,7 +669,7 @@ Region::trim_end (jack_nframes_t new_endpoint, void *src)
}
void
-Region::trim_to (jack_nframes_t position, jack_nframes_t length, void *src)
+Region::trim_to (nframes_t position, nframes_t length, void *src)
{
if (_flags & Locked) {
return;
@@ -668,10 +684,10 @@ Region::trim_to (jack_nframes_t position, jack_nframes_t length, void *src)
}
void
-Region::trim_to_internal (jack_nframes_t position, jack_nframes_t length, void *src)
+Region::trim_to_internal (nframes_t position, nframes_t length, void *src)
{
int32_t start_shift;
- jack_nframes_t new_start;
+ nframes_t new_start;
if (_flags & Locked) {
return;
@@ -694,7 +710,7 @@ Region::trim_to_internal (jack_nframes_t position, jack_nframes_t length, void *
} else if (start_shift < 0) {
- if (_start < (jack_nframes_t) -start_shift) {
+ if (_start < (nframes_t) -start_shift) {
new_start = 0;
} else {
new_start = _start + start_shift;
@@ -819,9 +835,9 @@ Region::set_locked (bool yn)
}
void
-Region::set_sync_position (jack_nframes_t absolute_pos)
+Region::set_sync_position (nframes_t absolute_pos)
{
- jack_nframes_t file_pos;
+ nframes_t file_pos;
file_pos = _start + (absolute_pos - _position);
@@ -854,7 +870,7 @@ Region::clear_sync_position ()
}
}
-jack_nframes_t
+nframes_t
Region::sync_offset (int& dir) const
{
/* returns the sync point relative the first frame of the region */
@@ -873,11 +889,11 @@ Region::sync_offset (int& dir) const
}
}
-jack_nframes_t
-Region::adjust_to_sync (jack_nframes_t pos)
+nframes_t
+Region::adjust_to_sync (nframes_t pos)
{
int sync_dir;
- jack_nframes_t offset = sync_offset (sync_dir);
+ nframes_t offset = sync_offset (sync_dir);
if (sync_dir > 0) {
if (max_frames - pos > offset) {
@@ -894,7 +910,7 @@ Region::adjust_to_sync (jack_nframes_t pos)
return pos;
}
-jack_nframes_t
+nframes_t
Region::sync_position() const
{
if (_flags & SyncMarked) {
@@ -968,7 +984,7 @@ Region::state (bool full_state)
XMLNode *node = new XMLNode ("Region");
char buf[64];
- _id.print (buf);
+ _id.print (buf, sizeof (buf));
node->add_property ("id", buf);
node->add_property ("name", _name);
node->add_property ("type", _type.to_string());
@@ -1027,15 +1043,15 @@ Region::set_state (const XMLNode& node)
}
if ((prop = node.property ("start")) != 0) {
- _start = (jack_nframes_t) atoi (prop->value().c_str());
+ sscanf (prop->value().c_str(), "%" PRIu32, &_start);
}
if ((prop = node.property ("length")) != 0) {
- _length = (jack_nframes_t) atoi (prop->value().c_str());
+ sscanf (prop->value().c_str(), "%" PRIu32, &_length);
}
if ((prop = node.property ("position")) != 0) {
- _position = (jack_nframes_t) atoi (prop->value().c_str());
+ sscanf (prop->value().c_str(), "%" PRIu32, &_position);
}
if ((prop = node.property ("layer")) != 0) {
@@ -1045,7 +1061,7 @@ Region::set_state (const XMLNode& node)
/* note: derived classes set flags */
if ((prop = node.property ("sync-position")) != 0) {
- _sync_position = (jack_nframes_t) atoi (prop->value().c_str());
+ sscanf (prop->value().c_str(), "%" PRIu32, &_sync_position);
} else {
_sync_position = _start;
}
diff --git a/libs/ardour/region_factory.cc b/libs/ardour/region_factory.cc
index 492a25a08f..4041852f4e 100644
--- a/libs/ardour/region_factory.cc
+++ b/libs/ardour/region_factory.cc
@@ -37,8 +37,8 @@ using namespace PBD;
sigc::signal<void,boost::shared_ptr<Region> > RegionFactory::CheckNewRegion;
boost::shared_ptr<Region>
-RegionFactory::create (boost::shared_ptr<Region> region, jack_nframes_t start,
- jack_nframes_t length, std::string name,
+RegionFactory::create (boost::shared_ptr<Region> region, nframes_t start,
+ nframes_t length, std::string name,
layer_t layer, Region::Flag flags, bool announce)
{
boost::shared_ptr<const AudioRegion> other_a;
@@ -91,8 +91,8 @@ RegionFactory::create (boost::shared_ptr<Region> region)
}
boost::shared_ptr<Region>
-RegionFactory::create (boost::shared_ptr<AudioRegion> region, jack_nframes_t start,
- jack_nframes_t length, std::string name,
+RegionFactory::create (boost::shared_ptr<AudioRegion> region, nframes_t start,
+ nframes_t length, std::string name,
layer_t layer, Region::Flag flags, bool announce)
{
return create (boost::static_pointer_cast<Region> (region), start, length, name, layer, flags, announce);
@@ -107,7 +107,7 @@ RegionFactory::create (Session& session, XMLNode& node, bool yn)
}
boost::shared_ptr<Region>
-RegionFactory::create (SourceList& srcs, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t layer, Region::Flag flags, bool announce)
+RegionFactory::create (SourceList& srcs, nframes_t start, nframes_t length, const string& name, layer_t layer, Region::Flag flags, bool announce)
{
if (srcs.empty()) {
return boost::shared_ptr<Region>();
@@ -159,7 +159,7 @@ RegionFactory::create (SourceList& srcs, const XMLNode& node)
}
boost::shared_ptr<Region>
-RegionFactory::create (boost::shared_ptr<Source> src, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t layer, Region::Flag flags, bool announce)
+RegionFactory::create (boost::shared_ptr<Source> src, nframes_t start, nframes_t length, const string& name, layer_t layer, Region::Flag flags, bool announce)
{
boost::shared_ptr<AudioSource> as;
boost::shared_ptr<MidiSource> ms;
diff --git a/libs/ardour/reverse.cc b/libs/ardour/reverse.cc
index 15f90fec45..2279331701 100644
--- a/libs/ardour/reverse.cc
+++ b/libs/ardour/reverse.cc
@@ -47,12 +47,12 @@ Reverse::run (boost::shared_ptr<AudioRegion> region)
{
SourceList nsrcs;
SourceList::iterator si;
- const jack_nframes_t blocksize = 256 * 1048;
+ const nframes_t blocksize = 256 * 1048;
Sample buf[blocksize];
- jack_nframes_t fpos;
- jack_nframes_t fend;
- jack_nframes_t fstart;
- jack_nframes_t to_read;
+ nframes_t fpos;
+ nframes_t fend;
+ nframes_t fstart;
+ nframes_t to_read;
int ret = -1;
/* create new sources */
@@ -88,7 +88,7 @@ Reverse::run (boost::shared_ptr<AudioRegion> region)
/* swap memory order */
- for (jack_nframes_t i = 0; i < to_read/2; ++i) {
+ for (nframes_t i = 0; i < to_read/2; ++i) {
swap (buf[i],buf[to_read-1-i]);
}
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 398df02179..308dbb57cb 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -51,23 +51,22 @@ using namespace std;
using namespace ARDOUR;
using namespace PBD;
-
uint32_t Route::order_key_cnt = 0;
Route::Route (Session& sess, string name, int input_min, int input_max, int output_min, int output_max, Flag flg, DataType default_type)
: IO (sess, name, input_min, input_max, output_min, output_max, default_type),
_flags (flg),
- _solo_control (*this, ToggleControllable::SoloControl),
- _mute_control (*this, ToggleControllable::MuteControl)
+ _solo_control (X_("solo"), *this, ToggleControllable::SoloControl),
+ _mute_control (X_("mute"), *this, ToggleControllable::MuteControl)
{
init ();
}
Route::Route (Session& sess, const XMLNode& node)
: IO (sess, "route"),
- _solo_control (*this, ToggleControllable::SoloControl),
- _mute_control (*this, ToggleControllable::MuteControl)
+ _solo_control (X_("solo"), *this, ToggleControllable::SoloControl),
+ _mute_control (X_("mute"), *this, ToggleControllable::MuteControl)
{
init ();
set_state (node);
@@ -92,7 +91,7 @@ Route::init ()
_declickable = false;
_pending_declick = true;
_remote_control_id = 0;
-
+
_edit_group = 0;
_mix_group = 0;
@@ -229,8 +228,8 @@ Route::set_gain (gain_t val, void *src)
*/
void
Route::process_output_buffers (BufferSet& bufs,
- jack_nframes_t start_frame, jack_nframes_t end_frame,
- jack_nframes_t nframes, jack_nframes_t offset, bool with_redirects, int declick,
+ nframes_t start_frame, nframes_t end_frame,
+ nframes_t nframes, nframes_t offset, bool with_redirects, int declick,
bool meter)
{
// This is definitely very audio-only for now
@@ -243,9 +242,18 @@ Route::process_output_buffers (BufferSet& bufs,
IO *co;
bool mute_audible;
bool solo_audible;
- bool no_monitor = (Config->get_use_hardware_monitoring() || !Config->get_use_sw_monitoring ());
+ bool no_monitor;
gain_t* gab = _session.gain_automation_buffer();
+ switch (Config->get_monitoring_model()) {
+ case HardwareMonitoring:
+ case ExternalMonitoring:
+ no_monitor = true;
+ break;
+ default:
+ no_monitor = false;
+ }
+
declick = _pending_declick;
{
@@ -324,7 +332,7 @@ Route::process_output_buffers (BufferSet& bufs,
// TODO: this is probably wrong
- (no_monitor && record_enabled() && (!_session.get_auto_input() || _session.actively_recording()))
+ (no_monitor && record_enabled() && (!Config->get_auto_input() || _session.actively_recording()))
) {
@@ -408,7 +416,7 @@ Route::process_output_buffers (BufferSet& bufs,
// rec-enabled but not s/w monitoring
- (no_monitor && record_enabled() && (!_session.get_auto_input() || _session.actively_recording()))
+ (no_monitor && record_enabled() && (!Config->get_auto_input() || _session.actively_recording()))
) {
@@ -435,11 +443,11 @@ Route::process_output_buffers (BufferSet& bufs,
// h/w monitoring not in use
- (!Config->get_use_hardware_monitoring() &&
+ (!Config->get_monitoring_model() == HardwareMonitoring &&
// AND software monitoring required
- Config->get_use_sw_monitoring())) {
+ Config->get_monitoring_model() == SoftwareMonitoring)) {
if (apply_gain_automation) {
@@ -447,7 +455,7 @@ Route::process_output_buffers (BufferSet& bufs,
for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) {
Sample* const sp = i->data(nframes);
- for (jack_nframes_t nx = 0; nx < nframes; ++nx) {
+ for (nframes_t nx = 0; nx < nframes; ++nx) {
sp[nx] *= -gab[nx];
}
}
@@ -455,7 +463,7 @@ Route::process_output_buffers (BufferSet& bufs,
for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) {
Sample* const sp = i->data(nframes);
- for (jack_nframes_t nx = 0; nx < nframes; ++nx) {
+ for (nframes_t nx = 0; nx < nframes; ++nx) {
sp[nx] *= gab[nx];
}
}
@@ -492,7 +500,7 @@ Route::process_output_buffers (BufferSet& bufs,
for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) {
Sample* const sp = i->data(nframes);
- apply_gain_to_buffer(sp,nframes,this_gain);
+ Session::apply_gain_to_buffer(sp,nframes,this_gain);
}
} else if (_gain == 0) {
@@ -571,7 +579,7 @@ Route::process_output_buffers (BufferSet& bufs,
// recording but not s/w monitoring
- (no_monitor && record_enabled() && (!_session.get_auto_input() || _session.actively_recording()))
+ (no_monitor && record_enabled() && (!Config->get_auto_input() || _session.actively_recording()))
) {
@@ -604,7 +612,7 @@ Route::process_output_buffers (BufferSet& bufs,
/* relax */
- } else if (no_monitor && record_enabled() && (!_session.get_auto_input() || _session.actively_recording())) {
+ } else if (no_monitor && record_enabled() && (!Config->get_auto_input() || _session.actively_recording())) {
IO::silence (nframes, offset);
@@ -616,7 +624,7 @@ Route::process_output_buffers (BufferSet& bufs,
// muted by solo of another track, but not using control outs for solo
- (!solo_audible && (_session.solo_model() != Session::SoloBus)) ||
+ (!solo_audible && (Config->get_solo_model() != SoloBus)) ||
// muted by mute of this track
@@ -662,7 +670,7 @@ Route::n_process_buffers ()
}
void
-Route::passthru (jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t nframes, jack_nframes_t offset, int declick, bool meter_first)
+Route::passthru (nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset, int declick, bool meter_first)
{
BufferSet& bufs = _session.get_scratch_buffers(n_process_buffers());
@@ -996,7 +1004,7 @@ Route::_reset_plugin_counts (uint32_t* err_streams)
uint32_t i_cnt;
uint32_t s_cnt;
map<Placement,list<InsertCount> > insert_map;
- jack_nframes_t initial_streams;
+ nframes_t initial_streams;
redirect_max_outs.reset();
i_cnt = 0;
@@ -1352,6 +1360,8 @@ Route::state(bool full_state)
node->add_property ("order-keys", order_string);
node->add_child_nocopy (IO::state (full_state));
+ node->add_child_nocopy (_solo_control.get_state ());
+ node->add_child_nocopy (_mute_control.get_state ());
if (_control_outs) {
XMLNode* cnode = new XMLNode (X_("ControlOuts"));
@@ -1657,6 +1667,12 @@ Route::set_state (const XMLNode& node)
} else if (child->name() == "extra") {
_extra_xml = new XMLNode (*child);
+ } else if (child->name() == "solo") {
+ _solo_control.set_state (*child);
+ _session.add_controllable (&_solo_control);
+ } else if (child->name() == "mute") {
+ _mute_control.set_state (*child);
+ _session.add_controllable (&_mute_control);
}
}
@@ -1680,7 +1696,7 @@ Route::curve_reallocate ()
}
void
-Route::silence (jack_nframes_t nframes, jack_nframes_t offset)
+Route::silence (nframes_t nframes, nframes_t offset)
{
if (!_silent) {
@@ -1915,15 +1931,11 @@ Route::set_active (bool yn)
void
Route::handle_transport_stopped (bool abort_ignored, bool did_locate, bool can_flush_redirects)
{
- jack_nframes_t now = _session.transport_frame();
+ nframes_t now = _session.transport_frame();
{
Glib::RWLock::ReaderLock lm (redirect_lock);
- if (!did_locate) {
- automation_snapshot (now);
- }
-
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
if (Config->get_plugins_stop_with_transport() && can_flush_redirects) {
@@ -1984,7 +1996,7 @@ Route::pans_required () const
}
int
-Route::no_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t offset,
+Route::no_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, nframes_t offset,
bool session_state_changing, bool can_record, bool rec_monitors_input)
{
if (n_outputs().get_total() == 0) {
@@ -2007,8 +2019,8 @@ Route::no_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes
return 0;
}
-jack_nframes_t
-Route::check_initial_delay (jack_nframes_t nframes, jack_nframes_t& offset, jack_nframes_t& transport_frame)
+nframes_t
+Route::check_initial_delay (nframes_t nframes, nframes_t& offset, nframes_t& transport_frame)
{
if (_roll_delay > nframes) {
@@ -2033,24 +2045,15 @@ Route::check_initial_delay (jack_nframes_t nframes, jack_nframes_t& offset, jack
}
int
-Route::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t offset, int declick,
+Route::roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, nframes_t offset, int declick,
bool can_record, bool rec_monitors_input)
{
- {
- Glib::RWLock::ReaderLock lm (redirect_lock, Glib::TRY_LOCK);
- if (lm.locked()) {
- // automation snapshot can also be called from the non-rt context
- // and it uses the redirect list, so we take the lock out here
- automation_snapshot (_session.transport_frame());
- }
- }
-
if ((n_outputs().get_total() == 0 && _redirects.empty()) || n_inputs().get_total() == 0 || !_active) {
silence (nframes, offset);
return 0;
}
- jack_nframes_t unused = 0;
+ nframes_t unused = 0;
if ((nframes = check_initial_delay (nframes, offset, unused)) == 0) {
return 0;
@@ -2077,7 +2080,7 @@ Route::roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t
}
int
-Route::silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t offset,
+Route::silent_roll (nframes_t nframes, nframes_t start_frame, nframes_t end_frame, nframes_t offset,
bool can_record, bool rec_monitors_input)
{
silence (nframes, offset);
@@ -2143,7 +2146,7 @@ Route::set_meter_point (MeterPoint p, void *src)
}
}
-jack_nframes_t
+nframes_t
Route::update_total_latency ()
{
_own_latency = 0;
@@ -2169,7 +2172,7 @@ Route::update_total_latency ()
}
void
-Route::set_latency_delay (jack_nframes_t longest_session_latency)
+Route::set_latency_delay (nframes_t longest_session_latency)
{
_initial_delay = longest_session_latency - _own_latency;
@@ -2178,18 +2181,8 @@ Route::set_latency_delay (jack_nframes_t longest_session_latency)
}
}
-void
-Route::automation_snapshot (jack_nframes_t now)
-{
- IO::automation_snapshot (now);
-
- for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
- (*i)->automation_snapshot (now);
- }
-}
-
-Route::ToggleControllable::ToggleControllable (Route& s, ToggleType tp)
- : route (s), type(tp)
+Route::ToggleControllable::ToggleControllable (std::string name, Route& s, ToggleType tp)
+ : Controllable (name), route (s), type(tp)
{
}
@@ -2231,7 +2224,7 @@ Route::ToggleControllable::get_value (void) const
}
void
-Route::set_block_size (jack_nframes_t nframes)
+Route::set_block_size (nframes_t nframes)
{
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
(*i)->set_block_size (nframes);
diff --git a/libs/ardour/send.cc b/libs/ardour/send.cc
index 6654f3c75b..2c2a152416 100644
--- a/libs/ardour/send.cc
+++ b/libs/ardour/send.cc
@@ -103,7 +103,7 @@ Send::set_state(const XMLNode& node)
}
void
-Send::run (BufferSet& bufs, jack_nframes_t start_frame, jack_nframes_t end_frame, jack_nframes_t nframes, jack_nframes_t offset)
+Send::run (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset)
{
if (active()) {
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index b670afb1ba..ae5466dda8 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -72,6 +72,7 @@
#include <ardour/data_type.h>
#include <ardour/buffer_set.h>
#include <ardour/source_factory.h>
+#include <ardour/region_factory.h>
#ifdef HAVE_LIBLO
#include <ardour/osc.h>
@@ -102,8 +103,6 @@ sigc::signal<int> Session::AskAboutPendingState;
sigc::signal<void> Session::SendFeedback;
sigc::signal<void> Session::SMPTEOffsetChanged;
-sigc::signal<void> Session::SMPTETypeChanged;
-sigc::signal<void> Session::PullupChanged;
sigc::signal<void> Session::StartTimeChanged;
sigc::signal<void> Session::EndTimeChanged;
@@ -287,9 +286,12 @@ Session::Session (AudioEngine &eng,
first_stage_init (fullpath, snapshot_name);
- if (create (new_session, mix_template, _engine.frame_rate() * 60 * 5)) {
- cerr << "create failed\n";
- throw failed_constructor ();
+ new_session = !g_file_test (_path.c_str(), GFileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR));
+ if (new_session) {
+ if (create (new_session, mix_template, _engine.frame_rate() * 60 * 5)) {
+ cerr << "create failed\n";
+ throw failed_constructor ();
+ }
}
if (second_stage_init (new_session)) {
@@ -303,7 +305,7 @@ Session::Session (AudioEngine &eng,
_state_of_the_state = StateOfTheState (_state_of_the_state & ~Dirty);
- Config->ParameterChanged.connect (mem_fun (*this, &Session::handle_configuration_change));
+ Config->ParameterChanged.connect (mem_fun (*this, &Session::config_changed));
if (was_dirty) {
DirtyChanged (); /* EMIT SIGNAL */
@@ -319,7 +321,7 @@ Session::Session (AudioEngine &eng,
uint32_t master_out_channels,
uint32_t requested_physical_in,
uint32_t requested_physical_out,
- jack_nframes_t initial_length)
+ nframes_t initial_length)
: _engine (eng),
_scratch_buffers(new BufferSet()),
@@ -344,9 +346,12 @@ Session::Session (AudioEngine &eng,
n_physical_inputs = max (requested_physical_in, _engine.n_physical_inputs());
first_stage_init (fullpath, snapshot_name);
-
- if (create (new_session, 0, initial_length)) {
- throw failed_constructor ();
+
+ new_session = !g_file_test (_path.c_str(), GFileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR));
+ if (new_session) {
+ if (create (new_session, 0, initial_length)) {
+ throw failed_constructor ();
+ }
}
if (control_out_channels) {
@@ -368,8 +373,8 @@ Session::Session (AudioEngine &eng,
output_ac = AutoConnectOption (output_ac & ~AutoConnectMaster);
}
- input_auto_connect = input_ac;
- output_auto_connect = output_ac;
+ Config->set_input_auto_connect (input_ac);
+ Config->set_output_auto_connect (output_ac);
if (second_stage_init (new_session)) {
throw failed_constructor ();
@@ -601,6 +606,8 @@ Session::when_engine_running ()
set_block_size (_engine.frames_per_cycle());
set_frame_rate (_engine.frame_rate());
+ Config->map_parameters (mem_fun (*this, &Session::config_changed));
+
/* every time we reconnect, recompute worst case output latencies */
_engine.Running.connect (mem_fun (*this, &Session::set_worst_io_latencies));
@@ -626,7 +633,7 @@ Session::when_engine_running ()
if (_click_io->set_state (*child->children().front()) == 0) {
- _clicking = click_requested;
+ _clicking = Config->get_clicking ();
} else {
@@ -644,7 +651,7 @@ Session::when_engine_running ()
if (_click_io->add_output_port (first_physical_output, this)) {
// relax, even though its an error
} else {
- _clicking = click_requested;
+ _clicking = Config->get_clicking ();
}
}
}
@@ -657,7 +664,7 @@ Session::when_engine_running ()
set_worst_io_latencies ();
if (_clicking) {
- ControlChanged (Clicking); /* EMIT SIGNAL */
+ // XXX HOW TO ALERT UI TO THIS ? DO WE NEED TO?
}
if (auditioner == 0) {
@@ -925,77 +932,13 @@ Session::record_enabling_legal () const
// return false;
// }
- if (all_safe) {
+ if (Config->get_all_safe()) {
return false;
}
return true;
}
void
-Session::set_auto_play (bool yn)
-{
- if (auto_play != yn) {
- auto_play = yn;
- set_dirty ();
- ControlChanged (AutoPlay);
- }
-}
-
-void
-Session::set_auto_return (bool yn)
-{
- if (auto_return != yn) {
- auto_return = yn;
- set_dirty ();
- ControlChanged (AutoReturn);
- }
-}
-
-void
-Session::set_crossfades_active (bool yn)
-{
- if (crossfades_active != yn) {
- crossfades_active = yn;
- set_dirty ();
- ControlChanged (CrossFadesActive);
- }
-}
-
-void
-Session::set_do_not_record_plugins (bool yn)
-{
- if (do_not_record_plugins != yn) {
- do_not_record_plugins = yn;
- set_dirty ();
- ControlChanged (RecordingPlugins);
- }
-}
-
-void
-Session::set_auto_input (bool yn)
-{
- if (auto_input != yn) {
- auto_input = yn;
-
- if (Config->get_use_hardware_monitoring() && transport_rolling()) {
- /* auto-input only makes a difference if we're rolling */
-
- boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
-
- for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
- if ((*i)->record_enabled ()) {
- //cerr << "switching to input = " << !auto_input << __FILE__ << __LINE__ << endl << endl;
- (*i)->monitor_input (!auto_input);
- }
- }
- }
-
- set_dirty();
- ControlChanged (AutoInput);
- }
-}
-
-void
Session::reset_input_monitor_state ()
{
if (transport_rolling()) {
@@ -1005,7 +948,7 @@ Session::reset_input_monitor_state ()
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
if ((*i)->record_enabled ()) {
//cerr << "switching to input = " << !auto_input << __FILE__ << __LINE__ << endl << endl;
- (*i)->monitor_input (Config->get_use_hardware_monitoring() && !auto_input);
+ (*i)->monitor_input (Config->get_monitoring_model() == HardwareMonitoring && !Config->get_auto_input());
}
}
} else {
@@ -1013,44 +956,19 @@ Session::reset_input_monitor_state ()
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
if ((*i)->record_enabled ()) {
- //cerr << "switching to input = " << !auto_input << __FILE__ << __LINE__ << endl << endl;
- (*i)->monitor_input (Config->get_use_hardware_monitoring());
+ //cerr << "switching to input = " << !Config->get_auto_input() << __FILE__ << __LINE__ << endl << endl;
+ (*i)->monitor_input (Config->get_monitoring_model() == HardwareMonitoring);
}
}
}
}
-
-void
-Session::set_input_auto_connect (bool yn)
-{
- if (yn) {
- input_auto_connect = AutoConnectOption (input_auto_connect|AutoConnectPhysical);
- } else {
- input_auto_connect = AutoConnectOption (input_auto_connect|~AutoConnectPhysical);
- }
- set_dirty ();
-}
-
-bool
-Session::get_input_auto_connect () const
-{
- return (input_auto_connect & AutoConnectPhysical);
-}
-
-void
-Session::set_output_auto_connect (AutoConnectOption aco)
-{
- output_auto_connect = aco;
- set_dirty ();
-}
-
void
Session::auto_punch_start_changed (Location* location)
{
replace_event (Event::PunchIn, location->start());
- if (get_record_enabled() && get_punch_in()) {
+ if (get_record_enabled() && Config->get_punch_in()) {
/* capture start has been changed, so save new pending state */
save_state ("", true);
}
@@ -1059,7 +977,7 @@ Session::auto_punch_start_changed (Location* location)
void
Session::auto_punch_end_changed (Location* location)
{
- jack_nframes_t when_to_stop = location->end();
+ nframes_t when_to_stop = location->end();
// when_to_stop += _worst_output_latency + _worst_input_latency;
replace_event (Event::PunchOut, when_to_stop);
}
@@ -1067,7 +985,7 @@ Session::auto_punch_end_changed (Location* location)
void
Session::auto_punch_changed (Location* location)
{
- jack_nframes_t when_to_stop = location->end();
+ nframes_t when_to_stop = location->end();
replace_event (Event::PunchIn, location->start());
//when_to_stop += _worst_output_latency + _worst_input_latency;
@@ -1079,7 +997,7 @@ Session::auto_loop_changed (Location* location)
{
replace_event (Event::AutoLoop, location->end(), location->start());
- if (transport_rolling() && get_auto_loop()) {
+ if (transport_rolling() && play_loop) {
//if (_transport_frame < location->start() || _transport_frame > location->end()) {
@@ -1090,7 +1008,7 @@ Session::auto_loop_changed (Location* location)
request_locate (location->start(), true);
}
- else if (seamless_loop && !loop_changing) {
+ else if (Config->get_seamless_loop() && !loop_changing) {
// schedule a locate-roll to refill the diskstreams at the
// previous loop end
@@ -1148,48 +1066,6 @@ Session::set_auto_punch_location (Location* location)
}
void
-Session::set_punch_in (bool yn)
-{
- if (punch_in == yn) {
- return;
- }
-
- Location* location;
-
- if ((location = _locations.auto_punch_location()) != 0) {
- if ((punch_in = yn) == true) {
- replace_event (Event::PunchIn, location->start());
- } else {
- remove_event (location->start(), Event::PunchIn);
- }
- }
-
- set_dirty();
- ControlChanged (PunchIn); /* EMIT SIGNAL */
-}
-
-void
-Session::set_punch_out (bool yn)
-{
- if (punch_out == yn) {
- return;
- }
-
- Location* location;
-
- if ((location = _locations.auto_punch_location()) != 0) {
- if ((punch_out = yn) == true) {
- replace_event (Event::PunchOut, location->end());
- } else {
- clear_events (Event::PunchOut);
- }
- }
-
- set_dirty();
- ControlChanged (PunchOut); /* EMIT SIGNAL */
-}
-
-void
Session::set_auto_loop_location (Location* location)
{
Location* existing;
@@ -1282,7 +1158,7 @@ Session::enable_record ()
_last_record_location = _transport_frame;
deliver_mmc(MIDI::MachineControl::cmdRecordStrobe, _last_record_location);
- if (Config->get_use_hardware_monitoring() && auto_input) {
+ if (Config->get_monitoring_model() == HardwareMonitoring && Config->get_auto_input()) {
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
if ((*i)->record_enabled ()) {
@@ -1316,7 +1192,7 @@ Session::disable_record (bool rt_context, bool force)
if (rt_context)
deliver_mmc (MIDI::MachineControl::cmdRecordExit, _transport_frame);
- if (Config->get_use_hardware_monitoring() && auto_input) {
+ if (Config->get_monitoring_model() == HardwareMonitoring && Config->get_auto_input()) {
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
@@ -1339,11 +1215,11 @@ Session::step_back_from_record ()
{
g_atomic_int_set (&_record_status, Enabled);
- if (Config->get_use_hardware_monitoring()) {
+ if (Config->get_monitoring_model() == HardwareMonitoring) {
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
- if (auto_input && (*i)->record_enabled ()) {
+ if (Config->get_auto_input() && (*i)->record_enabled ()) {
//cerr << "switching from input" << __FILE__ << __LINE__ << endl << endl;
(*i)->monitor_input (false);
}
@@ -1356,14 +1232,14 @@ Session::maybe_enable_record ()
{
g_atomic_int_set (&_record_status, Enabled);
- /* XXX this save should really happen in another thread. its needed so that
- pending capture state can be recovered if we crash.
+ /* this function is currently called from somewhere other than an RT thread.
+ this save_state() call therefore doesn't impact anything.
*/
save_state ("", true);
if (_transport_speed) {
- if (!punch_in) {
+ if (!Config->get_punch_in()) {
enable_record ();
}
} else {
@@ -1374,12 +1250,12 @@ Session::maybe_enable_record ()
set_dirty();
}
-jack_nframes_t
+nframes_t
Session::audible_frame () const
{
- jack_nframes_t ret;
- jack_nframes_t offset;
- jack_nframes_t tf;
+ nframes_t ret;
+ nframes_t offset;
+ nframes_t tf;
/* the first of these two possible settings for "offset"
mean that the audible frame is stationary until
@@ -1433,9 +1309,9 @@ Session::audible_frame () const
}
void
-Session::set_frame_rate (jack_nframes_t frames_per_second)
+Session::set_frame_rate (nframes_t frames_per_second)
{
- /** \fn void Session::set_frame_size(jack_nframes_t)
+ /** \fn void Session::set_frame_size(nframes_t)
the AudioEngine object that calls this guarantees
that it will not be called while we are also in
::process(). Its fine to do things that block
@@ -1446,8 +1322,6 @@ Session::set_frame_rate (jack_nframes_t frames_per_second)
sync_time_vars();
- Route::set_automation_interval ((jack_nframes_t) ceil ((double) frames_per_second * 0.25));
-
// XXX we need some equivalent to this, somehow
// DestructiveFileSource::setup_standard_crossfades (frames_per_second);
@@ -1457,7 +1331,7 @@ Session::set_frame_rate (jack_nframes_t frames_per_second)
}
void
-Session::set_block_size (jack_nframes_t nframes)
+Session::set_block_size (nframes_t nframes)
{
/* the AudioEngine guarantees
that it will not be called while we are also in
@@ -1497,7 +1371,7 @@ void
Session::set_default_fade (float steepness, float fade_msecs)
{
#if 0
- jack_nframes_t fade_frames;
+ nframes_t fade_frames;
/* Don't allow fade of less 1 frame */
@@ -1508,7 +1382,7 @@ Session::set_default_fade (float steepness, float fade_msecs)
} else {
- fade_frames = (jack_nframes_t) floor (fade_msecs * _current_frame_rate * 0.001);
+ fade_frames = (nframes_t) floor (fade_msecs * _current_frame_rate * 0.001);
}
@@ -1799,13 +1673,13 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
} while (track_id < (UINT_MAX-1));
- if (input_auto_connect & AutoConnectPhysical) {
+ if (Config->get_input_auto_connect() & AutoConnectPhysical) {
nphysical_in = min (n_physical_inputs, (uint32_t) physinputs.size());
} else {
nphysical_in = 0;
}
- if (output_auto_connect & AutoConnectPhysical) {
+ if (Config->get_output_auto_connect() & AutoConnectPhysical) {
nphysical_out = min (n_physical_outputs, (uint32_t) physinputs.size());
} else {
nphysical_out = 0;
@@ -1825,7 +1699,7 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
port = "";
- if (input_auto_connect & AutoConnectPhysical) {
+ if (Config->get_input_auto_connect() & AutoConnectPhysical) {
port = physinputs[(channels_used+x)%nphysical_in];
}
@@ -1839,9 +1713,9 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
port = "";
- if (nphysical_out && (output_auto_connect & AutoConnectPhysical)) {
+ if (nphysical_out && (Config->get_output_auto_connect() & AutoConnectPhysical)) {
port = physoutputs[(channels_used+x)%nphysical_out];
- } else if (output_auto_connect & AutoConnectMaster) {
+ } else if (Config->get_output_auto_connect() & AutoConnectMaster) {
if (_master_out) {
port = _master_out->input (x%_master_out->n_inputs().get(DataType::AUDIO))->name();
}
@@ -1945,7 +1819,7 @@ Session::new_audio_route (int input_channels, int output_channels, uint32_t how_
port = "";
- if (input_auto_connect & AutoConnectPhysical) {
+ if (Config->get_input_auto_connect() & AutoConnectPhysical) {
port = physinputs[((n+x)%n_physical_inputs)];
}
@@ -1958,9 +1832,9 @@ Session::new_audio_route (int input_channels, int output_channels, uint32_t how_
port = "";
- if (output_auto_connect & AutoConnectPhysical) {
+ if (Config->get_output_auto_connect() & AutoConnectPhysical) {
port = physoutputs[((n+x)%n_physical_outputs)];
- } else if (output_auto_connect & AutoConnectMaster) {
+ } else if (Config->get_output_auto_connect() & AutoConnectMaster) {
if (_master_out) {
port = _master_out->input (x%_master_out->n_inputs().get(DataType::AUDIO))->name();
}
@@ -2014,7 +1888,10 @@ Session::add_routes (RouteList& new_routes, bool save)
}
for (RouteList::iterator x = new_routes.begin(); x != new_routes.end(); ++x) {
- (*x)->solo_changed.connect (sigc::bind (mem_fun (*this, &Session::route_solo_changed), (*x)));
+
+ boost::weak_ptr<Route> wpr (*x);
+
+ (*x)->solo_changed.connect (sigc::bind (mem_fun (*this, &Session::route_solo_changed), wpr));
(*x)->mute_changed.connect (mem_fun (*this, &Session::route_mute_changed));
(*x)->output_changed.connect (mem_fun (*this, &Session::set_worst_io_latencies_x));
(*x)->redirects_changed.connect (mem_fun (*this, &Session::update_latency_compensation_proxy));
@@ -2072,11 +1949,11 @@ Session::remove_route (shared_ptr<Route> route)
*/
if (route == _master_out) {
- _master_out = shared_ptr<Route> ((Route*) 0);
+ _master_out = shared_ptr<Route> ();
}
if (route == _control_out) {
- _control_out = shared_ptr<Route> ((Route*) 0);
+ _control_out = shared_ptr<Route> ();
/* cancel control outs for all routes */
@@ -2112,14 +1989,26 @@ Session::remove_route (shared_ptr<Route> route)
update_latency_compensation (false, false);
set_dirty();
+
+ // We need to disconnect the routes inputs and outputs
+ route->disconnect_inputs(NULL);
+ route->disconnect_outputs(NULL);
- /* XXX should we disconnect from the Route's signals ? */
+ /* get rid of it from the dead wood collection in the route list manager */
+
+ /* XXX i think this is unsafe as it currently stands, but i am not sure. (pd, october 2nd, 2006) */
- save_state (_current_snapshot_name);
+ routes.flush ();
/* try to cause everyone to drop their references */
route->drop_references ();
+
+ /* save the new state of the world */
+
+ if (save_state (_current_snapshot_name)) {
+ save_history (_current_snapshot_name);
+ }
}
void
@@ -2129,7 +2018,7 @@ Session::route_mute_changed (void* src)
}
void
-Session::route_solo_changed (void* src, shared_ptr<Route> route)
+Session::route_solo_changed (void* src, boost::weak_ptr<Route> wpr)
{
if (solo_update_disabled) {
// We know already
@@ -2137,8 +2026,15 @@ Session::route_solo_changed (void* src, shared_ptr<Route> route)
}
bool is_track;
-
- is_track = (dynamic_cast<Track*>(route.get()) != 0);
+ boost::shared_ptr<Route> route = wpr.lock ();
+
+ if (!route) {
+ /* should not happen */
+ error << string_compose (_("programming error: %1"), X_("invalid route weak ptr passed to route_solo_changed")) << endmsg;
+ return;
+ }
+
+ is_track = (boost::dynamic_pointer_cast<AudioTrack>(route) != 0);
shared_ptr<RouteList> r = routes.reader ();
@@ -2174,7 +2070,7 @@ Session::route_solo_changed (void* src, shared_ptr<Route> route)
then leave it as it is.
*/
- if (_solo_latched) {
+ if (Config->get_solo_latched()) {
continue;
}
}
@@ -2224,16 +2120,6 @@ Session::route_solo_changed (void* src, shared_ptr<Route> route)
}
void
-Session::set_solo_latched (bool yn)
-{
- if (yn != _solo_latched) {
- _solo_latched = yn;
- set_dirty ();
- ControlChanged (SoloLatch);
- }
-}
-
-void
Session::update_route_solo_state ()
{
bool mute = false;
@@ -2392,7 +2278,7 @@ Session::find_current_end ()
return;
}
- jack_nframes_t max = get_maximum_extent ();
+ nframes_t max = get_maximum_extent ();
if (max > end_location->end()) {
end_location->set_end (max);
@@ -2401,11 +2287,11 @@ Session::find_current_end ()
}
}
-jack_nframes_t
+nframes_t
Session::get_maximum_extent () const
{
- jack_nframes_t max = 0;
- jack_nframes_t me;
+ nframes_t max = 0;
+ nframes_t me;
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
@@ -2615,15 +2501,21 @@ Session::add_region (boost::shared_ptr<Region> region)
set_dirty();
if (added) {
- region->GoingAway.connect (sigc::bind (mem_fun (*this, &Session::remove_region), region));
- region->StateChanged.connect (sigc::bind (mem_fun (*this, &Session::region_changed), region));
+ region->GoingAway.connect (sigc::bind (mem_fun (*this, &Session::remove_region), boost::weak_ptr<Region>(region)));
+ region->StateChanged.connect (sigc::bind (mem_fun (*this, &Session::region_changed), boost::weak_ptr<Region>(region)));
RegionAdded (region); /* EMIT SIGNAL */
}
}
void
-Session::region_changed (Change what_changed, boost::shared_ptr<Region> region)
+Session::region_changed (Change what_changed, boost::weak_ptr<Region> weak_region)
{
+ boost::shared_ptr<Region> region (weak_region.lock ());
+
+ if (!region) {
+ return;
+ }
+
if (what_changed & Region::HiddenChanged) {
/* relay hidden changes */
RegionHiddenChange (region);
@@ -2631,17 +2523,17 @@ Session::region_changed (Change what_changed, boost::shared_ptr<Region> region)
}
void
-Session::region_renamed (boost::shared_ptr<Region> region)
-{
- add_region (region);
-}
-
-void
-Session::remove_region (boost::shared_ptr<Region> region)
+Session::remove_region (boost::weak_ptr<Region> weak_region)
{
RegionList::iterator i;
+ boost::shared_ptr<Region> region (weak_region.lock ());
+
+ if (!region) {
+ return;
+ }
+
bool removed = false;
-
+
{
Glib::Mutex::Lock lm (region_lock);
@@ -2682,7 +2574,7 @@ Session::find_whole_file_parent (Region& child)
}
}
- return boost::shared_ptr<AudioRegion> ((AudioRegion*) 0);
+ return boost::shared_ptr<AudioRegion> ();
}
void
@@ -2795,9 +2687,11 @@ Session::remove_source (boost::weak_ptr<Source> src)
boost::shared_ptr<Source> source = src.lock();
if (!source) {
- cerr << "removing a source DEAD\n";
- } else {
- cerr << "removing a source " << source->name () << endl;
+ return;
+ }
+
+ {
+ Glib::Mutex::Lock lm (source_lock);
{
Glib::Mutex::Lock lm (source_lock);
@@ -2806,18 +2700,18 @@ Session::remove_source (boost::weak_ptr<Source> src)
sources.erase (i);
}
}
+ }
+
+ if (!_state_of_the_state & InCleanup) {
- if (!_state_of_the_state & InCleanup) {
-
- /* save state so we don't end up with a session file
- referring to non-existent sources.
- */
-
- save_state (_current_snapshot_name);
- }
+ /* save state so we don't end up with a session file
+ referring to non-existent sources.
+ */
- SourceRemoved(source); /* EMIT SIGNAL */
+ save_state (_current_snapshot_name);
}
+
+ SourceRemoved(source); /* EMIT SIGNAL */
}
boost::shared_ptr<Source>
@@ -3613,16 +3507,28 @@ Session::remove_redirect (Redirect* redirect)
set_dirty();
}
-jack_nframes_t
+nframes_t
Session::available_capture_duration ()
{
- const double scale = 4096.0 / sizeof (Sample);
+ float sample_bytes_on_disk;
+
+ switch (Config->get_native_file_data_format()) {
+ case FormatFloat:
+ sample_bytes_on_disk = 4;
+ break;
+
+ case FormatInt24:
+ sample_bytes_on_disk = 3;
+ break;
+ }
+
+ double scale = 4096.0 / sample_bytes_on_disk;
if (_total_free_4k_blocks * scale > (double) max_frames) {
return max_frames;
}
- return (jack_nframes_t) floor (_total_free_4k_blocks * scale);
+ return (nframes_t) floor (_total_free_4k_blocks * scale);
}
void
@@ -3675,23 +3581,6 @@ Session::connection_by_name (string name) const
}
void
-Session::set_edit_mode (EditMode mode)
-{
- _edit_mode = mode;
-
- {
- Glib::Mutex::Lock lm (playlist_lock);
-
- for (PlaylistList::iterator i = playlists.begin(); i != playlists.end(); ++i) {
- (*i)->set_edit_mode (mode);
- }
- }
-
- set_dirty ();
- ControlChanged (EditingMode); /* EMIT SIGNAL */
-}
-
-void
Session::tempo_map_changed (Change ignored)
{
clear_clicks ();
@@ -3816,17 +3705,7 @@ Session::n_playlists () const
}
void
-Session::set_solo_model (SoloModel sm)
-{
- if (sm != _solo_model) {
- _solo_model = sm;
- ControlChanged (SoloingModel);
- set_dirty ();
- }
-}
-
-void
-Session::allocate_pan_automation_buffers (jack_nframes_t nframes, uint32_t howmany, bool force)
+Session::allocate_pan_automation_buffers (nframes_t nframes, uint32_t howmany, bool force)
{
if (!force && howmany <= _npan_buffers) {
return;
@@ -3871,7 +3750,7 @@ Session::freeze (InterThreadInfo& itt)
}
int
-Session::write_one_audio_track (AudioTrack& track, jack_nframes_t start, jack_nframes_t len,
+Session::write_one_audio_track (AudioTrack& track, nframes_t start, nframes_t len,
bool overwrite, vector<boost::shared_ptr<Source> >& srcs, InterThreadInfo& itt)
{
boost::shared_ptr<AudioFileSource> fsource;
@@ -3888,7 +3767,7 @@ Session::write_one_audio_track (AudioTrack& track, jack_nframes_t start, jack_nf
BufferSet buffers;
// any bigger than this seems to cause stack overflows in called functions
- const jack_nframes_t chunk_size = (128 * 1024)/4;
+ const nframes_t chunk_size = (128 * 1024)/4;
g_atomic_int_set (&processing_prohibited, 1);
@@ -3939,7 +3818,7 @@ Session::write_one_audio_track (AudioTrack& track, jack_nframes_t start, jack_nf
to_do = len;
/* create a set of reasonably-sized buffers */
-buffers.ensure_buffers(nchans, chunk_size);
+ buffers.ensure_buffers(nchans, chunk_size);
buffers.set_count(nchans);
while (to_do && !itt.cancel) {
@@ -3991,7 +3870,12 @@ buffers.ensure_buffers(nchans, chunk_size);
afs->build_peaks ();
}
}
-
+
+ /* construct a region to represent the bounced material */
+
+ boost::shared_ptr<Region> aregion = RegionFactory::create (srcs, 0, srcs.front()->length(),
+ region_name_from_path (srcs.front()->name()));
+
ret = 0;
}
@@ -4077,36 +3961,6 @@ Session::nbusses () const
}
void
-Session::set_layer_model (LayerModel lm)
-{
- if (lm != layer_model) {
- layer_model = lm;
- set_dirty ();
- ControlChanged (LayeringModel);
- }
-}
-
-void
-Session::set_xfade_model (CrossfadeModel xm)
-{
- if (xm != xfade_model) {
- xfade_model = xm;
- set_dirty ();
- ControlChanged (CrossfadingModel);
- }
-}
-
-void
-Session::handle_configuration_change (const char* parameter)
-{
- if (!strcmp (parameter, "use-video-sync")) {
- if (_transport_speed == 0.0f) {
- waiting_for_sync_offset = true;
- }
- }
-}
-
-void
Session::add_curve(Curve *curve)
{
curves[curve->id()] = curve;
diff --git a/libs/ardour/session_click.cc b/libs/ardour/session_click.cc
index e04bb61c30..5fd6d70983 100644
--- a/libs/ardour/session_click.cc
+++ b/libs/ardour/session_click.cc
@@ -38,7 +38,7 @@ using namespace PBD;
Pool Session::Click::pool ("click", sizeof (Click), 128);
void
-Session::click (jack_nframes_t start, jack_nframes_t nframes, jack_nframes_t offset)
+Session::click (nframes_t start, nframes_t nframes, nframes_t offset)
{
TempoMap::BBTPointList *points;
Sample *buf;
@@ -90,8 +90,8 @@ Session::click (jack_nframes_t start, jack_nframes_t nframes, jack_nframes_t off
for (list<Click*>::iterator i = clicks.begin(); i != clicks.end(); ) {
- jack_nframes_t copy;
- jack_nframes_t internal_offset;
+ nframes_t copy;
+ nframes_t internal_offset;
Click *clk;
list<Click*>::iterator next;
@@ -145,17 +145,19 @@ Session::setup_click_sounds (int which)
click_data = 0;
}
- if (click_sound.length() == 0) {
+ string path = Config->get_click_emphasis_sound();
+
+ if (path.empty()) {
click_data = const_cast<Sample*> (default_click);
click_length = default_click_length;
} else {
- if ((sndfile = sf_open (click_sound.c_str(), SFM_READ, &info)) == 0) {
+ if ((sndfile = sf_open (path.c_str(), SFM_READ, &info)) == 0) {
char errbuf[256];
sf_error_str (0, errbuf, sizeof (errbuf) - 1);
- warning << string_compose (_("cannot open click soundfile %1 (%2)"), click_sound, errbuf) << endmsg;
+ warning << string_compose (_("cannot open click soundfile %1 (%2)"), path, errbuf) << endmsg;
_clicking = false;
return;
}
@@ -182,14 +184,16 @@ Session::setup_click_sounds (int which)
click_emphasis_data = 0;
}
- if (click_emphasis_sound.length() == 0) {
+ string path = Config->get_click_emphasis_sound();
+
+ if (path.empty()) {
click_emphasis_data = const_cast<Sample*> (default_click_emphasis);
click_emphasis_length = default_click_emphasis_length;
} else {
- if ((sndfile = sf_open (click_emphasis_sound.c_str(), SFM_READ, &info)) == 0) {
+ if ((sndfile = sf_open (path.c_str(), SFM_READ, &info)) == 0) {
char errbuf[256];
sf_error_str (0, errbuf, sizeof (errbuf) - 1);
- warning << string_compose (_("cannot open click emphasis soundfile %1 (%2)"), click_emphasis_sound, errbuf) << endmsg;
+ warning << string_compose (_("cannot open click emphasis soundfile %1 (%2)"), path, errbuf) << endmsg;
return;
}
@@ -218,46 +222,3 @@ Session::clear_clicks ()
clicks.clear ();
}
-
-void
-Session::set_click_sound (string path)
-{
- if (path != click_sound) {
- click_sound = path;
- setup_click_sounds (1);
- }
-}
-
-void
-Session::set_click_emphasis_sound (string path)
-{
- if (path != click_emphasis_sound) {
- click_emphasis_sound = path;
- setup_click_sounds (-1);
- }
-}
-
-void
-Session::set_clicking (bool yn)
-{
- if (click_requested != yn) {
- click_requested = yn;
-
- if (yn) {
- if (_click_io && click_data) {
- _clicking = true;
- }
- } else {
- _clicking = false;
- }
-
- ControlChanged (Clicking); /* EMIT SIGNAL */
- }
-}
-
-bool
-Session::get_clicking () const
-{
- return click_requested;
-}
-
diff --git a/libs/ardour/session_events.cc b/libs/ardour/session_events.cc
index 9b6313fff3..dc7eabf40f 100644
--- a/libs/ardour/session_events.cc
+++ b/libs/ardour/session_events.cc
@@ -59,21 +59,21 @@ static const char* event_names[] = {
};
void
-Session::add_event (jack_nframes_t frame, Event::Type type, jack_nframes_t target_frame)
+Session::add_event (nframes_t frame, Event::Type type, nframes_t target_frame)
{
Event* ev = new Event (type, Event::Add, frame, target_frame, 0);
queue_event (ev);
}
void
-Session::remove_event (jack_nframes_t frame, Event::Type type)
+Session::remove_event (nframes_t frame, Event::Type type)
{
Event* ev = new Event (type, Event::Remove, frame, 0, 0);
queue_event (ev);
}
void
-Session::replace_event (Event::Type type, jack_nframes_t frame, jack_nframes_t target)
+Session::replace_event (Event::Type type, nframes_t frame, nframes_t target)
{
Event* ev = new Event (type, Event::Replace, frame, target, 0);
queue_event (ev);
@@ -314,7 +314,15 @@ Session::process_event (Event* ev)
switch (ev->type) {
case Event::SetLoop:
- set_auto_loop (ev->yes_or_no);
+ set_play_loop (ev->yes_or_no);
+ break;
+
+ case Event::AutoLoop:
+ if (play_loop) {
+ start_locate (ev->target_frame, true, false, Config->get_seamless_loop());
+ }
+ remove = false;
+ del = false;
break;
case Event::Locate:
@@ -345,7 +353,7 @@ Session::process_event (Event* ev)
case Event::PunchIn:
// cerr << "PunchIN at " << transport_frame() << endl;
- if (punch_in && record_status() == Enabled) {
+ if (Config->get_punch_in() && record_status() == Enabled) {
enable_record ();
}
remove = false;
@@ -354,7 +362,7 @@ Session::process_event (Event* ev)
case Event::PunchOut:
// cerr << "PunchOUT at " << transport_frame() << endl;
- if (punch_out) {
+ if (Config->get_punch_out()) {
step_back_from_record ();
}
remove = false;
@@ -384,14 +392,6 @@ Session::process_event (Event* ev)
del = false;
break;
- case Event::AutoLoop:
- if (auto_loop) {
- start_locate (ev->target_frame, true, false, seamless_loop);
- }
- remove = false;
- del = false;
- break;
-
case Event::Overwrite:
overwrite_some_buffers (static_cast<AudioDiskstream*>(ev->ptr));
break;
@@ -401,7 +401,7 @@ Session::process_event (Event* ev)
break;
case Event::SetSlaveSource:
- set_slave_source (ev->slave, ev->target_frame);
+ set_slave_source (ev->slave);
break;
case Event::Audition:
diff --git a/libs/ardour/session_export.cc b/libs/ardour/session_export.cc
index 946d825c1c..6902a426c3 100644
--- a/libs/ardour/session_export.cc
+++ b/libs/ardour/session_export.cc
@@ -154,7 +154,7 @@ AudioExportSpecification::clear ()
}
int
-AudioExportSpecification::prepare (jack_nframes_t blocksize, jack_nframes_t frate)
+AudioExportSpecification::prepare (nframes_t blocksize, nframes_t frate)
{
char errbuf[256];
GDitherSize dither_size;
@@ -217,7 +217,7 @@ AudioExportSpecification::prepare (jack_nframes_t blocksize, jack_nframes_t frat
}
src_data.src_ratio = sample_rate / (double) frame_rate;
- out_samples_max = (jack_nframes_t) ceil (blocksize * src_data.src_ratio * channels);
+ out_samples_max = (nframes_t) ceil (blocksize * src_data.src_ratio * channels);
dataF2 = new float[out_samples_max];
max_leftover_frames = 4 * blocksize;
@@ -259,7 +259,7 @@ AudioExportSpecification::prepare (jack_nframes_t blocksize, jack_nframes_t frat
}
int
-AudioExportSpecification::process (jack_nframes_t nframes)
+AudioExportSpecification::process (nframes_t nframes)
{
float* float_buffer = 0;
uint32_t chn;
@@ -267,7 +267,7 @@ AudioExportSpecification::process (jack_nframes_t nframes)
uint32_t i;
sf_count_t written;
char errbuf[256];
- jack_nframes_t to_write = 0;
+ nframes_t to_write = 0;
int cnt = 0;
do {
@@ -414,7 +414,7 @@ AudioExportSpecification::process (jack_nframes_t nframes)
break;
}
- if ((jack_nframes_t) written != to_write) {
+ if ((nframes_t) written != to_write) {
sf_error_str (out, errbuf, sizeof (errbuf) - 1);
error << string_compose(_("Export: could not write data to output file (%1)"), errbuf) << endmsg;
return -1;
@@ -463,7 +463,7 @@ Session::stop_audio_export (AudioExportSpecification& spec)
/* restart slaving */
if (post_export_slave != None) {
- set_slave_source (post_export_slave, post_export_position);
+ Config->set_slave_source (post_export_slave);
} else {
locate (post_export_position, false, false, false);
}
@@ -518,10 +518,10 @@ Session::prepare_to_export (AudioExportSpecification& spec)
/* no slaving */
- post_export_slave = _slave_type;
+ post_export_slave = Config->get_slave_source ();
post_export_position = _transport_frame;
- set_slave_source (None, 0);
+ Config->set_slave_source (None);
/* get transport ready */
@@ -539,12 +539,12 @@ Session::prepare_to_export (AudioExportSpecification& spec)
}
int
-Session::process_export (jack_nframes_t nframes, AudioExportSpecification* spec)
+Session::process_export (nframes_t nframes, AudioExportSpecification* spec)
{
uint32_t chn;
uint32_t x;
int ret = -1;
- jack_nframes_t this_nframes;
+ nframes_t this_nframes;
/* This is not required to be RT-safe because we are running while freewheeling */
diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc
index d7cdd94b2b..b3a5ec6e01 100644
--- a/libs/ardour/session_midi.cc
+++ b/libs/ardour/session_midi.cc
@@ -86,114 +86,10 @@ Session::use_config_midi_ports ()
MTC, MMC, etc.
**********************************************************************/
-void
-Session::set_mmc_control (bool yn)
-{
-#if 0
- if (mmc_control == yn) {
- return;
- }
-
- mmc_control = yn;
- set_dirty();
- poke_midi_thread ();
-#endif
- ControlChanged (MMCControl); /* EMIT SIGNAL */
-}
-
-void
-Session::set_midi_control (bool yn)
-{
-#if 0
- if (midi_control == yn) {
- return;
- }
-
- midi_control = yn;
- set_dirty();
- poke_midi_thread ();
-#endif
- ControlChanged (MidiControl); /* EMIT SIGNAL */
-}
-
-void
-Session::set_send_mtc (bool yn)
-{
- /* set the persistent option value regardless */
-
- send_midi_timecode = yn;
- set_dirty();
-
- /* only set the internal flag if we have
- a port.
- */
-
- if (_mtc_port == 0 || send_mtc == yn) {
- return;
- }
-
- send_mtc = yn;
- ControlChanged (SendMTC); /* EMIT SIGNAL */
-}
-
-void
-Session::set_send_mmc (bool yn)
-{
- cerr << "set send mmc " << yn << endl;
-
- if (_mmc_port == 0) {
- cerr << "\tno 1\n";
- return;
- }
-
- if (send_midi_machine_control == yn) {
- cerr << "\tno 2\n";
- return;
- }
-
- /* only set the internal flag if we have
- a port.
- */
-
- if (_mmc_port) {
- cerr << "\tyes\n";
- send_mmc = yn;
- }
-
- /* set the persistent option value regardless */
-
- send_midi_machine_control = yn;
- set_dirty();
-
- ControlChanged (SendMMC); /* EMIT SIGNAL */
-}
-
-void
-Session::set_midi_feedback (bool yn)
-{
-}
-
-bool
-Session::get_midi_feedback () const
-{
- return false;
-}
-
-bool
-Session::get_send_mtc () const
-{
- return send_mtc;
-}
-
-bool
-Session::get_send_mmc () const
-{
- return send_mmc;
-}
-
int
Session::set_mtc_port (string port_tag)
{
+#if 0
MTC_Slave *ms;
if (port_tag.length() == 0) {
@@ -227,6 +123,7 @@ Session::set_mtc_port (string port_tag)
Config->set_mtc_port_name (port_tag);
out:
+ #endif
MTC_PortChanged(); /* EMIT SIGNAL */
change_midi_ports ();
set_dirty();
@@ -236,6 +133,7 @@ Session::set_mtc_port (string port_tag)
int
Session::set_mmc_port (string port_tag)
{
+#if 0
if (port_tag.length() == 0) {
if (_mmc_port == 0) {
return 0;
@@ -295,8 +193,8 @@ Session::set_mmc_port (string port_tag)
_mmc_port->input()->stop.connect (mem_fun (*this, &Session::spp_stop));
Config->set_mmc_port_name (port_tag);
-
out:
+#endif
MMC_PortChanged(); /* EMIT SIGNAL */
change_midi_ports ();
set_dirty();
@@ -306,6 +204,7 @@ Session::set_mmc_port (string port_tag)
int
Session::set_midi_port (string port_tag)
{
+#if 0
if (port_tag.length() == 0) {
if (_midi_port == 0) {
return 0;
@@ -329,6 +228,7 @@ Session::set_midi_port (string port_tag)
Config->set_midi_port_name (port_tag);
out:
+#endif
MIDI_PortChanged(); /* EMIT SIGNAL */
change_midi_ports ();
set_dirty();
@@ -338,6 +238,7 @@ Session::set_midi_port (string port_tag)
void
Session::set_trace_midi_input (bool yn, MIDI::Port* port)
{
+#if 0
MIDI::Parser* input_parser;
if (port) {
@@ -364,6 +265,7 @@ Session::set_trace_midi_input (bool yn, MIDI::Port* port)
}
}
}
+#endif
Config->set_trace_midi_input (yn);
}
@@ -371,6 +273,7 @@ Session::set_trace_midi_input (bool yn, MIDI::Port* port)
void
Session::set_trace_midi_output (bool yn, MIDI::Port* port)
{
+#if 0
MIDI::Parser* output_parser;
if (port) {
@@ -397,6 +300,7 @@ Session::set_trace_midi_output (bool yn, MIDI::Port* port)
}
}
+#endif
Config->set_trace_midi_output (yn);
}
@@ -404,6 +308,7 @@ Session::set_trace_midi_output (bool yn, MIDI::Port* port)
bool
Session::get_trace_midi_input(MIDI::Port *port)
{
+#if 0
MIDI::Parser* input_parser;
if (port) {
if ((input_parser = port->input()) != 0) {
@@ -429,6 +334,7 @@ Session::get_trace_midi_input(MIDI::Port *port)
}
}
}
+#endif
return false;
}
@@ -436,6 +342,7 @@ Session::get_trace_midi_input(MIDI::Port *port)
bool
Session::get_trace_midi_output(MIDI::Port *port)
{
+#if 0
MIDI::Parser* output_parser;
if (port) {
if ((output_parser = port->output()) != 0) {
@@ -461,6 +368,7 @@ Session::get_trace_midi_output(MIDI::Port *port)
}
}
}
+#endif
return false;
@@ -492,21 +400,20 @@ Session::setup_midi_control ()
if (_mmc_port != 0) {
- send_mmc = send_midi_machine_control;
+ Config->set_send_mmc (session_send_mmc);
} else {
mmc = 0;
- send_mmc = false;
+ session_send_mmc = false;
}
if (_mtc_port != 0) {
- send_mtc = send_midi_timecode;
+ Config->set_send_mtc (session_send_mtc);
} else {
-
- send_mtc = false;
+ session_send_mtc = false;
}
}
@@ -553,7 +460,7 @@ Session::midi_read (MIDI::Port* port)
void
Session::spp_start (Parser& ignored)
{
- if (mmc_control && (_slave_type != MTC)) {
+ if (Config->get_mmc_control() && (Config->get_slave_source() != MTC)) {
request_transport_speed (1.0);
}
}
@@ -567,7 +474,7 @@ Session::spp_continue (Parser& ignored)
void
Session::spp_stop (Parser& ignored)
{
- if (mmc_control) {
+ if (Config->get_mmc_control()) {
request_stop ();
}
}
@@ -575,7 +482,7 @@ Session::spp_stop (Parser& ignored)
void
Session::mmc_deferred_play (MIDI::MachineControl &mmc)
{
- if (mmc_control && (_slave_type != MTC)) {
+ if (Config->get_mmc_control() && (Config->get_slave_source() != MTC)) {
request_transport_speed (1.0);
}
}
@@ -583,7 +490,7 @@ Session::mmc_deferred_play (MIDI::MachineControl &mmc)
void
Session::mmc_record_pause (MIDI::MachineControl &mmc)
{
- if (mmc_control) {
+ if (Config->get_mmc_control()) {
maybe_enable_record();
}
}
@@ -591,7 +498,7 @@ Session::mmc_record_pause (MIDI::MachineControl &mmc)
void
Session::mmc_record_strobe (MIDI::MachineControl &mmc)
{
- if (!mmc_control)
+ if (!Config->get_mmc_control())
return;
/* record strobe does an implicit "Play" command */
@@ -619,7 +526,7 @@ Session::mmc_record_strobe (MIDI::MachineControl &mmc)
void
Session::mmc_record_exit (MIDI::MachineControl &mmc)
{
- if (mmc_control) {
+ if (Config->get_mmc_control()) {
disable_record (false);
}
}
@@ -627,7 +534,7 @@ Session::mmc_record_exit (MIDI::MachineControl &mmc)
void
Session::mmc_stop (MIDI::MachineControl &mmc)
{
- if (mmc_control) {
+ if (Config->get_mmc_control()) {
request_stop ();
}
}
@@ -635,7 +542,7 @@ Session::mmc_stop (MIDI::MachineControl &mmc)
void
Session::mmc_pause (MIDI::MachineControl &mmc)
{
- if (mmc_control) {
+ if (Config->get_mmc_control()) {
/* We support RECORD_PAUSE, so the spec says that
we must interpret PAUSE like RECORD_PAUSE if
@@ -655,7 +562,7 @@ static bool step_queued = false;
void
Session::mmc_step (MIDI::MachineControl &mmc, int steps)
{
- if (!mmc_control) {
+ if (!Config->get_mmc_control()) {
return;
}
@@ -674,7 +581,7 @@ Session::mmc_step (MIDI::MachineControl &mmc, int steps)
}
double diff_secs = diff.tv_sec + (diff.tv_usec / 1000000.0);
- double cur_speed = (((steps * 0.5) * smpte_frames_per_second) / diff_secs) / smpte_frames_per_second;
+ double cur_speed = (((steps * 0.5) * Config->get_smpte_frames_per_second()) / diff_secs) / Config->get_smpte_frames_per_second();
if (_transport_speed == 0 || cur_speed * _transport_speed < 0) {
/* change direction */
@@ -706,7 +613,7 @@ Session::mmc_step (MIDI::MachineControl &mmc, int steps)
void
Session::mmc_rewind (MIDI::MachineControl &mmc)
{
- if (mmc_control) {
+ if (Config->get_mmc_control()) {
request_transport_speed(-8.0f);
}
}
@@ -714,7 +621,7 @@ Session::mmc_rewind (MIDI::MachineControl &mmc)
void
Session::mmc_fast_forward (MIDI::MachineControl &mmc)
{
- if (mmc_control) {
+ if (Config->get_mmc_control()) {
request_transport_speed(8.0f);
}
}
@@ -722,11 +629,11 @@ Session::mmc_fast_forward (MIDI::MachineControl &mmc)
void
Session::mmc_locate (MIDI::MachineControl &mmc, const MIDI::byte* mmc_tc)
{
- if (!mmc_control) {
+ if (!Config->get_mmc_control()) {
return;
}
- jack_nframes_t target_frame;
+ nframes_t target_frame;
SMPTE::Time smpte;
smpte.hours = mmc_tc[0] & 0xf;
@@ -761,18 +668,14 @@ Session::mmc_locate (MIDI::MachineControl &mmc, const MIDI::byte* mmc_tc)
void
Session::mmc_shuttle (MIDI::MachineControl &mmc, float speed, bool forw)
{
- cerr << "MMC shuttle, speed = " << speed << endl;
-
- if (!mmc_control) {
+ if (!Config->get_mmc_control()) {
return;
}
- if (shuttle_speed_threshold >= 0 && speed > shuttle_speed_threshold) {
- speed *= shuttle_speed_factor;
+ if (Config->get_shuttle_speed_threshold() >= 0 && speed > Config->get_shuttle_speed_threshold()) {
+ speed *= Config->get_shuttle_speed_factor();
}
- cerr << "requested MMC control speed = " << speed << endl;
-
if (forw) {
request_transport_speed (speed);
} else {
@@ -783,7 +686,7 @@ Session::mmc_shuttle (MIDI::MachineControl &mmc, float speed, bool forw)
void
Session::mmc_record_enable (MIDI::MachineControl &mmc, size_t trk, bool enabled)
{
- if (mmc_control) {
+ if (Config->get_mmc_control()) {
RouteList::iterator i;
boost::shared_ptr<RouteList> r = routes.reader();
@@ -832,7 +735,7 @@ Session::send_full_time_code(jack_nframes_t nframes)
_send_smpte_update = false;
- if (_mtc_port == 0 || !send_mtc) {
+ if (_mtc_port == 0 || !session_send_mtc) {
return 0;
}
@@ -897,7 +800,7 @@ Session::send_midi_time_code_for_cycle(jack_nframes_t nframes)
printf("Negative????\n");
}
- if (_mtc_port == 0 || !send_mtc || transmitting_smpte_time.negative
+ if (_mtc_port == 0 || !session_send_mtc || transmitting_smpte_time.negative
/*|| (next_quarter_frame_to_send < 0)*/ ) {
//printf("(MTC) Not sending MTC\n");
return 0;
@@ -996,11 +899,11 @@ Session::send_midi_time_code_for_cycle(jack_nframes_t nframes)
**********************************************************************/
/*
void
-Session::send_mmc_in_another_thread (MIDI::MachineControl::Command cmd, jack_nframes_t target_frame)
+Session::send_mmc_in_another_thread (MIDI::MachineControl::Command cmd, nframes_t target_frame)
{
MIDIRequest* request;
- if (_mtc_port == 0 || !send_mmc) {
+ if (_mtc_port == 0 || !session_send_mmc) {
return;
}
@@ -1020,13 +923,13 @@ Session::send_mmc_in_another_thread (MIDI::MachineControl::Command cmd, jack_nfr
* this process cycle or horrible things will happen.
*/
void
-Session::deliver_mmc (MIDI::MachineControl::Command cmd, jack_nframes_t where)
+Session::deliver_mmc (MIDI::MachineControl::Command cmd, nframes_t where)
{
using namespace MIDI;
int nbytes = 4;
SMPTE::Time smpte;
- if (_mmc_port == 0 || !send_mmc) {
+ if (_mmc_port == 0 || !session_send_mmc) {
//cerr << "Not delivering MMC " << _mmc_port << " - " << send_mmc << endl;
return;
}
@@ -1236,7 +1139,7 @@ Session::terminate_midi_thread ()
void
Session::poke_midi_thread ()
{
- char c;
+ static char c = 0;
if (write (midi_request_pipe[1], &c, 1) != 1) {
error << string_compose(_("cannot send signal to midi thread! (%1)"), strerror (errno)) << endmsg;
@@ -1294,7 +1197,7 @@ Session::midi_thread_work ()
on the appropriate port.
*/
- if (mmc_control && _mmc_port && _mmc_port->selectable() >= 0) {
+ if (Config->get_mmc_control() && _mmc_port && _mmc_port->selectable() >= 0) {
pfd[nfds].fd = _mmc_port->selectable();
pfd[nfds].events = POLLIN|POLLHUP|POLLERR;
ports[nfds] = _mmc_port;
@@ -1306,14 +1209,14 @@ Session::midi_thread_work ()
the relevant port.
*/
- if (_mtc_port && (_mtc_port != _mmc_port || !mmc_control) && _mtc_port->selectable() >= 0) {
+ if (_mtc_port && (_mtc_port != _mmc_port || !Config->get_mmc_control()) && _mtc_port->selectable() >= 0) {
pfd[nfds].fd = _mtc_port->selectable();
pfd[nfds].events = POLLIN|POLLHUP|POLLERR;
ports[nfds] = _mtc_port;
nfds++;
}
- if (_midi_port && (_midi_port != _mmc_port || !mmc_control) && (_midi_port != _mtc_port) && _midi_port->selectable() >= 0) {
+ if (_midi_port && (_midi_port != _mmc_port || !Config->get_mmc_control()) && (_midi_port != _mtc_port) && _midi_port->selectable() >= 0) {
pfd[nfds].fd = _midi_port->selectable();
pfd[nfds].events = POLLIN|POLLHUP|POLLERR;
ports[nfds] = _midi_port;
@@ -1473,14 +1376,3 @@ Session::midi_thread_work ()
}
#endif
-bool
-Session::get_mmc_control () const
-{
- return mmc_control;
-}
-
-bool
-Session::get_midi_control () const
-{
- return midi_control;
-}
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc
index 8379b93e83..c877abdca4 100644
--- a/libs/ardour/session_process.cc
+++ b/libs/ardour/session_process.cc
@@ -46,7 +46,7 @@ using namespace PBD;
using namespace std;
void
-Session::process (jack_nframes_t nframes)
+Session::process (nframes_t nframes)
{
MIDI::Manager::instance()->cycle_start(nframes);
@@ -79,9 +79,9 @@ Session::prepare_diskstreams ()
}
int
-Session::no_roll (jack_nframes_t nframes, jack_nframes_t offset)
+Session::no_roll (nframes_t nframes, nframes_t offset)
{
- jack_nframes_t end_frame = _transport_frame + nframes; // FIXME: varispeed + no_roll ??
+ nframes_t end_frame = _transport_frame + nframes; // FIXME: varispeed + no_roll ??
int ret = 0;
bool declick = get_transport_declick_required();
boost::shared_ptr<RouteList> r = routes.reader ();
@@ -117,7 +117,7 @@ Session::no_roll (jack_nframes_t nframes, jack_nframes_t offset)
}
int
-Session::process_routes (jack_nframes_t nframes, jack_nframes_t offset)
+Session::process_routes (nframes_t nframes, nframes_t offset)
{
bool record_active;
int declick = get_transport_declick_required();
@@ -165,7 +165,7 @@ Session::process_routes (jack_nframes_t nframes, jack_nframes_t offset)
}
int
-Session::silent_process_routes (jack_nframes_t nframes, jack_nframes_t offset)
+Session::silent_process_routes (nframes_t nframes, nframes_t offset)
{
bool record_active = actively_recording();
int declick = get_transport_declick_required();
@@ -209,7 +209,7 @@ Session::silent_process_routes (jack_nframes_t nframes, jack_nframes_t offset)
}
void
-Session::commit_diskstreams (jack_nframes_t nframes, bool &needs_butler)
+Session::commit_diskstreams (nframes_t nframes, bool &needs_butler)
{
int dret;
float pworst = 1.0f;
@@ -255,13 +255,13 @@ Session::commit_diskstreams (jack_nframes_t nframes, bool &needs_butler)
void
-Session::process_with_events (jack_nframes_t nframes)
+Session::process_with_events (nframes_t nframes)
{
Event* ev;
- jack_nframes_t this_nframes;
- jack_nframes_t end_frame;
- jack_nframes_t offset;
- jack_nframes_t stop_limit;
+ nframes_t this_nframes;
+ nframes_t end_frame;
+ nframes_t offset;
+ nframes_t stop_limit;
long frames_moved;
bool session_needs_butler = false;
@@ -386,7 +386,7 @@ Session::process_with_events (jack_nframes_t nframes)
nframes -= this_nframes;
offset += this_nframes;
- frames_moved = (jack_nframes_t) floor (_transport_speed * this_nframes);
+ frames_moved = (nframes_t) floor (_transport_speed * this_nframes);
if (frames_moved < 0) {
decrement_transport_position (-frames_moved);
@@ -446,7 +446,7 @@ Session::transport_locked () const
{
Slave* sl = _slave;
- if (!locate_pending() && ((_slave_type == None) || (sl && sl->ok() && sl->locked()))) {
+ if (!locate_pending() && ((Config->get_slave_source() == None) || (sl && sl->ok() && sl->locked()))) {
return true;
}
@@ -454,17 +454,17 @@ Session::transport_locked () const
}
bool
-Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
+Session::follow_slave (nframes_t nframes, nframes_t offset)
{
float slave_speed;
- jack_nframes_t slave_transport_frame;
- jack_nframes_t this_delta;
+ nframes_t slave_transport_frame;
+ nframes_t this_delta;
int dir;
bool starting;
if (!_slave->ok()) {
stop_transport ();
- set_slave_source (None, 0);
+ Config->set_slave_source (None);
goto noroll;
}
@@ -555,9 +555,9 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
Location* al = _locations.auto_loop_location();
- if (al && auto_loop && (slave_transport_frame < al->start() || slave_transport_frame > al->end())) {
+ if (al && play_loop && (slave_transport_frame < al->start() || slave_transport_frame > al->end())) {
// cancel looping
- request_auto_loop(false);
+ request_play_loop(false);
}
if (slave_transport_frame != _transport_frame) {
@@ -583,7 +583,7 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
slave_state = Running;
bool ok = true;
- jack_nframes_t frame_delta = slave_transport_frame - _transport_frame;
+ nframes_t frame_delta = slave_transport_frame - _transport_frame;
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
@@ -605,7 +605,7 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
/* XXX what? */
}
- memset (delta_accumulator, 0, sizeof (jack_nframes_t) * delta_accumulator_size);
+ memset (delta_accumulator, 0, sizeof (nframes_t) * delta_accumulator_size);
average_slave_delta = 0;
this_delta = 0;
}
@@ -628,7 +628,7 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
// << " tf = " << _transport_frame
// << endl;
- if (_slave_type == JACK) {
+ if (Config->get_slave_source() == JACK) {
last_stop_frame = _transport_frame;
}
@@ -676,7 +676,7 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
request_transport_speed (adjusted_speed);
#if 1
- if ((jack_nframes_t) average_slave_delta > _slave->resolution()) {
+ if ((nframes_t) average_slave_delta > _slave->resolution()) {
// cerr << "not locked\n";
goto silent_motion;
}
@@ -715,7 +715,7 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
increment_transport_position (frames_moved);
}
- jack_nframes_t stop_limit;
+ nframes_t stop_limit;
if (actively_recording()) {
stop_limit = max_frames;
@@ -737,12 +737,12 @@ Session::follow_slave (jack_nframes_t nframes, jack_nframes_t offset)
}
void
-Session::process_without_events (jack_nframes_t nframes)
+Session::process_without_events (nframes_t nframes)
{
bool session_needs_butler = false;
- jack_nframes_t stop_limit;
+ nframes_t stop_limit;
long frames_moved;
- jack_nframes_t offset = 0;
+ nframes_t offset = 0;
{
if (post_transport_work & (PostTransportLocate|PostTransportStop)) {
@@ -800,7 +800,7 @@ Session::process_without_events (jack_nframes_t nframes)
} else {
increment_transport_position (frames_moved);
}
-
+
maybe_stop (stop_limit);
check_declick_out ();
@@ -811,7 +811,7 @@ Session::process_without_events (jack_nframes_t nframes)
}
void
-Session::process_audition (jack_nframes_t nframes)
+Session::process_audition (nframes_t nframes)
{
Event* ev;
boost::shared_ptr<RouteList> r = routes.reader ();
@@ -851,9 +851,9 @@ Session::process_audition (jack_nframes_t nframes)
}
bool
-Session::maybe_sync_start (jack_nframes_t& nframes, jack_nframes_t& offset)
+Session::maybe_sync_start (nframes_t& nframes, nframes_t& offset)
{
- jack_nframes_t sync_offset;
+ nframes_t sync_offset;
if (!waiting_for_sync_offset) {
return false;
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index a8b2804ff0..cd78a9c362 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -18,6 +18,9 @@
$Id$
*/
+#define __STDC_FORMAT_MACROS 1
+#include <stdint.h>
+
#include <algorithm>
#include <fstream>
#include <string>
@@ -91,6 +94,8 @@
#include <ardour/region_factory.h>
#include <ardour/source_factory.h>
+#include <control_protocol/control_protocol.h>
+
#include "i18n.h"
#include <locale.h>
@@ -106,10 +111,11 @@ Session::first_stage_init (string fullpath, string snapshot_name)
}
char buf[PATH_MAX+1];
- if (!realpath(fullpath.c_str(), buf) && (errno != ENOENT)) {
+ if (!realpath (fullpath.c_str(), buf) && (errno != ENOENT)) {
error << string_compose(_("Could not use path %1 (%s)"), buf, strerror(errno)) << endmsg;
throw failed_constructor();
}
+
_path = string(buf);
if (_path[_path.length()-1] != '/') {
@@ -121,7 +127,6 @@ Session::first_stage_init (string fullpath, string snapshot_name)
*/
_name = _current_snapshot_name = snapshot_name;
- setup_raid_path (_path);
_current_frame_rate = _engine.frame_rate ();
_tempo_map = new TempoMap (_current_frame_rate);
@@ -139,16 +144,8 @@ Session::first_stage_init (string fullpath, string snapshot_name)
start_location = new Location (0, 0, _("start"), Location::Flags ((Location::IsMark|Location::IsStart)));
_end_location_is_free = true;
g_atomic_int_set (&_record_status, Disabled);
- auto_play = false;
- punch_in = false;
- punch_out = false;
- auto_loop = false;
- seamless_loop = false;
loop_changing = false;
- auto_input = true;
- crossfades_active = false;
- all_safe = false;
- auto_return = false;
+ play_loop = false;
_last_roll_location = 0;
_last_record_location = 0;
pending_locate_frame = 0;
@@ -161,8 +158,6 @@ Session::first_stage_init (string fullpath, string snapshot_name)
outbound_mtc_smpte_frame = 0;
next_quarter_frame_to_send = -1;
current_block_size = 0;
- _solo_latched = true;
- _solo_model = InverseMute;
solo_update_disabled = false;
currently_soloing = false;
_have_captured = false;
@@ -171,12 +166,11 @@ Session::first_stage_init (string fullpath, string snapshot_name)
_worst_track_latency = 0;
_state_of_the_state = StateOfTheState(CannotSave|InitialConnecting|Loading);
_slave = 0;
- _slave_type = None;
butler_mixdown_buffer = 0;
butler_gain_buffer = 0;
- mmc_control = false;
- midi_control = true;
mmc = 0;
+ session_send_mmc = false;
+ session_send_mtc = false;
post_transport_work = PostTransportWork (0);
g_atomic_int_set (&butler_should_do_transport_work, 0);
g_atomic_int_set (&butler_active, 0);
@@ -184,48 +178,38 @@ Session::first_stage_init (string fullpath, string snapshot_name)
g_atomic_int_set (&_capture_load, 100);
g_atomic_int_set (&_playback_load_min, 100);
g_atomic_int_set (&_capture_load_min, 100);
- _edit_mode = Slide;
- pending_edit_mode = _edit_mode;
_play_range = false;
- input_auto_connect = AutoConnectOption (0);
- output_auto_connect = AutoConnectOption (0);
waiting_to_start = false;
_exporting = false;
_gain_automation_buffer = 0;
_pan_automation_buffer = 0;
_npan_buffers = 0;
pending_abort = false;
- layer_model = MoveAddHigher;
- xfade_model = ShortCrossfade;
destructive_index = 0;
current_trans = 0;
+ first_file_data_format_reset = true;
+ first_file_header_format_reset = true;
AudioDiskstream::allocate_working_buffers();
/* default short fade = 15ms */
- Crossfade::set_short_xfade_length ((jack_nframes_t) floor ((15.0 * frame_rate()) / 1000.0));
+ Crossfade::set_short_xfade_length ((nframes_t) floor (Config->get_short_xfade_seconds() * frame_rate()));
DestructiveFileSource::setup_standard_crossfades (frame_rate());
last_mmc_step.tv_sec = 0;
last_mmc_step.tv_usec = 0;
step_speed = 0.0;
- preroll.type = AnyTime::Frames;
- preroll.frames = 0;
- postroll.type = AnyTime::Frames;
- postroll.frames = 0;
-
/* click sounds are unset by default, which causes us to internal
waveforms for clicks.
*/
- _clicking = false;
- click_requested = false;
click_data = 0;
click_emphasis_data = 0;
click_length = 0;
click_emphasis_length = 0;
+ _clicking = false;
process_function = &Session::process_with_events;
@@ -238,34 +222,18 @@ Session::first_stage_init (string fullpath, string snapshot_name)
_current_frame_rate = 48000;
_base_frame_rate = 48000;
- smpte_frames_per_second = 30;
- video_pullup = 0.0;
- smpte_drop_frames = false;
last_smpte_when = 0;
_smpte_offset = 0;
_smpte_offset_negative = true;
last_smpte_valid = false;
+ sync_time_vars ();
+
last_rr_session_dir = session_dirs.begin();
refresh_disk_space ();
// set_default_fade (0.2, 5.0); /* steepness, millisecs */
- /* default configuration */
-
- do_not_record_plugins = false;
- over_length_short = 2;
- over_length_long = 10;
- send_midi_timecode = false;
- send_midi_machine_control = false;
- shuttle_speed_factor = 1.0;
- shuttle_speed_threshold = 5;
- rf_speed = 2.0;
- _meter_hold = 100; // XXX unknown units: number of calls to meter::set()
- _meter_falloff = 0.375f; // XXX unknown units: refresh_rate
- max_level = 0;
- min_level = 0;
-
/* slave stuff */
average_slave_delta = 1800;
@@ -273,11 +241,6 @@ Session::first_stage_init (string fullpath, string snapshot_name)
delta_accumulator_cnt = 0;
slave_state = Stopped;
- /* default SMPTE type is 30 FPS, non-drop */
-
- set_smpte_type (30.0, false);
- set_video_pullup (0.0);
-
_engine.GraphReordered.connect (mem_fun (*this, &Session::graph_reordered));
/* These are all static "per-class" signals */
@@ -290,7 +253,6 @@ Session::first_stage_init (string fullpath, string snapshot_name)
Curve::CurveCreated.connect (mem_fun (*this, &Session::add_curve));
AutomationList::AutomationListCreated.connect (mem_fun (*this, &Session::add_automation_list));
- Controllable::Created.connect (mem_fun (*this, &Session::add_controllable));
Controllable::GoingAway.connect (mem_fun (*this, &Session::remove_controllable));
IO::MoreChannels.connect (mem_fun (*this, &Session::ensure_buffers));
@@ -322,10 +284,14 @@ Session::second_stage_init (bool new_session)
return -1;
}*/
+ // set_state() will call setup_raid_path(), but if it's a new session we need
+ // to call setup_raid_path() here.
if (state_tree) {
if (set_state (*state_tree->root())) {
return -1;
}
+ } else {
+ setup_raid_path(_path);
}
/* we can't save till after ::when_engine_running() is called,
@@ -387,14 +353,6 @@ Session::raid_path () const
}
void
-Session::set_raid_path (string path)
-{
- /* public-access to setup_raid_path() */
-
- setup_raid_path (path);
-}
-
-void
Session::setup_raid_path (string path)
{
string::size_type colon;
@@ -489,12 +447,10 @@ Session::setup_raid_path (string path)
}
int
-Session::create (bool& new_session, string* mix_template, jack_nframes_t initial_length)
+Session::create (bool& new_session, string* mix_template, nframes_t initial_length)
{
string dir;
- new_session = !g_file_test (_path.c_str(), GFileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR));
-
if (g_mkdir_with_parents (_path.c_str(), 0755) < 0) {
error << string_compose(_("Session: cannot create session dir \"%1\" (%2)"), _path, strerror (errno)) << endmsg;
return -1;
@@ -528,66 +484,57 @@ Session::create (bool& new_session, string* mix_template, jack_nframes_t initial
return -1;
}
-
+
/* check new_session so we don't overwrite an existing one */
-
+
if (mix_template) {
- if (new_session){
- std::string in_path = *mix_template;
+ std::string in_path = *mix_template;
+
+ ifstream in(in_path.c_str());
+
+ if (in){
+ string out_path = _path;
+ out_path += _name;
+ out_path += _statefile_suffix;
+
+ ofstream out(out_path.c_str());
+
+ if (out){
+ out << in.rdbuf();
+
+ // okay, session is set up. Treat like normal saved
+ // session from now on.
+
+ new_session = false;
+ return 0;
- ifstream in(in_path.c_str());
-
- if (in){
- string out_path = _path;
- out_path += _name;
- out_path += _statefile_suffix;
-
- ofstream out(out_path.c_str());
-
- if (out){
- out << in.rdbuf();
-
- // okay, session is set up. Treat like normal saved
- // session from now on.
-
- new_session = false;
- return 0;
-
- } else {
- error << string_compose (_("Could not open %1 for writing mix template"), out_path)
- << endmsg;
- return -1;
- }
-
} else {
- error << string_compose (_("Could not open mix template %1 for reading"), in_path)
- << endmsg;
+ error << string_compose (_("Could not open %1 for writing mix template"), out_path)
+ << endmsg;
return -1;
}
-
-
+
} else {
- warning << _("Session already exists. Not overwriting") << endmsg;
+ error << string_compose (_("Could not open mix template %1 for reading"), in_path)
+ << endmsg;
return -1;
}
+
}
- if (new_session) {
+ /* set initial start + end point */
- /* set initial start + end point */
+ start_location->set_end (0);
+ _locations.add (start_location);
- start_location->set_end (0);
- _locations.add (start_location);
+ end_location->set_end (initial_length);
+ _locations.add (end_location);
- end_location->set_end (initial_length);
- _locations.add (end_location);
-
- _state_of_the_state = Clean;
+ _state_of_the_state = Clean;
- if (save_state (_current_snapshot_name)) {
- save_history (_current_snapshot_name);
- return -1;
- }
+ if (save_state (_current_snapshot_name)) {
+ save_history (_current_snapshot_name);
+ return -1;
}
return 0;
@@ -786,232 +733,9 @@ Session::load_options (const XMLNode& node)
{
XMLNode* child;
XMLProperty* prop;
- bool have_fade_msecs = false;
- bool have_fade_steepness = false;
- float fade_msecs = 0;
- float fade_steepness = 0;
- SlaveSource slave_src = None;
- int x;
LocaleGuard lg (X_("POSIX"));
-
- if ((child = find_named_node (node, "input-auto-connect")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- sscanf (prop->value().c_str(), "%x", &x);
- input_auto_connect = AutoConnectOption (x);
- }
- }
- if ((child = find_named_node (node, "output-auto-connect")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- sscanf (prop->value().c_str(), "%x", &x);
- output_auto_connect = AutoConnectOption (x);
- }
- }
-
- if ((child = find_named_node (node, "slave")) != 0) {
- if ((prop = child->property ("type")) != 0) {
- if (prop->value() == "none") {
- slave_src = None;
- } else if (prop->value() == "mtc") {
- slave_src = MTC;
- } else if (prop->value() == "jack") {
- slave_src = JACK;
- }
- set_slave_source (slave_src, 0);
- }
- }
-
- /* we cannot set edit mode if we are loading a session,
- because it might destroy the playlist's positioning
- */
-
- if ((child = find_named_node (node, "edit-mode")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- if (prop->value() == "slide") {
- pending_edit_mode = Slide;
- } else if (prop->value() == "splice") {
- pending_edit_mode = Splice;
- }
- }
- }
-
- if ((child = find_named_node (node, "send-midi-timecode")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- bool x = (prop->value() == "yes");
- send_mtc = !x; /* force change in value */
- set_send_mtc (x);
- }
- }
- if ((child = find_named_node (node, "send-midi-machine-control")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- bool x = (prop->value() == "yes");
- send_mmc = !x; /* force change in value */
- set_send_mmc (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "max-level")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- max_level = atoi (prop->value().c_str());
- }
- }
- if ((child = find_named_node (node, "min-level")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- min_level = atoi (prop->value().c_str());
- }
- }
- if ((child = find_named_node (node, "meter-hold")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- _meter_hold = atof (prop->value().c_str());
- }
- }
- if ((child = find_named_node (node, "meter-falloff")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- _meter_falloff = atof (prop->value().c_str());
- }
- }
- if ((child = find_named_node (node, "long-over-length")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- over_length_long = atoi (prop->value().c_str());
- }
- }
- if ((child = find_named_node (node, "short-over-length")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- over_length_short = atoi (prop->value().c_str());
- }
- }
- if ((child = find_named_node (node, "shuttle-speed-factor")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- shuttle_speed_factor = atof (prop->value().c_str());
- }
- }
- if ((child = find_named_node (node, "shuttle-speed-threshold")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- shuttle_speed_threshold = atof (prop->value().c_str());
- }
- }
- if ((child = find_named_node (node, "rf-speed")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- rf_speed = atof (prop->value().c_str());
- }
- }
- if ((child = find_named_node (node, "video-pullup")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_video_pullup( atof (prop->value().c_str()) );
- }
- }
- if ((child = find_named_node (node, "smpte-frames-per-second")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_smpte_type( atof (prop->value().c_str()), smpte_drop_frames );
- }
- }
- if ((child = find_named_node (node, "smpte-drop-frames")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_smpte_type( smpte_frames_per_second, (prop->value() == "yes") );
- }
- }
- if ((child = find_named_node (node, "smpte-offset")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_smpte_offset( atoi (prop->value().c_str()) );
- }
- }
- if ((child = find_named_node (node, "smpte-offset-negative")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_smpte_offset_negative( (prop->value() == "yes") );
- }
- }
- if ((child = find_named_node (node, "click-sound")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- click_sound = prop->value();
- }
- }
- if ((child = find_named_node (node, "click-emphasis-sound")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- click_emphasis_sound = prop->value();
- }
- }
-
- if ((child = find_named_node (node, "solo-model")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- if (prop->value() == "SoloBus")
- _solo_model = SoloBus;
- else
- _solo_model = InverseMute;
- }
- }
-
- /* BOOLEAN OPTIONS */
-
- if ((child = find_named_node (node, "auto-play")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_auto_play (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "auto-input")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_auto_input (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "seamless-loop")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_seamless_loop (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "punch-in")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_punch_in (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "punch-out")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_punch_out (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "auto-return")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_auto_return (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "send-mtc")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_send_mtc (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "mmc-control")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_mmc_control (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "midi-control")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_midi_control (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "midi-feedback")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_midi_feedback (prop->value() == "yes");
- }
- }
- // Legacy support for <recording-plugins>
- if ((child = find_named_node (node, "recording-plugins")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_do_not_record_plugins (prop->value() == "no");
- }
- }
- if ((child = find_named_node (node, "do-not-record-plugins")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_do_not_record_plugins (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "crossfades-active")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_crossfades_active (prop->value() == "yes");
- }
- }
- if ((child = find_named_node (node, "audible-click")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- set_clicking (prop->value() == "yes");
- }
- }
+ Config->set_variables (node, ConfigVariableBase::Session);
if ((child = find_named_node (node, "end-marker-is-free")) != 0) {
if ((prop = child->property ("val")) != 0) {
@@ -1019,243 +743,30 @@ Session::load_options (const XMLNode& node)
}
}
- if ((child = find_named_node (node, "layer-model")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- if (prop->value() == X_("LaterHigher")) {
- set_layer_model (LaterHigher);
- } else if (prop->value() == X_("AddHigher")) {
- set_layer_model (AddHigher);
- } else {
- set_layer_model (MoveAddHigher);
- }
- }
- }
-
- if ((child = find_named_node (node, "xfade-model")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- if (prop->value() == X_("Short")) {
- set_xfade_model (ShortCrossfade);
- } else {
- set_xfade_model (FullCrossfade);
- }
- }
- }
-
- if ((child = find_named_node (node, "short-xfade-length")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- /* value is stored as a fractional seconds */
- float secs = atof (prop->value().c_str());
- Crossfade::set_short_xfade_length ((jack_nframes_t) floor (secs * frame_rate()));
- }
- }
-
- if ((child = find_named_node (node, "full-xfades-unmuted")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- crossfades_active = (prop->value() == "yes");
- }
- }
-
- /* TIED OPTIONS */
-
- if ((child = find_named_node (node, "default-fade-steepness")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- fade_steepness = atof (prop->value().c_str());
- have_fade_steepness = true;
- }
- }
- if ((child = find_named_node (node, "default-fade-msec")) != 0) {
- if ((prop = child->property ("val")) != 0) {
- fade_msecs = atof (prop->value().c_str());
- have_fade_msecs = true;
- }
- }
+ return 0;
+}
- if (have_fade_steepness || have_fade_msecs) {
- // set_default_fade (fade_steepness, fade_msecs);
- }
+bool
+Session::save_config_options_predicate (ConfigVariableBase::Owner owner) const
+{
+ const ConfigVariableBase::Owner modified_by_session_or_user = (ConfigVariableBase::Owner)
+ (ConfigVariableBase::Session|ConfigVariableBase::Interface);
- return 0;
+ return owner & modified_by_session_or_user;
}
XMLNode&
Session::get_options () const
{
- XMLNode* opthead;
XMLNode* child;
- char buf[32];
LocaleGuard lg (X_("POSIX"));
- opthead = new XMLNode ("Options");
+ XMLNode& option_root = Config->get_variables (mem_fun (*this, &Session::save_config_options_predicate));
- SlaveSource src = slave_source ();
- string src_string;
- switch (src) {
- case None:
- src_string = "none";
- break;
- case MTC:
- src_string = "mtc";
- break;
- case JACK:
- src_string = "jack";
- break;
- }
- child = opthead->add_child ("slave");
- child->add_property ("type", src_string);
-
- child = opthead->add_child ("send-midi-timecode");
- child->add_property ("val", send_midi_timecode?"yes":"no");
-
- child = opthead->add_child ("send-midi-machine-control");
- child->add_property ("val", send_midi_machine_control?"yes":"no");
-
- snprintf (buf, sizeof(buf)-1, "%x", (int) input_auto_connect);
- child = opthead->add_child ("input-auto-connect");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%x", (int) output_auto_connect);
- child = opthead->add_child ("output-auto-connect");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%d", max_level);
- child = opthead->add_child ("max-level");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%d", min_level);
- child = opthead->add_child ("min-level");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%f", _meter_hold);
- child = opthead->add_child ("meter-hold");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%f", _meter_falloff);
- child = opthead->add_child ("meter-falloff");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%u", over_length_long);
- child = opthead->add_child ("long-over-length");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%u", over_length_short);
- child = opthead->add_child ("short-over-length");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%f", shuttle_speed_factor);
- child = opthead->add_child ("shuttle-speed-factor");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%f", shuttle_speed_threshold);
- child = opthead->add_child ("shuttle-speed-threshold");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%f", rf_speed);
- child = opthead->add_child ("rf-speed");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%.4f", video_pullup);
- child = opthead->add_child ("video-pullup");
- child->add_property ("val", buf);
-
- snprintf (buf, sizeof(buf)-1, "%.2f", smpte_frames_per_second);
- child = opthead->add_child ("smpte-frames-per-second");
- child->add_property ("val", buf);
-
- child = opthead->add_child ("smpte-drop-frames");
- child->add_property ("val", smpte_drop_frames ? "yes" : "no");
-
- snprintf (buf, sizeof(buf)-1, "%u", smpte_offset ());
- child = opthead->add_child ("smpte-offset");
- child->add_property ("val", buf);
-
- child = opthead->add_child ("smpte-offset-negative");
- child->add_property ("val", smpte_offset_negative () ? "yes" : "no");
-
- child = opthead->add_child ("edit-mode");
- switch (_edit_mode) {
- case Splice:
- child->add_property ("val", "splice");
- break;
-
- case Slide:
- child->add_property ("val", "slide");
- break;
- }
-
- child = opthead->add_child ("auto-play");
- child->add_property ("val", get_auto_play () ? "yes" : "no");
- child = opthead->add_child ("auto-input");
- child->add_property ("val", get_auto_input () ? "yes" : "no");
- child = opthead->add_child ("seamless-loop");
- child->add_property ("val", get_seamless_loop () ? "yes" : "no");
- child = opthead->add_child ("punch-in");
- child->add_property ("val", get_punch_in () ? "yes" : "no");
- child = opthead->add_child ("punch-out");
- child->add_property ("val", get_punch_out () ? "yes" : "no");
- child = opthead->add_child ("all-safe");
- child->add_property ("val", get_all_safe () ? "yes" : "no");
- child = opthead->add_child ("auto-return");
- child->add_property ("val", get_auto_return () ? "yes" : "no");
- child = opthead->add_child ("mmc-control");
- child->add_property ("val", get_mmc_control () ? "yes" : "no");
- child = opthead->add_child ("midi-control");
- child->add_property ("val", get_midi_control () ? "yes" : "no");
- child = opthead->add_child ("midi-feedback");
- child->add_property ("val", get_midi_feedback () ? "yes" : "no");
- child = opthead->add_child ("do-not-record-plugins");
- child->add_property ("val", get_do_not_record_plugins () ? "yes" : "no");
- child = opthead->add_child ("auto-crossfade");
- child->add_property ("val", get_crossfades_active () ? "yes" : "no");
- child = opthead->add_child ("audible-click");
- child->add_property ("val", get_clicking () ? "yes" : "no");
- child = opthead->add_child ("end-marker-is-free");
+ child = option_root.add_child ("end-marker-is-free");
child->add_property ("val", _end_location_is_free ? "yes" : "no");
- if (click_sound.length()) {
- child = opthead->add_child ("click-sound");
- child->add_property ("val", click_sound);
- }
-
- if (click_emphasis_sound.length()) {
- child = opthead->add_child ("click-emphasis-sound");
- child->add_property ("val", click_emphasis_sound);
- }
-
- child = opthead->add_child ("solo-model");
- child->add_property ("val", _solo_model == SoloBus ? "SoloBus" : "InverseMute");
-
- child = opthead->add_child ("layer-model");
- switch (layer_model) {
- case LaterHigher:
- child->add_property ("val", X_("LaterHigher"));
- break;
- case MoveAddHigher:
- child->add_property ("val", X_("MoveAddHigher"));
- break;
- case AddHigher:
- child->add_property ("val", X_("AddHigher"));
- break;
- }
-
- child = opthead->add_child ("xfade-model");
- switch (xfade_model) {
- case FullCrossfade:
- child->add_property ("val", X_("Full"));
- break;
- case ShortCrossfade:
- child->add_property ("val", X_("Short"));
- }
-
- child = opthead->add_child ("short-xfade-length");
- /* store as fractions of a second */
- snprintf (buf, sizeof(buf)-1, "%f",
- (float) Crossfade::short_xfade_length() / frame_rate());
- child->add_property ("val", buf);
-
- child = opthead->add_child ("full-xfades-unmuted");
- child->add_property ("val", crossfades_active ? "yes" : "no");
-
- return *opthead;
+ return option_root;
}
XMLNode&
@@ -1472,6 +983,8 @@ Session::state(bool full_state)
node->add_child_nocopy (_tempo_map->get_state());
+ node->add_child_nocopy (get_control_protocol_state());
+
if (_extra_xml) {
node->add_child_copy (*_extra_xml);
}
@@ -1479,6 +992,25 @@ Session::state(bool full_state)
return *node;
}
+XMLNode&
+Session::get_control_protocol_state ()
+{
+ ControlProtocolManager& cpm (ControlProtocolManager::instance());
+ XMLNode* node = new XMLNode (X_("ControlProtocols"));
+
+ cpm.foreach_known_protocol (bind (mem_fun (*this, &Session::add_control_protocol), node));
+
+ return *node;
+}
+
+void
+Session::add_control_protocol (const ControlProtocolInfo* const cpi, XMLNode* node)
+{
+ if (cpi->protocol) {
+ node->add_child_nocopy (cpi->protocol->get_state());
+ }
+}
+
int
Session::set_state (const XMLNode& node)
{
@@ -1500,6 +1032,8 @@ Session::set_state (const XMLNode& node)
_name = prop->value ();
}
+ setup_raid_path(_path);
+
if ((prop = node.property (X_("id-counter"))) != 0) {
uint64_t x;
sscanf (prop->value().c_str(), "%" PRIu64, &x);
@@ -1523,7 +1057,7 @@ Session::set_state (const XMLNode& node)
MIDI
Path
extra
- Options
+ Options/Config
Sources
AudioRegions
AudioDiskstreams
@@ -1533,26 +1067,22 @@ Session::set_state (const XMLNode& node)
EditGroups
MixGroups
Click
+ ControlProtocols
*/
if (use_config_midi_ports ()) {
}
- if ((child = find_named_node (node, "Path")) != 0) {
- /* XXX this XML content stuff horrible API design */
- string raid_path = _path + ':' + child->children().front()->content();
- setup_raid_path (raid_path);
- } else {
- /* the path is already set */
- }
-
if ((child = find_named_node (node, "extra")) != 0) {
_extra_xml = new XMLNode (*child);
}
- if ((child = find_named_node (node, "Options")) == 0) {
+ if (((child = find_named_node (node, "Options")) != 0)) { /* old style */
+ load_options (*child);
+ } else if ((child = find_named_node (node, "Config")) != 0) { /* new style */
+ load_options (*child);
+ } else {
error << _("Session: XML state has no options section") << endmsg;
- } else if (load_options (*child)) {
}
if ((child = find_named_node (node, "Sources")) == 0) {
@@ -1669,9 +1199,9 @@ Session::set_state (const XMLNode& node)
_click_io->set_state (*child);
}
- /* OK, now we can set edit mode */
-
- set_edit_mode (pending_edit_mode);
+ if ((child = find_named_node (node, "ControlProtocols")) != 0) {
+ ControlProtocolManager::instance().set_protocol_states (*child);
+ }
/* here beginneth the second phase ... */
@@ -1815,6 +1345,11 @@ Session::XMLAudioRegionFactory (const XMLNode& node, bool full)
nchans = atoi (prop->value().c_str());
}
+
+ if ((prop = node.property ("name")) == 0) {
+ cerr << "no name for this region\n";
+ abort ();
+ }
if ((prop = node.property (X_("source-0"))) == 0) {
if ((prop = node.property ("source")) == 0) {
@@ -2363,17 +1898,21 @@ Session::sound_dir (bool with_path) const
/* support old session structure */
struct stat statbuf;
- string old;
-
- if (with_path) {
- old = _path;
- }
+ string old_nopath;
+ string old_withpath;
- old += sound_dir_name;
- old += '/';
+ old_nopath += old_sound_dir_name;
+ old_nopath += '/';
+
+ old_withpath = _path;
+ old_withpath += old_sound_dir_name;
+ old_withpath += '/';
- if (stat (old.c_str(), &statbuf) == 0) {
- return old;
+ if (stat (old_withpath.c_str(), &statbuf) == 0) {
+ if (with_path)
+ return old_withpath;
+
+ return old_nopath;
}
string res;
@@ -2653,21 +2192,6 @@ Session::edit_group_by_name (string name)
}
void
-Session::set_meter_hold (float val)
-{
- _meter_hold = val;
- MeterHoldChanged(); // emit
-}
-
-void
-Session::set_meter_falloff (float val)
-{
- _meter_falloff = val;
- MeterFalloffChanged(); // emit
-}
-
-
-void
Session::begin_reversible_command (string name)
{
current_trans = new UndoTransaction;
@@ -3342,7 +2866,7 @@ void
Session::add_controllable (Controllable* c)
{
Glib::Mutex::Lock lm (controllables_lock);
- controllables.push_back (c);
+ controllables.insert (c);
}
void
@@ -3353,7 +2877,12 @@ Session::remove_controllable (Controllable* c)
}
Glib::Mutex::Lock lm (controllables_lock);
- controllables.remove (c);
+
+ Controllables::iterator x = controllables.find (c);
+
+ if (x != controllables.end()) {
+ controllables.erase (x);
+ }
}
Controllable*
@@ -3489,3 +3018,178 @@ Session::restore_history (string snapshot_name)
return 0;
}
+
+void
+Session::config_changed (const char* parameter_name)
+{
+#define PARAM_IS(x) (!strcmp (parameter_name, (x)))
+
+ if (PARAM_IS ("seamless-loop")) {
+
+ } else if (PARAM_IS ("rf-speed")) {
+
+ } else if (PARAM_IS ("auto-loop")) {
+
+ } else if (PARAM_IS ("auto-input")) {
+
+ if (Config->get_monitoring_model() == HardwareMonitoring && transport_rolling()) {
+ /* auto-input only makes a difference if we're rolling */
+
+ boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
+
+ for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
+ if ((*i)->record_enabled ()) {
+ //cerr << "switching to input = " << !auto_input << __FILE__ << __LINE__ << endl << endl;
+ (*i)->monitor_input (!Config->get_auto_input());
+ }
+ }
+ }
+
+ } else if (PARAM_IS ("punch-in")) {
+
+ Location* location;
+
+ if ((location = _locations.auto_punch_location()) != 0) {
+
+ if (Config->get_punch_in ()) {
+ replace_event (Event::PunchIn, location->start());
+ } else {
+ remove_event (location->start(), Event::PunchIn);
+ }
+ }
+
+ } else if (PARAM_IS ("punch-out")) {
+
+ Location* location;
+
+ if ((location = _locations.auto_punch_location()) != 0) {
+
+ if (Config->get_punch_out()) {
+ replace_event (Event::PunchOut, location->end());
+ } else {
+ clear_events (Event::PunchOut);
+ }
+ }
+
+ } else if (PARAM_IS ("edit-mode")) {
+
+ Glib::Mutex::Lock lm (playlist_lock);
+
+ for (PlaylistList::iterator i = playlists.begin(); i != playlists.end(); ++i) {
+ (*i)->set_edit_mode (Config->get_edit_mode ());
+ }
+
+ } else if (PARAM_IS ("use-video-sync")) {
+
+ if (transport_stopped()) {
+ if (Config->get_use_video_sync()) {
+ waiting_for_sync_offset = true;
+ }
+ }
+
+ } else if (PARAM_IS ("mmc-control")) {
+
+ //poke_midi_thread ();
+
+ } else if (PARAM_IS ("midi-control")) {
+
+ //poke_midi_thread ();
+
+ } else if (PARAM_IS ("raid-path")) {
+
+ setup_raid_path (Config->get_raid_path());
+
+ } else if (PARAM_IS ("smpte-frames-per-second") || PARAM_IS ("smpte-drop-frames")) {
+
+ sync_time_vars ();
+
+ } else if (PARAM_IS ("video-pullup")) {
+
+ sync_time_vars ();
+
+ } else if (PARAM_IS ("seamless-loop")) {
+
+ if (play_loop && transport_rolling()) {
+ // to reset diskstreams etc
+ request_play_loop (true);
+ }
+
+ } else if (PARAM_IS ("rf-speed")) {
+
+ cumulative_rf_motion = 0;
+ reset_rf_scale (0);
+
+ } else if (PARAM_IS ("click-sound")) {
+
+ setup_click_sounds (1);
+
+ } else if (PARAM_IS ("click-emphasis-sound")) {
+
+ setup_click_sounds (-1);
+
+ } else if (PARAM_IS ("clicking")) {
+
+ if (Config->get_clicking()) {
+ if (_click_io && click_data) { // don't require emphasis data
+ _clicking = true;
+ }
+ } else {
+ _clicking = false;
+ }
+
+ } else if (PARAM_IS ("send-mtc")) {
+
+ /* only set the internal flag if we have
+ a port.
+ */
+
+ if (_mtc_port != 0) {
+ session_send_mtc = Config->get_send_mtc();
+ }
+
+ } else if (PARAM_IS ("send-mmc")) {
+
+ /* only set the internal flag if we have
+ a port.
+ */
+
+ if (_mmc_port != 0) {
+ session_send_mmc = Config->get_send_mmc();
+ }
+
+ } else if (PARAM_IS ("midi-feedback")) {
+
+ /* only set the internal flag if we have
+ a port.
+ */
+
+ if (_mtc_port != 0) {
+ session_midi_feedback = Config->get_midi_feedback();
+ }
+
+ } else if (PARAM_IS ("jack-time-master")) {
+
+ engine().reset_timebase ();
+
+ } else if (PARAM_IS ("native-file-header-format")) {
+
+ if (!first_file_header_format_reset) {
+ reset_native_file_format ();
+ }
+
+ first_file_header_format_reset = false;
+
+ } else if (PARAM_IS ("native-file-data-format")) {
+
+ if (!first_file_data_format_reset) {
+ reset_native_file_format ();
+ }
+
+ first_file_data_format_reset = false;
+ }
+
+ set_dirty ();
+
+#undef PARAM_IS
+
+}
diff --git a/libs/ardour/session_time.cc b/libs/ardour/session_time.cc
index 887a9fa6c4..d24bab5ff8 100644
--- a/libs/ardour/session_time.cc
+++ b/libs/ardour/session_time.cc
@@ -26,6 +26,7 @@
#include <ardour/timestamps.h>
#include <pbd/error.h>
+#include <pbd/stacktrace.h>
#include <ardour/ardour.h>
#include <ardour/configuration.h>
@@ -41,7 +42,7 @@ using namespace PBD;
/* BBT TIME*/
void
-Session::bbt_time (jack_nframes_t when, BBT_Time& bbt)
+Session::bbt_time (nframes_t when, BBT_Time& bbt)
{
_tempo_map->bbt_time (when, bbt);
}
@@ -51,17 +52,17 @@ Session::bbt_time (jack_nframes_t when, BBT_Time& bbt)
void
Session::sync_time_vars ()
{
- _current_frame_rate = (jack_nframes_t) round (_base_frame_rate * (1.0 + (video_pullup/100.0)));
+ _current_frame_rate = (nframes_t) round (_base_frame_rate * (1.0 + (Config->get_video_pullup()/100.0)));
_frames_per_hour = _current_frame_rate * 3600;
- _frames_per_smpte_frame = (double) _current_frame_rate / (double) smpte_frames_per_second;
- _smpte_frames_per_hour = (unsigned long) (smpte_frames_per_second * 3600.0);
+ _frames_per_smpte_frame = (double) _current_frame_rate / (double) Config->get_smpte_frames_per_second();
+ _smpte_frames_per_hour = (unsigned long) (Config->get_smpte_frames_per_second() * 3600.0);
}
int
Session::set_smpte_type (float fps, bool drop_frames)
{
- smpte_frames_per_second = fps;
- smpte_drop_frames = drop_frames;
+ Config->set_smpte_frames_per_second (fps);
+ Config->set_smpte_drop_frames (drop_frames);
last_smpte_valid = false;
// smpte type bits are the middle two in the upper nibble
@@ -88,31 +89,11 @@ Session::set_smpte_type (float fps, bool drop_frames)
break;
};
- sync_time_vars();
-
- SMPTETypeChanged (); /* EMIT SIGNAL */
-
- set_dirty();
-
- return 0;
-}
-
-int
-Session::set_video_pullup (float pull)
-{
- video_pullup = pull;
-
- sync_time_vars();
-
- PullupChanged (); /* EMIT SIGNAL */
-
- set_dirty();
-
return 0;
}
void
-Session::set_smpte_offset (jack_nframes_t off)
+Session::set_smpte_offset (nframes_t off)
{
_smpte_offset = off;
last_smpte_valid = false;
@@ -130,9 +111,9 @@ Session::set_smpte_offset_negative (bool neg)
}
void
-Session::smpte_to_sample( SMPTE::Time& smpte, jack_nframes_t& sample, bool use_offset, bool use_subframes ) const
+Session::smpte_to_sample( SMPTE::Time& smpte, nframes_t& sample, bool use_offset, bool use_subframes ) const
{
- if (smpte_drop_frames) {
+ if (Config->get_smpte_drop_frames()) {
// The drop frame format was created to better approximate the 30000/1001 = 29.97002997002997....
// framerate of NTSC color TV. The used frame rate of drop frame is 29.97, which drifts by about
// 0.108 frame per hour, or about 1.3 frames per 12 hours. This is not perfect, but a lot better
@@ -173,16 +154,16 @@ Session::smpte_to_sample( SMPTE::Time& smpte, jack_nframes_t& sample, bool use_o
// Per Sigmond <per@sigmond.no>
// Samples inside time dividable by 10 minutes (real time accurate)
- jack_nframes_t base_samples = ((smpte.hours * 60 * 60) + ((smpte.minutes / 10) * 10 * 60)) * frame_rate();
+ nframes_t base_samples = ((smpte.hours * 60 * 60) + ((smpte.minutes / 10) * 10 * 60)) * frame_rate();
// Samples inside time exceeding the nearest 10 minutes (always offset, see above)
long exceeding_df_minutes = smpte.minutes % 10;
long exceeding_df_seconds = (exceeding_df_minutes * 60) + smpte.seconds;
long exceeding_df_frames = (30 * exceeding_df_seconds) + smpte.frames - (2 * exceeding_df_minutes);
- jack_nframes_t exceeding_samples = (jack_nframes_t) rint(exceeding_df_frames * _frames_per_smpte_frame);
+ nframes_t exceeding_samples = (nframes_t) rint(exceeding_df_frames * _frames_per_smpte_frame);
sample = base_samples + exceeding_samples;
} else {
// Non drop is easy:
- sample = (((smpte.hours * 60 * 60) + (smpte.minutes * 60) + smpte.seconds) * frame_rate()) + (jack_nframes_t)rint(smpte.frames * _frames_per_smpte_frame);
+ sample = (((smpte.hours * 60 * 60) + (smpte.minutes * 60) + smpte.seconds) * frame_rate()) + (nframes_t)rint(smpte.frames * _frames_per_smpte_frame);
}
if (use_subframes) {
@@ -213,9 +194,9 @@ Session::smpte_to_sample( SMPTE::Time& smpte, jack_nframes_t& sample, bool use_o
void
-Session::sample_to_smpte( jack_nframes_t sample, SMPTE::Time& smpte, bool use_offset, bool use_subframes ) const
+Session::sample_to_smpte( nframes_t sample, SMPTE::Time& smpte, bool use_offset, bool use_subframes ) const
{
- jack_nframes_t offset_sample;
+ nframes_t offset_sample;
if (!use_offset) {
offset_sample = sample;
@@ -259,7 +240,7 @@ Session::sample_to_smpte( jack_nframes_t sample, SMPTE::Time& smpte, bool use_of
// Extract hour-exceeding frames for minute, second and frame calculations
smpte_frames_left = ((long) floor( smpte_frames_left_exact ));
- if (smpte_drop_frames) {
+ if (Config->get_smpte_drop_frames()) {
// See long explanation in smpte_to_sample()...
// Number of 10 minute chunks
@@ -295,10 +276,10 @@ Session::sample_to_smpte( jack_nframes_t sample, SMPTE::Time& smpte, bool use_of
}
} else {
// Non drop is easy
- smpte.minutes = smpte_frames_left / ((long) smpte_frames_per_second * 60);
- smpte_frames_left = smpte_frames_left % ((long) smpte_frames_per_second * 60);
- smpte.seconds = smpte_frames_left / (long) smpte_frames_per_second;
- smpte.frames = smpte_frames_left % (long) smpte_frames_per_second;
+ smpte.minutes = smpte_frames_left / ((long) Config->get_smpte_frames_per_second () * 60);
+ smpte_frames_left = smpte_frames_left % ((long) Config->get_smpte_frames_per_second () * 60);
+ smpte.seconds = smpte_frames_left / (long) Config->get_smpte_frames_per_second ();
+ smpte.frames = smpte_frames_left % (long) Config->get_smpte_frames_per_second ();
}
if (!use_subframes) {
@@ -307,7 +288,7 @@ Session::sample_to_smpte( jack_nframes_t sample, SMPTE::Time& smpte, bool use_of
}
void
-Session::smpte_time (jack_nframes_t when, SMPTE::Time& smpte)
+Session::smpte_time (nframes_t when, SMPTE::Time& smpte)
{
if (last_smpte_valid && when == last_smpte_when) {
smpte = last_smpte;
@@ -322,7 +303,7 @@ Session::smpte_time (jack_nframes_t when, SMPTE::Time& smpte)
}
void
-Session::smpte_time_subframes (jack_nframes_t when, SMPTE::Time& smpte)
+Session::smpte_time_subframes (nframes_t when, SMPTE::Time& smpte)
{
if (last_smpte_valid && when == last_smpte_when) {
smpte = last_smpte;
@@ -337,13 +318,13 @@ Session::smpte_time_subframes (jack_nframes_t when, SMPTE::Time& smpte)
}
void
-Session::smpte_duration (jack_nframes_t when, SMPTE::Time& smpte) const
+Session::smpte_duration (nframes_t when, SMPTE::Time& smpte) const
{
sample_to_smpte( when, smpte, false /* use_offset */, true /* use_subframes */ );
}
void
-Session::smpte_duration_string (char* buf, jack_nframes_t when) const
+Session::smpte_duration_string (char* buf, nframes_t when) const
{
SMPTE::Time smpte;
@@ -400,7 +381,7 @@ Session::jack_sync_callback (jack_transport_state_t state,
void
Session::jack_timebase_callback (jack_transport_state_t state,
- jack_nframes_t nframes,
+ nframes_t nframes,
jack_position_t* pos,
int new_position)
{
@@ -434,7 +415,7 @@ Session::jack_timebase_callback (jack_transport_state_t state,
#ifdef HAVE_JACK_VIDEO_SUPPORT
//poke audio video ratio so Ardour can track Video Sync
- pos->audio_frames_per_video_frame = frame_rate() / smpte_frames_per_second;
+ pos->audio_frames_per_video_frame = frame_rate() / Config->get_smpte_frames_per_second ();
pos->valid = jack_position_bits_t (pos->valid | JackAudioVideoRatio);
#endif
@@ -442,11 +423,11 @@ Session::jack_timebase_callback (jack_transport_state_t state,
/* SMPTE info */
t.smpte_offset = _smpte_offset;
- t.smpte_frame_rate = smpte_frames_per_second;
+ t.smpte_frame_rate = Config->get_smpte_frames_per_second ();
if (_transport_speed) {
- if (auto_loop) {
+ if (play_loop) {
Location* location = _locations.auto_loop_location();
@@ -478,8 +459,8 @@ Session::jack_timebase_callback (jack_transport_state_t state,
#endif
}
-jack_nframes_t
-Session::convert_to_frames_at (jack_nframes_t position, AnyTime& any)
+ARDOUR::nframes_t
+Session::convert_to_frames_at (nframes_t position, AnyTime& any)
{
double secs;
@@ -493,19 +474,19 @@ Session::convert_to_frames_at (jack_nframes_t position, AnyTime& any)
secs = any.smpte.hours * 60 * 60;
secs += any.smpte.minutes * 60;
secs += any.smpte.seconds;
- secs += any.smpte.frames / smpte_frames_per_second;
+ secs += any.smpte.frames / Config->get_smpte_frames_per_second ();
if (_smpte_offset_negative)
{
- return (jack_nframes_t) floor (secs * frame_rate()) - _smpte_offset;
+ return (nframes_t) floor (secs * frame_rate()) - _smpte_offset;
}
else
{
- return (jack_nframes_t) floor (secs * frame_rate()) + _smpte_offset;
+ return (nframes_t) floor (secs * frame_rate()) + _smpte_offset;
}
break;
case AnyTime::Seconds:
- return (jack_nframes_t) floor (any.seconds * frame_rate());
+ return (nframes_t) floor (any.seconds * frame_rate());
break;
case AnyTime::Frames:
diff --git a/libs/ardour/session_timefx.cc b/libs/ardour/session_timefx.cc
index b5b143514c..69a42ec8b8 100644
--- a/libs/ardour/session_timefx.cc
+++ b/libs/ardour/session_timefx.cc
@@ -48,8 +48,8 @@ Session::tempoize_region (TimeStretchRequest& tsr)
string region_name;
string ident = X_("-TIMEFX-");
float percentage;
- jack_nframes_t total_frames;
- jack_nframes_t done;
+ nframes_t total_frames;
+ nframes_t done;
/* the soundtouch code wants a *tempo* change percentage, which is
of opposite sign to the length change.
@@ -91,13 +91,13 @@ Session::tempoize_region (TimeStretchRequest& tsr)
}
try {
- const jack_nframes_t bufsize = 16384;
+ const nframes_t bufsize = 16384;
for (uint32_t i = 0; i < sources.size(); ++i) {
gain_t gain_buffer[bufsize];
Sample buffer[bufsize];
- jack_nframes_t pos = 0;
- jack_nframes_t this_read = 0;
+ nframes_t pos = 0;
+ nframes_t this_read = 0;
boost::shared_ptr<AudioSource> asrc = boost::dynamic_pointer_cast<AudioSource>(sources[i]);
if (!asrc) {
@@ -107,7 +107,7 @@ Session::tempoize_region (TimeStretchRequest& tsr)
st.clear();
while (tsr.running && pos < tsr.region->length()) {
- jack_nframes_t this_time;
+ nframes_t this_time;
this_time = min (bufsize, tsr.region->length() - pos);
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index 561d63fe78..004261fe8e 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -57,16 +57,15 @@ Session::request_input_change_handling ()
}
void
-Session::request_slave_source (SlaveSource src, jack_nframes_t pos)
+Session::request_slave_source (SlaveSource src)
{
- Event* ev = new Event (Event::SetSlaveSource, Event::Add, Event::Immediate, pos, 0.0);
+ Event* ev = new Event (Event::SetSlaveSource, Event::Add, Event::Immediate, 0, 0.0);
- if (src == Session::JACK) {
- /* could set_seamless_loop() be disposed of entirely?*/
- set_seamless_loop (false);
+ if (src == JACK) {
+ /* could set_seamless_loop() be disposed of entirely?*/
+ Config->set_seamless_loop (false);
} else {
-
- set_seamless_loop (true);
+ Config->set_seamless_loop (true);
}
ev->slave = src;
queue_event (ev);
@@ -95,21 +94,21 @@ Session::request_stop (bool abort)
}
void
-Session::request_locate (jack_nframes_t target_frame, bool with_roll)
+Session::request_locate (nframes_t target_frame, bool with_roll)
{
Event *ev = new Event (with_roll ? Event::LocateRoll : Event::Locate, Event::Add, Event::Immediate, target_frame, 0, false);
queue_event (ev);
}
void
-Session::force_locate (jack_nframes_t target_frame, bool with_roll)
+Session::force_locate (nframes_t target_frame, bool with_roll)
{
Event *ev = new Event (with_roll ? Event::LocateRoll : Event::Locate, Event::Add, Event::Immediate, target_frame, 0, true);
queue_event (ev);
}
void
-Session::request_auto_loop (bool yn)
+Session::request_play_loop (bool yn)
{
Event* ev;
Location *location = _locations.auto_loop_location();
@@ -123,7 +122,7 @@ Session::request_auto_loop (bool yn)
ev = new Event (Event::SetLoop, Event::Add, Event::Immediate, 0, 0.0, yn);
queue_event (ev);
- if (!yn && seamless_loop && transport_rolling()) {
+ if (!yn && Config->get_seamless_loop() && transport_rolling()) {
// request an immediate locate to refresh the diskstreams
// after disabling looping
request_locate (_transport_frame-1, true);
@@ -131,21 +130,6 @@ Session::request_auto_loop (bool yn)
}
void
-Session::set_seamless_loop (bool yn)
-{
- if (seamless_loop != yn) {
- seamless_loop = yn;
-
- if (auto_loop && transport_rolling()) {
- // to reset diskstreams etc
- request_auto_loop (true);
- }
-
- ControlChanged (SeamlessLoop); /* EMIT */
- }
-}
-
-void
Session::realtime_stop (bool abort)
{
/* assume that when we start, we'll be moving forwards */
@@ -195,7 +179,7 @@ Session::realtime_stop (bool abort)
waiting_for_sync_offset = true;
}
- transport_sub_state = (auto_return ? AutoReturning : 0);
+ transport_sub_state = (Config->get_auto_return() ? AutoReturning : 0);
}
void
@@ -230,7 +214,7 @@ Session::butler_transport_work ()
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
if (!(*i)->hidden()) {
if ((*i)->speed() != 1.0f || (*i)->speed() != -1.0f) {
- (*i)->seek ((jack_nframes_t) (_transport_frame * (double) (*i)->speed()));
+ (*i)->seek ((nframes_t) (_transport_frame * (double) (*i)->speed()));
}
else {
(*i)->seek (_transport_frame);
@@ -282,11 +266,13 @@ Session::non_realtime_stop (bool abort)
struct tm* now;
time_t xnow;
bool did_record;
-
+ bool saved;
+
did_record = false;
-
- boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
+ saved = false;
+ boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
+
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
if ((*i)->get_captured_frames () != 0) {
did_record = true;
@@ -312,7 +298,7 @@ Session::non_realtime_stop (bool abort)
Location* loc = _locations.end_location();
bool change_end = false;
-
+
if (_transport_frame < loc->end()) {
/* stopped recording before current end */
@@ -353,22 +339,22 @@ Session::non_realtime_stop (bool abort)
(*i)->set_pending_declick (0);
}
}
-
+
if (did_record) {
commit_reversible_command ();
}
-
+
if (_engine.running()) {
update_latency_compensation (true, abort);
}
- if (auto_return || (post_transport_work & PostTransportLocate) || synced_to_jack()) {
-
+ if (Config->get_auto_return() || (post_transport_work & PostTransportLocate) || synced_to_jack()) {
+
if (pending_locate_flush) {
flush_all_redirects ();
}
- if ((auto_return || synced_to_jack()) && !(post_transport_work & PostTransportLocate)) {
+ if ((Config->get_auto_return() || synced_to_jack()) && !(post_transport_work & PostTransportLocate)) {
_transport_frame = last_stop_frame;
@@ -384,14 +370,14 @@ Session::non_realtime_stop (bool abort)
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
if (!(*i)->hidden()) {
if ((*i)->speed() != 1.0f || (*i)->speed() != -1.0f) {
- (*i)->seek ((jack_nframes_t) (_transport_frame * (double) (*i)->speed()));
+ (*i)->seek ((nframes_t) (_transport_frame * (double) (*i)->speed()));
}
else {
(*i)->seek (_transport_frame);
}
}
}
-
+
//FIXME
//deliver_mmc (MIDI::MachineControl::cmdLocate, _transport_frame);
@@ -407,7 +393,7 @@ Session::non_realtime_stop (bool abort)
when realtime_stop(), which has already executed,
will have done this.
*/
-
+
if (!Config->get_latched_record_enable()) {
g_atomic_int_set (&_record_status, Disabled);
} else {
@@ -419,6 +405,7 @@ Session::non_realtime_stop (bool abort)
if ((post_transport_work & PostTransportLocate) && get_record_enabled()) {
/* capture start has been changed, so save pending state */
save_state ("", true);
+ saved = true;
}
/* always try to get rid of this */
@@ -427,7 +414,7 @@ Session::non_realtime_stop (bool abort)
/* save the current state of things if appropriate */
- if (did_record) {
+ if (did_record && !saved) {
save_state (_current_snapshot_name);
}
@@ -439,7 +426,7 @@ Session::non_realtime_stop (bool abort)
_play_range = false;
/* do not turn off autoloop on stop */
-
+
}
PositionChanged (_transport_frame); /* EMIT SIGNAL */
@@ -447,7 +434,7 @@ Session::non_realtime_stop (bool abort)
/* and start it up again if relevant */
- if ((post_transport_work & PostTransportLocate) && _slave_type == None && pending_locate_roll) {
+ if ((post_transport_work & PostTransportLocate) && Config->get_slave_source() == None && pending_locate_roll) {
request_transport_speed (1.0);
pending_locate_roll = false;
}
@@ -478,7 +465,7 @@ Session::check_declick_out ()
}
void
-Session::set_auto_loop (bool yn)
+Session::set_play_loop (bool yn)
{
/* Called from event-handling context */
@@ -488,7 +475,7 @@ Session::set_auto_loop (bool yn)
set_dirty();
- if (yn && seamless_loop && synced_to_jack()) {
+ if (yn && Config->get_seamless_loop() && synced_to_jack()) {
warning << _("Seamless looping cannot be supported while Ardour is using JACK transport.\n"
"Recommend changing the configured options")
<< endmsg;
@@ -496,14 +483,14 @@ Session::set_auto_loop (bool yn)
}
- if ((auto_loop = yn)) {
+ if ((play_loop = yn)) {
Location *loc;
if ((loc = _locations.auto_loop_location()) != 0) {
- if (seamless_loop) {
+ if (Config->get_seamless_loop()) {
// set all diskstreams to use internal looping
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
@@ -553,8 +540,6 @@ Session::set_auto_loop (bool yn)
}
}
-
- ControlChanged (AutoLoop); /* EMIT SIGNAL */
}
void
@@ -568,12 +553,12 @@ Session::flush_all_redirects ()
}
void
-Session::start_locate (jack_nframes_t target_frame, bool with_roll, bool with_flush, bool with_loop)
+Session::start_locate (nframes_t target_frame, bool with_roll, bool with_flush, bool with_loop)
{
if (synced_to_jack()) {
float sp;
- jack_nframes_t pos;
+ nframes_t pos;
_slave->speed_and_position (sp, pos);
@@ -598,7 +583,7 @@ Session::start_locate (jack_nframes_t target_frame, bool with_roll, bool with_fl
}
void
-Session::locate (jack_nframes_t target_frame, bool with_roll, bool with_flush, bool with_loop)
+Session::locate (nframes_t target_frame, bool with_roll, bool with_flush, bool with_loop)
{
if (actively_recording()) {
return;
@@ -631,7 +616,7 @@ Session::locate (jack_nframes_t target_frame, bool with_roll, bool with_flush, b
}
}
- if (transport_rolling() && !auto_play && !with_roll && !(synced_to_jack() && auto_loop)) {
+ if (transport_rolling() && !Config->get_auto_play() && !with_roll && !(synced_to_jack() && play_loop)) {
realtime_stop (false);
}
@@ -663,20 +648,20 @@ Session::locate (jack_nframes_t target_frame, bool with_roll, bool with_flush, b
if (with_roll) {
/* switch from input if we're going to roll */
- if (Config->get_use_hardware_monitoring()) {
+ if (Config->get_monitoring_model() == HardwareMonitoring) {
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
if ((*i)->record_enabled ()) {
//cerr << "switching from input" << __FILE__ << __LINE__ << endl << endl;
- (*i)->monitor_input (!auto_input);
+ (*i)->monitor_input (!Config->get_auto_input());
}
}
}
} else {
/* otherwise we're going to stop, so do the opposite */
- if (Config->get_use_hardware_monitoring()) {
+ if (Config->get_monitoring_model() == HardwareMonitoring) {
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
@@ -688,13 +673,13 @@ Session::locate (jack_nframes_t target_frame, bool with_roll, bool with_flush, b
}
}
- /* cancel autoloop if transport pos outside of loop range */
- if (auto_loop) {
+ /* cancel looped playback if transport pos outside of loop range */
+ if (play_loop) {
Location* al = _locations.auto_loop_location();
if (al && (_transport_frame < al->start() || _transport_frame > al->end())) {
// cancel looping directly, this is called from event handling context
- set_auto_loop(false);
+ set_play_loop (false);
}
}
@@ -718,7 +703,7 @@ Session::set_transport_speed (float speed, bool abort)
if (transport_rolling() && speed == 0.0) {
- if (Config->get_use_hardware_monitoring())
+ if (Config->get_monitoring_model() == HardwareMonitoring)
{
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
@@ -735,19 +720,19 @@ Session::set_transport_speed (float speed, bool abort)
} else {
stop_transport (abort);
}
-
+
} else if (transport_stopped() && speed == 1.0) {
if (!get_record_enabled() && Config->get_stop_at_session_end() && _transport_frame >= current_end_frame()) {
return;
}
- if (Config->get_use_hardware_monitoring()) {
+ if (Config->get_monitoring_model() == HardwareMonitoring) {
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
- if (auto_input && (*i)->record_enabled ()) {
+ if (Config->get_auto_input() && (*i)->record_enabled ()) {
//cerr << "switching from input" << __FILE__ << __LINE__ << endl << endl;
(*i)->monitor_input (false);
}
@@ -816,7 +801,7 @@ Session::stop_transport (bool abort)
if (_transport_speed == 0.0f) {
return;
}
-
+
if (actively_recording() && !(transport_sub_state & StopPendingCapture) &&
_worst_output_latency > current_block_size)
{
@@ -839,9 +824,11 @@ Session::stop_transport (bool abort)
return;
}
+
if ((transport_sub_state & PendingDeclickOut) == 0) {
transport_sub_state |= PendingDeclickOut;
/* we'll be called again after the declick */
+ pending_abort = abort;
return;
}
@@ -860,7 +847,7 @@ Session::start_transport ()
switch (record_status()) {
case Enabled:
- if (!punch_in) {
+ if (!Config->get_punch_in()) {
enable_record ();
}
break;
@@ -919,7 +906,7 @@ Session::post_transport ()
if (post_transport_work & PostTransportLocate) {
- if ((auto_play && !_exporting) || (post_transport_work & PostTransportRoll)) {
+ if ((Config->get_auto_play() && !_exporting) || (post_transport_work & PostTransportRoll)) {
start_transport ();
@@ -934,15 +921,7 @@ Session::post_transport ()
}
void
-Session::set_rf_speed (float speed)
-{
- rf_speed = speed;
- cumulative_rf_motion = 0;
- reset_rf_scale (0);
-}
-
-void
-Session::reset_rf_scale (jack_nframes_t motion)
+Session::reset_rf_scale (nframes_t motion)
{
cumulative_rf_motion += motion;
@@ -961,31 +940,24 @@ Session::reset_rf_scale (jack_nframes_t motion)
}
}
-int
-Session::set_slave_source (SlaveSource src, jack_nframes_t frame)
+void
+Session::set_slave_source (SlaveSource src)
{
bool reverse = false;
bool non_rt_required = false;
- if (src == _slave_type) {
- return 0;
- }
-
if (_transport_speed) {
error << _("please stop the transport before adjusting slave settings") << endmsg;
- /* help out non-MVC friendly UI's by telling them the slave type changed */
- ControlChanged (SlaveType); /* EMIT SIGNAL */
- return 0;
+ return;
}
// if (src == JACK && Config->get_jack_time_master()) {
-// return -1;
+// return;
// }
if (_slave) {
delete _slave;
_slave = 0;
- _slave_type = None;
}
if (_transport_speed < 0.0) {
@@ -996,7 +968,7 @@ Session::set_slave_source (SlaveSource src, jack_nframes_t frame)
case None:
stop_transport ();
break;
-
+
case MTC:
if (_mtc_port) {
try {
@@ -1004,12 +976,12 @@ Session::set_slave_source (SlaveSource src, jack_nframes_t frame)
}
catch (failed_constructor& err) {
- return -1;
+ return;
}
} else {
error << _("No MTC port defined: MTC slaving is impossible.") << endmsg;
- return -1;
+ return;
}
_desired_transport_speed = _transport_speed;
break;
@@ -1019,9 +991,9 @@ Session::set_slave_source (SlaveSource src, jack_nframes_t frame)
_desired_transport_speed = _transport_speed;
break;
};
-
- _slave_type = src;
+ Config->set_slave_source (src);
+
boost::shared_ptr<DiskstreamList> dsl = diskstreams.reader();
for (DiskstreamList::iterator i = dsl->begin(); i != dsl->end(); ++i) {
if (!(*i)->hidden()) {
@@ -1042,9 +1014,6 @@ Session::set_slave_source (SlaveSource src, jack_nframes_t frame)
}
set_dirty();
- ControlChanged (SlaveType); /* EMIT SIGNAL */
-
- return 0;
}
void
@@ -1093,8 +1062,6 @@ Session::set_play_range (bool yn)
Event* ev = new Event (Event::SetTransportSpeed, Event::Add, Event::Immediate, 0, 0.0f, false);
merge_event (ev);
}
-
- ControlChanged (PlayRange); /* EMIT SIGNAL */
}
}
@@ -1127,7 +1094,7 @@ Session::setup_auto_play ()
/* locating/stopping is subject to delays for declicking.
*/
- jack_nframes_t requested_frame = (*i).end;
+ nframes_t requested_frame = (*i).end;
if (requested_frame > current_block_size) {
requested_frame -= current_block_size;
@@ -1160,7 +1127,7 @@ Session::setup_auto_play ()
}
void
-Session::request_bounded_roll (jack_nframes_t start, jack_nframes_t end)
+Session::request_bounded_roll (nframes_t start, nframes_t end)
{
request_stop ();
Event *ev = new Event (Event::StopOnce, Event::Replace, Event::Immediate, end, 0.0);
@@ -1224,8 +1191,8 @@ Session::update_latency_compensation (bool with_stop, bool abort)
(!(post_transport_work & PostTransportLocate) || pending_locate_flush));
}
- jack_nframes_t old_latency = (*i)->signal_latency ();
- jack_nframes_t track_latency = (*i)->update_total_latency ();
+ nframes_t old_latency = (*i)->signal_latency ();
+ nframes_t track_latency = (*i)->update_total_latency ();
if (old_latency != track_latency) {
update_jack = true;
diff --git a/libs/ardour/sndfilesource.cc b/libs/ardour/sndfilesource.cc
index 0e80dee714..dcc0b82c0e 100644
--- a/libs/ardour/sndfilesource.cc
+++ b/libs/ardour/sndfilesource.cc
@@ -23,6 +23,7 @@
#include <pwd.h>
#include <sys/utsname.h>
+#include <sys/stat.h>
#include <glibmm/miscutils.h>
@@ -42,14 +43,6 @@ SndFileSource::SndFileSource (Session& s, const XMLNode& node)
if (open()) {
throw failed_constructor ();
}
-
- if (_build_peakfiles) {
- if (initialize_peakfile (false, _path)) {
- sf_close (sf);
- sf = 0;
- throw failed_constructor ();
- }
- }
}
SndFileSource::SndFileSource (Session& s, string idstr, Flag flags)
@@ -61,23 +54,21 @@ SndFileSource::SndFileSource (Session& s, string idstr, Flag flags)
if (open()) {
throw failed_constructor ();
}
-
- if (!(_flags & NoPeakFile) && _build_peakfiles) {
- if (initialize_peakfile (false, _path)) {
- sf_close (sf);
- sf = 0;
- throw failed_constructor ();
- }
- }
}
-SndFileSource::SndFileSource (Session& s, string idstr, SampleFormat sfmt, HeaderFormat hf, jack_nframes_t rate, Flag flags)
+SndFileSource::SndFileSource (Session& s, string idstr, SampleFormat sfmt, HeaderFormat hf, nframes_t rate, Flag flags)
: AudioFileSource (s, idstr, flags, sfmt, hf)
{
int fmt = 0;
init (idstr);
+ /* this constructor is used to construct new files, not open
+ existing ones.
+ */
+
+ file_is_new = true;
+
switch (hf) {
case CAF:
fmt = SF_FORMAT_CAF;
@@ -170,14 +161,6 @@ SndFileSource::SndFileSource (Session& s, string idstr, SampleFormat sfmt, Heade
}
}
-
- if (!(_flags & NoPeakFile) && _build_peakfiles) {
- if (initialize_peakfile (true, _path)) {
- sf_close (sf);
- sf = 0;
- throw failed_constructor ();
- }
- }
}
void
@@ -266,6 +249,14 @@ SndFileSource::~SndFileSource ()
if (sf) {
sf_close (sf);
sf = 0;
+
+ /* stupid libsndfile updated the headers on close,
+ so touch the peakfile if it exists and has data
+ to make sure its time is as new as the audio
+ file.
+ */
+
+ touch_peakfile ();
}
if (interleave_buf) {
@@ -283,18 +274,13 @@ SndFileSource::sample_rate () const
return _info.samplerate;
}
-jack_nframes_t
-SndFileSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const
+nframes_t
+SndFileSource::read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const
{
int32_t nread;
float *ptr;
uint32_t real_cnt;
- jack_nframes_t file_cnt;
-
- //destructive (tape) tracks need to offset reads and writes by the timeline position
- if (_flags && ARDOUR::Destructive == ARDOUR::Destructive) {
- start -= timeline_position;
- }
+ nframes_t file_cnt;
if (start > _length) {
@@ -325,14 +311,14 @@ SndFileSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t
}
if (_info.channels == 1) {
- jack_nframes_t ret = sf_read_float (sf, dst, file_cnt);
+ nframes_t ret = sf_read_float (sf, dst, file_cnt);
_read_data_count = cnt * sizeof(float);
return ret;
}
}
if (file_cnt != cnt) {
- jack_nframes_t delta = cnt - file_cnt;
+ nframes_t delta = cnt - file_cnt;
memset (dst+file_cnt, 0, sizeof (Sample) * delta);
}
@@ -363,8 +349,8 @@ SndFileSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t
return nread;
}
-jack_nframes_t
-SndFileSource::write_unlocked (Sample *data, jack_nframes_t cnt)
+nframes_t
+SndFileSource::write_unlocked (Sample *data, nframes_t cnt)
{
if (!writable()) {
return 0;
@@ -376,7 +362,7 @@ SndFileSource::write_unlocked (Sample *data, jack_nframes_t cnt)
return 0;
}
- jack_nframes_t oldlen;
+ nframes_t oldlen;
int32_t frame_pos = _length;
if (write_float (data, frame_pos, cnt) != cnt) {
@@ -409,7 +395,7 @@ SndFileSource::write_unlocked (Sample *data, jack_nframes_t cnt)
if (_build_peakfiles) {
- queue_for_peaks (this);
+ queue_for_peaks (shared_from_this ());
}
_write_data_count = cnt;
@@ -418,7 +404,7 @@ SndFileSource::write_unlocked (Sample *data, jack_nframes_t cnt)
}
int
-SndFileSource::update_header (jack_nframes_t when, struct tm& now, time_t tnow)
+SndFileSource::update_header (nframes_t when, struct tm& now, time_t tnow)
{
set_timeline_position (when);
@@ -437,12 +423,11 @@ SndFileSource::flush_header ()
if (!writable() || (sf == 0)) {
return -1;
}
-
return (sf_command (sf, SFC_UPDATE_HEADER_NOW, 0, 0) != SF_TRUE);
}
int
-SndFileSource::setup_broadcast_info (jack_nframes_t when, struct tm& now, time_t tnow)
+SndFileSource::setup_broadcast_info (nframes_t when, struct tm& now, time_t tnow)
{
if (!writable()) {
return -1;
@@ -511,8 +496,8 @@ SndFileSource::set_header_timeline_position ()
}
-jack_nframes_t
-SndFileSource::write_float (Sample* data, jack_nframes_t frame_pos, jack_nframes_t cnt)
+nframes_t
+SndFileSource::write_float (Sample* data, nframes_t frame_pos, nframes_t cnt)
{
if (sf_seek (sf, frame_pos, SEEK_SET|SFM_WRITE) != frame_pos) {
error << string_compose (_("%1: cannot seek to %2"), _path, frame_pos) << endmsg;
@@ -526,7 +511,7 @@ SndFileSource::write_float (Sample* data, jack_nframes_t frame_pos, jack_nframes
return cnt;
}
-jack_nframes_t
+nframes_t
SndFileSource::natural_position() const
{
return timeline_position;
diff --git a/libs/ardour/source.cc b/libs/ardour/source.cc
index 977aea6efd..86ca0c55f2 100644
--- a/libs/ardour/source.cc
+++ b/libs/ardour/source.cc
@@ -79,7 +79,7 @@ Source::get_state ()
node->add_property ("name", _name);
node->add_property ("type", _type.to_string());
- _id.print (buf);
+ _id.print (buf, sizeof (buf));
node->add_property ("id", buf);
if (_timestamp != 0) {
diff --git a/libs/ardour/source_factory.cc b/libs/ardour/source_factory.cc
index 29cd5166ff..e9564a6193 100644
--- a/libs/ardour/source_factory.cc
+++ b/libs/ardour/source_factory.cc
@@ -18,6 +18,8 @@
$Id$
*/
+#include <pbd/error.h>
+
#include <ardour/source_factory.h>
#include <ardour/sndfilesource.h>
#include <ardour/smf_source.h>
@@ -32,9 +34,24 @@
using namespace ARDOUR;
using namespace std;
+using namespace PBD;
sigc::signal<void,boost::shared_ptr<Source> > SourceFactory::SourceCreated;
+int
+SourceFactory::setup_peakfile (boost::shared_ptr<Source> s)
+{
+ boost::shared_ptr<AudioSource> as (boost::dynamic_pointer_cast<AudioSource> (s));
+ if (as) {
+ if (as->setup_peakfile ()) {
+ error << string_compose("SourceFactory: could not set up peakfile for %1", as->name()) << endmsg;
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
#ifdef HAVE_COREAUDIO
boost::shared_ptr<Source>
SourceFactory::create (Session& s, const XMLNode& node)
@@ -46,17 +63,23 @@ SourceFactory::create (Session& s, const XMLNode& node)
}
if (type == DataType::AUDIO) {
-
+
if (node.property (X_("destructive")) != 0) {
-
+
boost::shared_ptr<Source> ret (new DestructiveFileSource (s, node));
+ if (setup_peakfile (ret)) {
+ return boost::shared_ptr<Source>();
+ }
SourceCreated (ret);
return ret;
-
+
} else {
try {
boost::shared_ptr<Source> ret (new CoreAudioSource (s, node));
+ if (setup_peakfile (ret)) {
+ return boost::shared_ptr<Source>();
+ }
SourceCreated (ret);
return ret;
@@ -70,7 +93,11 @@ SourceFactory::create (Session& s, const XMLNode& node)
catch (failed_constructor& err) {
- boost::shared_ptr<Source> ret (new SndFileSource (node));
+
+ boost::shared_ptr<Source> ret (new SndFileSource (s, node));
+ if (setup_peakfile (ret)) {
+ return boost::shared_ptr<Source>();
+ }
SourceCreated (ret);
return ret;
}
@@ -101,20 +128,26 @@ SourceFactory::create (Session& s, const XMLNode& node)
if (type == DataType::AUDIO) {
if (node.property (X_("destructive")) != 0) {
-
+
boost::shared_ptr<Source> ret (new DestructiveFileSource (s, node));
+ if (setup_peakfile (ret)) {
+ return boost::shared_ptr<Source>();
+ }
SourceCreated (ret);
return ret;
} else {
-
+
boost::shared_ptr<Source> ret (new SndFileSource (s, node));
+ if (setup_peakfile (ret)) {
+ return boost::shared_ptr<Source>();
+ }
SourceCreated (ret);
return ret;
}
} else if (type == DataType::MIDI) {
-
+
boost::shared_ptr<Source> ret (new SMFSource (s, node));
SourceCreated (ret);
return ret;
@@ -130,9 +163,13 @@ SourceFactory::create (Session& s, const XMLNode& node)
boost::shared_ptr<Source>
SourceFactory::createReadable (DataType type, Session& s, string idstr, AudioFileSource::Flag flags, bool announce)
{
+<<<<<<< .working
if (type == DataType::AUDIO) {
if (flags & Destructive) {
boost::shared_ptr<Source> ret (new DestructiveFileSource (s, idstr, flags));
+ if (setup_peakfile (ret)) {
+ return boost::shared_ptr<Source>();
+ }
if (announce) {
SourceCreated (ret);
}
@@ -172,6 +209,9 @@ SourceFactory::createReadable (DataType type, Session& s, string idstr, AudioFil
if (type == DataType::AUDIO) {
boost::shared_ptr<Source> ret (new SndFileSource (s, idstr, flags));
+ if (setup_peakfile (ret)) {
+ return boost::shared_ptr<Source>();
+ }
if (announce) {
SourceCreated (ret);
}
@@ -180,6 +220,9 @@ SourceFactory::createReadable (DataType type, Session& s, string idstr, AudioFil
} else if (type == DataType::MIDI) {
boost::shared_ptr<Source> ret (new SMFSource (s, idstr, SMFSource::Flag(0))); // FIXME: flags?
+ if (setup_peakfile (ret)) {
+ return boost::shared_ptr<Source>();
+ }
if (announce) {
SourceCreated (ret);
}
@@ -193,35 +236,37 @@ SourceFactory::createReadable (DataType type, Session& s, string idstr, AudioFil
#endif // HAVE_COREAUDIO
boost::shared_ptr<Source>
-SourceFactory::createWritable (DataType type, Session& s, std::string path, bool destructive, jack_nframes_t rate, bool announce)
+SourceFactory::createWritable (DataType type, Session& s, std::string path, bool destructive, nframes_t rate, bool announce)
{
/* this might throw failed_constructor(), which is OK */
if (type == DataType::AUDIO) {
+
if (destructive) {
-
boost::shared_ptr<Source> ret (new DestructiveFileSource (s, path,
Config->get_native_file_data_format(),
Config->get_native_file_header_format(),
rate));
+ if (setup_peakfile (ret)) {
+ return boost::shared_ptr<Source>();
+ }
if (announce) {
SourceCreated (ret);
}
- return ret;
-
} else {
-
boost::shared_ptr<Source> ret (new SndFileSource (s, path,
Config->get_native_file_data_format(),
Config->get_native_file_header_format(),
rate));
+ if (setup_peakfile (ret)) {
+ return boost::shared_ptr<Source>();
+ }
if (announce) {
SourceCreated (ret);
}
return ret;
-
}
-
+
} else if (type == DataType::MIDI) {
boost::shared_ptr<Source> ret (new SMFSource (s, path));
diff --git a/libs/ardour/sse_functions.s b/libs/ardour/sse_functions.s
index 7df689188c..934ce6887a 100644
--- a/libs/ardour/sse_functions.s
+++ b/libs/ardour/sse_functions.s
@@ -524,6 +524,8 @@ x86_sse_compute_peak:
.size x86_sse_compute_peak, .-x86_sse_compute_peak
#; end proc
-
+#ifdef __ELF__
+.section .note.GNU-stack,"",%progbits
+#endif
diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc
index c2ff4f9a3a..3cc5420c67 100644
--- a/libs/ardour/tempo.cc
+++ b/libs/ardour/tempo.cc
@@ -47,7 +47,7 @@ const double Meter::ticks_per_beat = 1920.0;
/***********************************************************************/
double
-Meter::frames_per_bar (const Tempo& tempo, jack_nframes_t sr) const
+Meter::frames_per_bar (const Tempo& tempo, nframes_t sr) const
{
return ((60.0 * sr * _beats_per_bar) / tempo.beats_per_minute());
}
@@ -200,7 +200,7 @@ struct MetricSectionSorter {
}
};
-TempoMap::TempoMap (jack_nframes_t fr)
+TempoMap::TempoMap (nframes_t fr)
{
metrics = new Metrics;
_frame_rate = fr;
@@ -509,8 +509,8 @@ TempoMap::timestamp_metrics ()
const Tempo* tempo;
Meter *m;
Tempo *t;
- jack_nframes_t current;
- jack_nframes_t section_frames;
+ nframes_t current;
+ nframes_t section_frames;
BBT_Time start;
BBT_Time end;
@@ -542,7 +542,7 @@ TempoMap::timestamp_metrics ()
}
TempoMap::Metric
-TempoMap::metric_at (jack_nframes_t frame) const
+TempoMap::metric_at (nframes_t frame) const
{
Metric m (first_meter(), first_tempo());
const Meter* meter;
@@ -610,7 +610,7 @@ TempoMap::metric_at (BBT_Time bbt) const
}
void
-TempoMap::bbt_time (jack_nframes_t frame, BBT_Time& bbt) const
+TempoMap::bbt_time (nframes_t frame, BBT_Time& bbt) const
{
{
Glib::RWLock::ReaderLock lm (lock);
@@ -619,15 +619,15 @@ TempoMap::bbt_time (jack_nframes_t frame, BBT_Time& bbt) const
}
void
-TempoMap::bbt_time_unlocked (jack_nframes_t frame, BBT_Time& bbt) const
+TempoMap::bbt_time_unlocked (nframes_t frame, BBT_Time& bbt) const
{
bbt_time_with_metric (frame, bbt, metric_at (frame));
}
void
-TempoMap::bbt_time_with_metric (jack_nframes_t frame, BBT_Time& bbt, const Metric& metric) const
+TempoMap::bbt_time_with_metric (nframes_t frame, BBT_Time& bbt, const Metric& metric) const
{
- jack_nframes_t frame_diff;
+ nframes_t frame_diff;
uint32_t xtra_bars = 0;
double xtra_beats = 0;
@@ -667,7 +667,7 @@ TempoMap::bbt_time_with_metric (jack_nframes_t frame, BBT_Time& bbt, const Metri
}
-jack_nframes_t
+nframes_t
TempoMap::count_frames_between ( const BBT_Time& start, const BBT_Time& end) const
{
@@ -676,9 +676,9 @@ TempoMap::count_frames_between ( const BBT_Time& start, const BBT_Time& end) con
*/
- jack_nframes_t frames = 0;
- jack_nframes_t start_frame = 0;
- jack_nframes_t end_frame = 0;
+ nframes_t frames = 0;
+ nframes_t start_frame = 0;
+ nframes_t end_frame = 0;
Metric m = metric_at(start);
@@ -688,7 +688,7 @@ TempoMap::count_frames_between ( const BBT_Time& start, const BBT_Time& end) con
+ start.ticks/Meter::ticks_per_beat;
- start_frame = m.frame() + (jack_nframes_t) rint( beat_offset * m.tempo().frames_per_beat(_frame_rate));
+ start_frame = m.frame() + (nframes_t) rint( beat_offset * m.tempo().frames_per_beat(_frame_rate));
m = metric_at(end);
@@ -697,7 +697,7 @@ TempoMap::count_frames_between ( const BBT_Time& start, const BBT_Time& end) con
beat_offset = bar_offset * m.meter().beats_per_bar() - (m.start().beats -1) + (end.beats - 1)
+ end.ticks/Meter::ticks_per_beat;
- end_frame = m.frame() + (jack_nframes_t) rint(beat_offset * m.tempo().frames_per_beat(_frame_rate));
+ end_frame = m.frame() + (nframes_t) rint(beat_offset * m.tempo().frames_per_beat(_frame_rate));
frames = end_frame - start_frame;
@@ -705,12 +705,12 @@ TempoMap::count_frames_between ( const BBT_Time& start, const BBT_Time& end) con
}
-jack_nframes_t
+nframes_t
TempoMap::count_frames_between_metrics (const Meter& meter, const Tempo& tempo, const BBT_Time& start, const BBT_Time& end) const
{
/*this is used in timestamping the metrics by actually counting the beats */
- jack_nframes_t frames = 0;
+ nframes_t frames = 0;
uint32_t bar = start.bars;
double beat = (double) start.beats;
double beats_counted = 0;
@@ -739,13 +739,13 @@ TempoMap::count_frames_between_metrics (const Meter& meter, const Tempo& tempo,
}
}
- frames = (jack_nframes_t) floor (beats_counted * beat_frames);
+ frames = (nframes_t) floor (beats_counted * beat_frames);
return frames;
}
-jack_nframes_t
+nframes_t
TempoMap::frame_time (const BBT_Time& bbt) const
{
BBT_Time start ; /* 1|1|0 */
@@ -753,10 +753,10 @@ TempoMap::frame_time (const BBT_Time& bbt) const
return count_frames_between ( start, bbt);
}
-jack_nframes_t
-TempoMap::bbt_duration_at (jack_nframes_t pos, const BBT_Time& bbt, int dir) const
+nframes_t
+TempoMap::bbt_duration_at (nframes_t pos, const BBT_Time& bbt, int dir) const
{
- jack_nframes_t frames = 0;
+ nframes_t frames = 0;
BBT_Time when;
bbt_time(pos,when);
@@ -769,11 +769,11 @@ TempoMap::bbt_duration_at (jack_nframes_t pos, const BBT_Time& bbt, int dir) con
return frames;
}
-jack_nframes_t
+nframes_t
TempoMap::bbt_duration_at_unlocked (const BBT_Time& when, const BBT_Time& bbt, int dir) const
{
- jack_nframes_t frames = 0;
+ nframes_t frames = 0;
double beats_per_bar;
BBT_Time result;
@@ -896,8 +896,8 @@ TempoMap::bbt_duration_at_unlocked (const BBT_Time& when, const BBT_Time& bbt, i
-jack_nframes_t
-TempoMap::round_to_bar (jack_nframes_t fr, int dir)
+nframes_t
+TempoMap::round_to_bar (nframes_t fr, int dir)
{
{
Glib::RWLock::ReaderLock lm (lock);
@@ -906,8 +906,8 @@ TempoMap::round_to_bar (jack_nframes_t fr, int dir)
}
-jack_nframes_t
-TempoMap::round_to_beat (jack_nframes_t fr, int dir)
+nframes_t
+TempoMap::round_to_beat (nframes_t fr, int dir)
{
{
Glib::RWLock::ReaderLock lm (lock);
@@ -915,9 +915,9 @@ TempoMap::round_to_beat (jack_nframes_t fr, int dir)
}
}
-jack_nframes_t
+nframes_t
-TempoMap::round_to_beat_subdivision (jack_nframes_t fr, int sub_num)
+TempoMap::round_to_beat_subdivision (nframes_t fr, int sub_num)
{
BBT_Time the_beat;
@@ -948,16 +948,16 @@ TempoMap::round_to_beat_subdivision (jack_nframes_t fr, int sub_num)
TempoMap::BBTPointList::iterator i;
TempoMap::BBTPointList *more_zoomed_bbt_points;
- jack_nframes_t frame_one_beats_worth;
- jack_nframes_t pos = 0;
- jack_nframes_t next_pos = 0 ;
+ nframes_t frame_one_beats_worth;
+ nframes_t pos = 0;
+ nframes_t next_pos = 0 ;
double tempo = 1;
double frames_one_subdivisions_worth;
bool fr_has_changed = false;
int n;
- frame_one_beats_worth = (jack_nframes_t) ::floor ((double) _frame_rate * 60 / 20 ); //one beat @ 20 bpm
+ frame_one_beats_worth = (nframes_t) ::floor ((double) _frame_rate * 60 / 20 ); //one beat @ 20 bpm
{
Glib::RWLock::ReaderLock lm (lock);
more_zoomed_bbt_points = get_points((fr >= frame_one_beats_worth) ?
@@ -982,7 +982,7 @@ TempoMap::round_to_beat_subdivision (jack_nframes_t fr, int sub_num)
for (n = sub_num; n > 0; n--) {
if (fr >= (pos + ((n - 0.5) * frames_one_subdivisions_worth))) {
- fr = (jack_nframes_t) round(pos + (n * frames_one_subdivisions_worth));
+ fr = (nframes_t) round(pos + (n * frames_one_subdivisions_worth));
if (fr > next_pos) {
fr = next_pos; //take care of fractional beats that don't match the subdivision asked
}
@@ -1002,9 +1002,9 @@ TempoMap::round_to_beat_subdivision (jack_nframes_t fr, int sub_num)
}
-jack_nframes_t
+nframes_t
-TempoMap::round_to_type (jack_nframes_t frame, int dir, BBTPointType type)
+TempoMap::round_to_type (nframes_t frame, int dir, BBTPointType type)
{
Metric metric = metric_at (frame);
BBT_Time bbt;
@@ -1055,7 +1055,7 @@ TempoMap::round_to_type (jack_nframes_t frame, int dir, BBTPointType type)
}
TempoMap::BBTPointList *
-TempoMap::get_points (jack_nframes_t lower, jack_nframes_t upper) const
+TempoMap::get_points (nframes_t lower, nframes_t upper) const
{
Metrics::const_iterator i;
@@ -1071,7 +1071,7 @@ TempoMap::get_points (jack_nframes_t lower, jack_nframes_t upper) const
double beat_frame;
double beat_frames;
double frames_per_bar;
- jack_nframes_t limit;
+ nframes_t limit;
meter = &first_meter ();
tempo = &first_tempo ();
@@ -1132,7 +1132,7 @@ TempoMap::get_points (jack_nframes_t lower, jack_nframes_t upper) const
if (beat == 1) {
if (current >= lower) {
- points->push_back (BBTPoint (*meter, *tempo,(jack_nframes_t)rint(current), Bar, bar, 1));
+ points->push_back (BBTPoint (*meter, *tempo,(nframes_t)rint(current), Bar, bar, 1));
}
}
@@ -1143,7 +1143,7 @@ TempoMap::get_points (jack_nframes_t lower, jack_nframes_t upper) const
while (beat <= ceil( beats_per_bar) && beat_frame < limit) {
if (beat_frame >= lower) {
- points->push_back (BBTPoint (*meter, *tempo, (jack_nframes_t) rint(beat_frame), Beat, bar, beat));
+ points->push_back (BBTPoint (*meter, *tempo, (nframes_t) rint(beat_frame), Beat, bar, beat));
}
beat_frame += beat_frames;
current+= beat_frames;
@@ -1206,7 +1206,7 @@ TempoMap::get_points (jack_nframes_t lower, jack_nframes_t upper) const
}
const Tempo&
-TempoMap::tempo_at (jack_nframes_t frame)
+TempoMap::tempo_at (nframes_t frame)
{
Metric m (metric_at (frame));
return m.tempo();
@@ -1214,7 +1214,7 @@ TempoMap::tempo_at (jack_nframes_t frame)
const Meter&
-TempoMap::meter_at (jack_nframes_t frame)
+TempoMap::meter_at (nframes_t frame)
{
Metric m (metric_at (frame));
return m.meter();
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index 79229efdab..053a866256 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -88,7 +88,7 @@ Track::toggle_monitor_input ()
}
}
-jack_nframes_t
+ARDOUR::nframes_t
Track::update_total_latency ()
{
_own_latency = 0;
@@ -119,7 +119,7 @@ Track::freeze_state() const
}
Track::RecEnableControllable::RecEnableControllable (Track& s)
- : track (s)
+ : Controllable (X_("recenable")), track (s)
{
}
@@ -218,7 +218,7 @@ Track::set_name (string str, void *src)
}
void
-Track::set_latency_delay (jack_nframes_t longest_session_latency)
+Track::set_latency_delay (nframes_t longest_session_latency)
{
Route::set_latency_delay (longest_session_latency);
_diskstream->set_roll_delay (_roll_delay);
diff --git a/libs/ardour/utils.cc b/libs/ardour/utils.cc
index ce4f4accd3..9a841e81b4 100644
--- a/libs/ardour/utils.cc
+++ b/libs/ardour/utils.cc
@@ -18,6 +18,9 @@
$Id$
*/
+#define __STDC_FORMAT_MACROS 1
+#include <stdint.h>
+
#include <cstdio> /* for sprintf */
#include <cmath>
#include <cctype>
@@ -279,7 +282,7 @@ CFStringRefToStdString(CFStringRef stringRef)
#endif // HAVE_COREAUDIO
void
-compute_equal_power_fades (jack_nframes_t nframes, float* in, float* out)
+compute_equal_power_fades (nframes_t nframes, float* in, float* out)
{
double step;
@@ -287,7 +290,7 @@ compute_equal_power_fades (jack_nframes_t nframes, float* in, float* out)
in[0] = 0.0f;
- for (jack_nframes_t i = 1; i < nframes - 1; ++i) {
+ for (nframes_t i = 1; i < nframes - 1; ++i) {
in[i] = in[i-1] + step;
}
@@ -303,3 +306,104 @@ compute_equal_power_fades (jack_nframes_t nframes, float* in, float* out)
in[n] = inVal * (scale * inVal + 1.0f - scale);
}
}
+
+EditMode
+string_to_edit_mode (string str)
+{
+ if (str == _("Splice Edit")) {
+ return Splice;
+ } else if (str == _("Slide Edit")) {
+ return Slide;
+ }
+ fatal << string_compose (_("programming error: unknown edit mode string \"%1\""), str) << endmsg;
+ /*NOTREACHED*/
+ return Slide;
+}
+
+const char*
+edit_mode_to_string (EditMode mode)
+{
+ switch (mode) {
+ case Slide:
+ return _("Slide Edit");
+
+ default:
+ case Splice:
+ return _("Splice Edit");
+ }
+}
+
+SlaveSource
+string_to_slave_source (string str)
+{
+ if (str == _("Internal")) {
+ return None;
+ }
+
+ if (str == _("MTC")) {
+ return MTC;
+ }
+
+ if (str == _("JACK")) {
+ return JACK;
+ }
+
+ fatal << string_compose (_("programming error: unknown slave source string \"%1\""), str) << endmsg;
+ /*NOTREACHED*/
+ return None;
+}
+
+const char*
+slave_source_to_string (SlaveSource src)
+{
+ switch (src) {
+ case JACK:
+ return _("JACK");
+
+ case MTC:
+ return _("MTC");
+
+ default:
+ case None:
+ return _("Internal");
+
+ }
+}
+
+float
+meter_falloff_to_float (MeterFalloff falloff)
+{
+ switch (falloff) {
+ case MeterFalloffOff:
+ return 0.0f;
+ case MeterFalloffSlowest:
+ return 1.0f;
+ case MeterFalloffSlow:
+ return 2.0f;
+ case MeterFalloffMedium:
+ return 3.0f;
+ case MeterFalloffFast:
+ return 4.0f;
+ case MeterFalloffFaster:
+ return 5.0f;
+ case MeterFalloffFastest:
+ default:
+ return 6.0f;
+ }
+}
+
+float
+meter_hold_to_float (MeterHold hold)
+{
+ switch (hold) {
+ case MeterHoldOff:
+ return 0.0f;
+ case MeterHoldShort:
+ return 40.0f;
+ case MeterHoldMedium:
+ return 100.0f;
+ case MeterHoldLong:
+ default:
+ return 200.0f;
+ }
+}
diff --git a/libs/ardour/vst_plugin.cc b/libs/ardour/vst_plugin.cc
index 5dd32f2d51..800c5a9856 100644
--- a/libs/ardour/vst_plugin.cc
+++ b/libs/ardour/vst_plugin.cc
@@ -103,7 +103,7 @@ VSTPlugin::~VSTPlugin ()
}
void
-VSTPlugin::set_block_size (jack_nframes_t nframes)
+VSTPlugin::set_block_size (nframes_t nframes)
{
deactivate ();
_plugin->dispatcher (_plugin, effSetBlockSize, 0, nframes, NULL, 0.0f);
@@ -212,7 +212,7 @@ VSTPlugin::get_state()
char index[64];
char val[32];
snprintf (index, sizeof (index), "param_%ld", n);
- snprintf (val, sizeof (val), "%f", _plugin->getParameter (_plugin, n));
+ snprintf (val, sizeof (val), "%.12g", _plugin->getParameter (_plugin, n));
parameters->add_property (index, val);
}
@@ -245,6 +245,7 @@ VSTPlugin::set_state(const XMLNode& node)
for (i = child->properties().begin(); i != child->properties().end(); ++i) {
long param;
float val;
+
sscanf ((*i)->name().c_str(), "param_%ld", &param);
sscanf ((*i)->value().c_str(), "%f", &val);
@@ -357,7 +358,7 @@ VSTPlugin::describe_parameter (uint32_t param)
return name;
}
-jack_nframes_t
+nframes_t
VSTPlugin::latency () const
{
return _plugin->initialDelay;
@@ -376,7 +377,7 @@ VSTPlugin::automatable () const
}
int
-VSTPlugin::connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in_index, int32_t& out_index, jack_nframes_t nframes, jack_nframes_t offset)
+VSTPlugin::connect_and_run (vector<Sample*>& bufs, uint32_t maxbuf, int32_t& in_index, int32_t& out_index, nframes_t nframes, nframes_t offset)
{
float *ins[_plugin->numInputs];
float *outs[_plugin->numOutputs];
diff --git a/libs/fst/SConscript b/libs/fst/SConscript
index 0499f11c61..2cbfb94a9f 100644
--- a/libs/fst/SConscript
+++ b/libs/fst/SConscript
@@ -21,7 +21,12 @@ b = fst.Object ('fstinfofile', 'fstinfofile.c')
c = fst.Object ('vstwin', 'vstwin.c')
d = fst.Object ('vsti', 'vsti.c')
-Default([hackSDK,a,b,c,d])
-
-env.Alias('tarball', env.Distribute (env['DISTTREE'], fst_src + ['SConscript'] ))
+if fst['VST']:
+ Default([hackSDK,a,b,c,d])
+
+env.Alias('tarball', env.Distribute (env['DISTTREE'],
+ fst_src + ['SConscript',
+ 'fst.h',
+ 'jackvst.h'
+ ] ))
diff --git a/libs/glibmm2/SConscript b/libs/glibmm2/SConscript
index e5caa60a45..dbc58e6499 100644
--- a/libs/glibmm2/SConscript
+++ b/libs/glibmm2/SConscript
@@ -18,17 +18,29 @@ glibmm2.Append(CXXFLAGS='-DG_LOG_DOMAIN=\\\"glibmm\\\"')
libglibmm2 = glibmm2.SharedLibrary('glibmm2', glibmm2_files)
-if os.path.exists ('CVS') or os.path.exists ('.svn'):
- glibmm2_configure_script = glibmm2.Command ('configure', 'configure.ac', 'cd libs/glibmm2; ./autogen.sh; cd -', ENV=os.environ)
- glibmm2_config_h = glibmm2.Command('glibmmconfig.h', [glibmm2_configure_script, 'glibmmconfig.h.in'], 'cd libs/glibmm2; ./configure; cd -', ENV=os.environ)
- Default([glibmm2_config_h, libglibmm2])
-else:
- Default([libglibmm2])
+if os.access ('autogen.sh', os.F_OK) :
+ glibmm2_configure_script = glibmm2.Command ('configure', 'configure.ac', 'cd libs/glibmm2; ./autogen.sh; cd -', ENV=os.environ)
+ glibmm2_config_h = glibmm2.Command('glibmmconfig.h', [glibmm2_configure_script, 'glibmmconfig.h.in'],
+ 'cd libs/glibmm2; ./configure || exit 1; cd -', ENV=os.environ)
+else :
+ glibmm2_config_h = glibmm2.Command('glibmmconfig.h', ['configure', 'glibmmconfig.h.in'],
+ 'cd libs/glibmm2; ./configure || exit 1; cd -', ENV=os.environ)
+
+Default([glibmm2_config_h, libglibmm2])
env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), libglibmm2))
env.Alias('tarball', env.Distribute (env['DISTTREE'],
- [ 'SConscript', 'glibmm.h','glibmmconfig.h'] +
+ [ 'SConscript',
+ 'glibmm.h',
+ 'configure',
+ 'Makefile.in',
+ 'glibmmconfig.h',
+ 'glibmmconfig.h.in',
+ 'glibmm-2.4.pc.in',
+ 'glibmm/Makefile.in',
+ 'scripts'
+ ] +
glibmm2_files +
glob.glob('glibmm/*.h') +
glob.glob('glibmm/private/*.h')
diff --git a/libs/gtkmm2ext/dndtreeview.cc b/libs/gtkmm2ext/dndtreeview.cc
index 83955861cf..7baedd4121 100644
--- a/libs/gtkmm2ext/dndtreeview.cc
+++ b/libs/gtkmm2ext/dndtreeview.cc
@@ -10,7 +10,7 @@ using namespace Gtk;
using namespace Glib;
using namespace Gtkmm2ext;
-DnDTreeView::DnDTreeView ()
+DnDTreeViewBase::DnDTreeViewBase ()
: TreeView ()
{
draggable.push_back (TargetEntry ("GTK_TREE_MODEL_ROW", TARGET_SAME_WIDGET));
@@ -23,7 +23,7 @@ DnDTreeView::DnDTreeView ()
}
void
-DnDTreeView::add_drop_targets (list<TargetEntry>& targets)
+DnDTreeViewBase::add_drop_targets (list<TargetEntry>& targets)
{
for (list<TargetEntry>::iterator i = targets.begin(); i != targets.end(); ++i) {
draggable.push_back (*i);
@@ -33,7 +33,7 @@ DnDTreeView::add_drop_targets (list<TargetEntry>& targets)
}
void
-DnDTreeView::add_object_drag (int column, string type_name)
+DnDTreeViewBase::add_object_drag (int column, string type_name)
{
draggable.push_back (TargetEntry (type_name, TargetFlags(0)));
data_column = column;
@@ -42,86 +42,11 @@ DnDTreeView::add_object_drag (int column, string type_name)
enable_model_drag_dest (draggable);
}
-DnDTreeView::SerializedObjectPointers*
-DnDTreeView::serialize_pointers (RefPtr<TreeModel> model, TreeSelection::ListHandle_Path* selection, ustring type)
-{
- uint32_t cnt = selection->size();
- uint32_t sz = (sizeof (void*) * cnt) + sizeof (SerializedObjectPointers);
-
- cerr << "lets plan to serialize " << cnt << " from selection\n";
-
- char* buf = new char[sz];
- SerializedObjectPointers* sr = new (buf) SerializedObjectPointers;
-
- sr->cnt = cnt;
- sr->size = sz;
-
- snprintf (sr->type, sizeof (sr->type), "%s", type.c_str());
-
- cnt = 0;
-
- for (TreeSelection::ListHandle_Path::iterator x = selection->begin(); x != selection->end(); ++x, ++cnt) {
- cerr << "getting next item\n";
- TreeModel::Row row = *(model->get_iter (*x));
- row.get_value (data_column, sr->ptr[cnt]);
- }
-
- cerr << "returning an SR with size = " << sr->size << endl;
- return sr;
-}
-
-void
-DnDTreeView::on_drag_data_get(const RefPtr<DragContext>& context, SelectionData& selection_data, guint info, guint time)
-{
- if (selection_data.get_target() == "GTK_TREE_MODEL_ROW") {
-
- TreeView::on_drag_data_get (context, selection_data, info, time);
-
- } else if (data_column >= 0) {
-
- Gtk::TreeSelection::ListHandle_Path selection = get_selection()->get_selected_rows ();
- SerializedObjectPointers* sr = serialize_pointers (get_model(), &selection, selection_data.get_target());
- selection_data.set (8, (guchar*)sr, sr->size);
-
- cerr << "selection data set to contain " << sr->size << endl;
- }
-}
-
-void
-DnDTreeView::on_drag_data_received(const RefPtr<DragContext>& context, int x, int y, const SelectionData& selection_data, guint info, guint time)
-{
- if (suggested_action) {
- /* this is a drag motion callback. just update the status to
- say that we are still dragging, and that's it.
- */
- suggested_action = Gdk::DragAction (0);
- TreeView::on_drag_data_received (context, x, y, selection_data, info, time);
- return;
- }
-
- if (selection_data.get_target() == "GTK_TREE_MODEL_ROW") {
-
- TreeView::on_drag_data_received (context, x, y, selection_data, info, time);
-
- } else if (data_column >= 0) {
-
- /* object D-n-D */
-
- const SerializedObjectPointers* sr = reinterpret_cast<const SerializedObjectPointers *>(selection_data.get_data());
-
- if (sr) {
- signal_object_drop (sr->type, sr->cnt, const_cast<void**>(sr->ptr));
- }
-
- } else {
- /* some kind of target type added by the app, which will be handled by a signal handler */
- }
-}
-
bool
-DnDTreeView::on_drag_drop(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint time)
+DnDTreeViewBase::on_drag_drop(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint time)
{
suggested_action = Gdk::DragAction (0);
return TreeView::on_drag_drop (context, x, y, time);
}
+
diff --git a/libs/gtkmm2ext/gtk_ui.cc b/libs/gtkmm2ext/gtk_ui.cc
index 55a6bebb02..177e4f3dbb 100644
--- a/libs/gtkmm2ext/gtk_ui.cc
+++ b/libs/gtkmm2ext/gtk_ui.cc
@@ -253,7 +253,11 @@ static bool idle_quit ()
void
UI::do_quit ()
{
- Glib::signal_idle().connect (sigc::ptr_fun (idle_quit));
+ if (getenv ("ARDOUR_RUNNING_UNDER_VALGRIND")) {
+ Main::quit ();
+ } else {
+ Glib::signal_idle().connect (sigc::ptr_fun (idle_quit));
+ }
}
void
diff --git a/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h b/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h
index 82bb7651b9..f8beb75873 100644
--- a/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h
+++ b/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h
@@ -9,60 +9,136 @@
namespace Gtkmm2ext {
-class DnDTreeView : public Gtk::TreeView
-{
+template<class DataType>
+struct SerializedObjectPointers {
+ uint32_t size;
+ uint32_t cnt;
+ char type[32];
+ DataType data[0];
+};
+class DnDTreeViewBase : public Gtk::TreeView
+{
private:
public:
- DnDTreeView ();
- ~DnDTreeView() {}
+ DnDTreeViewBase ();
+ ~DnDTreeViewBase() {}
- /* this is the structure pointed to if add_object_drag() is called
- and a drop happens on a destination which has declared itself
- willing to accept a target of the type named in the call
- to add_object_drag().
- */
-
- struct SerializedObjectPointers {
- uint32_t size;
- uint32_t cnt;
- char type[32];
- void* ptr[0];
- };
-
void add_drop_targets (std::list<Gtk::TargetEntry>&);
void add_object_drag (int column, std::string type_name);
- sigc::signal<void,std::string,uint32_t,void**> signal_object_drop;
- void on_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context) {
- TreeView::on_drag_begin (context);
- }
- void on_drag_end(const Glib::RefPtr<Gdk::DragContext>& context) {
- TreeView::on_drag_end (context);
- }
- void on_drag_data_delete(const Glib::RefPtr<Gdk::DragContext>& context) {
- TreeView::on_drag_data_delete (context);
- }
void on_drag_leave(const Glib::RefPtr<Gdk::DragContext>& context, guint time) {
- suggested_action = context->get_suggested_action();
- TreeView::on_drag_leave (context, time);
+ suggested_action = context->get_suggested_action();
+ TreeView::on_drag_leave (context, time);
}
+
bool on_drag_motion(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint time) {
suggested_action = context->get_suggested_action();
return TreeView::on_drag_motion (context, x, y, time);
}
+
bool on_drag_drop(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint time);
- void on_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context, Gtk::SelectionData& selection_data, guint info, guint time);
- void on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, const Gtk::SelectionData& selection_data, guint info, guint time);
- private:
+ protected:
std::list<Gtk::TargetEntry> draggable;
Gdk::DragAction suggested_action;
int data_column;
-
- SerializedObjectPointers* serialize_pointers (Glib::RefPtr<Gtk::TreeModel> m,
- Gtk::TreeSelection::ListHandle_Path*,
- Glib::ustring type);
+};
+
+template<class DataType>
+class DnDTreeView : public DnDTreeViewBase
+{
+ public:
+ DnDTreeView() {}
+ ~DnDTreeView() {}
+
+ sigc::signal<void,std::string,uint32_t,const DataType*> signal_object_drop;
+
+ void on_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context, Gtk::SelectionData& selection_data, guint info, guint time) {
+ if (selection_data.get_target() == "GTK_TREE_MODEL_ROW") {
+
+ TreeView::on_drag_data_get (context, selection_data, info, time);
+
+ } else if (data_column >= 0) {
+
+ Gtk::TreeSelection::ListHandle_Path selection = get_selection()->get_selected_rows ();
+ SerializedObjectPointers<DataType>* sr = serialize_pointers (get_model(), &selection, selection_data.get_target());
+ selection_data.set (8, (guchar*)sr, sr->size);
+ }
+ }
+
+ void on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, const Gtk::SelectionData& selection_data, guint info, guint time) {
+ if (suggested_action) {
+ /* this is a drag motion callback. just update the status to
+ say that we are still dragging, and that's it.
+ */
+ suggested_action = Gdk::DragAction (0);
+ TreeView::on_drag_data_received (context, x, y, selection_data, info, time);
+ return;
+ }
+
+ if (selection_data.get_target() == "GTK_TREE_MODEL_ROW") {
+
+ TreeView::on_drag_data_received (context, x, y, selection_data, info, time);
+
+ } else if (data_column >= 0) {
+
+ /* object D-n-D */
+
+ const void* data = selection_data.get_data();
+ const SerializedObjectPointers<DataType>* sr = reinterpret_cast<const SerializedObjectPointers<DataType> *>(data);
+
+ if (sr) {
+ signal_object_drop (sr->type, sr->cnt, sr->data);
+ }
+
+ } else {
+ /* some kind of target type added by the app, which will be handled by a signal handler */
+ }
+ }
+
+ private:
+
+ SerializedObjectPointers<DataType>* serialize_pointers (Glib::RefPtr<Gtk::TreeModel> model,
+ Gtk::TreeSelection::ListHandle_Path* selection,
+ Glib::ustring type) {
+
+ /* this nasty chunk of code is here because X's DnD protocol (probably other graphics UI's too)
+ requires that we package up the entire data collection for DnD in a single contiguous region
+ (so that it can be trivially copied between address spaces). We don't know the type of DataType so
+ we have to mix-and-match C and C++ programming techniques here to get the right result.
+
+ The C trick is to use the "someType foo[0];" declaration trick to create a zero-sized array at the
+ end of a SerializedObjectPointers<DataType object. Then we allocate a raw memory buffer that extends
+ past that array and thus provides space for however many DataType items we actually want to pass
+ around.
+
+ The C++ trick is to use the placement operator new() syntax to initialize that extra
+ memory properly.
+ */
+
+ uint32_t cnt = selection->size();
+ uint32_t sz = (sizeof (DataType) * cnt) + sizeof (SerializedObjectPointers<DataType>);
+
+ char* buf = new char[sz];
+ SerializedObjectPointers<DataType>* sr = (SerializedObjectPointers<DataType>*) buf;
+
+ for (uint32_t i = 0; i < cnt; ++i) {
+ new ((void *) &sr->data[i]) DataType ();
+ }
+
+ sr->cnt = cnt;
+ sr->size = sz;
+ snprintf (sr->type, sizeof (sr->type), "%s", type.c_str());
+
+ cnt = 0;
+
+ for (Gtk::TreeSelection::ListHandle_Path::iterator x = selection->begin(); x != selection->end(); ++x, ++cnt) {
+ model->get_iter (*x)->get_value (data_column, sr->data[cnt]);
+ }
+
+ return sr;
+ }
};
} // namespace
diff --git a/libs/libsndfile/SConscript b/libs/libsndfile/SConscript
index b7d35b9337..b1c29e5487 100644
--- a/libs/libsndfile/SConscript
+++ b/libs/libsndfile/SConscript
@@ -35,9 +35,17 @@ env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), li
env.Alias('tarball', env.Distribute (env['DISTTREE'],
[ 'NEWS', 'README', 'AUTHORS', 'ChangeLog',
- 'configure', 'SConscript',] +
+ 'configure', 'SConscript',
+ 'install-sh',
+ 'libsndfile.spec.in',
+ 'sndfile.pc.in',
+ 'config.sub',
+ 'config.guess'
+ ] +
sndfile_files +
glob.glob('src/*.h') +
+ glob.glob('src/GSM610/*.h') +
+ glob.glob('src/G72x/*.h') +
[ 'src/sndfile.h.in', 'src/config.h.in', 'src/Symbols.linux', 'src/Symbols.darwin', 'src/libsndfile.def', 'src/cygsndfile.def' ]
))
diff --git a/libs/midi++2/midi++/types.h b/libs/midi++2/midi++/types.h
index 797c50a31b..ca7345c0d6 100644
--- a/libs/midi++2/midi++/types.h
+++ b/libs/midi++2/midi++/types.h
@@ -1,14 +1,16 @@
#ifndef __midi_types_h__
#define __midi_types_h__
+#include <inttypes.h>
+
namespace MIDI {
typedef char channel_t;
typedef float controller_value_t;
typedef unsigned char byte;
typedef unsigned short pitchbend_t;
- typedef unsigned int timestamp_t;
- typedef unsigned int nframes_t;
+ typedef uint32_t nframes_t;
+ typedef uint32_t timestamp_t;
enum eventType {
none = 0x0,
diff --git a/libs/pbd/controllable.cc b/libs/pbd/controllable.cc
index b1176c64a5..80c6811e6a 100644
--- a/libs/pbd/controllable.cc
+++ b/libs/pbd/controllable.cc
@@ -1,26 +1,40 @@
#include <pbd/controllable.h>
#include <pbd/xml++.h>
+#include <pbd/error.h>
#include "i18n.h"
using namespace PBD;
-sigc::signal<void,Controllable*> Controllable::Created;
sigc::signal<void,Controllable*> Controllable::GoingAway;
sigc::signal<bool,Controllable*> Controllable::StartLearning;
sigc::signal<void,Controllable*> Controllable::StopLearning;
-Controllable::Controllable ()
+Controllable::Controllable (std::string name)
+ : _name (name)
{
- Created (this);
}
XMLNode&
Controllable::get_state ()
{
- XMLNode* node = new XMLNode (X_("Controllable"));
+ XMLNode* node = new XMLNode (_name);
char buf[64];
- _id.print (buf);
+ _id.print (buf, sizeof (buf));
node->add_property (X_("id"), buf);
return *node;
}
+
+int
+Controllable::set_state (const XMLNode& node)
+{
+ const XMLProperty* prop = node.property (X_("id"));
+
+ if (prop) {
+ _id = prop->value();
+ return 0;
+ } else {
+ error << _("Controllable state node has no ID property") << endmsg;
+ return -1;
+ }
+}
diff --git a/libs/pbd/id.cc b/libs/pbd/id.cc
index ab7806873e..353776de9f 100644
--- a/libs/pbd/id.cc
+++ b/libs/pbd/id.cc
@@ -40,16 +40,15 @@ ID::string_assign (string str)
}
void
-ID::print (char* buf) const
+ID::print (char* buf, uint32_t bufsize) const
{
- /* XXX sizeof buf is unknown. bad API design */
- snprintf (buf, 16, "%" PRIu64, _id);
+ snprintf (buf, bufsize, "%" PRIu64, _id);
}
string ID::to_s() const
{
- char buf[16]; // see print()
- print(buf);
+ char buf[32]; // see print()
+ print(buf, sizeof (buf));
return string(buf);
}
@@ -64,7 +63,7 @@ ostream&
operator<< (ostream& ostr, const ID& _id)
{
char buf[32];
- _id.print (buf);
+ _id.print (buf, sizeof (buf));
ostr << buf;
return ostr;
}
diff --git a/libs/pbd/pbd/controllable.h b/libs/pbd/pbd/controllable.h
index c46e477b6e..ff8f8a9b52 100644
--- a/libs/pbd/pbd/controllable.h
+++ b/libs/pbd/pbd/controllable.h
@@ -1,6 +1,8 @@
#ifndef __pbd_controllable_h__
#define __pbd_controllable_h__
+#include <string>
+
#include <sigc++/trackable.h>
#include <sigc++/signal.h>
@@ -13,7 +15,7 @@ namespace PBD {
class Controllable : public virtual sigc::trackable, public Stateful {
public:
- Controllable ();
+ Controllable (std::string name);
virtual ~Controllable() { GoingAway (this); }
virtual void set_value (float) = 0;
@@ -23,22 +25,20 @@ class Controllable : public virtual sigc::trackable, public Stateful {
sigc::signal<void> LearningFinished;
- static sigc::signal<void,Controllable*> Created;
static sigc::signal<void,Controllable*> GoingAway;
-
static sigc::signal<bool,PBD::Controllable*> StartLearning;
static sigc::signal<void,PBD::Controllable*> StopLearning;
sigc::signal<void> Changed;
- const PBD::ID& id() const { return _id; }
-
- int set_state (const XMLNode&) { return 0; }
+ int set_state (const XMLNode&);
XMLNode& get_state ();
+ std::string name() const { return _name; }
+
private:
- PBD::ID _id;
+ std::string _name;
};
}
diff --git a/libs/pbd/pbd/destructible.h b/libs/pbd/pbd/destructible.h
index 126bd04bba..6692ff564c 100644
--- a/libs/pbd/pbd/destructible.h
+++ b/libs/pbd/pbd/destructible.h
@@ -5,7 +5,7 @@
namespace PBD {
-class Destructible {
+class Destructible : public virtual sigc::trackable {
public:
Destructible() {}
virtual ~Destructible () {}
diff --git a/libs/pbd/pbd/id.h b/libs/pbd/pbd/id.h
index c110362734..eb3691d99e 100644
--- a/libs/pbd/pbd/id.h
+++ b/libs/pbd/pbd/id.h
@@ -27,7 +27,7 @@ class ID {
return _id < other._id;
}
- void print (char* buf) const;
+ void print (char* buf, uint32_t bufsize) const;
std::string to_s() const;
static uint64_t counter() { return _counter; }
diff --git a/libs/pbd/pbd/memento_command.h b/libs/pbd/pbd/memento_command.h
index f257e63233..715e9d33e3 100644
--- a/libs/pbd/pbd/memento_command.h
+++ b/libs/pbd/pbd/memento_command.h
@@ -30,10 +30,20 @@ using std::endl;
#include <sigc++/slot.h>
#include <typeinfo>
+/* grrr, strict C++ says that static member functions are not C functions, but we also want
+ to be able to pack this into a sigc::ptr_fun and not sigc::mem_fun, so we have to make
+ it a genuine function rather than a member.
+*/
+
+static void object_death (Command* mc) {
+ delete mc;
+}
+
/** This command class is initialized with before and after mementos
* (from Stateful::get_state()), so undo becomes restoring the before
* memento, and redo is restoring the after memento.
*/
+
template <class obj_T>
class MementoCommand : public Command
{
@@ -43,8 +53,9 @@ class MementoCommand : public Command
XMLNode *after
)
: obj(object), before(before), after(after) {
- obj.GoingAway.connect (sigc::mem_fun (*this, &MementoCommand<obj_T>::object_death));
+ obj.GoingAway.connect (sigc::bind (sigc::ptr_fun (object_death), static_cast<Command*>(this)));
}
+
~MementoCommand () {
GoingAway();
if (before) {
@@ -91,10 +102,6 @@ class MementoCommand : public Command
protected:
obj_T &obj;
XMLNode *before, *after;
-
- void object_death () {
- delete this;
- }
};
#endif // __lib_pbd_memento_h__
diff --git a/libs/pbd/pbd/restartable_rw.h b/libs/pbd/pbd/restartable_rw.h
deleted file mode 100644
index ee84e4e295..0000000000
--- a/libs/pbd/pbd/restartable_rw.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef __libmisc_restartable_rw__h__
-#define __libmisc_restartable_rw__h__
-
-extern int restartable_write (int fd, unsigned char *buf, size_t cnt);
-extern int restartable_read (int fd, unsigned char *buf, size_t cnt);
-
-#endif // __libmisc_restartable_rw__h__
diff --git a/libs/pbd/pbd/shiva.h b/libs/pbd/pbd/shiva.h
new file mode 100644
index 0000000000..5110f48332
--- /dev/null
+++ b/libs/pbd/pbd/shiva.h
@@ -0,0 +1,51 @@
+#ifndef __pbd_shiva_h__
+#define __pbd_shiva_h__
+
+#include <sigc++/sigc++.h>
+
+namespace PBD {
+
+template<typename ObjectWithGoingAway, typename ObjectToBeDestroyed>
+
+/* named after the Hindu god Shiva, The Destroyer */
+
+class Shiva {
+ public:
+ Shiva (ObjectWithGoingAway& emitter, ObjectToBeDestroyed& receiver) {
+
+ /* if the emitter goes away, destroy the receiver */
+
+ _connection1 = emitter.GoingAway.connect
+ (sigc::bind (sigc::mem_fun
+ (*this, &Shiva<ObjectWithGoingAway,ObjectToBeDestroyed>::destroy),
+ &receiver));
+
+ /* if the receiver goes away, forget all this nonsense */
+
+ _connection2 = receiver.GoingAway.connect
+ (sigc::mem_fun (*this, &Shiva<ObjectWithGoingAway,ObjectToBeDestroyed>::forget));
+ }
+
+ ~Shiva() {
+ forget ();
+ }
+
+ private:
+ sigc::connection _connection1;
+ sigc::connection _connection2;
+
+ void destroy (ObjectToBeDestroyed* obj) {
+ delete obj;
+ forget ();
+ }
+
+ void forget () {
+ _connection1.disconnect ();
+ _connection2.disconnect ();
+ }
+
+};
+
+}
+
+#endif /* __pbd_shiva_h__ */
diff --git a/libs/pbd/pbd/stacktrace.h b/libs/pbd/pbd/stacktrace.h
index d7278bd35a..fa90a07355 100644
--- a/libs/pbd/pbd/stacktrace.h
+++ b/libs/pbd/pbd/stacktrace.h
@@ -4,7 +4,7 @@
#include <ostream>
namespace PBD {
- void stacktrace (std::ostream& out);
+ void stacktrace (std::ostream& out, int levels = 0);
}
#endif /* __libpbd_stacktrace_h__ */
diff --git a/libs/pbd/pbd/undo.h b/libs/pbd/pbd/undo.h
index eecd8ae49d..943c115af2 100644
--- a/libs/pbd/pbd/undo.h
+++ b/libs/pbd/pbd/undo.h
@@ -40,8 +40,11 @@ class UndoTransaction : public Command
~UndoTransaction ();
void clear ();
+ bool empty() const;
+ bool clearing () const { return _clearing; }
void add_command (Command* const);
+ void remove_command (Command* const);
void operator() ();
void undo();
@@ -66,8 +69,7 @@ class UndoTransaction : public Command
std::list<Command*> actions;
struct timeval _timestamp;
std::string _name;
- bool clearing;
- void remove_command (Command* const);
+ bool _clearing;
};
class UndoHistory
@@ -94,7 +96,7 @@ class UndoHistory
void save_state();
private:
- bool clearing;
+ bool _clearing;
std::list<UndoTransaction*> UndoList;
std::list<UndoTransaction*> RedoList;
diff --git a/libs/pbd/stacktrace.cc b/libs/pbd/stacktrace.cc
index 1e7dfa08e9..a653fe3033 100644
--- a/libs/pbd/stacktrace.cc
+++ b/libs/pbd/stacktrace.cc
@@ -9,7 +9,7 @@
#include <stdlib.h>
void
-PBD::stacktrace (std::ostream& out)
+PBD::stacktrace (std::ostream& out, int levels)
{
void *array[200];
size_t size;
@@ -23,7 +23,7 @@ PBD::stacktrace (std::ostream& out)
printf ("Obtained %zd stack frames.\n", size);
- for (i = 0; i < size; i++) {
+ for (i = 0; i < size && (levels == 0 || i < levels); i++) {
out << strings[i] << std::endl;
}
@@ -34,7 +34,7 @@ PBD::stacktrace (std::ostream& out)
#else
void
-PBD::stacktrace (std::ostream& out)
+PBD::stacktrace (std::ostream& out, int levels)
{
out << "stack tracing is not enabled on this platform" << std::endl;
}
diff --git a/libs/pbd/undo.cc b/libs/pbd/undo.cc
index 717c355bae..af408a24a4 100644
--- a/libs/pbd/undo.cc
+++ b/libs/pbd/undo.cc
@@ -30,15 +30,34 @@
using namespace std;
using namespace sigc;
+/* grrr, strict C++ says that static member functions are not C functions, but we also want
+ to be able to pack this into a sigc::ptr_fun and not sigc::mem_fun, so we have to make
+ it a genuine function rather than a member.
+*/
+
+static void command_death (UndoTransaction* ut, Command* c)
+{
+ if (ut->clearing()) {
+ return;
+ }
+
+ ut->remove_command (c);
+
+ if (ut->empty()) {
+ delete ut;
+ }
+}
+
+
UndoTransaction::UndoTransaction ()
{
- clearing = false;
+ _clearing = false;
}
UndoTransaction::UndoTransaction (const UndoTransaction& rhs)
{
_name = rhs._name;
- clearing = false;
+ _clearing = false;
clear ();
actions.insert(actions.end(),rhs.actions.begin(),rhs.actions.end());
}
@@ -62,31 +81,31 @@ UndoTransaction::operator= (const UndoTransaction& rhs)
void
UndoTransaction::add_command (Command *const action)
{
- action->GoingAway.connect (bind (mem_fun (*this, &UndoTransaction::remove_command), action));
+ action->GoingAway.connect (bind (sigc::ptr_fun (command_death), this, const_cast<Command*>(action)));
actions.push_back (action);
}
void
UndoTransaction::remove_command (Command* const action)
{
- if (clearing) {
- return;
- }
actions.remove (action);
- if (actions.empty()) {
- delete this;
- }
+}
+
+bool
+UndoTransaction::empty () const
+{
+ return actions.empty();
}
void
UndoTransaction::clear ()
{
- clearing = true;
+ _clearing = true;
for (list<Command*>::iterator i = actions.begin(); i != actions.end(); ++i) {
delete *i;
}
actions.clear ();
- clearing = false;
+ _clearing = false;
}
void
@@ -131,7 +150,7 @@ XMLNode &UndoTransaction::get_state()
UndoHistory::UndoHistory ()
{
- clearing = false;
+ _clearing = false;
}
void
@@ -146,7 +165,7 @@ UndoHistory::add (UndoTransaction* const ut)
void
UndoHistory::remove (UndoTransaction* const ut)
{
- if (clearing) {
+ if (_clearing) {
return;
}
@@ -185,17 +204,17 @@ UndoHistory::redo (unsigned int n)
void
UndoHistory::clear_redo ()
{
- clearing = true;
+ _clearing = true;
RedoList.clear ();
- clearing = false;
+ _clearing = false;
}
void
UndoHistory::clear_undo ()
{
- clearing = true;
+ _clearing = true;
UndoList.clear ();
- clearing = false;
+ _clearing = false;
}
void
diff --git a/libs/sigc++2/SConscript b/libs/sigc++2/SConscript
index 06387b38cf..65833dfb53 100644
--- a/libs/sigc++2/SConscript
+++ b/libs/sigc++2/SConscript
@@ -11,20 +11,29 @@ sigc2 = env.Copy()
libsigc2 = sigc2.SharedLibrary('sigc++2', sigc2_files)
-if os.path.exists ('CVS') or os.path.exists ('.svn'):
+if os.access ('autogen.sh', os.F_OK) :
sigc2_configure_script = sigc2.Command ('configure', 'configure.ac', 'cd libs/sigc++2 && ./autogen.sh && cd -', ENV=os.environ)
sigc2_config_h = sigc2.Command('sigc++config.h', [sigc2_configure_script, 'sigc++config.h.in'], 'cd libs/sigc++2 && ./configure && cd -', ENV=os.environ)
- Default([sigc2_config_h,libsigc2])
-else:
- Default([libsigc2])
+else :
+ sigc2_config_h = sigc2.Command('sigc++config.h', ['configure', 'sigc++config.h.in'], 'cd libs/sigc++2 && ./configure && cd -', ENV=os.environ)
+
+
+Default([sigc2_config_h,libsigc2])
env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), libsigc2))
env.Alias('tarball', env.Distribute (env['DISTTREE'],
[ 'NEWS', 'README', 'AUTHORS', 'ChangeLog',
- 'configure', 'Makefile.am', 'SConscript',
- 'sigc++/Makefile.am',
+ 'configure', 'configure.ac', 'Makefile.am', 'SConscript',
+ 'sigc++/Makefile.in',
'sigc++config.h',
+ 'sigc++config.h.in',
+ 'sigc++-2.0.pc.in',
+ 'libsigc++-2.0.spec.in',
+ 'install-sh',
+ 'Makefile.in',
+ 'scripts',
+ 'missing',
] + sigc2_files +
glob.glob('sigc++/*.h') +
glob.glob('sigc++/functors/*.h') + glob.glob('sigc++/adaptors/lambda/*.h') +
diff --git a/libs/surfaces/control_protocol/basic_ui.cc b/libs/surfaces/control_protocol/basic_ui.cc
index 3dc93cc64a..07e000ab20 100644
--- a/libs/surfaces/control_protocol/basic_ui.cc
+++ b/libs/surfaces/control_protocol/basic_ui.cc
@@ -29,6 +29,7 @@
#include "i18n.h"
using namespace ARDOUR;
+using ARDOUR::nframes_t;
BasicUI::BasicUI (Session& s)
: session (&s)
@@ -54,10 +55,10 @@ BasicUI::register_thread (std::string name)
void
BasicUI::loop_toggle ()
{
- if (session->get_auto_loop()) {
- session->request_auto_loop (false);
+ if (Config->get_auto_loop()) {
+ session->request_play_loop (false);
} else {
- session->request_auto_loop (true);
+ session->request_play_loop (true);
if (!session->transport_rolling()) {
session->request_transport_speed (1.0);
}
@@ -79,7 +80,7 @@ BasicUI::goto_end ()
void
BasicUI::add_marker ()
{
- jack_nframes_t when = session->audible_frame();
+ nframes_t when = session->audible_frame();
session->locations()->add (new Location (when, when, _("unnamed"), Location::IsMark));
}
@@ -106,8 +107,8 @@ BasicUI::transport_play (bool from_last_start)
{
bool rolling = session->transport_rolling ();
- if (session->get_auto_loop()) {
- session->request_auto_loop (false);
+ if (Config->get_auto_loop()) {
+ session->request_play_loop (false);
}
if (session->get_play_range ()) {
@@ -208,13 +209,13 @@ BasicUI::toggle_all_rec_enables ()
void
BasicUI::toggle_punch_in ()
{
- session->set_punch_in (!session->get_punch_in());
+ Config->set_punch_in (!Config->get_punch_in());
}
void
BasicUI::toggle_punch_out ()
{
- session->set_punch_out (!session->get_punch_out());
+ Config->set_punch_out (!Config->get_punch_out());
}
bool
@@ -233,14 +234,14 @@ BasicUI::set_record_enable (bool yn)
}
}
-jack_nframes_t
+nframes_t
BasicUI::transport_frame ()
{
return session->transport_frame();
}
void
-BasicUI::locate (jack_nframes_t where, bool roll_after_locate)
+BasicUI::locate (nframes_t where, bool roll_after_locate)
{
session->request_locate (where, roll_after_locate);
}
@@ -257,26 +258,26 @@ BasicUI::locked ()
return session->transport_locked ();
}
-jack_nframes_t
+nframes_t
BasicUI::smpte_frames_per_hour ()
{
return session->smpte_frames_per_hour ();
}
void
-BasicUI::smpte_time (jack_nframes_t where, SMPTE::Time& smpte)
+BasicUI::smpte_time (nframes_t where, SMPTE::Time& smpte)
{
session->smpte_time (where, *((SMPTE::Time *) &smpte));
}
void
-BasicUI::smpte_to_sample (SMPTE::Time& smpte, jack_nframes_t& sample, bool use_offset, bool use_subframes) const
+BasicUI::smpte_to_sample (SMPTE::Time& smpte, nframes_t& sample, bool use_offset, bool use_subframes) const
{
session->smpte_to_sample (*((SMPTE::Time*)&smpte), sample, use_offset, use_subframes);
}
void
-BasicUI::sample_to_smpte (jack_nframes_t sample, SMPTE::Time& smpte, bool use_offset, bool use_subframes) const
+BasicUI::sample_to_smpte (nframes_t sample, SMPTE::Time& smpte, bool use_offset, bool use_subframes) const
{
session->sample_to_smpte (sample, *((SMPTE::Time*)&smpte), use_offset, use_subframes);
}
diff --git a/libs/surfaces/control_protocol/control_protocol/control_protocol.h b/libs/surfaces/control_protocol/control_protocol/control_protocol.h
index 8be652b9df..a689d49431 100644
--- a/libs/surfaces/control_protocol/control_protocol/control_protocol.h
+++ b/libs/surfaces/control_protocol/control_protocol/control_protocol.h
@@ -45,6 +45,9 @@ class ControlProtocol : public sigc::trackable, public Stateful, public BasicUI
virtual int set_active (bool yn) = 0;
bool get_active() const { return _active; }
+ virtual int set_feedback (bool yn) { return 0; }
+ virtual bool get_feedback () const { return false; }
+
sigc::signal<void> ActiveChanged;
/* signals that a control protocol can emit and other (presumably graphical)
@@ -110,6 +113,7 @@ extern "C" {
void* ptr; /* protocol can store a value here */
void* module; /* not for public access */
int mandatory; /* if non-zero, always load and do not make optional */
+ bool supports_feedback; /* if true, protocol has toggleable feedback mechanism */
bool (*probe)(ControlProtocolDescriptor*);
ControlProtocol* (*initialize)(ControlProtocolDescriptor*,Session*);
void (*destroy)(ControlProtocolDescriptor*,ControlProtocol*);
diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
index 4a8c2728c6..03dbfb353c 100644
--- a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
+++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
@@ -18,6 +18,9 @@
$Id$
*/
+#define __STDC_FORMAT_MACROS 1
+#include <stdint.h>
+
#include <algorithm>
#include <pbd/error.h>
@@ -39,7 +42,7 @@ using namespace PBD;
#include "i18n.h"
GenericMidiControlProtocol::GenericMidiControlProtocol (Session& s)
- : ControlProtocol (s, _("GenericMIDI"))
+ : ControlProtocol (s, _("Generic MIDI"))
{
MIDI::Manager* mm = MIDI::Manager::instance();
@@ -54,6 +57,7 @@ GenericMidiControlProtocol::GenericMidiControlProtocol (Session& s)
throw failed_constructor();
}
+ do_feedback = false;
_feedback_interval = 10000; // microseconds
last_feedback_time = 0;
@@ -82,6 +86,10 @@ GenericMidiControlProtocol::set_feedback_interval (microseconds_t ms)
void
GenericMidiControlProtocol::send_feedback ()
{
+ if (!do_feedback) {
+ return;
+ }
+
microseconds_t now = get_microseconds ();
if (last_feedback_time != 0) {
@@ -98,7 +106,7 @@ GenericMidiControlProtocol::send_feedback ()
void
GenericMidiControlProtocol::_send_feedback ()
{
- const int32_t bufsize = 16 * 1024;
+ const int32_t bufsize = 16 * 1024; /* XXX too big */
MIDI::byte buf[bufsize];
int32_t bsize = bufsize;
MIDI::byte* end = buf;
@@ -174,7 +182,14 @@ GenericMidiControlProtocol::stop_learning (Controllable* c)
XMLNode&
GenericMidiControlProtocol::get_state ()
{
- XMLNode* node = new XMLNode (_name); /* node name must match protocol name */
+ XMLNode* node = new XMLNode ("Protocol");
+ char buf[32];
+
+ node->add_property (X_("name"), _name);
+ node->add_property (X_("feedback"), do_feedback ? "1" : "0");
+ snprintf (buf, sizeof (buf), "%" PRIu64, _feedback_interval);
+ node->add_property (X_("feedback_interval"), buf);
+
XMLNode* children = new XMLNode (X_("controls"));
node->add_child_nocopy (*children);
@@ -192,6 +207,22 @@ GenericMidiControlProtocol::set_state (const XMLNode& node)
{
XMLNodeList nlist;
XMLNodeConstIterator niter;
+ const XMLProperty* prop;
+
+ if ((prop = node.property ("feedback")) != 0) {
+ do_feedback = (bool) atoi (prop->value().c_str());
+ } else {
+ do_feedback = false;
+ }
+
+ if ((prop = node.property ("feedback_interval")) != 0) {
+ if (sscanf (prop->value().c_str(), "%" PRIu64, &_feedback_interval) != 1) {
+ _feedback_interval = 10000;
+ }
+ } else {
+ _feedback_interval = 10000;
+ }
+
Controllable* c;
{
@@ -213,22 +244,39 @@ GenericMidiControlProtocol::set_state (const XMLNode& node)
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
- XMLProperty* prop;
-
if ((prop = (*niter)->property ("id")) != 0) {
-
+
ID id = prop->value ();
-
+
c = session->controllable_by_id (id);
-
+
if (c) {
MIDIControllable* mc = new MIDIControllable (*_port, *c);
if (mc->set_state (**niter) == 0) {
controllables.insert (mc);
}
+
+ } else {
+ warning << string_compose (_("Generic MIDI control: controllable %1 not found in session (ignored)"),
+ id)
+ << endmsg;
}
}
}
-
+
+ return 0;
+}
+
+int
+GenericMidiControlProtocol::set_feedback (bool yn)
+{
+ do_feedback = yn;
+ last_feedback_time = 0;
return 0;
}
+
+bool
+GenericMidiControlProtocol::get_feedback () const
+{
+ return do_feedback;
+}
diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.h b/libs/surfaces/generic_midi/generic_midi_control_protocol.h
index 5f5a470b13..6fba16bccd 100644
--- a/libs/surfaces/generic_midi/generic_midi_control_protocol.h
+++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.h
@@ -32,6 +32,9 @@ class GenericMidiControlProtocol : public ARDOUR::ControlProtocol {
MIDI::Port* port () const { return _port; }
void set_feedback_interval (ARDOUR::microseconds_t);
+ int set_feedback (bool yn);
+ bool get_feedback () const;
+
XMLNode& get_state ();
int set_state (const XMLNode&);
@@ -40,6 +43,7 @@ class GenericMidiControlProtocol : public ARDOUR::ControlProtocol {
ARDOUR::microseconds_t _feedback_interval;
ARDOUR::microseconds_t last_feedback_time;
+ bool do_feedback;
void _send_feedback ();
void send_feedback ();
diff --git a/libs/surfaces/generic_midi/interface.cc b/libs/surfaces/generic_midi/interface.cc
index 230be694f2..c70b5b6b61 100644
--- a/libs/surfaces/generic_midi/interface.cc
+++ b/libs/surfaces/generic_midi/interface.cc
@@ -42,6 +42,7 @@ static ControlProtocolDescriptor generic_midi_descriptor = {
ptr : 0,
module : 0,
mandatory : 0,
+ supports_feedback : true,
probe : probe_generic_midi_protocol,
initialize : new_generic_midi_protocol,
destroy : delete_generic_midi_protocol
diff --git a/libs/surfaces/generic_midi/midicontrollable.cc b/libs/surfaces/generic_midi/midicontrollable.cc
index aa3fd3e252..6dc9bde8ad 100644
--- a/libs/surfaces/generic_midi/midicontrollable.cc
+++ b/libs/surfaces/generic_midi/midicontrollable.cc
@@ -345,6 +345,8 @@ MIDIControllable::set_state (const XMLNode& node)
return -1;
}
+ bind_midi (control_channel, control_type, control_additional);
+
return 0;
}
diff --git a/libs/surfaces/tranzport/interface.cc b/libs/surfaces/tranzport/interface.cc
index 29a0fde043..f6d0dc8206 100644
--- a/libs/surfaces/tranzport/interface.cc
+++ b/libs/surfaces/tranzport/interface.cc
@@ -35,6 +35,7 @@ static ControlProtocolDescriptor tranzport_descriptor = {
ptr : 0,
module : 0,
mandatory : 0,
+ supports_feedback : false,
probe : probe_tranzport_protocol,
initialize : new_tranzport_protocol,
destroy : delete_tranzport_protocol
diff --git a/libs/surfaces/tranzport/tranzport_control_protocol.cc b/libs/surfaces/tranzport/tranzport_control_protocol.cc
index 426c837b2f..2e2d943244 100644
--- a/libs/surfaces/tranzport/tranzport_control_protocol.cc
+++ b/libs/surfaces/tranzport/tranzport_control_protocol.cc
@@ -320,7 +320,7 @@ TranzportControlProtocol::show_meter ()
void
TranzportControlProtocol::show_transport_time ()
{
- jack_nframes_t where = session->transport_frame();
+ nframes_t where = session->transport_frame();
if (where != last_where) {
@@ -718,13 +718,13 @@ TranzportControlProtocol::update_state ()
/* global */
- if (session->get_auto_loop()) {
+ if (Config->get_auto_loop()) {
pending_lights[LightLoop] = true;
} else {
pending_lights[LightLoop] = false;
}
- if (session->get_punch_in() || session->get_punch_out()) {
+ if (Config->get_punch_in() || Config->get_punch_out()) {
pending_lights[LightPunch] = true;
} else {
pending_lights[LightPunch] = false;
@@ -1577,7 +1577,8 @@ TranzportControlProtocol::print (int row, int col, const char *text)
XMLNode&
TranzportControlProtocol::get_state ()
{
- XMLNode* node = new XMLNode (_name); /* node name must match protocol name */
+ XMLNode* node = new XMLNode (X_("Protocol"));
+ node->add_property (X_("name"), _name);
return *node;
}
diff --git a/libs/surfaces/tranzport/tranzport_control_protocol.h b/libs/surfaces/tranzport/tranzport_control_protocol.h
index e6e1a83e46..e5193a761c 100644
--- a/libs/surfaces/tranzport/tranzport_control_protocol.h
+++ b/libs/surfaces/tranzport/tranzport_control_protocol.h
@@ -110,7 +110,7 @@ class TranzportControlProtocol : public ARDOUR::ControlProtocol
uint32_t last_mins;
uint32_t last_secs;
uint32_t last_frames;
- jack_nframes_t last_where;
+ nframes_t last_where;
ARDOUR::gain_t last_track_gain;
uint32_t last_meter_fill;
struct timeval last_wheel_motion;
diff --git a/vst/SConscript b/vst/SConscript
index a711a1386d..988a386de3 100644
--- a/vst/SConscript
+++ b/vst/SConscript
@@ -4,7 +4,9 @@ import os
import os.path
import glob
-Import('env install_prefix final_prefix config_prefix libraries')
+from stat import *
+
+Import('env install_prefix final_prefix config_prefix subst_dict libraries')
ardour_vst = env.Copy()
@@ -49,6 +51,35 @@ ardour_vst.Merge ([
libraries['jack']
])
-wine_executable = ardour_vst.Program (target = 'ardour_vst', source = sources)
+#
+# run winegcc to build a mini-win32 executable that wine can run. note: this also
+# generates a script called 'ardour_vst' which we don't use
+#
+
+wine_generated_executable = ardour_vst.Program (target = 'ardour_vst', source = sources)
+
+#
+# generate a shell script that will run the .exe file correctly
+#
+
+wine_executable = ardour_vst.SubstInFile ('ardourvst', 'ardourvst.in', SUBST_DICT = subst_dict)
+
+# make sure the scripts are executable
+
+if ardour_vst['VST']:
+ ardour_vst.AddPostAction (wine_executable, ardour_vst.Action (Chmod ('vst/ardevst', 0755)))
+ ardour_vst.AddPostAction (wine_executable, ardour_vst.Action (Chmod (wine_executable, 0755)))
+ Default([wine_generated_executable, wine_executable])
+
+ # the wine script - into the bin dir
+ env.Alias('install', env.Install(os.path.join(install_prefix, 'bin'), wine_executable))
+ # the win32 executable - into the lib dir since the wine script will look for it there
+ env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), 'ardour_vst.exe.so'))
+
+env.Alias ('tarball', env.Distribute (env['DISTTREE'],
+ [ 'SConscript',
+ 'winmain.c',
+ 'ardourvst.in',
+ 'ardevst'
+ ]))
-Default(wine_executable)
diff --git a/vst/ardevst b/vst/ardevst
new file mode 100755
index 0000000000..286f951b00
--- /dev/null
+++ b/vst/ardevst
@@ -0,0 +1,4 @@
+#!/bin/sh
+export ARDOUR_PATH=../gtk2_ardour/glade:../gtk2_ardour/pixmaps:../gtk2_ardour
+export LD_LIBRARY_PATH=../gtk2_ardour:../libs/surfaces/control_protocol:../libs/ardour:../libs/midi++2:../libs/pbd:../libs/soundtouch:../libs/gtkmm2ext:../libs/sigc++2:../libs/glibmm2:../libs/gtkmm2/atk:../libs/gtkmm2/pango:../libs/gtkmm2/gdk:../libs/gtkmm2/gtk:../libs/libgnomecanvasmm:../libs/libsndfile:../libs/appleutility:$$LD_LIBRARY_PATH
+exec wine ./ardour_vst.exe.so "$@"
diff --git a/vst/ardourvst.in b/vst/ardourvst.in
new file mode 100644
index 0000000000..8297e1870b
--- /dev/null
+++ b/vst/ardourvst.in
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# NOTE: the use of PREFIX is incorrect - it should be INSTALL_PREFIX,
+# but somehow scons puts leading /'s on INSTALL_PREFIX and that causes
+# wine to be unable to find the .exe.so file
+
+LD_LIBRARY_PATH=%PREFIX%/lib/ardour2:$LD_LIBRARY_PATH exec wine %PREFIX%/lib/ardour2/ardour_vst.exe.so "$@"
+