diff options
author | George Joseph <gjoseph@digium.com> | 2018-03-16 09:19:11 -0600 |
---|---|---|
committer | George Joseph <gjoseph@digium.com> | 2018-03-19 15:36:09 -0600 |
commit | 5d097f82367f61bdae7d799c7815e69ba089d6d6 (patch) | |
tree | 1e8494dcc9a164a0c6f2615bee6531363d244374 /main/channel.c | |
parent | 5843a197979d10b336a041c6cb8bef90dfa0484a (diff) |
channel.c: Allow generic plc then channel formats are equal
If the two formats on a channel are equal, we don't transcode and since
the generic plc needs slin to work, it doesn't get invoked.
* A new configuration option "genericplc_on_equal_codecs" was added
to the "plc" section of codecs.conf to allow generic packet loss
concealment even if no transcoding was originally needed.
Transcoding via SLIN is forced in this case.
ASTERISK-27743
Change-Id: I0577026a179dea34232e63123254b4e0508378f4
Diffstat (limited to 'main/channel.c')
-rw-r--r-- | main/channel.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/main/channel.c b/main/channel.c index c7847cbd4..8325f19c3 100644 --- a/main/channel.c +++ b/main/channel.c @@ -6485,11 +6485,15 @@ static int ast_channel_make_compatible_helper(struct ast_channel *from, struct a * to use SLINEAR between channels, but only if there is * no direct conversion available. If generic PLC is * desired, then transcoding via SLINEAR is a requirement + * even if the formats are the same. */ - if (ast_format_cmp(best_dst_fmt, best_src_fmt) == AST_FORMAT_CMP_NOT_EQUAL - && (ast_opt_generic_plc || ast_opt_transcode_via_slin)) { + if (ast_opt_generic_plc_on_equal_codecs + || (ast_format_cmp(best_dst_fmt, best_src_fmt) == AST_FORMAT_CMP_NOT_EQUAL + && (ast_opt_generic_plc || ast_opt_transcode_via_slin))) { + int use_slin = (ast_format_cache_is_slinear(best_src_fmt) - || ast_format_cache_is_slinear(best_dst_fmt)) ? 1 : 0; + || ast_format_cache_is_slinear(best_dst_fmt)) + ? 1 : ast_opt_generic_plc_on_equal_codecs; if (use_slin || ast_translate_path_steps(best_dst_fmt, best_src_fmt) != 1) { int best_sample_rate = (ast_format_get_sample_rate(best_src_fmt) > ast_format_get_sample_rate(best_dst_fmt)) ? |