diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2022-07-31 07:55:14 +0200 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2022-10-23 16:56:27 +0200 |
commit | 2b7efedc483362d3afc2ae71dfb716ac5427f600 (patch) | |
tree | 675898699f0cd411fee8af8435b5b13ad9784234 /src/fuenf | |
parent | 4fc92eba45a9c197317bdea02d9811c784d77775 (diff) |
Refactoring jitter buffer
Features are:
* Packet based buffer
* Random in, first out
* Adaptive delay compensation (voice)
* Fixed delay (data, optionally MODEM/FAX)
* Interpolation of missing frames
* Any sample size
Diffstat (limited to 'src/fuenf')
-rw-r--r-- | src/fuenf/dsp.c | 6 | ||||
-rw-r--r-- | src/fuenf/fuenf.c | 9 |
2 files changed, 7 insertions, 8 deletions
diff --git a/src/fuenf/dsp.c b/src/fuenf/dsp.c index b3f10f8..7985fb9 100644 --- a/src/fuenf/dsp.c +++ b/src/fuenf/dsp.c @@ -595,15 +595,17 @@ void sender_send(sender_t *sender, sample_t *samples, uint8_t *power, int length fuenf_t *fuenf = (fuenf_t *) sender; sample_t *orig_samples = samples; int orig_length = length; - int count; + int count, input_num; sample_t *spl; int pos; int i; /* speak through */ if (fuenf->state == FUENF_STATE_DURCHSAGE && fuenf->callref) { - jitter_load(&fuenf->sender.dejitter, samples, length); memset(power, 1, length); + input_num = samplerate_upsample_input_num(&sender->srstate, length); + jitter_load(&sender->dejitter, samples, input_num); + samplerate_upsample(&sender->srstate, samples, input_num, samples, length); } else { /* send if something has to be sent. else turn transmitter off */ while ((count = encode(fuenf, samples, length))) { diff --git a/src/fuenf/fuenf.c b/src/fuenf/fuenf.c index 4a3eb90..4466094 100644 --- a/src/fuenf/fuenf.c +++ b/src/fuenf/fuenf.c @@ -390,7 +390,7 @@ void call_down_release(int callref, int cause) } /* Receive audio from call instance. */ -void call_down_audio(int callref, sample_t *samples, int count) +void call_down_audio(int callref, uint16_t sequence, uint32_t timestamp, uint32_t ssrc, sample_t *samples, int count) { sender_t *sender; fuenf_t *fuenf; @@ -403,11 +403,8 @@ void call_down_audio(int callref, sample_t *samples, int count) if (!sender) return; - if (fuenf->state == FUENF_STATE_DURCHSAGE) { - sample_t up[(int)((double)count * fuenf->sender.srstate.factor + 0.5) + 10]; - count = samplerate_upsample(&fuenf->sender.srstate, samples, count, up); - jitter_save(&fuenf->sender.dejitter, up, count); - } + if (fuenf->state == FUENF_STATE_DURCHSAGE) + jitter_save(&fuenf->sender.dejitter, samples, count, 1, sequence, timestamp, ssrc); } void dump_info(void) {} |