Merge "channel.c: Allow generic plc then channel formats are equal"
This commit is contained in:
commit
f863f1f91b
7
CHANGES
7
CHANGES
|
@ -101,6 +101,13 @@ Core:
|
||||||
--- Functionality changes from Asterisk 15.3.0 to Asterisk 15.4.0 ------------
|
--- Functionality changes from Asterisk 15.3.0 to Asterisk 15.4.0 ------------
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Core
|
||||||
|
------------------
|
||||||
|
* 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.
|
||||||
|
|
||||||
res_pjproject
|
res_pjproject
|
||||||
------------------
|
------------------
|
||||||
* Added the "cache_pools" option to pjproject.conf. Disabling the option
|
* Added the "cache_pools" option to pjproject.conf. Disabling the option
|
||||||
|
|
|
@ -64,8 +64,15 @@ experimental_rtcp_feedback => false
|
||||||
[plc]
|
[plc]
|
||||||
; for all codecs which do not support native PLC
|
; for all codecs which do not support native PLC
|
||||||
; this determines whether to perform generic PLC
|
; this determines whether to perform generic PLC
|
||||||
; there is a minor performance penalty for this
|
; there is a minor performance penalty for this.
|
||||||
|
; By default plc is applied only when the 2 codecs
|
||||||
|
; in a channel are different.
|
||||||
genericplc => true
|
genericplc => true
|
||||||
|
; Apply generic plc to channels even if the 2 codecs
|
||||||
|
; are the same. This forces transcoding via slin so
|
||||||
|
; the performance impact should be considered.
|
||||||
|
; Ignored if genericplc is not also enabled.
|
||||||
|
genericplc_on_equal_codecs => false
|
||||||
|
|
||||||
; Generate custom formats for formats requiring attributes.
|
; Generate custom formats for formats requiring attributes.
|
||||||
; After defining the custom format, the name used in defining
|
; After defining the custom format, the name used in defining
|
||||||
|
|
|
@ -98,6 +98,8 @@ enum ast_option_flags {
|
||||||
AST_OPT_FLAG_LOCK_CONFIG_DIR = (1 << 29),
|
AST_OPT_FLAG_LOCK_CONFIG_DIR = (1 << 29),
|
||||||
/*! Generic PLC */
|
/*! Generic PLC */
|
||||||
AST_OPT_FLAG_GENERIC_PLC = (1 << 30),
|
AST_OPT_FLAG_GENERIC_PLC = (1 << 30),
|
||||||
|
/*! Generic PLC onm equal codecs */
|
||||||
|
AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS = (1 << 31),
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! These are the options that set by default when Asterisk starts */
|
/*! These are the options that set by default when Asterisk starts */
|
||||||
|
@ -134,6 +136,7 @@ enum ast_option_flags {
|
||||||
#define ast_opt_lock_confdir ast_test_flag(&ast_options, AST_OPT_FLAG_LOCK_CONFIG_DIR)
|
#define ast_opt_lock_confdir ast_test_flag(&ast_options, AST_OPT_FLAG_LOCK_CONFIG_DIR)
|
||||||
#define ast_opt_generic_plc ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC)
|
#define ast_opt_generic_plc ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC)
|
||||||
#define ast_opt_ref_debug ast_test_flag(&ast_options, AST_OPT_FLAG_REF_DEBUG)
|
#define ast_opt_ref_debug ast_test_flag(&ast_options, AST_OPT_FLAG_REF_DEBUG)
|
||||||
|
#define ast_opt_generic_plc_on_equal_codecs ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS)
|
||||||
|
|
||||||
/*! Maximum log level defined by PJPROJECT. */
|
/*! Maximum log level defined by PJPROJECT. */
|
||||||
#define MAX_PJ_LOG_MAX_LEVEL 6
|
#define MAX_PJ_LOG_MAX_LEVEL 6
|
||||||
|
|
|
@ -599,6 +599,7 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c
|
||||||
ast_cli(a->fd, " Transcode via SLIN: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSCODE_VIA_SLIN) ? "Enabled" : "Disabled");
|
ast_cli(a->fd, " Transcode via SLIN: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSCODE_VIA_SLIN) ? "Enabled" : "Disabled");
|
||||||
ast_cli(a->fd, " Transmit silence during rec: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSMIT_SILENCE) ? "Enabled" : "Disabled");
|
ast_cli(a->fd, " Transmit silence during rec: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_TRANSMIT_SILENCE) ? "Enabled" : "Disabled");
|
||||||
ast_cli(a->fd, " Generic PLC: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC) ? "Enabled" : "Disabled");
|
ast_cli(a->fd, " Generic PLC: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC) ? "Enabled" : "Disabled");
|
||||||
|
ast_cli(a->fd, " Generic PLC on equal codecs: %s\n", ast_test_flag(&ast_options, AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS) ? "Enabled" : "Disabled");
|
||||||
ast_cli(a->fd, " Min DTMF duration:: %u\n", option_dtmfminduration);
|
ast_cli(a->fd, " Min DTMF duration:: %u\n", option_dtmfminduration);
|
||||||
#if !defined(LOW_MEMORY)
|
#if !defined(LOW_MEMORY)
|
||||||
ast_cli(a->fd, " Cache media frames: %s\n", ast_opt_cache_media_frames ? "Enabled" : "Disabled");
|
ast_cli(a->fd, " Cache media frames: %s\n", ast_opt_cache_media_frames ? "Enabled" : "Disabled");
|
||||||
|
|
|
@ -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
|
* to use SLINEAR between channels, but only if there is
|
||||||
* no direct conversion available. If generic PLC is
|
* no direct conversion available. If generic PLC is
|
||||||
* desired, then transcoding via SLINEAR is a requirement
|
* 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
|
if (ast_opt_generic_plc_on_equal_codecs
|
||||||
&& (ast_opt_generic_plc || ast_opt_transcode_via_slin)) {
|
|| (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)
|
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) {
|
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)) ?
|
int best_sample_rate = (ast_format_get_sample_rate(best_src_fmt) > ast_format_get_sample_rate(best_dst_fmt)) ?
|
||||||
|
|
|
@ -262,10 +262,19 @@ static int reload_module(void)
|
||||||
for (var = ast_variable_browse(cfg, "plc"); var; var = var->next) {
|
for (var = ast_variable_browse(cfg, "plc"); var; var = var->next) {
|
||||||
if (!strcasecmp(var->name, "genericplc")) {
|
if (!strcasecmp(var->name, "genericplc")) {
|
||||||
ast_set2_flag(&ast_options, ast_true(var->value), AST_OPT_FLAG_GENERIC_PLC);
|
ast_set2_flag(&ast_options, ast_true(var->value), AST_OPT_FLAG_GENERIC_PLC);
|
||||||
|
} else if (!strcasecmp(var->name, "genericplc_on_equal_codecs")) {
|
||||||
|
ast_set2_flag(&ast_options, ast_true(var->value), AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ast_config_destroy(cfg);
|
ast_config_destroy(cfg);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Force on_equal_codecs to false if generic_plc is false.
|
||||||
|
*/
|
||||||
|
if (!ast_opt_generic_plc) {
|
||||||
|
ast_set2_flag(&ast_options, 0, AST_OPT_FLAG_GENERIC_PLC_ON_EQUAL_CODECS);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue