diff --git a/common/JackNetOneDriver.cpp b/common/JackNetOneDriver.cpp index b6703432..d5f8610f 100644 --- a/common/JackNetOneDriver.cpp +++ b/common/JackNetOneDriver.cpp @@ -288,7 +288,8 @@ namespace Jack //driver processes-------------------------------------------------------------------- int JackNetOneDriver::Read() { - netjack_wait( &netj ); + if( netjack_wait( &netj ) ) + NotifyXRun(fBeginDateUst, fDelayedUsecs); if( (netj.num_lost_packets * netj.period_size / netj.sample_rate) > 10 ) throw JackNetException(); diff --git a/common/netjack.c b/common/netjack.c index ee2d7760..9f99f5ae 100644 --- a/common/netjack.c +++ b/common/netjack.c @@ -83,7 +83,7 @@ net_driver_sync_cb(jack_transport_state_t state, jack_position_t *pos, void *dat return retval; } -void netjack_wait( netjack_driver_state_t *netj ) +int netjack_wait( netjack_driver_state_t *netj ) { int we_have_the_expected_frame = 0; jack_nframes_t next_frame_avail; @@ -132,8 +132,8 @@ void netjack_wait( netjack_driver_state_t *netj ) // it works... so... netj->running_free = 0; - if( !we_have_the_expected_frame ) - jack_error( "netxrun... %d", netj->expected_framecnt ); + //if( !we_have_the_expected_frame ) + // jack_error( "netxrun... %d", netj->expected_framecnt ); if( we_have_the_expected_frame ) { netj->time_to_deadline = netj->next_deadline - jack_get_time() - netj->period_usecs; @@ -279,6 +279,11 @@ void netjack_wait( netjack_driver_state_t *netj ) else { netj->num_lost_packets = 0; } + + if( !netj->packet_data_valid && !netj->running_free ) + return 1; + + return 0; } void netjack_send_silence( netjack_driver_state_t *netj, int syncstate ) diff --git a/common/netjack.h b/common/netjack.h index 761a664a..07e5c269 100644 --- a/common/netjack.h +++ b/common/netjack.h @@ -108,7 +108,7 @@ struct _netjack_driver_state { unsigned int resample_factor_up; }; -void netjack_wait( netjack_driver_state_t *netj ); +int netjack_wait( netjack_driver_state_t *netj ); void netjack_send_silence( netjack_driver_state_t *netj, int syncstate ); void netjack_read( netjack_driver_state_t *netj, jack_nframes_t nframes ) ; void netjack_write( netjack_driver_state_t *netj, jack_nframes_t nframes, int syncstate );