From 14004b75a6d18a74fa59ac06c203af693164b774 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 9 Jun 2010 17:24:07 +0000 Subject: dynamic playback & capture buffer resizing (though transport is stopped first) git-svn-id: svn://localhost/ardour2/branches/3.0@7250 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/audio_diskstream.h | 6 ++++++ libs/ardour/ardour/butler.h | 1 + libs/ardour/ardour/midi_diskstream.h | 6 ++++++ libs/ardour/ardour/midi_track.h | 2 +- libs/ardour/ardour/public_diskstream.h | 2 ++ libs/ardour/ardour/session.h | 11 ++++++++++- libs/ardour/ardour/session_event.h | 2 ++ libs/ardour/ardour/track.h | 2 ++ 8 files changed, 30 insertions(+), 2 deletions(-) (limited to 'libs/ardour/ardour') diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h index 0ab9231252..54ddbea14a 100644 --- a/libs/ardour/ardour/audio_diskstream.h +++ b/libs/ardour/ardour/audio_diskstream.h @@ -216,6 +216,9 @@ class AudioDiskstream : public Diskstream RingBufferNPT * capture_transition_buf; // the following are used in the butler thread only nframes_t curr_capture_cnt; + + void resize_playback (nframes_t); + void resize_capture (nframes_t); }; typedef std::vector ChannelList; @@ -255,6 +258,9 @@ class AudioDiskstream : public Diskstream void setup_destructive_playlist (); void use_destructive_playlist (); + void adjust_playback_buffering (); + void adjust_capture_buffering (); + void engage_record_enable (); void disengage_record_enable (); diff --git a/libs/ardour/ardour/butler.h b/libs/ardour/ardour/butler.h index fc8e4c18c3..6ad96dc704 100644 --- a/libs/ardour/ardour/butler.h +++ b/libs/ardour/ardour/butler.h @@ -83,6 +83,7 @@ class Butler : public SessionHandleRef private: void empty_pool_trash (); + void config_changed (std::string); }; } // namespace ARDOUR diff --git a/libs/ardour/ardour/midi_diskstream.h b/libs/ardour/ardour/midi_diskstream.h index 766f9ec5a5..f466889027 100644 --- a/libs/ardour/ardour/midi_diskstream.h +++ b/libs/ardour/ardour/midi_diskstream.h @@ -165,6 +165,12 @@ class MidiDiskstream : public Diskstream void get_input_sources (); void set_align_style_from_io(); + /* fixed size buffers per instance of ardour for now (non-dynamic) + */ + + void adjust_playback_buffering () {} + void adjust_capture_buffering () {} + void engage_record_enable (); void disengage_record_enable (); diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h index 5d5bdc0cb4..d181bea596 100644 --- a/libs/ardour/ardour/midi_track.h +++ b/libs/ardour/ardour/midi_track.h @@ -53,7 +53,7 @@ public: void freeze_me (InterThreadInfo&); void unfreeze (); - + boost::shared_ptr bounce (InterThreadInfo&); boost::shared_ptr bounce_range ( nframes_t start, nframes_t end, InterThreadInfo&, bool enable_processing); diff --git a/libs/ardour/ardour/public_diskstream.h b/libs/ardour/ardour/public_diskstream.h index 90ca030af1..c31e88a79b 100755 --- a/libs/ardour/ardour/public_diskstream.h +++ b/libs/ardour/ardour/public_diskstream.h @@ -72,6 +72,8 @@ public: virtual void set_align_style (AlignStyle) = 0; virtual int use_copy_playlist () = 0; virtual int use_new_playlist () = 0; + virtual void adjust_playback_buffering () = 0; + virtual void adjust_capture_buffering () = 0; }; diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index d1362b379a..f7692e09cb 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -299,6 +299,8 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi void allow_auto_play (bool yn); void request_transport_speed (double speed); void request_overwrite_buffer (Track *); + void adjust_playback_buffering(); + void adjust_capture_buffering(); void request_track_speed (Track *, double speed); void request_input_change_handling (); @@ -776,7 +778,9 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi PostTransportReverse = 0x10000, PostTransportInputChange = 0x20000, PostTransportCurveRealloc = 0x40000, - PostTransportClearSubstate = 0x80000 + PostTransportClearSubstate = 0x80000, + PostTransportAdjustPlaybackBuffering = 0x100000, + PostTransportAdjustCaptureBuffering = 0x200000 }; enum SlaveState { @@ -1028,6 +1032,9 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi void set_post_transport_work (PostTransportWork ptw) { g_atomic_int_set (&_post_transport_work, (gint) ptw); } void add_post_transport_work (PostTransportWork ptw); + void schedule_playback_buffering_adjustment (); + void schedule_capture_buffering_adjustment (); + uint32_t cumulative_rf_motion; uint32_t rf_scale; @@ -1437,6 +1444,8 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi std::list > _diskstreams_2X; void add_session_range_location (nframes_t, nframes_t); + + }; } // namespace ARDOUR diff --git a/libs/ardour/ardour/session_event.h b/libs/ardour/ardour/session_event.h index 726c5be47b..eac27be7f6 100644 --- a/libs/ardour/ardour/session_event.h +++ b/libs/ardour/ardour/session_event.h @@ -34,6 +34,8 @@ struct SessionEvent { InputConfigurationChange, SetPlayAudioRange, RealTimeOperation, + AdjustPlaybackBuffering, + AdjustCaptureBuffering, /* only one of each of these events can be queued at any one time */ diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index a40b82916b..ac948f12df 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -138,6 +138,8 @@ class Track : public Route, public PublicDiskstream void set_align_style (AlignStyle); int use_copy_playlist (); int use_new_playlist (); + void adjust_playback_buffering (); + void adjust_capture_buffering (); PBD::Signal0 DiskstreamChanged; PBD::Signal0 FreezeChange; -- cgit v1.2.3