Browse Source

allocate mix_buffer upon connection, not on demand in RT thread.

git-svn-id: svn+ssh://jackaudio.org/trunk/jack@3890 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.120.1
torben 16 years ago
parent
commit
eeb327aae2
3 changed files with 24 additions and 5 deletions
  1. +1
    -1
      jack/internal.h
  2. +1
    -1
      jackd/engine.c
  3. +22
    -3
      libjack/client.c

+ 1
- 1
jack/internal.h View File

@@ -494,7 +494,7 @@ extern jack_port_functions_t jack_builtin_audio_functions;

extern jack_port_type_info_t jack_builtin_port_types[];

extern void jack_client_invalidate_port_buffers (jack_client_t *client);
extern void jack_client_fix_port_buffers (jack_client_t *client);

extern void jack_transport_copy_position (jack_position_t *from,
jack_position_t *to);


+ 1
- 1
jackd/engine.c View File

@@ -2551,7 +2551,7 @@ jack_deliver_event (jack_engine_t *engine, jack_client_internal_t *client,
break;

case BufferSizeChange:
jack_client_invalidate_port_buffers
jack_client_fix_port_buffers
(client->private_client);

if (client->control->bufsize_cbset) {


+ 22
- 3
libjack/client.c View File

@@ -396,7 +396,7 @@ jack_client_free (jack_client_t *client)
}

void
jack_client_invalidate_port_buffers (jack_client_t *client)
jack_client_fix_port_buffers (jack_client_t *client)
{
JSList *node;
jack_port_t *port;
@@ -412,8 +412,14 @@ jack_client_invalidate_port_buffers (jack_client_t *client)

if (port->shared->flags & JackPortIsInput) {
if (port->mix_buffer) {
size_t buffer_size =
jack_port_type_buffer_size( port->type_info,
client->engine->buffer_size );
jack_pool_release (port->mix_buffer);
port->mix_buffer = NULL;
port->mix_buffer = jack_pool_alloc (buffer_size);
port->fptr.buffer_init (port->mix_buffer,
buffer_size,
client->engine->buffer_size);
}
}
}
@@ -442,6 +448,19 @@ jack_client_handle_port_connection (jack_client_t *client, jack_event_t *event)
control_port = jack_port_by_id_int (client, event->x.self_id,
&need_free);
pthread_mutex_lock (&control_port->connection_lock);

if ((control_port->shared->flags & JackPortIsInput)
&& (control_port->connections != NULL)
&& (control_port->mix_buffer == NULL) ) {
size_t buffer_size =
jack_port_type_buffer_size( control_port->type_info,
client->engine->buffer_size );
control_port->mix_buffer = jack_pool_alloc (buffer_size);
control_port->fptr.buffer_init (control_port->mix_buffer,
buffer_size,
client->engine->buffer_size);
}

control_port->connections =
jack_slist_prepend (control_port->connections,
(void *) other);
@@ -1415,7 +1434,7 @@ jack_client_process_events (jack_client_t* client)
break;
case BufferSizeChange:
jack_client_invalidate_port_buffers (client);
jack_client_fix_port_buffers (client);
if (control->bufsize_cbset) {
status = client->bufsize
(control->nframes,


Loading…
Cancel
Save