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
This commit is contained in:
parent
c2f4925ee0
commit
dec44306cf
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue