*/
-#include <algorithm>
-#include <string>
-#include <cmath>
-#include <cerrno>
-#include <unistd.h>
-#include <fcntl.h>
-#include <poll.h>
-
-#include <glibmm/thread.h>
-
#include "pbd/error.h"
#include "pbd/pthread_utils.h"
#include "pbd/stacktrace.h"
-#include "ardour/audio_diskstream.h"
-#include "ardour/audioengine.h"
#include "ardour/butler.h"
-#include "ardour/configuration.h"
-#include "ardour/crossfade.h"
-#include "ardour/io.h"
-#include "ardour/midi_diskstream.h"
+#include "ardour/route.h"
#include "ardour/session.h"
-#include "ardour/timestamps.h"
+#include "ardour/session_event.h"
#include "ardour/track.h"
+#include "ardour/types.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace std;
using namespace ARDOUR;
using namespace PBD;
-/* XXX put this in the right place */
+/*---------------------------------------------------------------------------
+ BUTLER THREAD
+ ---------------------------------------------------------------------------*/
-static inline uint32_t next_power_of_two (uint32_t n)
+void
+Session::adjust_playback_buffering ()
{
- --n;
- n |= n >> 16;
- n |= n >> 8;
- n |= n >> 4;
- n |= n >> 2;
- n |= n >> 1;
- ++n;
- return n;
+ request_stop (false, false);
+ SessionEvent *ev = new SessionEvent (SessionEvent::AdjustPlaybackBuffering, SessionEvent::Add, SessionEvent::Immediate, 0, 0, 0.0);
+ queue_event (ev);
}
-/*---------------------------------------------------------------------------
- BUTLER THREAD
- ---------------------------------------------------------------------------*/
+void
+Session::adjust_capture_buffering ()
+{
+ request_stop (false, false);
+ SessionEvent *ev = new SessionEvent (SessionEvent::AdjustCaptureBuffering, SessionEvent::Add, SessionEvent::Immediate, 0, 0, 0.0);
+ queue_event (ev);
+}
+
+void
+Session::schedule_playback_buffering_adjustment ()
+{
+ add_post_transport_work (PostTransportAdjustPlaybackBuffering);
+ _butler->schedule_transport_work ();
+}
+
+void
+Session::schedule_capture_buffering_adjustment ()
+{
+ add_post_transport_work (PostTransportAdjustCaptureBuffering);
+ _butler->schedule_transport_work ();
+}
void
Session::schedule_curve_reallocation ()
{
return (uint32_t) g_atomic_int_get (&_capture_load);
}
-
-uint32_t
-Session::playback_load_min ()
-{
- return (uint32_t) g_atomic_int_get (&_playback_load_min);
-}
-
-uint32_t
-Session::capture_load_min ()
-{
- return (uint32_t) g_atomic_int_get (&_capture_load_min);
-}
-
-void
-Session::reset_capture_load_min ()
-{
- g_atomic_int_set (&_capture_load_min, 100);
-}
-
-void
-Session::reset_playback_load_min ()
-{
- g_atomic_int_set (&_playback_load_min, 100);
-}
-