If you use low-bandwidth codecs you may find this page enlightening (Asterisk Codec Negotiation Patch)

Came across this while looking for something else and thought it was worth sharing with the FreePBX community. Note that I have NOT tested these patches because I don’t know if they would work with the version of Asterisk currently included in most FreePBX-based distributions, and anyway I’m not sure I know how to apply patches properly. If anyone does, let us know how it worked and what you had to do to make them work. Note there are two patches, one for Asterisk and one for Asterisk Addons.

Quoting from the page:

About Asterisk Codec Negotiation Patch

The purpose of this patch is to change the behaviour of the popular open-source PBX and IVR package Asterisk, so that when bridging two channels it tries as hard as possible to avoid doing any audio transcoding. This is necessary to avoid degrading the audio quality, which is unavoidable when converting from low-bitrate codec such as G.729 or GSM into signed linear (which is internal format used by the Asterisk) and then back to the same or different low-bitrate codec. It also allows using Asterisk in the cases when it has no support for decoding particular codec, such as for example G.729 or G.723.

Another important implication of the patch is that it helps to reduce administration efforts for maintaining Asterisk, as the administrator dosn’t have to worry much about codecs anymore. The patch also typically redices the CPU usage and increases scalability, due to the fact that CPU-intensive transcoding is avoided for the most cases of call forwarding.

Link: http://www.b2bua.org/wiki/AsteriskCodecNegotiationPatch