Browse Source

make MIDI port buffer size variable with -M cmdline argument; reduce size of jack_midi_port_internal_event_t from 12 to 8 bytes

git-svn-id: svn+ssh://jackaudio.org/trunk/jack@3884 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.120.1
paul 16 years ago
parent
commit
b02124591e
3 changed files with 30 additions and 9 deletions
  1. +2
    -0
      jackd/engine.c
  2. +17
    -1
      jackd/jackd.c
  3. +11
    -8
      libjack/midiport.c

+ 2
- 0
jackd/engine.c View File

@@ -446,6 +446,8 @@ jack_resize_port_segment (jack_engine_t *engine,
* engine->control->buffer_size;
}

VERBOSE (engine, "resizing port buffer segment for type %d, one buffer = %u bytes", ptid, one_buffer);

size = nports * one_buffer;

if (shm_info->attached_at == 0) {


+ 17
- 1
jackd/jackd.c View File

@@ -39,6 +39,7 @@
#include <jack/shm.h>
#include <jack/driver_parse.h>
#include <jack/messagebuffer.h>
#include <jack/midiport.h>

#ifdef USE_CAPABILITIES

@@ -521,7 +522,7 @@ main (int argc, char *argv[])
int do_sanity_checks = 1;
int show_version = 0;

const char *options = "-d:P:uvshVrRZTFlt:mn:Np:c:";
const char *options = "-d:P:uvshVrRZTFlt:mM:n:Np:c:";
struct option long_options[] =
{
/* keep ordered by single-letter option code */
@@ -531,6 +532,7 @@ main (int argc, char *argv[])
{ "help", 0, 0, 'h' },
{ "tmpdir-location", 0, 0, 'l' },
{ "no-mlock", 0, 0, 'm' },
{ "midi-bufsize", 1, 0, 'M' },
{ "name", 1, 0, 'n' },
{ "no-sanity-checks", 0, 0, 'N' },
{ "port-max", 1, 0, 'p' },
@@ -553,6 +555,7 @@ main (int argc, char *argv[])
char *driver_name = NULL;
char **driver_args = NULL;
JSList * driver_params;
size_t midi_buffer_size = 0;
int driver_nargs = 1;
int i;
int rc;
@@ -598,6 +601,10 @@ main (int argc, char *argv[])
do_mlock = 0;
break;

case 'M':
midi_buffer_size = (unsigned int) atol (optarg);
break;

case 'n':
server_name = optarg;
break;
@@ -691,6 +698,15 @@ main (int argc, char *argv[])
fprintf (stderr, "jackd: no drivers found; exiting\n");
exit (1);
}
if (midi_buffer_size != 0) {
jack_port_type_info_t* port_type = &jack_builtin_port_types[JACK_MIDI_PORT_TYPE];
port_type->buffer_size = midi_buffer_size * jack_midi_internal_event_size ();
port_type->buffer_scale_factor = -1;
if (verbose) {
fprintf (stderr, "Set MIDI buffer size to %u bytes\n", port_type->buffer_size);
}
}

desc = jack_find_driver_descriptor (driver_name);
if (!desc) {


+ 11
- 8
libjack/midiport.c View File

@@ -26,9 +26,7 @@
#include <jack/midiport.h>
#include <jack/port.h>


enum { MIDI_INLINE_MAX = sizeof(jack_shmsize_t) };

enum { MIDI_INLINE_MAX = 4 }; /* 4 bytes for default event size */

typedef struct _jack_midi_port_info_private {
jack_nframes_t nframes; /**< Number of frames in buffer */
@@ -39,14 +37,19 @@ typedef struct _jack_midi_port_info_private {
} POST_PACKED_STRUCTURE jack_midi_port_info_private_t;

typedef struct _jack_midi_port_internal_event {
int32_t time;
jack_shmsize_t size;
union {
jack_shmsize_t byte_offset;
jack_midi_data_t inline_data[MIDI_INLINE_MAX];
uint16_t time; /* offset within buffer limit to 64k */
uint16_t size; /* event size limited to 64k */
union {
jack_shmsize_t byte_offset;
jack_midi_data_t inline_data[MIDI_INLINE_MAX];
} POST_PACKED_STRUCTURE;
} POST_PACKED_STRUCTURE jack_midi_port_internal_event_t;

size_t
jack_midi_internal_event_size ()
{
return sizeof (jack_midi_port_internal_event_t);
}

static inline jack_midi_data_t*
jack_midi_event_data(void* port_buffer,


Loading…
Cancel
Save