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