| @@ -266,50 +266,51 @@ process (jack_nframes_t nframes, void *arg) | |||||
| jacknet_packet_header *pkthdr = (jacknet_packet_header *) packet_buf; | jacknet_packet_header *pkthdr = (jacknet_packet_header *) packet_buf; | ||||
| /* | /* | ||||
| * ok... SEND code first. | |||||
| * needed some time to find out why latency=0 | |||||
| * did not work ;S | |||||
| * for latency==0 we need to send out the packet before we wait on the reply. | |||||
| * but this introduces a cycle of latency, when netsource is connected to itself. | |||||
| * so we send out before read only in zero latency mode. | |||||
| * | * | ||||
| */ | */ | ||||
| /* reset packet_bufX... */ | |||||
| packet_bufX = packet_buf + sizeof (jacknet_packet_header) / sizeof (jack_default_audio_sample_t); | |||||
| /* ---------- Send ---------- */ | |||||
| render_jack_ports_to_payload (bitdepth, playback_ports, playback_srcs, nframes, | |||||
| packet_bufX, net_period, dont_htonl_floats); | |||||
| /* fill in packet hdr */ | |||||
| pkthdr->transport_state = jack_transport_query (client, &local_trans_pos); | |||||
| pkthdr->transport_frame = local_trans_pos.frame; | |||||
| pkthdr->framecnt = framecnt; | |||||
| pkthdr->latency = latency; | |||||
| pkthdr->reply_port = reply_port; | |||||
| pkthdr->sample_rate = jack_get_sample_rate (client); | |||||
| pkthdr->period_size = nframes; | |||||
| /* playback for us is capture on the other side */ | |||||
| pkthdr->capture_channels_audio = playback_channels_audio; | |||||
| pkthdr->playback_channels_audio = capture_channels_audio; | |||||
| pkthdr->capture_channels_midi = playback_channels_midi; | |||||
| pkthdr->playback_channels_midi = capture_channels_midi; | |||||
| pkthdr->mtu = mtu; | |||||
| pkthdr->sync_state = (jack_nframes_t)deadline_goodness; | |||||
| //printf("goodness=%d\n", deadline_goodness ); | |||||
| packet_header_hton (pkthdr); | |||||
| if (cont_miss < 3*latency+5) { | |||||
| int r; | |||||
| for( r=0; r<redundancy; r++ ) | |||||
| netjack_sendto (outsockfd, (char *) packet_buf, tx_bufsize, 0, &destaddr, sizeof (destaddr), mtu); | |||||
| } | |||||
| else if (cont_miss > 50+5*latency) | |||||
| { | |||||
| state_connected = 0; | |||||
| packet_cache_reset_master_address( global_packcache ); | |||||
| //printf ("Frame %d \tRealy too many packets missed (%d). Let's reset the counter\n", framecnt, cont_miss); | |||||
| cont_miss = 0; | |||||
| if( latency == 0 ) { | |||||
| /* reset packet_bufX... */ | |||||
| packet_bufX = packet_buf + sizeof (jacknet_packet_header) / sizeof (jack_default_audio_sample_t); | |||||
| /* ---------- Send ---------- */ | |||||
| render_jack_ports_to_payload (bitdepth, playback_ports, playback_srcs, nframes, | |||||
| packet_bufX, net_period, dont_htonl_floats); | |||||
| /* fill in packet hdr */ | |||||
| pkthdr->transport_state = jack_transport_query (client, &local_trans_pos); | |||||
| pkthdr->transport_frame = local_trans_pos.frame; | |||||
| pkthdr->framecnt = framecnt; | |||||
| pkthdr->latency = latency; | |||||
| pkthdr->reply_port = reply_port; | |||||
| pkthdr->sample_rate = jack_get_sample_rate (client); | |||||
| pkthdr->period_size = nframes; | |||||
| /* playback for us is capture on the other side */ | |||||
| pkthdr->capture_channels_audio = playback_channels_audio; | |||||
| pkthdr->playback_channels_audio = capture_channels_audio; | |||||
| pkthdr->capture_channels_midi = playback_channels_midi; | |||||
| pkthdr->playback_channels_midi = capture_channels_midi; | |||||
| pkthdr->mtu = mtu; | |||||
| pkthdr->sync_state = (jack_nframes_t)deadline_goodness; | |||||
| //printf("goodness=%d\n", deadline_goodness ); | |||||
| packet_header_hton (pkthdr); | |||||
| if (cont_miss < 3*latency+5) { | |||||
| int r; | |||||
| for( r=0; r<redundancy; r++ ) | |||||
| netjack_sendto (outsockfd, (char *) packet_buf, tx_bufsize, 0, &destaddr, sizeof (destaddr), mtu); | |||||
| } | |||||
| else if (cont_miss > 50+5*latency) | |||||
| { | |||||
| state_connected = 0; | |||||
| packet_cache_reset_master_address( global_packcache ); | |||||
| //printf ("Frame %d \tRealy too many packets missed (%d). Let's reset the counter\n", framecnt, cont_miss); | |||||
| cont_miss = 0; | |||||
| } | |||||
| } | } | ||||
| /* | /* | ||||
| @@ -407,6 +408,46 @@ process (jack_nframes_t nframes, void *arg) | |||||
| chn++; | chn++; | ||||
| } | } | ||||
| } | } | ||||
| if( latency != 0 ) { | |||||
| /* reset packet_bufX... */ | |||||
| packet_bufX = packet_buf + sizeof (jacknet_packet_header) / sizeof (jack_default_audio_sample_t); | |||||
| /* ---------- Send ---------- */ | |||||
| render_jack_ports_to_payload (bitdepth, playback_ports, playback_srcs, nframes, | |||||
| packet_bufX, net_period, dont_htonl_floats); | |||||
| /* fill in packet hdr */ | |||||
| pkthdr->transport_state = jack_transport_query (client, &local_trans_pos); | |||||
| pkthdr->transport_frame = local_trans_pos.frame; | |||||
| pkthdr->framecnt = framecnt; | |||||
| pkthdr->latency = latency; | |||||
| pkthdr->reply_port = reply_port; | |||||
| pkthdr->sample_rate = jack_get_sample_rate (client); | |||||
| pkthdr->period_size = nframes; | |||||
| /* playback for us is capture on the other side */ | |||||
| pkthdr->capture_channels_audio = playback_channels_audio; | |||||
| pkthdr->playback_channels_audio = capture_channels_audio; | |||||
| pkthdr->capture_channels_midi = playback_channels_midi; | |||||
| pkthdr->playback_channels_midi = capture_channels_midi; | |||||
| pkthdr->mtu = mtu; | |||||
| pkthdr->sync_state = (jack_nframes_t)deadline_goodness; | |||||
| //printf("goodness=%d\n", deadline_goodness ); | |||||
| packet_header_hton (pkthdr); | |||||
| if (cont_miss < 3*latency+5) { | |||||
| int r; | |||||
| for( r=0; r<redundancy; r++ ) | |||||
| netjack_sendto (outsockfd, (char *) packet_buf, tx_bufsize, 0, &destaddr, sizeof (destaddr), mtu); | |||||
| } | |||||
| else if (cont_miss > 50+5*latency) | |||||
| { | |||||
| state_connected = 0; | |||||
| packet_cache_reset_master_address( global_packcache ); | |||||
| //printf ("Frame %d \tRealy too many packets missed (%d). Let's reset the counter\n", framecnt, cont_miss); | |||||
| cont_miss = 0; | |||||
| } | |||||
| } | |||||
| framecnt++; | framecnt++; | ||||
| return 0; | return 0; | ||||
| @@ -437,8 +478,8 @@ fflush( stdout ); | |||||
| struct hostent *hostinfo = gethostbyname (hostname); | struct hostent *hostinfo = gethostbyname (hostname); | ||||
| if (hostinfo == NULL) { | if (hostinfo == NULL) { | ||||
| fprintf (stderr, "init_sockaddr_in: unknown host: %s.\n", hostname); | fprintf (stderr, "init_sockaddr_in: unknown host: %s.\n", hostname); | ||||
| fflush( stderr ); | |||||
| } | |||||
| fflush( stderr ); | |||||
| } | |||||
| #ifdef WIN32 | #ifdef WIN32 | ||||
| name->sin_addr.s_addr = inet_addr( hostname ); | name->sin_addr.s_addr = inet_addr( hostname ); | ||||
| #else | #else | ||||