Browse Source

fix using wrong rx_buffer for transmission in netsource

tags/1.9.7
Torben Hohn 15 years ago
parent
commit
2e50f17e4c
1 changed files with 43 additions and 45 deletions
  1. +43
    -45
      example-clients/netsource.c

+ 43
- 45
example-clients/netsource.c View File

@@ -266,7 +266,7 @@ process (jack_nframes_t nframes, void *arg)


jack_position_t local_trans_pos; jack_position_t local_trans_pos;


uint32_t *packet_buf, *packet_bufX;
uint32_t *packet_buf_tx, *packet_bufX;
uint32_t *rx_packet_ptr; uint32_t *rx_packet_ptr;
jack_time_t packet_recv_timestamp; jack_time_t packet_recv_timestamp;


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




/* Allocate a buffer where both In and Out Buffer will fit */ /* Allocate a buffer where both In and Out Buffer will fit */
packet_buf = alloca ((rx_bufsize > tx_bufsize) ? rx_bufsize : tx_bufsize);
packet_buf_tx = alloca (tx_bufsize);


jacknet_packet_header *pkthdr = (jacknet_packet_header *) packet_buf;
jacknet_packet_header *pkthdr_tx = (jacknet_packet_header *) packet_buf_tx;


/* /*
* for latency==0 we need to send out the packet before we wait on the reply. * for latency==0 we need to send out the packet before we wait on the reply.
@@ -293,38 +293,38 @@ process (jack_nframes_t nframes, void *arg)


if( latency == 0 ) { if( latency == 0 ) {
/* reset packet_bufX... */ /* reset packet_bufX... */
packet_bufX = packet_buf + sizeof (jacknet_packet_header) / sizeof (jack_default_audio_sample_t);
packet_bufX = packet_buf_tx + sizeof (jacknet_packet_header) / sizeof (jack_default_audio_sample_t);


/* ---------- Send ---------- */ /* ---------- Send ---------- */
render_jack_ports_to_payload (bitdepth, playback_ports, playback_srcs, nframes, render_jack_ports_to_payload (bitdepth, playback_ports, playback_srcs, nframes,
packet_bufX, net_period, dont_htonl_floats); packet_bufX, net_period, dont_htonl_floats);


/* fill in packet hdr */ /* 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;
pkthdr_tx->transport_state = jack_transport_query (client, &local_trans_pos);
pkthdr_tx->transport_frame = local_trans_pos.frame;
pkthdr_tx->framecnt = framecnt;
pkthdr_tx->latency = latency;
pkthdr_tx->reply_port = reply_port;
pkthdr_tx->sample_rate = jack_get_sample_rate (client);
pkthdr_tx->period_size = nframes;


/* playback for us is capture on the other side */ /* 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_tx->capture_channels_audio = playback_channels_audio;
pkthdr_tx->playback_channels_audio = capture_channels_audio;
pkthdr_tx->capture_channels_midi = playback_channels_midi;
pkthdr_tx->playback_channels_midi = capture_channels_midi;
pkthdr_tx->mtu = mtu;
if( freewheeling!= 0 ) if( freewheeling!= 0 )
pkthdr->sync_state = (jack_nframes_t)MASTER_FREEWHEELS;
pkthdr_tx->sync_state = (jack_nframes_t)MASTER_FREEWHEELS;
else else
pkthdr->sync_state = (jack_nframes_t)deadline_goodness;
pkthdr_tx->sync_state = (jack_nframes_t)deadline_goodness;
//printf("goodness=%d\n", deadline_goodness ); //printf("goodness=%d\n", deadline_goodness );


packet_header_hton (pkthdr);
packet_header_hton (pkthdr_tx);
if (cont_miss < 3*latency+5) { if (cont_miss < 3*latency+5) {
int r; int r;
for( r=0; r<redundancy; r++ ) for( r=0; r<redundancy; r++ )
netjack_sendto (outsockfd, (char *) packet_buf, tx_bufsize, 0, &destaddr, sizeof (destaddr), mtu);
netjack_sendto (outsockfd, (char *) packet_buf_tx, tx_bufsize, 0, &destaddr, sizeof (destaddr), mtu);
} }
else if (cont_miss > 50+5*latency) else if (cont_miss > 50+5*latency)
{ {
@@ -340,8 +340,6 @@ process (jack_nframes_t nframes, void *arg)
* *
*/ */


/* reset packet_bufX... */
packet_bufX = packet_buf + sizeof (jacknet_packet_header) / sizeof (jack_default_audio_sample_t);


if( reply_port ) if( reply_port )
input_fd = insockfd; input_fd = insockfd;
@@ -374,14 +372,14 @@ process (jack_nframes_t nframes, void *arg)
* to the JACK ports so it can be played. */ * to the JACK ports so it can be played. */
if (size == rx_bufsize) if (size == rx_bufsize)
{ {
packet_buf = rx_packet_ptr;
pkthdr = (jacknet_packet_header *) packet_buf;
packet_bufX = packet_buf + sizeof (jacknet_packet_header) / sizeof (jack_default_audio_sample_t);
uint32_t *packet_buf_rx = rx_packet_ptr;
jacknet_packet_header *pkthdr_rx = (jacknet_packet_header *) packet_buf_rx;
packet_bufX = packet_buf_rx + sizeof (jacknet_packet_header) / sizeof (jack_default_audio_sample_t);
// calculate how much time there would have been, if this packet was sent at the deadline. // calculate how much time there would have been, if this packet was sent at the deadline.


int recv_time_offset = (int) (jack_get_time() - packet_recv_timestamp); int recv_time_offset = (int) (jack_get_time() - packet_recv_timestamp);
packet_header_ntoh (pkthdr);
deadline_goodness = recv_time_offset - (int)pkthdr->latency;
packet_header_ntoh (pkthdr_rx);
deadline_goodness = recv_time_offset - (int)pkthdr_rx->latency;
//printf( "deadline goodness = %d ---> off: %d\n", deadline_goodness, recv_time_offset ); //printf( "deadline goodness = %d ---> off: %d\n", deadline_goodness, recv_time_offset );


if (cont_miss) if (cont_miss)
@@ -395,7 +393,7 @@ process (jack_nframes_t nframes, void *arg)
state_currentframe = framecnt; state_currentframe = framecnt;
state_recv_packet_queue_time = recv_time_offset; state_recv_packet_queue_time = recv_time_offset;
state_connected = 1; state_connected = 1;
sync_state = pkthdr->sync_state;
sync_state = pkthdr_rx->sync_state;
packet_cache_release_packet( global_packcache, framecnt - latency ); packet_cache_release_packet( global_packcache, framecnt - latency );
} }
/* Second alternative : we've received something that's not /* Second alternative : we've received something that's not
@@ -434,38 +432,38 @@ process (jack_nframes_t nframes, void *arg)
} }
if( latency != 0 ) { if( latency != 0 ) {
/* reset packet_bufX... */ /* reset packet_bufX... */
packet_bufX = packet_buf + sizeof (jacknet_packet_header) / sizeof (jack_default_audio_sample_t);
packet_bufX = packet_buf_tx + sizeof (jacknet_packet_header) / sizeof (jack_default_audio_sample_t);


/* ---------- Send ---------- */ /* ---------- Send ---------- */
render_jack_ports_to_payload (bitdepth, playback_ports, playback_srcs, nframes, render_jack_ports_to_payload (bitdepth, playback_ports, playback_srcs, nframes,
packet_bufX, net_period, dont_htonl_floats); packet_bufX, net_period, dont_htonl_floats);


/* fill in packet hdr */ /* 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;
pkthdr_tx->transport_state = jack_transport_query (client, &local_trans_pos);
pkthdr_tx->transport_frame = local_trans_pos.frame;
pkthdr_tx->framecnt = framecnt;
pkthdr_tx->latency = latency;
pkthdr_tx->reply_port = reply_port;
pkthdr_tx->sample_rate = jack_get_sample_rate (client);
pkthdr_tx->period_size = nframes;


/* playback for us is capture on the other side */ /* 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_tx->capture_channels_audio = playback_channels_audio;
pkthdr_tx->playback_channels_audio = capture_channels_audio;
pkthdr_tx->capture_channels_midi = playback_channels_midi;
pkthdr_tx->playback_channels_midi = capture_channels_midi;
pkthdr_tx->mtu = mtu;
if( freewheeling!= 0 ) if( freewheeling!= 0 )
pkthdr->sync_state = (jack_nframes_t)MASTER_FREEWHEELS;
pkthdr_tx->sync_state = (jack_nframes_t)MASTER_FREEWHEELS;
else else
pkthdr->sync_state = (jack_nframes_t)deadline_goodness;
pkthdr_tx->sync_state = (jack_nframes_t)deadline_goodness;
//printf("goodness=%d\n", deadline_goodness ); //printf("goodness=%d\n", deadline_goodness );


packet_header_hton (pkthdr);
packet_header_hton (pkthdr_tx);
if (cont_miss < 3*latency+5) { if (cont_miss < 3*latency+5) {
int r; int r;
for( r=0; r<redundancy; r++ ) for( r=0; r<redundancy; r++ )
netjack_sendto (outsockfd, (char *) packet_buf, tx_bufsize, 0, &destaddr, sizeof (destaddr), mtu);
netjack_sendto (outsockfd, (char *) packet_buf_tx, tx_bufsize, 0, &destaddr, sizeof (destaddr), mtu);
} }
else if (cont_miss > 50+5*latency) else if (cont_miss > 50+5*latency)
{ {


Loading…
Cancel
Save