[Asterisk-Dev] Bugfix for CVS-HEAD-06/26/04-21:56:45
programmer_ted
ted at fusionapple.com
Wed Jun 30 10:35:52 MST 2004
>>
>>>Hi,
>>>
>>>My friend and I were getting a warning when calling his Sipura from a
>>>PSTN line (connecting to Asterisk through BroadVoice), that said:
>>>
>>>Asked to transmit frame type 64, while native formats is 4 (read/write =
>>>4/4)
>>>
>>>and was followed by a hangup (type 64 is 16-bit Signed Linear PCM, type
>>>4 is G711u). I found that many people have had similar issues, but
>>>these were never resolved. So, I figured that because Asterisk is
>>>open-source, I'd dive into the code and try to fix the bug.
>>>
>>>After a couple of hours of familiarizing myself with the Asterisk code
>>>and tracing the problem, I found that for some reason the tone
>>>generator, which uses 16-bit Signed Linear PCM, was still being
>>>allocated and playtones_generator (indications.c) was still getting
>>>called, regardless that the Sipura doesn't take SLINEAR data (in my
>>>case, it accepts G711u). So, I ended up adding an if conditional to the
>>>beginning of the playtones_alloc function (indications.c) to check if
>>>SLINEAR was supported by the channel, and if not, return 0 (which, when
>>>received by the ast_activate_generator function (channel.c), causes the
>>>channel generatordata to remain empty, effectively stopping the SLINEAR
>>>data from being sent in the most nonintrusive way possible).
>>>
>>>NOTICE: this bugfix will work for similar issues involving format 64
>>>(16-bit Signed Linear PCM) being sent even if channel capabilities don't
>>>allow it, if the generator is involved - it's not limited to my
>>>situation (dialing the Sipura from Asterisk).
>>>
>>>This patch should be applied to indications.c under the main asterisk
>>>source directory (usually /usr/src/asterisk):
>>>
>>>68a69
>>> > if (!(chan->nativeformats & AST_FORMAT_SLINEAR)) return 0;
>>>
>>>Oh, and finally, here's a shameless plug to a good friend's website
>>>(which includes a VOIP forum!): http://outcast.ws
>>>
>>>Comments? Questions? :)
>>
>>Just a quick update. I was looking things over again and it appears this
>>fix also disables the generator when I'm calling in on PSTN over
>>BroadVoice (when dialing the Sipura), not just disabling it for the
>>Sipura. This basically disables the dialing sound while waiting for the
>>Sipura to pick up. I have an idea that I should have used
>>chan->capabilities rather than chan->nativeformats, but it's too late to
>>check at the moment. I'll try it out first thing tomorrow and update you
>>guys, but for now, that's one drawback of using this fix.
>
>I thought it over a little bit more and the optimum solution would be to
>just translate the SLINEAR data to a format that is recognized by whoever
>is receiving the data, thus eliminating all drawbacks. I'm going to try
>using capabilities rather than nativeformats as a quick workaround (after
>debugging to see if it'll work), and then work on adding the translating
>code to sip_write. Actually, thinking about it again, it'd probably be
>best to just translate at the playtones_generator function. I'll keep you
>guys updated.
>
>...snipped non-relevant signature info etc...
Learning as I go. It appears I don't have access to the capabilities value
from the ast_channel structure. I'm just gonna go ahead and have the
SLINEAR data translate to the channel's writeformat.
More information about the asterisk-dev
mailing list