From dec44306cf605be2a267d0b7fc3937c1e88483f8 Mon Sep 17 00:00:00 2001 From: Jean Aunis Date: Wed, 21 Apr 2021 13:42:32 +0200 Subject: [PATCH] translate.c: Take sampling rate into account when checking codec's buffer size Up/down sampling changes the number of samples produced by a translation. This must be taken into account when checking the codec's buffer size. ASTERISK-29328 Change-Id: I9aebe2f8788e00321a7f5c47aa97c617f39e9055 --- main/translate.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/main/translate.c b/main/translate.c index a9665ae348..6604d14ff4 100644 --- a/main/translate.c +++ b/main/translate.c @@ -408,12 +408,18 @@ static int framein(struct ast_trans_pvt *pvt, struct ast_frame *f) } } if (pvt->t->buffer_samples) { /* do not pass empty frames to callback */ + int src_srate = pvt->t->src_codec.sample_rate; + int dst_srate = pvt->t->dst_codec.sample_rate; + + ast_assert(src_srate > 0); + if (f->datalen == 0) { /* perform native PLC if available */ /* If the codec has native PLC, then do that */ if (!pvt->t->native_plc) return 0; } - if (pvt->samples + f->samples > pvt->t->buffer_samples) { + + if (pvt->samples + (f->samples * dst_srate / src_srate) > pvt->t->buffer_samples) { ast_log(LOG_WARNING, "Out of buffer space\n"); return -1; }