|
|
|
@ -271,6 +271,7 @@ static bool t38_pcm_player(struct media_player *mp) { |
|
|
|
int16_t smp[80]; |
|
|
|
int num = t38_gateway_tx(tg->gw, smp, 80); |
|
|
|
if (num <= 0) { |
|
|
|
ilog(LOG_DEBUG, "No T.38 PCM samples generated"); |
|
|
|
// use a fixed interval of 10 ms |
|
|
|
timeval_add_usec(&mp->next_run, 10000); |
|
|
|
timerthread_obj_schedule_abs(&mp->tt_obj, &mp->next_run); |
|
|
|
@ -286,6 +287,12 @@ static bool t38_pcm_player(struct media_player *mp) { |
|
|
|
unsigned long long pts = tg->pts; |
|
|
|
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); |
|
|
|
|
|
|
|
// this reschedules our player as well |
|
|
|
@ -518,6 +525,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", |
|
|
|
left); |
|
|
|
|
|
|
|
tg->last_rx_ts = rtpe_now; |
|
|
|
|
|
|
|
mutex_unlock(&tg->lock); |
|
|
|
|
|
|
|
return 0; |
|
|
|
|