|
|
|
|
@ -294,12 +294,12 @@ struct ast_trans_pvt *ast_translator_build_path(int dest, int source)
|
|
|
|
|
return head;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline int is16kHz(int format)
|
|
|
|
|
static inline int format_rate(int format)
|
|
|
|
|
{
|
|
|
|
|
if (format == AST_FORMAT_G722)
|
|
|
|
|
return 1;
|
|
|
|
|
return 16000;
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
return 8000;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*! \brief do the actual translation */
|
|
|
|
|
@ -320,11 +320,6 @@ struct ast_frame *ast_translate(struct ast_trans_pvt *path, struct ast_frame *f,
|
|
|
|
|
|
|
|
|
|
/* XXX hmmm... check this below */
|
|
|
|
|
if (!ast_tvzero(f->delivery)) {
|
|
|
|
|
int in_rate = 8000;
|
|
|
|
|
|
|
|
|
|
if (is16kHz(f->subclass))
|
|
|
|
|
in_rate = 16000;
|
|
|
|
|
|
|
|
|
|
if (!ast_tvzero(path->nextin)) {
|
|
|
|
|
/* Make sure this is in line with what we were expecting */
|
|
|
|
|
if (!ast_tveq(path->nextin, f->delivery)) {
|
|
|
|
|
@ -343,7 +338,7 @@ struct ast_frame *ast_translate(struct ast_trans_pvt *path, struct ast_frame *f,
|
|
|
|
|
path->nextout = f->delivery;
|
|
|
|
|
}
|
|
|
|
|
/* Predict next incoming sample */
|
|
|
|
|
path->nextin = ast_tvadd(path->nextin, ast_samp2tv(f->samples, in_rate));
|
|
|
|
|
path->nextin = ast_tvadd(path->nextin, ast_samp2tv(f->samples, format_rate(f->subclass)));
|
|
|
|
|
}
|
|
|
|
|
delivery = f->delivery;
|
|
|
|
|
for ( ; out && p ; p = p->next) {
|
|
|
|
|
@ -356,11 +351,6 @@ struct ast_frame *ast_translate(struct ast_trans_pvt *path, struct ast_frame *f,
|
|
|
|
|
return NULL;
|
|
|
|
|
/* we have a frame, play with times */
|
|
|
|
|
if (!ast_tvzero(delivery)) {
|
|
|
|
|
int out_rate = 8000;
|
|
|
|
|
|
|
|
|
|
if (is16kHz(out->subclass))
|
|
|
|
|
out_rate = 16000;
|
|
|
|
|
|
|
|
|
|
/* Regenerate prediction after a discontinuity */
|
|
|
|
|
if (ast_tvzero(path->nextout))
|
|
|
|
|
path->nextout = ast_tvnow();
|
|
|
|
|
@ -370,7 +360,7 @@ struct ast_frame *ast_translate(struct ast_trans_pvt *path, struct ast_frame *f,
|
|
|
|
|
|
|
|
|
|
/* Predict next outgoing timestamp from samples in this
|
|
|
|
|
frame. */
|
|
|
|
|
path->nextout = ast_tvadd(path->nextout, ast_samp2tv(out->samples, out_rate));
|
|
|
|
|
path->nextout = ast_tvadd(path->nextout, ast_samp2tv(out->samples, format_rate(out->subclass)));
|
|
|
|
|
} else {
|
|
|
|
|
out->delivery = ast_tv(0, 0);
|
|
|
|
|
out->has_timing_info = has_timing_info;
|
|
|
|
|
@ -393,10 +383,7 @@ static void calc_cost(struct ast_translator *t, int seconds)
|
|
|
|
|
struct ast_trans_pvt *pvt;
|
|
|
|
|
struct timeval start;
|
|
|
|
|
int cost;
|
|
|
|
|
int out_rate = 8000;
|
|
|
|
|
|
|
|
|
|
if (is16kHz(t->dstfmt))
|
|
|
|
|
out_rate = 16000;
|
|
|
|
|
int out_rate = format_rate(t->dstfmt);
|
|
|
|
|
|
|
|
|
|
if (!seconds)
|
|
|
|
|
seconds = 1;
|
|
|
|
|
|