Browse Source

* Patch from Torben Hohn that adds the possibility to set the mtu used by NetJack connections

git-svn-id: svn+ssh://jackaudio.org/trunk/jack@1162 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/0.115.6
marco 18 years ago
parent
commit
ea2eed034b
2 changed files with 20 additions and 12 deletions
  1. +6
    -5
      drivers/netjack/net_driver.c
  2. +14
    -7
      tools/netsource.c

+ 6
- 5
drivers/netjack/net_driver.c View File

@@ -107,7 +107,7 @@ rx_again:
return 0;
}
int len = netjack_recvfrom(driver->sockfd, (char *)driver->rx_buf, bufsize,
MSG_WAITALL, (struct sockaddr*) & driver->syncsource_address, &address_size, 1400);
MSG_WAITALL, (struct sockaddr*) & driver->syncsource_address, &address_size, driver->mtu);


if (len != bufsize) {
@@ -133,7 +133,7 @@ static inline int
net_driver_run_cycle (net_driver_t *driver)
{
jack_engine_t *engine = driver->engine;
int wait_status;
int wait_status = -1;
float delayed_usecs;

jack_nframes_t nframes = net_driver_wait (driver, -1, &wait_status,
@@ -194,7 +194,7 @@ net_driver_null_cycle (net_driver_t* driver, jack_nframes_t nframes)
driver->syncsource_address.sin_port = htons(driver->reply_port);

netjack_sendto(driver->outsockfd, (char *)packet_buf, tx_size,
0, (struct sockaddr*)&driver->syncsource_address, sizeof(struct sockaddr_in), 1400);
0, (struct sockaddr*)&driver->syncsource_address, sizeof(struct sockaddr_in), driver->mtu);

return 0;
}
@@ -312,7 +312,7 @@ net_driver_write (net_driver_t* driver, jack_nframes_t nframes)
if (driver->reply_port)
driver->syncsource_address.sin_port = htons(driver->reply_port);
netjack_sendto(driver->outsockfd, (char *)packet_buf, packet_size,
0, (struct sockaddr*)&driver->syncsource_address, sizeof(struct sockaddr_in), 1400);
0, (struct sockaddr*)&driver->syncsource_address, sizeof(struct sockaddr_in), driver->mtu);

return 0;
}
@@ -596,6 +596,7 @@ net_driver_new (jack_client_t * client,
driver->playback_channels = driver->playback_channels_audio + driver->playback_channels_midi;

driver->mtu = first_packet->mtu;
jack_info("mtu = %d", first_packet->mtu);
driver->latency = first_packet->latency;
}

@@ -613,7 +614,7 @@ net_driver_new (jack_client_t * client,
driver->pkt_buf = malloc(sizeof(jacknet_packet_header) + driver->net_period_down * driver->capture_channels * get_sample_size(driver->bitdepth));

int rx_bufsize = sizeof(jacknet_packet_header) + driver->net_period_down * driver->capture_channels * get_sample_size(driver->bitdepth);
global_packcache = packet_cache_new(driver->latency + 5, rx_bufsize, 1400);
global_packcache = packet_cache_new(driver->latency + 5, rx_bufsize, driver->mtu);

jack_info("netjack: period : up: %d / dn: %d", driver->net_period_up, driver->net_period_down);
jack_info("netjack: framerate: %d", driver->sample_rate);


+ 14
- 7
tools/netsource.c View File

@@ -56,6 +56,7 @@ int playback_channels_midi = 1;
int latency = 5;
jack_nframes_t factor = 1;
int bitdepth = 0;
int mtu = 1400;
int reply_port = 0;
jack_client_t *client;

@@ -199,9 +200,9 @@ process (jack_nframes_t nframes, void *arg)

/* ---------- Receive ---------- */
if (reply_port)
size = netjack_recv (insockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, 1400);
size = netjack_recv (insockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, mtu);
else
size = netjack_recv (outsockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, 1400);
size = netjack_recv (outsockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, mtu);
packet_header_ntoh (pkthdr);
/* Loop till we get the right packet at the right momment */
while (size == rx_bufsize && (framecnt - pkthdr->framecnt) > latency)
@@ -209,9 +210,9 @@ process (jack_nframes_t nframes, void *arg)
//printf ("Frame %d \tLate packet received with a latency of %d frames (expected frame %d, got frame %d)\n", framecnt, framecnt - pkthdr->framecnt, framecnt - latency, pkthdr->framecnt);
printf ("Frame %d \tLate packet received with a latency of %d frames\n", framecnt, framecnt - pkthdr->framecnt);
if (reply_port)
size = netjack_recv (insockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, 1400);
size = netjack_recv (insockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, mtu);
else
size = netjack_recv (outsockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, 1400);
size = netjack_recv (outsockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, mtu);
packet_header_ntoh (pkthdr);
}

@@ -274,10 +275,11 @@ process (jack_nframes_t nframes, void *arg)
pkthdr->playback_channels_audio = capture_channels_audio;
pkthdr->capture_channels_midi = playback_channels_midi;
pkthdr->playback_channels_midi = capture_channels_midi;
pkthdr->mtu = mtu;
packet_header_hton (pkthdr);
if (cont_miss < 10)
netjack_sendto (outsockfd, (char *) packet_buf, tx_bufsize, 0, &destaddr, sizeof (destaddr), 1400);
netjack_sendto (outsockfd, (char *) packet_buf, tx_bufsize, 0, &destaddr, sizeof (destaddr), mtu);
// else if (cont_miss >= 10 && cont_miss <= 50)
// printf ("Frame %d \tToo many packets missed (%d). We have stopped sending data\n", framecnt, cont_miss);
else if (cont_miss > 50)
@@ -295,6 +297,7 @@ process (jack_nframes_t nframes, void *arg)
* It is called by JACK if the server ever shuts down or
* decides to disconnect the client.
*/

void
jack_shutdown (void *arg)
{
@@ -334,6 +337,7 @@ fprintf (stderr, "usage: jack_netsource -h <host peer> [options]\n"
" -r <reply port> - Local UDP port to use\n"
" -f <downsample ratio> - Downsample data in the wire by this factor\n"
" -b <bitdepth> - Set transport to use 16bit or 8bit\n"
" -m <mtu> - Assume this mtu for the link\n"
"\n");
}

@@ -359,7 +363,7 @@ main (int argc, char *argv[])
sprintf(client_name, "netsource");
sprintf(peer_ip, "localhost");

while ((c = getopt (argc, argv, ":n:s:h:p:C:P:i:o:l:r:f:b:")) != -1)
while ((c = getopt (argc, argv, ":n:s:h:p:C:P:i:o:l:r:f:b:m:")) != -1)
{
switch (c)
{
@@ -405,6 +409,9 @@ main (int argc, char *argv[])
case 'b':
bitdepth = atoi (optarg);
break;
case 'm':
mtu = atoi (optarg);
break;
case ':':
fprintf (stderr, "Option -%c requires an operand\n", optopt);
errflg++;
@@ -450,7 +457,7 @@ main (int argc, char *argv[])

jack_nframes_t net_period = (float) jack_get_buffer_size (client) / (float) factor;
int rx_bufsize = get_sample_size (bitdepth) * capture_channels * net_period + sizeof (jacknet_packet_header);
global_packcache = packet_cache_new (latency + 5, rx_bufsize, 1400);
global_packcache = packet_cache_new (latency + 5, rx_bufsize, mtu);

/* tell the JACK server that we are ready to roll */
if (jack_activate (client))


Loading…
Cancel
Save