<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[Freeswitch-trunk][14316] </title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<div id="header">FreeSWITCH Subversion</div>
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://fisheye.freeswitch.org/changelog/FreeSWITCH?cs=14316">14316</a></dd>
<dt>Author</dt> <dd>mikej</dd>
<dt>Date</dt> <dd>2009-07-22 10:18:32 -0500 (Wed, 22 Jul 2009)</dd>
</dl>

<h3>Log Message</h3>
<pre>update to spandsp snapshot 20090714</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#freeswitchtrunklibsspandspconfigureac">freeswitch/trunk/libs/spandsp/configure.ac</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcMakefileam">freeswitch/trunk/libs/spandsp/src/Makefile.am</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcat_interpreterc">freeswitch/trunk/libs/spandsp/src/at_interpreter.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrccomplex_vector_floatc">freeswitch/trunk/libs/spandsp/src/complex_vector_float.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrccomplex_vector_intc">freeswitch/trunk/libs/spandsp/src/complex_vector_int.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcmake_modem_filterc">freeswitch/trunk/libs/spandsp/src/make_modem_filter.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspbit_operationsh">freeswitch/trunk/libs/spandsp/src/spandsp/bit_operations.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspfast_converth">freeswitch/trunk/libs/spandsp/src/spandsp/fast_convert.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspprivatet38_coreh">freeswitch/trunk/libs/spandsp/src/spandsp/private/t38_core.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspprivatev17rxh">freeswitch/trunk/libs/spandsp/src/spandsp/private/v17rx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspprivatev17txh">freeswitch/trunk/libs/spandsp/src/spandsp/private/v17tx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspprivatev22bish">freeswitch/trunk/libs/spandsp/src/spandsp/private/v22bis.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspprivatev27ter_rxh">freeswitch/trunk/libs/spandsp/src/spandsp/private/v27ter_rx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspprivatev27ter_txh">freeswitch/trunk/libs/spandsp/src/spandsp/private/v27ter_tx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspprivatev29rxh">freeswitch/trunk/libs/spandsp/src/spandsp/private/v29rx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspprivatev29txh">freeswitch/trunk/libs/spandsp/src/spandsp/private/v29tx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspt38_coreh">freeswitch/trunk/libs/spandsp/src/spandsp/t38_core.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspv17rxh">freeswitch/trunk/libs/spandsp/src/spandsp/v17rx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspv17txh">freeswitch/trunk/libs/spandsp/src/spandsp/v17tx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspv22bish">freeswitch/trunk/libs/spandsp/src/spandsp/v22bis.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspv27ter_rxh">freeswitch/trunk/libs/spandsp/src/spandsp/v27ter_rx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspv27ter_txh">freeswitch/trunk/libs/spandsp/src/spandsp/v27ter_tx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspv29rxh">freeswitch/trunk/libs/spandsp/src/spandsp/v29rx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspv29txh">freeswitch/trunk/libs/spandsp/src/spandsp/v29tx.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcspandspversionh">freeswitch/trunk/libs/spandsp/src/spandsp/version.h</a></li>
<li><a href="#freeswitchtrunklibsspandspsrct31c">freeswitch/trunk/libs/spandsp/src/t31.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrct38_corec">freeswitch/trunk/libs/spandsp/src/t38_core.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrct38_gatewayc">freeswitch/trunk/libs/spandsp/src/t38_gateway.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrct38_terminalc">freeswitch/trunk/libs/spandsp/src/t38_terminal.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcv17rxc">freeswitch/trunk/libs/spandsp/src/v17rx.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcv27ter_rxc">freeswitch/trunk/libs/spandsp/src/v27ter_rx.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcv29rxc">freeswitch/trunk/libs/spandsp/src/v29rx.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcv8c">freeswitch/trunk/libs/spandsp/src/v8.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcvector_floatc">freeswitch/trunk/libs/spandsp/src/vector_float.c</a></li>
<li><a href="#freeswitchtrunklibsspandspsrcvector_intc">freeswitch/trunk/libs/spandsp/src/vector_int.c</a></li>
<li><a href="#freeswitchtrunklibsspandsptestsfsk_testsc">freeswitch/trunk/libs/spandsp/tests/fsk_tests.c</a></li>
<li><a href="#freeswitchtrunklibsspandsptestst38_core_testsc">freeswitch/trunk/libs/spandsp/tests/t38_core_tests.c</a></li>
<li><a href="#freeswitchtrunklibsspandsptestsv17_testsc">freeswitch/trunk/libs/spandsp/tests/v17_tests.c</a></li>
<li><a href="#freeswitchtrunklibsspandsptestsv22bis_testsc">freeswitch/trunk/libs/spandsp/tests/v22bis_tests.c</a></li>
<li><a href="#freeswitchtrunklibsspandsptestsv27ter_testsc">freeswitch/trunk/libs/spandsp/tests/v27ter_tests.c</a></li>
<li><a href="#freeswitchtrunklibsspandsptestsv29_testsc">freeswitch/trunk/libs/spandsp/tests/v29_tests.c</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#freeswitchtrunklibsspandspsrcmmx_sse_decsh">freeswitch/trunk/libs/spandsp/src/mmx_sse_decs.h</a></li>
</ul>

<h3>Property Changed</h3>
<ul>
<li><a href="#freeswitchtrunklibsspandspsrc">freeswitch/trunk/libs/spandsp/src/</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="freeswitchtrunklibsspandspconfigureac"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/configure.ac (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/configure.ac        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/configure.ac        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -16,7 +16,7 @@
</span><span class="cx"> # License along with this program; if not, write to the Free Software
</span><span class="cx"> # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx"> #
</span><del>-# $Id: configure.ac,v 1.70 2009/06/02 11:51:57 steveu Exp $
</del><ins>+# $Id: configure.ac,v 1.71 2009/07/12 09:29:18 steveu Exp $
</ins><span class="cx"> 
</span><span class="cx"> # @start 1
</span><span class="cx"> 
</span><span class="lines">@@ -124,7 +124,7 @@
</span><span class="cx"> AC_ARG_ENABLE(sse,          [  --enable-sse         Enable SSE support])
</span><span class="cx"> AC_ARG_ENABLE(sse2,         [  --enable-sse2        Enable SSE2 support])
</span><span class="cx"> AC_ARG_ENABLE(sse3,         [  --enable-sse3        Enable SSE3 support])
</span><del>-AC_ARG_ENABLE(sse3,         [  --enable-sse3        Enable SSE3 support])
</del><ins>+AC_ARG_ENABLE(ssse3,        [  --enable-ssse3       Enable SSSE3 support])
</ins><span class="cx"> AC_ARG_ENABLE(sse4_1,       [  --enable-sse4-1      Enable SSE4.1 support])
</span><span class="cx"> AC_ARG_ENABLE(sse4_2,       [  --enable-sse4-2      Enable SSE4.2 support])
</span><span class="cx"> AC_ARG_ENABLE(sse4a,        [  --enable-sse4a       Enable SSE4A support])
</span><span class="lines">@@ -305,6 +305,9 @@
</span><span class="cx">     if test &quot;$enable_sse4_1&quot; = &quot;yes&quot; ; then
</span><span class="cx">         COMP_VENDOR_CFLAGS=&quot;-msse41 $COMP_VENDOR_CFLAGS&quot;
</span><span class="cx">     fi
</span><ins>+    if test &quot;$enable_ssse3&quot; = &quot;yes&quot; ; then
+        COMP_VENDOR_CFLAGS=&quot;-mssse3 $COMP_VENDOR_CFLAGS&quot;
+    fi
</ins><span class="cx">     if test &quot;$enable_sse3&quot; = &quot;yes&quot; ; then
</span><span class="cx">         COMP_VENDOR_CFLAGS=&quot;-msse3 $COMP_VENDOR_CFLAGS&quot;
</span><span class="cx">     fi
</span><span class="lines">@@ -357,6 +360,7 @@
</span><span class="cx"> AM_CONDITIONAL([COND_SSE], [test &quot;$enable_sse&quot; = yes])
</span><span class="cx"> AM_CONDITIONAL([COND_SSE2], [test &quot;$enable_sse2&quot; = yes])
</span><span class="cx"> AM_CONDITIONAL([COND_SSE3], [test &quot;$enable_sse3&quot; = yes])
</span><ins>+AM_CONDITIONAL([COND_SSSE3], [test &quot;$enable_ssse3&quot; = yes])
</ins><span class="cx"> AM_CONDITIONAL([COND_SSE4_1], [test &quot;$enable_sse4_1&quot; = yes])
</span><span class="cx"> AM_CONDITIONAL([COND_SSE4_2], [test &quot;$enable_sse4_2&quot; = yes])
</span><span class="cx"> AM_CONDITIONAL([COND_SSE4A], [test &quot;$enable_sse4a&quot; = yes])
</span><span class="lines">@@ -389,6 +393,10 @@
</span><span class="cx"> fi
</span><span class="cx"> if test &quot;$enable_sse4_1&quot; = &quot;yes&quot; ; then
</span><span class="cx">     AC_DEFINE([SPANDSP_USE_SSE4_1], [1], [Use the SSE4.1 instruction set (i386 and x86_64 only).])
</span><ins>+    enable_ssse3=&quot;yes&quot;
+fi
+if test &quot;$enable_ssse3&quot; = &quot;yes&quot; ; then
+    AC_DEFINE([SPANDSP_USE_SSSE3], [1], [Use the SSSE3 instruction set (i386 and x86_64 only).])
</ins><span class="cx">     enable_sse3=&quot;yes&quot;
</span><span class="cx"> fi
</span><span class="cx"> if test &quot;$enable_sse3&quot; = &quot;yes&quot; ; then
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrc"></a>
<div class="propset"><h4>Property changes: freeswitch/trunk/libs/spandsp/src</h4>
<pre class="diff"><span>
<span class="cx">Name: svn:ignore
</span><span class="cx">   - v22bis_rx_1200_fixed_rrc.h
</span><span class="cx">v22bis_tx_fixed_rrc.h
</span><span class="cx">v27ter_tx_4800_floating_rrc.h
</span><span class="cx">v22bis_rx_2400_floating_rrc.h
</span><span class="cx">v17tx_fixed_rrc.h
</span><span class="cx">v27ter_rx_2400_fixed_rrc.h
</span><span class="cx">v29rx_fixed_rrc.h
</span><span class="cx">make_at_dictionary
</span><span class="cx">v17rx_floating_rrc.h
</span><span class="cx">v17tx_floating_rrc.h
</span><span class="cx">Makefile
</span><span class="cx">v27ter_tx_2400_fixed_rrc.h
</span><span class="cx">v27ter_rx_4800_floating_rrc.h
</span><span class="cx">spandsp.h
</span><span class="cx">v17rx_fixed_rrc.h
</span><span class="cx">v29rx_floating_rrc.h
</span><span class="cx">v29tx_floating_rrc.h
</span><span class="cx">v27ter_rx_4800_fixed_rrc.h
</span><span class="cx">v27ter_tx_2400_floating_rrc.h
</span><span class="cx">v22bis_rx_2400_fixed_rrc.h
</span><span class="cx">at_interpreter_dictionary.h
</span><span class="cx">Makefile.in
</span><span class="cx">config.h
</span><span class="cx">.deps
</span><span class="cx">v27ter_tx_4800_fixed_rrc.h
</span><span class="cx">v22bis_rx_1200_floating_rrc.h
</span><span class="cx">v29tx_fixed_rrc.h
</span><span class="cx">v22bis_tx_floating_rrc.h
</span><span class="cx">make_modem_filter
</span><span class="cx">.libs
</span><span class="cx">v27ter_rx_2400_floating_rrc.h
</span><span class="cx">stamp-h1
</span><span class="cx">Debug
</span><span class="cx">*.ncb
</span><span class="cx">*.suo
</span><span class="cx">*.user
</span><span class="cx">Release
</span><span class="cx">all
</span><span class="cx">x64
</span><span class="cx">All
</span><span class="cx">   + v22bis_rx_1200_fixed_rrc.h
</span><span class="cx">v22bis_tx_fixed_rrc.h
</span><span class="cx">v27ter_tx_4800_floating_rrc.h
</span><span class="cx">v22bis_rx_2400_floating_rrc.h
</span><span class="cx">v17tx_fixed_rrc.h
</span><span class="cx">v27ter_rx_2400_fixed_rrc.h
</span><span class="cx">v29rx_fixed_rrc.h
</span><span class="cx">make_at_dictionary
</span><span class="cx">v17rx_floating_rrc.h
</span><span class="cx">v17tx_floating_rrc.h
</span><span class="cx">Makefile
</span><span class="cx">v27ter_tx_2400_fixed_rrc.h
</span><span class="cx">v27ter_rx_4800_floating_rrc.h
</span><span class="cx">spandsp.h
</span><span class="cx">v17rx_fixed_rrc.h
</span><span class="cx">v29rx_floating_rrc.h
</span><span class="cx">v29tx_floating_rrc.h
</span><span class="cx">v27ter_rx_4800_fixed_rrc.h
</span><span class="cx">v27ter_tx_2400_floating_rrc.h
</span><span class="cx">v22bis_rx_2400_fixed_rrc.h
</span><span class="cx">at_interpreter_dictionary.h
</span><span class="cx">Makefile.in
</span><span class="cx">config.h
</span><span class="cx">.deps
</span><span class="cx">v27ter_tx_4800_fixed_rrc.h
</span><span class="cx">v22bis_rx_1200_floating_rrc.h
</span><span class="cx">v29tx_fixed_rrc.h
</span><span class="cx">v22bis_tx_floating_rrc.h
</span><span class="cx">make_modem_filter
</span><span class="cx">.libs
</span><span class="cx">v27ter_rx_2400_floating_rrc.h
</span><span class="cx">stamp-h1
</span><span class="cx">Debug
</span><span class="cx">*.ncb
</span><span class="cx">*.suo
</span><span class="cx">*.user
</span><span class="cx">Release
</span><span class="cx">all
</span><span class="cx">x64
</span><span class="cx">All
</span><span class="cx">v17_v32bis_rx_fixed_rrc.h
</span><span class="cx">v17_v32bis_rx_floating_rrc.h
</span><span class="cx">v17_v32bis_tx_fixed_rrc.h
</span><span class="cx">v17_v32bis_tx_floating_rrc.h
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcMakefileam"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/Makefile.am (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/Makefile.am        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/Makefile.am        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -16,7 +16,7 @@
</span><span class="cx"> ## License along with this program; if not, write to the Free Software
</span><span class="cx"> ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx"> ##
</span><del>-## $Id: Makefile.am,v 1.134 2009/06/02 11:51:57 steveu Exp $
</del><ins>+## $Id: Makefile.am,v 1.135 2009/07/12 09:23:09 steveu Exp $
</ins><span class="cx"> 
</span><span class="cx"> AM_CFLAGS = $(COMP_VENDOR_CFLAGS)
</span><span class="cx"> AM_LDFLAGS = $(COMP_VENDOR_LDFLAGS)
</span><span class="lines">@@ -275,6 +275,7 @@
</span><span class="cx">                         filter_tools.h \
</span><span class="cx">                         gsm0610_local.h \
</span><span class="cx">                         lpc10_encdecs.h \
</span><ins>+                        mmx_sse_decs.h \
</ins><span class="cx">                         t30_local.h \
</span><span class="cx">                         t4_states.h \
</span><span class="cx">                         v17_v32bis_rx_constellation_maps.h \
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcat_interpreterc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/at_interpreter.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/at_interpreter.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/at_interpreter.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: at_interpreter.c,v 1.39 2009/04/24 22:35:25 steveu Exp $
</del><ins>+ * $Id: at_interpreter.c,v 1.40 2009/07/10 13:15:56 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx"> static at_profile_t profiles[3] =
</span><span class="cx"> {
</span><span class="cx">     {
</span><del>-#if defined(_MSC_VER)
</del><ins>+#if defined(_MSC_VER)  ||  defined(__sunos)  ||  defined(__solaris)
</ins><span class="cx">         /*.echo =*/ TRUE,
</span><span class="cx">         /*.verbose =*/ TRUE,
</span><span class="cx">         /*.result_code_format =*/ ASCII_RESULT_CODES,
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrccomplex_vector_floatc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/complex_vector_float.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/complex_vector_float.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/complex_vector_float.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: complex_vector_float.c,v 1.15 2009/02/03 16:28:39 steveu Exp $
</del><ins>+ * $Id: complex_vector_float.c,v 1.16 2009/07/12 09:23:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -41,33 +41,10 @@
</span><span class="cx"> #if defined(HAVE_MATH_H)
</span><span class="cx"> #include &lt;math.h&gt;
</span><span class="cx"> #endif
</span><del>-#include &quot;floating_fudge.h&quot;
</del><span class="cx"> #include &lt;assert.h&gt;
</span><span class="cx"> 
</span><del>-#if defined(SPANDSP_USE_MMX)
-#include &lt;mmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE)
-#include &lt;xmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE2)
-#include &lt;emmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE3)
-#include &lt;pmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4_1)
-#include &lt;smmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4_2)
-#include &lt;nmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4A)
-#include &lt;ammintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE5)
-#include &lt;bmmintrin.h&gt;
-#endif
</del><ins>+#include &quot;floating_fudge.h&quot;
+#include &quot;mmx_sse_decs.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;spandsp/telephony.h&quot;
</span><span class="cx"> #include &quot;spandsp/logging.h&quot;
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrccomplex_vector_intc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/complex_vector_int.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/complex_vector_int.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/complex_vector_int.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: complex_vector_int.c,v 1.8 2009/02/21 04:27:46 steveu Exp $
</del><ins>+ * $Id: complex_vector_int.c,v 1.9 2009/07/12 09:23:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -41,33 +41,10 @@
</span><span class="cx"> #if defined(HAVE_MATH_H)
</span><span class="cx"> #include &lt;math.h&gt;
</span><span class="cx"> #endif
</span><del>-#include &quot;floating_fudge.h&quot;
</del><span class="cx"> #include &lt;assert.h&gt;
</span><span class="cx"> 
</span><del>-#if defined(SPANDSP_USE_MMX)
-#include &lt;mmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE)
-#include &lt;xmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE2)
-#include &lt;emmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE3)
-#include &lt;pmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4_1)
-#include &lt;smmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4_2)
-#include &lt;nmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4A)
-#include &lt;ammintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE5)
-#include &lt;bmmintrin.h&gt;
-#endif
</del><ins>+#include &quot;floating_fudge.h&quot;
+#include &quot;mmx_sse_decs.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;spandsp/telephony.h&quot;
</span><span class="cx"> #include &quot;spandsp/logging.h&quot;
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcmake_modem_filterc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/make_modem_filter.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/make_modem_filter.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/make_modem_filter.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx">  * along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: make_modem_filter.c,v 1.15 2009/06/02 11:51:57 steveu Exp $
</del><ins>+ * $Id: make_modem_filter.c,v 1.16 2009/07/10 13:15:56 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #if defined(HAVE_CONFIG_H)
</span><span class="lines">@@ -44,6 +44,9 @@
</span><span class="cx"> #include &lt;stdio.h&gt;
</span><span class="cx"> #include &lt;time.h&gt;
</span><span class="cx"> #include &lt;fcntl.h&gt;
</span><ins>+#if defined(__sunos)  ||  defined(__solaris)
+#include &lt;getopt.h&gt;
+#endif
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;spandsp/telephony.h&quot;
</span><span class="cx"> #include &quot;spandsp/complex.h&quot;
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcmmx_sse_decsh"></a>
<div class="addfile"><h4>Added: freeswitch/trunk/libs/spandsp/src/mmx_sse_decs.h (0 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/mmx_sse_decs.h                                (rev 0)
+++ freeswitch/trunk/libs/spandsp/src/mmx_sse_decs.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -0,0 +1,61 @@
</span><ins>+/*
+ * SpanDSP - a series of DSP components for telephony
+ *
+ * mmx_sse_decs.h - Pull in the appropriate systems headers for the MMX/SSE settings.
+ *
+ * Written by Steve Underwood &lt;steveu@coppice.org&gt;
+ *
+ * Copyright (C) 2009 Steve Underwood
+ *
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id: mmx_sse_decs.h,v 1.1 2009/07/12 09:23:09 steveu Exp $
+ */
+
+#if !defined(_MMX_SSE_DECS_H_)
+#define _MMX_SSE_DECS_H_
+
+#if defined(SPANDSP_USE_MMX)
+#include &lt;mmintrin.h&gt;
+#endif
+#if defined(SPANDSP_USE_SSE)
+#include &lt;xmmintrin.h&gt;
+#endif
+#if defined(SPANDSP_USE_SSE2)
+#include &lt;emmintrin.h&gt;
+#endif
+#if defined(SPANDSP_USE_SSE3)
+#include &lt;pmmintrin.h&gt;
+#endif
+#if defined(SPANDSP_USE_SSSE3)
+#include &lt;tmmintrin.h&gt;
+#endif
+#if defined(SPANDSP_USE_SSE4_1)
+#include &lt;smmintrin.h&gt;
+#endif
+#if defined(SPANDSP_USE_SSE4_2)
+#include &lt;nmmintrin.h&gt;
+#endif
+#if defined(SPANDSP_USE_SSE4A)
+#include &lt;ammintrin.h&gt;
+#endif
+#if defined(SPANDSP_USE_SSE5)
+#include &lt;bmmintrin.h&gt;
+#endif
+
+#endif
+
+/*- End of include ---------------------------------------------------------*/
</ins></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspbit_operationsh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/bit_operations.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/bit_operations.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/bit_operations.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: bit_operations.h,v 1.26 2009/02/26 16:08:50 steveu Exp $
</del><ins>+ * $Id: bit_operations.h,v 1.27 2009/07/10 13:15:56 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -30,6 +30,12 @@
</span><span class="cx"> #if !defined(_SPANDSP_BIT_OPERATIONS_H_)
</span><span class="cx"> #define _SPANDSP_BIT_OPERATIONS_H_
</span><span class="cx"> 
</span><ins>+#if defined(__i386__)  ||  defined(__x86_64__)
+#if !defined(__SUNPRO_C)  ||  (__SUNPRO_C &gt;= 0x0590)
+#define SPANDSP_USE_86_ASM
+#endif
+#endif
+
</ins><span class="cx"> #if defined(__cplusplus)
</span><span class="cx"> extern &quot;C&quot;
</span><span class="cx"> {
</span><span class="lines">@@ -40,7 +46,7 @@
</span><span class="cx">     \return The bit number of the highest set bit, or -1 if the word is zero. */
</span><span class="cx"> static __inline__ int top_bit(unsigned int bits)
</span><span class="cx"> {
</span><del>-#if defined(__i386__)  ||  defined(__x86_64__)
</del><ins>+#if defined(SPANDSP_USE_86_ASM)
</ins><span class="cx">     int res;
</span><span class="cx"> 
</span><span class="cx">     __asm__ (&quot; xorl %[res],%[res];\n&quot;
</span><span class="lines">@@ -141,7 +147,7 @@
</span><span class="cx"> {
</span><span class="cx">     int res;
</span><span class="cx">     
</span><del>-#if defined(__i386__)  ||  defined(__x86_64__)
</del><ins>+#if defined(SPANDSP_USE_86_ASM)
</ins><span class="cx">     __asm__ (&quot; xorl %[res],%[res];\n&quot;
</span><span class="cx">              &quot; decl %[res];\n&quot;
</span><span class="cx">              &quot; bsfl %[bits],%[res]\n&quot;
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspfast_converth"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/fast_convert.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/fast_convert.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/fast_convert.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: fast_convert.h,v 1.7 2009/04/18 03:18:41 steveu Exp $
</del><ins>+ * $Id: fast_convert.h,v 1.8 2009/07/10 13:15:56 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #if !defined(_SPANDSP_FAST_CONVERT_H_)
</span><span class="lines">@@ -403,7 +403,7 @@
</span><span class="cx">        the accuracy issues related to changing the rounding scheme are of little concern
</span><span class="cx">        to us. */
</span><span class="cx"> 
</span><del>-    #if !defined(__sgi)
</del><ins>+    #if !defined(__sgi)  &amp;&amp;  !defined(__sunos)  &amp;&amp;  !defined(__solaris)
</ins><span class="cx">         #warning &quot;No usable lrint() and lrintf() functions available.&quot;
</span><span class="cx">         #warning &quot;Replacing these functions with a simple C cast.&quot;
</span><span class="cx">     #endif
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspprivatet38_coreh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/private/t38_core.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/private/t38_core.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/private/t38_core.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: t38_core.h,v 1.3 2009/04/12 14:18:02 steveu Exp $
</del><ins>+ * $Id: t38_core.h,v 1.4 2009/07/14 13:54:22 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #if !defined(_SPANDSP_PRIVATE_T38_CORE_H_)
</span><span class="lines">@@ -97,20 +97,12 @@
</span><span class="cx">     /*! \brief The fastest data rate supported by the T.38 channel. */
</span><span class="cx">     int fastest_image_data_rate;
</span><span class="cx"> 
</span><del>-    /*! \brief The number of times an indicator packet will be sent. Numbers greater than one
-               will increase reliability for UDP transmission. Zero is valid, to suppress all
-               indicator packets for TCP transmission. */
-    int indicator_tx_count;
</del><ins>+    /*! \brief The number of times each packet type will be sent (low byte). The 
+               depth of redundancy (2nd byte). Higher numbers may increase reliability
+               for UDP transmission. Zero is valid for the indicator packet category,
+               to suppress all indicator packets (typicaly for TCP transmission). */
+    int category_control[5];
</ins><span class="cx"> 
</span><del>-    /*! \brief The number of times a data packet which does not end transmission will be sent.
-               Numbers greater than one will increase reliability for UDP transmission. Zero
-               is not valid. */
-    int data_tx_count;
-
-    /*! \brief The number of times a data packet which ends transmission will be sent. Numbers
-               greater than one will increase reliability for UDP transmission. Zero is not valid. */
-    int data_end_tx_count;
-
</del><span class="cx">     /*! \brief TRUE if IFP packet sequence numbers are relevant. For some transports, like TPKT
</span><span class="cx">                over TCP they are not relevent. */
</span><span class="cx">     int check_sequence_numbers;
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspprivatev17rxh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/private/v17rx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/private/v17rx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/private/v17rx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,12 +22,31 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v17rx.h,v 1.1 2008/10/13 13:14:01 steveu Exp $
</del><ins>+ * $Id: v17rx.h,v 1.2 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #if !defined(_SPANDSP_PRIVATE_V17RX_H_)
</span><span class="cx"> #define _SPANDSP_PRIVATE_V17RX_H_
</span><span class="cx"> 
</span><ins>+/* Target length for the equalizer is about 63 taps, to deal with the worst stuff
+   in V.56bis. */
+/*! Samples before the target position in the equalizer buffer */
+#define V17_EQUALIZER_PRE_LEN       8
+/*! Samples after the target position in the equalizer buffer */
+#define V17_EQUALIZER_POST_LEN      8
+
+/*! The number of taps in the pulse shaping/bandpass filter */
+#define V17_RX_FILTER_STEPS         27
+
+/* We can store more trellis depth that we look back over, so that we can push out a group
+   of symbols in one go, giving greater processing efficiency, at the expense of a bit more
+   latency through the modem. */
+/* Right now we don't take advantage of this optimisation. */
+/*! The depth of the trellis buffer */
+#define V17_TRELLIS_STORAGE_DEPTH   16
+/*! How far we look back into history for trellis decisions */
+#define V17_TRELLIS_LOOKBACK_DEPTH  16
+
</ins><span class="cx"> /*!
</span><span class="cx">     V.17 modem receive side descriptor. This defines the working state for a
</span><span class="cx">     single instance of a V.17 modem receiver.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspprivatev17txh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/private/v17tx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/private/v17tx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/private/v17tx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v17tx.h,v 1.1 2008/10/13 13:14:01 steveu Exp $
</del><ins>+ * $Id: v17tx.h,v 1.2 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -30,6 +30,9 @@
</span><span class="cx"> #if !defined(_SPANDSP_PRIVATE_V17TX_H_)
</span><span class="cx"> #define _SPANDSP_PRIVATE_V17TX_H_
</span><span class="cx"> 
</span><ins>+/*! The number of taps in the pulse shaping/bandpass filter */
+#define V17_TX_FILTER_STEPS     9
+
</ins><span class="cx"> /*!
</span><span class="cx">     V.17 modem transmit side descriptor. This defines the working state for a
</span><span class="cx">     single instance of a V.17 modem transmitter.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspprivatev22bish"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/private/v22bis.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/private/v22bis.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/private/v22bis.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,12 +22,23 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v22bis.h,v 1.10 2009/04/29 12:37:45 steveu Exp $
</del><ins>+ * $Id: v22bis.h,v 1.11 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #if !defined(_SPANDSP_PRIVATE_V22BIS_H_)
</span><span class="cx"> #define _SPANDSP_PRIVATE_V22BIS_H_
</span><span class="cx"> 
</span><ins>+/*! The number of steps to the left and to the right of the target position in the equalizer buffer. */
+#define V22BIS_EQUALIZER_LEN    7
+/*! One less than a power of 2 &gt;= (2*V22BIS_EQUALIZER_LEN + 1) */
+#define V22BIS_EQUALIZER_MASK   15
+
+/*! The number of taps in the transmit pulse shaping filter */
+#define V22BIS_TX_FILTER_STEPS  9
+
+/*! The number of taps in the receive pulse shaping/bandpass filter */
+#define V22BIS_RX_FILTER_STEPS  37
+
</ins><span class="cx"> /*! Segments of the training sequence on the receive side */
</span><span class="cx"> enum
</span><span class="cx"> {
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspprivatev27ter_rxh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/private/v27ter_rx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/private/v27ter_rx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/private/v27ter_rx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,12 +22,30 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v27ter_rx.h,v 1.1 2008/10/13 13:14:01 steveu Exp $
</del><ins>+ * $Id: v27ter_rx.h,v 1.2 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #if !defined(_SPANDSP_PRIVATE_V27TER_RX_H_)
</span><span class="cx"> #define _SPANDSP_PRIVATE_V27TER_RX_H_
</span><span class="cx"> 
</span><ins>+/* Target length for the equalizer is about 43 taps for 4800bps and 32 taps for 2400bps
+   to deal with the worst stuff in V.56bis. */
+/*! Samples before the target position in the equalizer buffer */
+#define V27TER_EQUALIZER_PRE_LEN        16  /* This much before the real event */
+/*! Samples after the target position in the equalizer buffer */
+#define V27TER_EQUALIZER_POST_LEN       14  /* This much after the real event (must be even) */
+
+/*! The number of taps in the 4800bps pulse shaping/bandpass filter */
+#define V27TER_RX_4800_FILTER_STEPS     27
+/*! The number of taps in the 2400bps pulse shaping/bandpass filter */
+#define V27TER_RX_2400_FILTER_STEPS     27
+
+#if V27TER_RX_4800_FILTER_STEPS &gt; V27TER_RX_2400_FILTER_STEPS
+#define V27TER_RX_FILTER_STEPS V27TER_RX_4800_FILTER_STEPS
+#else
+#define V27TER_RX_FILTER_STEPS V27TER_RX_2400_FILTER_STEPS
+#endif
+
</ins><span class="cx"> /*!
</span><span class="cx">     V.27ter modem receive side descriptor. This defines the working state for a
</span><span class="cx">     single instance of a V.27ter modem receiver.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspprivatev27ter_txh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/private/v27ter_tx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/private/v27ter_tx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/private/v27ter_tx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,12 +22,15 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v27ter_tx.h,v 1.2 2008/12/06 14:35:04 steveu Exp $
</del><ins>+ * $Id: v27ter_tx.h,v 1.3 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #if !defined(_SPANDSP_PRIVATE_V27TER_TX_H_)
</span><span class="cx"> #define _SPANDSP_PRIVATE_V27TER_TX_H_
</span><span class="cx"> 
</span><ins>+/*! The number of taps in the pulse shaping/bandpass filter */
+#define V27TER_TX_FILTER_STEPS      9
+
</ins><span class="cx"> /*!
</span><span class="cx">     V.27ter modem transmit side descriptor. This defines the working state for a
</span><span class="cx">     single instance of a V.27ter modem transmitter.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspprivatev29rxh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/private/v29rx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/private/v29rx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/private/v29rx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,12 +22,22 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v29rx.h,v 1.1 2008/10/13 13:14:01 steveu Exp $
</del><ins>+ * $Id: v29rx.h,v 1.2 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #if !defined(_SPANDSP_PRIVATE_V29RX_H_)
</span><span class="cx"> #define _SPANDSP_PRIVATE_V29RX_H_
</span><span class="cx"> 
</span><ins>+/* Target length for the equalizer is about 63 taps, to deal with the worst stuff
+   in V.56bis. */
+/*! Samples before the target position in the equalizer buffer */
+#define V29_EQUALIZER_PRE_LEN   16
+/*! Samples after the target position in the equalizer buffer */
+#define V29_EQUALIZER_POST_LEN  14
+
+/*! The number of taps in the pulse shaping/bandpass filter */
+#define V29_RX_FILTER_STEPS     27
+
</ins><span class="cx"> /*!
</span><span class="cx">     V.29 modem receive side descriptor. This defines the working state for a
</span><span class="cx">     single instance of a V.29 modem receiver.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspprivatev29txh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/private/v29tx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/private/v29tx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/private/v29tx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,12 +22,15 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v29tx.h,v 1.1 2008/10/13 13:14:01 steveu Exp $
</del><ins>+ * $Id: v29tx.h,v 1.2 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #if !defined(_SPANDSP_PRIVATE_V29TX_H_)
</span><span class="cx"> #define _SPANDSP_PRIVATE_V29TX_H_
</span><span class="cx"> 
</span><ins>+/*! The number of taps in the pulse shaping/bandpass filter */
+#define V29_TX_FILTER_STEPS     9
+
</ins><span class="cx"> /*!
</span><span class="cx">     V.29 modem transmit side descriptor. This defines the working state for a
</span><span class="cx">     single instance of a V.29 modem transmitter.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspt38_coreh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/t38_core.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/t38_core.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/t38_core.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: t38_core.h,v 1.38 2009/04/12 14:18:02 steveu Exp $
</del><ins>+ * $Id: t38_core.h,v 1.39 2009/07/14 13:54:22 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -167,6 +167,22 @@
</span><span class="cx">     T38_DATA_RATE_MANAGEMENT_TRANSFERRED_TCF = 2
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+/*! T.38 Packet categories used for setting the redundancy level and packet repeat
+    counts on a packet by packet basis. */
+enum t38_packet_categories_e
+{
+    /*! \brief Indicator packet */
+    T38_PACKET_CATEGORY_INDICATOR = 0,
+    /*! \brief Control data packet */
+    T38_PACKET_CATEGORY_CONTROL_DATA = 1,
+    /*! \brief Terminating control data packet */
+    T38_PACKET_CATEGORY_CONTROL_DATA_END = 2,
+    /*! \brief Image data packet */
+    T38_PACKET_CATEGORY_IMAGE_DATA = 3,
+    /*! \brief Terminating image data packet */
+    T38_PACKET_CATEGORY_IMAGE_DATA_END = 4
+};
+
</ins><span class="cx"> #define T38_RX_BUF_LEN  2048
</span><span class="cx"> #define T38_TX_BUF_LEN  16384
</span><span class="cx"> 
</span><span class="lines">@@ -232,9 +248,8 @@
</span><span class="cx"> /*! \brief Send an indicator packet
</span><span class="cx">     \param s The T.38 context.
</span><span class="cx">     \param indicator The indicator to send.
</span><del>-    \param count The number of copies of the packet to send.
</del><span class="cx">     \return The delay to allow after this indicator is sent. */
</span><del>-SPAN_DECLARE(int) t38_core_send_indicator(t38_core_state_t *s, int indicator, int count);
</del><ins>+SPAN_DECLARE(int) t38_core_send_indicator(t38_core_state_t *s, int indicator);
</ins><span class="cx"> 
</span><span class="cx"> /*! \brief Find the delay to allow for HDLC flags after sending an indicator
</span><span class="cx">     \param s The T.38 context.
</span><span class="lines">@@ -248,18 +263,18 @@
</span><span class="cx">     \param field_type The packet's field type.
</span><span class="cx">     \param field The message data content for the packet.
</span><span class="cx">     \param field_len The length of the message data, in bytes.
</span><del>-    \param count The number of copies of the packet to send.
</del><ins>+    \param category The category of the packet being sent. This should be one of the values defined for t38_packet_categories_e.
</ins><span class="cx">     \return ??? */
</span><del>-SPAN_DECLARE(int) t38_core_send_data(t38_core_state_t *s, int data_type, int field_type, const uint8_t field[], int field_len, int count);
</del><ins>+SPAN_DECLARE(int) t38_core_send_data(t38_core_state_t *s, int data_type, int field_type, const uint8_t field[], int field_len, int category);
</ins><span class="cx"> 
</span><span class="cx"> /*! \brief Send a data packet
</span><span class="cx">     \param s The T.38 context.
</span><span class="cx">     \param data_type The packet's data type.
</span><span class="cx">     \param field The list of fields.
</span><span class="cx">     \param fields The number of fields in the list.
</span><del>-    \param count The number of copies of the packet to send.
</del><ins>+    \param category The category of the packet being sent. This should be one of the values defined for t38_packet_categories_e.
</ins><span class="cx">     \return ??? */
</span><del>-SPAN_DECLARE(int) t38_core_send_data_multi_field(t38_core_state_t *s, int data_type, const t38_data_field_t field[], int fields, int count);
</del><ins>+SPAN_DECLARE(int) t38_core_send_data_multi_field(t38_core_state_t *s, int data_type, const t38_data_field_t field[], int fields, int category);
</ins><span class="cx"> 
</span><span class="cx"> /*! \brief Process a received T.38 IFP packet.
</span><span class="cx">     \param s The T.38 context.
</span><span class="lines">@@ -299,10 +314,29 @@
</span><span class="cx"> */
</span><span class="cx"> SPAN_DECLARE(void) t38_set_jbig_transcoding(t38_core_state_t *s, int jbig_transcoding);
</span><span class="cx"> 
</span><ins>+/*! Set the maximum buffer size for received data at the far end.
+    \param s The T.38 context.
+    \param max_buffer_size The maximum buffer size.
+*/
</ins><span class="cx"> SPAN_DECLARE(void) t38_set_max_buffer_size(t38_core_state_t *s, int max_buffer_size);
</span><span class="cx"> 
</span><ins>+/*! Set the maximum size of an IFP packet that is acceptable by the far end.
+    \param s The T.38 context.
+    \param max_datagram_size The maximum IFP packet length, in bytes.
+*/
</ins><span class="cx"> SPAN_DECLARE(void) t38_set_max_datagram_size(t38_core_state_t *s, int max_datagram_size);
</span><span class="cx"> 
</span><ins>+/*! \brief Send a data packet
+    \param s The T.38 context.
+    \param category The category of the packet being sent. This should be one of the values defined for t38_packet_categories_e.
+    \param setting The repeat count for the category. This should be at least one for all categories other an indicator packets.
+                   Zero is valid for indicator packets, as it suppresses the sending of indicator packets, as an application using
+                   TCP for the transport would require. As the setting is passed through to the transmission channel, additional
+                   information may be encoded in it, such as the redundancy depth for the particular packet category. */
+SPAN_DECLARE(void) t38_set_redundancy_control(t38_core_state_t *s, int category, int setting);
+
+SPAN_DECLARE(void) t38_set_fastest_image_data_rate(t38_core_state_t *s, int max_rate);
+
</ins><span class="cx"> SPAN_DECLARE(int) t38_get_fastest_image_data_rate(t38_core_state_t *s);
</span><span class="cx"> 
</span><span class="cx"> /*! Set the T.38 version to be emulated.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspv17rxh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/v17rx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/v17rx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/v17rx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v17rx.h,v 1.64 2009/06/02 16:03:56 steveu Exp $
</del><ins>+ * $Id: v17rx.h,v 1.65 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -211,25 +211,6 @@
</span><span class="cx"> TCM absolutely transformed the phone line modem business.
</span><span class="cx"> */
</span><span class="cx"> 
</span><del>-/* Target length for the equalizer is about 63 taps, to deal with the worst stuff
-   in V.56bis. */
-/*! Samples before the target position in the equalizer buffer */
-#define V17_EQUALIZER_PRE_LEN       8
-/*! Samples after the target position in the equalizer buffer */
-#define V17_EQUALIZER_POST_LEN      8
-
-/*! The number of taps in the pulse shaping/bandpass filter */
-#define V17_RX_FILTER_STEPS         27
-
-/* We can store more trellis depth that we look back over, so that we can push out a group
-   of symbols in one go, giving greater processing efficiency, at the expense of a bit more
-   latency through the modem. */
-/* Right now we don't take advantage of this optimisation. */
-/*! The depth of the trellis buffer */
-#define V17_TRELLIS_STORAGE_DEPTH   16
-/*! How far we look back into history for trellis decisions */
-#define V17_TRELLIS_LOOKBACK_DEPTH  16
-
</del><span class="cx"> /*!
</span><span class="cx">     V.17 modem receive side descriptor. This defines the working state for a
</span><span class="cx">     single instance of a V.17 modem receiver.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspv17txh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/v17tx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/v17tx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/v17tx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v17tx.h,v 1.42 2009/06/02 16:03:56 steveu Exp $
</del><ins>+ * $Id: v17tx.h,v 1.43 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -81,9 +81,6 @@
</span><span class="cx"> transmitter. 
</span><span class="cx"> */
</span><span class="cx"> 
</span><del>-/*! The number of taps in the pulse shaping/bandpass filter */
-#define V17_TX_FILTER_STEPS     9
-
</del><span class="cx"> /*!
</span><span class="cx">     V.17 modem transmit side descriptor. This defines the working state for a
</span><span class="cx">     single instance of a V.17 modem transmitter.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspv22bish"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/v22bis.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/v22bis.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/v22bis.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v22bis.h,v 1.43 2009/06/02 16:03:56 steveu Exp $
</del><ins>+ * $Id: v22bis.h,v 1.45 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -57,17 +57,6 @@
</span><span class="cx">     V22BIS_GUARD_TONE_1800HZ
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-/*! The number of steps to the left and to the right of the target position in the equalizer buffer. */
-#define V22BIS_EQUALIZER_LEN    7
-/*! One less than a power of 2 &gt;= (2*V22BIS_EQUALIZER_LEN + 1) */
-#define V22BIS_EQUALIZER_MASK   15
-
-/*! The number of taps in the transmit pulse shaping filter */
-#define V22BIS_TX_FILTER_STEPS  9
-
-/*! The number of taps in the receive pulse shaping/bandpass filter */
-#define V22BIS_RX_FILTER_STEPS  37
-
</del><span class="cx"> /*!
</span><span class="cx">     V.22bis modem descriptor. This defines the working state for a single instance
</span><span class="cx">     of a V.22bis modem.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspv27ter_rxh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/v27ter_rx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/v27ter_rx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/v27ter_rx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v27ter_rx.h,v 1.60 2009/06/02 16:03:56 steveu Exp $
</del><ins>+ * $Id: v27ter_rx.h,v 1.61 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -46,24 +46,6 @@
</span><span class="cx"> straightforward.
</span><span class="cx"> */
</span><span class="cx"> 
</span><del>-/* Target length for the equalizer is about 43 taps for 4800bps and 32 taps for 2400bps
-   to deal with the worst stuff in V.56bis. */
-/*! Samples before the target position in the equalizer buffer */
-#define V27TER_EQUALIZER_PRE_LEN        16  /* This much before the real event */
-/*! Samples after the target position in the equalizer buffer */
-#define V27TER_EQUALIZER_POST_LEN       14  /* This much after the real event (must be even) */
-
-/*! The number of taps in the 4800bps pulse shaping/bandpass filter */
-#define V27TER_RX_4800_FILTER_STEPS     27
-/*! The number of taps in the 2400bps pulse shaping/bandpass filter */
-#define V27TER_RX_2400_FILTER_STEPS     27
-
-#if V27TER_RX_4800_FILTER_STEPS &gt; V27TER_RX_2400_FILTER_STEPS
-#define V27TER_RX_FILTER_STEPS V27TER_RX_4800_FILTER_STEPS
-#else
-#define V27TER_RX_FILTER_STEPS V27TER_RX_2400_FILTER_STEPS
-#endif
-
</del><span class="cx"> /*!
</span><span class="cx">     V.27ter modem receive side descriptor. This defines the working state for a
</span><span class="cx">     single instance of a V.27ter modem receiver.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspv27ter_txh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/v27ter_tx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/v27ter_tx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/v27ter_tx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v27ter_tx.h,v 1.42 2009/06/02 16:03:56 steveu Exp $
</del><ins>+ * $Id: v27ter_tx.h,v 1.43 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -64,9 +64,6 @@
</span><span class="cx"> transmitter.
</span><span class="cx"> */
</span><span class="cx"> 
</span><del>-/*! The number of taps in the pulse shaping/bandpass filter */
-#define V27TER_TX_FILTER_STEPS      9
-
</del><span class="cx"> /*!
</span><span class="cx">     V.27ter modem transmit side descriptor. This defines the working state for a
</span><span class="cx">     single instance of a V.27ter modem transmitter.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspv29rxh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/v29rx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/v29rx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/v29rx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v29rx.h,v 1.71 2009/06/02 16:03:56 steveu Exp $
</del><ins>+ * $Id: v29rx.h,v 1.72 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -120,16 +120,6 @@
</span><span class="cx"> therefore, only tests that bits starting at bit 24 are really ones. 
</span><span class="cx"> */
</span><span class="cx"> 
</span><del>-/* Target length for the equalizer is about 63 taps, to deal with the worst stuff
-   in V.56bis. */
-/*! Samples before the target position in the equalizer buffer */
-#define V29_EQUALIZER_PRE_LEN   16
-/*! Samples after the target position in the equalizer buffer */
-#define V29_EQUALIZER_POST_LEN  14
-
-/*! The number of taps in the pulse shaping/bandpass filter */
-#define V29_RX_FILTER_STEPS     27
-
</del><span class="cx"> typedef void (*qam_report_handler_t)(void *user_data, const complexf_t *constel, const complexf_t *target, int symbol);
</span><span class="cx"> 
</span><span class="cx"> /*!
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspv29txh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/v29tx.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/v29tx.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/v29tx.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v29tx.h,v 1.40 2009/06/02 16:03:56 steveu Exp $
</del><ins>+ * $Id: v29tx.h,v 1.41 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -94,9 +94,6 @@
</span><span class="cx"> 
</span><span class="cx"> */
</span><span class="cx"> 
</span><del>-/*! The number of taps in the pulse shaping/bandpass filter */
-#define V29_TX_FILTER_STEPS     9
-
</del><span class="cx"> /*!
</span><span class="cx">     V.29 modem transmit side descriptor. This defines the working state for a
</span><span class="cx">     single instance of a V.29 modem transmitter.
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcspandspversionh"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/spandsp/version.h (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/spandsp/version.h        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/spandsp/version.h        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -30,9 +30,9 @@
</span><span class="cx"> 
</span><span class="cx"> /* The date and time of the version are in UTC form. */
</span><span class="cx"> 
</span><del>-#define SPANDSP_RELEASE_DATE            20090602
-#define SPANDSP_RELEASE_TIME            160509
-#define SPANDSP_RELEASE_DATETIME_STRING &quot;20090602 160509&quot;
</del><ins>+#define SPANDSP_RELEASE_DATE            20090714
+#define SPANDSP_RELEASE_TIME            135534
+#define SPANDSP_RELEASE_DATETIME_STRING &quot;20090714 135534&quot;
</ins><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> /*- End of file ------------------------------------------------------------*/
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrct31c"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/t31.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/t31.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/t31.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: t31.c,v 1.150 2009/04/12 09:12:10 steveu Exp $
</del><ins>+ * $Id: t31.c,v 1.151 2009/07/14 13:54:22 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -696,13 +696,13 @@
</span><span class="cx">         case T38_TIMED_STEP_NON_ECM_MODEM:
</span><span class="cx">             /* Create a 75ms silence */
</span><span class="cx">             if (fe-&gt;t38.current_tx_indicator != T38_IND_NO_SIGNAL)
</span><del>-                delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+                delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_NON_ECM_MODEM_2;
</span><span class="cx">             fe-&gt;next_tx_samples = fe-&gt;samples;
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_NON_ECM_MODEM_2:
</span><span class="cx">             /* Switch on a fast modem, and give the training time to complete */
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, fe-&gt;next_tx_indicator, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, fe-&gt;next_tx_indicator);
</ins><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_NON_ECM_MODEM_3;
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_NON_ECM_MODEM_3:
</span><span class="lines">@@ -734,12 +734,12 @@
</span><span class="cx">                 else
</span><span class="cx">                 {
</span><span class="cx">                     /* If we are sending quickly there seems no point in doing any padding */
</span><del>-                    t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_SIG_END, buf, len, fe-&gt;t38.data_end_tx_count);
</del><ins>+                    t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_SIG_END, buf, len, T38_PACKET_CATEGORY_IMAGE_DATA_END);
</ins><span class="cx">                     fe-&gt;timed_step = T38_TIMED_STEP_NON_ECM_MODEM_5;
</span><span class="cx">                     delay = 0;
</span><span class="cx">                 }
</span><span class="cx">             }
</span><del>-            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, buf, len, fe-&gt;t38.data_tx_count);
</del><ins>+            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, buf, len, T38_PACKET_CATEGORY_IMAGE_DATA);
</ins><span class="cx">             delay = bits_to_us(s, 8*len);
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_NON_ECM_MODEM_4:
</span><span class="lines">@@ -750,7 +750,7 @@
</span><span class="cx">             {
</span><span class="cx">                 len += fe-&gt;non_ecm_trailer_bytes;
</span><span class="cx">                 memset(buf, 0, len);
</span><del>-                t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_SIG_END, buf, len, fe-&gt;t38.data_end_tx_count);
</del><ins>+                t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_SIG_END, buf, len, T38_PACKET_CATEGORY_IMAGE_DATA_END);
</ins><span class="cx">                 fe-&gt;timed_step = T38_TIMED_STEP_NON_ECM_MODEM_5;
</span><span class="cx">                 /* Allow a bit more time than the data will take to play out, to ensure the far ATA does not
</span><span class="cx">                    cut things short. */
</span><span class="lines">@@ -761,13 +761,13 @@
</span><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">             memset(buf, 0, len);
</span><del>-            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, buf, len, fe-&gt;t38.data_tx_count);
</del><ins>+            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, buf, len, T38_PACKET_CATEGORY_IMAGE_DATA);
</ins><span class="cx">             delay = bits_to_us(s, 8*len);
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_NON_ECM_MODEM_5:
</span><span class="cx">             /* This should not be needed, since the message above indicates the end of the signal, but it
</span><span class="cx">                seems like it can improve compatibility with quirky implementations. */
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_NONE;
</span><span class="cx">             return delay;
</span><span class="cx">         }
</span><span class="lines">@@ -784,6 +784,7 @@
</span><span class="cx">     int previous;
</span><span class="cx">     int delay;
</span><span class="cx">     int i;
</span><ins>+    int category;
</ins><span class="cx"> 
</span><span class="cx">     fe = &amp;s-&gt;t38_fe;
</span><span class="cx">     for (delay = 0;  delay == 0;  )
</span><span class="lines">@@ -793,13 +794,13 @@
</span><span class="cx">         case T38_TIMED_STEP_HDLC_MODEM:
</span><span class="cx">             /* Create a 75ms silence */
</span><span class="cx">             if (fe-&gt;t38.current_tx_indicator != T38_IND_NO_SIGNAL)
</span><del>-                delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+                delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_2;
</span><span class="cx">             fe-&gt;next_tx_samples = fe-&gt;samples + ms_to_samples(75);
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_HDLC_MODEM_2:
</span><span class="cx">             /* Send HDLC preambling */
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, fe-&gt;next_tx_indicator, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, fe-&gt;next_tx_indicator);
</ins><span class="cx">             delay += t38_core_send_flags_delay(&amp;fe-&gt;t38, fe-&gt;next_tx_indicator);
</span><span class="cx">             at_put_response_code(&amp;s-&gt;at_state, AT_RESPONSE_CODE_CONNECT);
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_3;
</span><span class="lines">@@ -834,7 +835,8 @@
</span><span class="cx">                         data_fields[1].field_type = T38_FIELD_HDLC_FCS_OK_SIG_END;
</span><span class="cx">                         data_fields[1].field = NULL;
</span><span class="cx">                         data_fields[1].field_len = 0;
</span><del>-                        t38_core_send_data_multi_field(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, data_fields, 2, fe-&gt;t38.data_tx_count);
</del><ins>+                        category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA_END  :  T38_PACKET_CATEGORY_IMAGE_DATA_END;
+                        t38_core_send_data_multi_field(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, data_fields, 2, category);
</ins><span class="cx">                         fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_5;
</span><span class="cx">                         /* We add a bit of extra time here, as with some implementations
</span><span class="cx">                            the carrier falling too abruptly causes data loss. */
</span><span class="lines">@@ -849,23 +851,26 @@
</span><span class="cx">                         data_fields[1].field_type = T38_FIELD_HDLC_FCS_OK;
</span><span class="cx">                         data_fields[1].field = NULL;
</span><span class="cx">                         data_fields[1].field_len = 0;
</span><del>-                        t38_core_send_data_multi_field(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, data_fields, 2, fe-&gt;t38.data_tx_count);
</del><ins>+                        category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA  :  T38_PACKET_CATEGORY_IMAGE_DATA;
+                        t38_core_send_data_multi_field(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, data_fields, 2, category);
</ins><span class="cx">                         fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_3;
</span><span class="cx">                         delay = bits_to_us(s, i*8 + fe-&gt;hdlc_tx.extra_bits);
</span><span class="cx">                         at_put_response_code(&amp;s-&gt;at_state, AT_RESPONSE_CODE_CONNECT);
</span><span class="cx">                     }
</span><ins>+                    break;
</ins><span class="cx">                 }
</span><del>-                else
-                {
-                    t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_HDLC_DATA, &amp;s-&gt;hdlc_tx.buf[s-&gt;hdlc_tx.ptr], i, fe-&gt;t38.data_tx_count);
-                    fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_4;
-                    delay = bits_to_us(s, i*8);
-                }
-                break;
</del><ins>+                category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA  :  T38_PACKET_CATEGORY_IMAGE_DATA;
+                t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_HDLC_DATA, &amp;s-&gt;hdlc_tx.buf[s-&gt;hdlc_tx.ptr], i, category);
+                fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_4;
</ins><span class="cx">             }
</span><del>-            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_HDLC_DATA, &amp;s-&gt;hdlc_tx.buf[s-&gt;hdlc_tx.ptr], fe-&gt;octets_per_data_packet, fe-&gt;t38.data_tx_count);
-            s-&gt;hdlc_tx.ptr += fe-&gt;octets_per_data_packet;
-            delay = bits_to_us(s, fe-&gt;octets_per_data_packet*8);
</del><ins>+            else
+            {
+                i = fe-&gt;octets_per_data_packet;
+                category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA  :  T38_PACKET_CATEGORY_IMAGE_DATA;
+                t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_HDLC_DATA, &amp;s-&gt;hdlc_tx.buf[s-&gt;hdlc_tx.ptr], i, category);
+                s-&gt;hdlc_tx.ptr += i;
+            }
+            delay = bits_to_us(s, i*8);
</ins><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_HDLC_MODEM_4:
</span><span class="cx">             /* End of HDLC frame */
</span><span class="lines">@@ -877,7 +882,8 @@
</span><span class="cx">                 /* End of transmission */
</span><span class="cx">                 s-&gt;hdlc_tx.len = 0;
</span><span class="cx">                 s-&gt;hdlc_tx.final = FALSE;
</span><del>-                t38_core_send_data(&amp;fe-&gt;t38, previous, T38_FIELD_HDLC_FCS_OK, NULL, 0, fe-&gt;t38.data_tx_count);
</del><ins>+                category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA  :  T38_PACKET_CATEGORY_IMAGE_DATA;
+                t38_core_send_data(&amp;fe-&gt;t38, previous, T38_FIELD_HDLC_FCS_OK, NULL, 0, category);
</ins><span class="cx">                 fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_5;
</span><span class="cx">                 /* We add a bit of extra time here, as with some implementations
</span><span class="cx">                    the carrier falling too abruptly causes data loss. */
</span><span class="lines">@@ -888,7 +894,8 @@
</span><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">             /* Finish the current frame off, and prepare for the next one. */
</span><del>-            t38_core_send_data(&amp;fe-&gt;t38, previous, T38_FIELD_HDLC_FCS_OK, NULL, 0, fe-&gt;t38.data_tx_count);
</del><ins>+            category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA  :  T38_PACKET_CATEGORY_IMAGE_DATA;
+            t38_core_send_data(&amp;fe-&gt;t38, previous, T38_FIELD_HDLC_FCS_OK, NULL, 0, category);
</ins><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_3;
</span><span class="cx">             at_put_response_code(&amp;s-&gt;at_state, AT_RESPONSE_CODE_CONNECT);
</span><span class="cx">             /* We should now wait enough time for everything to clear through an analogue modem at the far end. */
</span><span class="lines">@@ -899,8 +906,9 @@
</span><span class="cx">         case T38_TIMED_STEP_HDLC_MODEM_5:
</span><span class="cx">             /* Note that some boxes do not like us sending a T38_FIELD_HDLC_SIG_END at this point.
</span><span class="cx">                A T38_IND_NO_SIGNAL should always be OK. */
</span><del>-            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_HDLC_SIG_END, NULL, 0, fe-&gt;t38.data_end_tx_count);
-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+            category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA_END  :  T38_PACKET_CATEGORY_IMAGE_DATA_END;
+            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_HDLC_SIG_END, NULL, 0, category);
+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_NONE;
</span><span class="cx">             at_put_response_code(&amp;s-&gt;at_state, AT_RESPONSE_CODE_OK);
</span><span class="cx">             t31_set_at_rx_mode(s, AT_MODE_OFFHOOK_COMMAND);
</span><span class="lines">@@ -927,14 +935,14 @@
</span><span class="cx">                of silence, starting the delay with a no signal indication makes sense.
</span><span class="cx">                We do need a 200ms delay, as that is a specification requirement. */
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_CED_2;
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             delay = 200000;
</span><span class="cx">             fe-&gt;next_tx_samples = fe-&gt;samples;
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_CED_2:
</span><span class="cx">             /* Initial 200ms delay over. Send the CED indicator */
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_CED_3;
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_CED, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_CED);
</ins><span class="cx">             fe-&gt;current_tx_data_type = T38_DATA_NONE;
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_CED_3:
</span><span class="lines">@@ -964,7 +972,7 @@
</span><span class="cx">                be sending 200ms of silence, according to T.30, starting that delay with
</span><span class="cx">                a no signal indication makes sense. */
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_CNG_2;
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             delay = 200000;
</span><span class="cx">             fe-&gt;next_tx_samples = fe-&gt;samples;
</span><span class="cx">             break;
</span><span class="lines">@@ -973,7 +981,7 @@
</span><span class="cx">                coming the other way interrupts it, or a long timeout controlled by the T.30 engine
</span><span class="cx">                expires. */
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_NONE;
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_CNG, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_CNG);
</ins><span class="cx">             fe-&gt;current_tx_data_type = T38_DATA_NONE;
</span><span class="cx">             return delay;
</span><span class="cx">         }
</span><span class="lines">@@ -1728,7 +1736,7 @@
</span><span class="cx">     case FAX_MODEM_SILENCE_TX:
</span><span class="cx">         if (s-&gt;t38_mode)
</span><span class="cx">         {
</span><del>-            t38_core_send_indicator(&amp;s-&gt;t38_fe.t38, T38_IND_NO_SIGNAL, INDICATOR_TX_COUNT);
</del><ins>+            t38_core_send_indicator(&amp;s-&gt;t38_fe.t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             s-&gt;t38_fe.next_tx_samples = s-&gt;t38_fe.samples + ms_to_samples(700);
</span><span class="cx">             s-&gt;t38_fe.timed_step = T38_TIMED_STEP_PAUSE;
</span><span class="cx">             s-&gt;t38_fe.current_tx_data_type = T38_DATA_NONE;
</span><span class="lines">@@ -1755,7 +1763,7 @@
</span><span class="cx">         /* Send 200ms of silence to &quot;push&quot; the last audio out */
</span><span class="cx">         if (s-&gt;t38_mode)
</span><span class="cx">         {
</span><del>-            t38_core_send_indicator(&amp;s-&gt;t38_fe.t38, T38_IND_NO_SIGNAL, INDICATOR_TX_COUNT);
</del><ins>+            t38_core_send_indicator(&amp;s-&gt;t38_fe.t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">         }
</span><span class="cx">         else
</span><span class="cx">         {
</span><span class="lines">@@ -2424,17 +2432,21 @@
</span><span class="cx">     {
</span><span class="cx">         /* Continuous streaming mode, as used for TPKT over TCP transport */
</span><span class="cx">         /* Inhibit indicator packets */
</span><del>-        s-&gt;t38_fe.t38.indicator_tx_count = 0;
-        s-&gt;t38_fe.t38.data_tx_count = 1;
-        s-&gt;t38_fe.t38.data_end_tx_count = 1;
</del><ins>+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_INDICATOR, 0);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_CONTROL_DATA, 1);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_CONTROL_DATA_END, 1);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA, 1);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA_END, 1);
</ins><span class="cx">         s-&gt;t38_fe.ms_per_tx_chunk = 0;
</span><span class="cx">     }
</span><span class="cx">     else
</span><span class="cx">     {
</span><span class="cx">         /* Paced streaming mode, as used for UDP transports */
</span><del>-        s-&gt;t38_fe.t38.indicator_tx_count = INDICATOR_TX_COUNT;
-        s-&gt;t38_fe.t38.data_tx_count = DATA_TX_COUNT;
-        s-&gt;t38_fe.t38.data_end_tx_count = DATA_END_TX_COUNT;
</del><ins>+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_INDICATOR, INDICATOR_TX_COUNT);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_CONTROL_DATA, DATA_TX_COUNT);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_CONTROL_DATA_END, DATA_END_TX_COUNT);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA, DATA_TX_COUNT);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA_END, DATA_END_TX_COUNT);
</ins><span class="cx">         s-&gt;t38_fe.ms_per_tx_chunk = MS_PER_TX_CHUNK;
</span><span class="cx">     }
</span><span class="cx">     set_octets_per_data_packet(s, 300);
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrct38_corec"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/t38_core.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/t38_core.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/t38_core.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: t38_core.c,v 1.52 2009/02/10 13:06:46 steveu Exp $
</del><ins>+ * $Id: t38_core.c,v 1.53 2009/07/14 13:54:22 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -777,7 +777,7 @@
</span><span class="cx"> }
</span><span class="cx"> /*- End of function --------------------------------------------------------*/
</span><span class="cx"> 
</span><del>-SPAN_DECLARE(int) t38_core_send_indicator(t38_core_state_t *s, int indicator, int count)
</del><ins>+SPAN_DECLARE(int) t38_core_send_indicator(t38_core_state_t *s, int indicator)
</ins><span class="cx"> {
</span><span class="cx">     uint8_t buf[100];
</span><span class="cx">     int len;
</span><span class="lines">@@ -789,7 +789,7 @@
</span><span class="cx">     {
</span><span class="cx">         /* Zero is a valid count, to suppress the transmission of indicators when the
</span><span class="cx">            transport means they are not needed - e.g. TPKT/TCP. */
</span><del>-        if (count)
</del><ins>+        if (s-&gt;category_control[T38_PACKET_CATEGORY_INDICATOR])
</ins><span class="cx">         {
</span><span class="cx">             if ((len = t38_encode_indicator(s, buf, indicator)) &lt; 0)
</span><span class="cx">             {
</span><span class="lines">@@ -797,7 +797,7 @@
</span><span class="cx">                 return len;
</span><span class="cx">             }
</span><span class="cx">             span_log(&amp;s-&gt;logging, SPAN_LOG_FLOW, &quot;Tx %5d: indicator %s\n&quot;, s-&gt;tx_seq_no, t38_indicator_to_str(indicator));
</span><del>-            s-&gt;tx_packet_handler(s, s-&gt;tx_packet_user_data, buf, len, count);
</del><ins>+            s-&gt;tx_packet_handler(s, s-&gt;tx_packet_user_data, buf, len, s-&gt;category_control[T38_PACKET_CATEGORY_INDICATOR]);
</ins><span class="cx">             s-&gt;tx_seq_no = (s-&gt;tx_seq_no + 1) &amp; 0xFFFF;
</span><span class="cx">             delay = modem_startup_time[indicator].training;
</span><span class="cx">             if (s-&gt;allow_for_tep)
</span><span class="lines">@@ -815,7 +815,7 @@
</span><span class="cx"> }
</span><span class="cx"> /*- End of function --------------------------------------------------------*/
</span><span class="cx"> 
</span><del>-SPAN_DECLARE(int) t38_core_send_data(t38_core_state_t *s, int data_type, int field_type, const uint8_t field[], int field_len, int count)
</del><ins>+SPAN_DECLARE(int) t38_core_send_data(t38_core_state_t *s, int data_type, int field_type, const uint8_t field[], int field_len, int category)
</ins><span class="cx"> {
</span><span class="cx">     t38_data_field_t field0;
</span><span class="cx">     uint8_t buf[1000];
</span><span class="lines">@@ -829,13 +829,13 @@
</span><span class="cx">         span_log(&amp;s-&gt;logging, SPAN_LOG_FLOW, &quot;T.38 data len is %d\n&quot;, len);
</span><span class="cx">         return len;
</span><span class="cx">     }
</span><del>-    s-&gt;tx_packet_handler(s, s-&gt;tx_packet_user_data, buf, len, count);
</del><ins>+    s-&gt;tx_packet_handler(s, s-&gt;tx_packet_user_data, buf, len, s-&gt;category_control[category]);
</ins><span class="cx">     s-&gt;tx_seq_no = (s-&gt;tx_seq_no + 1) &amp; 0xFFFF;
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="cx"> /*- End of function --------------------------------------------------------*/
</span><span class="cx"> 
</span><del>-SPAN_DECLARE(int) t38_core_send_data_multi_field(t38_core_state_t *s, int data_type, const t38_data_field_t field[], int fields, int count)
</del><ins>+SPAN_DECLARE(int) t38_core_send_data_multi_field(t38_core_state_t *s, int data_type, const t38_data_field_t field[], int fields, int category)
</ins><span class="cx"> {
</span><span class="cx">     uint8_t buf[1000];
</span><span class="cx">     int len;
</span><span class="lines">@@ -845,7 +845,7 @@
</span><span class="cx">         span_log(&amp;s-&gt;logging, SPAN_LOG_FLOW, &quot;T.38 data len is %d\n&quot;, len);
</span><span class="cx">         return len;
</span><span class="cx">     }
</span><del>-    s-&gt;tx_packet_handler(s, s-&gt;tx_packet_user_data, buf, len, count);
</del><ins>+    s-&gt;tx_packet_handler(s, s-&gt;tx_packet_user_data, buf, len, s-&gt;category_control[category]);
</ins><span class="cx">     s-&gt;tx_seq_no = (s-&gt;tx_seq_no + 1) &amp; 0xFFFF;
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="lines">@@ -911,6 +911,18 @@
</span><span class="cx"> }
</span><span class="cx"> /*- End of function --------------------------------------------------------*/
</span><span class="cx"> 
</span><ins>+SPAN_DECLARE(void) t38_set_redundancy_control(t38_core_state_t *s, int category, int setting)
+{
+    s-&gt;category_control[category] = setting;
+}
+/*- End of function --------------------------------------------------------*/
+
+SPAN_DECLARE(void) t38_set_fastest_image_data_rate(t38_core_state_t *s, int max_rate)
+{
+    s-&gt;fastest_image_data_rate = max_rate;
+}
+/*- End of function --------------------------------------------------------*/
+
</ins><span class="cx"> SPAN_DECLARE(int) t38_get_fastest_image_data_rate(t38_core_state_t *s)
</span><span class="cx"> {
</span><span class="cx">     return s-&gt;fastest_image_data_rate;
</span><span class="lines">@@ -952,6 +964,13 @@
</span><span class="cx">     s-&gt;t38_version = 0;
</span><span class="cx">     s-&gt;check_sequence_numbers = TRUE;
</span><span class="cx"> 
</span><ins>+    /* Set some defaults */
+    s-&gt;category_control[T38_PACKET_CATEGORY_INDICATOR] = 1;
+    s-&gt;category_control[T38_PACKET_CATEGORY_CONTROL_DATA] = 1;
+    s-&gt;category_control[T38_PACKET_CATEGORY_CONTROL_DATA_END] = 1;
+    s-&gt;category_control[T38_PACKET_CATEGORY_IMAGE_DATA] = 1;
+    s-&gt;category_control[T38_PACKET_CATEGORY_IMAGE_DATA_END] = 1;
+
</ins><span class="cx">     /* Set the initial current receive states to something invalid, so the
</span><span class="cx">        first data received is seen as a change of state. */
</span><span class="cx">     s-&gt;current_rx_indicator = -1;
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrct38_gatewayc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/t38_gateway.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/t38_gateway.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/t38_gateway.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: t38_gateway.c,v 1.163 2009/05/16 03:34:45 steveu Exp $
</del><ins>+ * $Id: t38_gateway.c,v 1.164 2009/07/14 13:54:22 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -1498,7 +1498,7 @@
</span><span class="cx"> 
</span><span class="cx"> static void announce_training(t38_gateway_state_t *s)
</span><span class="cx"> {
</span><del>-    t38_core_send_indicator(&amp;s-&gt;t38x.t38, set_fast_packetisation(s), s-&gt;t38x.t38.indicator_tx_count);
</del><ins>+    t38_core_send_indicator(&amp;s-&gt;t38x.t38, set_fast_packetisation(s));
</ins><span class="cx"> }
</span><span class="cx"> /*- End of function --------------------------------------------------------*/
</span><span class="cx"> 
</span><span class="lines">@@ -1552,7 +1552,7 @@
</span><span class="cx">                 /* TODO: If the carrier really did fall for good during the 500ms TEP blocking timeout, we
</span><span class="cx">                          won't declare the no-signal condition. */
</span><span class="cx">                 non_ecm_push_residue(s);
</span><del>-                t38_core_send_indicator(&amp;s-&gt;t38x.t38, T38_IND_NO_SIGNAL, s-&gt;t38x.t38.indicator_tx_count);
</del><ins>+                t38_core_send_indicator(&amp;s-&gt;t38x.t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             }
</span><span class="cx">             restart_rx_modem(s);
</span><span class="cx">             break;
</span><span class="lines">@@ -1586,7 +1586,7 @@
</span><span class="cx">         /* There is a fractional octet in progress. We might as well send every last bit we can. */
</span><span class="cx">         s-&gt;data[s-&gt;data_ptr++] = (uint8_t) (s-&gt;bit_stream &lt;&lt; (8 - s-&gt;bit_no));
</span><span class="cx">     }
</span><del>-    t38_core_send_data(&amp;t-&gt;t38x.t38, t-&gt;t38x.current_tx_data_type, T38_FIELD_T4_NON_ECM_SIG_END, s-&gt;data, s-&gt;data_ptr, t-&gt;t38x.t38.data_end_tx_count);
</del><ins>+    t38_core_send_data(&amp;t-&gt;t38x.t38, t-&gt;t38x.current_tx_data_type, T38_FIELD_T4_NON_ECM_SIG_END, s-&gt;data, s-&gt;data_ptr, T38_PACKET_CATEGORY_IMAGE_DATA_END);
</ins><span class="cx">     s-&gt;in_bits += s-&gt;bits_absorbed;
</span><span class="cx">     s-&gt;out_octets += s-&gt;data_ptr;
</span><span class="cx">     s-&gt;data_ptr = 0;
</span><span class="lines">@@ -1600,7 +1600,7 @@
</span><span class="cx">     s = &amp;t-&gt;core.to_t38;
</span><span class="cx">     if (s-&gt;data_ptr)
</span><span class="cx">     {
</span><del>-        t38_core_send_data(&amp;t-&gt;t38x.t38, t-&gt;t38x.current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, s-&gt;data, s-&gt;data_ptr, t-&gt;t38x.t38.data_tx_count);
</del><ins>+        t38_core_send_data(&amp;t-&gt;t38x.t38, t-&gt;t38x.current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, s-&gt;data, s-&gt;data_ptr, T38_PACKET_CATEGORY_IMAGE_DATA);
</ins><span class="cx">         s-&gt;in_bits += s-&gt;bits_absorbed;
</span><span class="cx">         s-&gt;out_octets += s-&gt;data_ptr;
</span><span class="cx">         s-&gt;bits_absorbed = 0;
</span><span class="lines">@@ -1682,6 +1682,7 @@
</span><span class="cx"> static void hdlc_rx_status(hdlc_rx_state_t *t, int status)
</span><span class="cx"> {
</span><span class="cx">     t38_gateway_state_t *s;
</span><ins>+    int category;
</ins><span class="cx"> 
</span><span class="cx">     s = (t38_gateway_state_t *) t-&gt;frame_user_data;
</span><span class="cx">     span_log(&amp;s-&gt;logging, SPAN_LOG_FLOW, &quot;HDLC signal status is %s (%d)\n&quot;, signal_status_to_str(status), status);
</span><span class="lines">@@ -1712,8 +1713,9 @@
</span><span class="cx">     case SIG_STATUS_CARRIER_DOWN:
</span><span class="cx">         if (t-&gt;framing_ok_announced)
</span><span class="cx">         {
</span><del>-            t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_SIG_END, NULL, 0, s-&gt;t38x.t38.data_end_tx_count);
-            t38_core_send_indicator(&amp;s-&gt;t38x.t38, T38_IND_NO_SIGNAL, s-&gt;t38x.t38.indicator_tx_count);
</del><ins>+            category = (s-&gt;t38x.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA_END  :  T38_PACKET_CATEGORY_IMAGE_DATA_END;
+            t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_SIG_END, NULL, 0, category);
+            t38_core_send_indicator(&amp;s-&gt;t38x.t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             t-&gt;framing_ok_announced = FALSE;
</span><span class="cx">         }
</span><span class="cx">         restart_rx_modem(s);
</span><span class="lines">@@ -1739,6 +1741,7 @@
</span><span class="cx"> {
</span><span class="cx">     t38_gateway_state_t *s;
</span><span class="cx">     t38_gateway_to_t38_state_t *u;
</span><ins>+    int category;
</ins><span class="cx">     
</span><span class="cx">     s = (t38_gateway_state_t *) t-&gt;frame_user_data;
</span><span class="cx">     u = &amp;s-&gt;core.to_t38;
</span><span class="lines">@@ -1757,6 +1760,7 @@
</span><span class="cx">         /* Hit HDLC flag */
</span><span class="cx">         if (t-&gt;flags_seen &gt;= t-&gt;framing_ok_threshold)
</span><span class="cx">         {
</span><ins>+            category = (s-&gt;t38x.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA  :  T38_PACKET_CATEGORY_IMAGE_DATA;
</ins><span class="cx">             if (t-&gt;len)
</span><span class="cx">             {
</span><span class="cx">                 /* This is not back-to-back flags */
</span><span class="lines">@@ -1765,7 +1769,7 @@
</span><span class="cx">                     if (u-&gt;data_ptr)
</span><span class="cx">                     {
</span><span class="cx">                         bit_reverse(u-&gt;data, t-&gt;buffer + t-&gt;len - 2 - u-&gt;data_ptr, u-&gt;data_ptr);
</span><del>-                        t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_DATA, u-&gt;data, u-&gt;data_ptr, s-&gt;t38x.t38.data_tx_count);
</del><ins>+                        t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_DATA, u-&gt;data, u-&gt;data_ptr, category);
</ins><span class="cx">                     }
</span><span class="cx">                     /*endif*/
</span><span class="cx">                     if (t-&gt;num_bits != 7)
</span><span class="lines">@@ -1775,7 +1779,7 @@
</span><span class="cx">                         /* It seems some boxes may not like us sending a _SIG_END here, and then another
</span><span class="cx">                            when the carrier actually drops. Lets just send T38_FIELD_HDLC_FCS_OK here. */
</span><span class="cx">                         if (t-&gt;len &gt; 2)
</span><del>-                            t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_FCS_BAD, NULL, 0, s-&gt;t38x.t38.data_tx_count);
</del><ins>+                            t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_FCS_BAD, NULL, 0, category);
</ins><span class="cx">                         /*endif*/
</span><span class="cx">                     }
</span><span class="cx">                     else if ((u-&gt;crc &amp; 0xFFFF) != 0xF0B8)
</span><span class="lines">@@ -1785,7 +1789,7 @@
</span><span class="cx">                         /* It seems some boxes may not like us sending a _SIG_END here, and then another
</span><span class="cx">                            when the carrier actually drops. Lets just send T38_FIELD_HDLC_FCS_OK here. */
</span><span class="cx">                         if (t-&gt;len &gt; 2)
</span><del>-                            t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_FCS_BAD, NULL, 0, s-&gt;t38x.t38.data_tx_count);
</del><ins>+                            t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_FCS_BAD, NULL, 0, category);
</ins><span class="cx">                         /*endif*/
</span><span class="cx">                     }
</span><span class="cx">                     else
</span><span class="lines">@@ -1810,7 +1814,7 @@
</span><span class="cx">                         /*endif*/
</span><span class="cx">                         /* It seems some boxes may not like us sending a _SIG_END here, and then another
</span><span class="cx">                            when the carrier actually drops. Lets just send T38_FIELD_HDLC_FCS_OK here. */
</span><del>-                        t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_FCS_OK, NULL, 0, s-&gt;t38x.t38.data_tx_count);
</del><ins>+                        t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_FCS_OK, NULL, 0, category);
</ins><span class="cx">                     }
</span><span class="cx">                     /*endif*/
</span><span class="cx">                 }
</span><span class="lines">@@ -1835,7 +1839,7 @@
</span><span class="cx">             {
</span><span class="cx">                 if (s-&gt;t38x.current_tx_data_type == T38_DATA_V21)
</span><span class="cx">                 {
</span><del>-                    t38_core_send_indicator(&amp;s-&gt;t38x.t38, set_slow_packetisation(s), s-&gt;t38x.t38.indicator_tx_count);
</del><ins>+                    t38_core_send_indicator(&amp;s-&gt;t38x.t38, set_slow_packetisation(s));
</ins><span class="cx">                     s-&gt;audio.modems.rx_signal_present = TRUE;
</span><span class="cx">                 }
</span><span class="cx">                 /*endif*/
</span><span class="lines">@@ -1861,6 +1865,7 @@
</span><span class="cx"> {
</span><span class="cx">     t38_gateway_state_t *s;
</span><span class="cx">     t38_gateway_to_t38_state_t *u;
</span><ins>+    int category;
</ins><span class="cx"> 
</span><span class="cx">     if (new_bit &lt; 0)
</span><span class="cx">     {
</span><span class="lines">@@ -1914,7 +1919,8 @@
</span><span class="cx">     if (++u-&gt;data_ptr &gt;= u-&gt;octets_per_data_packet)
</span><span class="cx">     {
</span><span class="cx">         bit_reverse(u-&gt;data, t-&gt;buffer + t-&gt;len - 2 - u-&gt;data_ptr, u-&gt;data_ptr);
</span><del>-        t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_DATA, u-&gt;data, u-&gt;data_ptr, s-&gt;t38x.t38.data_tx_count);
</del><ins>+        category = (s-&gt;t38x.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA  :  T38_PACKET_CATEGORY_IMAGE_DATA;
+        t38_core_send_data(&amp;s-&gt;t38x.t38, s-&gt;t38x.current_tx_data_type, T38_FIELD_HDLC_DATA, u-&gt;data, u-&gt;data_ptr, category);
</ins><span class="cx">         /* Since we delay transmission by 2 octets, we should now have sent the last of the data octets when
</span><span class="cx">            we have just received the last of the CRC octets. */
</span><span class="cx">         u-&gt;data_ptr = 0;
</span><span class="lines">@@ -2028,7 +2034,7 @@
</span><span class="cx">                 break;
</span><span class="cx">             case TIMED_MODE_STARTUP:
</span><span class="cx">                 /* Ensure a no-signal condition goes out the moment the received audio starts */
</span><del>-                t38_core_send_indicator(&amp;s-&gt;t38x.t38, T38_IND_NO_SIGNAL, s-&gt;t38x.t38.indicator_tx_count);
</del><ins>+                t38_core_send_indicator(&amp;s-&gt;t38x.t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">                 s-&gt;core.timed_mode = TIMED_MODE_IDLE;
</span><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="lines">@@ -2127,11 +2133,11 @@
</span><span class="cx"> {
</span><span class="cx">     s-&gt;core.supported_modems = supported_modems;
</span><span class="cx">     if ((s-&gt;core.supported_modems &amp; T30_SUPPORT_V17))
</span><del>-        s-&gt;t38x.t38.fastest_image_data_rate = 14400;
</del><ins>+        t38_set_fastest_image_data_rate(&amp;s-&gt;t38x.t38, 14400);
</ins><span class="cx">     else if ((s-&gt;core.supported_modems &amp; T30_SUPPORT_V29))
</span><del>-        s-&gt;t38x.t38.fastest_image_data_rate = 9600;
</del><ins>+        t38_set_fastest_image_data_rate(&amp;s-&gt;t38x.t38, 9600);
</ins><span class="cx">     else
</span><del>-        s-&gt;t38x.t38.fastest_image_data_rate = 4800;
</del><ins>+        t38_set_fastest_image_data_rate(&amp;s-&gt;t38x.t38, 4800);
</ins><span class="cx">     /*endif*/
</span><span class="cx"> }
</span><span class="cx"> /*- End of function --------------------------------------------------------*/
</span><span class="lines">@@ -2160,8 +2166,8 @@
</span><span class="cx"> /*- End of function --------------------------------------------------------*/
</span><span class="cx"> 
</span><span class="cx"> SPAN_DECLARE(void) t38_gateway_set_real_time_frame_handler(t38_gateway_state_t *s,
</span><del>-                                                            t38_gateway_real_time_frame_handler_t *handler,
-                                                            void *user_data)
</del><ins>+                                                           t38_gateway_real_time_frame_handler_t *handler,
+                                                           void *user_data)
</ins><span class="cx"> {
</span><span class="cx">     s-&gt;core.real_time_frame_handler = handler;
</span><span class="cx">     s-&gt;core.real_time_frame_user_data = user_data;
</span><span class="lines">@@ -2191,8 +2197,8 @@
</span><span class="cx"> /*- End of function --------------------------------------------------------*/
</span><span class="cx"> 
</span><span class="cx"> static int t38_gateway_t38_init(t38_gateway_state_t *t,
</span><del>-                                 t38_tx_packet_handler_t *tx_packet_handler,
-                                 void *tx_packet_user_data)
</del><ins>+                                t38_tx_packet_handler_t *tx_packet_handler,
+                                void *tx_packet_user_data)
</ins><span class="cx"> {
</span><span class="cx">     t38_gateway_t38_state_t *s;
</span><span class="cx"> 
</span><span class="lines">@@ -2204,9 +2210,11 @@
</span><span class="cx">                   (void *) t,
</span><span class="cx">                   tx_packet_handler,
</span><span class="cx">                   tx_packet_user_data);
</span><del>-    s-&gt;t38.indicator_tx_count = INDICATOR_TX_COUNT;
-    s-&gt;t38.data_tx_count = DATA_TX_COUNT;
-    s-&gt;t38.data_end_tx_count = DATA_END_TX_COUNT;
</del><ins>+    t38_set_redundancy_control(&amp;s-&gt;t38, T38_PACKET_CATEGORY_INDICATOR, INDICATOR_TX_COUNT);
+    t38_set_redundancy_control(&amp;s-&gt;t38, T38_PACKET_CATEGORY_CONTROL_DATA, DATA_TX_COUNT);
+    t38_set_redundancy_control(&amp;s-&gt;t38, T38_PACKET_CATEGORY_CONTROL_DATA_END, DATA_END_TX_COUNT);
+    t38_set_redundancy_control(&amp;s-&gt;t38, T38_PACKET_CATEGORY_IMAGE_DATA, DATA_TX_COUNT);
+    t38_set_redundancy_control(&amp;s-&gt;t38, T38_PACKET_CATEGORY_IMAGE_DATA_END, DATA_END_TX_COUNT);
</ins><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="cx"> /*- End of function --------------------------------------------------------*/
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrct38_terminalc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/t38_terminal.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/t38_terminal.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/t38_terminal.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: t38_terminal.c,v 1.125 2009/05/02 04:43:48 steveu Exp $
</del><ins>+ * $Id: t38_terminal.c,v 1.127 2009/07/14 13:54:22 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -565,7 +565,7 @@
</span><span class="cx">         case T38_TIMED_STEP_NON_ECM_MODEM:
</span><span class="cx">             /* Create a 75ms silence */
</span><span class="cx">             if (fe-&gt;t38.current_tx_indicator != T38_IND_NO_SIGNAL)
</span><del>-                delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+                delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             else
</span><span class="cx">                 delay = 75000;
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_NON_ECM_MODEM_2;
</span><span class="lines">@@ -573,7 +573,7 @@
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_NON_ECM_MODEM_2:
</span><span class="cx">             /* Switch on a fast modem, and give the training time to complete */
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, fe-&gt;next_tx_indicator, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, fe-&gt;next_tx_indicator);
</ins><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_NON_ECM_MODEM_3;
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_NON_ECM_MODEM_3:
</span><span class="lines">@@ -605,12 +605,13 @@
</span><span class="cx">                 else
</span><span class="cx">                 {
</span><span class="cx">                     /* If we are sending quickly there seems no point in doing any padding */
</span><del>-                    t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_SIG_END, buf, len, fe-&gt;t38.data_end_tx_count);
</del><ins>+                    t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_SIG_END, buf, len, T38_PACKET_CATEGORY_IMAGE_DATA_END);
</ins><span class="cx">                     fe-&gt;timed_step = T38_TIMED_STEP_NON_ECM_MODEM_5;
</span><span class="cx">                     delay = 0;
</span><ins>+                    break;
</ins><span class="cx">                 }
</span><span class="cx">             }
</span><del>-            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, buf, len, fe-&gt;t38.data_tx_count);
</del><ins>+            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, buf, len, T38_PACKET_CATEGORY_IMAGE_DATA);
</ins><span class="cx">             delay = bits_to_us(s, 8*len);
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_NON_ECM_MODEM_4:
</span><span class="lines">@@ -621,7 +622,7 @@
</span><span class="cx">             {
</span><span class="cx">                 len += fe-&gt;non_ecm_trailer_bytes;
</span><span class="cx">                 memset(buf, 0, len);
</span><del>-                t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_SIG_END, buf, len, fe-&gt;t38.data_end_tx_count);
</del><ins>+                t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_SIG_END, buf, len, T38_PACKET_CATEGORY_IMAGE_DATA_END);
</ins><span class="cx">                 fe-&gt;timed_step = T38_TIMED_STEP_NON_ECM_MODEM_5;
</span><span class="cx">                 /* Allow a bit more time than the data will take to play out, to ensure the far ATA does not
</span><span class="cx">                    cut things short. */
</span><span class="lines">@@ -632,13 +633,13 @@
</span><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">             memset(buf, 0, len);
</span><del>-            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, buf, len, fe-&gt;t38.data_tx_count);
</del><ins>+            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_T4_NON_ECM_DATA, buf, len, T38_PACKET_CATEGORY_IMAGE_DATA);
</ins><span class="cx">             delay = bits_to_us(s, 8*len);
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_NON_ECM_MODEM_5:
</span><span class="cx">             /* This should not be needed, since the message above indicates the end of the signal, but it
</span><span class="cx">                seems like it can improve compatibility with quirky implementations. */
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_NONE;
</span><span class="cx">             return delay;
</span><span class="cx">         }
</span><span class="lines">@@ -652,6 +653,7 @@
</span><span class="cx">     t38_terminal_front_end_state_t *fe;
</span><span class="cx">     uint8_t buf[MAX_OCTETS_PER_UNPACED_CHUNK + 50];
</span><span class="cx">     t38_data_field_t data_fields[2];
</span><ins>+    int category;
</ins><span class="cx">     int previous;
</span><span class="cx">     int delay;
</span><span class="cx">     int i;
</span><span class="lines">@@ -664,7 +666,7 @@
</span><span class="cx">         case T38_TIMED_STEP_HDLC_MODEM:
</span><span class="cx">             /* Create a 75ms silence */
</span><span class="cx">             if (fe-&gt;t38.current_tx_indicator != T38_IND_NO_SIGNAL)
</span><del>-                delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+                delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             else
</span><span class="cx">                 delay = 75000;
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_2;
</span><span class="lines">@@ -672,7 +674,7 @@
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_HDLC_MODEM_2:
</span><span class="cx">             /* Send HDLC preambling */
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, fe-&gt;next_tx_indicator, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, fe-&gt;next_tx_indicator);
</ins><span class="cx">             delay += t38_core_send_flags_delay(&amp;fe-&gt;t38, fe-&gt;next_tx_indicator);
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_3;
</span><span class="cx">             break;
</span><span class="lines">@@ -701,7 +703,8 @@
</span><span class="cx">                         data_fields[1].field_type = T38_FIELD_HDLC_FCS_OK_SIG_END;
</span><span class="cx">                         data_fields[1].field = NULL;
</span><span class="cx">                         data_fields[1].field_len = 0;
</span><del>-                        t38_core_send_data_multi_field(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, data_fields, 2, fe-&gt;t38.data_tx_count);
</del><ins>+                        category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA_END  :  T38_PACKET_CATEGORY_IMAGE_DATA_END;
+                        t38_core_send_data_multi_field(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, data_fields, 2, category);
</ins><span class="cx">                         fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_5;
</span><span class="cx">                         /* We add a bit of extra time here, as with some implementations
</span><span class="cx">                            the carrier falling too abruptly causes data loss. */
</span><span class="lines">@@ -715,22 +718,25 @@
</span><span class="cx">                         data_fields[1].field_type = T38_FIELD_HDLC_FCS_OK;
</span><span class="cx">                         data_fields[1].field = NULL;
</span><span class="cx">                         data_fields[1].field_len = 0;
</span><del>-                        t38_core_send_data_multi_field(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, data_fields, 2, fe-&gt;t38.data_tx_count);
</del><ins>+                        category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA  :  T38_PACKET_CATEGORY_IMAGE_DATA;
+                        t38_core_send_data_multi_field(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, data_fields, 2, category);
</ins><span class="cx">                         fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_3;
</span><span class="cx">                         delay = bits_to_us(s, i*8 + fe-&gt;hdlc_tx.extra_bits);
</span><span class="cx">                     }
</span><ins>+                    break;
</ins><span class="cx">                 }
</span><del>-                else
-                {
-                    t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_HDLC_DATA, &amp;fe-&gt;hdlc_tx.buf[fe-&gt;hdlc_tx.ptr], i, fe-&gt;t38.data_tx_count);
-                    fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_4;
-                    delay = bits_to_us(s, i*8);
-                }
-                break;
</del><ins>+                category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA  :  T38_PACKET_CATEGORY_IMAGE_DATA;
+                t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_HDLC_DATA, &amp;fe-&gt;hdlc_tx.buf[fe-&gt;hdlc_tx.ptr], i, category);
+                fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_4;
</ins><span class="cx">             }
</span><del>-            t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_HDLC_DATA, &amp;fe-&gt;hdlc_tx.buf[fe-&gt;hdlc_tx.ptr], fe-&gt;octets_per_data_packet, fe-&gt;t38.data_tx_count);
-            fe-&gt;hdlc_tx.ptr += fe-&gt;octets_per_data_packet;
-            delay = bits_to_us(s, fe-&gt;octets_per_data_packet*8);
</del><ins>+            else
+            {
+                i = fe-&gt;octets_per_data_packet;
+                category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA  :  T38_PACKET_CATEGORY_IMAGE_DATA;
+                t38_core_send_data(&amp;fe-&gt;t38, fe-&gt;current_tx_data_type, T38_FIELD_HDLC_DATA, &amp;fe-&gt;hdlc_tx.buf[fe-&gt;hdlc_tx.ptr], i, category);
+                fe-&gt;hdlc_tx.ptr += i;
+            }
+            delay = bits_to_us(s, i*8);
</ins><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_HDLC_MODEM_4:
</span><span class="cx">             /* End of HDLC frame */
</span><span class="lines">@@ -742,7 +748,8 @@
</span><span class="cx">             if (fe-&gt;hdlc_tx.len &lt; 0)
</span><span class="cx">             {
</span><span class="cx">                 /* End of transmission */
</span><del>-                t38_core_send_data(&amp;fe-&gt;t38, previous, T38_FIELD_HDLC_FCS_OK_SIG_END, NULL, 0, fe-&gt;t38.data_end_tx_count);
</del><ins>+                category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA_END  :  T38_PACKET_CATEGORY_IMAGE_DATA_END;
+                t38_core_send_data(&amp;fe-&gt;t38, previous, T38_FIELD_HDLC_FCS_OK_SIG_END, NULL, 0, category);
</ins><span class="cx">                 fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_5;
</span><span class="cx">                 /* We add a bit of extra time here, as with some implementations
</span><span class="cx">                    the carrier falling too abruptly causes data loss. */
</span><span class="lines">@@ -759,7 +766,8 @@
</span><span class="cx">                 span_log(&amp;s-&gt;logging, SPAN_LOG_FLOW, &quot;No new frame or end transmission condition.\n&quot;);
</span><span class="cx">             }
</span><span class="cx">             /* Finish the current frame off, and prepare for the next one. */
</span><del>-            t38_core_send_data(&amp;fe-&gt;t38, previous, T38_FIELD_HDLC_FCS_OK, NULL, 0, fe-&gt;t38.data_tx_count);
</del><ins>+            category = (s-&gt;t38_fe.current_tx_data_type == T38_DATA_V21)  ?  T38_PACKET_CATEGORY_CONTROL_DATA  :  T38_PACKET_CATEGORY_IMAGE_DATA;
+            t38_core_send_data(&amp;fe-&gt;t38, previous, T38_FIELD_HDLC_FCS_OK, NULL, 0, category);
</ins><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_HDLC_MODEM_3;
</span><span class="cx">             /* We should now wait enough time for everything to clear through an analogue modem at the far end. */
</span><span class="cx">             delay = bits_to_us(s, fe-&gt;hdlc_tx.extra_bits);
</span><span class="lines">@@ -767,7 +775,7 @@
</span><span class="cx">         case T38_TIMED_STEP_HDLC_MODEM_5:
</span><span class="cx">             /* Note that some boxes do not like us sending a T38_FIELD_HDLC_SIG_END at this point.
</span><span class="cx">                A T38_IND_NO_SIGNAL should always be OK. */
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_NONE;
</span><span class="cx">             return delay;
</span><span class="cx">         }
</span><span class="lines">@@ -792,14 +800,14 @@
</span><span class="cx">                of silence, starting the delay with a no signal indication makes sense.
</span><span class="cx">                We do need a 200ms delay, as that is a specification requirement. */
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_CED_2;
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             delay = 200000;
</span><span class="cx">             fe-&gt;next_tx_samples = fe-&gt;samples;
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_CED_2:
</span><span class="cx">             /* Initial 200ms delay over. Send the CED indicator */
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_CED_3;
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_CED, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_CED);
</ins><span class="cx">             fe-&gt;current_tx_data_type = T38_DATA_NONE;
</span><span class="cx">             break;
</span><span class="cx">         case T38_TIMED_STEP_CED_3:
</span><span class="lines">@@ -829,7 +837,7 @@
</span><span class="cx">                be sending 200ms of silence, according to T.30, starting that delay with
</span><span class="cx">                a no signal indication makes sense. */
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_CNG_2;
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_NO_SIGNAL);
</ins><span class="cx">             delay = 200000;
</span><span class="cx">             fe-&gt;next_tx_samples = fe-&gt;samples;
</span><span class="cx">             break;
</span><span class="lines">@@ -838,7 +846,7 @@
</span><span class="cx">                coming the other way interrupts it, or a long timeout controlled by the T.30 engine
</span><span class="cx">                expires. */
</span><span class="cx">             fe-&gt;timed_step = T38_TIMED_STEP_NONE;
</span><del>-            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_CNG, fe-&gt;t38.indicator_tx_count);
</del><ins>+            delay = t38_core_send_indicator(&amp;fe-&gt;t38, T38_IND_CNG);
</ins><span class="cx">             fe-&gt;current_tx_data_type = T38_DATA_NONE;
</span><span class="cx">             return delay;
</span><span class="cx">         }
</span><span class="lines">@@ -1032,17 +1040,21 @@
</span><span class="cx">     {
</span><span class="cx">         /* Continuous streaming mode, as used for TPKT over TCP transport */
</span><span class="cx">         /* Inhibit indicator packets */
</span><del>-        s-&gt;t38_fe.t38.indicator_tx_count = 0;
-        s-&gt;t38_fe.t38.data_tx_count = 1;
-        s-&gt;t38_fe.t38.data_end_tx_count = 1;
</del><ins>+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_INDICATOR, 0);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_CONTROL_DATA, 1);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_CONTROL_DATA_END, 1);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA, 1);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA_END, 1);
</ins><span class="cx">         s-&gt;t38_fe.ms_per_tx_chunk = 0;
</span><span class="cx">     }
</span><span class="cx">     else
</span><span class="cx">     {
</span><span class="cx">         /* Paced streaming mode, as used for UDP transports */
</span><del>-        s-&gt;t38_fe.t38.indicator_tx_count = INDICATOR_TX_COUNT;
-        s-&gt;t38_fe.t38.data_tx_count = DATA_TX_COUNT;
-        s-&gt;t38_fe.t38.data_end_tx_count = DATA_END_TX_COUNT;
</del><ins>+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_INDICATOR, INDICATOR_TX_COUNT);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_CONTROL_DATA, DATA_TX_COUNT);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_CONTROL_DATA_END, DATA_END_TX_COUNT);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA, DATA_TX_COUNT);
+        t38_set_redundancy_control(&amp;s-&gt;t38_fe.t38, T38_PACKET_CATEGORY_IMAGE_DATA_END, DATA_END_TX_COUNT);
</ins><span class="cx">         s-&gt;t38_fe.ms_per_tx_chunk = MS_PER_TX_CHUNK;
</span><span class="cx">     }
</span><span class="cx">     set_octets_per_data_packet(s, 300);
</span><span class="lines">@@ -1095,7 +1107,7 @@
</span><span class="cx">                   (void *) t,
</span><span class="cx">                   tx_packet_handler,
</span><span class="cx">                   tx_packet_user_data);
</span><del>-    s-&gt;t38.fastest_image_data_rate = 14400;
</del><ins>+    t38_set_fastest_image_data_rate(&amp;s-&gt;t38, 14400);
</ins><span class="cx"> 
</span><span class="cx">     s-&gt;rx_signal_present = FALSE;
</span><span class="cx">     s-&gt;timed_step = T38_TIMED_STEP_NONE;
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcv17rxc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/v17rx.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/v17rx.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/v17rx.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v17rx.c,v 1.149 2009/06/02 16:03:56 steveu Exp $
</del><ins>+ * $Id: v17rx.c,v 1.153 2009/07/09 14:17:57 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -262,24 +262,30 @@
</span><span class="cx"> 
</span><span class="cx"> #if defined(SPANDSP_USE_FIXED_POINTx)
</span><span class="cx"> static void tune_equalizer(v17_rx_state_t *s, const complexi16_t *z, const complexi16_t *target)
</span><ins>+{
+    complexi16_t err;
+
+    /* Find the x and y mismatch from the exact constellation position. */
+    err.re = target-&gt;re*FP_FACTOR - z-&gt;re;
+    err.im = target-&gt;im*FP_FACTOR - z-&gt;im;
+    //span_log(&amp;s-&gt;logging, SPAN_LOG_FLOW, &quot;Equalizer error %f\n&quot;, sqrt(err.re*err.re + err.im*err.im));
+    err.re = ((int32_t) err.re*(int32_t) s-&gt;eq_delta) &gt;&gt; 15;
+    err.im = ((int32_t) err.im*(int32_t) s-&gt;eq_delta) &gt;&gt; 15;
+    cvec_circular_lmsi16(s-&gt;eq_buf, s-&gt;eq_coeff, V17_EQUALIZER_LEN, s-&gt;eq_step, &amp;err);
+}
</ins><span class="cx"> #else
</span><span class="cx"> static void tune_equalizer(v17_rx_state_t *s, const complexf_t *z, const complexf_t *target)
</span><del>-#endif
</del><span class="cx"> {
</span><span class="cx">     complexf_t err;
</span><span class="cx"> 
</span><span class="cx">     /* Find the x and y mismatch from the exact constellation position. */
</span><span class="cx">     err = complex_subf(target, z);
</span><del>-    //span_log(&amp;s-&gt;logging, SPAN_LOG_FLOW, &quot;Equalizer error %f\n&quot;, sqrt(ez.re*ez.re + ez.im*ez.im));
</del><ins>+    //span_log(&amp;s-&gt;logging, SPAN_LOG_FLOW, &quot;Equalizer error %f\n&quot;, sqrt(err.re*err.re + err.im*err.im));
</ins><span class="cx">     err.re *= s-&gt;eq_delta;
</span><span class="cx">     err.im *= s-&gt;eq_delta;
</span><del>-
-    err = complex_subf(target, z);
-    err.re *= s-&gt;eq_delta;
-    err.im *= s-&gt;eq_delta;
</del><span class="cx">     cvec_circular_lmsf(s-&gt;eq_buf, s-&gt;eq_coeff, V17_EQUALIZER_LEN, s-&gt;eq_step, &amp;err);
</span><span class="cx"> }
</span><del>-/*- End of function --------------------------------------------------------*/
</del><ins>+#endif
</ins><span class="cx"> 
</span><span class="cx"> static int descramble(v17_rx_state_t *s, int in_bit)
</span><span class="cx"> {
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcv27ter_rxc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/v27ter_rx.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/v27ter_rx.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/v27ter_rx.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v27ter_rx.c,v 1.130 2009/06/02 16:03:56 steveu Exp $
</del><ins>+ * $Id: v27ter_rx.c,v 1.131 2009/07/08 15:11:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -271,11 +271,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if defined(SPANDSP_USE_FIXED_POINTx)
</span><span class="cx"> static void tune_equalizer(v27ter_rx_state_t *s, const complexi16_t *z, const complexi16_t *target)
</span><del>-#else
-static void tune_equalizer(v27ter_rx_state_t *s, const complexf_t *z, const complexf_t *target)
-#endif
</del><span class="cx"> {
</span><del>-#if defined(SPANDSP_USE_FIXED_POINTx)
</del><span class="cx">     complexi16_t err;
</span><span class="cx"> 
</span><span class="cx">     /* Find the x and y mismatch from the exact constellation position. */
</span><span class="lines">@@ -284,7 +280,10 @@
</span><span class="cx">     err.re = ((int32_t) err.re*(int32_t) s-&gt;eq_delta) &gt;&gt; 15;
</span><span class="cx">     err.im = ((int32_t) err.im*(int32_t) s-&gt;eq_delta) &gt;&gt; 15;
</span><span class="cx">     cvec_circular_lmsi16(s-&gt;eq_buf, s-&gt;eq_coeff, V27TER_EQUALIZER_LEN, s-&gt;eq_step, &amp;err);
</span><ins>+}
</ins><span class="cx"> #else
</span><ins>+static void tune_equalizer(v27ter_rx_state_t *s, const complexf_t *z, const complexf_t *target)
+{
</ins><span class="cx">     complexf_t err;
</span><span class="cx"> 
</span><span class="cx">     /* Find the x and y mismatch from the exact constellation position. */
</span><span class="lines">@@ -292,8 +291,8 @@
</span><span class="cx">     err.re *= s-&gt;eq_delta;
</span><span class="cx">     err.im *= s-&gt;eq_delta;
</span><span class="cx">     cvec_circular_lmsf(s-&gt;eq_buf, s-&gt;eq_coeff, V27TER_EQUALIZER_LEN, s-&gt;eq_step, &amp;err);
</span><del>-#endif
</del><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> /*- End of function --------------------------------------------------------*/
</span><span class="cx"> 
</span><span class="cx"> #if defined(SPANDSP_USE_FIXED_POINTx)
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcv29rxc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/v29rx.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/v29rx.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/v29rx.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v29rx.c,v 1.166 2009/06/02 16:03:56 steveu Exp $
</del><ins>+ * $Id: v29rx.c,v 1.167 2009/07/08 15:11:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -278,11 +278,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if defined(SPANDSP_USE_FIXED_POINT)
</span><span class="cx"> static void tune_equalizer(v29_rx_state_t *s, const complexi16_t *z, const complexi16_t *target)
</span><del>-#else
-static void tune_equalizer(v29_rx_state_t *s, const complexf_t *z, const complexf_t *target)
-#endif
</del><span class="cx"> {
</span><del>-#if defined(SPANDSP_USE_FIXED_POINT)
</del><span class="cx">     complexi16_t err;
</span><span class="cx"> 
</span><span class="cx">     /* Find the x and y mismatch from the exact constellation position. */
</span><span class="lines">@@ -291,7 +287,10 @@
</span><span class="cx">     err.re = ((int32_t) err.re*(int32_t) s-&gt;eq_delta) &gt;&gt; 15;
</span><span class="cx">     err.im = ((int32_t) err.im*(int32_t) s-&gt;eq_delta) &gt;&gt; 15;
</span><span class="cx">     cvec_circular_lmsi16(s-&gt;eq_buf, s-&gt;eq_coeff, V29_EQUALIZER_LEN, s-&gt;eq_step, &amp;err);
</span><ins>+}
</ins><span class="cx"> #else
</span><ins>+static void tune_equalizer(v29_rx_state_t *s, const complexf_t *z, const complexf_t *target)
+{
</ins><span class="cx">     complexf_t err;
</span><span class="cx"> 
</span><span class="cx">     /* Find the x and y mismatch from the exact constellation position. */
</span><span class="lines">@@ -299,8 +298,8 @@
</span><span class="cx">     err.re *= s-&gt;eq_delta;
</span><span class="cx">     err.im *= s-&gt;eq_delta;
</span><span class="cx">     cvec_circular_lmsf(s-&gt;eq_buf, s-&gt;eq_coeff, V29_EQUALIZER_LEN, s-&gt;eq_step, &amp;err);
</span><del>-#endif
</del><span class="cx"> }
</span><ins>+#endif
</ins><span class="cx"> /*- End of function --------------------------------------------------------*/
</span><span class="cx"> 
</span><span class="cx"> static int scrambled_training_bit(v29_rx_state_t *s)
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcv8c"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/v8.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/v8.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/v8.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v8.c,v 1.38 2009/02/03 16:28:40 steveu Exp $
</del><ins>+ * $Id: v8.c,v 1.39 2009/06/24 00:34:38 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx">  
</span><span class="cx"> /*! \file */
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcvector_floatc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/vector_float.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/vector_float.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/vector_float.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: vector_float.c,v 1.21 2009/02/05 15:57:27 steveu Exp $
</del><ins>+ * $Id: vector_float.c,v 1.22 2009/07/12 09:23:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -41,33 +41,10 @@
</span><span class="cx"> #if defined(HAVE_MATH_H)
</span><span class="cx"> #include &lt;math.h&gt;
</span><span class="cx"> #endif
</span><del>-#include &quot;floating_fudge.h&quot;
</del><span class="cx"> #include &lt;assert.h&gt;
</span><span class="cx"> 
</span><del>-#if defined(SPANDSP_USE_MMX)
-#include &lt;mmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE)
-#include &lt;xmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE2)
-#include &lt;emmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE3)
-#include &lt;pmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4_1)
-#include &lt;smmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4_2)
-#include &lt;nmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4A)
-#include &lt;ammintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE5)
-#include &lt;bmmintrin.h&gt;
-#endif
</del><ins>+#include &quot;floating_fudge.h&quot;
+#include &quot;mmx_sse_decs.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;spandsp/telephony.h&quot;
</span><span class="cx"> #include &quot;spandsp/vector_float.h&quot;
</span></span></pre></div>
<a id="freeswitchtrunklibsspandspsrcvector_intc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/src/vector_int.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/src/vector_int.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/src/vector_int.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * License along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: vector_int.c,v 1.25 2009/02/21 04:27:46 steveu Exp $
</del><ins>+ * $Id: vector_int.c,v 1.26 2009/07/12 09:23:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -41,33 +41,10 @@
</span><span class="cx"> #if defined(HAVE_MATH_H)
</span><span class="cx"> #include &lt;math.h&gt;
</span><span class="cx"> #endif
</span><del>-#include &quot;floating_fudge.h&quot;
</del><span class="cx"> #include &lt;assert.h&gt;
</span><span class="cx"> 
</span><del>-#if defined(SPANDSP_USE_MMX)
-#include &lt;mmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE)
-#include &lt;xmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE2)
-#include &lt;emmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE3)
-#include &lt;pmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4_1)
-#include &lt;smmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4_2)
-#include &lt;nmmintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE4A)
-#include &lt;ammintrin.h&gt;
-#endif
-#if defined(SPANDSP_USE_SSE5)
-#include &lt;bmmintrin.h&gt;
-#endif
</del><ins>+#include &quot;floating_fudge.h&quot;
+#include &quot;mmx_sse_decs.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;spandsp/telephony.h&quot;
</span><span class="cx"> #include &quot;spandsp/vector_int.h&quot;
</span></span></pre></div>
<a id="freeswitchtrunklibsspandsptestsfsk_testsc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/tests/fsk_tests.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/tests/fsk_tests.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/tests/fsk_tests.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: fsk_tests.c,v 1.57 2009/05/30 15:23:13 steveu Exp $
</del><ins>+ * $Id: fsk_tests.c,v 1.58 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \page fsk_tests_page FSK modem tests
</span><span class="lines">@@ -126,37 +126,37 @@
</span><span class="cx">     switch (reason)
</span><span class="cx">     {
</span><span class="cx">     case BERT_REPORT_SYNCED:
</span><del>-        printf(&quot;%d: BERT report synced\n&quot;, channel);
</del><ins>+        fprintf(stderr, &quot;%d: BERT report synced\n&quot;, channel);
</ins><span class="cx">         break;
</span><span class="cx">     case BERT_REPORT_UNSYNCED:
</span><del>-        printf(&quot;%d: BERT report unsync'ed\n&quot;, channel);
</del><ins>+        fprintf(stderr, &quot;%d: BERT report unsync'ed\n&quot;, channel);
</ins><span class="cx">         break;
</span><span class="cx">     case BERT_REPORT_REGULAR:
</span><del>-        printf(&quot;%d: BERT report regular - %d bits, %d bad bits, %d resyncs\n&quot;, channel, results-&gt;total_bits, results-&gt;bad_bits, results-&gt;resyncs);
</del><ins>+        fprintf(stderr, &quot;%d: BERT report regular - %d bits, %d bad bits, %d resyncs\n&quot;, channel, results-&gt;total_bits, results-&gt;bad_bits, results-&gt;resyncs);
</ins><span class="cx">         break;
</span><span class="cx">     case BERT_REPORT_GT_10_2:
</span><del>-        printf(&quot;%d: BERT report &gt; 1 in 10^2\n&quot;, channel);
</del><ins>+        fprintf(stderr, &quot;%d: BERT report &gt; 1 in 10^2\n&quot;, channel);
</ins><span class="cx">         break;
</span><span class="cx">     case BERT_REPORT_LT_10_2:
</span><del>-        printf(&quot;%d: BERT report &lt; 1 in 10^2\n&quot;, channel);
</del><ins>+        fprintf(stderr, &quot;%d: BERT report &lt; 1 in 10^2\n&quot;, channel);
</ins><span class="cx">         break;
</span><span class="cx">     case BERT_REPORT_LT_10_3:
</span><del>-        printf(&quot;%d: BERT report &lt; 1 in 10^3\n&quot;, channel);
</del><ins>+        fprintf(stderr, &quot;%d: BERT report &lt; 1 in 10^3\n&quot;, channel);
</ins><span class="cx">         break;
</span><span class="cx">     case BERT_REPORT_LT_10_4:
</span><del>-        printf(&quot;%d: BERT report &lt; 1 in 10^4\n&quot;, channel);
</del><ins>+        fprintf(stderr, &quot;%d: BERT report &lt; 1 in 10^4\n&quot;, channel);
</ins><span class="cx">         break;
</span><span class="cx">     case BERT_REPORT_LT_10_5:
</span><del>-        printf(&quot;%d: BERT report &lt; 1 in 10^5\n&quot;, channel);
</del><ins>+        fprintf(stderr, &quot;%d: BERT report &lt; 1 in 10^5\n&quot;, channel);
</ins><span class="cx">         break;
</span><span class="cx">     case BERT_REPORT_LT_10_6:
</span><del>-        printf(&quot;%d: BERT report &lt; 1 in 10^6\n&quot;, channel);
</del><ins>+        fprintf(stderr, &quot;%d: BERT report &lt; 1 in 10^6\n&quot;, channel);
</ins><span class="cx">         break;
</span><span class="cx">     case BERT_REPORT_LT_10_7:
</span><del>-        printf(&quot;%d: BERT report &lt; 1 in 10^7\n&quot;, channel);
</del><ins>+        fprintf(stderr, &quot;%d: BERT report &lt; 1 in 10^7\n&quot;, channel);
</ins><span class="cx">         break;
</span><span class="cx">     default:
</span><del>-        printf(&quot;%d: BERT report reason %d\n&quot;, channel, reason);
</del><ins>+        fprintf(stderr, &quot;%d: BERT report reason %d\n&quot;, channel, reason);
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="freeswitchtrunklibsspandsptestst38_core_testsc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/tests/t38_core_tests.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/tests/t38_core_tests.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/tests/t38_core_tests.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: t38_core_tests.c,v 1.15 2009/04/25 14:17:47 steveu Exp $
</del><ins>+ * $Id: t38_core_tests.c,v 1.16 2009/07/14 13:54:22 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \file */
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx">     for (i = 0;  i &lt; 100;  i++)
</span><span class="cx">     {
</span><span class="cx">         current_indicator = i;
</span><del>-        if (t38_core_send_indicator(a, i, 3) &lt; 0)
</del><ins>+        if (t38_core_send_indicator(a, i) &lt; 0)
</ins><span class="cx">             break;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -150,7 +150,7 @@
</span><span class="cx">             current_data_type = i;
</span><span class="cx">             current_field_type = j;
</span><span class="cx">             skip = 99;
</span><del>-            if (t38_core_send_data(a, i, j, (uint8_t *) &quot;&quot;, 0, 1) &lt; 0)
</del><ins>+            if (t38_core_send_data(a, i, j, (uint8_t *) &quot;&quot;, 0, T38_PACKET_CATEGORY_CONTROL_DATA) &lt; 0)
</ins><span class="cx">                 break;
</span><span class="cx">         }
</span><span class="cx">         if (j == 0)
</span><span class="lines">@@ -165,7 +165,7 @@
</span><span class="cx">             current_data_type = i;
</span><span class="cx">             current_field_type = j;
</span><span class="cx">             skip = 99;
</span><del>-            if (t38_core_send_data(a, i, j, (uint8_t *) &quot;ABCD&quot;, 4, 1) &lt; 0)
</del><ins>+            if (t38_core_send_data(a, i, j, (uint8_t *) &quot;ABCD&quot;, 4, T38_PACKET_CATEGORY_CONTROL_DATA) &lt; 0)
</ins><span class="cx">                 break;
</span><span class="cx">         }
</span><span class="cx">         if (j == 0)
</span><span class="lines">@@ -190,7 +190,7 @@
</span><span class="cx">             field[1].field_type = T38_FIELD_T4_NON_ECM_SIG_END;
</span><span class="cx">             field[1].field = field_body[1];
</span><span class="cx">             field[1].field_len = field_len[1];
</span><del>-            if (t38_core_send_data_multi_field(a, i, field, 2, 1) &lt; 0)
</del><ins>+            if (t38_core_send_data_multi_field(a, i, field, 2, T38_PACKET_CATEGORY_CONTROL_DATA) &lt; 0)
</ins><span class="cx">                 break;
</span><span class="cx">         }
</span><span class="cx">         if (j == 0)
</span></span></pre></div>
<a id="freeswitchtrunklibsspandsptestsv17_testsc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/tests/v17_tests.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/tests/v17_tests.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/tests/v17_tests.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -23,7 +23,7 @@
</span><span class="cx">  * along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v17_tests.c,v 1.103 2009/05/30 15:23:14 steveu Exp $
</del><ins>+ * $Id: v17_tests.c,v 1.104 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \page v17_tests_page V.17 modem tests
</span><span class="lines">@@ -104,11 +104,11 @@
</span><span class="cx">     switch (reason)
</span><span class="cx">     {
</span><span class="cx">     case BERT_REPORT_REGULAR:
</span><del>-        printf(&quot;BERT report regular - %d bits, %d bad bits, %d resyncs\n&quot;, results-&gt;total_bits, results-&gt;bad_bits, results-&gt;resyncs);
</del><ins>+        fprintf(stderr, &quot;BERT report regular - %d bits, %d bad bits, %d resyncs\n&quot;, results-&gt;total_bits, results-&gt;bad_bits, results-&gt;resyncs);
</ins><span class="cx">         memcpy(&amp;latest_results, results, sizeof(latest_results));
</span><span class="cx">         break;
</span><span class="cx">     default:
</span><del>-        printf(&quot;BERT report %s\n&quot;, bert_event_to_str(reason));
</del><ins>+        fprintf(stderr, &quot;BERT report %s\n&quot;, bert_event_to_str(reason));
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="freeswitchtrunklibsspandsptestsv22bis_testsc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/tests/v22bis_tests.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/tests/v22bis_tests.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/tests/v22bis_tests.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v22bis_tests.c,v 1.62 2009/05/30 15:23:14 steveu Exp $
</del><ins>+ * $Id: v22bis_tests.c,v 1.63 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \page v22bis_tests_page V.22bis modem tests
</span><span class="lines">@@ -94,17 +94,18 @@
</span><span class="cx">     switch (reason)
</span><span class="cx">     {
</span><span class="cx">     case BERT_REPORT_REGULAR:
</span><del>-        printf(&quot;V.22bis rx %p BERT report regular - %d bits, %d bad bits, %d resyncs\n&quot;,
-               user_data,
-               results-&gt;total_bits,
-               results-&gt;bad_bits,
-               results-&gt;resyncs);
</del><ins>+        fprintf(stderr, &quot;V.22bis rx %p BERT report regular - %d bits, %d bad bits, %d resyncs\n&quot;,
+                user_data,
+                results-&gt;total_bits,
+                results-&gt;bad_bits,
+                results-&gt;resyncs);
</ins><span class="cx">         memcpy(&amp;s-&gt;latest_results, results, sizeof(s-&gt;latest_results));
</span><span class="cx">         break;
</span><span class="cx">     default:
</span><del>-        printf(&quot;V.22bis rx %p BERT report %s\n&quot;,
-               user_data,
-               bert_event_to_str(reason));
</del><ins>+        fprintf(stderr, 
+                &quot;V.22bis rx %p BERT report %s\n&quot;,
+                user_data,
+                bert_event_to_str(reason));
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="freeswitchtrunklibsspandsptestsv27ter_testsc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/tests/v27ter_tests.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/tests/v27ter_tests.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/tests/v27ter_tests.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v27ter_tests.c,v 1.105 2009/05/30 15:23:14 steveu Exp $
</del><ins>+ * $Id: v27ter_tests.c,v 1.106 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \page v27ter_tests_page V.27ter modem tests
</span><span class="lines">@@ -100,11 +100,11 @@
</span><span class="cx">     switch (reason)
</span><span class="cx">     {
</span><span class="cx">     case BERT_REPORT_REGULAR:
</span><del>-        printf(&quot;BERT report regular - %d bits, %d bad bits, %d resyncs\n&quot;, results-&gt;total_bits, results-&gt;bad_bits, results-&gt;resyncs);
</del><ins>+        fprintf(stderr, &quot;BERT report regular - %d bits, %d bad bits, %d resyncs\n&quot;, results-&gt;total_bits, results-&gt;bad_bits, results-&gt;resyncs);
</ins><span class="cx">         memcpy(&amp;latest_results, results, sizeof(latest_results));
</span><span class="cx">         break;
</span><span class="cx">     default:
</span><del>-        printf(&quot;BERT report %s\n&quot;, bert_event_to_str(reason));
</del><ins>+        fprintf(stderr, &quot;BERT report %s\n&quot;, bert_event_to_str(reason));
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="freeswitchtrunklibsspandsptestsv29_testsc"></a>
<div class="modfile"><h4>Modified: freeswitch/trunk/libs/spandsp/tests/v29_tests.c (14315 => 14316)</h4>
<pre class="diff"><span>
<span class="info">--- freeswitch/trunk/libs/spandsp/tests/v29_tests.c        2009-07-22 03:40:40 UTC (rev 14315)
+++ freeswitch/trunk/libs/spandsp/tests/v29_tests.c        2009-07-22 15:18:32 UTC (rev 14316)
</span><span class="lines">@@ -22,7 +22,7 @@
</span><span class="cx">  * along with this program; if not, write to the Free Software
</span><span class="cx">  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
</span><span class="cx">  *
</span><del>- * $Id: v29_tests.c,v 1.119 2009/05/30 15:23:14 steveu Exp $
</del><ins>+ * $Id: v29_tests.c,v 1.120 2009/07/09 13:52:09 steveu Exp $
</ins><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*! \page v29_tests_page V.29 modem tests
</span><span class="lines">@@ -99,11 +99,11 @@
</span><span class="cx">     switch (reason)
</span><span class="cx">     {
</span><span class="cx">     case BERT_REPORT_REGULAR:
</span><del>-        printf(&quot;BERT report regular - %d bits, %d bad bits, %d resyncs\n&quot;, results-&gt;total_bits, results-&gt;bad_bits, results-&gt;resyncs);
</del><ins>+        fprintf(stderr, &quot;BERT report regular - %d bits, %d bad bits, %d resyncs\n&quot;, results-&gt;total_bits, results-&gt;bad_bits, results-&gt;resyncs);
</ins><span class="cx">         memcpy(&amp;latest_results, results, sizeof(latest_results));
</span><span class="cx">         break;
</span><span class="cx">     default:
</span><del>-        printf(&quot;BERT report %s\n&quot;, bert_event_to_str(reason));
</del><ins>+        fprintf(stderr, &quot;BERT report %s\n&quot;, bert_event_to_str(reason));
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre>
</div>
</div>
<div id="footer">See you at ClueCon</div>

</body>
</html>