@ -272,6 +272,7 @@ static bool t38_pcm_player(struct media_player *mp) {
int16_t smp [ 80 ] ;
int16_t smp [ 80 ] ;
int num = t38_gateway_tx ( tg - > gw , smp , 80 ) ;
int num = t38_gateway_tx ( tg - > gw , smp , 80 ) ;
if ( num < = 0 ) {
if ( num < = 0 ) {
ilog ( LOG_DEBUG , " No T.38 PCM samples generated " ) ;
// use a fixed interval of 10 ms
// use a fixed interval of 10 ms
timeval_add_usec ( & mp - > next_run , 10000 ) ;
timeval_add_usec ( & mp - > next_run , 10000 ) ;
timerthread_obj_schedule_abs ( & mp - > tt_obj , & mp - > next_run ) ;
timerthread_obj_schedule_abs ( & mp - > tt_obj , & mp - > next_run ) ;
@ -287,6 +288,12 @@ static bool t38_pcm_player(struct media_player *mp) {
unsigned long long pts = tg - > pts ;
unsigned long long pts = tg - > pts ;
tg - > pts + = num ;
tg - > pts + = num ;
// handle fill-in
if ( timeval_diff ( & rtpe_now , & tg - > last_rx_ts ) > 30000 ) {
ilog ( LOG_DEBUG , " Adding T.38 fill-in samples " ) ;
t38_gateway_rx_fillin ( tg - > gw , 80 ) ;
}
mutex_unlock ( & tg - > lock ) ;
mutex_unlock ( & tg - > lock ) ;
// this reschedules our player as well
// this reschedules our player as well
@ -516,6 +523,8 @@ int t38_gateway_input_samples(struct t38_gateway *tg, int16_t amp[], int len) {
ilog ( LOG_WARN | LOG_FLAG_LIMIT , " %i PCM samples were not processed by the T.38 gateway " ,
ilog ( LOG_WARN | LOG_FLAG_LIMIT , " %i PCM samples were not processed by the T.38 gateway " ,
left ) ;
left ) ;
tg - > last_rx_ts = rtpe_now ;
mutex_unlock ( & tg - > lock ) ;
mutex_unlock ( & tg - > lock ) ;
return 0 ;
return 0 ;