diff --git a/main/translate.c b/main/translate.c
index a9665ae348cee990630cd348d660955bef6af7f0..6604d14ff42491d48a9cbb1bd296fe726a2ef1ee 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;
 		}