projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Preliminary MIDI plugin support.
[ardour.git]
/
libs
/
ardour
/
audioengine.cc
diff --git
a/libs/ardour/audioengine.cc
b/libs/ardour/audioengine.cc
index 8ca85c4fe852fcb2ce237959f73ca095bcfd7a09..51a6ae71fbb15bca4ecbc90cd677dad5f3dbb78a 100644
(file)
--- a/
libs/ardour/audioengine.cc
+++ b/
libs/ardour/audioengine.cc
@@
-140,14
+140,14
@@
AudioEngine::start ()
if (!_running) {
if (!_running) {
+ nframes_t blocksize = jack_get_buffer_size (_jack);
+
if (session) {
if (session) {
- nframes_t blocksize = jack_get_buffer_size (_jack);
-
BootMessage (_("Connect session to engine"));
session->set_block_size (blocksize);
session->set_frame_rate (jack_get_sample_rate (_jack));
BootMessage (_("Connect session to engine"));
session->set_block_size (blocksize);
session->set_frame_rate (jack_get_sample_rate (_jack));
-
+
/* page in as much of the session process code as we
can before we really start running.
*/
/* page in as much of the session process code as we
can before we really start running.
*/
@@
-188,6
+188,8
@@
AudioEngine::start ()
}
start_metering_thread();
}
start_metering_thread();
+
+ _raw_buffer_sizes[DataType::AUDIO] = blocksize * sizeof(float);
}
return _running ? 0 : -1;
}
return _running ? 0 : -1;
@@
-466,6
+468,7
@@
int
AudioEngine::jack_bufsize_callback (nframes_t nframes)
{
_buffer_size = nframes;
AudioEngine::jack_bufsize_callback (nframes_t nframes)
{
_buffer_size = nframes;
+ _raw_buffer_sizes[DataType::AUDIO] = nframes * sizeof(float);
_usecs_per_cycle = (int) floor ((((double) nframes / frame_rate())) * 1000000.0);
last_monitor_check = 0;
_usecs_per_cycle = (int) floor ((((double) nframes / frame_rate())) * 1000000.0);
last_monitor_check = 0;
@@
-603,7
+606,11
@@
AudioEngine::register_port (DataType dtype, const string& portname, bool input)
} else {
throw unknown_type();
}
} else {
throw unknown_type();
}
-
+
+ size_t& old_buffer_size = _raw_buffer_sizes[newport->type()];
+ size_t port_buffer_size = newport->raw_buffer_size(0);
+ if (port_buffer_size > old_buffer_size)
+ old_buffer_size = port_buffer_size;
RCUWriter<Ports> writer (ports);
boost::shared_ptr<Ports> ps = writer.get_copy ();
RCUWriter<Ports> writer (ports);
boost::shared_ptr<Ports> ps = writer.get_copy ();
@@
-729,7
+736,7
@@
AudioEngine::disconnect (const string& source, const string& destination)
Port* src = get_port_by_name_locked (s);
Port* dst = get_port_by_name_locked (d);
Port* src = get_port_by_name_locked (s);
Port* dst = get_port_by_name_locked (d);
-
if (src) {
+ if (src) {
ret = src->disconnect (d);
} else if (dst) {
ret = dst->disconnect (s);
ret = src->disconnect (d);
} else if (dst) {
ret = dst->disconnect (s);
@@
-772,6
+779,13
@@
AudioEngine::frame_rate ()
}
}
}
}
+size_t
+AudioEngine::raw_buffer_size (DataType t)
+{
+ std::map<DataType,size_t>::const_iterator s = _raw_buffer_sizes.find(t);
+ return (s != _raw_buffer_sizes.end()) ? s->second : 0;
+}
+
ARDOUR::nframes_t
AudioEngine::frames_per_cycle ()
{
ARDOUR::nframes_t
AudioEngine::frames_per_cycle ()
{
@@
-1184,7
+1198,6
@@
AudioEngine::disconnect_from_jack ()
return 0;
}
return 0;
}
-
if (_running) {
stop_metering_thread ();
}
if (_running) {
stop_metering_thread ();
}
@@
-1197,6
+1210,7
@@
AudioEngine::disconnect_from_jack ()
_buffer_size = 0;
_frame_rate = 0;
_buffer_size = 0;
_frame_rate = 0;
+ _raw_buffer_sizes.clear();
if (_running) {
_running = false;
if (_running) {
_running = false;