summaryrefslogtreecommitdiff
path: root/main/bridge.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2015-04-08 18:20:26 +0000
committerRichard Mudgett <rmudgett@digium.com>2015-04-08 18:20:26 +0000
commit09df34d880728db61dba26fd33980a1d3169cbae (patch)
treec99bacc8464ca8d5fcf0d010b6f0cd88b1709ce5 /main/bridge.c
parent8ec9a82b9a96846244b94faafa0f8d5768032eb2 (diff)
Bridging: Eliminate the unnecessary make channel compatible with bridge operation.
When a channel enters the bridging system it is first made compatible with the bridge and then the bridge technology makes the channel compatible with the technology. For all but the DAHDI native and softmix bridge technologies the make channel compatible with the bridge step is an effective noop because the other technologies allow all audio formats. For the DAHDI native bridge technology it doesn't matter because it is not an initial bridge technology and chan_dahdi allows only one native format per channel. For the softmix bridge technology, it is a noop at best and harmful at worst because the wrong translation path could be setup if the channel's native formats allow more than one audio format. This is an intermediate patch for a series of patches aimed at improving translation path choices. * Removed code dealing with the unnecessary step of making the channel compatible with the bridge. ASTERISK-24841 Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/4600/ ........ Merged revisions 434424 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434430 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/bridge.c')
-rw-r--r--main/bridge.c72
1 files changed, 0 insertions, 72 deletions
diff --git a/main/bridge.c b/main/bridge.c
index 55fc7fdf2..7b69b6fb3 100644
--- a/main/bridge.c
+++ b/main/bridge.c
@@ -129,7 +129,6 @@ static unsigned int optimization_id;
#define ATTENDEDTRANSFER "ATTENDEDTRANSFER"
static void cleanup_video_mode(struct ast_bridge *bridge);
-static int bridge_make_compatible(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel);
/*! Default DTMF keys for built in features */
static char builtin_features_dtmf[AST_BRIDGE_BUILTIN_END][MAXIMUM_DTMF_FEATURE_STRING];
@@ -415,9 +414,6 @@ static void bridge_reconfigured_connected_line_update(struct ast_bridge *bridge)
*/
static void bridge_channel_complete_join(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel)
{
- /* Make the channel compatible with the bridge */
- bridge_make_compatible(bridge, bridge_channel);
-
/* Tell the bridge technology we are joining so they set us up */
ast_debug(1, "Bridge %s: %p(%s) is joining %s technology\n",
bridge->uniqueid, bridge_channel, ast_channel_name(bridge_channel->chan),
@@ -955,74 +951,6 @@ int ast_bridge_destroy(struct ast_bridge *bridge, int cause)
return 0;
}
-static int bridge_make_compatible(struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel)
-{
- struct ast_str *codec_buf = ast_str_alloca(64);
- struct ast_format *best_format;
- RAII_VAR(struct ast_format *, read_format, NULL, ao2_cleanup);
- RAII_VAR(struct ast_format *, write_format, NULL, ao2_cleanup);
-
- ast_channel_lock(bridge_channel->chan);
- read_format = ao2_bump(ast_channel_readformat(bridge_channel->chan));
- write_format = ao2_bump(ast_channel_writeformat(bridge_channel->chan));
- ast_channel_unlock(bridge_channel->chan);
-
- /* Are the formats currently in use something this bridge can handle? */
- if (ast_format_cap_iscompatible_format(bridge->technology->format_capabilities, read_format) == AST_FORMAT_CMP_NOT_EQUAL) {
- best_format = ast_format_cap_get_format(bridge->technology->format_capabilities, 0);
-
- /* Read format is a no go... */
- ast_debug(1, "Bridge technology %s wants to read any of formats %s but channel has %s\n",
- bridge->technology->name,
- ast_format_cap_get_names(bridge->technology->format_capabilities, &codec_buf),
- ast_format_get_name(read_format));
-
- /* Switch read format to the best one chosen */
- if (ast_set_read_format(bridge_channel->chan, best_format)) {
- ast_log(LOG_WARNING, "Failed to set channel %s to read format %s\n",
- ast_channel_name(bridge_channel->chan), ast_format_get_name(best_format));
- ao2_cleanup(best_format);
- return -1;
- }
- ast_debug(1, "Bridge %s put channel %s into read format %s\n",
- bridge->uniqueid, ast_channel_name(bridge_channel->chan),
- ast_format_get_name(best_format));
- ao2_cleanup(best_format);
- } else {
- ast_debug(1, "Bridge %s is happy that channel %s already has read format %s\n",
- bridge->uniqueid, ast_channel_name(bridge_channel->chan),
- ast_format_get_name(read_format));
- }
-
- if (ast_format_cap_iscompatible_format(bridge->technology->format_capabilities, write_format) == AST_FORMAT_CMP_NOT_EQUAL) {
- best_format = ast_format_cap_get_format(bridge->technology->format_capabilities, 0);
-
- /* Write format is a no go... */
- ast_debug(1, "Bridge technology %s wants to write any of formats %s but channel has %s\n",
- bridge->technology->name,
- ast_format_cap_get_names(bridge->technology->format_capabilities, &codec_buf),
- ast_format_get_name(write_format));
-
- /* Switch write format to the best one chosen */
- if (ast_set_write_format(bridge_channel->chan, best_format)) {
- ast_log(LOG_WARNING, "Failed to set channel %s to write format %s\n",
- ast_channel_name(bridge_channel->chan), ast_format_get_name(best_format));
- ao2_cleanup(best_format);
- return -1;
- }
- ast_debug(1, "Bridge %s put channel %s into write format %s\n",
- bridge->uniqueid, ast_channel_name(bridge_channel->chan),
- ast_format_get_name(best_format));
- ao2_cleanup(best_format);
- } else {
- ast_debug(1, "Bridge %s is happy that channel %s already has write format %s\n",
- bridge->uniqueid, ast_channel_name(bridge_channel->chan),
- ast_format_get_name(write_format));
- }
-
- return 0;
-}
-
/*!
* \internal
* \brief Perform the smart bridge operation.