diff options
author | jpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-04-22 19:45:30 +0000 |
---|---|---|
committer | jpeeler <jpeeler@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-04-22 19:45:30 +0000 |
commit | a76a20fa338807d0414c6029ae9c377d8f07f157 (patch) | |
tree | a123f8649564964b81633b18a13b6755b3b345b7 /channels/h323 | |
parent | 78ce4707c9be0138c5a647c4e4977af9e9532f38 (diff) |
Merged revisions 189993 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r189993 | jpeeler | 2009-04-22 14:23:49 -0500 (Wed, 22 Apr 2009) | 18 lines
Make chan_h323 respect packetization settings and fix small reload issue.
Previously, packetization settings were ignored and now they are not. A new
config option 'autoframing' has been added to mirror the way chan_sip handles
it. Turning on the autoframing option (available both as a global option or per
peer) overrides the local settings with the remote packetization settings.
Testing was performed with varying packetization levels with the following
codecs: ulaw, alaw, gsm, and g729.
Also, an unrelated config reload issue has been fixed in the case of the config
file not changing.
(closes issue #12415)
Reported by: pj
Patches:
2009012200_h323packetization.diff.txt uploaded by mvanbaak (license 7),
modified by me
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@189997 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/h323')
-rw-r--r-- | channels/h323/ast_h323.cxx | 29 | ||||
-rw-r--r-- | channels/h323/chan_h323.h | 1 |
2 files changed, 10 insertions, 20 deletions
diff --git a/channels/h323/ast_h323.cxx b/channels/h323/ast_h323.cxx index 9194976fe..4cd5657e9 100644 --- a/channels/h323/ast_h323.cxx +++ b/channels/h323/ast_h323.cxx @@ -1773,8 +1773,6 @@ PBoolean MyH323Connection::OnReceivedCapabilitySet(const H323Capabilities & remo format = ast_codec_pref_getsize(&prefs, ast_codec); if ((ast_codec == AST_FORMAT_ALAW) || (ast_codec == AST_FORMAT_ULAW)) { ms = remoteCapabilities[i].GetTxFramesInPacket(); - if (ms > 60) - ms = format.cur_ms; } else ms = remoteCapabilities[i].GetTxFramesInPacket() * format.inc_ms; ast_codec_pref_setsize(&prefs, ast_codec, ms); @@ -1900,7 +1898,6 @@ void MyH323Connection::SetCapabilities(int caps, int dtmf_mode, void *_prefs, in struct ast_codec_pref *prefs = (struct ast_codec_pref *)_prefs; struct ast_format_list format; int frames_per_packet; - int max_frames_per_packet; H323Capability *cap; localCapabilities.RemoveAll(); @@ -1925,9 +1922,9 @@ void MyH323Connection::SetCapabilities(int caps, int dtmf_mode, void *_prefs, in if (!(caps & codec) || (alreadysent & codec) || !(codec & AST_FORMAT_AUDIO_MASK)) continue; alreadysent |= codec; + /* format.cur_ms will be set to default if packetization is not explicitly set */ format = ast_codec_pref_getsize(prefs, codec); frames_per_packet = (format.inc_ms ? format.cur_ms / format.inc_ms : format.cur_ms); - max_frames_per_packet = (format.inc_ms ? format.max_ms / format.inc_ms : 0); switch(codec) { #if 0 case AST_FORMAT_SPEEX: @@ -1947,43 +1944,35 @@ void MyH323Connection::SetCapabilities(int caps, int dtmf_mode, void *_prefs, in AST_G729Capability *g729Cap; lastcap = localCapabilities.SetCapability(0, 0, g729aCap = new AST_G729ACapability(frames_per_packet)); lastcap = localCapabilities.SetCapability(0, 0, g729Cap = new AST_G729Capability(frames_per_packet)); - if (max_frames_per_packet) { - g729aCap->SetTxFramesInPacket(max_frames_per_packet); - g729Cap->SetTxFramesInPacket(max_frames_per_packet); - } + g729aCap->SetTxFramesInPacket(format.cur_ms); + g729Cap->SetTxFramesInPacket(format.cur_ms); break; case AST_FORMAT_G723_1: AST_G7231Capability *g7231Cap; lastcap = localCapabilities.SetCapability(0, 0, g7231Cap = new AST_G7231Capability(frames_per_packet, TRUE)); - if (max_frames_per_packet) - g7231Cap->SetTxFramesInPacket(max_frames_per_packet); + g7231Cap->SetTxFramesInPacket(format.cur_ms); lastcap = localCapabilities.SetCapability(0, 0, g7231Cap = new AST_G7231Capability(frames_per_packet, FALSE)); - if (max_frames_per_packet) - g7231Cap->SetTxFramesInPacket(max_frames_per_packet); + g7231Cap->SetTxFramesInPacket(format.cur_ms); break; case AST_FORMAT_GSM: AST_GSM0610Capability *gsmCap; lastcap = localCapabilities.SetCapability(0, 0, gsmCap = new AST_GSM0610Capability(frames_per_packet)); - if (max_frames_per_packet) - gsmCap->SetTxFramesInPacket(max_frames_per_packet); + gsmCap->SetTxFramesInPacket(format.cur_ms); break; case AST_FORMAT_ULAW: AST_G711Capability *g711uCap; lastcap = localCapabilities.SetCapability(0, 0, g711uCap = new AST_G711Capability(format.cur_ms, H323_G711Capability::muLaw)); - if (format.max_ms) - g711uCap->SetTxFramesInPacket(format.max_ms); + g711uCap->SetTxFramesInPacket(format.cur_ms); break; case AST_FORMAT_ALAW: AST_G711Capability *g711aCap; lastcap = localCapabilities.SetCapability(0, 0, g711aCap = new AST_G711Capability(format.cur_ms, H323_G711Capability::ALaw)); - if (format.max_ms) - g711aCap->SetTxFramesInPacket(format.max_ms); + g711aCap->SetTxFramesInPacket(format.cur_ms); break; case AST_FORMAT_G726_AAL2: AST_CiscoG726Capability *g726Cap; lastcap = localCapabilities.SetCapability(0, 0, g726Cap = new AST_CiscoG726Capability(frames_per_packet)); - if (max_frames_per_packet) - g726Cap->SetTxFramesInPacket(max_frames_per_packet); + g726Cap->SetTxFramesInPacket(format.cur_ms); break; default: alreadysent &= ~codec; diff --git a/channels/h323/chan_h323.h b/channels/h323/chan_h323.h index e121f02fb..b17fe5bed 100644 --- a/channels/h323/chan_h323.h +++ b/channels/h323/chan_h323.h @@ -69,6 +69,7 @@ typedef struct call_options { int nat; int tunnelOptions; int holdHandling; + int autoframing; /*!< turn on to override local settings with remote framing length */ struct ast_codec_pref prefs; } call_options_t; |