From 55279bfd9c16146707dc23edfc2c385dfd322c11 Mon Sep 17 00:00:00 2001
From: Jean Aunis <jean.aunis@prescom.fr>
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;
 		}
-- 
GitLab