yes you must return a frame marked SFF_CNG rather than a NULL frame.<br><br>The TFLAG flags are all arbitrary, you can get rid of all of them if you wish they are just an example of how those modules communicate internally.   Sometimes they were used for the host technology to have a way to mark the channel so the call should die but you may get the same effect by just hanging up the channel since the core now does a lot of this and may never let your read func even be called.<br>
<br><br><div class="gmail_quote">On Mon, Nov 9, 2009 at 3:54 AM, Alex To <span dir="ltr">&lt;<a href="mailto:tonhudung@gmail.com">tonhudung@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">









<div link="blue" vlink="purple" style="word-wrap: break-word;" lang="EN-US">

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">Thank you very much Mathieu</span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);"> </span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">So if TFLAG_IO is not set, read_frame will return immediately
and *frame is NULL ? Is it a normal behavior if the call is terminated when a
NULL frame is returned ? </span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);"> </span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">Coz when I return a NULL frame, the call is terminated. So now
my understanding is that if my endpoint buffer is empty, I need to return a
silence frame to the other end, right?</span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);"> </span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">Thank again Mathieu for your quick reply, that helps a lot </span><span style="font-size: 11pt; font-family: Wingdings; color: rgb(31, 73, 125);">J</span><span style="font-size: 11pt; color: rgb(31, 73, 125);">.</span></p>


<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);"> </span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">Regards</span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);"> </span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);">Alex To</span></p>

<p class="MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125);"> </span></p>

<div>

<div style="border-style: solid none none; border-color: rgb(181, 196, 223) -moz-use-text-color -moz-use-text-color; border-width: 1pt medium medium; padding: 3pt 0in 0in;">

<p class="MsoNormal"><b><span style="font-size: 10pt;">From:</span></b><span style="font-size: 10pt;">
<a href="mailto:freeswitch-dev-bounces@lists.freeswitch.org" target="_blank">freeswitch-dev-bounces@lists.freeswitch.org</a>
[mailto:<a href="mailto:freeswitch-dev-bounces@lists.freeswitch.org" target="_blank">freeswitch-dev-bounces@lists.freeswitch.org</a>] <b>On Behalf Of </b>Mathieu
Rene<br>
<b>Sent:</b> Monday, November 09, 2009 2:54 AM<br>
<b>To:</b> <a href="mailto:freeswitch-dev@lists.freeswitch.org" target="_blank">freeswitch-dev@lists.freeswitch.org</a><br>
<b>Subject:</b> Re: [Freeswitch-dev] Questions about read_frame and write_frame
events</span></p>

</div>

</div><div><div></div><div class="h5">

<p class="MsoNormal"> </p>

<p class="MsoNormal">Hi,</p>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal">See answers inline.</p>

</div>

<div>

<p class="MsoNormal"> </p>

<div>

<div>

<div>

<div>

<p class="MsoNormal"><span style="font-size: 9pt; color: black;">Mathieu Rene</span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 9pt; color: black;">Avant-Garde Solutions Inc</span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 9pt; color: black;">Office: + 1 (514) 664-1044 x100</span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 9pt; color: black;">Cell: +1 (514) 664-1044 x200</span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 9pt; color: black;"><a href="mailto:mrene@avgs.ca" target="_blank">mrene@avgs.ca</a></span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 9pt; color: black;"> </span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 9pt; color: black;"> </span></p>

</div>

</div>

</div>

<p class="MsoNormal"> </p>

</div>

<p class="MsoNormal"> </p>

<div>

<div>

<p class="MsoNormal">On 8-Nov-09, at 4:21 AM, Alex To wrote:</p>

</div>

<p class="MsoNormal"><br>
<br>
</p>

<div>

<div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">Hi,</span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;"> </span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">I am getting stuck on read_frame and write_frame in my custom
endpoint. Would someone shed some lights on how it works?</span></p>

</div>

</div>

</div>

<blockquote style="margin-top: 5pt; margin-bottom: 5pt;">

<div>

<div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;"> </span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">My questions about read_frame, write_frame after reading mod_iax,
mod_portaudio and mod_skyiax are:</span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;"> </span></p>

</div>

<div style="margin-left: 0.5in;">

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">1.</span><span style="font-size: 7pt; color: black;">      <span> </span></span><span style="font-size: 11pt; color: black;">Is it correct that I need to
check a flag (for e.g TFLAG_HUP)  of the private object at the beginning
of the event to determine whether I should continue reading audio or just
return. The flag TFLAG_HUP is set when a hangup or kill channel event is
detected.</span></p>

</div>

</div>

</div>

</blockquote>

<p class="MsoNormal">Thats what TFLAG_IO is for, clear the flag the read_frame
functions should return immediately.</p>

</div>

<div>

<p class="MsoNormal">If you catch TFLAG_BREAK, on the other side, you should
clear it and return a comfort noise frame ( cng )<br>
<br>
</p>

<div>

<div>

<div style="margin-left: 0.5in;">

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">2.</span><span style="font-size: 7pt; color: black;">      <span> </span></span><span style="font-size: 11pt; color: black;">Read_frame is called on an
interval (how frequently is the interval ? how do I determine that?) to read
audio from my endpoint.</span></p>

</div>

</div>

</div>

<p class="MsoNormal">It depends on the codec you are using, if you are using 20
packetization time, it&#39;ll be called every 20ms.<br>
<br>
</p>

<div>

<div>

<div style="margin-left: 0.5in;">

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">3.</span><span style="font-size: 7pt; color: black;">      <span> </span></span><span style="font-size: 11pt; color: black;">What is TFLAG_IO normally used
for ?</span></p>

</div>

</div>

</div>

<p class="MsoNormal">See point 1<br>
<br>
</p>

<div>

<div>

<div style="margin-left: 0.5in;">

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">4.</span><span style="font-size: 7pt; color: black;">      <span> </span></span><span><span style="font-size: 11.5pt; color: black;">What is
the label “cng” is all about ? May I know what “cng”
stands for and how it is used?</span></span><span style="font-size: 11pt; color: black;"></span></p>

</div>

</div>

</div>

<p class="MsoNormal">CNG stands for Comfort Noise Generation, whenever read_frame
jumps there, it returns a frame of silence. It it first initialized on
private_t since its pointless to re-allocate empty frames.<br>
<br>
</p>

<div>

<div>

<div style="margin-left: 0.5in;">

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">5.</span><span style="font-size: 7pt; color: black;">      <span> </span></span><span style="font-size: 11pt; color: black;">What if read_frame is called
while my end point is not ready to send any audio yet?</span></p>

</div>

</div>

</div>

<p class="MsoNormal">That&#39;s why you set TFLAG_IO whenever you are ready. Also
note that it wont be called until you either pre_answer (go in early media) or
answer the channel.</p>

</div>

<div>

<p class="MsoNormal">When a call is made, switch_ivr_originate() doesn&#39;t return
until your endpoint is ready to exchange audio.</p>

</div>

<div>

<blockquote style="margin-top: 5pt; margin-bottom: 5pt;">

<div>

<div>

<div style="margin-left: 0.5in;">

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">6.</span><span style="font-size: 7pt; color: black;">      <span> </span></span><span style="font-size: 11pt; color: black;">What is the
tech_pvt-&gt;cng_frame is used for? I notice that the *frame is set to
tech_pvt-&gt;cng_frame if the label “cng” is reached.</span></p>

</div>

</div>

</div>

</blockquote>

<p class="MsoNormal">See point 4.<br>
<br>
</p>

<div>

<div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;"> </span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">Thank you very much for even reading my questions. I tried to look
for documents that explains clearly the above questions but so far no luck.
Until now I still don’t have a clear understanding about these 2 events
yet.</span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;"> </span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">Best Regards</span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;"> </span></p>

</div>

<div>

<p class="MsoNormal"><span style="font-size: 11pt; color: black;">Alex To</span></p>

</div>

</div>

<p class="MsoNormal"><span style="font-size: 13.5pt; color: black;">_______________________________________________<br>
FreeSWITCH-dev mailing list<br>
<a href="mailto:FreeSWITCH-dev@lists.freeswitch.org" target="_blank">FreeSWITCH-dev@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-dev</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a></span></p>

</div>

</div>

<p class="MsoNormal"> </p>

</div>

</div></div></div>

</div>


<br>_______________________________________________<br>
FreeSWITCH-dev mailing list<br>
<a href="mailto:FreeSWITCH-dev@lists.freeswitch.org">FreeSWITCH-dev@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-dev" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-dev</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Anthony Minessale II<br><br>FreeSWITCH <a href="http://www.freeswitch.org/">http://www.freeswitch.org/</a><br>ClueCon <a href="http://www.cluecon.com/">http://www.cluecon.com/</a><br>
Twitter: <a href="http://twitter.com/FreeSWITCH_wire">http://twitter.com/FreeSWITCH_wire</a><br><br>AIM: anthm<br><a href="mailto:MSN%3Aanthony_minessale@hotmail.com">MSN:anthony_minessale@hotmail.com</a><br>GTALK/JABBER/<a href="mailto:PAYPAL%3Aanthony.minessale@gmail.com">PAYPAL:anthony.minessale@gmail.com</a><br>
IRC: <a href="http://irc.freenode.net">irc.freenode.net</a> #freeswitch<br><br>FreeSWITCH Developer Conference<br><a href="mailto:sip%3A888@conference.freeswitch.org">sip:888@conference.freeswitch.org</a><br><a href="http://iax:guest@conference.freeswitch.org/888">iax:guest@conference.freeswitch.org/888</a><br>
<a href="mailto:googletalk%3Aconf%2B888@conference.freeswitch.org">googletalk:conf+888@conference.freeswitch.org</a><br>pstn:213-799-1400<br>