diff --git a/main/translate.c b/main/translate.c index 30f16492ef369bdb2fb4347aa304b9009f3e2710..70e97f9556e663dc929996d57f40759eb982eda3 100644 --- a/main/translate.c +++ b/main/translate.c @@ -32,6 +32,7 @@ #include <sys/time.h> #include <sys/resource.h> #include <math.h> +#include <stdlib.h> #include "asterisk/lock.h" #include "asterisk/channel.h" @@ -1413,6 +1414,20 @@ int ast_translator_best_choice(struct ast_format_cap *dst_cap, ao2_replace(bestdst, dst); besttablecost = matrix_get(x, y)->table_cost; beststeps = matrix_get(x, y)->multistep; + } else if (matrix_get(x, y)->table_cost == besttablecost + && matrix_get(x, y)->multistep == beststeps) { + int gap_selected = abs(ast_format_get_sample_rate(best) + - ast_format_get_sample_rate(bestdst)); + int gap_current = abs(ast_format_get_sample_rate(src) + - ast_format_get_sample_rate(dst)); + + if (gap_current < gap_selected) { + /* better than what we have so far */ + ao2_replace(best, src); + ao2_replace(bestdst, dst); + besttablecost = matrix_get(x, y)->table_cost; + beststeps = matrix_get(x, y)->multistep; + } } } }