summaryrefslogtreecommitdiff
path: root/drivers/netjack/netjack_packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/netjack/netjack_packet.c')
-rw-r--r--drivers/netjack/netjack_packet.c1979
1 files changed, 966 insertions, 1013 deletions
diff --git a/drivers/netjack/netjack_packet.c b/drivers/netjack/netjack_packet.c
index 35b2520..dd541c3 100644
--- a/drivers/netjack/netjack_packet.c
+++ b/drivers/netjack/netjack_packet.c
@@ -85,62 +85,65 @@ int fraggo = 0;
void
packet_header_hton (jacknet_packet_header *pkthdr)
{
- pkthdr->capture_channels_audio = htonl(pkthdr->capture_channels_audio);
- pkthdr->playback_channels_audio = htonl(pkthdr->playback_channels_audio);
- pkthdr->capture_channels_midi = htonl(pkthdr->capture_channels_midi);
- pkthdr->playback_channels_midi = htonl(pkthdr->playback_channels_midi);
- pkthdr->period_size = htonl(pkthdr->period_size);
- pkthdr->sample_rate = htonl(pkthdr->sample_rate);
- pkthdr->sync_state = htonl(pkthdr->sync_state);
- pkthdr->transport_frame = htonl(pkthdr->transport_frame);
- pkthdr->transport_state = htonl(pkthdr->transport_state);
- pkthdr->framecnt = htonl(pkthdr->framecnt);
- pkthdr->latency = htonl(pkthdr->latency);
- pkthdr->reply_port = htonl(pkthdr->reply_port);
- pkthdr->mtu = htonl(pkthdr->mtu);
- pkthdr->fragment_nr = htonl(pkthdr->fragment_nr);
+ pkthdr->capture_channels_audio = htonl (pkthdr->capture_channels_audio);
+ pkthdr->playback_channels_audio = htonl (pkthdr->playback_channels_audio);
+ pkthdr->capture_channels_midi = htonl (pkthdr->capture_channels_midi);
+ pkthdr->playback_channels_midi = htonl (pkthdr->playback_channels_midi);
+ pkthdr->period_size = htonl (pkthdr->period_size);
+ pkthdr->sample_rate = htonl (pkthdr->sample_rate);
+ pkthdr->sync_state = htonl (pkthdr->sync_state);
+ pkthdr->transport_frame = htonl (pkthdr->transport_frame);
+ pkthdr->transport_state = htonl (pkthdr->transport_state);
+ pkthdr->framecnt = htonl (pkthdr->framecnt);
+ pkthdr->latency = htonl (pkthdr->latency);
+ pkthdr->reply_port = htonl (pkthdr->reply_port);
+ pkthdr->mtu = htonl (pkthdr->mtu);
+ pkthdr->fragment_nr = htonl (pkthdr->fragment_nr);
}
void
packet_header_ntoh (jacknet_packet_header *pkthdr)
{
- pkthdr->capture_channels_audio = ntohl(pkthdr->capture_channels_audio);
- pkthdr->playback_channels_audio = ntohl(pkthdr->playback_channels_audio);
- pkthdr->capture_channels_midi = ntohl(pkthdr->capture_channels_midi);
- pkthdr->playback_channels_midi = ntohl(pkthdr->playback_channels_midi);
- pkthdr->period_size = ntohl(pkthdr->period_size);
- pkthdr->sample_rate = ntohl(pkthdr->sample_rate);
- pkthdr->sync_state = ntohl(pkthdr->sync_state);
- pkthdr->transport_frame = ntohl(pkthdr->transport_frame);
- pkthdr->transport_state = ntohl(pkthdr->transport_state);
- pkthdr->framecnt = ntohl(pkthdr->framecnt);
- pkthdr->latency = ntohl(pkthdr->latency);
- pkthdr->reply_port = ntohl(pkthdr->reply_port);
- pkthdr->mtu = ntohl(pkthdr->mtu);
- pkthdr->fragment_nr = ntohl(pkthdr->fragment_nr);
+ pkthdr->capture_channels_audio = ntohl (pkthdr->capture_channels_audio);
+ pkthdr->playback_channels_audio = ntohl (pkthdr->playback_channels_audio);
+ pkthdr->capture_channels_midi = ntohl (pkthdr->capture_channels_midi);
+ pkthdr->playback_channels_midi = ntohl (pkthdr->playback_channels_midi);
+ pkthdr->period_size = ntohl (pkthdr->period_size);
+ pkthdr->sample_rate = ntohl (pkthdr->sample_rate);
+ pkthdr->sync_state = ntohl (pkthdr->sync_state);
+ pkthdr->transport_frame = ntohl (pkthdr->transport_frame);
+ pkthdr->transport_state = ntohl (pkthdr->transport_state);
+ pkthdr->framecnt = ntohl (pkthdr->framecnt);
+ pkthdr->latency = ntohl (pkthdr->latency);
+ pkthdr->reply_port = ntohl (pkthdr->reply_port);
+ pkthdr->mtu = ntohl (pkthdr->mtu);
+ pkthdr->fragment_nr = ntohl (pkthdr->fragment_nr);
}
int get_sample_size (int bitdepth)
{
- if (bitdepth == 8)
- return sizeof (int8_t);
- if (bitdepth == 16)
- return sizeof (int16_t);
- //JN: why? is this for buffer sizes before or after encoding?
- //JN: if the former, why not int16_t, if the latter, shouldn't it depend on -c N?
- if( bitdepth == CELT_MODE )
- return sizeof( unsigned char );
- return sizeof (int32_t);
+ if (bitdepth == 8) {
+ return sizeof(int8_t);
+ }
+ if (bitdepth == 16) {
+ return sizeof(int16_t);
+ }
+ //JN: why? is this for buffer sizes before or after encoding?
+ //JN: if the former, why not int16_t, if the latter, shouldn't it depend on -c N?
+ if ( bitdepth == CELT_MODE ) {
+ return sizeof( unsigned char );
+ }
+ return sizeof(int32_t);
}
-int jack_port_is_audio(const char *porttype)
+int jack_port_is_audio (const char *porttype)
{
- return (strncmp (porttype, JACK_DEFAULT_AUDIO_TYPE, jack_port_type_size()) == 0);
+ return strncmp (porttype, JACK_DEFAULT_AUDIO_TYPE, jack_port_type_size ()) == 0;
}
-int jack_port_is_midi(const char *porttype)
+int jack_port_is_midi (const char *porttype)
{
- return (strncmp (porttype, JACK_DEFAULT_MIDI_TYPE, jack_port_type_size()) == 0);
+ return strncmp (porttype, JACK_DEFAULT_MIDI_TYPE, jack_port_type_size ()) == 0;
}
@@ -149,101 +152,97 @@ int jack_port_is_midi(const char *porttype)
packet_cache
*packet_cache_new (int num_packets, int pkt_size, int mtu)
{
- int fragment_payload_size = mtu - sizeof (jacknet_packet_header);
- int i, fragment_number;
-
- if( pkt_size == sizeof(jacknet_packet_header) )
- fragment_number = 1;
- else
- fragment_number = (pkt_size - sizeof (jacknet_packet_header) - 1) / fragment_payload_size + 1;
-
- packet_cache *pcache = malloc (sizeof (packet_cache));
- if (pcache == NULL)
- {
- jack_error ("could not allocate packet cache (1)");
- return NULL;
- }
-
- pcache->size = num_packets;
- pcache->packets = malloc (sizeof (cache_packet) * num_packets);
- pcache->master_address_valid = 0;
- pcache->last_framecnt_retreived = 0;
- pcache->last_framecnt_retreived_valid = 0;
-
- if (pcache->packets == NULL)
- {
- jack_error ("could not allocate packet cache (2)");
- return NULL;
- }
-
- for (i = 0; i < num_packets; i++)
- {
- pcache->packets[i].valid = 0;
- pcache->packets[i].num_fragments = fragment_number;
- pcache->packets[i].packet_size = pkt_size;
- pcache->packets[i].mtu = mtu;
- pcache->packets[i].framecnt = 0;
- pcache->packets[i].fragment_array = malloc (sizeof (char) * fragment_number);
- pcache->packets[i].packet_buf = malloc (pkt_size);
- if ((pcache->packets[i].fragment_array == NULL) || (pcache->packets[i].packet_buf == NULL))
- {
- jack_error ("could not allocate packet cache (3)");
- return NULL;
- }
- }
- pcache->mtu = mtu;
-
- return pcache;
+ int fragment_payload_size = mtu - sizeof(jacknet_packet_header);
+ int i, fragment_number;
+
+ if ( pkt_size == sizeof(jacknet_packet_header) ) {
+ fragment_number = 1;
+ } else {
+ fragment_number = (pkt_size - sizeof(jacknet_packet_header) - 1) / fragment_payload_size + 1;
+ }
+
+ packet_cache *pcache = malloc (sizeof(packet_cache));
+ if (pcache == NULL) {
+ jack_error ("could not allocate packet cache (1)");
+ return NULL;
+ }
+
+ pcache->size = num_packets;
+ pcache->packets = malloc (sizeof(cache_packet) * num_packets);
+ pcache->master_address_valid = 0;
+ pcache->last_framecnt_retreived = 0;
+ pcache->last_framecnt_retreived_valid = 0;
+
+ if (pcache->packets == NULL) {
+ jack_error ("could not allocate packet cache (2)");
+ return NULL;
+ }
+
+ for (i = 0; i < num_packets; i++) {
+ pcache->packets[i].valid = 0;
+ pcache->packets[i].num_fragments = fragment_number;
+ pcache->packets[i].packet_size = pkt_size;
+ pcache->packets[i].mtu = mtu;
+ pcache->packets[i].framecnt = 0;
+ pcache->packets[i].fragment_array = malloc (sizeof(char) * fragment_number);
+ pcache->packets[i].packet_buf = malloc (pkt_size);
+ if ((pcache->packets[i].fragment_array == NULL) || (pcache->packets[i].packet_buf == NULL)) {
+ jack_error ("could not allocate packet cache (3)");
+ return NULL;
+ }
+ }
+ pcache->mtu = mtu;
+
+ return pcache;
}
void
packet_cache_free (packet_cache *pcache)
{
- int i;
- if( pcache == NULL )
- return;
-
- for (i = 0; i < pcache->size; i++)
- {
- free (pcache->packets[i].fragment_array);
- free (pcache->packets[i].packet_buf);
- }
-
- free (pcache->packets);
- free (pcache);
+ int i;
+
+ if ( pcache == NULL ) {
+ return;
+ }
+
+ for (i = 0; i < pcache->size; i++) {
+ free (pcache->packets[i].fragment_array);
+ free (pcache->packets[i].packet_buf);
+ }
+
+ free (pcache->packets);
+ free (pcache);
}
cache_packet
*packet_cache_get_packet (packet_cache *pcache, jack_nframes_t framecnt)
{
- int i;
- cache_packet *retval;
-
- for (i = 0; i < pcache->size; i++)
- {
- if (pcache->packets[i].valid && (pcache->packets[i].framecnt == framecnt))
- return &(pcache->packets[i]);
- }
-
- // The Packet is not in the packet cache.
- // find a free packet.
-
- retval = packet_cache_get_free_packet (pcache);
- if (retval != NULL)
- {
- cache_packet_set_framecnt (retval, framecnt);
- return retval;
- }
-
- // No Free Packet available
- // Get The Oldest packet and reset it.
-
- retval = packet_cache_get_oldest_packet (pcache);
- //printf( "Dropping %d from Cache :S\n", retval->framecnt );
- cache_packet_reset (retval);
- cache_packet_set_framecnt (retval, framecnt);
-
- return retval;
+ int i;
+ cache_packet *retval;
+
+ for (i = 0; i < pcache->size; i++)
+ if (pcache->packets[i].valid && (pcache->packets[i].framecnt == framecnt)) {
+ return &(pcache->packets[i]);
+ }
+
+ // The Packet is not in the packet cache.
+ // find a free packet.
+
+ retval = packet_cache_get_free_packet (pcache);
+ if (retval != NULL) {
+ cache_packet_set_framecnt (retval, framecnt);
+ return retval;
+ }
+
+ // No Free Packet available
+ // Get The Oldest packet and reset it.
+
+ retval = packet_cache_get_oldest_packet (pcache);
+ //printf( "Dropping %d from Cache :S\n", retval->framecnt );
+ cache_packet_reset (retval);
+ cache_packet_set_framecnt (retval, framecnt);
+
+ return retval;
}
// TODO: fix wrapping case... need to pass
@@ -254,109 +253,105 @@ cache_packet
cache_packet
*packet_cache_get_oldest_packet (packet_cache *pcache)
{
- jack_nframes_t minimal_frame = JACK_MAX_FRAMES;
- cache_packet *retval = &(pcache->packets[0]);
- int i;
-
- for (i = 0; i < pcache->size; i++)
- {
- if (pcache->packets[i].valid && (pcache->packets[i].framecnt < minimal_frame))
- {
- minimal_frame = pcache->packets[i].framecnt;
- retval = &(pcache->packets[i]);
- }
- }
-
- return retval;
+ jack_nframes_t minimal_frame = JACK_MAX_FRAMES;
+ cache_packet *retval = &(pcache->packets[0]);
+ int i;
+
+ for (i = 0; i < pcache->size; i++) {
+ if (pcache->packets[i].valid && (pcache->packets[i].framecnt < minimal_frame)) {
+ minimal_frame = pcache->packets[i].framecnt;
+ retval = &(pcache->packets[i]);
+ }
+ }
+
+ return retval;
}
cache_packet
*packet_cache_get_free_packet (packet_cache *pcache)
{
- int i;
+ int i;
- for (i = 0; i < pcache->size; i++)
- {
- if (pcache->packets[i].valid == 0)
- return &(pcache->packets[i]);
- }
+ for (i = 0; i < pcache->size; i++)
+ if (pcache->packets[i].valid == 0) {
+ return &(pcache->packets[i]);
+ }
- return NULL;
+ return NULL;
}
void
cache_packet_reset (cache_packet *pack)
{
- int i;
- pack->valid = 0;
+ int i;
+
+ pack->valid = 0;
- // XXX: i dont think this is necessary here...
- // fragement array is cleared in _set_framecnt()
+ // XXX: i dont think this is necessary here...
+ // fragement array is cleared in _set_framecnt()
- for (i = 0; i < pack->num_fragments; i++)
- pack->fragment_array[i] = 0;
+ for (i = 0; i < pack->num_fragments; i++)
+ pack->fragment_array[i] = 0;
}
void
cache_packet_set_framecnt (cache_packet *pack, jack_nframes_t framecnt)
{
- int i;
+ int i;
- pack->framecnt = framecnt;
+ pack->framecnt = framecnt;
- for (i = 0; i < pack->num_fragments; i++)
- pack->fragment_array[i] = 0;
+ for (i = 0; i < pack->num_fragments; i++)
+ pack->fragment_array[i] = 0;
- pack->valid = 1;
+ pack->valid = 1;
}
void
cache_packet_add_fragment (cache_packet *pack, char *packet_buf, int rcv_len)
{
- jacknet_packet_header *pkthdr = (jacknet_packet_header *) packet_buf;
- int fragment_payload_size = pack->mtu - sizeof (jacknet_packet_header);
- char *packet_bufX = pack->packet_buf + sizeof (jacknet_packet_header);
- char *dataX = packet_buf + sizeof (jacknet_packet_header);
-
- jack_nframes_t fragment_nr = ntohl (pkthdr->fragment_nr);
- jack_nframes_t framecnt = ntohl (pkthdr->framecnt);
-
- if (framecnt != pack->framecnt)
- {
- jack_error ("errror. framecnts dont match");
- return;
- }
-
-
- if (fragment_nr == 0)
- {
- memcpy (pack->packet_buf, packet_buf, rcv_len);
- pack->fragment_array[0] = 1;
-
- return;
- }
-
- if ((fragment_nr < pack->num_fragments) && (fragment_nr > 0))
- {
- if ((fragment_nr * fragment_payload_size + rcv_len - sizeof (jacknet_packet_header)) <= (pack->packet_size - sizeof (jacknet_packet_header)))
- {
- memcpy (packet_bufX + fragment_nr * fragment_payload_size, dataX, rcv_len - sizeof (jacknet_packet_header));
- pack->fragment_array[fragment_nr] = 1;
- }
- else
- jack_error ("too long packet received...");
- }
+ jacknet_packet_header *pkthdr = (jacknet_packet_header*)packet_buf;
+ int fragment_payload_size = pack->mtu - sizeof(jacknet_packet_header);
+ char *packet_bufX = pack->packet_buf + sizeof(jacknet_packet_header);
+ char *dataX = packet_buf + sizeof(jacknet_packet_header);
+
+ jack_nframes_t fragment_nr = ntohl (pkthdr->fragment_nr);
+ jack_nframes_t framecnt = ntohl (pkthdr->framecnt);
+
+ if (framecnt != pack->framecnt) {
+ jack_error ("errror. framecnts dont match");
+ return;
+ }
+
+
+ if (fragment_nr == 0) {
+ memcpy (pack->packet_buf, packet_buf, rcv_len);
+ pack->fragment_array[0] = 1;
+
+ return;
+ }
+
+ if ((fragment_nr < pack->num_fragments) && (fragment_nr > 0)) {
+ if ((fragment_nr * fragment_payload_size + rcv_len - sizeof(jacknet_packet_header)) <= (pack->packet_size - sizeof(jacknet_packet_header))) {
+ memcpy (packet_bufX + fragment_nr * fragment_payload_size, dataX, rcv_len - sizeof(jacknet_packet_header));
+ pack->fragment_array[fragment_nr] = 1;
+ } else {
+ jack_error ("too long packet received...");
+ }
+ }
}
int
cache_packet_is_complete (cache_packet *pack)
{
- int i;
- for (i = 0; i < pack->num_fragments; i++)
- if (pack->fragment_array[i] == 0)
- return 0;
+ int i;
- return 1;
+ for (i = 0; i < pack->num_fragments; i++)
+ if (pack->fragment_array[i] == 0) {
+ return 0;
+ }
+
+ return 1;
}
#ifndef WIN32
@@ -365,985 +360,941 @@ cache_packet_is_complete (cache_packet *pack)
int
netjack_poll_deadline (int sockfd, jack_time_t deadline, jack_time_t (*get_microseconds)(void))
{
- struct pollfd fds;
- int poll_err = 0;
+ struct pollfd fds;
+ int poll_err = 0;
+
#if HAVE_PPOLL
- struct timespec timeout_spec = { 0, 0 };
+ struct timespec timeout_spec = { 0, 0 };
#else
- int timeout;
+ int timeout;
#endif
- jack_time_t now = get_microseconds();
- if( now >= deadline )
- return 0;
+ jack_time_t now = get_microseconds ();
+ if ( now >= deadline ) {
+ return 0;
+ }
- if( (deadline-now) >= 1000000 ) {
- jack_error( "deadline more than 1 second in the future, trimming it." );
- deadline = now+500000;
- }
+ if ( (deadline - now) >= 1000000 ) {
+ jack_error ( "deadline more than 1 second in the future, trimming it." );
+ deadline = now + 500000;
+ }
#if HAVE_PPOLL
- timeout_spec.tv_nsec = (deadline - now) * 1000;
+ timeout_spec.tv_nsec = (deadline - now) * 1000;
#else
- timeout = lrintf( (float)(deadline - now) / 1000.0 );
+ timeout = lrintf ( (float)(deadline - now) / 1000.0 );
#endif
- fds.fd = sockfd;
- fds.events = POLLIN;
+ fds.fd = sockfd;
+ fds.events = POLLIN;
#if HAVE_PPOLL
- poll_err = ppoll (&fds, 1, &timeout_spec, NULL);
+ poll_err = ppoll (&fds, 1, &timeout_spec, NULL);
#else
- poll_err = poll (&fds, 1, timeout);
+ poll_err = poll (&fds, 1, timeout);
#endif
- if (poll_err == -1)
- {
- switch (errno)
- {
- case EBADF:
- jack_error ("Error %d: An invalid file descriptor was given in one of the sets", errno);
- break;
- case EFAULT:
- jack_error ("Error %d: The array given as argument was not contained in the calling program's address space", errno);
- break;
- case EINTR:
- jack_error ("Error %d: A signal occurred before any requested event", errno);
- break;
- case EINVAL:
- jack_error ("Error %d: The nfds value exceeds the RLIMIT_NOFILE value", errno);
- break;
- case ENOMEM:
- jack_error ("Error %d: There was no space to allocate file descriptor tables", errno);
- break;
- }
- }
- return poll_err;
+ if (poll_err == -1) {
+ switch (errno) {
+ case EBADF:
+ jack_error ("Error %d: An invalid file descriptor was given in one of the sets", errno);
+ break;
+ case EFAULT:
+ jack_error ("Error %d: The array given as argument was not contained in the calling program's address space", errno);
+ break;
+ case EINTR:
+ jack_error ("Error %d: A signal occurred before any requested event", errno);
+ break;
+ case EINVAL:
+ jack_error ("Error %d: The nfds value exceeds the RLIMIT_NOFILE value", errno);
+ break;
+ case ENOMEM:
+ jack_error ("Error %d: There was no space to allocate file descriptor tables", errno);
+ break;
+ }
+ }
+ return poll_err;
}
int
netjack_poll (int sockfd, int timeout)
{
- struct pollfd fds;
- int i, poll_err = 0;
- sigset_t sigmask, rsigmask;
- struct sigaction action;
-
- sigemptyset(&sigmask);
- sigaddset(&sigmask, SIGHUP);
- sigaddset(&sigmask, SIGINT);
- sigaddset(&sigmask, SIGQUIT);
- sigaddset(&sigmask, SIGPIPE);
- sigaddset(&sigmask, SIGTERM);
- sigaddset(&sigmask, SIGUSR1);
- sigaddset(&sigmask, SIGUSR2);
+ struct pollfd fds;
+ int i, poll_err = 0;
+ sigset_t sigmask, rsigmask;
+ struct sigaction action;
+
+ sigemptyset (&sigmask);
+ sigaddset (&sigmask, SIGHUP);
+ sigaddset (&sigmask, SIGINT);
+ sigaddset (&sigmask, SIGQUIT);
+ sigaddset (&sigmask, SIGPIPE);
+ sigaddset (&sigmask, SIGTERM);
+ sigaddset (&sigmask, SIGUSR1);
+ sigaddset (&sigmask, SIGUSR2);
action.sa_handler = SIG_DFL;
action.sa_mask = sigmask;
action.sa_flags = SA_RESTART;
- for (i = 1; i < NSIG; i++)
- if (sigismember (&sigmask, i))
- sigaction (i, &action, 0);
-
- fds.fd = sockfd;
- fds.events = POLLIN;
-
- sigprocmask(SIG_UNBLOCK, &sigmask, &rsigmask);
- while (poll_err == 0)
- {
- poll_err = poll (&fds, 1, timeout);
- }
- sigprocmask(SIG_SETMASK, &rsigmask, NULL);
-
- if (poll_err == -1)
- {
- switch (errno)
- {
- case EBADF:
- jack_error ("Error %d: An invalid file descriptor was given in one of the sets", errno);
- break;
- case EFAULT:
- jack_error ("Error %d: The array given as argument was not contained in the calling program's address space", errno);
- break;
- case EINTR:
- jack_error ("Error %d: A signal occurred before any requested event", errno);
- break;
- case EINVAL:
- jack_error ("Error %d: The nfds value exceeds the RLIMIT_NOFILE value", errno);
- break;
- case ENOMEM:
- jack_error ("Error %d: There was no space to allocate file descriptor tables", errno);
- break;
- }
- return 0;
- }
- return 1;
+ for (i = 1; i < NSIG; i++)
+ if (sigismember (&sigmask, i)) {
+ sigaction (i, &action, 0);
+ }
+
+ fds.fd = sockfd;
+ fds.events = POLLIN;
+
+ sigprocmask (SIG_UNBLOCK, &sigmask, &rsigmask);
+ while (poll_err == 0)
+ poll_err = poll (&fds, 1, timeout);
+ sigprocmask (SIG_SETMASK, &rsigmask, NULL);
+
+ if (poll_err == -1) {
+ switch (errno) {
+ case EBADF:
+ jack_error ("Error %d: An invalid file descriptor was given in one of the sets", errno);
+ break;
+ case EFAULT:
+ jack_error ("Error %d: The array given as argument was not contained in the calling program's address space", errno);
+ break;
+ case EINTR:
+ jack_error ("Error %d: A signal occurred before any requested event", errno);
+ break;
+ case EINVAL:
+ jack_error ("Error %d: The nfds value exceeds the RLIMIT_NOFILE value", errno);
+ break;
+ case ENOMEM:
+ jack_error ("Error %d: There was no space to allocate file descriptor tables", errno);
+ break;
+ }
+ return 0;
+ }
+ return 1;
}
#else
int
netjack_poll (int sockfd, int timeout)
{
- jack_error( "netjack_poll not implemented" );
- return 0;
+ jack_error ( "netjack_poll not implemented" );
+ return 0;
}
int
netjack_poll_deadline (int sockfd, jack_time_t deadline, jack_time_t (*get_microseconds)(void))
{
- fd_set fds;
- FD_ZERO( &fds );
- FD_SET( sockfd, &fds );
-
- struct timeval timeout;
- while( 1 ) {
- jack_time_t now = get_microseconds();
- if( now >= deadline )
- return 0;
-
- int timeout_usecs = (deadline - now);
- //jack_error( "timeout = %d", timeout_usecs );
- timeout.tv_sec = 0;
- timeout.tv_usec = (timeout_usecs < 500) ? 500 : timeout_usecs;
- timeout.tv_usec = (timeout_usecs > 1000000) ? 500000 : timeout_usecs;
-
- int poll_err = select (0, &fds, NULL, NULL, &timeout);
- if( poll_err != 0 )
- return poll_err;
- }
-
- return 0;
+ fd_set fds;
+
+ FD_ZERO ( &fds );
+ FD_SET ( sockfd, &fds );
+
+ struct timeval timeout;
+ while ( 1 ) {
+ jack_time_t now = get_microseconds ();
+ if ( now >= deadline ) {
+ return 0;
+ }
+
+ int timeout_usecs = (deadline - now);
+ //jack_error( "timeout = %d", timeout_usecs );
+ timeout.tv_sec = 0;
+ timeout.tv_usec = (timeout_usecs < 500) ? 500 : timeout_usecs;
+ timeout.tv_usec = (timeout_usecs > 1000000) ? 500000 : timeout_usecs;
+
+ int poll_err = select (0, &fds, NULL, NULL, &timeout);
+ if ( poll_err != 0 ) {
+ return poll_err;
+ }
+ }
+
+ return 0;
}
#endif
// This now reads all a socket has into the cache.
// replacing netjack_recv functions.
void
-packet_cache_drain_socket( packet_cache *pcache, int sockfd, jack_time_t (*get_microseconds)(void) )
+packet_cache_drain_socket ( packet_cache *pcache, int sockfd, jack_time_t (*get_microseconds)(void) )
{
- char *rx_packet = alloca (pcache->mtu);
- jacknet_packet_header *pkthdr = (jacknet_packet_header *) rx_packet;
- int rcv_len;
- jack_nframes_t framecnt;
- cache_packet *cpack;
- struct sockaddr_in sender_address;
+ char *rx_packet = alloca (pcache->mtu);
+ jacknet_packet_header *pkthdr = (jacknet_packet_header*)rx_packet;
+ int rcv_len;
+ jack_nframes_t framecnt;
+ cache_packet *cpack;
+ struct sockaddr_in sender_address;
+
#ifdef WIN32
- size_t senderlen = sizeof( struct sockaddr_in );
- u_long parm = 1;
- ioctlsocket( sockfd, FIONBIO, &parm );
+ size_t senderlen = sizeof( struct sockaddr_in );
+ u_long parm = 1;
+ ioctlsocket ( sockfd, FIONBIO, &parm );
#else
- socklen_t senderlen = sizeof( struct sockaddr_in );
+ socklen_t senderlen = sizeof( struct sockaddr_in );
#endif
- while (1)
- {
+ while (1) {
#ifdef WIN32
- rcv_len = recvfrom (sockfd, rx_packet, pcache->mtu, 0,
- (struct sockaddr*) &sender_address, &senderlen);
+ rcv_len = recvfrom (sockfd, rx_packet, pcache->mtu, 0,
+ (struct sockaddr*)&sender_address, &senderlen);
#else
- rcv_len = recvfrom (sockfd, rx_packet, pcache->mtu, MSG_DONTWAIT,
- (struct sockaddr*) &sender_address, &senderlen);
+ rcv_len = recvfrom (sockfd, rx_packet, pcache->mtu, MSG_DONTWAIT,
+ (struct sockaddr*)&sender_address, &senderlen);
#endif
- if (rcv_len < 0)
- return;
+ if (rcv_len < 0) {
+ return;
+ }
- if (pcache->master_address_valid) {
- // Verify its from our master.
- if (memcmp (&sender_address, &(pcache->master_address), senderlen) != 0)
- continue;
- } else {
- // Setup this one as master
- //printf( "setup master...\n" );
- memcpy ( &(pcache->master_address), &sender_address, senderlen );
- pcache->master_address_valid = 1;
- }
+ if (pcache->master_address_valid) {
+ // Verify its from our master.
+ if (memcmp (&sender_address, &(pcache->master_address), senderlen) != 0) {
+ continue;
+ }
+ } else {
+ // Setup this one as master
+ //printf( "setup master...\n" );
+ memcpy ( &(pcache->master_address), &sender_address, senderlen );
+ pcache->master_address_valid = 1;
+ }
- framecnt = ntohl (pkthdr->framecnt);
- if( pcache->last_framecnt_retreived_valid && (framecnt <= pcache->last_framecnt_retreived ))
- continue;
+ framecnt = ntohl (pkthdr->framecnt);
+ if ( pcache->last_framecnt_retreived_valid && (framecnt <= pcache->last_framecnt_retreived )) {
+ continue;
+ }
- cpack = packet_cache_get_packet (pcache, framecnt);
- cache_packet_add_fragment (cpack, rx_packet, rcv_len);
- cpack->recv_timestamp = get_microseconds();
- }
+ cpack = packet_cache_get_packet (pcache, framecnt);
+ cache_packet_add_fragment (cpack, rx_packet, rcv_len);
+ cpack->recv_timestamp = get_microseconds ();
+ }
}
void
-packet_cache_reset_master_address( packet_cache *pcache )
+packet_cache_reset_master_address ( packet_cache *pcache )
{
- pcache->master_address_valid = 0;
- pcache->last_framecnt_retreived = 0;
- pcache->last_framecnt_retreived_valid = 0;
+ pcache->master_address_valid = 0;
+ pcache->last_framecnt_retreived = 0;
+ pcache->last_framecnt_retreived_valid = 0;
}
void
packet_cache_clear_old_packets (packet_cache *pcache, jack_nframes_t framecnt )
{
- int i;
-
- for (i = 0; i < pcache->size; i++)
- {
- if (pcache->packets[i].valid && (pcache->packets[i].framecnt < framecnt))
- {
- cache_packet_reset (&(pcache->packets[i]));
- }
- }
+ int i;
+
+ for (i = 0; i < pcache->size; i++) {
+ if (pcache->packets[i].valid && (pcache->packets[i].framecnt < framecnt)) {
+ cache_packet_reset (&(pcache->packets[i]));
+ }
+ }
}
int
-packet_cache_retreive_packet_pointer( packet_cache *pcache, jack_nframes_t framecnt, char **packet_buf, int pkt_size, jack_time_t *timestamp )
+packet_cache_retreive_packet_pointer ( packet_cache *pcache, jack_nframes_t framecnt, char **packet_buf, int pkt_size, jack_time_t *timestamp )
{
- int i;
- cache_packet *cpack = NULL;
+ int i;
+ cache_packet *cpack = NULL;
- for (i = 0; i < pcache->size; i++) {
- if (pcache->packets[i].valid && (pcache->packets[i].framecnt == framecnt)) {
- cpack = &(pcache->packets[i]);
- break;
+ for (i = 0; i < pcache->size; i++) {
+ if (pcache->packets[i].valid && (pcache->packets[i].framecnt == framecnt)) {
+ cpack = &(pcache->packets[i]);
+ break;
+ }
}
- }
- if( cpack == NULL ) {
- //printf( "retreive packet: %d....not found\n", framecnt );
- return -1;
- }
+ if ( cpack == NULL ) {
+ //printf( "retreive packet: %d....not found\n", framecnt );
+ return -1;
+ }
- if( !cache_packet_is_complete( cpack ) ) {
- return -1;
- }
+ if ( !cache_packet_is_complete ( cpack ) ) {
+ return -1;
+ }
- // ok. cpack is the one we want and its complete.
- *packet_buf = cpack->packet_buf;
- if( timestamp )
- *timestamp = cpack->recv_timestamp;
+ // ok. cpack is the one we want and its complete.
+ *packet_buf = cpack->packet_buf;
+ if ( timestamp ) {
+ *timestamp = cpack->recv_timestamp;
+ }
- pcache->last_framecnt_retreived_valid = 1;
- pcache->last_framecnt_retreived = framecnt;
+ pcache->last_framecnt_retreived_valid = 1;
+ pcache->last_framecnt_retreived = framecnt;
- return pkt_size;
+ return pkt_size;
}
int
-packet_cache_release_packet( packet_cache *pcache, jack_nframes_t framecnt )
+packet_cache_release_packet ( packet_cache *pcache, jack_nframes_t framecnt )
{
- int i;
- cache_packet *cpack = NULL;
+ int i;
+ cache_packet *cpack = NULL;
- for (i = 0; i < pcache->size; i++) {
- if (pcache->packets[i].valid && (pcache->packets[i].framecnt == framecnt)) {
- cpack = &(pcache->packets[i]);
- break;
+ for (i = 0; i < pcache->size; i++) {
+ if (pcache->packets[i].valid && (pcache->packets[i].framecnt == framecnt)) {
+ cpack = &(pcache->packets[i]);
+ break;
+ }
}
- }
- if( cpack == NULL ) {
- //printf( "retreive packet: %d....not found\n", framecnt );
- return -1;
- }
+ if ( cpack == NULL ) {
+ //printf( "retreive packet: %d....not found\n", framecnt );
+ return -1;
+ }
- if( !cache_packet_is_complete( cpack ) ) {
- return -1;
- }
+ if ( !cache_packet_is_complete ( cpack ) ) {
+ return -1;
+ }
- cache_packet_reset (cpack);
- packet_cache_clear_old_packets( pcache, framecnt );
+ cache_packet_reset (cpack);
+ packet_cache_clear_old_packets ( pcache, framecnt );
- return 0;
+ return 0;
}
float
-packet_cache_get_fill( packet_cache *pcache, jack_nframes_t expected_framecnt )
+packet_cache_get_fill ( packet_cache *pcache, jack_nframes_t expected_framecnt )
{
- int num_packets_before_us = 0;
- int i;
-
- for (i = 0; i < pcache->size; i++)
- {
- cache_packet *cpack = &(pcache->packets[i]);
- if (cpack->valid && cache_packet_is_complete( cpack ))
- if( cpack->framecnt >= expected_framecnt )
- num_packets_before_us += 1;
- }
-
- return 100.0 * (float)num_packets_before_us / (float)( pcache->size ) ;
+ int num_packets_before_us = 0;
+ int i;
+
+ for (i = 0; i < pcache->size; i++) {
+ cache_packet *cpack = &(pcache->packets[i]);
+ if (cpack->valid && cache_packet_is_complete ( cpack )) {
+ if ( cpack->framecnt >= expected_framecnt ) {
+ num_packets_before_us += 1;
+ }
+ }
+ }
+
+ return 100.0 * (float)num_packets_before_us / (float)( pcache->size );
}
// Returns 0 when no valid packet is inside the cache.
int
-packet_cache_get_next_available_framecnt( packet_cache *pcache, jack_nframes_t expected_framecnt, jack_nframes_t *framecnt )
+packet_cache_get_next_available_framecnt ( packet_cache *pcache, jack_nframes_t expected_framecnt, jack_nframes_t *framecnt )
{
- int i;
- jack_nframes_t best_offset = JACK_MAX_FRAMES/2-1;
- int retval = 0;
-
- for (i = 0; i < pcache->size; i++)
- {
- cache_packet *cpack = &(pcache->packets[i]);
- //printf( "p%d: valid=%d, frame %d\n", i, cpack->valid, cpack->framecnt );
-
- if (!cpack->valid || !cache_packet_is_complete( cpack )) {
- //printf( "invalid\n" );
- continue;
- }
+ int i;
+ jack_nframes_t best_offset = JACK_MAX_FRAMES / 2 - 1;
+ int retval = 0;
- if( cpack->framecnt < expected_framecnt )
- continue;
+ for (i = 0; i < pcache->size; i++) {
+ cache_packet *cpack = &(pcache->packets[i]);
+ //printf( "p%d: valid=%d, frame %d\n", i, cpack->valid, cpack->framecnt );
- if( (cpack->framecnt - expected_framecnt) > best_offset ) {
- continue;
- }
+ if (!cpack->valid || !cache_packet_is_complete ( cpack )) {
+ //printf( "invalid\n" );
+ continue;
+ }
+
+ if ( cpack->framecnt < expected_framecnt ) {
+ continue;
+ }
- best_offset = cpack->framecnt - expected_framecnt;
- retval = 1;
+ if ( (cpack->framecnt - expected_framecnt) > best_offset ) {
+ continue;
+ }
- if( best_offset == 0 )
- break;
- }
- if( retval && framecnt )
- *framecnt = expected_framecnt + best_offset;
+ best_offset = cpack->framecnt - expected_framecnt;
+ retval = 1;
- return retval;
+ if ( best_offset == 0 ) {
+ break;
+ }
+ }
+ if ( retval && framecnt ) {
+ *framecnt = expected_framecnt + best_offset;
+ }
+
+ return retval;
}
int
-packet_cache_get_highest_available_framecnt( packet_cache *pcache, jack_nframes_t *framecnt )
+packet_cache_get_highest_available_framecnt ( packet_cache *pcache, jack_nframes_t *framecnt )
{
- int i;
- jack_nframes_t best_value = 0;
- int retval = 0;
-
- for (i = 0; i < pcache->size; i++)
- {
- cache_packet *cpack = &(pcache->packets[i]);
- //printf( "p%d: valid=%d, frame %d\n", i, cpack->valid, cpack->framecnt );
-
- if (!cpack->valid || !cache_packet_is_complete( cpack )) {
- //printf( "invalid\n" );
- continue;
- }
+ int i;
+ jack_nframes_t best_value = 0;
+ int retval = 0;
- if (cpack->framecnt < best_value) {
- continue;
- }
+ for (i = 0; i < pcache->size; i++) {
+ cache_packet *cpack = &(pcache->packets[i]);
+ //printf( "p%d: valid=%d, frame %d\n", i, cpack->valid, cpack->framecnt );
- best_value = cpack->framecnt;
- retval = 1;
+ if (!cpack->valid || !cache_packet_is_complete ( cpack )) {
+ //printf( "invalid\n" );
+ continue;
+ }
+
+ if (cpack->framecnt < best_value) {
+ continue;
+ }
- }
- if( retval && framecnt )
- *framecnt = best_value;
+ best_value = cpack->framecnt;
+ retval = 1;
+
+ }
+ if ( retval && framecnt ) {
+ *framecnt = best_value;
+ }
- return retval;
+ return retval;
}
// Returns 0 when no valid packet is inside the cache.
int
-packet_cache_find_latency( packet_cache *pcache, jack_nframes_t expected_framecnt, jack_nframes_t *framecnt )
+packet_cache_find_latency ( packet_cache *pcache, jack_nframes_t expected_framecnt, jack_nframes_t *framecnt )
{
- int i;
- jack_nframes_t best_offset = 0;
- int retval = 0;
-
- for (i = 0; i < pcache->size; i++)
- {
- cache_packet *cpack = &(pcache->packets[i]);
- //printf( "p%d: valid=%d, frame %d\n", i, cpack->valid, cpack->framecnt );
-
- if (!cpack->valid || !cache_packet_is_complete( cpack )) {
- //printf( "invalid\n" );
- continue;
- }
+ int i;
+ jack_nframes_t best_offset = 0;
+ int retval = 0;
- if( (cpack->framecnt - expected_framecnt) < best_offset ) {
- continue;
- }
+ for (i = 0; i < pcache->size; i++) {
+ cache_packet *cpack = &(pcache->packets[i]);
+ //printf( "p%d: valid=%d, frame %d\n", i, cpack->valid, cpack->framecnt );
+
+ if (!cpack->valid || !cache_packet_is_complete ( cpack )) {
+ //printf( "invalid\n" );
+ continue;
+ }
+
+ if ( (cpack->framecnt - expected_framecnt) < best_offset ) {
+ continue;
+ }
- best_offset = cpack->framecnt - expected_framecnt;
- retval = 1;
+ best_offset = cpack->framecnt - expected_framecnt;
+ retval = 1;
- if( best_offset == 0 )
- break;
- }
- if( retval && framecnt )
- *framecnt = JACK_MAX_FRAMES - best_offset;
+ if ( best_offset == 0 ) {
+ break;
+ }
+ }
+ if ( retval && framecnt ) {
+ *framecnt = JACK_MAX_FRAMES - best_offset;
+ }
- return retval;
+ return retval;
}
// fragmented packet IO
void
netjack_sendto (int sockfd, char *packet_buf, int pkt_size, int flags, struct sockaddr *addr, int addr_size, int mtu)
{
- int frag_cnt = 0;
- char *tx_packet, *dataX;
- jacknet_packet_header *pkthdr;
-
- tx_packet = alloca (mtu + 10);
- dataX = tx_packet + sizeof (jacknet_packet_header);
- pkthdr = (jacknet_packet_header *) tx_packet;
-
- int fragment_payload_size = mtu - sizeof (jacknet_packet_header);
-
- if (pkt_size <= mtu) {
- int err;
- pkthdr = (jacknet_packet_header *) packet_buf;
- pkthdr->fragment_nr = htonl (0);
- err = sendto(sockfd, packet_buf, pkt_size, flags, addr, addr_size);
- if( err<0 ) {
- //printf( "error in send\n" );
- perror( "send" );
- }
- }
- else
- {
- int err;
- // Copy the packet header to the tx pack first.
- memcpy(tx_packet, packet_buf, sizeof (jacknet_packet_header));
-
- // Now loop and send all
- char *packet_bufX = packet_buf + sizeof (jacknet_packet_header);
-
- while (packet_bufX < (packet_buf + pkt_size - fragment_payload_size))
- {
- pkthdr->fragment_nr = htonl (frag_cnt++);
- memcpy (dataX, packet_bufX, fragment_payload_size);
- sendto (sockfd, tx_packet, mtu, flags, addr, addr_size);
- packet_bufX += fragment_payload_size;
- }
-
- int last_payload_size = packet_buf + pkt_size - packet_bufX;
- memcpy (dataX, packet_bufX, last_payload_size);
- pkthdr->fragment_nr = htonl (frag_cnt);
- //jack_log("last fragment_count = %d, payload_size = %d\n", fragment_count, last_payload_size);
-
- // sendto(last_pack_size);
- err = sendto(sockfd, tx_packet, last_payload_size + sizeof(jacknet_packet_header), flags, addr, addr_size);
- if( err<0 ) {
- //printf( "error in send\n" );
- perror( "send" );
+ int frag_cnt = 0;
+ char *tx_packet, *dataX;
+ jacknet_packet_header *pkthdr;
+
+ tx_packet = alloca (mtu + 10);
+ dataX = tx_packet + sizeof(jacknet_packet_header);
+ pkthdr = (jacknet_packet_header*)tx_packet;
+
+ int fragment_payload_size = mtu - sizeof(jacknet_packet_header);
+
+ if (pkt_size <= mtu) {
+ int err;
+ pkthdr = (jacknet_packet_header*)packet_buf;
+ pkthdr->fragment_nr = htonl (0);
+ err = sendto (sockfd, packet_buf, pkt_size, flags, addr, addr_size);
+ if ( err < 0 ) {
+ //printf( "error in send\n" );
+ perror ( "send" );
+ }
+ } else {
+ int err;
+ // Copy the packet header to the tx pack first.
+ memcpy (tx_packet, packet_buf, sizeof(jacknet_packet_header));
+
+ // Now loop and send all
+ char *packet_bufX = packet_buf + sizeof(jacknet_packet_header);
+
+ while (packet_bufX < (packet_buf + pkt_size - fragment_payload_size)) {
+ pkthdr->fragment_nr = htonl (frag_cnt++);
+ memcpy (dataX, packet_bufX, fragment_payload_size);
+ sendto (sockfd, tx_packet, mtu, flags, addr, addr_size);
+ packet_bufX += fragment_payload_size;
+ }
+
+ int last_payload_size = packet_buf + pkt_size - packet_bufX;
+ memcpy (dataX, packet_bufX, last_payload_size);
+ pkthdr->fragment_nr = htonl (frag_cnt);
+ //jack_log("last fragment_count = %d, payload_size = %d\n", fragment_count, last_payload_size);
+
+ // sendto(last_pack_size);
+ err = sendto (sockfd, tx_packet, last_payload_size + sizeof(jacknet_packet_header), flags, addr, addr_size);
+ if ( err < 0 ) {
+ //printf( "error in send\n" );
+ perror ( "send" );
+ }
}
- }
}
void
decode_midi_buffer (uint32_t *buffer_uint32, unsigned int buffer_size_uint32, jack_default_audio_sample_t* buf)
{
- int i;
- jack_midi_clear_buffer (buf);
- for (i = 0; i < buffer_size_uint32 - 3;)
- {
- uint32_t payload_size;
- payload_size = buffer_uint32[i];
- payload_size = ntohl (payload_size);
- if (payload_size)
- {
- jack_midi_event_t event;
- event.time = ntohl (buffer_uint32[i+1]);
- event.size = ntohl (buffer_uint32[i+2]);
- event.buffer = (jack_midi_data_t*) (&(buffer_uint32[i+3]));
- jack_midi_event_write (buf, event.time, event.buffer, event.size);
-
- // skip to the next event
- unsigned int nb_data_quads = (((event.size-1) & ~0x3) >> 2)+1;
- i += 3+nb_data_quads;
- }
- else
- break; // no events can follow an empty event, we're done
- }
+ int i;
+
+ jack_midi_clear_buffer (buf);
+ for (i = 0; i < buffer_size_uint32 - 3; ) {
+ uint32_t payload_size;
+ payload_size = buffer_uint32[i];
+ payload_size = ntohl (payload_size);
+ if (payload_size) {
+ jack_midi_event_t event;
+ event.time = ntohl (buffer_uint32[i + 1]);
+ event.size = ntohl (buffer_uint32[i + 2]);
+ event.buffer = (jack_midi_data_t*)(&(buffer_uint32[i + 3]));
+ jack_midi_event_write (buf, event.time, event.buffer, event.size);
+
+ // skip to the next event
+ unsigned int nb_data_quads = (((event.size - 1) & ~0x3) >> 2) + 1;
+ i += 3 + nb_data_quads;
+ } else {
+ break; // no events can follow an empty event, we're done
+ }
+ }
}
void
encode_midi_buffer (uint32_t *buffer_uint32, unsigned int buffer_size_uint32, jack_default_audio_sample_t* buf)
{
- int i;
- unsigned int written = 0;
- // midi port, encode midi events
- unsigned int nevents = jack_midi_get_event_count (buf);
- for (i = 0; i < nevents; ++i)
- {
- jack_midi_event_t event;
- jack_midi_event_get (&event, buf, i);
- unsigned int nb_data_quads = (((event.size - 1) & ~0x3) >> 2) + 1;
- unsigned int payload_size = 3 + nb_data_quads;
- // only write if we have sufficient space for the event
- // otherwise drop it
- if (written + payload_size < buffer_size_uint32 - 1)
- {
- // write header
- buffer_uint32[written]=htonl (payload_size);
- written++;
- buffer_uint32[written]=htonl (event.time);
- written++;
- buffer_uint32[written]=htonl (event.size);
- written++;
-
- // write data
- jack_midi_data_t* tmpbuff = (jack_midi_data_t*)(&(buffer_uint32[written]));
- memcpy (tmpbuff, event.buffer, event.size);
- written += nb_data_quads;
- }
- else
- {
- // buffer overflow
- jack_error ("midi buffer overflow");
- break;
- }
- }
- // now put a netjack_midi 'no-payload' event, signaling EOF
- buffer_uint32[written]=0;
+ int i;
+ unsigned int written = 0;
+ // midi port, encode midi events
+ unsigned int nevents = jack_midi_get_event_count (buf);
+
+ for (i = 0; i < nevents; ++i) {
+ jack_midi_event_t event;
+ jack_midi_event_get (&event, buf, i);
+ unsigned int nb_data_quads = (((event.size - 1) & ~0x3) >> 2) + 1;
+ unsigned int payload_size = 3 + nb_data_quads;
+ // only write if we have sufficient space for the event
+ // otherwise drop it
+ if (written + payload_size < buffer_size_uint32 - 1) {
+ // write header
+ buffer_uint32[written] = htonl (payload_size);
+ written++;
+ buffer_uint32[written] = htonl (event.time);
+ written++;
+ buffer_uint32[written] = htonl (event.size);
+ written++;
+
+ // write data
+ jack_midi_data_t* tmpbuff = (jack_midi_data_t*)(&(buffer_uint32[written]));
+ memcpy (tmpbuff, event.buffer, event.size);
+ written += nb_data_quads;
+ } else {
+ // buffer overflow
+ jack_error ("midi buffer overflow");
+ break;
+ }
+ }
+ // now put a netjack_midi 'no-payload' event, signaling EOF
+ buffer_uint32[written] = 0;
}
// render functions for float
void
render_payload_to_jack_ports_float ( void *packet_payload, jack_nframes_t net_period_down, JSList *capture_ports, JSList *capture_srcs, jack_nframes_t nframes, int dont_htonl_floats)
{
- int chn = 0;
- JSList *node = capture_ports;
+ int chn = 0;
+ JSList *node = capture_ports;
+
#if HAVE_SAMPLERATE
- JSList *src_node = capture_srcs;
+ JSList *src_node = capture_srcs;
#endif
- uint32_t *packet_bufX = (uint32_t *)packet_payload;
+ uint32_t *packet_bufX = (uint32_t*)packet_payload;
- if( !packet_payload )
- return;
+ if ( !packet_payload ) {
+ return;
+ }
- while (node != NULL)
- {
- int i;
- int_float_t val;
+ while (node != NULL) {
+ int i;
+ int_float_t val;
#if HAVE_SAMPLERATE
- SRC_DATA src;
+ SRC_DATA src;
#endif
- jack_port_t *port = (jack_port_t *) node->data;
- jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
+ jack_port_t *port = (jack_port_t*)node->data;
+ jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
- const char *porttype = jack_port_type (port);
+ const char *porttype = jack_port_type (port);
- if (jack_port_is_audio (porttype))
- {
+ if (jack_port_is_audio (porttype)) {
#if HAVE_SAMPLERATE
- // audio port, resample if necessary
- if (net_period_down != nframes)
- {
- SRC_STATE *src_state = src_node->data;
- for (i = 0; i < net_period_down; i++)
- {
- packet_bufX[i] = ntohl (packet_bufX[i]);
- }
-
- src.data_in = (float *) packet_bufX;
- src.input_frames = net_period_down;
-
- src.data_out = buf;
- src.output_frames = nframes;
-
- src.src_ratio = (float) nframes / (float) net_period_down;
- src.end_of_input = 0;
-
- src_set_ratio (src_state, src.src_ratio);
- src_process (src_state, &src);
- src_node = jack_slist_next (src_node);
- }
- else
+ // audio port, resample if necessary
+ if (net_period_down != nframes) {
+ SRC_STATE *src_state = src_node->data;
+ for (i = 0; i < net_period_down; i++)
+ packet_bufX[i] = ntohl (packet_bufX[i]);
+
+ src.data_in = (float*)packet_bufX;
+ src.input_frames = net_period_down;
+
+ src.data_out = buf;
+ src.output_frames = nframes;
+
+ src.src_ratio = (float)nframes / (float)net_period_down;
+ src.end_of_input = 0;
+
+ src_set_ratio (src_state, src.src_ratio);
+ src_process (src_state, &src);
+ src_node = jack_slist_next (src_node);
+ } else
#endif
- {
- if( dont_htonl_floats )
- {
- memcpy( buf, packet_bufX, net_period_down*sizeof(jack_default_audio_sample_t));
- }
- else
- {
- for (i = 0; i < net_period_down; i++)
- {
- val.i = packet_bufX[i];
- val.i = ntohl (val.i);
- buf[i] = val.f;
- }
+ {
+ if ( dont_htonl_floats ) {
+ memcpy ( buf, packet_bufX, net_period_down * sizeof(jack_default_audio_sample_t));
+ } else {
+ for (i = 0; i < net_period_down; i++) {
+ val.i = packet_bufX[i];
+ val.i = ntohl (val.i);
+ buf[i] = val.f;
+ }
+ }
+ }
+ } else if (jack_port_is_midi (porttype)) {
+ // midi port, decode midi events
+ // convert the data buffer to a standard format (uint32_t based)
+ unsigned int buffer_size_uint32 = net_period_down;
+ uint32_t * buffer_uint32 = (uint32_t*)packet_bufX;
+ decode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
}
- }
- }
- else if (jack_port_is_midi (porttype))
- {
- // midi port, decode midi events
- // convert the data buffer to a standard format (uint32_t based)
- unsigned int buffer_size_uint32 = net_period_down;
- uint32_t * buffer_uint32 = (uint32_t*)packet_bufX;
- decode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
- }
- packet_bufX = (packet_bufX + net_period_down);
- node = jack_slist_next (node);
- chn++;
- }
+ packet_bufX = (packet_bufX + net_period_down);
+ node = jack_slist_next (node);
+ chn++;
+ }
}
void
render_jack_ports_to_payload_float (JSList *playback_ports, JSList *playback_srcs, jack_nframes_t nframes, void *packet_payload, jack_nframes_t net_period_up, int dont_htonl_floats )
{
- int chn = 0;
- JSList *node = playback_ports;
+ int chn = 0;
+ JSList *node = playback_ports;
+
#if HAVE_SAMPLERATE
- JSList *src_node = playback_srcs;
+ JSList *src_node = playback_srcs;
#endif
- uint32_t *packet_bufX = (uint32_t *) packet_payload;
+ uint32_t *packet_bufX = (uint32_t*)packet_payload;
- while (node != NULL)
- {
+ while (node != NULL) {
#if HAVE_SAMPLERATE
- SRC_DATA src;
+ SRC_DATA src;
#endif
- int i;
- int_float_t val;
- jack_port_t *port = (jack_port_t *) node->data;
- jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
+ int i;
+ int_float_t val;
+ jack_port_t *port = (jack_port_t*)node->data;
+ jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
- const char *porttype = jack_port_type (port);
+ const char *porttype = jack_port_type (port);
- if (jack_port_is_audio (porttype))
- {
- // audio port, resample if necessary
+ if (jack_port_is_audio (porttype)) {
+ // audio port, resample if necessary
#if HAVE_SAMPLERATE
- if (net_period_up != nframes) {
- SRC_STATE *src_state = src_node->data;
- src.data_in = buf;
- src.input_frames = nframes;
-
- src.data_out = (float *) packet_bufX;
- src.output_frames = net_period_up;
-
- src.src_ratio = (float) net_period_up / (float) nframes;
- src.end_of_input = 0;
-
- src_set_ratio (src_state, src.src_ratio);
- src_process (src_state, &src);
-
- for (i = 0; i < net_period_up; i++)
- {
- packet_bufX[i] = htonl (packet_bufX[i]);
- }
- src_node = jack_slist_next (src_node);
- }
- else
+ if (net_period_up != nframes) {
+ SRC_STATE *src_state = src_node->data;
+ src.data_in = buf;
+ src.input_frames = nframes;
+
+ src.data_out = (float*)packet_bufX;
+ src.output_frames = net_period_up;
+
+ src.src_ratio = (float)net_period_up / (float)nframes;
+ src.end_of_input = 0;
+
+ src_set_ratio (src_state, src.src_ratio);
+ src_process (src_state, &src);
+
+ for (i = 0; i < net_period_up; i++)
+ packet_bufX[i] = htonl (packet_bufX[i]);
+ src_node = jack_slist_next (src_node);
+ } else
#endif
- {
- if( dont_htonl_floats )
- {
- memcpy( packet_bufX, buf, net_period_up*sizeof(jack_default_audio_sample_t) );
+ {
+ if ( dont_htonl_floats ) {
+ memcpy ( packet_bufX, buf, net_period_up * sizeof(jack_default_audio_sample_t) );
+ } else {
+ for (i = 0; i < net_period_up; i++) {
+ val.f = buf[i];
+ val.i = htonl (val.i);
+ packet_bufX[i] = val.i;
+ }
+ }
+ }
+ } else if (jack_port_is_midi (porttype)) {
+ // encode midi events from port to packet
+ // convert the data buffer to a standard format (uint32_t based)
+ unsigned int buffer_size_uint32 = net_period_up;
+ uint32_t * buffer_uint32 = (uint32_t*)packet_bufX;
+ encode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
}
- else
- {
- for (i = 0; i < net_period_up; i++)
- {
- val.f = buf[i];
- val.i = htonl (val.i);
- packet_bufX[i] = val.i;
- }
- }
- }
- }
- else if (jack_port_is_midi (porttype))
- {
- // encode midi events from port to packet
- // convert the data buffer to a standard format (uint32_t based)
- unsigned int buffer_size_uint32 = net_period_up;
- uint32_t * buffer_uint32 = (uint32_t*) packet_bufX;
- encode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
- }
- packet_bufX = (packet_bufX + net_period_up);
- node = jack_slist_next (node);
- chn++;
- }
+ packet_bufX = (packet_bufX + net_period_up);
+ node = jack_slist_next (node);
+ chn++;
+ }
}
// render functions for 16bit
void
render_payload_to_jack_ports_16bit (void *packet_payload, jack_nframes_t net_period_down, JSList *capture_ports, JSList *capture_srcs, jack_nframes_t nframes)
{
- int chn = 0;
- JSList *node = capture_ports;
+ int chn = 0;
+ JSList *node = capture_ports;
+
#if HAVE_SAMPLERATE
- JSList *src_node = capture_srcs;
+ JSList *src_node = capture_srcs;
#endif
- uint16_t *packet_bufX = (uint16_t *)packet_payload;
+ uint16_t *packet_bufX = (uint16_t*)packet_payload;
- if( !packet_payload )
- return;
+ if ( !packet_payload ) {
+ return;
+ }
- while (node != NULL)
- {
- int i;
- //uint32_t val;
+ while (node != NULL) {
+ int i;
+ //uint32_t val;
#if HAVE_SAMPLERATE
- SRC_DATA src;
+ SRC_DATA src;
#endif
- jack_port_t *port = (jack_port_t *) node->data;
- jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
+ jack_port_t *port = (jack_port_t*)node->data;
+ jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
#if HAVE_SAMPLERATE
- float *floatbuf = alloca (sizeof(float) * net_period_down);
+ float *floatbuf = alloca (sizeof(float) * net_period_down);
#endif
- const char *porttype = jack_port_type (port);
+ const char *porttype = jack_port_type (port);
- if (jack_port_is_audio (porttype))
- {
- // audio port, resample if necessary
+ if (jack_port_is_audio (porttype)) {
+ // audio port, resample if necessary
#if HAVE_SAMPLERATE
- if (net_period_down != nframes)
- {
- SRC_STATE *src_state = src_node->data;
- for (i = 0; i < net_period_down; i++)
- {
- floatbuf[i] = ((float) ntohs(packet_bufX[i])) / 32767.0 - 1.0;
- }
-
- src.data_in = floatbuf;
- src.input_frames = net_period_down;
-
- src.data_out = buf;
- src.output_frames = nframes;
-
- src.src_ratio = (float) nframes / (float) net_period_down;
- src.end_of_input = 0;
-
- src_set_ratio (src_state, src.src_ratio);
- src_process (src_state, &src);
- src_node = jack_slist_next (src_node);
- }
- else
+ if (net_period_down != nframes) {
+ SRC_STATE *src_state = src_node->data;
+ for (i = 0; i < net_period_down; i++)
+ floatbuf[i] = ((float)ntohs (packet_bufX[i])) / 32767.0 - 1.0;
+
+ src.data_in = floatbuf;
+ src.input_frames = net_period_down;
+
+ src.data_out = buf;
+ src.output_frames = nframes;
+
+ src.src_ratio = (float)nframes / (float)net_period_down;
+ src.end_of_input = 0;
+
+ src_set_ratio (src_state, src.src_ratio);
+ src_process (src_state, &src);
+ src_node = jack_slist_next (src_node);
+ } else
#endif
- for (i = 0; i < net_period_down; i++)
- buf[i] = ((float) ntohs (packet_bufX[i])) / 32768.0 - 1.0;
- }
- else if (jack_port_is_midi (porttype))
- {
- // midi port, decode midi events
- // convert the data buffer to a standard format (uint32_t based)
- unsigned int buffer_size_uint32 = net_period_down / 2;
- uint32_t * buffer_uint32 = (uint32_t*) packet_bufX;
- decode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
- }
- packet_bufX = (packet_bufX + net_period_down);
- node = jack_slist_next (node);
- chn++;
- }
+ for (i = 0; i < net_period_down; i++)
+ buf[i] = ((float)ntohs (packet_bufX[i])) / 32768.0 - 1.0;
+ } else if (jack_port_is_midi (porttype)) {
+ // midi port, decode midi events
+ // convert the data buffer to a standard format (uint32_t based)
+ unsigned int buffer_size_uint32 = net_period_down / 2;
+ uint32_t * buffer_uint32 = (uint32_t*)packet_bufX;
+ decode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
+ }
+ packet_bufX = (packet_bufX + net_period_down);
+ node = jack_slist_next (node);
+ chn++;
+ }
}
void
render_jack_ports_to_payload_16bit (JSList *playback_ports, JSList *playback_srcs, jack_nframes_t nframes, void *packet_payload, jack_nframes_t net_period_up)
{
- int chn = 0;
- JSList *node = playback_ports;
+ int chn = 0;
+ JSList *node = playback_ports;
+
#if HAVE_SAMPLERATE
- JSList *src_node = playback_srcs;
+ JSList *src_node = playback_srcs;
#endif
- uint16_t *packet_bufX = (uint16_t *)packet_payload;
+ uint16_t *packet_bufX = (uint16_t*)packet_payload;
- while (node != NULL)
- {
+ while (node != NULL) {
#if HAVE_SAMPLERATE
- SRC_DATA src;
+ SRC_DATA src;
#endif
- int i;
- jack_port_t *port = (jack_port_t *) node->data;
- jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
- const char *porttype = jack_port_type (port);
+ int i;
+ jack_port_t *port = (jack_port_t*)node->data;
+ jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
+ const char *porttype = jack_port_type (port);
- if (jack_port_is_audio (porttype))
- {
- // audio port, resample if necessary
+ if (jack_port_is_audio (porttype)) {
+ // audio port, resample if necessary
#if HAVE_SAMPLERATE
- if (net_period_up != nframes)
- {
- SRC_STATE *src_state = src_node->data;
+ if (net_period_up != nframes) {
+ SRC_STATE *src_state = src_node->data;
- float *floatbuf = alloca (sizeof(float) * net_period_up);
+ float *floatbuf = alloca (sizeof(float) * net_period_up);
- src.data_in = buf;
- src.input_frames = nframes;
+ src.data_in = buf;
+ src.input_frames = nframes;
- src.data_out = floatbuf;
- src.output_frames = net_period_up;
+ src.data_out = floatbuf;
+ src.output_frames = net_period_up;
- src.src_ratio = (float) net_period_up / (float) nframes;
- src.end_of_input = 0;
+ src.src_ratio = (float)net_period_up / (float)nframes;
+ src.end_of_input = 0;
- src_set_ratio (src_state, src.src_ratio);
- src_process (src_state, &src);
+ src_set_ratio (src_state, src.src_ratio);
+ src_process (src_state, &src);
- for (i = 0; i < net_period_up; i++)
- {
- packet_bufX[i] = htons (((uint16_t)((floatbuf[i] + 1.0) * 32767.0)));
- }
- src_node = jack_slist_next (src_node);
- }
- else
+ for (i = 0; i < net_period_up; i++)
+ packet_bufX[i] = htons (((uint16_t)((floatbuf[i] + 1.0) * 32767.0)));
+ src_node = jack_slist_next (src_node);
+ } else
#endif
- for (i = 0; i < net_period_up; i++)
- packet_bufX[i] = htons(((uint16_t)((buf[i] + 1.0) * 32767.0)));
- }
- else if (jack_port_is_midi (porttype))
- {
- // encode midi events from port to packet
- // convert the data buffer to a standard format (uint32_t based)
- unsigned int buffer_size_uint32 = net_period_up / 2;
- uint32_t * buffer_uint32 = (uint32_t*) packet_bufX;
- encode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
- }
- packet_bufX = (packet_bufX + net_period_up);
- node = jack_slist_next (node);
- chn++;
- }
+ for (i = 0; i < net_period_up; i++)
+ packet_bufX[i] = htons (((uint16_t)((buf[i] + 1.0) * 32767.0)));
+ } else if (jack_port_is_midi (porttype)) {
+ // encode midi events from port to packet
+ // convert the data buffer to a standard format (uint32_t based)
+ unsigned int buffer_size_uint32 = net_period_up / 2;
+ uint32_t * buffer_uint32 = (uint32_t*)packet_bufX;
+ encode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
+ }
+ packet_bufX = (packet_bufX + net_period_up);
+ node = jack_slist_next (node);
+ chn++;
+ }
}
// render functions for 8bit
void
render_payload_to_jack_ports_8bit (void *packet_payload, jack_nframes_t net_period_down, JSList *capture_ports, JSList *capture_srcs, jack_nframes_t nframes)
{
- int chn = 0;
- JSList *node = capture_ports;
+ int chn = 0;
+ JSList *node = capture_ports;
#if HAVE_SAMPLERATE
- JSList *src_node = capture_srcs;
+ JSList *src_node = capture_srcs;
#endif
- int8_t *packet_bufX = (int8_t *)packet_payload;
+ int8_t *packet_bufX = (int8_t*)packet_payload;
- if( !packet_payload )
- return;
+ if ( !packet_payload ) {
+ return;
+ }
- while (node != NULL)
- {
- int i;
- //uint32_t val;
+ while (node != NULL) {
+ int i;
+ //uint32_t val;
#if HAVE_SAMPLERATE
- SRC_DATA src;
+ SRC_DATA src;
#endif
- jack_port_t *port = (jack_port_t *) node->data;
- jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
+ jack_port_t *port = (jack_port_t*)node->data;
+ jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
#if HAVE_SAMPLERATE
- float *floatbuf = alloca (sizeof (float) * net_period_down);
+ float *floatbuf = alloca (sizeof(float) * net_period_down);
#endif
- const char *porttype = jack_port_type (port);
+ const char *porttype = jack_port_type (port);
- if (jack_port_is_audio(porttype))
- {
+ if (jack_port_is_audio (porttype)) {
#if HAVE_SAMPLERATE
- // audio port, resample if necessary
- if (net_period_down != nframes)
- {
- SRC_STATE *src_state = src_node->data;
- for (i = 0; i < net_period_down; i++)
- floatbuf[i] = ((float) packet_bufX[i]) / 127.0;
-
- src.data_in = floatbuf;
- src.input_frames = net_period_down;
-
- src.data_out = buf;
- src.output_frames = nframes;
-
- src.src_ratio = (float) nframes / (float) net_period_down;
- src.end_of_input = 0;
-
- src_set_ratio (src_state, src.src_ratio);
- src_process (src_state, &src);
- src_node = jack_slist_next (src_node);
- }
- else
+ // audio port, resample if necessary
+ if (net_period_down != nframes) {
+ SRC_STATE *src_state = src_node->data;
+ for (i = 0; i < net_period_down; i++)
+ floatbuf[i] = ((float)packet_bufX[i]) / 127.0;
+
+ src.data_in = floatbuf;
+ src.input_frames = net_period_down;
+
+ src.data_out = buf;
+ src.output_frames = nframes;
+
+ src.src_ratio = (float)nframes / (float)net_period_down;
+ src.end_of_input = 0;
+
+ src_set_ratio (src_state, src.src_ratio);
+ src_process (src_state, &src);
+ src_node = jack_slist_next (src_node);
+ } else
#endif
- for (i = 0; i < net_period_down; i++)
- buf[i] = ((float) packet_bufX[i]) / 127.0;
- }
- else if (jack_port_is_midi (porttype))
- {
- // midi port, decode midi events
- // convert the data buffer to a standard format (uint32_t based)
- unsigned int buffer_size_uint32 = net_period_down / 4;
- uint32_t * buffer_uint32 = (uint32_t*) packet_bufX;
- decode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
- }
- packet_bufX = (packet_bufX + net_period_down);
- node = jack_slist_next (node);
- chn++;
- }
+ for (i = 0; i < net_period_down; i++)
+ buf[i] = ((float)packet_bufX[i]) / 127.0;
+ } else if (jack_port_is_midi (porttype)) {
+ // midi port, decode midi events
+ // convert the data buffer to a standard format (uint32_t based)
+ unsigned int buffer_size_uint32 = net_period_down / 4;
+ uint32_t * buffer_uint32 = (uint32_t*)packet_bufX;
+ decode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
+ }
+ packet_bufX = (packet_bufX + net_period_down);
+ node = jack_slist_next (node);
+ chn++;
+ }
}
void
render_jack_ports_to_payload_8bit (JSList *playback_ports, JSList *playback_srcs, jack_nframes_t nframes, void *packet_payload, jack_nframes_t net_period_up)
{
- int chn = 0;
- JSList *node = playback_ports;
+ int chn = 0;
+ JSList *node = playback_ports;
+
#if HAVE_SAMPLERATE
- JSList *src_node = playback_srcs;
+ JSList *src_node = playback_srcs;
#endif
- int8_t *packet_bufX = (int8_t *)packet_payload;
+ int8_t *packet_bufX = (int8_t*)packet_payload;
- while (node != NULL)
- {
+ while (node != NULL) {
#if HAVE_SAMPLERATE
- SRC_DATA src;
+ SRC_DATA src;
#endif
- int i;
- jack_port_t *port = (jack_port_t *) node->data;
+ int i;
+ jack_port_t *port = (jack_port_t*)node->data;
- jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
- const char *porttype = jack_port_type (port);
+ jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
+ const char *porttype = jack_port_type (port);
- if (jack_port_is_audio (porttype))
- {
+ if (jack_port_is_audio (porttype)) {
#if HAVE_SAMPLERATE
- // audio port, resample if necessary
- if (net_period_up != nframes)
- {
+ // audio port, resample if necessary
+ if (net_period_up != nframes) {
- SRC_STATE *src_state = src_node->data;
+ SRC_STATE *src_state = src_node->data;
- float *floatbuf = alloca (sizeof (float) * net_period_up);
+ float *floatbuf = alloca (sizeof(float) * net_period_up);
- src.data_in = buf;
- src.input_frames = nframes;
+ src.data_in = buf;
+ src.input_frames = nframes;
- src.data_out = floatbuf;
- src.output_frames = net_period_up;
+ src.data_out = floatbuf;
+ src.output_frames = net_period_up;
- src.src_ratio = (float) net_period_up / (float) nframes;
- src.end_of_input = 0;
+ src.src_ratio = (float)net_period_up / (float)nframes;
+ src.end_of_input = 0;
- src_set_ratio (src_state, src.src_ratio);
- src_process (src_state, &src);
+ src_set_ratio (src_state, src.src_ratio);
+ src_process (src_state, &src);
- for (i = 0; i < net_period_up; i++)
- packet_bufX[i] = floatbuf[i] * 127.0;
- src_node = jack_slist_next (src_node);
- }
- else
+ for (i = 0; i < net_period_up; i++)
+ packet_bufX[i] = floatbuf[i] * 127.0;
+ src_node = jack_slist_next (src_node);
+ } else
#endif
- for (i = 0; i < net_period_up; i++)
- packet_bufX[i] = buf[i] * 127.0;
- }
- else if (jack_port_is_midi (porttype))
- {
- // encode midi events from port to packet
- // convert the data buffer to a standard format (uint32_t based)
- unsigned int buffer_size_uint32 = net_period_up / 4;
- uint32_t * buffer_uint32 = (uint32_t*) packet_bufX;
- encode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
- }
- packet_bufX = (packet_bufX + net_period_up);
- node = jack_slist_next (node);
- chn++;
- }
+ for (i = 0; i < net_period_up; i++)
+ packet_bufX[i] = buf[i] * 127.0;
+ } else if (jack_port_is_midi (porttype)) {
+ // encode midi events from port to packet
+ // convert the data buffer to a standard format (uint32_t based)
+ unsigned int buffer_size_uint32 = net_period_up / 4;
+ uint32_t * buffer_uint32 = (uint32_t*)packet_bufX;
+ encode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
+ }
+ packet_bufX = (packet_bufX + net_period_up);
+ node = jack_slist_next (node);
+ chn++;
+ }
}
#if HAVE_CELT
@@ -1351,97 +1302,93 @@ render_jack_ports_to_payload_8bit (JSList *playback_ports, JSList *playback_srcs
void
render_payload_to_jack_ports_celt (void *packet_payload, jack_nframes_t net_period_down, JSList *capture_ports, JSList *capture_srcs, jack_nframes_t nframes)
{
- int chn = 0;
- JSList *node = capture_ports;
- JSList *src_node = capture_srcs;
+ int chn = 0;
+ JSList *node = capture_ports;
+ JSList *src_node = capture_srcs;
- unsigned char *packet_bufX = (unsigned char *)packet_payload;
+ unsigned char *packet_bufX = (unsigned char*)packet_payload;
- while (node != NULL)
- {
- jack_port_t *port = (jack_port_t *) node->data;
- jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
+ while (node != NULL) {
+ jack_port_t *port = (jack_port_t*)node->data;
+ jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
- const char *porttype = jack_port_type (port);
+ const char *porttype = jack_port_type (port);
- if (jack_port_is_audio (porttype))
- {
- // audio port, decode celt data.
+ if (jack_port_is_audio (porttype)) {
+ // audio port, decode celt data.
- CELTDecoder *decoder = src_node->data;
+ CELTDecoder *decoder = src_node->data;
#if HAVE_CELT_API_0_8
- if( !packet_payload )
- celt_decode_float( decoder, NULL, net_period_down, buf, nframes );
- else
- celt_decode_float( decoder, packet_bufX, net_period_down, buf, nframes );
+ if ( !packet_payload ) {
+ celt_decode_float ( decoder, NULL, net_period_down, buf, nframes );
+ } else {
+ celt_decode_float ( decoder, packet_bufX, net_period_down, buf, nframes );
+ }
#else
- if( !packet_payload )
- celt_decode_float( decoder, NULL, net_period_down, buf );
- else
- celt_decode_float( decoder, packet_bufX, net_period_down, buf );
+ if ( !packet_payload ) {
+ celt_decode_float ( decoder, NULL, net_period_down, buf );
+ } else {
+ celt_decode_float ( decoder, packet_bufX, net_period_down, buf );
+ }
#endif
- src_node = jack_slist_next (src_node);
- }
- else if (jack_port_is_midi (porttype))
- {
- // midi port, decode midi events
- // convert the data buffer to a standard format (uint32_t based)
- unsigned int buffer_size_uint32 = net_period_down / 2;
- uint32_t * buffer_uint32 = (uint32_t*) packet_bufX;
- if( packet_payload )
- decode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
- }
- packet_bufX = (packet_bufX + net_period_down);
- node = jack_slist_next (node);
- chn++;
- }
+ src_node = jack_slist_next (src_node);
+ } else if (jack_port_is_midi (porttype)) {
+ // midi port, decode midi events
+ // convert the data buffer to a standard format (uint32_t based)
+ unsigned int buffer_size_uint32 = net_period_down / 2;
+ uint32_t * buffer_uint32 = (uint32_t*)packet_bufX;
+ if ( packet_payload ) {
+ decode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
+ }
+ }
+ packet_bufX = (packet_bufX + net_period_down);
+ node = jack_slist_next (node);
+ chn++;
+ }
}
void
render_jack_ports_to_payload_celt (JSList *playback_ports, JSList *playback_srcs, jack_nframes_t nframes, void *packet_payload, jack_nframes_t net_period_up)
{
- int chn = 0;
- JSList *node = playback_ports;
- JSList *src_node = playback_srcs;
-
- unsigned char *packet_bufX = (unsigned char *)packet_payload;
-
- while (node != NULL)
- {
- jack_port_t *port = (jack_port_t *) node->data;
- jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
- const char *porttype = jack_port_type (port);
-
- if (jack_port_is_audio (porttype))
- {
- // audio port, encode celt data.
-
- int encoded_bytes;
- float *floatbuf = alloca (sizeof(float) * nframes );
- memcpy( floatbuf, buf, nframes*sizeof(float) );
- CELTEncoder *encoder = src_node->data;
+ int chn = 0;
+ JSList *node = playback_ports;
+ JSList *src_node = playback_srcs;
+
+ unsigned char *packet_bufX = (unsigned char*)packet_payload;
+
+ while (node != NULL) {
+ jack_port_t *port = (jack_port_t*)node->data;
+ jack_default_audio_sample_t* buf = jack_port_get_buffer (port, nframes);
+ const char *porttype = jack_port_type (port);
+
+ if (jack_port_is_audio (porttype)) {
+ // audio port, encode celt data.
+
+ int encoded_bytes;
+ float *floatbuf = alloca (sizeof(float) * nframes );
+ memcpy ( floatbuf, buf, nframes * sizeof(float) );
+ CELTEncoder *encoder = src_node->data;
#if HAVE_CELT_API_0_8
- encoded_bytes = celt_encode_float( encoder, floatbuf, nframes, packet_bufX, net_period_up );
+ encoded_bytes = celt_encode_float ( encoder, floatbuf, nframes, packet_bufX, net_period_up );
#else
- encoded_bytes = celt_encode_float( encoder, floatbuf, NULL, packet_bufX, net_period_up );
+ encoded_bytes = celt_encode_float ( encoder, floatbuf, NULL, packet_bufX, net_period_up );
#endif
- if( encoded_bytes != net_period_up )
- printf( "something in celt changed. netjack needs to be changed to handle this.\n" );
- src_node = jack_slist_next( src_node );
- }
- else if (jack_port_is_midi (porttype))
- {
- // encode midi events from port to packet
- // convert the data buffer to a standard format (uint32_t based)
- unsigned int buffer_size_uint32 = net_period_up / 2;
- uint32_t * buffer_uint32 = (uint32_t*) packet_bufX;
- encode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
- }
- packet_bufX = (packet_bufX + net_period_up);
- node = jack_slist_next (node);
- chn++;
- }
+ if ( encoded_bytes != net_period_up ) {
+ printf ( "something in celt changed. netjack needs to be changed to handle this.\n" );
+ }
+ src_node = jack_slist_next ( src_node );
+ } else if (jack_port_is_midi (porttype)) {
+ // encode midi events from port to packet
+ // convert the data buffer to a standard format (uint32_t based)
+ unsigned int buffer_size_uint32 = net_period_up / 2;
+ uint32_t * buffer_uint32 = (uint32_t*)packet_bufX;
+ encode_midi_buffer (buffer_uint32, buffer_size_uint32, buf);
+ }
+ packet_bufX = (packet_bufX + net_period_up);
+ node = jack_slist_next (node);
+ chn++;
+ }
}
#endif
@@ -1449,29 +1396,35 @@ render_jack_ports_to_payload_celt (JSList *playback_ports, JSList *playback_srcs
void
render_payload_to_jack_ports (int bitdepth, void *packet_payload, jack_nframes_t net_period_down, JSList *capture_ports, JSList *capture_srcs, jack_nframes_t nframes, int dont_htonl_floats)
{
- if (bitdepth == 8)
- render_payload_to_jack_ports_8bit (packet_payload, net_period_down, capture_ports, capture_srcs, nframes);
- else if (bitdepth == 16)
- render_payload_to_jack_ports_16bit (packet_payload, net_period_down, capture_ports, capture_srcs, nframes);
+ if (bitdepth == 8) {
+ render_payload_to_jack_ports_8bit (packet_payload, net_period_down, capture_ports, capture_srcs, nframes);
+ } else if (bitdepth == 16) {
+ render_payload_to_jack_ports_16bit (packet_payload, net_period_down, capture_ports, capture_srcs, nframes);
+ }
#if HAVE_CELT
- else if (bitdepth == CELT_MODE)
- render_payload_to_jack_ports_celt (packet_payload, net_period_down, capture_ports, capture_srcs, nframes);
+ else if (bitdepth == CELT_MODE) {
+ render_payload_to_jack_ports_celt (packet_payload, net_period_down, capture_ports, capture_srcs, nframes);
+ }
#endif
- else
- render_payload_to_jack_ports_float (packet_payload, net_period_down, capture_ports, capture_srcs, nframes, dont_htonl_floats);
+ else {
+ render_payload_to_jack_ports_float (packet_payload, net_period_down, capture_ports, capture_srcs, nframes, dont_htonl_floats);
+ }
}
void
render_jack_ports_to_payload (int bitdepth, JSList *playback_ports, JSList *playback_srcs, jack_nframes_t nframes, void *packet_payload, jack_nframes_t net_period_up, int dont_htonl_floats)
{
- if (bitdepth == 8)
- render_jack_ports_to_payload_8bit (playback_ports, playback_srcs, nframes, packet_payload, net_period_up);
- else if (bitdepth == 16)
- render_jack_ports_to_payload_16bit (playback_ports, playback_srcs, nframes, packet_payload, net_period_up);
+ if (bitdepth == 8) {
+ render_jack_ports_to_payload_8bit (playback_ports, playback_srcs, nframes, packet_payload, net_period_up);
+ } else if (bitdepth == 16) {
+ render_jack_ports_to_payload_16bit (playback_ports, playback_srcs, nframes, packet_payload, net_period_up);
+ }
#if HAVE_CELT
- else if (bitdepth == CELT_MODE)
- render_jack_ports_to_payload_celt (playback_ports, playback_srcs, nframes, packet_payload, net_period_up);
+ else if (bitdepth == CELT_MODE) {
+ render_jack_ports_to_payload_celt (playback_ports, playback_srcs, nframes, packet_payload, net_period_up);
+ }
#endif
- else
- render_jack_ports_to_payload_float (playback_ports, playback_srcs, nframes, packet_payload, net_period_up, dont_htonl_floats);
+ else {
+ render_jack_ports_to_payload_float (playback_ports, playback_srcs, nframes, packet_payload, net_period_up, dont_htonl_floats);
+ }
}